UE4 中 ES3.1 的 75 根骨骼限制

之前提到过在 ES2.0 上使用单个材质蒙皮的骨骼不能超过 75 根,在 ES3 之后就没有这个限制了,但是 UE 里目前还有这个限制。

Warning: SkeletalMesh SK_m0146b0003, is not supported for current feature level (ES3_1) and will not be rendered. NumBones 78 (supported 75), NumBoneInfluences: 4

Runtime/RHI/Public/RHIDefinitions.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
inline int32 GetFeatureLevelMaxNumberOfBones(const FStaticFeatureLevel FeatureLevel)
{
switch (FeatureLevel)
{
case ERHIFeatureLevel::ES3_1:
return 75;
case ERHIFeatureLevel::SM5:
return 65536; // supports uint16
default:
checkf(0, TEXT("Unknown FeatureLevel %d"), (int32)FeatureLevel);
}

return 0;
}

看了下相关的代码,UE 在下面这次提交中修改了 ES3.1 原本 256 到 75,commit 里提到的是修复了 Mobile Preview 的 Crash:

Limit ES3.1 to 75 bones like ES2. All ES3.1 feature level platforms use UB for Bones. Project has to set Compat.MAX_GPUSKIN_BONES=75 to support SkelMeshes with more than 75 bones for ES3.1 and ES2.

该代码在 4.21 Preview 4 中提交:Unreal Engine 4.21 Preview

在 answers 上也有一些相关的问题: