Make Unreal REAL.
article thumbnail
이득우의 게임 수학

 

게임 오브젝트에 트랜스폼을 설정하는 작업은, 모델링 행렬을 사용해 각 게임 오브젝트에 부여된 로컬 공간 정보를 월드 공간 정보로 변환하는 것이다.

 

 

다수의 게임 오브젝트가 동일한 메시를 사용할 때, 오브젝트마다 용량이 큰 메시 정보를 가지면 메모리 낭비가 심할 것이다.

 

그래서 리소스는 여러 게임 오브젝트들이 함께 사용할 수 있는 공유 자원 형태로 관리하는 것이 바람직하다.

 

게임 엔진이 씬과 무관하게 리소스를 모아두는 저장소를 리소스 저장소(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
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그