Standard Shaderのレンダリングモードの変更


standard_shader_rendering_mode

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

こちらのサイトの下の方みたいに、拡張として用意しておくと便利。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です