Notifications
Article
光照模式简述
Published 13 days ago
13
0
要在Unity中控制光照预计算和合成,必须为光源指定光照模式(Light Mode)。此光照模式将定义光源的目标用途。要指定光照模式,请在场景中选择光源,然后在光源检视面板窗口中选择Mode。

模式的工作机制

Realtime:此模式下不会预先计算实时光源。Unity在运行时每帧计算并更新实时光源的光照(阴影会实时变化,但是没有间接光)。
Mixed:此模式下会预先计算一些混合光源。Unity可在运行时计算混合光源的一些属性,但仅限于严格的限制范围内。
Baked:此模式下会预先计算所有烘焙光源。Unity在运行时之前预先计算烘焙光源产生的光照,而不会将这些光源包括在任何运行时光照计算中。
您在Lighting面板对全局光照所做的模式调整将适用于所有已分配到该模式的光源。例如,如果打开Lighting窗口,勾选Realtime Global Illumination,则所有将Mode设置为Realtime模式的光源都将使用Realtime Global Illumination。
预计算产生两组结果:
  • Unity将静态游戏对象的结果存储为UV纹理坐标空间中的纹理图集。
  • 光照探针将光的表示结果存储在空白空间(从探针的特定位置观察)中。通过这部分空白空间的动态游戏对象将使用此信息来接受预计算的光照。

场景中模拟光的反射

粗糙表面会在许多方向上散射入射光,可照亮未直接从光源获得光照的表面。场景中的表面越粗糙,此类阴影区域就会越明亮。过去,这种效果是通过定义一个额外的环境光颜色来近似计算的,这种颜色只是简单地添加到直接光照的结果中,因此阴影中的表面看起来不会完全变黑。更复杂的近似算法使用渐变来根据表面的方向模拟不同的环境颜色,甚至使用球谐函数来获得更复杂的环境光照。
光滑或光泽表面可在可预测的方向上反射大部分入射光,从而在材质上产生可见的高光。光滑表面的极端例子是镜子:来自一个方向的所有入射光恰好反射到另一个方向。光泽反射的一种变体是半透明材质,这种材质还可在入射光进入和再次离开材质时折射光线。
在间接光照的情况下,光路与场景表面至少有两次交互。这些交互可以是光泽表面和/或粗糙表面反射的组合。例如,照射到粗糙表面的光泽反射/折射将显示从所有观察方向可见的聚焦明暗图案,称之为焦散。照射到另一个粗糙表面的粗糙反射通常称为环境光照。由于光在场景表面上多次反射的性质,正确的解决方案需要考虑整个场景及其所有相关光路的所有表面材质属性和光交互。因此有了全局光照一词。

解决问题

射线追踪是在计算机图形学中解决这一问题的非常巧妙的方法,因为它试图通过追踪场景中的光线路径来模拟现实世界中实际发生的情况。目前,电影业已完全转向射线追踪技术来生成图像。
遗憾的是,射线追踪仍然太慢,无法在大多数实时图形中使用;取而代之是采用光栅化作为生成图像的标准方法。与射线追踪不同,光栅化不能跟踪场景中的任意光路。事实上,光栅器只能计算光路的一段。这就是实时图形中的光照变得复杂的原因。
由于光栅器不能跟踪光线,因此实时光照集中于具有最明显影响的光照部分。这些部分就是发射部分,更常见的说法是直接光照。即使在这样的情况下,光路也已经由两段组成:一段是从摄像机到表面,另一段是从表面到光源。
第一段是从摄像机位置渲染的视图。为了计算第二段,需要使用阴影贴图之类的技术。由于阴影贴图特定于每个投射阴影的光源,因此必须为每个光源生成唯一的阴影贴图。投射阴影的光源越多,需要生成的阴影贴图也越多。根据光源的数量,所需的渲染时间可能会很快变得过长。阴影贴图的另一个缺点是它们的分辨率有限。这会导致块状阴影。因此,阴影贴图既存在图像质量问题(由于分辨率有限),也存在性能问题(由于存储阴影贴图的内存要求以及每帧生成阴影贴图所花费的时间)。
与离线渲染不同,游戏对渲染帧的时间长度有一定的严格限制。例如,在VR应用程序中,为了实现90帧/秒的帧率,绘制一个帧的时间为11.11毫秒。在需要玩家快速反应的游戏中,为了达到60 FPS的帧率,绘制一个帧的时间为16.66ms。目标帧率为30 FPS的游戏绘制一个帧的时间为33.33ms。这些时间还必须包括应用程序或游戏其余部分(例如 AI 和物理系统)的计算工作。因此,尽可能提高效率以充分利用系统非常重要。所有渲染必须在少于绘制一个帧所需的时间内发生。
Tags:
尹煜
北京宏宇航天技术有限公司Unity工程师 - Programmer
27
Comments