UDN
Search public documentation:

MorphTargetsKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 스켈레탈 메시 > 모프 타겟
UE3 홈 > 애니메이션 > 모프 타겟
UE3 홈 > 캐릭터 아티스트 > 모프 타겟

모프 타겟


문서 변경내역: Sam Zamani 작성. Shane Caudle, Lina Song, James Tan 수정. 홍성진 번역.

개요


모프 타겟은 메시를 변경하는 데 있어 본-기반 스켈레탈 애니메이션보다 콘트롤 폭이 넓은 방법입니다. 스태틱 모프 타겟은 기존 메시에 비해 약간만 다른 버전입니다. 예를 들어 캐릭터가 미소짓는 버전을 만들라 치면, 일단 "smile" 모프 타겟으로 임포트합니다. 그런 다음 게임에서 이 모프 타겟을 적용하면 얼굴 버텍스를 변경하고 캐릭터를 웃게 만들 수 있으며, 각 버텍스에 훨씬 미세한 콘트롤이 가능합니다.

언리얼 엔진 3 의 모프 타겟은 더하기 식으로 적용됩니다. 무슨 뜻이냐면 "smile" 에 대한 모프 타겟이 하나 있는데, 이는 입 주변의 버텍스만 변경되는 것입니다. 그리고 또다른 "raise eyebrow" (눈썹 치켜올리기)는 눈 주변의 버텍스에만 영향을 끼칩니다. 둘 다 적용하면 미소와 눈썹 동작이 같이 나타납니다. 이를 통해 여러 개의 멀티 타겟을 조합하는 식으로 폭넓은 표정을 연출할 수 있는 것입니다. 프로세싱과 메모리 제약 이외에는, 한 번에 스켈레탈 메시에 적용할 수 있는 모프 타겟 수는 제한이 없습니다.

모프 타겟과 스켈레탈 애니메이션은 같이 작업 가능합니다. 모프 타겟은 본 트랜스폼이 적용되기 전에 스켈레탈 메시에 적용됩니다. 모프 타겟은 메시의 레퍼런스 포즈 메시를 베이스로 하여 제작해야 하며, 그 후 임포트시 버텍스를 베이스 메시에 대해 비교한 다음 다른 것들만 저장합니다. 베이스 메시의 버텍스 일부만 변경하는 모프 타겟으로 작업할 때의 메모리 비용이 절감되는 것입니다.

모프 타겟 익스포트 / 임포트하기


FBX 를 사용하여 모프 타겟을 익스포트하는 법에 대한 정보는 FBX 를 사용하여 모프 타겟 익스포트하기 페이지를 참고하시기 바랍니다.

FBX 를 사용하여 모프 타겟을 임포트하는 법에 대한 정보는 FBX 를 사용하여 모프 타겟을 임포트하기 페이지를 참고하시기 바랍니다.

스켈레탈 메시에 LOD 레벨이 하나 이상 있는 경우, 이들 각 LOD용 모프 타겟도 임포트해 줘야 합니다. 파일 - '모프 타겟 LOD 임포트...' 메뉴로 하면 됩니다. LOD 0 모프 타겟을 베이스 스켈레탈 메시의 LOD 0 메시로부터 생성해야 하는 것과 마찬가지로, 버텍스를 제대로 일치시키려면 새로 생긴 각각의 모프 타겟 LOD 레벨에 대해서도 베이스 스켈레탈 메시의 동일 LOD로부터 생성해야 합니다. 참고로 베이스 메시에 대해서는 LOD 레벨이 하나 이상 있는데 모프 타겟 LOD 는 없는 경우, 메시가 낮은 LOD 로 떨어질 때 모프 타겟이 적용되지 않습니다.

모프 타겟 애니메이션


Blend Shapes (블렌드 셰이프)가 포함된 애니메이션 데이터를 FBX 파일로 익스포트한 다음 애니메이션으로 임포트할 수 있습니다. 모프 타겟 세트 안에 애니메이션이 필요로 하는 모프 타겟을 포함시켜 줘야 합니다. BlendCurve (블렌드 커브) 이름을 가지고 일치시키죠. 예를 들어 소스 파일에 있는 "blink" 라는 이름의 블렌드 커브를 애니메이션으로 익스포트하려는 경우, (스켈레탈 메시 컴포넌트에 연결된) 모프 타겟 세트에 "blink" 가 들어있어야 애니메이션이 돌아갑니다. 애님세트 에디터에서 미리볼 수 있게 하려면, 적절한 모프 타겟 세트를 PreviewMorphTargetSets 에 더해주면 됩니다.

