はじめに
ReflectionProbeでBakeしたCubeMap使用するとライティングが変わっても反射結果はBakeしたときのライティングになってしまいます。(Bakeなので当たり前ではありますが..)
ただそれだと時間の概念があるゲームだとライティングがリアルタイムに変わったりする場合があり使いづらいのでCustomRenderTextureを使用してBakeされたCubeMapをリアルタイムに調整していきたいと思います。
CustomRenderTextureの作成
CustomRenderTextureとは
Shaderを割り当てることが出来るRenderTextureになります。TextureなのでCubeMapにすることができるのでそれを活用してきます
作成
1.Create→Rendering→CustomRenderTextureでCustomRenderTextureを作成します
2.CustomRenderTextureに割り当てるためのマテリアル作成し,下記のように設定します
3.Shader実装
内容としてはCubeMapにDirectional Lightの色を乗算させてます
Shader "CustomRenderTexture/TestBlendShader"
{
Properties
{
_Cube1 ("Cube1", CUBE) = "" {}
}
SubShader
{
Blend One Zero
Pass
{
Tags
{
"LightMode" = "UniversalForward"
}
Name "ReflectionProbeBlend"
HLSLPROGRAM
//CustomRenderTextureのShaderを実装する際使用する
#include "UnityCustomRenderTexture.cginc"
#pragma vertex CustomRenderTextureVertexShader
#pragma fragment frag
#pragma target 3.0
half4 _MainLightColor;
UNITY_DECLARE_TEXCUBE(_Cube1);
float4 frag(v2f_customrendertexture IN) : SV_Target
{
float4 col;
//MainLightの色と合成する
float4 refColor1 = UNITY_SAMPLE_TEXCUBE(_Cube1, IN.direction);
float4 c = clamp(_MainLightColor, 0, 1);
//地面の部分だけ色を変える
if (IN.direction.y <= 0.03f)
{
col = refColor1 * c;
}
else
{
col = refColor1;
}
return col;
}
ENDHLSL
}
}
}
CustomRenderTextureのShaderを実装する際はVertexShaderでCustomRenderTextureVertexShaderを指定してあげる必要があります
参考
4.マテリアルの設定
Cube1にBakeしたCubeMapを設定します
5.ReflectionProbeの設定
ReflectionProbeにCustomRenderTextureを割り当てます
完成
BakeされたCubeMapがライティングの影響を受けるようになりました
終わりに
CustomRenderTextureを使用することでBakeされたCubeMapの見た目を調整することが出来ました。
今回作成したShaderだと乗算しただけですが実現したい表現に応じて変えてけばBakeされたCubeMapでもリアルタイムな動的な変化のある反射表現が出来ると思います