上一章:【Unity3D技术文档翻译】第3.6.6.3篇 使用脚本放置光照探针
本章原文所在章节:【Unity Manual】→【Graphics】→【Graphics Overview】→【Lighting】→【Global Illumination】→【Light Probes】→【Light Probes for moving objects】
用于运动对象的光照探针
通过捕捉真实的反射光,并将之烘焙为纹理覆盖到静态对象的表面上,光照贴图因而能够极大地增加场景的真实性。然而,由于光照贴图的性质,它只能应用于被标记为 Lightmap Static 的非运动对象上。
在实时和混合模式下,灯光能够投射直接光到运动对象上,但是运动对象不能接收来自于静态环境的反射光,除非使用光照探针。光照探针存储了关于光照是如何在场景中反射的信息。因此当运动对象穿过游戏空间时,它们就可以利用这些存储在光照探针中的信息,来展示当前它们所在位置反射光的近似值。
一个简单的展示了来自静态环境的反射光的场景。在上图场景中,平行光照射到红色和绿色建筑上,这两座建筑都是静态的,反射光被投射到场景中。红色与绿色反射光是可见的,并被直接染色到每座建筑前面。因为所有这些模型都是 static(静态) 的,所以所有光照都被存储在光照贴图中。
当你将运动对象引进场景,它们不会自动接收到反射光。在下图中,你能看到救护车(一个运动的对象)没有受到来自建筑反射光的影响。取而代之的是,它的侧面是一个单调的灰色。这是因为救护车是一个可以在游戏中运动的动态对象,因此不能使用光照贴图,因为光照贴图本质上是静态的。场景需要光照探针,如此运动中的救护车才能接收反射光。
救护车的侧面是一个单调的灰色,而它本应该从建筑上接收一些红色反射光。为了利用光照探针的特性投射反射光到运动对象上,你必须将光照探针贯穿放置于场景中,因此它们将覆盖运动对象可能经过的区域。
在一个简单的场景中,光照探针被放置在静态景物周围。光照探针表现为黄色圆点。它们被洋红色线条连接,呈现出可视化的体积。一旦你添加好了探针,并将光照烘焙进场景,动态运动对象将基于最接近的探针接收反射光。使用和上面相同的例子,动态对象(救护车)现在能够从静态景物接收反射光,使得车辆一侧染上了红色,这是因为接收了红色建筑前方投射的反射光。
现在救护车的一侧具有了红色,因为它通过场景中的光照探针,接收到来自建筑前方的反射光。当一个动态对象被选中,Scene view 将绘制当前用于反射光差值处理的可视化光照探针。距离动态对象最近的光照探针将被用于构成四面体,而动态对象的光照正是通过四面体的四个点差值处理得出的。
当动态对象被选中,用于照亮动态对象的光照探针,将会在场景视图中以黄色线条连接的四面体显现出来。当对象穿过场景,它会从一个四面体移动到另一个四面体,然后根据它当前所在位置的四面体来计算光照。
一个动态对象穿过放置了光照探针的场景,展示了它如何一个四面体移动到另一个四面体。如果本文对你有帮助的话,点个赞或者评论一下吧!
网友评论