공유를 통해 많은 수의 소립(fine-grained) 객체들을 효과적으로 지원하는 패턴

 

3.1 숲에 들어갈 나무들

나무들이 동일한 메시 정보(폴리곤, 정점), 텍스처를 사용한다면 이 특성들을 공유 데이터로써 GPU에 한 번만 보내야 한다.

3.2 수천 개의 인스턴스

나무 인스턴스를 그릴 때 공유 데이터를 사용하도록 한다.

 

Direct3D, OpenGL에서는 하드웨어적으로 인스턴스 렌더링을 지원한다.

https://lemonyun.tistory.com/57

 

16. 인스턴싱과 절두체 선별

인스턴싱 : 한 장면에서 같은 물체를 여러 번 그리는 것, 성능을 크게 향상할 수 있다. 절두체 선별 : 시야 절두체 바깥에 있는 일단의 삼각형들을 간단한 판정으로 골라내서 기각하는 기법 16.1

lemonyun.tistory.com

DirectX 12를 이용한 3D 게임 프로그래밍 입문 16장에서 다룬 인스턴싱에서는 아래와 같은 자료를 셰이더에 전달했다.

 

 

공유 데이터 : 재질 자료를 담은 구조적 버퍼, 텍스처 배열, 정점 버퍼 뷰, 인덱스 버퍼 뷰

개별 데이터 : 인스턴스별 자료 항목을 담은 구조적 버퍼 (material index, world matrix, textransform)

3.4 지형 정보 (경량 패턴 사용 예시)

맵이 격자 타일 형태라고 할때 

Terrain tiles_[WIDTH][HEIGHT] 형태의 배열을 사용하여 타일 정보를 관리할 수 있다.

ㄴ Terrain을 enum으로 사용하는 경우

ㄴ 지형 종류에 대한 데이터 (예를 들면 해당 지형에서의 기온)를 위한 함수가 별도로 필요함

 

지형 종류에 대한 데이터 캡슐화를 위해 Terrain을 클래스로 정의

하나씩 선언된 물, 풀, 용암에 대한 Terrain이 공유 데이터로써의 역할을 한다.

+ Recent posts