光照
光源类型
光源类型可分为:Realtime,Mixed,Baked
- Realtime light - 实时光源 在运行时照亮对象,可作用于静态对象和动态对象
- Baked light - 烘焙光源 在烘焙时为静态对象提供光照
- Mixed light - 混合光源 在烘焙时和运行时均可提供光照
在window->Lighting->MixedLighting->LightingMode
中可设置混合光源的作用方式:
-
Baked Indeirect
:在烘焙时,只烘焙该光源在静态对象间的反射效果。在运行时,该光源可以作用于静态对象和动态对象 -
ShadowMask
:在烘焙时,烘焙静态对象的阴影以及反射效果。在运行时,该光源可以作用于静态对象和动态对象,动态对象的阴影是实时阴影,对于静态对象,当ShadowMask Mode
是ShadowMask
时,阴影为烘焙阴影,当ShadowMask Mode
是ShadowMask Distance
时,在相机距对象距离小于Shadow Distance
时,为实时阴影,反之为烘焙阴影。(ShadowMask Mode
和Shadow Distance
均在Edit-> ProjectSetting->Quality
中设置) -
Subtractive
:最直接的烘焙方式。烘焙时,效果和BakedLight相同(烘焙光照、阴影、反射效果)。在运行时,只作用于动态对象,不再为静态对象提供光照。
Realtime Lighting
实时全局光照:启用后场景中的场景中的实时灯光将同时提供直接光照和间接光照作用于静态对象和动态对象。
在2017.4.11f1版本的Unity中实验时,在运行时,仅平行光类型的实时光源可将间接光作用于动态对象(且烘焙前需要将动态对象标记为Static
,烘焙完成后再去掉Static
标记),其他类型的实时光源只能将间接光照正确作用于静态对象。(不知道是不是我哪里设置错了)
渲染路径
前向渲染路径
含义:根据影响对象的光源在一个或多个通道中渲染每个对象。
光源类型
在前向渲染中,光源可以被定义为三种类型:像素光源,顶点光源,球谐光源(sh光源)
- 像素光源
某个对象进行逐像素渲染时采用的光源。
一个对象是否有逐像素光源或采用哪一个光源作为逐像素光源,按以下规则而定:
- Render Mode 设置为 Not Important 的光源始终为每顶点或 SH 光源。
- 最亮的方向光始终为每像素光源。
- Render Mode 设置为 Important 的光源始终为每像素光源。
- 如果上述情况导致光源数少于当前设置的像素光源数量,则按照亮度降低的顺序,更多光源采用每像素渲染方式。(像素光源数量在
Edit-> ProjectSetting->Quality->PixelLightCount
中设置)
- 顶点光源
某个对象进行顶点渲染时采用的光源(每个对象最多可以有四个顶点光源,顶点光源不会产生剪影和阴影) - 球谐光源
对象进行顶点渲染时,四个顶点光源以外的其他光源作为球谐光源进行处理。球谐光源是以球谐函数计算的光源,可以认为是一种近似的、简化的计算方法,可减少计算量。
小结
前向渲染路径以每个对象作为渲染基础,渲染某个对象时,Unity会查找当前场景中的所有灯光,并按照规则决定某个光源是作为像素光源、顶点光源还是sh光源,然后对该对象进行渲染(一个光源对于对象A是像素光但对于对象B可能是顶点光或sh光)。
这种方式适用于灯光较少的场景,其性能消耗是随场景复杂程度呈次方增加的,比如场景中只有1个光源1个对象,则只需要渲染一次,如果是10个光源10个对象,则需要渲染10x10次。
延迟渲染路径
使用延迟渲染时,没有光源数量限制,所有光源均作为像素光源进行处理。
优点:光照的处理开销与接受光照的像素数成正比。这取决于场景中的光量大小,而不管接受光照的游戏对象有多少。因此,可通过减少光源数量来提高性能。
缺点:不支持抗锯齿,也无法处理半透明游戏对象(这些对象会自动使用前向渲染进行渲染)。此外,它也不支持网格渲染器 (Mesh Renderer) 的接受阴影 (Receive Shadows) 标志,并且仅在有限程度上支持剔除遮罩。最多只能使用四个剔除遮罩。也就是说,剔除层遮罩必须至少包含所有层减去四个任意层,即必须设置 32 个层中的 28 个层。否则,会产生图形瑕疵。
网友评论