FT_Newton는 4명이서 진행 중인 게임 엔진 프로젝트의 물리 엔진 파트다. 원래는 OpenGL을 사용해왔지만, 이번에는 Vulkan을 사용해 물리 엔진을 만들기로 결정했다. 사실 블로그에 작업 과정을 정리하는 게 조금 늦어져버렸는데, 이제라도 어느 정도 완료된 부분들을 정리해보려고 한다.
지금까지 프로젝트에는 OpenGL을 사용했지만, 최종적으로는 Vulkan 기반 엔진이 목표라 Vulkan으로 전환했다. Vulkan은 OpenGL보다 저수준 API라 GPU에 원하는 작업을 더 디테일하게 지정해줄 수 있고, Fence나 Semaphore 같은 동기화 도구를 통해 멀티 스레드 렌더링이 가능하다는 장점이 있다.
Vulkan 공부를 마친 후, 물리 엔진 자체를 잘 몰라서 초반에는 이론 위주로 공부했다. 『게임 물리 엔진 개발』이라는 책을 읽기도 하고, Box2D 같은 2D 물리 엔진의 코드를 살펴보면서 여러 자료를 찾아봤다. 물리 엔진의 기본 구조와 이론을 익히는 데 꽤 도움이 되었다.
Vulkan 튜토리얼을 보면 한 파일에 2000줄이 넘는 코드가 몰려 있는 것을 볼 수 있다. Vulkan 특성상 객체 간의 의존성이 워낙 강해서 그렇게 만들어진 것 같다. 이 2000줄이 넘는 코드를 실제로 개발에 적용하기에는 너무 복잡하기 때문에 작업하기 편하도록 리팩토링을 진행하였다.
물리 엔진의 흐름은 대략 다음과 같다.
이 중 1, 2단계를 팀원 중 한 명이 맡았고, 나는 3, 4단계를 맡아 작업을 진행하고 있다.
『게임 물리 엔진 개발』이라는 책을 읽고 자신감이 붙어서 구현에 들어갔지만, 실제로 해보니 벽에 부딪히는 부분이 많았다. 특히 그래픽 과제 특성상 디버깅이 쉽지 않아서, 문제가 어디서 발생했는지 찾기조차 어려울 때가 있다. 해결 과정 역시 시간이 꽤 오래 걸렸다.
그럼에도 불구하고 이런 과정을 거쳐 현재 물리 엔진은 어느 정도 기본 기능이 구현된 상태다. 이제까지의 과정을 정리하면서, 앞으로 진행할 develop 단계들도 틈틈이 글로 남겨볼 생각이다.
FT_Newton: Vulkan 공부 및 리팩토링 - (1) (0) | 2025.01.06 |
---|