Architecture Diagram
채택한 방식들
- 커스텀 자료구조 사용
- 이유
- stl 사용시 디버깅 바이너리가 너무 커짐 (템플릿 인스턴스화로 인해)
- 큰 배열을 사용하려고 할때, 미리 할당된 버퍼와 연결됨
- 손쉬운 메로리 트래킹 방법이 내장 되어 있음
- 다국어 문자열 처리 문제를 해결하는 별도의 string 타입을 사용
- 이유
- 예외 사용 안함
- 어떤 경우에도 crash를 허용하지 않음
- 예외 상황이 발생 했을 때는, error를 출력하고 계속 프로그램이 진행 되도록 함
- 예외를 사용할 경우 실행파일 크기가 커지고 컴파일시간이 증가하는 단점이 있
- ECS 사용 안함
- 오픈 소스이기 때문에 여러 사용자들이 이해하기 편한 엔진 구조는 명시적인 상속 구조가 드러나는 구조라고 생각했기 때문
- ECS 디자인 패턴이란?
- 하나의 씬안에 여러 다양한 특징과 행동을 가지는 객체들을 포함시켜야 할때 유용함
- 수많은 속성과 행동을가지는 모든 클래스를 코드로 구현하기에는 비효율적
- cpu가 메모리에 접근하기 효율적인 방식을 적용하여 수많은 객체들에 대한 연산을 수행할 때 효율적 (캐시 히트 측면 - 연속적인 메모리에 컴포넌트들을 두는 방법을 채택함)
- 간단한 렌더러 정도에서는 필요 없을 지도?
- 하나의 씬안에 여러 다양한 특징과 행동을 가지는 객체들을 포함시켜야 할때 유용함
- What is an Entity Component System architecture for game development?
멀티 스레딩
- 엔진의 기본 작동 시퀀스
- 해당 시퀀스에서 어떤 부분을 비동기 적으로 처리할 수 있을까?
- physics 부분과 렌더링 부분
- 해당 시퀀스에서 어떤 부분을 비동기 적으로 처리할 수 있을까?
- 사용자들이 이해하기 쉬운 구현을 위해 서버라는 것을 만들었음
- 각 스레드가 끝나고 다음 스레드의 수행이 필요하다는 명령을 서버로 보내서 buffering 하게 하고 서버는 해당 명령어를 처리하는 구조
'Project > GameEngine' 카테고리의 다른 글
프로젝트 셋팅 - 진행 시 규칙 (0) | 2024.01.25 |
---|---|
나만의 게임 엔진 개발 하기 - 시작 (0) | 2023.12.31 |