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

ビルド時の自動最適化はどう動作するのか

このページは説明です。今すぐアップロードしたい場合は VRChat を見てください。

一行でまとめると​

自動最適化は既定でオンになっています。皆さんがすることはありません。

アップロード・ビルドのコピーを軽くし、作業用のマテリアルは編集できる状態に戻します。

きちんとかかったか確認する​

  1. ConsoleのC#・シェーダーエラーを0件にします。
  2. StudioRaming > MingToon > Validate Project で環境条件を確認します。
  3. ビルドログで候補数・スワップ数・顔ノーマルのベイク数を確認します。
  4. プロジェクトフォルダーの横の StudioRaming/MingToonOptimizeReport.txt を開きます。
  5. VRChatの場合は、自分の画面・ミラー・Photo Cameraをそれぞれ確認します。

VRChatプロジェクトでは、Consoleに [MingToon] VRChat build hook compiled and registered. がセッションごとに1回出ます。

밍툰 매니저의 최적화 탭에서 업로드 자동 최적화 설정 그룹이 보이는 화면

どこでオン・オフを切り替えるか​

MingToonマネージャー 最適化 タブの アップロード時の自動最適化 に3つすべてがあります。一番上のトグルは はじめに タブ 4. ビルド・アップロードの自動処理 にも出ます。

項目既定値機能
ビルド・アップロード時に自動最適化(全体共通)オンこの機能全体をオン・オフします。エディター環境全体に適用されます
プレイモードでもビルド・シェーダー・メッシュのフックを許可(オプトイン)オフPlayビルドのコピーでもフックを走らせます
アップロード時もテクスチャ再書き込み(オプトイン)オフレビュー済みのテクスチャ再加工を追加で許可します

アバターごとに方式も選びます。 このアバターのビルド・アップロード最適化方式 が両方のタブにあります。

方式いつ
FastUpload(推奨)既定値です。共有シェーダーを使ってアップロード時間を短縮します
Legacy GPU精密最適化マテリアルごとに個別にベイクする従来方式が必要なときにだけ

何が起きるのか​

  1. 出荷対象のRendererとAnimationClipが参照するMingToonマテリアルを集めます。
  2. 実際に使う機能とアニメーションされる値を分析します。
  3. 固定機能を定数に畳んだ軽量シェーダーを作るか、キャッシュから取り出します。
  4. 出荷の間だけ、マテリアルのシェーダーを軽量版に差し替えます。
  5. プラットフォーム別の追加処理を実行します。
  6. 終了・失敗・ドメインリロードのいずれかが起きたら、元の状態に戻します。

生成シェーダーは編集用と同じプロパティ契約を維持します。

ビルド中だけ変わる値は定数へ畳みません。 成功したビルドは生成プロファイルとソースキャッシュを記憶し、同じアバターの次回ビルドで再利用します。 キャッシュが温まった後の体感差は、シーンとシェーダーキャッシュの環境によって変わります。

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でも、ミラーでは深度モジュールがオフになります。 → 深度エフェクトはどこまで保証されるか

テクスチャ解像度の上限​

テクスチャ解像度の上限(アップロード時) はプロジェクト全体の設定です。シーンやプレハブではなくEditorの環境設定に保存され、このプロジェクトのすべてのキャラクターに適用されます。

ベース・ノーマル・MatCap・マスクのように、スロット種別ごとに最大解像度を決めます。アップロード用コピーだけを縮小し、元のファイルとインポート設定は変更しません。

テクスチャ再書き込みのオプトイン​

アップロード時もテクスチャ再書き込み(オプトイン) は既定でオフです。オンにすると、サーフェス・ノーマルの平坦化と、レビュー済みのマスク再パッキングを許可します。

オンにしたら前後を目で比較してください

読み取り、色空間、mip、プラットフォーム圧縮によってピクセルが変わることがあります。

このオプションがオフでも、数学的に損失のない重複除去は引き続き適用されます。

そこから生じる制約​

復旧可能な失敗は隔離し、致命的な失敗はビルドを止めます​

マテリアル1つの分析失敗のような復旧可能なエラーは、そのマテリアルだけを編集用に戻し、警告を残します。結果の整合性を保証できないエラーはビルドを中断します。

保存はMingToonが変更したアセットにだけ適用します。無関係なアセットを一緒に保存することはありません。

エディターがビルド途中で終了した場合​

シェーダーのスワップとテクスチャの再書き込みはディスク上のジャーナルに残ります。次のドメインリロードで自動的に復旧し、それでもだめな場合はConsoleの項目別の失敗を確認してください。

残った復旧ジャーナルは次のメニューで破棄します。

StudioRaming > MingToon > Advanced > Discard Pending Generated Shader Recovery Journal

このコマンドは復旧情報だけを破棄します

中断されたベイクが残した生成シェーダーは元に戻しません。次のベイクが作り直します。

いつ手動Bakeが必要か​

状況自動最適化手動Bake
VRChatへのアップロード十分です必要ありません
WARUDOモッドのビルド十分です必要ありません
baked マテリアルアセットを直接渡すできません必要です
シーンで結果を比較しながら承認するできません必要です

プラットフォーム別の入口​

プラットフォーム入口
VRChatアバターVRC SDKのビルドコールバック
WARUDOモッドUModのビルドプロセッサー
一般のPlayerUnityのビルド前処理コールバック

VRChatのフックは遅く実行されます。Modular AvatarやVRCFuryがマテリアルを処理したあとの最終状態を分析します。

関連ページ​