1.LOD
LOD的目的是在一定条件下简化模型,其原理是根据观察者的与模型的距离,动态的改变模型的面数。而其本质则是在玩家原理某个模型时,使用更简单的模型替换掉之前的模型。
而且这种替换还可以发生很多次。例如在10米以内,玩家能够清晰地看到面前的一辆神车——五菱宏光的各种细节。在距离100米时,把这辆神车换成一个简化后的车壳,而内饰一概去掉,相信玩家并不知道发生了这种变化。而距离1000米时,车壳也不见了,只剩下一个有着车型贴图的盒子在马路上驰骋相信玩家同样会对身边的玩伴说,嘿,你看那车,多真实啊。距离5000米时,你甚至可以用一个面片去代替它,不过多数情况下并没有这种必要,因为有着视距和遮挡剔除的作用,你可能已经完全看不到它了,这俩神车已经不存在了。
当然,有着更多细节层次(LOD)也就意味着需要更多的内存去存储这些模型。为了确保高效,拉开差距,每次替换模型时都要保证确实优化掉了部分三角面,比如每次都会优化掉上一层次50%的三角面。有一个很好的优化依据,即被优化掉的这部分三角面要对得起额外消耗掉的内存。一个具有注脚的文本。1
生成代理模型(Generate Proxy Meshes)
得到制作者满意的集群后,即可生成代理模型。生成代理模型即是对原本的集群生成新的网格体,在这一过程中,会将材质进行组合,并且生成新的光照贴图(如果需要)。所谓代理模型,即是在不需要精确观察模型的时候使用一个简单的模型代替之前的一堆模型。
2.实例网格体渲染
默认情况下,虚幻引擎中的网格体都是在内存中批量处理的。随着多次绘制调用会被多次渲染,如果用实例化静态渲染,也被会批量渲染。
对柱子进行实例设置,用实例网格体批量渲染:
https://zhuanlan.zhihu.com/p/110231679
HLOD
HLOD
分层细节级别(HLOD)模型的构建分为两个主要步骤。首先要生成集群,对场景中的Actor进行分组,然后生成代理模型。
生成集群(Generate Clusters)
在这一过程中,我们决定了如何对场景中的模型进行分组,以及分组数量、是否生成材质等。通过对模型的合理分组(考虑空间、观察频率、以及制作者自定策略),我们得到了由不同分组的组内模型所组成的集群。
这里有四个不同的模型,可以根据HLOD工具生成HLOD,自动计算。
↩︎