이번 HumanGL 프로젝트는 매우 재미있었다. 더 많은 신체 부위를 추가하거나 동작을 확장해보고 싶었지만, 다음 프로젝트를 준비하기 위해 이 정도에서 마무리하기로 결정했다. 이번 글에서는 프로젝트를 진행하며 느낀 점을 정리해본다.
이번 과제에서는 부위별이나 행동별 클래스를 만들어 사용하는 것이 단기적으로는 가능했겠지만, 나중에 추가적인 신체 부위나 동작을 추가하려면 유지 보수가 큰 수고를 요할 수 있었다. 따라서 처음부터 유지 보수가 용이한 설계가 필요하다는 것을 절실히 느꼈다. 단순히 코드를 작성하는 것보다 설계 단계에서 얼마나 일반화할 수 있는지가 향후 프로젝트의 성공을 결정짓는 중요한 요소라는 점을 배웠다.
처음엔 선형 보간을 사용하여 움직임을 구현했는데, 그 결과가 부자연스러웠다. 이후 sin 함수를 사용하니 훨씬 더 자연스러운 움직임을 얻을 수 있었다. 그 외에 회전과 변환에 변칙적인 타이밍을 적용하는 등, 애니메이션을 자연스럽게 만들기 위해 많은 고민을 했다. 사람의 움직임을 구현하는 것이 수학적 지식 외에 어떤 것이 자연스러운 동작인지 찾는 감각적 요소도 필요하다는 것을 깨달았다.
프로젝트에서 구현한 동작들인 Stop, Walk, Rotate, Jump의 상호관계를 고려해야 하는데 생각보다 신경 쓸 부분이 많았다. 각 행동이 서로 어떻게 연결될지 고민하는 과정이 중요했고, 만약 동작을 더 많이 추가할수록 이러한 관계의 설계는 더욱 중요한 과제가 될 것이라는 점을 알게 되었다.
지금까지는 오일러 변환을 사용해 회전을 구현해왔지만, 이번 프로젝트에서는 쿼터니언을 처음으로 사용해 보았다. 특히, 짐벌락 문제를 해결하기 위해 쿼터니언을 쓰고 싶었는데, 실제로 사용해보니 회전에 대한 깊은 이해를 얻게 되었다.
추상화를 통해 추가 행동과 모델링 확장을 쉽게 구현할 수 있도록 설계했지만, 프로젝트 기한을 고려하면 여기서 멈추어야 한다는 점이 아쉽다. 앞으로 더 배우고 싶은 부분이 많지만, 추후 기회가 된다면 이번 프로젝트에서 미처 구현하지 못한 확장 기능들을 추가로 만들어보고 싶다.
다음 프로젝트로는 간단한 3D 물리 엔진을 구현할 예정이다. 여기서는 강체의 탄성 충돌, 병진 운동, 회전 운동, 중력 등을 다루게 될 것이다.
HumanGL: Jump 애니메이션 구현 - (8) (2) | 2024.10.21 |
---|---|
HumanGL: Walk, Rotate, Stop 애니메이션 구현 - (7) (1) | 2024.10.19 |
HumanGL: Human Model에 애니메이션을 적용하기 위한 준비 - (6) (2) | 2024.10.19 |
HumanGL: 카메라 제어 - (5) (3) | 2024.10.14 |
HumanGL: 계층적 모델링과 변환 행렬 스택 구현 - (4) (0) | 2024.10.14 |