Chapter 10 高级纹理
立方体纹理
立方体纹理是环境映射的一种实现方法。
天空盒
天空盒:整个场景被包围在一个立方体内。这个立方体每个面使用的技术就是立方体纹理映射技术。
环境映射
- 直接由一些特殊布局的纹理创建:立方体展开图的交叉布局、全景布局等。
- 创建一个Cube Map资源,把6张图赋给它。
- 脚本生成。
反射
通过入射光线方向和表面法线来计算反射方向,再利用反射方向对立方体纹理采样即可。
折射
斯涅耳定律:
其中$\eta_1$和$\eta_2$是两个介质的折射率。
菲涅尔反射 Fresnel reflection
Schlick菲涅尔近似等式:
其中,$F_0$是反射系数,用于控制菲涅尔反射的强度,$v$是视角方向,$n$是表面法线。
Empricial菲涅尔近似等式:
其中,$bias,scale,power$是控制项。
渲染纹理
- 在Project目录下创建一个渲染纹理,然后把某个摄像机的渲染目标设置成该渲染纹理,这样一来该摄像机的渲染结果就会实时更新到渲染纹理中,而不会显示在屏幕上。
- 在屏幕后处理时使用GrabPass命令(需要把渲染队列设置为透明队列)或OnRanderImage函数来获取当前屏幕图像。
- 直接使用GrabPass{},然后在后续的Pass中直接使用_GrabTexture来访问屏幕图像。这种方法性能消耗较大,对于每一个使用它的物体,Unity都会为它单独进行一次昂贵的屏幕抓取操作。
- 使用Grab Pass{“TextureName”},Unity只会在每一帧时为第一个使用名为TextureName的纹理的物体执行一次抓取屏幕的操作。这种方法更为高效。