Standard Shaderのレンダリングモードの変更
Standard Shaderにて、透過するときはRendering ModeをTransparentかFadeを選ぶことになる。
Transparentだと反射した部分だけ描画が残るのでFadeを使うんだけど、どうも不透明のときにレンダリング結果がおかしくなる。(画像中央)
なので、不透明の際と透明の際とでRendering Modeを切り替えようとおもって
this.renderer.material.SetFloat("_Mode", 2f);
などで切り替えてもどうも反映しない。
おかしいなと思って調べてみると
Material m; m.SetFloat("_Mode", 2); m.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); m.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); m.SetInt("_ZWrite", 0); m.DisableKeyword("_ALPHATEST_ON"); m.EnableKeyword("_ALPHABLEND_ON"); m.DisableKeyword("_ALPHAPREMULTIPLY_ON");
という感じで色々なShaderの値の変更が必要らしい。
参考)
Unity | Answers | Standard material shader ignoring SetFloat property
こちらのサイトの下の方みたいに、拡張として用意しておくと便利。
[…] Standard Shader のレンダリングモードの変更 | STAC STAR […]