UE4 /UE5 PC/安卓优化

B站教学链接:https://space.bilibili.com/449549424?spm_id_from=333.1007.0.0


一、概述

       UE4/UE5场景中的资源越多,消耗的内存就越大,就会越卡顿。这里教大家如何进行场景优化,来减少内存,使得场景更加流畅。

二、模型优化

   2.1、使用3Dmax或者Maya制作的模型,面数最好不要太多,虽然UE4/UE5能支持百万级的面数,但是能减少的面数尽量减少,不需要的部分能删除就删除。

  2.2、材质ID,在Max或者Maya里面,一个模型材质过多的话会分配材质ID,但是在UE4里面如果材质过多,会加大渲染消耗资源。所以在UE里面如果模型简单的话尽量用一个材质解决。

  2.3、这个跟程序设计师有关,模型的坐标一定要在模型中心点的位置,这样后面做交互会更加方便一点。

  2.4、光照贴图和阴影贴图:在往UE4里面导入物体的时候我们一定要记住我们这个物体要有2UV,顾名思义就是两套UV 第一套UV我们是存放光照贴图的,第二套就是存放我们的阴影贴图的。这个在UE里面了则是UV0和UV1表示,默认的就是UV就是1,以及我们光影贴图的分辨率大小也是2的次幂。 

三、灯光优化

  3.1、Lightmass Importance Volume:大场景,不添加则全局构建光照贴图产生全局Indirect Lighting Cache;添加则在指定区域构建光照贴图Indirect Lighting Cache;

 3.2、点光源和聚光灯尽量不要开启Cast Volumetric Shadow;默认只有平行光开启了此选项。开启后的性能消耗为不开启的性能消耗三倍。不开启表示阴影计算方式使用Shadow Mapping,开启表示使用Shadow Volume,前者的阴影计算没有后者精准,但是计算量小;

 3.3、大气雾如果开启体积雾,建议将灯光改成静态光,这样在Build Lighting时会生成预计算的体积雾相关数据,这样可以显著提升体积雾性能。体积雾性能消耗巨大。

 3.4、静态光不用时禁用Static Lighting 

3.5、关闭Support Global clip plane for Planar Reflections,默认关闭,开启后消耗巨大。

 3.7、Ambient Occlusion开启之后,如果是动态光的情况下会消耗资源,开启AO后(Project Settings -> Rendering -> Default Settings ->Ambient Occlusion),引擎默认的AO为SSAO(Screen Space Ambient Occlusion), SSAO无法进行预计算,所以GPU性能开销较大,可以修改为DFAO(Distance Field Ambient Occlusion)以提升性能,因为DFAO可以预计算,代价是增加显存开销;

 四、材质优化

  4.1、材质的复杂度不宜过高,尽量少使用半透明材质,会很消耗资源,材质类型的性能,从快到慢:Opaque -> Masked -> Translucent。

  4.2、材质使用时要提前规划好,相同材质的物体公用一个材质,尽量避免从网上下载的多个材质,每个都用一遍,提高复杂度。

五、植被优化

  5.1、在场景中有大量的植被时,可以使用HierarchicalInstancedStaticMesh进行优化,这样可以减少CPU的开销,因为使用HierarchicalInstancedStaticMesh,可以减少draw call次数,要想场景做到更好的优化,最好的办法是需要减少材质种类,提高材质复用率

  5.2、 为Instanced Mesh设置合适的Cull Distance。

六、碰撞优化

 6.1、在模型制作的所有的模型不需要碰撞,如果是加了碰撞,在引擎里移除碰撞。

 6.2、BoxComponent的 Generate Overlap Events 设置为false。如果不需要Overlap事件,那么就将该属性设置设置为false,默认为true。当BoxCompont达到一定量级时,开启Generate Overlap Events的性能消耗是关闭情况下的两倍。

 6.3、 不需要物理,将 Simulate Physics 设置为false。

 6.4、 不需要Hit事件,将 Simulation Generates Hit Events 设置为false。

 6.5、如果场景中物体类型(WorldStatic、WorldDynamic、Pawn等)很多,且每种数量也很多,则Collision 的 Object Response 通道设置的越少越好,把可以设置为 Ignore 的通道都设置为 Ignore 。如果场景中的物体类型比较单一,即使这种类型的物体在场景中有数百个,Object Response 即使都设置为Block 或者 Overlap,对性能也没有影响。

