URL
status
type
date
slug
summary
tag
category
password
icon
首先,Unity的渲染先后顺序是由
Render Mode
与光源的强度,距离,和颜色共同决定的,当场景中出现多种不同类型的光源时,就需要注意到这一点,通过调整这些属性,去达到自己想要的光照效果。当光源的
Render Mode
设置为Auto
、Important
和Not Important
同时存在于场景中时,Unity会根据一定的逻辑来决定哪些光源被处理为逐像素光照(Pixel Light),哪些被处理为逐顶点光照(Vertex Light)。这个逻辑主要基于光源的重要性,同时考虑光源的Render Mode
设置。源排序和分配逻辑
- 光源的重要性计算:
- 强度(Intensity):光源的亮度。
- 距离(Distance):光源与物体的距离。
- 颜色亮度(Color Brightness):光源颜色的最大分量值。
- 光源
Render Mode
的影响: - Important:尽可能作为逐像素光照处理。
- Auto:根据光源的重要性自动决定。
- Not Important:优先作为逐顶点光照处理。
具体处理步骤
- 计算每个光源的重要性:
- 对所有光源(无论
Render Mode
如何)计算其重要性。
- 按重要性排序光源:
- 将光源按重要性从高到低排序。
- 分配逐像素光照和逐顶点光照:
- 首先处理
Important
光源:将所有Important
光源放入逐像素光照的候选列表中。 - 处理
Auto
光源:将剩余的Auto
光源按重要性依次加入逐像素光照的候选列表,直到达到逐像素光照的最大限制(默认是4个)。 - 处理
Not Important
光源:将所有Not Important
光源放入逐顶点光照的列表中。
具体示例
假设你有一个场景,其中包含以下光源:
- Directional Light:1个(最亮的平行光)
- Point Light:
- 3个
Important
光源 - 4个
Auto
光源 - 2个
Not Important
光源
- Spot Light:
- 2个
Important
光源 - 3个
Auto
光源 - 1个
Not Important
光源
在这个场景中,Unity会处理这些光源如下:
- Directional Light:
- 作为最重要的光源,通常会被处理为逐像素光照。
- Point Light:
- 3个
Important
光源会被处理为逐像素光照。 - 4个
Auto
光源按重要性排序,前1个会被处理为逐像素光照,其余3个会被处理为逐顶点光照。 - 2个
Not Important
光源会被处理为逐顶点光照。
- Spot Light:
- 2个
Important
光源会被处理为逐像素光照。 - 3个
Auto
光源按重要性排序,前1个会被处理为逐像素光照,其余2个会被处理为逐顶点光照。 - 1个
Not Important
光源会被处理为逐顶点光照。
总结
- 重要性计算:所有光源(无论
Render Mode
如何)都会根据强度、距离和颜色亮度等因素计算其重要性。
- 排序:将光源按重要性从高到低排序。
- 分配:
- 优先处理
Important
光源,将其作为逐像素光照。 - 处理
Auto
光源,按重要性依次加入逐像素光照的候选列表,直到达到逐像素光照的最大限制。 - 剩余的光源(包括
Not Important
和多余的Auto
光源)会被处理为逐顶点光照。
通过这种方式,Unity能够合理地分配光源,确保在保持高质量光照效果的同时,优化性能。
- 作者:Cloud
- 链接:https://cloud09.xyz/article/13bb58d0-50e3-8097-8952-cd251d0843a0
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。