Project/GameEngine

상용 엔진 구조 분석 - Godot Engine

flow-vector 2023. 12. 31. 21:43

Architecture Diagram

채택한 방식들

  • 커스텀 자료구조 사용
    • 이유
      • stl 사용시 디버깅 바이너리가 너무 커짐 (템플릿 인스턴스화로 인해)
      • 큰 배열을 사용하려고 할때, 미리 할당된 버퍼와 연결됨
      • 손쉬운 메로리 트래킹 방법이 내장 되어 있음
      • 다국어 문자열 처리 문제를 해결하는 별도의 string 타입을 사용
  • 예외 사용 안함
    • 어떤 경우에도 crash를 허용하지 않음
    • 예외 상황이 발생 했을 때는, error를 출력하고 계속 프로그램이 진행 되도록 함
    • 예외를 사용할 경우 실행파일 크기가 커지고 컴파일시간이 증가하는 단점이 있
  • ECS 사용 안함
    • 오픈 소스이기 때문에 여러 사용자들이 이해하기 편한 엔진 구조는 명시적인 상속 구조가 드러나는 구조라고 생각했기 때문
    Why isn't Godot an ECS-based game engine?

멀티 스레딩

  • 엔진의 기본 작동 시퀀스
    • 해당 시퀀스에서 어떤 부분을 비동기 적으로 처리할 수 있을까?
      • physics 부분과 렌더링 부분

  • 사용자들이 이해하기 쉬운 구현을 위해 서버라는 것을 만들었음
    • 각 스레드가 끝나고 다음 스레드의 수행이 필요하다는 명령을 서버로 보내서 buffering 하게 하고 서버는 해당 명령어를 처리하는 구조