OpenGL 编程指南 (7)
1、纹理着色器:生成图像或者照片的shader。它有如下特点:
1)生成的纹理内存占用小,因为使用算法生成的纹理易于压缩,差距在指数级别上。
2)生成的纹理没有固定的分辨率。
3)易于实现多种多样的处理效果,相较于预存纹理便利许多。
4)使用程序纹理计算体积而不是表面,在体积的剖面表现更加真实。
5)程序纹理着色器需要在程序中实现各种算法,有技术门槛。
6)相较于预存纹理,程序纹理需要运行算法,所以访问纹理上需要更多的时间。
7)平台实现上,兼容性需要全面考虑。
2、凹凸贴图作用于光照的计算,关键在于为每个片元设置合理的表面法线并不会真的影响几何体表面的凹凸。要得到正确的光照效果,需要所有计算都在同一个坐标系下,为此特地使用了一个叫做局部表面坐标空间(surface-local coordinate space),也叫切线空间(详细的切线空间介绍:https://learnopengl.com/Advanced-Lighting/Normal-Mapping)。这个空间有一下有点:
1)高度自由重用性良好,记录的是法线的相对位置,应用到不同的纹理上也能够得到一个能够接受的效果,一张normal map 可用于六个面上。
2)可惊醒UV动画,能够实现凹凸移动的效果,对于流体的实现非常有帮助。
3)压缩性良好,空间坐标中z的方向宗师正方向,所以只需要存储xy方向即可。
3、法线贴图
4、噪声可以理解为使绘制的图形产生瑕疵的一种参数,应该具有以下特点:
1)不应有明显的规则与重复花样
2)产生噪声的是一个连续的函数且其导数也是连续,即使变化是平滑的
3)对于相同的输入需要得到相同的输出
4)值域是一个明确的区间([0.0, 1.0], [-1.0. 1.0])
5)噪声函数是各向同性的(它的统计特性在所有方向是相同的)
6)可以定义在1、2、3、4或者是更高的维度
7)计算需要非常的迅速
5、使用噪声有三种方式:
1)使用GLSL内置函数noise
2)实现自己的噪声函数
3)使用纹理存储已经生成的噪声数据