七、阴影优化

  7.1、Directional Light:Dynamic Shadow Distance(默认为0,表示关闭)。提升性能的原因:Dynamic Shadow Distance 表示在多少距离内使用动态阴影,超过这个距离之外Fade成静态阴影,而Fade成静态阴影后就可以提升性能。

八、UI优化

  8.1、游戏线程优化

    1.GridPanel会遍历所有的ChildWidgets,r然后计算Draw Elements,最后Grid Panel返回一个或者多个Draw Elements进行渲染,如果是是一个复杂的控键数,这个开销也是比较大的。解决的办法是使用Invalidation Box缓存Draw Elements (Vertex Buffer),用Invalidation Box封装GridPanel。

 

这个有一点需要注意的是一个Volatile的概念,如果标志成Volatile的Widget每帧都会重新计算,一些属性的Widget Binding会使得Widget变成Volatile,Check Box放在Invalidation Box下会不起作用,需要设置成Volatile,建议自定义User Widget,用Button实现对应功能。

可见性:HitTestInvisible 可见、当前控件不可点击、所有子控件不可点击,SelfHitTestInvisible 可见、当前控件不可点击、不影响子控件,Hidden 不可见、占用布局空间,Collapsed 不可见、不占用布局空间。

 果大量的Visible会导致点击响应太慢,这个也会消耗很大的性能,Button设置成Visible,其它Widgets可以设置成Self Hit Test Invisible或Hit Test Invisible,Collapsed不占用布局空间, 略优于Hidden,Show/Collapse要优于AddToViewport/RemoveFromViewport。

这里还要讲一个是Widget Binding,某些属性上Widget Binding会导致对应Widget被放入Volatile List,这些属性发生变化,表示对应的控件需要重新计算Vertex Buffer,所以我们尽量避免这个Widget Binding。另外还有一点是Widget Binding会每帧Tick执行,这一点也会带来比较大的性能开销,所以手机上面建议使用C++ Event设置Widget属性。

 8.2、渲染线程优化

渲染线程优化,渲染线程首先介绍一个合并批次,我们在左图看到的是UI的有些可以合并批次,有些不可以合并批次,像不合并批次Canvas Panel、合并批次Grid Panel、Uniform Grid Panel、Vertical Box、Horizontal Box。

 Retainer Box,将UI渲染到Render Target,再将Render Target 渲染到屏幕,另外引擎处理了点击响应区域的映射,鼠标点击区域引擎已经自动在屏幕上面映射了相应的测试。

Widget Render:将UI渲染到Render Target,Slate Render: 使用缓存的Render Target渲染Back Buffer,每隔3帧一个循环进行Retainer Box的更新,将1帧的UI渲染工作量分配到3帧去处理。

九、程序优化

       蓝图的话其实在大多数情况下性能都是没有问题的,但是如果我们要在低端机上面需要追求很好性能的话,其中有计算量比较大的逻辑,我们是不建议放在蓝图里面做,因为毕竟中间有很多的分装,建议可以把一些计算量比较复杂的逻辑下放在C++里面做,运行效率比蓝图高,更灵活,很多C++接口并未开放成蓝图接口,除了UI动画,其它代码都能用C++实现。

对于UI开发,我们建议开发者有Widget Manager,可以在蓝图中,也可以在C++中,就是管理所有User Widget,Brush、Font等资源也可以在Widget Manager中统一管理,这样的项目比较好管理,特别是UI比较多的时候。

