TECHARTNOMAD | MAZELINE.TECH

TECH.ART.FLOW.IO

GODOT HDDAGI 가 뭔가요? 읽어보기.

jplee 2026. 6. 6. 03:05

Branch
OrangeeZ/godot-pineapple at gi-hdda

 

GitHub - OrangeeZ/godot-pineapple at gi-hdda

Godot Engine – Multi-platform 2D and 3D game engine - OrangeeZ/godot-pineapple

github.com

 

PR: Pull requests · godotengine/godot

 

GitHub - godotengine/godot: Godot Engine – Multi-platform 2D and 3D game engine

Godot Engine – Multi-platform 2D and 3D game engine - godotengine/godot

github.com

 


HDDAGI: Godot 엔진의 차세대 글로벌 일루미네이션 시스템

1. 개요

HDDAGI (Hierarchical Digital Differential Analyzer Global Illumination)는 Godot 엔진의 기존 SDFGI (Signed Distance Field Global Illumination)를 대체하기 위해 개발된 차세대 글로벌 일루미네이션 기술입니다. Godot 4.3에서 소개되었으며, Godot 리드 개발자인 Juan Linietsky가 2023년 12월에 처음 공개했습니다.

본 문서는 HDDAGI의 학술적 기원, 기술적 작동 원리, 그리고 기존 SDFGI와의 비교를 포함한 상세 분석을 제공합니다.


2. 학술적 기원: DDA에서 HDDA로

2.1 디지털 미분 분석기 (Digital Differential Analyzer, DDA)

DDA는 1987년 Amanatides와 Woo가 제안한 복셀 그리드에서의 광선 순회(Ray Traversal)를 위한 알고리즘입니다. 이 알고리즘은 3D 공간 분할 구조를 통과하는 광선의 효율적인 순회를 위해 설계되었으며, 다음과 같은 특징이 있습니다:

  • 빠른 복셀 순회: 인접 복셀로의 이동이 단 두 개의 부동소수점 비교와 하나의 덧셈으로 가능
  • 중복 교차 제거: 여러 복셀에 걸쳐 있는 객체와의 교차를 중복 계산하지 않음
  • 간단한 구조: 복잡한 트리 구조 없이 그리드 기반의 접근

2.2 계층적 디지털 미분 분석기 (Hierarchical DDA, HDDA)

2014년, Ken Museth는 SIGGRAPH에서 OpenVDB의 계층적 데이터 구조를 활용한 광선 마칭(Ray Marching) 최적화를 위한 HDDA 알고리즘을 발표했습니다.

HDDA의 핵심 혁신:

  • 멀티-레졸루션 렙프로그 (Multi-Resolution Leapfrogging): 다양한 해상도 레벨에서 광선을 "도약"하며 빈 공간을 건너뜀
  • 계층적 순회: 상위 해상도에서 빈 복셀을 건너뛰고 하위 해상도에서 상세 정보 확인
  • 성능 향상: 전통적인 DDA 대비 최대 10배 이상의 성능 개선

HDDA는 DreamWorks Animation의 OpenVDB 기술 스택에 통합되어 렌더링 성능을 크게 개선했습니다 citation:Hierarchical Digital Differential Analyzer.


3. 기술적 작동 원리

3.1 전통적인 광선 마칭 vs HDDA

전통적인 광선 마칭:

for (int i = 0; i < max_steps; i++) {
    pos += ray_dir * step_size;
    if (scene(pos)) hit();
}
  • 모든 스텝에서 동일한 크기로 이동
  • 빈 공간에서도 매 스텝마다 체크 필요
  • 불필요한 계산이 많음

HDDA 방식:

while (!hit) {
    // 현재 레벨에서 다음 복셀 경계까지의 거리 계산
    float step = get_step_to_next_cell(pos, ray_dir, current_level);

    // 하위 레벨로 이동할지 결정
    if (should_descend(pos, step)) {
        current_level++;
    } else {
        pos += ray_dir * step;
    }
}
  • 레벨에 따라 가변 스텝 크기 사용
  • 빈 공간에서는 큰 스텝으로 건너뜀
  • 상세한 영역 근처에서는 작은 스텝 사용

