😭

Builtin Render PipelineのShader GraphでStandatd ShaderのCutoutモードが機能しない

2022/06/17に公開

Builtin Render Pipelineが設定されたUnityプロジェクトでShader Graphをインストールすると、Rendering ModeをCutoutに設定したStandard Shaderマテリアルが、ビルドしたプレイヤーで正常に働かない問題に遭遇しました。エディタ上では正常に動きます。

結局根本的な解決策は見つかっていませんが、 問題の詳細と回避方法等、調べた情報をまとめておきます。

(2023/01/06追記)Unity2021.3.17f1, 2022.1.23f1, 2022.2以降で修正されました。

https://issuetracker.unity3d.com/issues/standard-shader-with-cutout-mode-doesnt-work-in-the-player-when-shader-graph-is-installed-with-built-in-render-pipeline

環境

  • OS: Windows11
  • Unity: 2021.3.4f1
  • Shader Graph: 12.1.7

再現方法・発生条件

まず、Standard Shaderが設定されたマテリアルを用意し、Rendering ModeをCutoutに設定します。テクスチャはCutoutに使えるようないい感じのものをAlbedoプロパティに設定します。

マテリアル設定

これをオブジェクトに設定します。
エディター上では正常に、α値が設定したAlphaCutoffプロパティ以下の部分が透けているはずです。これが期待する表示内容ですね。

正常な表示

この状態で、プレイヤーをビルドします。ビルドしたプレイヤーを起動すると、以下のような表示になります。透けてほしい部分が透けていません。
なぜだ😭

対応方法

現状でなし。

回避方法

  • Rendering ModeをFadeにして代用する
  • Shader Graphをアンインストールする
  • Render PipelineをURPかHDRPにする

最後に

Shader Graphが最近になってBuiltin Render Pipelineに対応したので、やったぁと思って使い始めたのですが、思わぬところで壁にぶつかってしまいました……
他に同じバグに遭遇している方がいないか調べても、そもそもBuiltin Render PipelineでShader Graphを使っている情報があまり出てこないので、この組み合わせで使うこと自体があまりないことなんですかね。

根本的な解決策が見つからなからずUnityのIssueTrackerにも見当たらなかったので、この件についてのバグレポートを出してみました。解決するといいけど……

進展があれば本記事を更新します。

参照

追記

2022/08/19

バグレポートの音沙汰がないし一向に解決されない……

2022/08/28

バグレポートのStatusがIn Reviewになったのでそろそろ進展があるかも

2022/09/03

バグレポートのStatusがConfirmedになったのでバグとしてUnity開発チームに認識されたっぽい。いつ対応されるかはわからないけど……

2022/10/16

Issueトラッカーに登録されていたようです。

https://issuetracker.unity3d.com/issues/standard-shader-with-cutout-mode-doesnt-work-in-the-player-when-shader-graph-is-installed-with-built-in-render-pipeline

2022/11/04

修正が完了し内部確認中と連絡が来ました。

2022/12/04

Unity2022.1以降で修正されました。
Unity2021.3は「Under Consideration」になっています。

2023/01/16

Unity2021.3.17f1, 2022.1.23f1, 2022.2以降で修正されました。
やったね🤗
(実はもうURPに移行してしまって修正の恩恵は得られませんでしたが……)

https://issuetracker.unity3d.com/issues/standard-shader-with-cutout-mode-doesnt-work-in-the-player-when-shader-graph-is-installed-with-built-in-render-pipeline

Discussion