ビルド時の自動最適化はどう動作するのか
このページは説明です。今すぐアップロードしたい場合は VRChat を見てください。
一行でまとめると
自動最適化は既定でオンになっています。皆さんがすることはありません。
アップロード・ビルドのコピーを軽くし、作業用のマテリアルは編集できる状態に戻します。
変換ウィザードが作った MingToon のコピーにも、この処理はそのままかかります。ウィザードの最後にオンにするものはなく、アップロードする対象は元ではなくコピーです。
きちんとかかったか確認する
- ConsoleのC#・シェーダーエラーを0件にします。
StudioRaming > MingToon > Validate Projectで環境条件を確認します。- ビルドログで候補数・スワップ数・顔ノーマルのベイク数を確認します。
- プロジェクトフォルダーの横の
StudioRaming/MingToonOptimizeReport.txtを開きます。 - VRChatの場合は、自分の画面・ミラー・Photo Cameraをそれぞれ確認します。
VRChatプロジェクトでは、Consoleに [MingToon] VRChat build hook compiled and registered. がセッションごとに1回出ます。
どこでオン・オフを切り替えるか
MingToon Manager の 軽量化 タブの アップロード時の自動最適化 カードに3つすべてがあります。
| 項目 | 既定値 | 機能 |
|---|---|---|
| ビルド・アップロード時に自動最適化(全体共通) | オン | この機能全体をオン・オフします。キャラクター単位の設定ではなくエディター全体にかかる1つのスイッチなので、ここでオフにすると他のキャラクターのアップロードでもオフになります |
| プレイモードでもビルド・シェーダー・メッシュフックを許可(オプトイン) | オフ | Play モードでも、ビルド・シェーダー・メッシュ処理のフックを走らせます |
| アップロード時もテクスチャ再書き込み(オプトイン) | オフ | レビュー済みのテクスチャ再加工を追加で許可します |
1 つ目をオフにすると、その下の2つのオプトインのトグルはカード上でたたまれます。オンに戻すと再び出ます。
開始 タブの アップロードの準備 セクションには、同じスイッチの現在の状態(オン / オフ)だけが出て、切り替えるトグルはありません。切り替えるには、その隣の 軽量化タブで変更 を押します。
アバターごとに方式も選びます。 このアバターのビルド・アップロード最適化方式 は 軽量化 タブの一番上のカードにあります。
| 方式 | いつ |
|---|---|
| FastUpload(推奨) | 既定値です。共有シェーダーを使ってアップロード時間を短縮します |
| Legacy GPU 精密最適化 | マテリアルごとに個別にベイクする従来方式が必要なときにだけ |
手動ベイク(アップロードのプレビュー)の方式は別で、見た目 タブの 軽量シェーダーベイク(エディター専用) で選びます。→ 手動Bakeと復元
何が起きるのか
- 出荷対象のRendererとAnimationClipが参照するMingToonマテリアルを集めます。
- 実際に使う機能とアニメーションされる値を分析します。
- 固定機能を定数に畳んだ軽量シェーダーを作るか、キャッシュから取り出します。
- 出荷の間だけ、マテリアルのシェーダーを軽量版に差し替えます。
- プラットフォーム別の追加処理を実行します。
- 終了・失敗・ドメインリロードのいずれかが起きたら、元の状態に戻します。
生成シェーダーは編集用と同じプロパティ契約を維持します。
ビルド中だけ変わる値は定数へ畳みません。 成功したビルドは生成プロファイルとソースキャッシュを記憶し、同じアバターの次回ビルドで再利用します。 キャッシュが温まった後の体感差は、シーンとシェーダーキャッシュの環境によって変わります。
異なるマテリアルの共有範囲
**FastUpload(推奨)**は現在のビルド内のマテリアルを対象に共有を計画します。レンダー状態と必要なパスが合うグループを作り、共通かつ外部アクセスに対して安全な値だけを定数化します。異なる色・テクスチャ・設定はマテリアルに残し、アバターごとの違いを保持します。
この計画は1回のビルド単位です。別々にアップロードしたアバターのシェーダーまで自動的に統合しません。異なるアバターの群衆で GPU 時間・描画数・メモリがどれだけ減るかは別の実測が必要です。
VRChatアバターで追加される処理
- 深度の可用性 の値をそのまま残します。AutoはAutoのまま出荷されます。
- 顔ノーマルをアップロード用コピーのMeshのUV7にベイクします。
- Face SDFがUV7を使うRendererは、同じ結果になるようLive経路を維持します。
- スロット種別ごとのテクスチャ解像度上限を、合成・パッキングで作った出力に適用します。
- VRC Light Volumesのバリアントを自動でオンにします。
- 手動ベイクとアップロード前にマスク入力レシートを準備し、未準備の入力はそのマスク最適化だけをスキップします。
- MingToonのランタイムコンポーネントを
IEditorOnlyとして表示します。削除は保証されません。
顔ノーマルのアップロード成果物は、編集用のメッシュベイクとは別の経路を使います。編集用のMeshを上書きすることはありません。
アニメーションされる値には触れません
アナライザーはAnimationClipとAnimator Controller、コンポーネントの入れ子フィールドをたどります。ランタイムでオンにする機能は、インスペクターのオプトインをオンにしないと定数に畳まれます。
- FXアニメーターで深度エフェクトを切り替え
- FXメニューでシャドウ投影を切り替え
- VRCランタイム操作を使う
オプトインは切り替えの余地を残す代わりに、関連するコードも残します。実際に変更するマテリアルにだけオンにしてください。
VRChat深度のAuto契約
Auto はカメラごとに深度テクスチャとPhoto Cameraの状態を直接読み取ります。アップロードフックはこの値を書き換えないため、AutoはAutoのまま出荷されます。
深度が必要なアバターには、代わりに深度ライトを載せます。マテリアルの値は変更しません。 → VRChat深度ライト
ミラーのブロックは別の話です。Force Onでも、ミラーでは深度モジュールがオフになります。 → 深度エフェクトはどこまで保証されるか
テクスチャ解像度の上限
テクスチャ解像度の上限(アップロード時) は 軽量化 タブの テクスチャ容量を削減 セクションにあります。この設定はプロジェクトではなく Unity エディター全体で共有されます。シーンやプレハブではなくEditorの環境設定に保存されるため、同じ PC の他の Unity プロジェクトやすべてのキャラクターに同じように適用されます。
ベース・ノーマル・MatCap・マスクのように、スロット種別ごとに最大解像度を決めます。制限なし は出力サイズをそのまま保ちます。元テクスチャの最大解像度や圧縮のインポート設定は変更せず、合成・パッキングで新しく作られるメイン・ノーマル・マスクなどの出力に上限を適用します。そのまま使われる元テクスチャは、この設定では縮小されません。ビルド・アップロード中の自動処理は、上の ビルド・アップロード時に自動最適化(全体共通) がオンのときだけかかります。
テクスチャ再書き込みのオプトイン
アップロード時もテクスチャ再書き込み(オプトイン) は既定でオフです。オンにすると、サーフェス・ノーマルの平坦化と、レビュー済みのマスク再パッキングを許可します。
読み取り、色空間、mip、プラットフォーム圧縮によってピクセルが変わることがあります。
このオプションがオフでも、数学的に損失のない重複除去は引き続き適用されます。
そこから生じる制約
復旧可能な失敗は隔離し、致命的な失敗はビルドを止めます
マテリアル1つの分析失敗のような復旧可能なエラーは、そのマテリアルだけを編集用に戻し、警告を残します。結果の整合性を保証できないエラーはビルドを中断します。
保存はMingToonが変更したアセットにだけ適用します。無関係なアセットを一緒に保存することはありません。
エディターがビルド途中で終了した場合
シェーダーのスワップとテクスチャの再書き込みはディスク上のジャーナルに残ります。次のドメインリロードで自動的に復旧し、それでもだめな場合はConsoleの項目別の失敗を確認してください。
残った復旧ジャーナルは次のメニューで破棄します。
StudioRaming > MingToon > Advanced > Discard Pending Generated Shader Recovery Journal
中断されたベイクが残した生成シェーダーは元に戻しません。次のベイクが作り直します。
いつ手動Bakeが必要か
| 状況 | 自動最適化 | 手動Bake |
|---|---|---|
| VRChatへのアップロード | 十分です | 必要ありません |
| WARUDOモッドのビルド | 十分です | 必要ありません |
| baked マテリアルアセットを直接渡す | できません | 必要です |
| シーンで結果を比較しながら承認する | できません | 必要です |
プラットフォーム別の入口
| プラットフォーム | 入口 |
|---|---|
| VRChatアバター | VRC SDKのビルドコールバック |
| WARUDOモッド | UModのビルドプロセッサー |
| 一般のPlayer | Unityのビルド前処理コールバック |
VRChat の処理は段階に分かれます。MA(Modular Avatar)前にビルド用コピーの入力所有権を分離し、MA の生成結果を受け取ってから AAO(Avatar Optimizer)前にメッシュ・テクスチャを物理的に準備します。最終変形後にアニメーション依存関係とシェーダーを解析します。
すべての前処理が MA 前に終わるわけではありません。準備結果はビルド用コピーに残り、作業用メッシュ・マテリアルを上書きしません。
関連ページ
- 生成シェーダーのキャッシュ整理: 軽量化 タブの 生成ファイルを整理、または
StudioRaming > MingToon > Advanced > Clean Build Optimization Output - ウィザードでコピーを作る: 変換ウィザード
- 固定の配布アセット: 手動Bakeと復元
- プラットフォームのチェックリスト: VRChat · Warudo
- エラーが出たら: トラブルシューティング