Standard Shaderのレンダリングモードの変更
Standard Shaderにて、透過するときはRendering ModeをTransparentかFadeを選ぶことになる。
Transparentだと反射した部分だけ描画が残るのでFadeを使うんだけど、どうも不透明のときにレンダリング結果がおかしくなる。(画像中央)
なので、不透明の際と透明の際とでRendering Modeを切り替えようとおもって
1 | this .renderer.material.SetFloat( "_Mode" , 2f ); |
などで切り替えてもどうも反映しない。
おかしいなと思って調べてみると
1 2 3 4 5 6 7 8 | 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 […]