IK란?
Inverse Kinematics를 뜻 하는 줄임말이며, 역운동학이라는 의미를 가지고 있습니다. 보통 캐릭터의 모습을 표현할 때는 애니메이션을 사용하기 때문에, 지형에 맞게 발이 붙어서 움직이는 섬세한 표현을 할 수가 없습니다. 이를 IK를 통해 표현을 할 수 있으며, 발이 움직이는 지점으로부터 역으로 무릎, 골반까지 반대로 표현할 수가 있으며, 이를 IK를 이용한 기술이라고 합니다.
- IK (Inverse Kinematics): 하위 오브젝트로부터 상위 오브젝트가 따라 움직인다.
- FK (Foward Kinematics): 상위 오브젝트로부터 하위 오브젝트가 따라 움직인다.
우리가 알고 있는 뼈대가 움직이는 기준은 FK입니다. 예를 들어, 우리가 피규어에서 어깨 방향을 틀면, 하위가 되는 팔꿈치 그리고 마지막으로 손목이 움직이는 순서입니다.
하지만 IK는 반대의 순서로 움직이는 개념으로, 마리오네트를 생각하시면 됩니다. 손목이 움직이면 상위가 되는 팔꿈치가 움직이고 그리고 어깨가 움직이는 형태입니다.
IK의 타겟 위치 변환
위의 그림과 같이 실제로는 각 다리마다 Raycast를 통해서 확이하여, 제일 적절한 위치로 다리를 움직입니다.
파란색 포인트는 거미가 움직이는 방향으로 다리가 이동해야할 예측 위치이며, 파란색 포인트와 가장 근접한 레이케스트 위치를 가져와 실제로 이동해야할 점은 빨간색 포인터로 나오도록 했습니다.
위의 그림을 보시는 것대로 다리하나를 움직이기 위해서는 비용이 적지 않습니다. 하지만 다음 위치를 찾는 순간에만 연산하니 엄청 많다고도 할 수 없습니다. 레이 개수를 늘리면 늘릴 수록 좀 더 섬세하게 움직이는 것이 가능합니다.
옵션 컨트롤
레이케스트에 관련된 옵션들은 컴포넌트에서 조절이 가능합니다.
다리의 움직임 표현
삼각함수 "Sin * PI" 을 통한 개념으로, 이동할 때 0f~1f로 Lerp를 통해서 애니메이션을 매프레임마다 위치를 이동합니다.
깃허브 공개 프로젝트 Rigging Spider
깃허브 공개 프로젝트로 올려두었습니다.
https://github.com/MDJ0126/RiggingSpider
마무리
학습용으로 공부 중이었던 프로젝트로 버그 및 이슈가 있습니다. (깃허브 페이지 README에서도 확인 가능합니다.)
좀 더 시간을 투자하면 완벽한 프로젝트가 되겠지만, 단순 공부였기 때문에 임시 중단하기로 결정했습니다. 많은 분들에게 참고 자료가 되길 바랍니다.😊
참고 1: https://www.youtube.com/watch?v=swYBGqXtHEY
참고 2: https://m.blog.naver.com/kusuw/220913529101
'Study' 카테고리의 다른 글
Unity, 백터 내적과 외적 (1) | 2024.06.12 |
---|---|
C#, 포인터의 크기 (Pointer size) (0) | 2023.12.29 |
Unity, Coroutine과 Invoke 차이 (0) | 2023.11.10 |
자료구조, Array와 List 차이 (0) | 2023.10.31 |
Unity, 베지에 곡선으로 포물선 만들기 (Bezier Curve) (0) | 2023.03.01 |
댓글