🔥

【Unity】Graphics.Blit()にマテリアルを指定するとiOSで動作しない不具合対応

2022/01/04に公開

Unityで
・TextureをRenderTextureに変換したい
・シェーダーを適用させたい
場合、

Graphics.Blit(Texture source, RenderTexture dest, Material mat);

を利用することができます。
https://docs.unity3d.com/ja/current/ScriptReference/Graphics.Blit.html

しかし、UnityEditor(Mac)では動作するものの、iOSでビルドした際にシェーダーが機能しませんでした。

そこで、RenderTexture(dest)深度を取り除き、0に設定しましょう。

// 略
// var dest = new RenderTexture(sw, sh, 24);
var dest = new RenderTexture(sw, sh, 0);
Graphics.Blit(source, dest, mat);

また、マテリアルのシェーダーにZWrite Off ZTest Alwaysを設定すると解決できるようです。

ZWrite Off : デプステストを書き込まない (デフォルト)
ZTest Always : 常に描画 ※ デフォルトはZTest LEqual (すでに描画されているオブジェクトと距離が等しいかより近い場合に描画)

--

参考

Discussion