GN⁺: 절차적 게임 개발을 위한 나의 선호 도구 및 기법
(cprimozic.net)-
프로젝트 개요
- 몇 년 동안 브라우저에서 실행되는 3D 장면과 레벨을 작업해 왔음
- 처음에는 개별 데모로 시작했으나, 점차 상호 연결된 게임 같은 프로젝트로 발전함
- 절차적 및 생성적 기술을 사용하여 특정 요소를 구현함
-
Shaders + Textures
- 대부분의 텍스처는 이음새가 없도록 설계되어 큰 영역에서도 패턴이 보이지 않음
- Three.JS에서 사용자 정의 셰이더를 만들어 추가 기능을 제공함
-
Triplanar Mapping
- UV 맵 없이 메쉬에 텍스처를 적용할 수 있어 절차적으로 생성된 지형에 유용함
- 간단하게 구현할 수 있으며, 다양한 메쉬에 적용 가능함
- pow() 함수를 사용하여 가중치를 조정해 품질을 개선하고 성능을 최적화함
-
Hex Tiling
- 이음새 없는 텍스처의 반복을 숨기는 알고리듬
- Three.JS 프로젝트에 쉽게 통합할 수 있는 독립형 라이브러리로 포팅함
- UV 맵이 필요하며, 성능 오버헤드가 큼
-
Depth Pre-Pass
- 성능을 향상시키기 위해 장면을 두 번 렌더링하여 픽셀의 깊이를 기록함
- 오버드로우가 많은 장면에서 성능을 30% 이상 향상시킬 수 있음
-
AI-Powered PBR Texture Synthesis
- AI 생성 텍스처를 사용하여 장면의 품질을 높임
- DeepBump와 Materialize를 사용하여 PBR 맵을 생성함
-
Volumetric Fog/Clouds
- 장면에 구름이나 안개를 추가하는 셰이더를 개발함
- LoD 노이즈 룩업을 사용하여 다양한 기능을 추가함
-
Meshes + Geometry
- 런타임에 메쉬를 생성하고 변형하는 기술을 연구함
- 주로 장식이나 배경 요소를 절차적으로 생성함
-
LoD Terrain
- 노이즈 함수를 사용하여 지형을 생성하고, 카메라와의 거리에 따라 해상도를 동적으로 조정함
-
Procedural Mesh Processing + Manipulation Pipeline
- 저폴리 메쉬를 절차적으로 세분화하고 변형하는 파이프라인을 구축함
- 노멀 처리에 많은 노력이 필요함
-
Future Work
- Constructive Solid Geometry(CSG)를 사용하여 메쉬를 병합하거나 잘라내는 작업을 계획 중임
- Rust로 포팅하여 더 나은 이해를 목표로 함
GN⁺의 정리
- 이 기사는 절차적 게임 개발에 유용한 다양한 기술과 도구를 소개함
- Triplanar Mapping과 Hex Tiling 같은 텍스처링 기법을 통해 성능과 품질을 동시에 향상시킴
- AI를 활용한 텍스처 생성과 Volumetric Fog/Clouds 셰이더는 장면의 현실감을 높임
- Constructive Solid Geometry와 같은 미래 작업은 메쉬 변형에 큰 잠재력을 가짐
- 비슷한 기능을 가진 프로젝트로는 Unity의 ProBuilder와 Houdini가 있음
Hacker News 의견
-
과거에 절차적 생성에 도전해본 경험이 있음
- 특히 멋진 나무를 만들기 위해 시도했음
- 기하학을 쉽게 연결하는 방법이 부족하다고 느낌
- 두 개의 실린더를 만드는 것은 쉽지만, 이를 연결하는 것은 매우 어려움
- 이론적으로 CSG가 이 틈새를 채울 수 있지만, 3D 형태로 모델링해야 해서 어려움
- 두 개의 루프를 연결하는 루틴을 만들려고 했지만, 잘 작동하지 않음
- 나중에 모듈형 절차적 생성 시스템이 자발적으로 작동하는 게임을 만들고 싶음
-
좋은 지형 생성은 간단하지 않음
- 세계 규모나 눈높이에서 모두 어려움
- 단순한 접근 방식은 현실과 거의 닮지 않은 울퉁불퉁한 높이 맵을 생성함
- Dwarf Fortress는 기본적인 중점 변위를 시작으로 많은 커스텀 작업을 함
-
웹에서의 절차적 기술에 대한 훌륭한 글임
- WIP 절차적 RPG 레벨 편집기에 관심이 있다면 https://github.com/gamedevgrunt/3D-Action-RPG-JavaScript를 확인해보길 권장함
-
깊이 프리패스를 사용하는 데 혼합된 경험이 있음
- 몇 번 시도했을 때 중간에서 고급 데스크탑 GPU에서 성능 향상을 크게 느끼지 못했음
- 이유는 확실하지 않지만, 초기 Z 거부로 인해 픽셀 셰이더 호출이 절약되었기 때문일 수 있음
- 일반적으로 불투명한 메쉬를 앞에서 뒤로 렌더링함
- 공정하게 말하자면, 내 실험은 게임이 아닌 CAD/CAM 애플리케이션의 맥락에서 이루어졌음
- 장면은 일반적인 게임 환경과 달리 최소한의 텍스처와 매우 높은 폴리곤 기하학을 가짐
-
3D 아티스트로서 매우 흥미로운 기사였음
- 이 주제에 대한 좋은 기사는 매우 드묾
- Three.js를 시도해볼 예정임