Buillboard & Imposter

Billboard

3D 게임에서는 모든 Object를 실제 3D Mesh로 렌더링할 필요가 없다.

특히 카메라에서 멀리 떨어진 나무, 풀, 장식물처럼 화면에서 차지하는 크기가 작은 Object는 높은 Polygon 수를 사용해도 시각적인 차이가 크지 않다.

이때 사용할 수 있는 가장 단순한 방법이 Billboard다.

Billboard는 3D Object를 직접 렌더링하는 대신 2D Texture를 입힌 평면을 카메라 방향으로 회전시켜 Object처럼 보이게 하는 기법이다.

3D Object -> 2D Texture -> Plane -> Camera 방향으로 회전 -> Rendering

실제 3D Geometry를 렌더링하는 대신 매우 단순한 Plane 하나만 렌더링한다.

Billboard의 원리

나무 하나를 실제 Mesh로 표현한다고 하자.

일반적인 경우에는

Tree Mesh -> Vertex Processing -> Triangle Rasterization -> Rendering

과정을 거친다.

Billboard를 사용하면 나무를 미리 이미지로 만들어 놓는다.

Tree Image -> Plane -> Camera 방향 회전 -> Rendering

결국 GPU가 처리해야 하는 Geometry는 매우 단순해진다.

예를 들어 복잡한 나무 Mesh가 수천 개의 Triangle을 가지고 있어도 Billboard에서는 기본적으로 하나의 사각형 Plane을 렌더링하면 된다.

High Poly Tree -> 수천 Triangle

Billboard Tree -> 2 Triangle

따라서 Geometry 처리 비용을 크게 줄일 수 있다.

Billboard의 핵심

Billboard의 핵심은 카메라에게 항상 정면으로 보이는 평면을 만드는 것이다.

카메라가 이동하면 Plane도 카메라 방향에 맞춰 회전한다.

Camera 이동 -> View Direction 계산 -> Billboard 회전 -> 항상 정면으로 표시

그래서 플레이어가 주변을 돌아다녀도 이미지가 계속 플레이어를 바라본다.

대표적으로 다음과 같은 Object에 사용할 수 있다.

나무 / 풀 / 먼 거리의 장식물 / 파티클 / NPC / 이펙트

특히 실제 3D Geometry가 중요하지 않은 Object에서 효과적이다.

Billboard의 문제

Billboard의 가장 큰 문제는 측면에서 보면 평면이라는 사실이 드러난다는 것이다.

정면에서는 자연스럽다.

하지만 플레이어가 옆으로 이동하면

Camera 정면 -> 자연스러움

Camera 측면 -> Plane 형태가 노출

된다.

결국 하나의 이미지만으로는 모든 방향을 자연스럽게 표현하기 어렵다.

이 문제를 해결하기 위해 여러 방향의 이미지를 사용하는 방식이 등장한다.

그것이 Impostor다.


Impostor

Impostor는 실제 3D Mesh를 렌더링하는 대신 미리 렌더링해 둔 Object의 이미지를 사용해 3D Object처럼 보이게 만드는 최적화 기법이다.

Billboard와 비슷하지만 더 발전된 개념이다.

3D Object -> 여러 방향에서 미리 렌더링 -> Texture 생성 -> Runtime에서 적절한 View 선택 -> Rendering

Billboard가 하나의 이미지에 의존한다면 Impostor는 여러 방향에서 바라본 이미지를 사용할 수 있다.

여러 각도의 이미지

예를 들어 하나의 나무를 여러 방향에서 렌더링한다.

0° / 45° / 90° / 135° / 180° / ...

각 방향에서 바라본 결과를 Texture로 저장한다.

런타임에서는 카메라의 방향을 확인한다.

Camera Direction -> 현재 View 계산 -> 가장 가까운 Impostor View 선택 -> Texture 적용

이렇게 하면 카메라가 움직여도 한 장의 이미지보다 훨씬 자연스럽게 보인다.

Texture Atlas

여러 장의 이미지를 각각 별도의 Texture로 저장할 수도 있지만, 일반적으로는 여러 View를 하나의 Texture Atlas에 저장하는 방식이 효율적이다.

개념적으로

View 0 / View 1 / View 2 / View 3 / ... -> Texture Atlas

형태로 만든다.

런타임에서는 현재 카메라 방향에 맞는 영역을 선택한다.

Camera Angle -> View Index -> UV Coordinate 계산 -> Atlas의 해당 영역 Sampling

따라서 실제 Mesh를 렌더링하지 않고도 여러 방향의 모습을 표현할 수 있다.

Billboard와 Impostor의 차이

둘은 목적이 비슷하지만 표현 방식이 다르다.

구분BillboardImpostor
기본 표현하나의 이미지여러 View 이미지
방향 대응제한적여러 방향 대응
Geometry매우 단순매우 단순
품질상대적으로 낮음상대적으로 높음
구현 난이도낮음높음
용도단순한 먼 Object원거리의 복잡한 Object

