StrippingVariantsWithGCS_SVC
April 7, 2026 · View on GitHub
プロジェクト内にあるShaderVariantCollection及びGraphicsStateCollectionを探してきて、登録されていないVariantをビルドから除外します。
メニューの「UTJ/ShaderVariantStrip」の設定ウィンドウを変更することが出来ます。
Unity 2022までをお使いの場合
version 2をお使いください
設定画面について
Commonタブ

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
Shaderのキーワードが、どのStageで有効になっているかデバッグするための機能です。
ShaderVariantCollection タブ

Use ShaderVariantCollection
無効にすると、プロジェクト内にあるShaderVariantCollectionを考慮しないようになります。
Exclude Stripping Rule
ここで指定されたShaderVariantCollectionアセットは対象外となり、無視します。
GraphicsStateCollection タブ

UseGraphicsStateCollection
無効にすると、プロジェクト内にあるGraphicsStateCollectionを考慮しないようになります。
Match Graphis API Only
ビルド対象と同じGraphicsAPIで作成されたGraphicsStateCollectionのみを考慮するようにします
Match Target Platfomr Only
ビルド対象と同じPlatformで作成されたGraphicsStateCollectionのみを考慮するようにします
Exclude Stripping Rule
ここで指定されたGraphicsStateCollectionアセットは対象外となり、無視します。
Connect Runtimeタブ
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に転送します。
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をお試しください
ワークフローの提唱
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のメモリ使用量を削減することが出来ます。