除光子贴图引擎外,所有GI引擎均通过摄相机发出的光线来工作。但是,光子贴图通过从灯光中发射光子来工作。对于某些种类的效果(如焦散),这具有重要的质量优势。下图显示了它是如何工作的。
光源发出的光子在场景周围反弹,最终存储在表面上
在渲染期间,通过在表面上原有的光子(黑色)向周围扩散计算出周边的光子(白色)
这样相比而言就有了一定的优势,当我们渲染一张成图后,如果想要对场景的摄像机位置进行修改,那么可以直接调用之前渲染好的光子缓存进行渲染,因为光线计算受灯光影响,只动摄像机是没有任何影响的。同时如果之渲染摄像机动画,那么我们可以用一帧的光子缓存渲染多帧的摄像机动画,便达到加速的效果。
光子贴图的好处:
- 提供很好的控制度
- 对于合理数量的光子,它可以快速渲染
光子贴图的缺点:
- 光子贴图是一种过时的技术,优化比较少
- 光子必须存储在GPU内存中,因此太多的光子在显存使用方面可能会占用较多
- 参数设计较多,调节稍微麻烦
- 由于是灯光发射光子,因此有一些设想看不到的地方也会有光子进行计算,这会大大降低渲染速度
如何使用光子贴图GI引擎?
- 场景中需要有灯光光源,开启对应想要的光子计算,如下方Caustics(焦散光子)GI(全局光照光子)之后可以调整光子的(Intensity Multiplier)强度,或者(Number of Photons to Emit)光子发射的数量。
2.GI引擎,首次GI引擎或者二次GI引擎需要有一个为光子贴图。
3.由于光子贴图的特殊性,再IPR交互渲染是看不到最终的结果的。如果想要看到渲染的结果需要开启(Bucket Rendering)区块渲染/最终渲染。(下面是首次引擎和二次引擎都启用光子贴图的渲染效果)
我们会发现图中有很多的斑块,这由于光子贴图计算的原因导致的。
光子贴图引擎现在场景光线能够照射反弹的的位置生成光子缓存,之后再利用光子缓存进行渲染。我们成图的每一个像素都是又很多个光子计算而来。
我们先来看一下光子贴图GI引擎的参数。
光子贴图GI引擎有单独的面板
Enable GI:光子贴图是否对GI起作用
Enable Caustics:光子贴图是否对焦散起作用。
这里设立两个开关的意义在于,Redshift渲染器可以在不使用光子贴图作为GI引擎的情况下进行焦散的单独计算。
Mode:存储光子缓存文件的模式/Filename:文件名称
- Rebuild:构建光子缓存文件,并保存缓存文件,之后再渲染成图
- Load:加载已有的光子缓存文件,渲染成图
- Rebuild(Prepass Pnly):构建光子文件并保存,但是不会最终渲染。
- Rebuild(Don`t Save):构建光子缓存文件,不保存,渲染最终成图
Reflection Tracing Depth:反射光线跟踪深度
Refraction Tracing Depth:折射光线跟踪深度
Combined racing Depth:综合光线跟踪深度。
综合光线计算深度≠反射光线跟踪深度+折射光线跟踪深度。综合光线跟踪深度类似于一个总的开关,控制其他的百分比。实际效果控制着场景的明暗。如果或有焦散,折射光线跟踪深度必须≥2次。
Max Num GI Photons:最多光子数量。指的是在最终渲染输出时,每一个像素能够采用周边搜索距离内多少的光子用于渲染。
GI search Radius:搜索距离,指每一个像素,能够搜索周围多远的光子。单位是工程的单位。
Max Num Caustics Photons/Caustics search Radius:和上面同理,只不过上面针对于GI。这里针对于焦散
具体在最终渲染的表现如下图(最多光子数量和灯光能发射的光子数量控制整体质量精度)
GI搜索半径为1 GI搜索半径为20
搜索半径类似于一个模糊的效果。但是如果要完全消除光斑现象,需要增加发射的光子数量和最大光子数量。
Fast Irradiance:快速光子辐照,在上面我们已经讲解了最终像素的计算是通过获取周边的光子信息,但是有时候某些地方的光子很难获取,需要花费一定的时间,因此我们可以打开这个开关用于快速模糊的获取光子,以提升渲染速度,但是代价可能会造成计算不准确。