엔진에 캐릭터 애니메이션을 추가하기 위해 Freeze 기능을 추가하였다.
캐릭터의 콜라이더를 캡슐로 할 것인데 이때 캡슐이 쓰러지지 않게 회전을 Freeze 해줄 필요가 있는 것이다.
Freeze는 크게 두 가지 종류가 있다.
다음은 Freeze를 적용하기 전 영상이다.
이번에는 Y축 Position만 Freeze한 영상이다.
이번엔 X, Y, Z 축 Position을 모두 Freeze한 영상이다.
마지막으로, Rotation의 X, Y, Z 축까지 전부 Freeze한 영상이다.
물리 처리에서는 힘을 적용하는 Integrate 단계와 충돌을 처리하는 Solve 단계에서 각각 position과 rotation이 변경된다.
따라서 각 Rigidbody마다 Position Freeze와 Rotation Freeze를 vec3 타입의 Flag로 가지고 있도록 했다.
그리고 Integrate와 Solve 단계에서 해당 Flag 값이 1인 경우, 변경된 값을 무시하고 기존 값을 그대로 사용하는 방식으로 Freeze 기능을 구현했다.
Freeze는 비교적 간단하게 구현할 수 있었고,
다음 글에서는 SIMD를 이용한 최적화에 대해 정리해볼 예정이다.
ALEngine: Trigger 구현 - (4) (0) | 2025.03.26 |
---|---|
ALEngine: SIMD를 이용한 최적화 - (3) (0) | 2025.03.26 |
ALEngine: Frustum Culling 구현 - (1) (0) | 2025.02.17 |
ALEngine: 게임 엔진 제작 합류 - (0) (0) | 2025.02.17 |
FT_Newton: sleep 상태 추가 및 solve constraint 반복 수정 - (13) (0) | 2025.02.12 |