StrippingVariantsWithGCS_SVC

April 7, 2026 · View on GitHub

プロジェクト内にあるShaderVariantCollection及びGraphicsStateCollectionを探してきて、登録されていないVariantをビルドから除外します。
メニューの「UTJ/ShaderVariantStrip」の設定ウィンドウを変更することが出来ます。

Unity 2022までをお使いの場合

version 2をお使いください

設定画面について

Commonタブ

alt text

Enable Stripping

Strip処理を行うかどうかを指定します。

Log Variants

ビルドした時に、どのバリアントを入れて、どのバリアントを除外したか?をログとして残すかを指定します。
プロジェクト直下の「ShaderVariants/Builds/タイムスタンプ」ディレクトリ以下に書き出します。
これはStrippingが無効でもログ書き出しすることが可能です。

「Reset Timestamp」ボタン

連続でビルドする際に、ログのタイムスタンプがうまくリセットされない可能性があったため用意しました。
連続ビルド時にログのタイムスタンプが上手く更新されないことがあったら押してください。

Strict Variant Stripping

有効になった時は ShaderVariantCollection/GraphisStateCollectionにないShaderは全Variant削除を行います。
無効の場合は、ShaderVariantCollection/GraphisStateCollectionにないShaderは特に特別なStrip処理は行いません。

SafeMode

もしPass内の全てのVariantが削除されてしまうケースに遭遇した場合、最低でも一つはVariantを残すようにします。
Passが空となってしまうとFallbackされず描画がスキップされてしまうのでオプションを用意しました。

[Debug] List IPreprocessShaders

IPreprocessShadersを実装した全てのクラスを表示します。

[Debug]List ShaderKeywords

alt text Shaderのキーワードが、どのStageで有効になっているかデバッグするための機能です。

ShaderVariantCollection タブ

alt text

Use ShaderVariantCollection

無効にすると、プロジェクト内にあるShaderVariantCollectionを考慮しないようになります。

Exclude Stripping Rule

ここで指定されたShaderVariantCollectionアセットは対象外となり、無視します。

GraphicsStateCollection タブ

alt text

UseGraphicsStateCollection

無効にすると、プロジェクト内にあるGraphicsStateCollectionを考慮しないようになります。

Match Graphis API Only

ビルド対象と同じGraphicsAPIで作成されたGraphicsStateCollectionのみを考慮するようにします

Match Target Platfomr Only

ビルド対象と同じPlatformで作成されたGraphicsStateCollectionのみを考慮するようにします

Exclude Stripping Rule

ここで指定されたGraphicsStateCollectionアセットは対象外となり、無視します。

Connect Runtimeタブ

alt text
PlayerSettingsの「Strict shader variant matching 」を有効にしたDevelopmentBuildから、ミスマッチが起きたShaderVariantを収集して、ダミーのGraphicsStateCollectionを作るためのオプションです。

TargetPlayer

DevelopmentBuildした対象を指定します。

Create GraphicsStatesCollection from Miss Match Variant

このボタンを押すと、Assets/GraphicsStateCollection/MissMatchVarint以下にGraphicsStateCollectionを生成します。

Recieve GraphicsStateCollection from Player

このボタンを出すには「STRIP_ENABLE_AUTO_GSC」をDefineに追加する必要があります。<br/ > ボタンが押されると、接続中のPlayerが起動後からTraceしているGraphicsStateCollectionをEditorに転送します。

alt text

GraphicsStateCollectionは複数のObjectで同時にTraceすることが出来ないため、Defineによるオプションを導入しています。


参考情報

Strip処理について

こちらはスクリプタブルシェーダーバリアントの除去を使っています
https://blogs.unity3d.com/jp/2018/05/14/stripping-scriptable-shader-variants/

Strip処理が行われない場合

Incrementalビルドによって、IPreprocessShaders.OnPorocessShaderが呼び出されないことがあります。
https://docs.unity3d.com/6000.0/Documentation/Manual/incremental-build-pipeline.html

もしそのような場合はCleanBuildをお試しください

alt text

ワークフローの提唱

GraphicsStateCollectionを構築して、より良いStripをするための提唱です。

1.まず本ツールでのStripを無効化、「STRIP_ENABLE_AUTO_GSC」をDefineしたDevelopmentビルドを作成します
2.しばらく動かした後、PlayerからGraphicsStateCollectionを取得します。
3.その後、PlayerSettings.strictShaderVariantMatchingを有効、本ツールを有効化、Common設定のStrictVariantStrippingとSafeModeを有効にしてDevelopmentBuildをします。
4.ShaderVariantのミスマッチを「Create GraphicsStatesCollection from Miss Match Variant」で収集します。

このような形で、GraphicsStateCollectionを収集して構築していく事がお勧めです。
最終的なビルドは安全性を考慮して、本ツールのSafeMode,StrictVarinatStrippingを有効化して、PlayerSettings.StrictVariantStrippingを無効化してビルドしていく事です。

※StrictVarinatStrippingを有効にすることで、Fallback先のシェーダーなど実際に使われていないShaderのメモリ使用量を削減することが出来ます。