← ソースコード説明書

packages/web - PixiJS WebGL エンジン

作成日: 2026-03-06 / 更新日: 2026-06-10

概要

PixiJS + Filament.js ベースの Web エンジン。Op 命令の実行、スプライト・テキスト・UI のレンダリング、VRM 3D キャラクター(表情 / SpringBone / 独自トゥーン・Filament)、Live2D キャラクター、48 種のスクリーンフィルター、ゲームシステム(セーブ/ロード、バックログ、設定)を提供する。プレビューエンジン (:5175) として動作。

ディレクトリ構成

packages/web/
├── src/
│   ├── engine/
│   │   ├── KscRunner.ts                # KSC 実行ループ (80+行)
│   │   ├── KscHostAdapter.ts           # KSC→IOpHandler ブリッジ (300+行)
│   │   ├── resolveScenarioConfig.ts    # シナリオ設定解決
│   │   └── _deprecated/WebEngine.ts    # 旧エンジン
│   ├── renderer/
│   │   ├── WebOpHandler.ts             # メイン Op 実行器 (1000+行)
│   │   ├── LayerManager.ts             # レイヤー階層管理
│   │   ├── TextWindow.ts              # テキスト描画
│   │   ├── ChoiceOverlay.ts           # 選択肢 UI
│   │   ├── BacklogStore.ts            # 対話履歴
│   │   ├── ScreenFilter.ts           # フィルター管理
│   │   ├── screenFx.ts               # 画面エフェクト (フラッシュ、フェード)
│   │   ├── shake.ts                   # 画面揺れ
│   │   ├── fadeTo.ts                  # フェード遷移
│   │   ├── lerpPosition.ts           # 位置補間
│   │   ├── easing.ts                  # イージング関数
│   │   ├── PC98Filter.ts             # PC-98 レトロフィルター
│   │   ├── filters/                   # カスタムフィルター
│   │   │   ├── BloomFilter.ts
│   │   │   ├── ChromaticAberrationFilter.ts
│   │   │   ├── ColorTintFilter.ts
│   │   │   ├── CRTFilter.ts
│   │   │   ├── FocusBlurFilter.ts
│   │   │   ├── GameBoyFilter.ts
│   │   │   ├── GlitchFilter.ts
│   │   │   ├── NightFilter.ts
│   │   │   ├── NoiseFilter.ts
│   │   │   ├── OldFilmFilter.ts
│   │   │   ├── PixelateFilter.ts
│   │   │   ├── RainFilter.ts
│   │   │   ├── UnderwaterFilter.ts
│   │   │   ├── VignetteFilter.ts
│   │   │   └── shaderUtils.ts
│   │   └── ui/
│   │       ├── BacklogScreen.ts      # バックログ画面
│   │       ├── SaveLoadScreen.ts     # セーブ/ロード画面
│   │       ├── MenuScreen.ts         # メニュー画面
│   │       ├── SettingsScreen.ts     # 設定画面
│   │       ├── TitleScreen.ts        # タイトル画面
│   │       ├── EndScreen.ts          # エンド画面
│   │       ├── EquipmentScreen.ts    # 装備画面
│   │       └── ShopScreen.ts         # ショップ画面
│   ├── systems/
│   │   ├── FlagSystem.ts             # フラグ管理
│   │   └── InventorySystem.ts        # アイテムインベントリ
│   ├── audio/
│   │   └── AudioManager.ts           # Web Audio API ラッパー (60+行)
│   ├── input/
│   │   └── InputManager.ts           # ポインター/キーボード入力
│   ├── storage/
│   │   └── StorageManager.ts         # IndexedDB セーブ/ロード
│   ├── ui/
│   │   ├── LoadingScreen.ts          # ローディング画面
│   │   ├── SkeletonUI.ts             # スケルトン UI
│   │   └── DiagnosticsOverlay.ts     # 診断オーバーレイ
│   ├── utils/
│   │   ├── Logger.ts                 # ログ出力
│   │   └── LRUCache.ts              # LRU キャッシュ
│   ├── config/
│   │   └── UserConfig.ts             # ユーザー設定
│   ├── main.ts                       # エントリポイント
│   ├── ksc-demo.ts                   # デモスクリプトローダー
│   ├── timeline-demo.ts             # タイムラインデモ
│   └── ksc-demo.html                # デモ HTML
├── test/
│   ├── game-systems.e2e.test.ts
│   └── KscRunner.e2e.test.ts
├── package.json
├── vite.config.ts                    # ポート 5175
└── vitest.config.ts

主要ファイル

ファイル行数役割
WebOpHandler.ts1000+Op 実行の中核。スプライト管理、テキスト描画、音声制御、画面状態管理
KscHostAdapter.ts300+KSC VM の HostAPI 実装。KSC コマンド → WebOpHandler メソッド変換
KscRunner.ts80+KSC 実行ループ。ソースコード → コンパイル → VM 実行
ScreenFilter.tsフィルター管理。48 種のカスタムフィルター切り替え
AudioManager.ts60+Web Audio API。BGM/SE/VOICE カテゴリ別音量管理

レイヤー構成

Stage
├── Background Layer (z: 0)     # 背景画像
├── Character Layer (z: 1)      # キャラクタースプライト
├── Overlay Layer (z: 2)        # オーバーレイ画像
└── UI Layer (z: 3)             # テキストウィンドウ、選択肢、メニュー

WebOpHandler の主要メソッド

メソッドOp 型説明
textAppendTEXT_APPENDテキスト表示 (文字送り)
bgSetBG_SET背景画像設定 (cover スケーリング)
chSetCH_SETキャラクター表示 (L/C/R 位置)
chHideCH_HIDEキャラクター非表示
chMoveCH_MOVEキャラクター移動アニメ
choiceCHOICE選択肢 UI 表示
bgmPlayBGM_PLAYBGM 再生
sePlaySE_PLAYSE 再生
voicePlayVOICE_PLAYボイス再生
waitMs / waitClick / waitVoiceEndWAIT_MS / WAIT_CLICK / WAIT_VOICE_END待機 (時間/クリック/ボイス終了)
overlaySet / overlayHideOVERLAY_SET / OVERLAY_HIDEオーバーレイ表示・非表示
screenFilterSCREEN_FILTERスクリーンフィルター適用
colorAdjustCOLOR_ADJUST色調補正
fadeBlack / fadeWhiteFADE_BLACK / FADE_WHITE黒/白フェード

メソッド名は IOpHandler(packages/core)の実定義に準拠。JUMP / VAR_SET 等の制御系 Op は IOpHandler メソッドではなく OpRunner 側で処理される。WAIT / MOVE / FADE / OVL_SET といった単一 Op は存在しない(上記の分割名が実体)。

スクリーンフィルター (48 種)

フィルター効果
Bloomグロー / 発光
ChromaticAberration色収差
ColorTint色調変更
CRTCRT モニター風
FocusBlurフォーカスブラー
GameBoyゲームボーイ風
Glitchグリッチ / ノイズ
Night夜景 / 暗転
Noiseノイズ
OldFilm古いフィルム風
Pixelateピクセル化
Rain雨エフェクト
Underwater水中エフェクト
Vignetteビネット (周辺減光)
PC98PC-98 レトロ風

ゲームシステム

システムファイル説明
セーブ/ロードStorageManager.ts, SaveLoadScreen.tsIndexedDB にセーブデータ保存
バックログBacklogStore.ts, BacklogScreen.ts対話履歴の保存・表示
設定UserConfig.ts, SettingsScreen.tsテキスト速度、音量、フルスクリーン
メニューMenuScreen.tsゲームメニュー
フラグFlagSystem.tsブール型フラグの管理
インベントリInventorySystem.tsアイテム管理
タイトルTitleScreen.tsタイトル画面
エンドEndScreen.tsエンディング画面

VRM / Live2D キャラクター

3D(VRM)と Live2D の実装。仕組み・コマンドの概要は VRM・Live2D キャラクター を参照。

VRM(src/renderer/vrm/

ファイル役割
VrmRenderer.tsFilament エンジンのラッパー。canvas/scene/camera/light を遅延初期化し、PixiJS の上(z-index)に合成。viewport / resize / transform を制御
vrmAsset.tsVRM ローダー本体。GLB 展開、humanoid ボーン解決、表情(preset + custom)解析、toon マテリアル差し替え、springBone 初期化
VrmDelegate.tsWebVrmDelegate(Web)/ NoopVrmDelegate(非対応)の抽象。レンダラを遅延生成
nodeConstraints.tsVRMC_node_constraint 1.0(roll / aim)の評価。袖・ツイスト(J_Roll / J_Aim)を駆動
springbone.tsVRMC_springBone 1.0(Verlet 積分)。髪・スカートの揺れ。コライダーは未対応
humanoid.tshumanoid ボーンのレストポーズ保持、setLocalAxisAngle() / aimChildToWorldDir() ポーズ駆動
  • 描画は Filament(WebGL)。トゥーンは独自マテリアル toon.filamat(MToon 拡張ではない)。
  • VRM 1.0 フル / 0.x レガシー。@sceneMode 2d|vrm でシーン切替。
  • ネイティブ側も packages/native-engine に VRM 実装あり:macOS / Windows / Android は各 CMake(top-level / windows/ / android/app/jni/)が Filament ライブラリ検出時に VrmRendererFilament.cppsrc/engine/vrm/*(VrmGltf / Humanoid / PosePresets / Expression / SpringBone)をビルド。Filament 不在時と iOSVrmRendererStub.cpp にフォールバック。

Live2D

ファイル役割
src/renderer/Live2DCharacter.tsモデルラッパー。モーショングループ、表情、リップシンク(ParamMouthOpenY / speak)、まばたき・呼吸
src/renderer/delegates/Live2DDelegate.tsOp ハンドラ(live2dSet / live2dHide / live2dMotion / live2dExpression、fade 対応)
  • ライブラリ: untitled-pixi-live2d-engine(Cubism 3/4/5)。Web のみ(ネイティブ未対応)。

3 系統共通ハンドラ

src/renderer/delegates/CharacterDelegate.tsCH_EXPR / CH_LIP / CH_MOTION をキャラ種別(static / live2d / kanim)で振り分ける。Op 型は packages/core/src/types/Op.ts、コマンドは packages/compiler/src/registry/commandRegistry.ts、エディタブロックは apps/editor/src/components/blocks/(VrmBlockCard / Live2DBlockCard)。

依存関係

内部パッケージ

  • @kaedevn/core (Op 型、タイムライン型)
  • @kaedevn/compiler (.ks コンパイル)
  • @kaedevn/ksc-compiler (.ksc コンパイル + VM)
  • @kaedevn/battle (バトルシステム)

主要外部ライブラリ

  • pixi.js — WebGL レンダリング
  • vite — 開発サーバー

データフロー

[KSC スクリプト]
    ↓
[KscRunner] → [ksc-compiler] → IR
    ↓
[VM] → HostAPI コールバック
    ↓
[KscHostAdapter] → WebOpHandler メソッド呼び出し
    ↓
[WebOpHandler] → PixiJS スプライト操作
    ↓
[LayerManager] → Stage 描画

テスト

  • test/game-systems.e2e.test.ts — ゲームシステム E2E テスト
  • test/KscRunner.e2e.test.ts — KSC 実行ループの E2E テスト
Ad: stickyBottom (728x90)
kaedevn - ノベルゲームを作れるプラットフォーム