畜史が成りしものを、思考学が曲がった判断を、肥料学がなぜ死んだかを録すなら、技術学は実装の層で何を使い、何を使わないかを録す。
目的はただ一つ。軽量な頭(小さなAIモデル・記憶を持たない次のこっこ)でも、この書を読めば島ぐらしの水面や影がどう描かれているかをゼロから調べ直さずに再現できること。
畜学七相の七「一器に納む」=HTML1ファイル自己完結、という掟の具体的な実装形は次の三層に収束している。
| 層 | 使うもの | 使わないもの |
|---|---|---|
| 描画 | 生WebGL1(自前シェーダ)/Canvas2D/SVG | Three.js・Babylon.js等の外部3Dエンジン |
| 音 | WebAudio(矩形波/三角波/ノイズ合成、自前インパルス応答リバーブ) | 外部音声ファイル(mp3/wav)の同梱・CDN読込 |
| 保存・共有 | localStorage(進行状況)/Firebase(世界ランキングrankings/*のみ) | それ以外の外部API・バックエンド |
外部3Dエンジン禁止は比喩ではなく実務の制約。 島ぐらし2旧版(mori2/)はThree.js依存+シェーダprecision不統一(頂点highp・フラグメントmediump)でiOS起動不能となり、公開から3日で取り下げられた(詳細は肥料学 巻二)。後継のshima2/は素のWebGL1・全シェーダprecision highp float統一で建て直し、現在mori/にも同じ設計が継承されている。
WebGLを使うのは mori・shima2・galaxy・pulse・rom・splat3d の6作のみ。いずれも外部ライブラリを使わず、createShader→compileShader→createProgram→linkProgram を自前ヘルパーで書く共通スタイル。
シェーダ12種:depth/meshDepth(影)・terrain・water・mesh・grass・sky・sprite・noise・bright/blur/post(ブルーム)。シャドウマップ・fbmノイズ地形・水面フレネル・大気フォグ・ACES風トーンマップ・GPUハイトマップ生成を実装。
品質自動フォールバック:HQシェーダのコンパイルをtry/catchし、失敗時は簡易版へ自動降格(低性能端末対応)。
moriの技術的祖先。シェーダ約10種、構成はmoriと対応(空・水面グリッド・GPUハイトフィールド・シャドウマップ・風になびく草)。
全フラグメントシェーダ共通のprecision highp floatプレフィックスを先頭に付与する設計。mori2の死因(precision不統一)を踏まえた直接の対策がここにある。
シェーダ3種(星雲・瞬く星・インスタンシング火花)のみの軽量構成。WebGL2優先取得、WebGL完全非対応環境向けの2D星空フォールバックあり(6作中唯一)。メインゲームプレイはCanvas2D、WebGLは背景レイヤー。
シェーダ2種(スプライト・トンネル)。z除算による疑似3D遠近、頂点シェーダの羽ばたきアニメーション。ANGLE_instanced_arrays必須(非対応環境は例外throw=救わない設計)。
シェーダ1種のみ。SDF(符号付き距離関数)で六角形クリスタルを描画、フレネル風リムライト・コア発光。6作中唯一alpha:trueでCanvas2D背景に透過合成。地形もシャドウも要らないなら、この規模で十分という実例。
シェーダ2種(地面・ペイント面/スプライト)。プレイヤーの塗り跡をCanvas2Dで描画→WebGLテクスチャへ部分転送しワールド合成するインクペイント表現が核。地形は平面的で、mori/shima2にあるシャドウ・水面フレネル・ブルームは無い。
WebGLを使わない大多数(Canvas2D・SVG)はこの型に収束している。新作の既定はこちらから始めるのが最も再現しやすい。
requestAnimationFrameによる固定/可変タイムステップのゲームループ。
devicePixelRatioでcanvas実ピクセルを合わせ、CSSサイズは論理ピクセルのまま拡大鈍化を防ぐ。
単一2Dコンテキストへの直接描画(レイヤー分離なし)。パーティクルは配列管理+毎フレーム全走査で十分な規模。
pointer/touchイベントを共通化し、PC/スマホ両対応。
WebAudioで矩形波/三角波/ノイズを合成(romの合成音はCanvas2D側ゲームプレイと共存する好例)。SVGの2作(jusshiki/story)は静的な図表が中心で、アニメーションはCSS transitionまたは軽量なJSでの属性書き換え。
mori/shima2の構成を土台にする。ただし技術的複雑度は格ではない──必要な複雑さだけを持ち込む(romのように単一シェーダで足りるなら、それで足りる)。
Canvas2Dのみで作る(巻三の型に従う)。畜物語の大多数はこちら。WebGLを使う理由が無いなら使わない。
メインの遊びがCanvas2Dで背景演出だけWebGL(galaxy/pulse型)か、逆にメインをWebGLにしてHUD/UI/生成物だけCanvas2D(mori/rom/splat3d型)かを先に決める。中途半端に混在させない。
mori2の死因を繰り返さない。フラグメントシェーダ先頭に共通プレフィックスを用意し、全プログラムに付与する(shima2方式)のが最も事故りにくい。
moriの「品質自動フォールバック」とpulseの「非対応なら例外throw」は対極の判断。畜物語のターゲット(親子)を考えれば、原則は救う方。