【问题标题】:(UE4) How to properly render after transforming the bones of UPoseableMeshComponent(UE4) UposeableMeshComponent的骨骼变形后如何正确渲染
【发布时间】:2020-09-22 21:01:34
【问题描述】:
  • 我正在尝试使用 UPoseableMeshComponent 在 UE4 (4.25) 中转换骨骼。 (image of initial state)
  • 但是,在我使用 SetBoneTransformByName 转换骨骼之后,渲染进入了一些奇怪的状态,下面不是运动模糊,只是应用 SetBoneTransformByName (image after transform blurred rendering) 后的一个姿势。虽然Unlit 渲染看起来还不错。
  • 在我调用 AActor::SetActorHiddenInGame(true) 设置为不可见,然后调用 AActor::SetActorHiddenInGame(false) 再次显示演员后,渲染将被修复。 (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】:

    我可能错了,但我认为这是因为手动设置骨骼变换不会写入速度缓冲区,并且时间 AA 不知道有什么东西移动了,从而导致难看的模糊。

    如果您切换到 FXAA 并且问题消失 - 这是您的提示。

    有一个材质节点叫做 Previous Frame Switch - 你可以通过它使用自定义参数来控制速度缓冲区。

    【讨论】:

      【解决方案2】:

      自行解决(有点..)。我首先尝试使用 BP,甚至 BP 也需要 SetVisibility(false) 然后 SetVisibility(true) 在 PoseableMeshComponent 上正确渲染。可能是 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.
      

      目前看来是解决办法。

      【讨论】:

        猜你喜欢
        • 2021-12-18
        • 2020-08-11
        • 1970-01-01
        • 1970-01-01
        • 2013-11-03
        • 2021-01-20
        • 2013-06-04
        • 1970-01-01
        • 2015-06-20
        相关资源
        最近更新 更多