3.2 HDDAGI에서의 활용

HDDAGI는 HDDA 알고리즘을 글로벌 일루미네이션 렌더링에 적용합니다:

  1. 볼륨 그리드 구조: 3D 복셀 그리드에 조명 정보 저장
  2. 프로브 배치: 주요 위치에 프로브 배치하여 간접 조명 샘플링
  3. HDDA 기반 순회: 광선을 효율적으로 순회하며 프로브 정보 수집
  4. 보간 및 필터링: 수집된 정보를 부드럽게 보간하여 GI 계산

3.3 GPU 최적화

NVIDIA의 NanoVDB 기술은 OpenVDB 데이터 구조를 GPU 친화적인 선형화 형식으로 변환하여 빠른 전송과 순회를 가능하게 합니다 citation:Accelerating OpenVDB on GPUs. HDDAGI는 이러한 기술들을 활용하여 실시간 렌더링을 가능하게 합니다.


4. SDFGI와의 비교

4.1 기존 SDFGI의 문제점

SDFGI (Godot 4.0 도입)는 부호화 거리 필드(Signed Distance Field)를 사용하여 글로벌 일루미네이션을 계산합니다. 그러나 다음과 같은 문제가 있었습니다:

  1. 전체 캐스케이드 재생성: 카메라 이동 시 전체 SDF 캐스케이드를 재생성해야 함
  2. 성능 저하: 재생성 시 FPS 드랍 발생
  3. 빛 누설(Light Leakage): 폐색 처리의 부정확함으로 인해 빛이 비현실적으로 퍼짐
  4. 아티팩트: 일부 상황에서 시각적 노이즈와 왜곡 발생

4.2 HDDAGI의 개선 사항

Juan Linietsky가 설명한 HDDAGI의 주요 장점:

항목 SDFGI HDDAGI
성능 카메라 이동 시 프레임 드랍 훨씬 빠름, 캐스케이드 재생성이 매우 빠름
품질 아티팩트 발생 더 높은 품질, 아티팩트 감소
폐색 빛 누설 많음 훨씬 나은 폐색, 빛 누설 최소화
메모리 상대적으로 높음 더 적은 메모리 사용

4.3 HDDAGI의 주요 이점

1. 국지적 업데이트 (Local Updates)

  • 카메라 이동 시 전체 캐스케이드가 아닌 필요한 영역만 업데이트
  • 스크롤링 없이도 효율적인 렌더링 가능
  • 하드웨어 부담 크게 감소

2. 향상된 폐색 처리

  • 빛 누설(Light Leakage) 현상 대폭 개선
  • 더 정확한 간접 조명 계산

3. 에너지 보존

  • SDFGI의 구현 버그로 인해 과도한 채도와 광량이 표현되었으나
  • HDDAGI는 정확한 에너지 보존으로 현실적인 렌더링

4.4 현재 HDDAGI의 제약 사항

알려진 이슈:

  1. Intel GPU 호환성: 일부 Intel GPU에서 DEVICE LOST 오류 발생 (원인 미상)
  2. TAA와의 상호작용: 선반사(Sharp Reflections)가 TAA(Temporal Anti-Aliasing)와 결합될 때 떨림(Wobbly) 현상
  3. 구석 어두워짐: SDFGI와 유사하게 일부 구석에서 과도한 어두움 발생
    • DDGI Octahedral VSM으로 해결 가능하지만 빛 누설 증가로 인해 채택되지 않음
  4. 색상 채도: 에너지 보존으로 인해 SDFGI보다 덜 채도 있고 어둡게 보임 (SDFGI의 버그였던 과도한 밝기를 선호하는 사용자도 있음)

개발 중인 기능:

  • 동적 객체 지원
  • 고밀도 모드 (Sub-probes)

5. Godot 엔진 내 적용 현황

5.1 개발 이력

  • 2023년 12월: Juan Linietsky가 HDDAGI를 처음 공개
  • GitHub PR #86007: HDDAGI 구현 관련 Pull Request
  • 개발 브랜치: reduz/godot/tree/sdfgi-2.0

