うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】ShaderGraph を利用した HeightFog

ShaderGraph の全貌

UnityShaderGraphLibrary/HeightFog.shadergraph at main · yayorozu/UnityShaderGraphLibrary · GitHub

各処理をちょっとだけ分割してまとめる

UV と Depth から ワールド座標を求めてY のみを出力

float getWorldPosY()
{
    float3 worldPos = ComputeWorldSpacePosition(In.uv, In.depth, UNITY_MATRIX_I_VP);
    return worldPos.y;
}

指定した高さ情報をもとに Fog の強さを算出

float calcIntensity(float y)
{
    float diff = _Height - y;
    float intensity = inverseLerp(0, _Maxheight, diff);
    return intensity;
}

もとの色とブレンド

half4 blend(float y, float intensity)
{
    float fog = step(y, _Height);
    float t = fog * intensity;
    half4 color = lerp(_BlitSource, _FogColor, t);
    return color;
}