UE5有很多新功能了, 今天小编给大家介绍的是Nanite和Lumen的功能。
Nanite是全新的Mesh表示形式,是一种虚拟微表面几何体,解放了之前美术同学制作模型时对大量细节的限制,现在可以直接使用真正用于影视级别的资产,几百万甚至上亿面的模型直接可以导入到引擎中,非常顺畅的放很多的实例去高效的渲染。
例如来自照片建模或者Zbrush雕刻的高模,或者CAD的数据都可以直接放进来,我们有过测试可能几万甚至十几万的,这些实例每个都是百万面以上的都在view内能被看到的情况下,用Nanite的方式渲染依然能在2080s这样的GPU上跑到60fps,分辨率可能是1080P左右。
Nanite支持的平台主要是新一代的主机和PC,相比去年我们放出来的Lumen in the land of Nanite ,这项技术的品质和效率都有不少提升,包括磁盘的编解码效率和压缩、支持Lightmap烘焙光照、支持可破碎物体、对光线追踪场景或者物理碰撞支持自动生成减面高质量的替代Proxy mesh。
另外通过这种方式,我们还可以用解析微分法决定像素误差,使误差肉眼不可见。
为了让大量对象在场景上高效剔除,我们需要把所有场景数据都送到GPU上。其实从4.22开始,引擎就慢慢在不影响上层使用的情况下,在底层做出改进了,使渲染器成为retained mode,维护了完整的GPU scene,Nanite在这个基础上做了大量新的工作。
UE5的另一大功能Lumen,是全新的全动态GI和反射系统,支持在大型高细节场景中无限次反弹的漫反射GI,以及间接的高光反射,跨度可以从几公里到几厘米,一些CVar的设置甚至可以到5厘米的精度。
美术和设计师们可以用Lumen创建更加动态的场景。譬如做实时日夜变化、开关手电筒,甚至是场景变换。比如炸开天花板后,光从洞里射进来,整个光线和场景变化都能实时反馈。所以Lumen改善了烘焙光照带来的大量迭代时间损失,也不需要再处理lightmap的uv,让品质和项目迭代效率都有了很大提升。
为了跨不同尺度提供高质量GI,Lumen在不同平台上也适用不同的技术组合。但是目前Lumen还有很多功能不足正在改善。我们先来简单了解下Lumen的大框架:为了支持高效追踪,我们除了支持RTX硬件的ray tracing,其他情况下我们也用Lumen在GPU上维护了完整的简化场景结构,我们称之为Lumen scene。
其中部分数据是离线通过mesh烘焙生成一些辅助的信息,包括mesh SDF和mesh card,这里的card只标记这个mesh经过grid切分之后,从哪些位置去拍它的一些朝向,和Bounding Box的一些标记。
利用刚刚这些辅助信息,和Nanite的多view高效光栅化生成Gbuffer,以及后续需要用到的其他数据,运行时会通过两个层面更新LumenScene:一层是CPU上控制新的Instance进来,或者一些合并的streaming的计算;另一层是更新的GPU数据,以及更新LumenScene注入,直接和间接Diffuse光照到光照缓存里面。
我们会基于当前屏幕空间放一些Radiance Probe,利用比较特殊的手段去做重要度采样。通过高效的Trace probe得到Probe里面的光照信息,对Probe的光照信息进行编码,生成Irradiance Cache 做spatial filter。
当然,接着还会有一些fallback到global世界空间,最后再Final Gather回来,和全屏幕的bentnormal合成生成,最终全屏幕的间接光照,再在上面做一些temporal滤波。这就是我们Diffuse整个全屏的光照,最后再跟Direct光照合起来,就得到了最终的渲染结果。
所有素材来源于网络,如有侵权请联系删除