5.2 커뮤니티 반응

  • GameFromScratch 등 기술 블로그에서 소개
  • 데모 영상으로 성능 향상과 품질 개선 확인
  • Reddit 등 커뮤니티에서 긍정적인 반응

5.3 통합 현황

현재 HDDAGI는 Godot 4.3 실험적 기능으로 도입되었으며, 다음 버전에서 더 완성된 형태로 제공될 예정입니다.


6. 기술적 세부 사항 심화 분석

6.1 계층적 데이터 구조의 장점

HDDA가 사용하는 계층적 복셀 구조는 다음과 같은 이점을 제공합니다:

  1. 공간 효율성: 빈 공간은 상위 레벨에서 표현하여 메모리 절약
  2. 순회 효율성: 빈 공간을 건너뛰어 불필요한 계산 회피
  3. 적응형 상세도: 상세한 영역은 하위 레벨에서 높은 해상도로 표현

6.2 광선 순회 최적화

레벨 0 (가장 큼): 빈 공간 → 큰 스텝으로 건너뜀
레벨 1: 일부 오브젝트 → 중간 스텝
레벨 2: 상세한 형상 → 작은 스텝으로 정밀 계산

이러한 계층적 접근은 전통적인 단일 해상도 그리드 기반 순회보다 훨씬 효율적입니다.

6.3 GPU 가속 기술

NanoVDB는 OpenVDB 데이터 구조를 GPU 친화적인 형식으로 변환합니다:

  • 선형화된 메모리: 포인터 추적 없이 인덱스 기반 액세스
  • 컴팩트한 표현: 중복 데이터 제거
  • 빠른 전송: CPU-GPU 간 데이터 전송 최적화

이로써 HDDAGI는 실시간 렌더링에 적합한 성능을 달성합니다.


7. 결론

HDDAGI는 Ken Museth가 2014년에 발표한 HDDA 알고리즘을 글로벌 일루미네이션 렌더링에 적용한 새로운 기술입니다. Godot 엔진의 기존 SDFGI 문제를 해결하며 다음과 같은 개선을 제공합니다:

  1. 훨씬 빠른 성능: 캐스케이드 재생성이 매우 빠름
  2. 향상된 품질: 아티팩트 감소, 빛 누설 최소화
  3. 낮은 메모리 사용: 효율적인 데이터 구조 활용
  4. 국지적 업데이트: 카메라 이동 시 효율적 업데이트

비록 일부 하드웨어 호환성 이슈와 추가 최적화가 필요하지만, HDDAGI는 Godot 엔진의 렌더링 품질과 성능을 크게 향상시키는 중요한 진보입니다. 향후 동적 객체 지원과 고밀도 모드 등 기능이 추가되면 더욱 강력한 글로벌 일루미네이션 솔루션이 될 것으로 기대됩니다.


8. 참고자료

8.1 학술 논문

  1. Ken Museth, "Hierarchical digital differential analyzer for efficient ray-marching in OpenVDB", SIGGRAPH 2014

8.2 기술 자료

  1. GameFromScratch, "Godot New Global Illumination System – HDDAGI", December 14, 2023
  2. NVIDIA Technical Blog, "Accelerating OpenVDB on GPUs with NanoVDB", August 20, 2020
  3. Amanatides & Woo, "A Fast Voxel Traversal Algorithm for Ray Tracing", 1987

8.3 GitHub 리소스

  1. Godot HDDAGI Pull Request: https://github.com/godotengine/godot/pull/86007
  2. HDDA Development Branch: https://github.com/reduz/godot/tree/sdfgi-2.0
  3. Godot Proposals Discussion #10194: VoxelGI 대신 HDDAGI 도입 제안

8.4 추가 리소스

  1. HDDA Dreamworks PDF: https://research.dreamworks.com/wp-content/uploads/2018/07/talk_hierarchical_digital_OpenVDB_v4-Edited.pdf
  2. Godot 4 SDFGI 게시글: https://gamefromscratch.com/godot-4-released/