Unreal

22. IK Rig And Retarget & Socket & fbx Import

Kelvin의 게임개발 2024. 2. 15. 01:22
728x90
반응형

1. Class Inherit

 

UE에서 부모클래스로부터 가상함수를 상속받아 override할 때 UFUNCTION() 매크로를 빼야 정상 작동한다

class STUDYUE_API AWeapon : public AItems
{
	GENERATED_BODY()
	
protected:
	//AItem의 virtual 함수를 override 할 때 UFUNCTION()매크로를 뺌
	virtual	void OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) override;

	virtual void OnSphereEndOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex) override;
};

 

 

2. Socket

 

SkeletalMesh의 SkeletonTree에서 AddSocket으로 원하는 Bone에 Socket을 만들 수 있다

 

이렇게 Socket이 생성된 걸 확인할 수 있다

 

생성된 Socket의 Transform은 부모 Bone의 Transform과 일치한다 따라서 Bone이 움직이면 Socket도 함께 움직인다

 

Socket에는 다른 Actor나 Component가 Attach될 수 있다

 

Socket이나 Bone에서 Add Preview Asset으로 원하는 asset을 붙혀서 미리보기가 가능하다 ex) Transform변경 시 Attach된 Object를 미리 확인할 수 있다

 

이렇게 Preivew asset을 붙히면 socket의 Transform을 조절하기 쉬워진다

 

Preview asset뿐만 아니라 Preview Animation도 설정할 수 있다

원하는 Animation asset을 지정하면 해당 Animation이 Preview된다

 

 

3. Import fbx

 

Mesh fbx file을 import할 때 다음과 같은 Option Tab이 뜨게 된다

여기서 원하는 Mesh의 Skeleton을 직접 지정하거나 import한 Mesh fbx의 자체 skeleton을 사용하려면 None으로 지정하고 Import All해주면 된다

 

import가 잘된걸 확인할 수 있다

 

Animation fbx file을 import할 때도 마찬가지로 Option Tab이 뜬다

마찬가지로 해당 Animation에 맞는 Skeleton을 지정해주고 Import All해주면 된다

 

import가 잘된걸 확인할 수 있다

 

 

4. IK Rig & Retarget & IK Retargeter

 

Animation은 Skeleton에 맞게 제작된다 따라서 다른 Skeleton으로 바로 변경이 불가능하다

 

UE에서 Animation의 Skeleton을 변경하는 과정을 바로 Retarget이라 한다

 

이러한 특정 Animation의 Skeleton을 A Skeleton-> B Skeleton으로 Retarget을 하기 위해서는 우선 A의 IK Rig을 만들고 원하는 SkeletaMesh를 지정해야 한다

 

이제 가장 Root가 되는 Bone을 Retarget Root로 지정해야 한다

Retarget Root가 잘 지정된걸 확인할 수 있다

 

Add New Chain으로 Retarget 할 Skeleton의 Chain을 만들어주어야 한다

 

원하는 Bone을 선택 후 New Retarget Chain으로 Bone Chain을 만들 수 있다

 

원하는 Chain Name을 지정하고 Add Chain해준다 이때 다중 Bone선택 후 New Retarget Chain을 하면 Start ~ End Bone이 지정된다

 

이러한 과정을 주요 Bone들마다 해주어 Chain을 만들어주면 된다

Chain들이 잘 생성된 걸 볼 수 있다

 

이제 Retarget할 B의 IK Rig도 만들고 A에서 만든 IK Rig의 Chain과 같은 구성의 Chain을 만들어주면 된다 (Bone의 구성은 다르지만 같은 구조로 Chain을 구성해야 한다 (Chain의 이름도 동일하게))

 

A와 B의 IK Rig를 다 만들었다면 IK Retargeter로 Animation을 Mapping해주면 된다

 

IK Retargeter는 다음과 같이 만들 수 있다

 

IK Retargeter에서는 Source IK Rig과 Target IK Rig을 지정해주어야 한다

Source의 IK Rig을 Target의 IK RIg으로 Retarget 하는것이다

 

AssetBrowser의 Animation asset을 더블클릭하면 Preview Animation이 Source/Target에서 재생된다

 

Source/Target이 너무 겹쳐 있다면 Preview Settings -> Mesh Offset을 지정하여 떨어지게 할 수 있다

 

단 이때 Pose가 다르다면 Retarget 시 Animation이 잘 안나올 수 있다

 

Edit Retarget Pose를 클릭 후 원하는 Bone을 직접 제어하여 Source/Target의 Pose를 맞춰주어야 한다

 

 

이때 팔의 각도가 안맞는다면 손가락에도 영향을 끼칠 수 있으니 최대한 Target의 Pose를 Source의 Pose와 같게 만들어 주어야 한다

 

이렇게 A -> B로 Bone Retarget이 잘 된걸 확인할 수 있다

 

마지막으로 원하는 Animation을 Retarget시키고 Export해주면 된다

 

이제 이 Animation은 A의 Skeleton에서 B의 Skeleton으로 Retarget된 Animation이다 (A Skeleton 구조에서 쓰던 Animation을 B Skeleton 구조에서 사용할 수 있게 됨)

 

 

 

728x90
반응형

'Unreal' 카테고리의 다른 글

23. Attach & Pick, Enum State, Switching Animation  (81) 2024.02.22
21. Collision & Overlap (2)  (79) 2024.02.08
20. Observer Pattern & Delegate  (80) 2024.02.07
19. Collision & Overlap (1)  (117) 2024.01.31
18. IK (Inverse Kinematics)  (109) 2024.01.27