애님트리( 에디터)에서, 이제 애님 노드 시퀸스 안의 그 애니메이션을 사용하면 노드 웨이트(weight, 가중치)로 모프 타겟 웨이트를 정규화시켜 블렌딩됩니다.

모프 타겟 미리보기


모프 타겟 탭에서 보면 슬라이더가 달린 모프 타겟 목록이 보일 것입니다. 어느 모프 타겟이든 슬라이더를 사용하여 웨이트를 바꾸면 됩니다.

morph_preview.jpg

모프 타겟 이름바꾸기


편집 박스에서 모프 타겟의 이름을 바꿀 수는 있지만, 애니메이션에서 사용중인 모프 타겟의 이름을 바꾸면 애니메이션이 깨질 수 있습니다. 그러나 MorphNodePose (또는 다른 MorphTarget 관련 노드)를 사용하면, 올바르게만 설정한 경우 괜찮을 것입니다.

모프 타겟 지우기


먼저 지울 모프 타겟을 선택한 다음 메뉴 모프 타겟 - 모프 타겟 삭제 로 지우면 됩니다. 모두 선택 으로 모두 선택/해제 가능합니다.

모프 타겟 업데이트하기


베이스 메시가 (영향력 등이) 변경된 경우, 모프 타겟 뷰어를 열 때 모프 타겟을 리매핑해도 될지 물어옵니다. (예전 메시를 가진) 모프 타겟이 잘못 매핑되어 있는 경우 작동하지 않습니다. 메뉴 모프세트 - 모든 타겟 업데이트 를 사용해도 됩니다.

모프 타겟 제어하기


모프의 제어는 FaceFX 를 통해서, 마티네로 또는 코드로 가능합니다.

애님트리에 모프 타겟 추가하기

morph_animtree.jpg

한번에 여러 모프 타겟을 블렌드하려면 애님트리를 사용합니다. 애님트리 에디터 에서 보면 Morph 라벨이 붙은 루트 "애니메이션" 노드로의 입력이 보일 것입니다. 여러 모프 노드 유형을 연결하기 위함입니다. 주요 모프 노드 유형은 둘 있습니다:

  • Morph Pose 모프 포즈 - 모프 타겟 세트에서의 스태틱 모프 타겟입니다.
  • Morph Weight 모프 웨이트 - 그 자식 노드에 적용된 "세기(strength)" 제어에 사용되는 노드입니다. 이 노드 유형에 있는 슬라이더를 통해 에디터에서 웨이트를 변경하면서 결과를 확인할 수 있습니다.

애님트리에 모프 노드를 더하기 전 먼저, 미리보기에 사용할 모프 타겟 세트를 추가해야 합니다. 루트 애니메이션 노드를 선택한 다음 PreviewMorphSets 배열을 펼친 다음 그 안에 추가하면 됩니다. 애님트리에 모프 포즈 노드를 놓으면, 거기에 사용할 모프 타겟 이름을 정해줍니다. 그러면 지정한 모프 타겟 세트에서 찾아봅니다. 실제 게임에서는 스켈레탈 메시 컴포넌트에 있는 MorphSets 배열이 대신 사용됩니다.

모프 타겟 블렌딩은 스켈레탈 애니메이션 블렌딩과는 다른 식으로 작동합니다. 결과가 다양한 입력을 보간하는 것이 아니라, 추가식으로 결합되기 때문입니다. 예를 들자면 한 노드의 입력에 여러 모프 타겟을 연결할 수 있다는 뜻입니다.

애님트리에 대한 세부 정보는 AnimTree Editor User Guide KR 를 참고해 보시기 바랍니다.

마티네에서 모프 타겟 사용하기

