前面那篇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 );//合并成功设置给玩家模型
}
}
---------------------
作者:落寞根号七
来源:CSDN
版权声明:本文为博主原创文章,转载请附上博文链接!