본문 바로가기

프로그래밍/Unreal

[UE4] VR 컨트롤러 IK

캐릭터 설정


Pawn 클래스에 scene component 추가후 카메라, 모션 컨트롤러 컴포넌트 등 추가


VR환경이 아니면 3인칭 템플릿 캐릭터 부모소켓에 카메라를 고정해 사용할 수 있다.


HTC VIVE 와 같이 위치 트래킹이 가능한 HMD의 경우 지정된 위치에서

높이만큼 변화가 생기게 되는데, 일어서서 사용하는 경우 카메라는 바닥에 위치해야 한다.




앉아서 HMD를 사용하는 경우 시작시 HMD 의 원점을 조정해 준다.

아래의 경우 시야에 맞게 조정





애니메이션 플루프린트작성

애니메이션의 경우 이벤트 그래프에 Blueprint Update Animation 이벤트가 주기적으로 발생되는데, 해당 루틴에서 

좌우팔의 transform 정보를 저장하고, 실제 애님그래프에서 해당 값으로 본애니메이션을 처리해주면 된다.


우선, 좌우 transform 정보를 저장할 변수를 선언하고, 

update animation 처리 마지막 부분에 Pawn 모션컨트롤러 콤포넌트의 transform 정보를 변수로 저장한다.



애님그래프 수정

위에 저장된 트랜스폰 정보를 사용해 본의 위치와 회전값을 변경

2본IK(Skeletal Controls) : 3조인트 체인(팔,다리등)에 IK 적용

IK 본 : 발목이나 손목 등 본 체인의 끝에 있는 본

Effector Location - 이펙터 위치 : 모션컨트롤러 컴포넌트의 위치

Joint Target Location - 조인트 타겟 위치


2본IK 를 선택해 디테일창에서 hand_l 선택하고, 이펙터는 월드 스페이스로 선택.

Joint Target Location 은 손(손목)본에 연결된 팔꿈치 joint 의 위치로 스켈레톤에 따라 다른데, 기본 캐릭터에서는

왼손은 100, -100, 0 / 오른손은 -100, -100, 0 으로 설정


컨트롤러의 회전은 본 트랜스폼으로 회전을 적용해 준다.

이렇게 되면 일단 월드상의 위치와 회전은 적용되는데, 모델마다 본의 축 값이 다르므로, 최종 보정을 위해 본 트랜스폼을 한번 더 해줘야 한다.



본 회전값과 모션컨트롤러간의 회전값이 차이가 있는데 해당 값을 수정해 주기 위해 본 트랜스폼을 추가해 준다.

스켈레톤 에디터 등에서 본의 회전축을 확인후 필요한 회전값을 입력한다.

Detail 메뉴에서  Rotation Space를 Bone Space로 설정.






다른쪽 손도 동일하게 작업.

만약 특정 조건에 의해 블렌딩 여부를 결정하고자 하는 경우 아래의 노드를 사용.

bool로 포즈를 블렌딩

정수로 포즈를 블렌딩





헤드 IK

머리부분도 동일한 방법으로 적용이 가능

Pawn 에서 HMD 좌표를 저장할 변수를 만들고 매 틱마다 카메라의 위치, 회전 정보를 갱신



애니메이션 블루프린트에도 변수 만들고, 애니메이션 블루프린트의 이벤트 그래프에서 해당 값 갱신

애님그래프 수정







'프로그래밍 > Unreal' 카테고리의 다른 글

[UE4] 이미지 파일 동적으로 로드하기  (0) 2018.07.05
[UE4] 언리얼 엔진 빌드  (1) 2018.06.01
[UE4] Dedicated Server  (0) 2018.05.31
[UE4] Using Static Library  (0) 2018.03.16
[UE4] 관람자 화면  (0) 2018.01.04
[UE4] 동적 텍스처  (0) 2017.12.18
[UE4] 디버그 로그 출력  (0) 2017.11.13
[UE4] 유리 매터리얼  (0) 2017.10.15
[UE4] 레벨 스트리밍  (0) 2017.10.15
[UE4] UI 관련 내용  (0) 2017.09.26