Billboard는

하나의 이미지 -> 카메라를 바라봄

Impostor는

여러 방향의 이미지 -> 카메라 방향에 맞는 이미지 선택

이라고 이해하면 된다.

Impostor의 종류

Impostor는 구현 방식에 따라 여러 형태가 존재한다.

가장 단순한 방식은 여러 각도의 이미지를 사용하는 것이다.

Camera Angle -> 가장 가까운 View 선택

하지만 이것만으로는 View 사이의 전환이 끊겨 보일 수 있다.

그래서 더 발전된 방식에서는 여러 View를 보간하거나 Depth 정보를 활용하기도 한다.

대표적으로 Depth Impostor 같은 방식은 색상 정보뿐만 아니라 Depth 정보를 함께 사용한다.

Color Texture + Depth Texture -> View-dependent Rendering

이를 통해 단순한 평면보다 실제 3D Object에 가까운 깊이감을 표현할 수 있다.

즉 Impostor는 단순히 “이미지 한 장을 보여주는 것”에서 끝나는 기술이 아니다.

3D Geometry를 이미지 기반 Representation으로 대체하는 일종의 렌더링 최적화 기법이다.

LOD와 함께 사용하기

Billboard와 Impostor는 LOD와 매우 잘 결합된다.

모든 거리를 하나의 방식으로 처리할 필요가 없기 때문이다.

예를 들어 나무를 다음과 같이 처리할 수 있다.

가까움 -> High Poly Mesh

중거리 -> Low Poly Mesh

원거리 -> Impostor

매우 원거리 -> Billboard

시야 밖 -> Culling

카메라가 가까울 때는 실제 Geometry를 사용한다.

거리가 증가하면 LOD를 통해 Polygon 수를 줄인다.

더 멀어지면 실제 Geometry 자체를 버리고 Impostor를 사용한다.

그리고 더 단순한 표현만으로 충분한 거리에서는 Billboard를 사용할 수 있다.

HLOD와의 관계

Impostor는 HLOD와도 함께 사용할 수 있다.

HLOD는 여러 Object를 하나의 그룹으로 묶는다.

예를 들어 멀리 있는 도시를 생각하면

Building A + Building B + Building C -> HLOD Group

으로 묶을 수 있다.

그리고 이 HLOD Group 자체를 더욱 멀리서 이미지 기반 Representation으로 대체할 수도 있다.

개별 Building -> HLOD Group -> Impostor

이렇게 하면 아주 먼 거리에서는 복잡한 도시 Geometry를 계속 렌더링할 필요가 없다.

게임 그래픽스 최적화 관점

Billboard와 Impostor를 이해할 때 중요한 것은 무조건 3D Geometry를 사용하는 것이 좋은 것은 아니라는 것이다.

화면에서 Object가 충분히 작다면 실제 Geometry의 디테일은 눈에 보이지 않는다.

그렇다면 굳이 수천 개의 Triangle을 처리할 이유가 없다.

화면상 필요한 정보 < 실제 Geometry가 제공하는 정보

라면 Geometry를 줄이거나 이미지로 대체할 수 있다.

그래서 거리별로 표현 방식을 바꿀 수 있다.

근거리 -> 실제 Mesh

중거리 -> Mesh LOD

원거리 -> HLOD

초원거리 -> Impostor / Billboard

시야 밖 -> Culling

이런 구조가 만들어진다.

정리

Billboard는 2D 이미지를 카메라 방향으로 회전시켜 3D Object처럼 보이게 하는 기법이다.

Impostor는 여기서 한 단계 더 나아가 여러 방향에서 미리 렌더링한 이미지를 사용하여 실제 3D Mesh를 대신하는 기법이다.

둘의 공통적인 목적은 명확하다.

화면에서 굳이 보이지 않는 Geometry를 렌더링하지 않는 것.

다만 Culling과는 방식이 다르다.

Culling은 Object를 아예 렌더링하지 않는다.

LOD는 Geometry를 단순화한다.

HLOD는 여러 Object를 하나의 Representation으로 통합한다.

Impostor와 Billboard는 Geometry를 Image로 대체한다.

Culling -> Rendering 제거

LOD -> Geometry 감소

HLOD -> Object 그룹화 + Geometry 감소

Impostor -> Geometry를 여러 방향의 Image로 대체

Billboard -> Geometry를 Image 하나로 대체

결국 이 기술들은 모두 하나의 문제를 해결하기 위한 방법이다.

카메라가 실제로 필요로 하는 시각 정보보다 더 많은 Rendering 비용을 지불하지 않는 것.

3D 게임의 최적화는 결국 화면에 보이는 정보의 중요도에 맞춰 표현 비용을 단계적으로 낮추는 과정이라고 볼 수 있다.