对于3DRTT,这个小技巧并不需要每帧Tick,只要和动画频率大致同步就可以,所以我们要把每帧去渲染的两个选项关闭,同时这个蓝图我们设置成0.03秒Tick一次,产生在蓝图当中Tick这样的RTT,另外还有一个小细节就是Render Target的尺寸不要太大,会影响显存和渲染效率。

### 回答1: 使用 Unreal Engine 5 (UE5) 打包场景生成程序的方法如下: 1. 在 Unreal Editor 中打开要打包的场景。 2. 在菜单栏中选择 "File" > "Package Project"。 3. 在弹出的对话框中选择打包类型,如 Windows、Android 等。 4. 设置打包选项,例如是否包含资源、是否压缩文件等。 5. 选择打包输出路径。 6. 单击 "Package" 按钮进行打包。 打包完成后,在指定的输出路径中可以找到打包的程序和资源文件。 注意:本教程的步骤及打包选项可能因 UE5 的版本不同而有所变化,请以 UE5 的官方文档为准。 ### 回答2: UE5是一款强大的游戏引擎,可以用于创建各种类型的游戏。要打包UE5场景生成程序,可以按照以下步骤进行操作: 1. 在UE5编辑器中打开要打包的场景。确保场景中的所有内容,如模型、材质、贴图和脚本等都已经准备好,并且场景运行正常。 2. 菜单栏中选择“文件(File)”-“打包(Package)”选项。 3. 在打包窗口中,选择要打包的平台。UE5支持多种平台,如Windows、Mac、Linux等。根据需要选择相应的平台。 4. 配置打包设置。在打包窗口中可以设置打包程序的输出路径、打包格式、打包类型等。可以根据自己的需求进行相应的设置。 5. 点击“打包(Package)”按钮,开始打包场景生成程序。UE5会根据设置生成对应平台的可执行文件和相关资源文件。 6. 等待打包完成。打包时间长度根据场景的复杂性和电脑性能而不同,一般会有一个进度条显示当前打包进度。 7. 打包完成后,可以在输出路径中找到生成的可执行文件和资源文件。将这些文件复制到目标电脑中,即可运行生成的场景程序。 需要注意的是,打包场景生成程序可能需要一些额外的设置和配置,比如设置启动画面、兼容性设置等。如果有需要,可以在打包窗口进行相应的设置。 以上就是使用UE5打包场景生成程序的基本步骤。通过这些步骤,我们可以将自己在UE5中设计的场景生成为一个独立的可执行文件,方便分享和使用。 ### 回答3: UE5(Unreal Engine 5)是一款功能强大的游戏开发引擎,通过它可以轻松创建出高度逼真的三维场景。想要打包UE5场景生成程序,可以按照以下步骤进行操作。 首先,在UE5编辑器中打开你的场景项目。确保你已经完成了对场景的设计和制作,并且将其保存。 接下来,点击菜单栏中的“文件”选项,在下拉菜单中选择“打包项目”。这将打开项目打包设置的对话框。 在对话框中,选择“生成配置”选项卡。在这里,你可以选择场景的目标平台和配置。比如,你可以选择打包为Windows、Mac或者Android等平台的执行文件。 接着,点击“生成”按钮,UE5将会开始生成场景生成程序。这个过程可能需要一段时间,具体时间取决于你的项目规模和计算机性能。 完成生成后,你可以在输出目录中找到生成的场景生成程序。通常情况下,输出目录在项目文件夹的根目录下,名为“Binaries”或“Build”。 现在,你可以将生成的场景生成程序与其他人共享,或者在目标平台上运行它来查看和体验你设计的场景。 总的来说,打包UE5场景生成程序是一个简单的过程,只需要几个简单的步骤即可完成。记住,在打包之前要确保你的场景已经完整保存,并选择适合的目标平台和配置。这样,你就可以轻松地分享和展示你的精彩场景了。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞起的猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值