The WeightBuffer passed to the shader does not reflect the SkinWeightProfile.
The work around is :
void FOptimusSkinWeightsAsVertexMaskDataProviderProxy::GatherDispatchData(FDispatchData const& InDispatchData) { const int32 LodIndex = SkeletalMeshObject->GetLOD(); FSkeletalMeshRenderData const& SkeletalMeshRenderData = SkeletalMeshObject->GetSkeletalMeshRenderData(); FSkeletalMeshLODRenderData const* LodRenderData = &SkeletalMeshRenderData.LODRenderData[LodIndex]; FRHIShaderResourceView* NullSRVBinding = GWhiteVertexBufferWithSRV->ShaderResourceViewRHI.GetReference(); FSkinWeightVertexBuffer const* WeightBuffer = LodRenderData->GetSkinWeightVertexBuffer(); //work around begins if (LodRenderData->SkinWeightProfilesData.ContainsProfile(SkinWeightProfile)) { const FSkinWeightProfileStack ProfileStack{ SkinWeightProfile }; WeightBuffer = LodRenderData->SkinWeightProfilesData.GetOverrideBuffer(ProfileStack); } //works around ends check(WeightBuffer != nullptr);
Result:
Although profileB has no influence on joint3, influence on joint3 is still rendered.
Expected Result:
Since profileB has no influence on joint3, the mesh should be rendered in black
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-308945 in the post.
0 |
Component | UE - Anim - Rigging - Deformer |
---|---|
Affects Versions | 5.6 |
Target Fix | 5.7 |
Created | Aug 1, 2025 |
---|---|
Updated | Aug 7, 2025 |