Shading 現行機能ドキュメント
ShadingはScratch VMを実行基盤に、Movieのタイムライン、Objectsの描画、PenFXの合成、Three.jsによる3D描画、メディア資産管理、タイムライン書き出しを追加した制作環境です。
このドキュメントは、2026年8月27日時点の現行実装を基準にしています。エディターに表示されるブロックと、旧プロジェクトの読み込み・実行のためだけに残る互換ブロックは分けて記述します。
描画の基本モデル
Shadingの1フレームは、次の経路で構 築されます。
Scratch Blocks / UI
│
▼
Scratch VM primitive
│ 同一 VM tick 内で状態または frame graph に記録
▼
MovieAssetManager ── PenFX compositor ── Pen framebuffer
│
└──────────── Three.js model scene / camera / lights
│
▼
preview / rendered frames
│
▼
MP4 / WebM / PNG / WAV
タイムラインが時刻を決め、render frame がその時刻の描画処理を開始します。Objectsは素材やモデルを描画し、PenFXはPenレイヤーに対してエフェクトや合成を行います。完成したフレームはプレビューに表示するか、ファイルへ書き出します。
主要な概念
| 概念 | 役割 |
|---|---|
| MovieAssetManager | タイムライン、資産、カメラ、ライト、フレーム生成、音声、キャッシュを管理するVMごとの状態 |
render frame | プレビューまたは書き出し対象の各フレームを構築するイベント |
| Objects | コスチューム、コスチュームグループ、動画、テキスト、モデルを描画する機能 |
scene | Objectsを同じThree.jsシーンと深度バッファで 評価する構造 |
| PenFX | Penレイヤーを処理する動的なLooksカテゴリ |
| frame graph | Scene、Draw、Group、Composite、Transformを順序付きで保持する描画計画 |
| Pen frame transaction | フレーム途中の未完成状態を表示せず、完成時にだけPenフレームをcommitする仕組み |
現在のツールボックス
| 表示名 | 実装上のID | 内容 |
|---|---|---|
| Objects | objects | オブジェクト描画、合成、時間レポーター、ライト |
| Looks | penfx | 標準LooksではなくPenFXの動的カテゴリ |
| Camera | motion | カメラ操作とカメラレポーター |
| Sound | sound | 時間範囲付きの音声ブロック |
| Events | events | initialize、render frame、通常のブロードキャスト |
| Control | control | Scratchの制御ブロック |
| Sensing | sensing | Scratchのセンシングブロック |
| Operators | operators | Scratchの演算子とeasing |
| Variables | data | 変数とリスト |
| My Blocks | procedures | 通常のカスタムブロック |
標準のlooksカテゴリとpenカテゴリは、現在のMovie用ツールボックスでは表示されま せん。過去のMovie Looksブロックやmyblocksshader_*がランタイムに登録されていても、現行機能の一覧には含めません。現行機能と互換性で詳しく説明します。
章の構成
- フレーム生成の基本 —
render frame、フレームグラフ、プレビューと書き出しの関係 - Objectsの基本 — 現行Objectsブロックの役割と描画モデル
- Objectsブロックリファレンス — opcode、入力、合成規則の早見表
- タイムラインと書き出し — 設定値、プリセット、出力形式、キャッシュ
- PenFXと画像効果 — 組み込みエフェクトと実行契約
- PenFXシェーダーパッケージ — 外部GLSLパッケージの形式と制限
- 素材とプロジェクト — 対応形式、
.shade、保存データ、デスクトップ版
ブロック名、opcode、既定値、互換性の扱いは、制作上の呼びやすさより現行実装との一致を優先しています。
実装を確認する場合
現行ツールボックスとランタイムの責務は、次のファイルが一次ソースです。
| ファイル | 主な責務 |
|---|---|
src/lib/make-toolbox-xml.js | 現行ツールボックスのカテゴリと表示ブロック |
src/lib/object-blocks.js | Objectsの登録、primitive、入力、互換opcode |
src/lib/object-blocks-ui.js | Objectsの資産選択、モデル、ビデオUI |
src/lib/movie-asset-manager*.js | Movieの状態、frame graph、タイムライン、メディア、資産、書き出し |
src/lib/project-format.js | .shade、mb3 marker、Movie feature検出 |
src/lib/pen-fx/ | PenFX runtime、shader packageの検証・登録・保存 |
src/lib/model-runtime.js | Three.jsのモデル、カメラ、ライト、深度描画 |
electron/ | デスクトップ起動、保存、GPU backend |
ブロック一覧はgetInfo()や互換登録の一覧ではなく、make-toolbox-xml.jsが生成する現行ツールボックスを基準にします。