HLSL高度图地形正常重新计算漫反射光

时间:2014-01-29 11:24:11

标签: shader hlsl terrain normals heightmap

我需要将漫反射光应用于基于高度图的地形,但我无法弄清楚如何重新计算法线。 着色器代码:http://pastebin.com/S8hQm67D

1 个答案:

答案 0 :(得分:2)

最简单的方法是在十字架中对附近的高度进行采样。

此代码从此处复制:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.161.8979&rep=rep1&type=pdf

float3 filterNormal(float2 uv, float texelSize, float texelAspect) 
{ 
 float4 h; 
 h[0] = heightmap.Sample(bilinearSampler, uv + texelSize*float2( 0,-1)).r * texelAspect; 
 h[1] = heightmap.Sample(bilinearSampler, uv + texelSize*float2(-1, 0)).r * texelAspect; 
 h[2] = heightmap.Sample(bilinearSampler, uv + texelSize*float2( 1, 0)).r * texelAspect; 
 h[3] = heightmap.Sample(bilinearSampler, uv + texelSize*float2( 0, 1)).r * texelAspect; 

 float3 n; 
 n.z = h[0] - h[3]; 
 n.x = h[1] - h[2]; 
 n.y = 2; 

 return normalize(n); 
} 
在您的情况下,

texelsize将是(1.0f / whateverYouHeightmapResolutionIs),texelAspect将是您的“mh”值。