【程序员必看】UE5虚幻引擎:利用LOD、Nanite技术优化场景性能,提升游戏体验

目录

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:UE虚幻引擎专栏
  • 💥 标题:【程序员必看】UE5虚幻引擎:利用LOD、Nanite技术优化场景性能,提升游戏体验!
  • ❣️ 寄语:人生的意义或许可以发挥自己全部的潜力,所以加油吧!
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正

0 引言

随着游戏场景中的模型数量越来越多,模型精度越来越高(三角面数越来越多),会发现场景的运行速度逐渐减慢。这时就需要进行场景的优化操作。

1 LOD

1.1 LOD定义

以下内容摘自维基百科:

在这里插入图片描述

1.2 UE5中的LOD技术

在UE4中,显示在场景中的物体可以分为两大类别:骨骼网格体和静态网格体。

  • 骨骼网格体组件:它内部包含一具骨架(用于连接骨骼);骨架负责移动骨骼网格体的各个顶点,以便匹配当前播放的动画。因此,骨骼网格体组件适用于表现人物、生物、复杂机械或任何具备复杂运动的对象。
  • 静态网格体组件:它是由多个静态多边形构成的几何体,是虚幻引擎的基本场景构建单位。除了用于构建场景,静态网格体组件还能用于创建运动对象(如门或电梯)、刚体物理对象、植物和地形装饰物、程序化创建的建筑、游戏目标和许多其它的视觉元素。

骨骼网格体和静态网格体都可以设置LOD层级
设置的方法:

  1. 设置骨骼网格体LOD
    打开UE5人物的骨骼网格体界面,在【资产详情】中可以看到【LOD选择器】面板,我们可以选择4级LOD模型,也可以把自定义勾选,然后自己设置模型有几级LOD。
    在这里插入图片描述在这里插入图片描述
  1. 设置静态网格体LOD
    静态网格体LOD设置与骨骼网格体类似,是在【细节】-【LOD选取器】中进行设置。在【细节】【LOD设置】的LOD数量属性中可以设置模型有几级LOD。
    在这里插入图片描述

1.3 HLOD(Hierarchical Level of Detail)

虚幻引擎中的一个复杂关卡可以包含上百个细节丰富的静态网格体资产。对于这种程度的细节,一次加载方圆数公里的关卡会非常缓慢。

当模型处于远距离时,分层细节级别(HLOD)系统可以将多个静态网格体Actor合并成单个代理网格体和材质。这能减少场景中需要渲染的Actor数量,从而减少每帧的绘制调用数量,并提高性能。这在处理大型开放世界时特别有用。

构建HLOD网格体的具体步骤看:UE官方文档

2 Nanite

2.1 UE5的Nanite技术

UE5 采用了两大核心技术,其中之一就是“Nanite”,这是一个允许将高细节摄影源材料导入游戏的先进技术,Nanite 的出现让 Epic 能够利用其收购最大的摄影测量库 Quixel。

UE5的目标是让开发者轻松的建立有细节的游戏世界而无须花费更多时间在开发精细的资产上。Nanite 可以导入任何三维计算机绘图软件做出的 3D模型和3D场景,像是Zbrush、Blender,从而让开发者使用高面数的模型与高清晰度的贴图,并且无须担心存储器的限制

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
升。**

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
osg::LOD是OpenSceneGraph中的一个节点类,用于控制场景中不同级别的细节。LOD代表"Level of Detail",即细节级别。它允许我们在不同距离和视角下显示不同的几何体,以提高场景性能和视觉效果。 在使用osg::LOD时,需要创建一个osg::Switch节点,并将不同级别的osg::Node节点添加到其中。然后,将osg::Switch节点作为osg::LOD节点的子节点添加到场景图中。osg::LOD节点有一个距离范围数组,每个范围关联一个osg::Switch节点。当相机进入某个距离范围时,osg::LOD节点会自动切换到相应的osg::Switch节点,从而显示相应的几何体。 以下是一个简单的osg::LOD用法示例: ```cpp // 创建不同级别的几何体 osg::ref_ptr<osg::Geode> geode1 = createGeode1(); osg::ref_ptr<osg::Geode> geode2 = createGeode2(); osg::ref_ptr<osg::Geode> geode3 = createGeode3(); // 创建Switch节点,并将几何体添加到其中 osg::ref_ptr<osg::Switch> switchNode = new osg::Switch(); switchNode->addChild(geode1); switchNode->addChild(geode2); switchNode->addChild(geode3); // 创建LOD节点,并设置距离范围 osg::ref_ptr<osg::LOD> lodNode = new osg::LOD(); lodNode->addChild(switchNode, 0, 100); // 当距离小于100时,显示第一级几何体 lodNode->addChild(switchNode, 100, 500); // 当距离在100到500之间时,显示第二级几何体 lodNode->addChild(switchNode, 500, FLT_MAX); // 当距离大于500时,显示第三级几何体 // 将LOD节点添加到场景图中 osg::ref_ptr<osg::Group> root = new osg::Group(); root->addChild(lodNode); ``` 需要注意的是,osg::LOD节点的距离范围是按照从小到大的顺序排列的。在上面的示例中,当距离小于100时,将显示第一级几何体;当距离在100到500之间时,将显示第二级几何体;当距离大于500时,将显示第三级几何体。如果范围没有重叠,那么osg::LOD节点将只显示其中一个距离范围内的osg::Switch节点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值