UE4换装系统(合并骨骼模型)

本文介绍UE4换装系统中,将每个身体模型合并输出一个模型的方法,包括合并Lod、材质、网格等,可提升性能,但合并材质会使表情动画消失。还给出了角色骨骼模型换装原理及具体代码实现,如模型初始化、合并操作等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面那篇UE4换装系统https://blog.youkuaiyun.com/luomogenhaoqi/article/details/88350580,事实上每个身体模型还是各自渲染,现在介绍把每个身体模型合并输出一个模型,把Lod,材质,网格等合并,性能相对好很多。不过要注意材质是要合并起来的,你的表情的动画就没有了。

原则前提:角色骨骼模型换装原理无非就是把角色模型拆分多个部分,每部份必须使用同一套骨骼。

USkeletalMesh * BodySMC;//作为身体骨骼模型

USkeletalMesh * HeadSMC;//作为头骨骼模型

USkeletalMesh * HandArmSMC;//作为手臂膀骨骼模型

USkeletalMesh * FootSMC;//作为下半身模型
假如以上模型已经初始化,可使用 LoadObject<USkeletalMesh>( NULL, 资源路径, NULL, LOAD_None, NULL );

USkeletalMeshComponent*  PlayerSMC;//玩家主角模型,假如已经初始化


 TArray<USkeletalMesh*> SourceMeshList;//需要合并身体模型,把上面模型都添加到该列表

SourceMeshList.Add( BodySMC);

SourceMeshList.Add( HeadSMC);

SourceMeshList.Add( HandArmSMC);

SourceMeshList.Add( FootSMC );

  if ( SourceMeshList.Num() >= 2)//模型数量大于两个才合并
    {
        // 创建一个保存最终合成模型 CompositeMesh
        USkeletalMesh* CompositeMesh = NewObject<USkeletalMesh>( GetTransientPackage(), NAME_None, RF_Transient );

        TArray<FSkelMeshMergeSectionMapping> InForceSectionMapping;
        // 创建引擎合并模型实例MeshMergeUtil,参考引擎源码类SkeletalMeshMerge,里面有具体实现逻辑
        FSkeletalMeshMerge MeshMergeUtil( CompositeMesh, SourceMeshList, InForceSectionMapping, 0 );

        // 把SourceMeshList合并到CompositeMesh
        if (MeshMergeUtil.DoMerge())
        {
            PlayerSMC->SetSkeletalMesh( nullptr);

             PlayerSMC->SetSkeletalMesh( CompositeMesh );//合并成功设置给玩家模型
        }   
    }
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值