마티네에서 모프를 사용하려면...

  1. 모프 트랙 안에 MorphNodeWeight 를 통해 가는 모프포즈 포함 애님트리를 만듭니다.
  2. MorphNodeWeight 에 NodeName 을 줍니다. 마티네에서 구동시키는 데 이 이름을 사용합니다.
  3. 애님트리 뷰어에서 모프를 확인하려면, 애님트리를 선택하고, PreviewSkelMesh 와 PreviewMorphSets 를 설정합니다.
  4. 월드 우클릭 - 액터 추가 - Add SkeletalMeshMAT 로 스켈레탈 메시를 추가하면 애님트리를 사용할 수 있게 됩니다.
  5. 메시를 선택하고 그 프로퍼티에서 SkeletalMeshactpr/SkeletalMeshComponent/SkeletalMeshComponent 로 이동, AnimTreeTemplate 와 MorphSets 를 생성한 것으로 설정합니다.
  6. 마티네를 만들고, 메시에 NewSkeletalMeshGroup 을 추가한 다음 그 위에 우클릭하여 모프 웨이트를 추가합니다. 선택한 다음 그 프로퍼티에서 애님트리 MorphNodeWright 의 NodeName 을 MorphNodeName 부분에 추가합니다. 이제 키프레임을 추가할 수 있으며, 다른 마티네 트랙처럼 애니메이트 가능합니다. 한 번에 여러 MorphWeight 트랙을 두고서 블렌딩할 수도 있습니다. 모프 시퀸스를 애니메이트하려면, 다른 컷을 켜면서 이전 것은 꺼 줘야 합니다.

마티네 관련 상세 정보는 Matinee User Guide KR 페이지를 참고하시기 바랍니다.

언리얼스크립트에서 모프 타겟 사용하기


UnrealScript 를 사용하여 게임 내 모프 타겟의 웨이트를 변경할 수 있습니다. 그 방법은 먼저 애님트리 에디터에서 Morph Node 의 'NodeName' 프로퍼티를 설정해야 합니다. 그런 다음 스켈레탈 메시 컴포넌트의 'FindMorphNode' 함수를 사용하여 이름으로 노드를 찾은 다음, SetNodeWeight 를 호출하여 노드의 웨이트를 변경하면 됩니다. 예제입니다:

var MorphNodeWeight WeightNode;

simulated event PostInitAnimTree(SkeletalMeshComponent SkelComp)
{
  Super.PostInitAnimTree(SkelComp);

  if (SkelComp == Mesh)
  {
    WeightNode = MorphNodeWeight(Mesh.FindMorphNode('MyNode'));
if(WeightNode != None)
{
   WeightNode.SetNodeWeight(NewWeight);
}
  }
}

기억하실 것은 액터를 소멸(destroy)시킬 때 모든 Morph 노드 오브젝트 리퍼런스를 비워야 한다는 점입니다.

simulated function Destroyed()
{
  Super.Destroyed();

  WeightNode = None;
}

Morph Target Node 참고서


Morph Node Weight


(모프 노드 웨이트) 노드는 부착된 모든 모프 노드 포즈의 웨이트를 동적으로 조절할 수 있는 노드입니다.

MorphTargets_MorphNodeWeight.jpg

프로퍼티

  • Node Name 노드 이름 - 언리얼스크립트에서 이 모프 노드를 찾는 데 필요한 이름입니다.

언리얼스크립트 함수

  • SetNodeWeight(float NewWeight) - 노드의 웨이트를 설정합니다.
    • NewWeight - 새로이 설정할 웨이트입니다.

Morph Node Weight By Bone Angle


(본 각도별 모프 노드 웨이트) 노드는 본 사이의 두 각도 중 작은 ( 0 도에서 180 도 사이의) 각을 구하여, 그것을 정의된 값을 사용해 모프 타겟 스케일을 조절하는 웨이트로 전환시킵니다. 머티리얼 파라미터는 이 모프 노드와 함께 사용하여 머티리얼 파라미터를 자동으로 조절하는 데 사용할 수 있습니다.

MorphTargets_MorphNodeWeightByBoneAngle.jpg

프로퍼티

  • Base Bone Name 베이스 본 이름 - 베이스 본 이름입니다.
  • Base Bone Axis 베이스 본 축 - 베이스 본에 사용할 X, Y, Z 축입니다.
  • Invert Base Bone Axis 베이스 본 축 반전 - 참이면 베이스 본 축을 뒤집습니다.
  • Angle Bone Name 앵글 본 이름 - 앵글 본 이름입니다.
  • Angle Bone Axis 앵글 본 축 - 앵글 본에 사용할 X, Y, Z 축입니다.
  • Invert Angle Bone Axis 앵글 본 축 반전 - 참이면 애글 본 축을 뒤집습니다.
  • Control Material Parameter 머티리얼 파라미터 제어 - 참이면 이 모프 노드는 머티리얼 파라미터 역시도 제어합니다.
  • Material Slot Id 머티리얼 슬롯 ID - 스켈레탈 메시상에 제어할 머티리얼 슬롯입니다.
  • Scalar Parameter Name 스칼라 파라미터 이름 - 제어할 머티리얼 스칼라 파라미터 이름입니다.
  • Weight Array 웨이트 배열 - 각기 다른 각도에 사용할 웨이트 배열입니다.
    • Angle 각도 - 이 웨이트를 적용할 각도입니다.
    • Weight 웨이트 - 적용할 웨이트입니다.

