이득우의 게임 수학
게임 오브젝트에 트랜스폼을 설정하는 작업은, 모델링 행렬을 사용해 각 게임 오브젝트에 부여된 로컬 공간 정보를 월드 공간 정보로 변환하는 것이다.
다수의 게임 오브젝트가 동일한 메시를 사용할 때, 오브젝트마다 용량이 큰 메시 정보를 가지면 메모리 낭비가 심할 것이다.
그래서 리소스는 여러 게임 오브젝트들이 함께 사용할 수 있는 공유 자원 형태로 관리하는 것이 바람직하다.
게임 엔진이 씬과 무관하게 리소스를 모아두는 저장소를 리소스 저장소(Resource repository)라고 한다.
리소스는 (키, 데이터)로 구성되며, 게임 오브젝트에는 메모리 낭비를 줄이기 위해 데이터를 가리키는 키 값만 저장하도록 한다.
상용 게임 엔진의 경우 별도의 리소스 저장소 시스템을 제공하지만, 책의 예제인 CK소프트렌더러는 메시와 텍스처만 사용하므로 게임 엔진에서 직접 관리한다.
- 주어진 키로 빠르게 리소스를 찾아 전달하기 위해 unordered_map 자료구조로 관리된다.
// 책의 예제인 CK소프트렌더러에 정의된 리소스 저장소
class GameEngine : public EngineInterface
{
public:
Mesh& CreateMesh(const size_t & InKey);
FORCEINLINE const Texture& GetTexture(const size_t & InTextureKey) const { return *_Textures.at(InTextureKey).get(); }
Texture& CreateTexture(const size_t & InKey, const string & InTexturePath);
Mesh& GetMesh(const size_t & InMeshKey) { return *_Meshes.at(InMeshKey).get(); }
const Mesh& GetMesh(const size_t & InMeshKey) const { return *_Meshes.at(InMeshKey).get(); }
private:
bool LoadResources();
unordered_map<size_t, unique_ptr<Mesh>> _Meshes;
unordered_map<size_t, unique_ptr<Texture>> _Textures;
}
'게임 수학 > 이득우의 게임 수학' 카테고리의 다른 글
렌더링 파이프라인 (0) | 2023.05.02 |
---|---|
게임 엔진의 워크플로우 (0) | 2023.05.01 |
로컬 공간과 로컬 축 (0) | 2023.04.29 |
모델링 행렬의 설계 (0) | 2023.04.28 |
텍스처 매핑과 UV (0) | 2023.04.27 |