(UE4)变换UPoseableMeshComponent的骨骼后如何正确渲染

问题描述 投票:0回答:1
  • 我正在尝试使用UPoseableMeshComponent在UE4(4.25)中变换骨骼。 (image of initial state
  • 但是,当我使用SetBoneTransformByName变换骨骼后,渲染进入某种怪异的状态,下面不是运动模糊,只是应用SetBoneTransformByName(image after transform blurred rendering)之后的姿势。尽管Unlit渲染似乎很好。
  • [我调用AActor :: SetActorHiddenInGame(true)设置为不可见,然后再调用AActor :: SetActorHiddenInGame(false)再次显示该actor之后,渲染将被修复。 (Image after hide/show
  • 该代码完全是在c ++中(没有BP),我首先使用SkeletalMesh创建自定义角色,并在类似下面的代码中添加了UPoseableMeshComponent:
void AMyCharacter::CreatePoseableMesh() {
    USkeletalMeshComponent* skeletalMesh = GetMesh();
    UPoseableMeshComponent* poseMesh =
        NewObject<UPoseableMeshComponent>(this, UPoseableMeshComponent::StaticClass());
    if (poseMesh) {
        poseMesh->RegisterComponent();
        poseMesh->SetWorldLocation(location);
        poseMesh->SetWorldRotation(rotation);
        poseMesh->AttachToComponent(GetRootComponent(),FAttachmentTransformRules::KeepRelativeTransform);
        poseMesh->SetSkeletalMesh(skeletalMesh->SkeletalMesh);
        poseMesh->SetVisibility(true);
        skeletalMesh->SetVisibility(false);
    }
}

UPoseableMeshComponent中是否缺少设置?

c++ unreal-engine4
1个回答
0
投票

自我解决(有点..)。我首先尝试了BP,即使BP也需要在PoseableMeshComponent上设置SetVisibility(false),然后设置SetVisibility(true)才能正确渲染。可能是UE4中的一个小错误。

TMap<FString, FTransform> const& transforms; // given. map of bone name and its transform.
poseMesh->SetVisibility(false); // PoseableMeshComponent. Hide once
for (auto& x : transforms) {
    poseMesh->SetBoneTransformByName(FName(*x.Key), x.Value, EBoneSpaces::WorldSpace);
}
poseableMesh->SetVisibility(true); // show it.

似乎现在是解决方法。

© www.soinside.com 2019 - 2024. All rights reserved.