- Daniel Schroeder는 90년대 3D 게임의 픽셀화된 표면 감각을 작은 복셀 표면 디테일로 확장하는 실시간 렌더러를 개발 중이며, 입력 자산은 익숙한 저폴리 삼각형 메시와 텍스처를 사용함
- 장면 전체를 복셀 격자로 만들지 않고 디스플레이스먼트 맵으로 표면만 복셀처럼 보이게 해 Doom, Quake, Duke Nukem식 정적 환경에 맞춘 시각 스타일을 노림
- CPU는 삼각형 메시와 제한된 디스플레이스먼트 정보를 GPU용 지오메트리 데이터로 변환하고 텍스처를 전처리하며, 프레임 렌더링은 GPU가 거의 독립적으로 처리함
- 데모는 Radeon RX 5700 XT에서 1440p 기준 4~9ms 프레임 타임을 보이고, Steam Deck OLED의 800p에서는 60FPS 이상과 많은 구간의 90FPS 고정에 도달함
- 환경을 여전히 삼각형 메시로 다룰 수 있어 충돌, 캐릭터 컨트롤러, 경로 탐색은 기존 물리 라이브러리와 메시 기반 처리로 해결하고, 필요한 일부 시스템만 복셀 세부 형상을 의식하면 됨
90년대 3D 미학을 복셀 표면으로 확장
- 목표는 고전 90년대 3D 게임의 단순한 환경 지오메트리와 선명한 텍스처 경계를 유지하면서, 표면에 블록형 3D 디테일을 더하는 것임
- Doom, Quake, Duke Nukem 같은 초기~중기 90년대 3D 게임은 기술과 게임플레이 양쪽에 큰 영향을 줬고, 최근에는 당시의 시각적 한계 자체가 레트로 매력으로 받아들여짐
- 출발점은 “픽셀 대신 복셀로 표면 디테일을 만들면 어떨까”라는 질문임
- 예를 들어 조약돌 벽은 가까이서도 픽셀화된 느낌을 유지하면서 기하학적 깊이를 가질 수 있음
- 결과물은 90년대 게임의 외형과 더 현대적인 표현 사이에 놓이도록 설계됨
일반적인 복셀 방식의 제약
- 일반적인 복셀 메시는 각 큐브형 셀이 채워졌는지 비어 있는지를 나타내는 3차원 격자임
- Minecraft처럼 큰 복셀에 텍스처를 입힐 수 있음
- Teardown처럼 작고 단색인 복셀을 사용할 수도 있음
- 복셀 기반 환경을 만들려면 모든 지오메트리를 공유 격자에 배치하거나, 여러 독립 복셀 메시를 같은 공간에 배치해야 함
- 복셀 지오메트리를 직접 제작하는 도구는 있지만, 제작 과정이 오래 걸리고 작은 메시 제작에 제한되는 경우가 많음
- 타일형 벽이나 바닥 같은 빌딩 블록을 만들어 큰 구조물을 조립할 수 있지만, 격자 정렬 건물에는 잘 맞고 자유로운 지형에는 잘 맞지 않음
- 절차적 생성은 자연 환경과 빌딩 블록 조합에 유용하지만 자체적인 어려움이 있으며, 특정 종류의 게임에만 적합함
- 기존 삼각형 메시를 복셀 격자로 래스터화할 수도 있지만, 결과 지오메트리가 하나의 복셀 격자에 놓이면서 원하지 않는 미학적 결과가 생길 수 있음
- 축 정렬된 면은 평평한 복셀 판처럼 보이고, 45도 면은 계단처럼 보일 수 있음
- 장면의 정식 표현이 복셀이 되면 렌더링뿐 아니라 물리, 캐릭터 컨트롤러, NPC 경로 탐색 같은 게임 로직도 복셀 수준에서 동작해야 할 수 있음
- 대신 Minecraft와 Teardown처럼 복셀 메시에서 지오메트리를 추가하거나 제거하기 쉬운 장점이 있음
일반적인 디스플레이스먼트 방식의 한계
- 디스플레이스먼트 매핑은 텍스처와 함께 디스플레이스먼트 맵을 사용해, 텍스처의 각 픽셀이 메시 표면에서 안쪽이나 바깥쪽으로 얼마나 이동할지 정의함
- 3D 모델링 소프트웨어는 메시를 세분화한 뒤 새 정점을 이동시켜 디스플레이스먼트를 실제 지오메트리로 만들 수 있음
- 이 방식은 물체의 실루엣에도 영향을 줌
- 결과 메시의 폴리곤 수가 크게 증가함
- 단단한 모서리나 코너가 있는 입력 메시는 좋은 결과를 위해 수정이 필요함
- 실시간 그래픽에서는 parallax occlusion mapping 같은 표면 셰이딩 효과로 실제 형상을 바꾸지 않고 세밀한 지오메트리처럼 보이게 만들 수 있음
- 큰 바닥과 벽에서는 좋아 보일 수 있음
- 물체 가장자리에서는 지오메트리가 여전히 평평해 환상이 깨짐
- shell mapping은 고도로 세분화된 메시 없이도 물체 실루엣에서 디스플레이스먼트를 볼 수 있게 하는 중간적 접근임
- 입력 메시의 곡률이 높은 영역에서는 다루기 어려움
- 단단한 모서리나 코너가 있는 입력 메시를 이 기법에 맞추기도 쉽지 않음
구현 방식: 복셀과 디스플레이스먼트 매핑 결합
- 이 렌더러는 고전 3D 게임 같은 환경을 저폴리 삼각형 메시로 만들고, 디스플레이스먼트 맵으로 복셀 스케일 표면 디테일을 정의한 뒤, 실제 복셀로 조립된 것처럼 보이게 렌더링함
- 건물 코너처럼 날카로운 에지가 많은 환경을 대상으로 하므로, 일반 디스플레이스먼트 매핑이 어려워하는 영역에서도 복셀 같은 결과가 필요함
- 현재 구현은 독립 실행형 C++ / Vulkan 프로젝트임
- 인프라는 세 가지 주요 작업을 수행함
- 삼각형 메시와 제한된 디스플레이스먼트 맵 정보를 받아, GPU가 변형된 메시를 그릴 때 사용할 지오메트리 데이터로 변환함
- 이 과정은 프레임 렌더링 전에 CPU에서 실행됨
- 출시 게임에서는 결과를 디스크에 베이크할 수 있음
- 영상의 데모 환경 전체 변환은 단일 스레드에서 0.5초가 걸림
- 텍스처를 전처리해 렌더링 중 필요한 노멀 맵 같은 정보를 생성함
- 작업 자체는 기본적이지만 느리므로 베이크가 적합함
- 생성된 메시와 텍스처 상태를 사용해 GPU에서 복셀 디스플레이스먼트 지오메트리를 그림
- 프레임당 CPU 관여는 거의 없음
- 삼각형 메시와 제한된 디스플레이스먼트 맵 정보를 받아, GPU가 변형된 메시를 그릴 때 사용할 지오메트리 데이터로 변환함
- 성능은 이미 실사용 가능한 수준임
- Radeon RX 5700 XT에서 데모 시퀀스는 1440p 기준 4~9ms 프레임 타임으로 렌더링됨
- 이는 250~110FPS에 해당함
- Steam Deck OLED의 네이티브 800p에서는 60FPS 이상을 유지하고, 많은 구간은 90FPS에 고정됨
아트 자산 제작 방식
- 콘텐츠 제작에는 텍스처와 메시 두 종류의 자산이 필요함
- 각 텍스처는 albedo map과 displacement map으로 작성됨
- albedo는 레트로 게임의 제한된 팔레트를 흉내 내면 시각 스타일을 설득력 있게 만드는 데 도움이 됨
- displacement map은 세밀한 높이 값을 제공하며, 렌더러에서 스케일을 조정해 강도를 바꿀 수 있음
- 스케일 조정 후 높이 단위는 표면을 안쪽이나 바깥쪽으로 몇 복셀 이동할지임
- 렌더러는 가장 가까운 정수 복셀 단위로만 변위시키지만, 정확한 높이 값은 노멀 맵 계산에 사용함
- 복셀 하나보다 낮은 특징도 조명에는 영향을 줄 수 있음
- 메시는 셰이딩 노멀을 가진 일반적인 저폴리 텍스처 매핑 삼각형 메시임
- 노멀은 어떤 부분이 부드럽게 휘어진 표면인지, 어떤 에지가 날카로운 에지인지 나타냄
- 렌더러는 날카로운 에지에서 좋은 결과를 만들기 위해 추가 작업을 수행함
- 시각 스타일을 위해 텍스처 매핑 시 복셀 크기를 일정하게 유지하려 하지만, 필수 조건은 아님
- 메시 구조와 텍스처 매핑에는 제한이 있음
- 일부 제한은 향후 제거 가능함
- 일부 제한은 렌더러 동작 방식 때문에 피할 수 없음
- 자산은 전용 복셀 표현이 아니라 삼각형 메시이므로 여러 도구로 만들 수 있음
- 데모 환경은 Blender로 모델링됨
- 현재 Blender에서 데모로 내보내는 형식은 OBJ 파일임
게임 제작에서의 장점과 적용 범위
- 이 방식은 특수한 복셀 편집 도구 대신 익숙한 워크플로로 콘텐츠를 만들 수 있게 함
- 좋은 텍스처 제작은 어려울 수 있지만, 한 번 만들면 여러 지오메트리에 재사용하기 쉬움
- 영상 데모의 지오메트리 상당 부분은 세 가지 색상의 단일 석재 블록 텍스처를 사용함
- 환경은 삼각형 메시로 제작되고 복셀 특징은 표면 장식이므로, 편할 때는 환경을 폴리곤 지오메트리로 취급할 수 있음
- 데모 애플리케이션은 1인칭 시점 이동, 충돌, 계단 오르기, 벽 충돌을 지원함
- 자체 물리 엔진이나 캐릭터 컨트롤러를 작성하지 않음
- 오픈소스 Jolt Physics를 통합함
- 원래 삼각형 메시를 충돌 지오메트리로 사용함
- 적 이동과 경로 탐색도 같은 메시 기준으로 해결할 수 있음
- 일부 게임플레이 시스템만 복셀을 의식하면 됨
- 예를 들어 1인칭 슈터에서는 총알이 변위된 지오메트리의 정확한 형상을 따르도록 displacement-aware raycast 함수를 구현할 수 있음
- 많은 복셀 기반 게임은 여러 게임 시스템을 맞춤 제작해야 해서 자체 엔진을 사용하지만, 이 접근은 렌더링 외 대부분의 로직이 복셀 스케일 디테일을 몰라도 됨
- 기존 엔진에 이 렌더링 기법을 통합하는 경로가 가장 현실적인 방향임
남은 과제와 다음 단계
- 현재 구현은 레벨 지오메트리 제작에는 잘 맞지만, 게임 환경에는 작은 오브젝트, 장식, 적 같은 동적 요소도 필요함
- 향후에는 작은 오브젝트나 애니메이션 오브젝트를 이 아트 스타일에 통합하는 방법을 추가할 계획임
- 데모의 조명은 이미 좋아 보이지만 현재 구현에는 제한이 있음
- 작은 수의 조명만 지원함
- 그림자, 앰비언트 오클루전, 더 고급 기능은 없음
- 이 렌더러는 일반적인 복셀 게임처럼 매우 동적인 지오메트리보다 대부분 게임이 가진 대체로 정적인 환경을 대상으로 함
- 특정 애플리케이션 필요에 따라 베이크 방식 등을 포함해 다양한 조명 처리 여지가 있음
- 현재 안티앨리어싱이 없으며, 특히 먼 바닥에서 눈에 띔
- 프로젝트의 향후 계획과 개발자·스튜디오를 위한 논의는 두 번째 글에서 이어짐