Probe Lighting
光照探测是一种快速计算实时渲染应用中的光照技术,通常会用于处理游戏世界的人物角色或是动态物体的光照,它的优点在于运行时有不错的处理性能而且预计算也相当快速。
光照探测的原理是通过放置在3D空间里的探针来接收光照信息,然后用类似球谐函数(spherical harmonics)的数学方法将信息编码在一个球体上。这些系数占用空间很小,在游戏运行时能快速解包,以便Shader可以存取并计算表面光照,在Unity中这个功能叫做光照探针(Light Probes)。它是一种让对象接收场景间接照明的好方法,虽然被光照探针指定的对象无法计算场景的光照反射,但通常影响不大。
使用光照探测是有些限制的,其中一个限制:在不提高探针数量的前提下很难在球形范围上表现出高频或斑驳的光照,并且其精度和消耗成本成正比。也就是说,在考虑性能的前提下,必须限制使用较低阶的球谐函数。
实际上,一个3D坐标只能用一个球体来记录光照信息,所以光照探测不适合用于有大量光照投射在大物体表面的情况,所以不得不提到另外一个限制:当用球谐函数在一个球体上进行编码时,通常不擅于处理拥有特大平面的物体或是带有很深的凹洞的物体。如果想要将光照探测技术用于大型物体,可以参考Unity手册中Unity提供的另一个光照探测代理体(Light Probe Proxy Volumes, LPPV)技术做进一步了解。
尽管有这些限制,光照探测还是很适用于和符合条件的小物体一起搭配使用,以较低的成本消耗发挥出卓越效果。 我们后续将深入探讨如何设置及摆放光照探针(Light Probes),现在只了解适当使用光照探测功能可以降低光照贴图的数量。
创建Light Probe Group
点击GameObject -> Light -> Light Probe Group可以创建一个Light Probe Group。
点击Edit Light Probes
Add Probe:增加一个光照探针。
Select All:选中所有的光照探针。
Delete Selected:删除选中的光照探针。
Duplicated Selected:复制选中的光照探针。
光照探针虽然进行了预计算并保留了环境内特定区域内的光照信息,但是在游戏运行中还是会进行一些计算,才能使运动的模型具备实时的光照信息。所以大量的光照探针会消耗更多的计算,我们要合理的分配这些光照探针。
Unity官方的文档中也介绍了光照探针的使用技巧。这个示例中将光照探针分为了两个部分,ExtentsLightProbeGroup和VillageLightProbeGroup。
这些洋红色的线的交点处就是一个光照探针,在图中可以很明显的看出村庄外的光照探针很稀疏,大量的光照探针分布在村庄内部。文档中说明尽量将光照探针用在人物能走动的地方以及复杂模型的阴影处。尽量让这些光照探针设置的更加有用途。