5P by neo 4달전 | favorite | 댓글 1개
  • 프로젝트 개요

    • 몇 년 동안 브라우저에서 실행되는 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는 기본적인 중점 변위를 시작으로 많은 커스텀 작업을 함
  • 웹에서의 절차적 기술에 대한 훌륭한 글임

  • 깊이 프리패스를 사용하는 데 혼합된 경험이 있음

    • 몇 번 시도했을 때 중간에서 고급 데스크탑 GPU에서 성능 향상을 크게 느끼지 못했음
    • 이유는 확실하지 않지만, 초기 Z 거부로 인해 픽셀 셰이더 호출이 절약되었기 때문일 수 있음
    • 일반적으로 불투명한 메쉬를 앞에서 뒤로 렌더링함
    • 공정하게 말하자면, 내 실험은 게임이 아닌 CAD/CAM 애플리케이션의 맥락에서 이루어졌음
    • 장면은 일반적인 게임 환경과 달리 최소한의 텍스처와 매우 높은 폴리곤 기하학을 가짐
  • 3D 아티스트로서 매우 흥미로운 기사였음

    • 이 주제에 대한 좋은 기사는 매우 드묾
    • Three.js를 시도해볼 예정임