您的位置:首页 > 移动开发 > Unity3D

Unity预计算全局实时GI(八)- 集群(Clusters)

2017-11-26 21:11 295 查看
到目前为止我们已经讨论过了PRGI中的光照图表。在我们的场景中减少或者去优化光照图表的数量限制了在预计算过程中需要合并以及打包光照贴图的操作数量。这对预计算的性能是有益处的并且是一种减少由Unity中PRGI解决方案所需的数据集合大小的广泛方法。
修改集群(Clusters)是一种颗粒度很细的操作,它将允许我们减少后续在Unity预计算过程中所需的操作数量。减少集群数量的额外好处是将会提高游戏运行时的表现性能。
当用PRGI生成场景的光照解决方案时,Unity简化了关于静态场景的体素化结构的计算。这些体素被叫做集群。集群是映射到用于光照的静态几何物体表面上的小贴片。集群被存储在一种层级关系的结构中,用来预处理漫反射全局光照的复杂的辐射度计算。注意虽然集群和光照图表的映射方式很像,但两者实际上是各自独立的。



Clustering Scene绘制模式可以被用来显示由Unity的PRGI系统所生成的集群大小

集群会对它们映射到的静态几何物体上的反射率(albedo)进行采样。然后,在预计算的 Light Transport 阶段会对这些集群之间的关联进行计算,使得光照传播至整个集群网络。光照数据需要在游戏运行时更新,以便在保证帧率的情况下传送全局光照,Unity 为了简化这些光照数据的数量,生成静态场景近似的低分辨率环境。



插图展示了集群X的光照值是如何与附近集群的值之间进行关联的(本图由Geomerics提供)
一旦预计算完成后,就可以修改环境光(Skybox)及光照位置、强度和颜色,不需要再重新进行预计算的过程。这些光照的改变将会反弹并且传播到整个集群网络,将场景的反射率和自发光材质一并考虑进来以计算最终的光照反射结果。
在这次初始的光照反弹之后,生成的光照结果可以被应用到集群自身。每次迭代之后,在场景中最终被shader使用之前,lit Clusters将会被采样到对应的光照贴图纹理中。
由于这个过程在CPU上异步执行,更新全局光照所花的时间取决于可用的工作线程。如果需要,可以通过Lighting窗口中的“CPU Usage”来设定工作线程的数量。



Lit Clustering场景绘制模式展示了一旦光反弹传播至整个集群网络的集群的样子
可以通过使用Clustering或者Lit Clustering场景绘制模式来显示Clusters。通过使用集群,场景会覆盖一层由多种颜色方块组成的诊断图。当每个方块图映射到对应的静态几何物体上时,每个方块图的大小代表了一个集群的大小。在场景中每种特定的颜色代表了一种不同的集群。相似地,Lit Clustering场景绘制模式展示了这些集群一旦光照被反弹传播至整个集群网络并且光照结果写回集群的样子。
减少集群的数量很大程度决定了更新的速度,也因此决定了Unity预计算实时GI在目标平台的最终效果。对应这个教程的目的来说,更重要的是,减少集群的数量将会减少光照预计算时间。结果就是,当为你的场景进行光照过程时,迭代速度也会得到改善。我们将会在接下来的教程中,讲解减少集群数量的技术。

下一篇:Unity预计算全局实时GI(九) - Lightmap Parameters

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: