단지! 사슴의 몸을 기울이는 시스템이 따뜻하게 완성되었습니다. 구현은 다음과 같습니다.
1. 네 발에서 추적 광선을 발사하고 HitPoint, HitPoint의 법선 벡터 및 HitPoint와 발 사이의 오프셋 정보(거리)를 수신합니다.
2. 앞발의 히트포인트와 좌우 뒷발의 히트포인트의 평균으로 플레인을 생성하여 노멀 벡터를 구한다. 을 사용하였으나 계단과 같은 특수한 경우에는 몸체가 전혀 움직이지 않는 단점이 있어 3점을 통과하는 평면으로 하였다.)
3. 평면의 법선 벡터를 사슴의 전방 벡터/z축을 포함하는 평면에 투영(투영)
4. 투영된 법선 벡터가 XY 평면과 Z 평면 사이에서 이루는 각도는 몸이 기울어져야 하는 각도이며 그 만큼 다리를 반대 방향으로 회전시킵니다.
5. 여기서 문제가 있었는데 NormalVector의 Z/Y 값 중 Atan 값을 구할 때 X 방향으로 기울였을 때 몸체가 기울지 않았습니다. 이 솔루션에서는 NormalVector의 XY 방향 벡터와 사슴의 방향 벡터의 내적을 곱합니다(정규화된 벡터의 내적이므로 항상 1 또는 -1이고 반대 방향은 경사면에 있습니다. 사슴이 걸어 올라가니 각도는 -) 깔끔하게 해결!
6. 마지막으로 옵셋 + 회전으로 인한 다리 길이 차이(다리가 회전할 때 기존 옵셋보다 공중에 더 떠 있음)만큼 메쉬를 내리거나 올려 지면에 닿도록 합니다.
근데 한가지 궁금한게 이렇게 복잡한 방식으로만 가능할까요.. 너무 복잡하게 생각해서 더 복잡해졌을까봐 두렵지만 작동도 잘되고 원리도 깔끔해서 만족합니다! 이제 애니메이션이 불편한지 확인하고 IK 시스템도 적용해 보겠습니다.
ps. 그림을 잘 그리면 블로그에 추가하고 싶어요. 연습을 해야 하나요