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

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

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

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

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

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

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

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


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

SourceMeshList.Add( BodySMC);

SourceMeshList.Add( HeadSMC);

SourceMeshList.Add( HandArmSMC);

SourceMeshList.Add( FootSMC );

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

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

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

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

 

你可能感兴趣的:(UE4骨骼和动画)