メインコンテンツまでスキップ

ベイクは何を消すのか

このページは解説です。今すぐベイクを実行するにはビルド時の自動最適化をご覧ください。

一行まとめ​

ベイクは、このマテリアルで今後絶対に変わらない部分を探し、そのコードを消します。 変わる可能性があると判断すれば残します。そのため、マテリアルによっては最適化が控えめになります。

何が起きるのか​

3つの段階を踏みます。

  1. このマテリアルで何が動くのかを探します。
  2. 動かないものだけを残してコードの形を決めます。
  3. コードの形が同じマテリアル同士でシェーダー1式を共有します。

3段階目のおかげで、テクスチャや色が違っていても同じシェーダーを使えます。 コードの形に含まれるのは、サーフェスモード、カルモード、モジュールのon/off、レイヤー数、合成モード、顔かどうかだけです。 数値とテクスチャはあえて含めていません。

1段階 — 何が動くのかを探す​

MingToonはアニメーションを読むだけです。クリップもコントローラーもマテリアルも書き換えません。

4か所を調べます。アニメーションクリップのマテリアル値カーブ、Animatorに割り当てられたコントローラー、 コンポーネントの中にあるコントローラー参照、衣装トグルのようにマテリアル自体を差し替えるオブジェクト参照カーブです。

VRChatアバターでは特に重要です

Avatar DescriptorのPlayable Layerにあるコントローラーを確認してください。 このコントローラーはAnimatorに割り当てられていないことがあります。 それでもアップロード後には、そのマテリアルカーブが実際に動きます。そのため必ず保存対象に含まれます。

色のRチャンネル1つだけをアニメーションしても、その色全体が動く値として残ります。 複数のアバターが1つのマテリアルを共有している場合は、すべての側の結果を合わせて判断します。

このグループ全体をベイク除外 で直接指定した項目もそのまま残ります。 アニメーションはしないが、後からスクリプトで変更する値に使ってください。

分析が失敗した場合、「アニメーションがない」とは仮定しません。 そのマテリアルは編集状態のまま残り、Consoleに1行が記録されます。

2段階 — 実際に何が消えるのか​

消えるもの条件
使わないパスその機能が無効で、アニメーションされていない
フレネルリム、2次の形状シャドウ、深度効果全体上と同じ
無効なテクスチャモジュールの計算
レイヤー数を超えるスロットの計算ティアの境界を越えて初めて実際に減ります
すべて白と判明したマスクのテクスチャ読み取り結果が変わりません
固定された数値の計算定数に畳み込まれます

3段階 — テクスチャの焼き直し​

既定値は元のピクセルを書き換えない範囲です。 マスクが恒等であると証明できる場合、またはPBRとAOが同じテクスチャを同じUVで読む場合に、サンプルを1つ減らします。

Reviewed Texture Rewrites On Buildを有効にすると、サーフェス・ノーマルの平坦化とマスクの再パッキングまで行います。 こちらはピクセルが実際に変わる可能性があります。

ピクセルが変わる理由

テクスチャを読み直し、色空間を変え、ミップを作り直し、プラットフォーム圧縮をかけ直します。 有効にしたあとは、ベイク前後のキャプチャを直接比較してください。

失敗した場合は、そのマテリアルだけを正確に元へ戻します。 戻す値はディスクに先に保存するため、エディターが途中で落ちても復旧できます。 元に戻すことまで失敗した場合はビルドを中断します。

なぜこのマテリアルだけ最適化されなかったのか​

StudioRaming/MingToonOptimizeReport.txtとConsoleを確認してください。

記録意味
SKIPPED: animation dependency analysis failed分析が失敗したため編集状態で残しました
SKIPPED: のあとにメッセージそのマテリアルでエラーが発生し、ビルドは続行されました
1行もない対象に含まれていませんでした

最後のケースは、たいてい次の3つのいずれかです。 シーンやプレハブの範囲外、すでにベイク済みのマテリアル、前回のビルドで復元されなかったマテリアルです。

そこから生じる制約​

  • 収集範囲はビルドの種類ごとに異なります。プレイヤービルドはシーンを調べ、Warudoモードのビルドは対象プレハブだけを調べます。
  • アウトラインは、メッシュを拡張する方式とカメラ深度を読む方式の2つだけです。画面合成用の別のランタイムはありません。
  • ベイクしたマテリアルは値を変更できません。ルックを直すには、編集状態に戻してから焼き直す必要があります。

関連ページ​