法线方向优化
通过TransformWorldToViewDir计算的View空间的法线方向不会随像素点位置变化而变化,需要像素的视线空间来计算法线方向,代码如下:
half3 cameraFoward = -viewDirectionWS;
half3 viewUpDir = mul(UNITY_MATRIX_I_V, half4(half3 (0, 1, 0), 0)).xyz;
half3 cameraRight = SafeNormalize( cross(viewUpDir,cameraFoward));
half3 cameraUp = SafeNormalize( cross(cameraFoward,cameraRight));
half2 uv = mul( float3x3(
cameraRight,
cameraUp,
cameraFoward),normalWS).xy * 0.49 + 0.5;
half4 mc = SAMPLE_TEXTURE2D(_MatCap, sampler_MatCap, uv);