我在测试后计算法线有问题。
目前我有一些代码可以对高度图进行采样并从中计算法线:
float HEIGHT = 2048.0f;
float WIDTH =2048.0f;
float SCALE =displace_ratio;
vec2 uv = tex_coord_FS_in.xy;
vec2 du = vec2(1/WIDTH, 0);
vec2 dv= vec2(0, 1/HEIGHT);
float dhdu = SCALE/(2/WIDTH) * (texture(height_tex, uv+du).r - texture(height_tex, uv-du).r);
float dhdv = SCALE/(2/HEIGHT) * (texture(height_tex, uv+dv).r - texture(height_tex, uv-dv).r);
N = normalize(N+T*dhdu+B*dhdv);
但是低级别的细分
看起来不太好我怎样摆脱这个?
答案 0 :(得分:0)
摆脱这种情况的唯一方法是将法线贴图与计算出的法线结合使用。你在右边看到的法线是正确的。他们只是处于低分辨率,因为你会这么做。使用法线贴图和每像素光照来突出显示复杂的细节。
另外,要考虑的一件事是初始网格的拓扑结构。间距更均匀的多边形会导致更均匀的间隔。
此外,您可能希望这样做,而不是:
float dhdu = SCALE/(2/WIDTH) * (texture(height_tex, uv+du).r - texture(height_tex, uv-du).r);
float dhdv = SCALE/(2/HEIGHT) * (texture(height_tex, uv+dv).r - texture(height_tex, uv-dv).r);
从高度图中再抽取几个点,并对它们求平均值,以便在每个点提取更平均的法线版本。