GN⁺: VoxelSpace: 20줄 미만 코드로 구현된 지형 렌더링 알고리즘 (2020)
(github.com/s-macke)Voxel Space
웹 데모: Voxel Space 엔진
역사
- 1992년 당시 CPU는 현재보다 1000배 느렸고 GPU 가속은 알려지지 않았거나 비쌌음.
- 3D 게임은 CPU에서만 계산되었고, 렌더링 엔진은 단일 색상의 폴리곤을 렌더링했음.
- 1991년 MicroProse의 게임 Gunship 2000과 1992년 NovaLogic의 게임 Comanche가 출시되었음.
- Comanche는 당시로서는 놀라운 그래픽을 제공했으며, 텍스처, 음영, 그림자 등을 보여줌.
렌더링 알고리듬
- Comanche는 Voxel Space라는 기술을 사용하며, 이는 레이 캐스팅과 유사한 아이디어에 기반함.
- Voxel Space 엔진은 2.5D 엔진으로, 일반적인 3D 엔진이 제공하는 모든 자유도를 제공하지 않음.
높이 맵과 색상 맵
- 지형을 표현하는 가장 쉬운 방법은 높이 맵과 색상 맵을 사용하는 것임.
- Comanche 게임에서는 1024 * 1024 크기의 1바이트 높이 맵과 색상 맵을 사용함.
- 이러한 맵은 주기적이며, 복잡한 구조물은 표현할 수 없지만, 색상 맵은 이미 음영과 그림자를 포함하고 있어 렌더링 과정에서 조명을 계산할 필요가 없음.
기본 알고리듬
- 3D 엔진의 렌더링 알고리듬은 매우 간단함.
- Voxel Space 엔진은 높이와 색상 맵을 래스터화하여 수직선을 그림.
- 화면을 지우고, 후면에서 전면으로 렌더링하여 가림을 보장함.
- 관찰자로부터의 광학적 거리에 해당하는 맵의 선을 결정함.
- 선을 래스터화하여 화면의 열 수에 맞춤.
- 2D 맵에서 선의 세그먼트에 해당하는 높이와 색상을 가져옴.
- 높이 좌표에 대해 원근 투영을 수행함.
- 원근 투영에서 가져온 높이와 해당 색상으로 수직선을 그림.
회전 추가
- 위 알고리듬으로는 북쪽만 볼 수 있음.
- 다른 각도를 보려면 좌표를 회전시키는 몇 줄의 코드가 필요함.
성능 향상
- 성능을 높이기 위한 여러 가지 트릭이 있음.
- 후면에서 전면으로 그리는 대신 전면에서 후면으로 그릴 수 있음.
- 가림을 보장하기 위해 추가적인 y-버퍼가 필요함.
- 세부 사항 수준을 조정하여 가까운 곳에서는 더 많은 세부 사항을, 먼 곳에서는 적은 세부 사항을 렌더링함.
링크
- 웹 프로젝트 데모 페이지
- Voxel 지형 엔진 소개
- 개인 웹사이트
맵
- 색상, 높이
라이선스
- 소프트웨어 부분은 MIT 라이선스 하에 있음.
- Voxel Space 기술은 일부 국가에서 여전히 특허가 있을 수 있음.
- 색상 및 높이 맵은 게임 Comanche에서 역설계된 것으로 라이선스에서 제외됨.
Hacker News 의견
-
과거의 독창적이고 우아한 알고리즘이 마법 같은 경험을 제공하던 시대가 그리움. 하드웨어 자원이 제한적이던 시절, 개발자들은 새로운 기술과 창의성을 발휘하여 게임을 발전시켰음
- 오늘날에는 PICO-8 같은 판타지 플랫폼이 AAA 스튜디오의 반복적인 게임보다 더 흥미로움
- VoxelSpace와 같은 알고리즘은 적은 코드로 지형을 렌더링하는 방법을 보여줌
-
mars.com이라는 프로그램과 관련된 비디오가 흥미로움
- Pouet 사이트에서 관련 정보를 찾을 수 있음
-
이 렌더링 방법은 흥미롭지만, 임의의 볼륨을 렌더링할 수 없어 voxel로 분류하기는 어려움. 이는 높이맵 렌더러의 깔끔한 구현임
-
2020년 또는 2017년의 논의가 제목에 포함될 수 있음. 2021년에도 같은 저장소에 대한 논의가 있었음
-
프로그래밍을 처음 배울 때, QBasic으로 지형 높이맵을 생성하고 아이소메트릭 스타일로 렌더링하는 프로그램을 작성했던 기억이 있음. 이는 프로그래밍을 계속하게 만든 요소 중 하나였음
-
Adventure Game Studio로 이 기술을 사용하여 게임을 만들었음. 엔진의 이전 버전으로 최적화되지 않았지만, 언젠가 업데이트할 예정임
-
대부분의 현대 게임에서는 산이 비어 있는 경우가 있지만, 이 방법을 사용하면 산이 견고하게 보임
-
Comanche 게임을 처음 플레이했을 때의 감동을 기억함. 이는 미래나 영화에서 온 것 같은 느낌을 주었음
-
소프트웨어 렌더러 프로젝트는 재미있고 주말 프로젝트로 적합함. 과거에 유사한 알고리즘을 구현했지만, 현재의 구현이 훨씬 성능이 뛰어나고 간단함
-
GPU가 voxel 기반인 대체 타임라인에서 살고 싶음