Light Mapping = Dark Mapping (光照映射、黑暗映射)
本质上也是多贴一张图,他是做相乘操作。第2张纹理通常中间亮,外面暗。如果是简单的 Modulate,那么实际上所有像素要嘛不变,要嘛变暗。操作还有可能是 Modulate2X,Modulate4X,那就有可能变亮也有可能变暗了。
Grow Mapping(发光映射)
本质上也是多贴一张图,他是做相加操作。注意,这个相加是无符号相加,也就是说相加如果超过1,那么就变成1。
Detail Mapping(细节映射)
本质上也是多贴一张图,他做的是有符号相加操作(add signed)。操作相当于无符号相加后,再减0.5。这种方法的效果是有的像素变暗了,有的像素变亮了,而且变化比较突然,看起来好像物体表面好像不太平,因此就是“增加了细节”。注意,这个是固定管线提供的功能,Unity会把他单独拎出来支持。
Bump Mapping (凹凸贴图)
就是贴法线贴图!逐像素计算光照!
纹理坐标自动生成(下面这个链接是解释最详细的)
http://resumbrae.com/ub/dms424_s05/10/print.html
GL_OBJECT_LINEAR
GL_EYE_LINEAR
参考上面的链接!
D3DTSS_TCI_CAMERASPACEPOSITION (Direct3D 9)
以顶点在观察坐标系中的顶点坐标作为该纹理层的纹理坐标输出.即在相机空间里,顶点坐标的u,v是这样计算的.u = x, v = y, (如果是三维纹理,w = z).
D3DTSS_TCI_CAMERASPACENORMAL (Direct3D 9)
与上面类似
D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR (Direct3D 9)
鸡巴毛。把顶点看做向量,当成入射线,与法线计算后生成的反射线做为uv坐标?
D3DTSS_TCI_SPHEREMAP (Direct3D 9)
GL_SPHERE_MAP (OpenGL)
相机往顶点方向形成的入射向量,与法线计算得到的反射向量做为uv坐标。这种是要和贴图相配合,贴图要反映360周围环境,例如下图:
概念:Sphere Mapping、Reflection Mapping、Environment Mapping
都一样!!FUCK,搞那么多名字。通常就是一张上面那张图。有可能是自动生成纹理坐标(固定管线),也就是 D3DTSS_TCI_SPHEREMAP 或者 GL_SPHERE_MAP。或者是美术导出纹理坐标。
这种效果一般,摄像机方向变的时候,看到的东西是一样的,离你近的点上面的东西就一模一样。如果摄像机不动,物体动,还比较正常。
Cube Mapping
效果比较好!!摄像机动的时候也会动!!比较真实。
分成2种情况,1是准备6张贴图,每次贴上去。2是实时拍这6张贴图,很慢。
关于3D绘制顺序/排序/半透明物体的问题
http://www.opengpu.org/forum.php?mod=viewthread&tid=422
Misc
1.为了提高性能,现代图形硬件通常都在运行 fs 之前进行深度测试。如果在 fs 中写入 gl_FragDepth,会让他取消这种优化,在执行fs 后才做深度测试,这样会很慢。