Direct3D 12——纹理——纹理贴图的作用

法线贴图

在不增加三角形的情况下增加表面细节
任何一个像素它的法线都做一个扰动,通过定义不同的高度和临近位置的高度差重新计算法线
纹理定义的是任何一个点,它的相对的高度的移动,通过高度的变化改变法线
在这里插入图片描述
原曲面法向量n ( p) = (0,1)
p点导数为dp = c * [h(p+1) - h§]切线
扰动法线 n§ = (-dp, 1).normalized()
在这里插入图片描述
在3D空间中计算
原曲面法向量n§ = (0,0,1)
p点的导数为

  • dp/du = c1 * [h(u+1) - h(u)]
  • dp/dv = c2 * [h(v+1) - h(v)]

扰动法线 n = (-dp/du, -dp/dv, 1).normalized()
注意这是在局部坐标中!

位移贴图

凹凸贴图和位移贴图它们定义都是用一个纹理定义它们的任何一个点它应该有的相对高度的差别,所以它们输入完全一样,用的完全相同的纹理。
位移贴图实际上是真的移动顶点。而不是通过位置的移动把它换算成法线的变换,然后做个假的顶点的移动。
凹凸贴图实际上没有改变任何几何,会在几何边缘的地方露馅,不会在几何相对复杂产生阴影,不会产生自己投影到自己的情况。
位移贴图其实也有代价的,它的代价是需要三角形足够细,细到比纹理的频率还要高。Direct3D的动态曲面细分优化,就是一开始不需要这么细的三角形,根据需要再做细分。
在这里插入图片描述

纹理也可以是三维的实际上

是定义了空间中任意点的值 ,实际上没有真的生成纹理的图,是定义了三维空间中噪声的函数,所以在空间中任何一个点,它都有一个解析式能够算出噪声的值是多少,然后这样一来三维空间中有一个噪声,这个噪声经过一系列的处理 ,可以作二值化,可以作加减乘除操作,经过操作可以变成 自己希望的样子。

Perlin noise算法,可以定义三维噪声

三维纹理广泛运用到体积渲染中

猜你喜欢

转载自blog.csdn.net/weixin_43945471/article/details/130188467
今日推荐