Morph Node Weight By Bone Rotation


(본 로테이션별 모프 노드 웨이트) 노드는 본의 로테이션을, 기준 스켈레톤에 비교해서, 정의된 값을 사용하여 모프 타겟 스케일을 조절하는 웨이트에 매핑시킵니다.

MorphTargets_MorphNodeWeightByBoneRotation.jpg

프로퍼티

  • Base Bone Name 베이스 본 이름 - 베이스 본 이름입니다.
  • Base Bone Axis 베이스 본 축 - 베이스 본에 사용할 X, Y, Z 축입니다.
  • Invert Base Bone Axis 베이스 본 축 반전 - 참이면 베이스 본 축을 뒤집습니다.
  • Weight Array 웨이트 배열 - 각기 다른 각도에 사용할 웨이트 배열입니다.
    • Angle 각도 - 이 웨이트를 적용할 각도입니다.
    • Weight 웨이트 - 적용할 웨이트입니다.
  • Control Material Parameter 머티리얼 파라미터 제어 - 참이면 이 모프 노드는 머티리얼 파라미터 역시도 제어합니다.
  • Material Slot Id 머티리얼 슬롯 ID - 스켈레탈 메시상에 제어할 머티리얼 슬롯입니다.
  • Scalar Parameter Name 스칼라 파라미터 이름 - 제어할 머티리얼 스칼라 파라미터 이름입니다.

Morph Node Multi Pose


(모프 노드 다중 포즈) 노드는 모프 타겟 세트에 저장된 다수의 모프 타겟을 적용합니다. 배열에 저장된 웨이트 값을 조절하면 이 모프 노드에 의해 적용된 모프 타겟 각각의 총 웨이트를 조절할 수도 있습니다.

MorphTargets_MorphMultiPose.jpg

프로퍼티

  • Morph Names 모프 이름 - 적용할 모프 타겟 이름입니다.
  • Weights 웨이트 - 적용할 모프 타겟 각각에 대한 웨이트입니다.
  • Node Name 노드 이름 - 언리얼스크립트에서 이 모프 노드를 찾는 데 필요한 이름입니다.

언리얼스크립트 함수

  • AddMorphTarget(Name MorphTargetName, optional float InWeight = 1.0f) - 이 MorphNodeMultiPose 에 사용할 MorphTarget 을 이름으로 추가합니다. FindMorphTarget 을 사용하여 소유하는 SkeletalMeshComponent MorphSets 배열에서 그 모프 타겟을 찾아봅니다. 추가되어 있으면 참을 반환합니다.
    • MorphTargetName - 추가시킬 모프 타겟 이름입니다.
    • InWeight - 이 모프 타겟을 설정할 웨이트입니다.
  • RemoveMorphTarget(Name MorphTargetName) - 이 MorphNodeMultiPose 에 사용되는 MorphTarget 을 이름으로 제거합니다.
    • MorphTargetName - 제거할 모프 타겟 이름입니다.
  • UpdateMorphTarget(MorphTarget Target, float InWeight) - 모프 타겟의 웨이트를 업데이트합니다.
    • Target - 웨이트를 수정할 모프 타겟입니다.
    • InWeight - 이 모프 타겟을 설정할 새로운 웨이트입니다.

Morph Node Pose


(모프 노드 포즈) 노드는 모프 타겟 세트에 저장된 모프 타겟을 저장합니다. 웨이트 값을 조절하면 이 모프 노드에 의해 적용되는 총 웨이트 역시 조절할 수 있습니다.

MorphTargets_MorphNodePose.jpg

프로퍼티

  • Morph Name 모프 이름 - 적용할 모프 타겟 이름입니다.
  • Weight 웨이트 - 적용할 총 웨이트입니다.
  • Node Name 노드 이름 - 언리얼스크립트에서 이 노드를 찾는 데 사용되는 이름입니다.

언리얼스크립트 함수

  • SetMorphTarget(Name MorphTargetName) - 모프 타겟을 설정합니다.
    • MorphTargetName - 설정할 모프 타겟 이름입니다.