码迷,mamicode.com
首页 > 其他好文 > 详细

UE4中如何实现放置大量的使用同一模型资源的StaticMeshActor不卡

时间:2021-05-04 16:01:38      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:导致   不同   今天   使用   alt   演示   ima   inf   hiera   

一、问题描述

        出于种种原因,有时候我们需要在UE4的场景中放置几千几万甚至更多的模型,这些模型具有相同的LOD,并且基础模型都使用同一模型资源。因为模型文件拖入UE4场景中会自动使用Static Mesh Actor来表示,当在程序中放置大量模型时,其实是在引擎中生成了大量Static Mesh Actor类的实例。每个SMActor都单独计算模型、材质和坐标Transform等,每个SMActor都会单独调用DrawCall来单独渲染自己。所以当大量SMActor在场景中的时候,调用Draw Call次数急剧增加导致渲染延迟增长,如果每个SMActor还要单独Tick去更新Transform坐标的话,程序逻辑延迟也会随之增加,以上两个主要延迟会导致场景变得巨卡。

二、使用Instanced Static Mesh Component来进行优化

        针对上述问题,在UE4中,我们可以使用Instanced Static Mesh Component来进行优化,简称ISMC。还有一种叫Hierarchical Instanced Static Mesh Component,简称HISMC。继承关系如下:

        技术图片

        不管是ISM还是HISM,都会把所有该组件下生成的大量的Instance Mesh加载到一个模型数组中,然后使用统一的材质,进行一次性整体渲染,DrawCall只调用1次,从而降低了渲染延迟。但是如果要更新坐标,仍然需要遍历整个模型数组,所以仍然会存在一定的程序逻辑延迟。

三、演示(过几天再填坑,今天休假,先简单做个铺垫)

1.创建并添加实例模型

2.为每个实例更新Transform坐标

3.使用贴图数组配合per instance custom parameter为不同实例模型在同一材质下创建不同的纹理

4.ISMC和HISMC对比

UE4中如何实现放置大量的使用同一模型资源的StaticMeshActor不卡

标签:导致   不同   今天   使用   alt   演示   ima   inf   hiera   

原文地址:https://www.cnblogs.com/seamus1995/p/14725599.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!