
Billboard는 카메라를 항상 향하도록 정렬된 단일 평면으로 오브젝트를 표현하여 구현이 간단하고 비용이 매우 낮다.
하지만 방향성과 입체감의 부재로 인해 멀리서 빠르게 대체하는 용도에는 적합하지만, 카메라 이동이 자유롭거나 다양한 시점에서 관찰되는 환경에서는 품질 저하가 쉽게 드러나는 단점이 있었다.
Impostor는 이러한 Billboard의 한계를 보완하기 위해 등장한 기법이다.
원리는 단순하다.
하나의 방향만을 사용하는 대신, 여러 방향에서의 모습을 미리 준비해둔다.
3D 오브젝트를 다양한 시점에서 미리 렌더링한 뒤 이를 하나의 텍스처 집합(Atlas)으로 저장한다.
그리고 런타임에서는 카메라의 방향에 따라 가장 적절한 이미지를 선택하여 렌더링한다.
즉, 단일 이미지를 사용하는 Billboard와 달리, Impostor는 뷰 방향에 따라 다른 이미지를 사용하는 표현 방식이다.
이 접근 방식은 카메라 각도에 따라 다른 형태를 보여줄 수 있기 때문에, 기존 Billboard에서 발생하던 측면 왜곡이나 부자연스러운 실루엣 문제가 크게 완화된다.
또한 필요에 따라 Normal, Depth 등의 추가 정보를 함께 저장하면, 라이팅 역시 어느 정도 보정이 가능하다.

Impostor에서 가장 중요한 준비 단계는 다양한 시점에서 렌더링된 결과를 하나의 텍스처로 정리하는 과정이다. 이를 위해 먼저 오브젝트를 중심으로 여러 방향에 카메라를 배치하고, 각 시점에서 렌더링을 수행한다. 이렇게 얻어진 이미지들은 각각 독립적으로 사용되는 것이 아니라, 하나의 큰 텍스처에 규칙적으로 배치된다.

이때 사용되는 것이 바로 Texture Atlas이다. Atlas는 NxN 형태의 격자로 구성되어, 각 셀에는 특정 방향에서 바라본 오브젝트의 모습이 저장된다.
8x8 Atlas라면 총 64개의 방향 정보를 담을 수 있으며, 이는 곧 Impostor가 표현할 수 있는 시점의 해상도를 의미한다.
런타임에서는 현재 카메라의 방향에 따라 Atlas 내부에서 적절한 프레임을 선택하는 과정이 이루어진다. 이때 기준이 되는 것은 카메라에서 오브젝트를 바라보는 뷰 벡터(View Direction)이다.
뷰 벡터를 기준으로, 사전에 정의된 방향 샘플들과의 유사도를 비교하여 가장 가까운 방향을 찾는다. 이후 해당 방향에 대응하는 Atlas 내의 셀 인덱스를 계산하고, 그 위치의 텍스처 영역을 샘플링하여 화면에 렌더링한다.

가장 단순한 방식은 Nearest 선택으로, 가장 가까운 하나의 프레임만 사용하는 방식이다. 구현이 간단하고 비용이 낮지만, 카메라가 움직일 때 특정 시점에서 이미지가 갑자기 바뀌는 “팝핑 현상”이 발생할 수 있다.
이를 개선하기 위해 두 개 이상의 인접 프레임을 동시에 샘플링하고 보간하는 방식도 사용된다. 이 경우 카메라 방향과 각 프레임 방향 간의 가중치를 계산하여 부드럽게 섞어주며, 시점 변화에 따른 시각적 연속성을 확보할 수 있다.
Impostor는 Billboard의 한계를 효과적으로 보완하는 기법이지만, 구조적으로 완전한 해결책은 아니며 몇 가지 뚜렷한 제약을 가진다.
메모리 사용량 증가 (Atlas)
Impostor는 하나의 이미지가 아니라 여러 방향에서 렌더링된 결과를 Texture Atlas 형태로 저장하기 때문에, 기본적으로 텍스처 용량이 크게 증가한다. 이 문제는 방향 수가 증가할수록 더욱 심각해진다. 더 자연스러운 결과를 얻기 위해 샘플링 방향을 늘리면 Atlas의 해상도 또한 함께 증가하게 되고, 이는 곧 데이터 크기의 기하급수적인 증가로 이어진다. 즉, 품질과 메모리 사이에서 반드시 트레이드오프가 발생하는 구조이다.
실제 메시의 외형과 Impostor 이미지 간 불일치
근본적으로 2D 기반 기법이기 때문에, 완전한 3D 형태를 표현하지는 못한다.
따라서 샘플링 되지 않은 특정 각도에서는 실제 메시의 외형과 Impostor 이미지 간에 차이가 발생할 수 있으며, 특히 카메라가 크게 이동하거나 극단적인 각도에서 바라볼 경우에도 이러한 불일치가 눈에 띄게 드러난다.
라이팅과 섀도잉의 한계
일부 개선을 위해 Normal이나 Depth 정보를 함께 저장할 수 있지만, 이는 어디까지나 근사치일 뿐이다. 실제 3D 지오메트리 기반의 라이팅처럼 정확한 결과를 얻기는 어렵고, 특히 셀프 섀도잉이나 동적 조명 변화에 대해서는 자연스럽게 대응하기 힘들다.
Unreal Engine에서는 Impostor Baker 플러그인을 통해 Impostor 생성을 자동화할 수 있다. 복잡한 3D 메시를 다양한 방향에서 렌더링한 뒤 Texture Atlas로 변환하고, 이를 LOD로 사용할 수 있는 형태까지 한 번에 구성해준다.

다만, 실제 사용 관점에서는 몇 가지 한계도 존재한다.
플러그인의 완성도나 안정성 측면에서 이슈가 보고된 사례들이 있으며, 엔진 버전에 따라 기능이 정상적으로 동작하지 않는 경우도 있다.
또한 셰이더 구성과 Atlas 기반 렌더링 구조 자체가 비교적 복잡하기 때문에, 단순한 Billboard 대체 용도로 사용하기에는 다소 부담이 되는 편이다.
Impostor Baker Widget - “Unkown function/struct”
Impostor Baker - Scaling and instanced foliage issues
플러그인에 대한 자세한 내용은 임포스터 베이커 플러그인을 참고하자.
Unreal Engine 5에서는 Nanite라는 강력한 가상화 지오메트리 시스템이 등장하면서, “이제 Impostor가 필요 없는 것 아닌가?”라는 의문이 자연스럽게 생길 수 있다.

Nanite는 매우 많은 폴리곤을 효율적으로 처리할 수 있지만, 여전히 렌더링 비용이 0이 되는 것은 아니다. 특히 화면에 아주 작게 보이는 오브젝트까지 실제 지오메트리 기반으로 처리하는 것은 비효율적일 수 있다. 이 경우 Impostor는 여전히 강력한 대안이 된다.
따라서 Nanite와 Impostor는 경쟁 관계가 아니라 보완 관계에 가깝다.
또한 모바일 환경에서는 Nanite 사용이 제한적이거나 사실상 불가능한 경우가 많고 저사양 GPU에서는 Nanite의 이점을 충분히 활용하기 어렵다. 따라서 이러한 환경에서는 여전히 전통적인 LOD 체계와 Impostor가 중요한 역할을 한다.