역자의 말: 유니티를 사용해서 MMORPG 를 개발하고 계시는 한 고객사 프로젝트의 렌더링 파이프라인에 실시간 글로벌 일루미네이션 시스템을 어떤 형식으로 넣을 수 있을까 최근 고민을 하고 있고 그런 차에 예전에 보다가 말았던 Surfel 시스템(EA 스포츠 프로스트바이츠 엔진에 들어가 있는 GI)을 다시 복기하면서 보고 있어요. 팬실베니아 대학에서 진행한 SurfelPlus 라는 프로젝트 페이지가 보여 공유 해 봅니다.
원문
https://wangruipeng.com/SurfelPlus/
SurfelPlus Project Page
A real time dynamic global illumination renderer based on surfel. Final project of University of Pennsylvania’s CIS 565 GPU Programming and Architecture class. Written by Zhen Ren, Ruipeng Wang and Jinxiang Wang.
wangruipeng.com
Surfel 기반의 실시간 동적 전역 조명(Global Illumination) 렌더러입니다. 펜실베이니아 대학교 CIS 565 GPU 프로그래밍 및 아키텍처 수업의 최종 프로젝트로, Zhen Ren, Ruipeng Wang, Jinxiang Wang이 제작했습니다.
GitHub에서 프로젝트 보기WANG-Ruipeng/SurfelPlus


업데이트: 이 프로젝트가 SIGGRAPH 25 포스터 트랙에 채택되었음을 기쁘게 알립니다! 원본 논문은 아래에서 확인하실 수 있습니다:
SurfelPlus: A Surfel-Based Global Illumination Solution Optimized for Low-End Graphics Hardware
소개
SurfelPlus는 NVIDIA의 vk_raytrace 프레임워크를 기반으로 구축된 실시간 동적 전역 조명 렌더러입니다. Vulkan 레이 트레이싱과 서펠(surfel) 기반 기법을 활용하여, 동적인 씬 업데이트와 함께 고품질 조명 효과를 제공하는 SurfelPlus는 실시간으로 사실적이고 몰입감 있는 시각적 렌더링을 위한 효율적인 솔루션을 목표로 합니다. 프로젝트 피치 PDF는 여기를 클릭하세요.
기술 개요
SurfelPlus는 고품질의 정확한 조명 효과를 구현하기 위해 서펠 기반 기법을 활용합니다. 이 접근 방식은 EA SEED가 SIGGRAPH 2021 강연과 SIGGRAPH 2024 강연에서 발표한 서펠 GI 방법을 기반으로 합니다. 원래 Frostbite 엔진용으로 설계된 이 기법들은 Vulkan 기반 렌더러에 맞게 신중히 적용 및 최적화되었으며, Vulkan의 유연성과 레이 트레이싱 기능을 최대한 활용해 동적 씬에서 실시간 전역 조명을 구현합니다.
서펠(Surfel)이란?
서펠은 "surface elements"의 줄임말로, 3D 오브젝트의 표면을 나타내는 점 형태의 기본 요소입니다. 각 서펠은 위치, 법선, 색상 및 기타 재질 속성을 포함한 핵심 정보를 저장하여 씬 내 빛의 상호작용을 효율적으로 계산할 수 있게 합니다.

전역 조명에서 서펠은 빛의 전파와 반사를 위한 중간 매개체 역할을 하며, 정확도와 연산 비용 간의 균형을 맞춥니다.
주요 기능 및 기법
- 서펠 기반 간접 조명

- 서펠 간에 빛 에너지를 저장하고 공유하는 방식으로 간접 조명을 계산합니다. 이 접근 방식은 확산 상호 반사(diffuse inter-reflection)를 포착하며, 사전 계산 데이터 없이 동적 씬을 지원하므로 인터랙티브 애플리케이션에 적합합니다.
- 조명 통합
- SurfelPlus는 직접 조명에 Vulkan의 기능을 활용하는 한편, 성능 부담이 큰 간접 조명 계산은 서펠이 담당합니다. 이 하이브리드 방식은 시각적 품질을 희생하지 않으면서 렌더링 성능을 최적화합니다.
- 전역 조명 파이프라인
- 서펠 준비: 화면의 서펠 커버리지에 따라 서펠을 생성하거나 업데이트합니다. 각 서펠의 속성(법선, 색상, 반사율 등)은 기저 표면에 맞게 계산됩니다.
- 서펠 가시성 및 컬링: 카메라 절두체(view frustum) 밖에 있거나 다른 지오메트리에 가려진 서펠을 효율적으로 컬링하여 연산 오버헤드를 줄입니다.
- 조명 계산: 서펠 간 상호작용을 이용해 빛의 바운스를 시뮬레이션하여 씬 내 간접 빛 누적을 가능하게 합니다.
- 그리드 기반 서펠 가속 구조 그리드 기반 서펠 가속 구조는 서펠을 공간 셀로 구성하여 빠른 이웃 쿼리와 업데이트를 가능하게 합니다. 이 방법은 효율적인 서펠 간 상호작용과 확장 가능한 간접 조명 계산을 지원합니다.

서펠 기반 GI의 장점
- 실시간 성능: 사전 계산된 라이트맵이나 무거운 레이 트레이싱에 의존하는 전통적인 방식과 달리, 서펠 GI는 실시간 프레임 속도로 동적 업데이트를 가능하게 합니다.
- 동적 씬 지원: 조명 변화가 즉시 반영되어, SurfelPlus는 인터랙티브 환경과 게임에 이상적입니다.
- 물리 기반 조명: 서펠은 본래 표면 및 재질 속성을 저장하므로, 렌더링 파이프라인이 기존 PBR 방식과 원활하게 통합됩니다.
서펠 GI 렌더 패스 개요
개요
- 준비 단계
- G버퍼 패스
- 서펠 계산 단계
- 서펠 준비 패스
- 서펠 업데이트 패스
- 셀 정보 업데이트 패스
- 셀-서펠 업데이트 패스
- 서펠 레이 트레이싱 패스
- 서펠 통합 패스
- 서펠 생성 및 평가 패스
- 반사 계산 단계
- 반사 트레이싱 패스
- 공간적-시간적 필터링 패스
- 양방향 필터링 패스
- 통합 단계
- SSAO 패스
- 라이트 통합 패스
- TAA 패스
- 톤 매핑 패스

G버퍼 패스
G버퍼 패스는 씬의 지오메트리와 표면 속성에 대한 픽셀별 정보를 캡처하는 역할을 하며, 이후 조명 및 셰이딩 계산에 활용됩니다. 이 패스는 기본 오브젝트 ID, 압축된 월드 공간 법선, 그리고 렌더링 파이프라인에 필요한 기타 속성들을 인코딩합니다.

서펠 준비 패스
일부 카운터를 초기화하고 이후 누적을 위한 모든 버퍼를 준비하는 패스입니다.
서펠 업데이트 패스
서펠 업데이트 패스는 동적 서펠 데이터를 실시간으로 유지 및 업데이트하는 역할을 합니다. 활성 서펠을 처리하여 다음을 수행합니다:
- 수명, 카메라와의 거리, 총 서펠 수, 가시성 상태 등 특정 기준에 따라 만료되거나 유효하지 않은 서펠을 재활용합니다.
- 성능과 시각적 품질 간의 균형을 유지하기 위해 카메라 거리와 씬 조건에 따라 서펠 반경을 동적으로 조정합니다. 셀 반경은 서펠이 해당 셀 내에 올바르게 위치하도록 셀 크기에 의해 제한됩니다.
- 효율적인 공간 쿼리 및 상호작용을 위해 서펠을 적절한 그리드 셀에 분배합니다. 서펠은 주변 3x3 셀을 확인하여 여러 셀에 걸친 서펠이 각 셀에 올바르게 기록될 수 있도록 합니다.
- 간접 조명 계산을 위한 레이 리소스를 할당하여 충분한 샘플링을 보장합니다. 레이 할당은 서펠의 분산, 수명, 가시성에 따라 결정됩니다.
이 패스는 서펠 시스템이 씬 변화에 효율적이고 반응적으로 유지될 수 있도록 하며, 일관된 성능으로 실시간 동적 전역 조명을 지원합니다. 다만 서펠 재활용 과정에서 보이지 않는 영역의 서펠이 폐기될 수 있어, 카메라가 해당 방향을 바라볼 때 GI가 재수렴되는 현상이 발생할 수 있습니다.
셀 정보 업데이트 패스
셀-서펠 버퍼의 오프셋과 범위를 사전 할당합니다.
셀-서펠 업데이트 패스
셀-서펠 버퍼에 데이터를 채웁니다.
서펠 레이 트레이싱 패스
서펠 레이 트레이싱 패스는 서펠에서 레이를 발사하여 복사 조도(radiance)를 계산하는 역할을 하며, 이는 씬의 간접 조명에 필수적입니다. 이 패스는 레이 유도 샘플링과 코사인 가중 반구 샘플링을 통합하여 정확하고 효율적인 빛 전송 계산을 보장합니다.
- 레이 생성: 복사 조도 맵에 기반한 레이 유도 샘플링이나 서펠의 방향에 기반한 코사인 가중 샘플링을 사용하여 레이 방향을 결정합니다. 레이 유도 샘플링은 더 높은 정확도를 위해 고복사 조도 방향을 우선시하고, 코사인 가중 샘플링은 복사 조도 데이터가 불충분할 때 대체 샘플링을 제공합니다. 각 방향의 서펠 복사 조도는 4K 텍스처 아틀라스인 복사 조도 맵에 기록됩니다. 각 서펠은 방향별 복사 조도를 저장하기 위한 6x6 쿼드를 가집니다.

- 복사 조도 계산: 커스텀 경로 추적 방법으로 서펠 위치에서 씬으로 레이를 발사합니다. 레이가 발광 표면이나 하늘에 닿으면 해당 복사 조도를 반환하고, 그렇지 않으면 기존 서펠을 사용해 경로를 마무리합니다.
레이가 최대 깊이에 도달했지만 빛을 받지 못한 경우, 주변 서펠을 활용해 해당 레이에 대한 확산 간접 조명을 제공할 수 있습니다. 이를 통해 씬이 더 빠르게 수렴됩니다. 다만 주변 서펠이 많은 경우 모두를 샘플링하면 큰 성능 저하를 초래할 수 있으므로, 확률적 샘플링 전략을 사용하여 서펠 샘플 수를 제한합니다.
- 서펠 레이 업데이트: 이후 조명 계산에 활용하기 위해 각 서펠 레이를 계산된 복사 조도, 방향, 확률 밀도 함수로 업데이트합니다. 여기서 높은 밝기 값을 클램핑하여 안정성을 높이고 씬의 파이어플라이(firefly) 현상을 방지합니다.
- 동적 조정: 성능을 최적화하면서 사실감을 잃지 않기 위해 서펠의 활성도에 따라 레이 트레이싱 깊이를 조정합니다.
- 이 패스는 씬의 빛 전파를 정확하게 시뮬레이션하는 데 핵심적이며, SurfelPlus가 구현하는 고품질 전역 조명에 기여합니다.
서펠 통합 패스
서펠 통합 패스는 서펠 레이가 수집한 복사 조도 기여를 집계하고, 서펠 속성을 업데이트하며, 인근 서펠 간에 복사 조도 데이터를 공유하는 역할을 합니다. 이 패스는 일관되고 매끄러운 전역 조명을 달성하는 데 핵심적입니다.
- 복사 조도 집계: 메모리에 저장된 서펠 레이의 복사 조도 데이터를 수집하고 누적합니다. 각 서펠은 프레임당 최대 64개의 레이를 가집니다. 이 레이는 4개의 팩으로 나뉘며, 각 팩은 MSME를 사용하여 서펠 복사 조도에 기여합니다. MSME 알고리즘은 서펠의 분산과 누적 가중치도 계산하여 환경 변화에 더 빠르게 반응하고 더 매끄럽게 수렴할 수 있도록 합니다.
- 복사 조도 맵 업데이트: 각 서펠의 복사 조도 맵을 업데이트하고, 효율적인 재사용과 유도 샘플링을 위해 6x6 그리드에 방향별 복사 조도 정보를 저장합니다. 가시성 확인을 지원하기 위해 해당 깊이 맵에도 깊이 정보를 기록합니다. 각 서펠의 복사 조도

- 공유 복사 조도 기여: 인근 서펠이 로컬 공간 셀 내에서 복사 조도 데이터를 공유할 수 있게 합니다. 이 단계는 서펠 수렴을 크게 가속화합니다. 법선 정렬, 거리, 서펠 수명 등의 요소를 가중치로 사용하여 일관되고 합리적인 조명을 보장합니다. 여기서도 확률적 샘플링 전략이 적용됩니다.
- 적응형 통합: 갑작스러운 복사 조도 값 변화를 방지하기 위해 새로 생성된 서펠과 기존 서펠의 동작을 구별합니다. 이후 정확한 에너지 보존을 보장하기 위해 샘플 전반에 걸쳐 기여를 정규화합니다.
이 패스는 서펠이 프레임 간 매끄럽고 안정적인 조명을 유지하면서 공유 데이터를 활용해 전역 조명의 정확도와 성능을 높일 수 있도록 합니다.
서펠 생성 및 평가 패스
서펠 생성 패스는 인근 서펠을 기반으로 각 픽셀의 간접 조명 기여를 계산하고, 셰이딩 정보를 업데이트하며, 씬 내 적절한 커버리지를 보장하기 위해 새로운 서펠을 동적으로 생성합니다. 이 패스는 매끄럽고 세밀한 전역 조명을 통해 렌더링된 이미지의 조명을 평가합니다.
- 간접 조명 계산: 동일한 공간 셀 내 인근 서펠의 복사 조도 기여를 집계합니다. 사실적인 조명 효과를 보장하기 위해 거리, 법선 정렬, 서펠 반경 등의 요소를 가중치로 사용합니다.

- 커버리지 및 기여 분석: 각 픽셀의 커버리지와 기여 지표를 평가하여 조명 일관성을 판단하고 서펠 표현의 잠재적 공백을 감지합니다.
- 동적 서펠 생성: 충분히 표현되지 않은 영역에 새로운 서펠을 동적으로 생성하여 적절한 조명 커버리지를 유지합니다. 새로운 서펠의 위치, 반경, 복사 조도는 씬의 현재 조명 조건에 따라 초기화됩니다.

- 디버깅 및 시각화: 복사 조도, 서펠 ID, 분산, 서펠 반경 시각화를 포함한 다양한 디버깅 모드를 지원합니다. 이를 통해 서펠 기여와 간접 조명의 전반적인 품질을 파악할 수 있습니다.
- 적응형 서펠 제거: 서펠 레이아웃 메모리 사용량과 연산 성능을 최적화하기 위해 커버리지가 과도한 영역의 서펠을 제거합니다.
이 패스는 인근 서펠을 사용하여 간접 확산 조명을 평가하는 동시에, 실시간 시나리오에서 고품질의 균일한 전역 조명을 유지하기 위해 서펠 분포를 동적으로 조정합니다.

각 색상 셀은 하나의 서펠을 나타냅니다
반사 트레이싱 패스
반사 계산 패스는 RIS(Resampled Importance Sampling)를 사용하여 정반사 반사를 계산합니다. 복잡한 재질 속성과 다양한 표면 거칠기를 효율적으로 처리하면서 정확한 반사 기여를 계산합니다.
RIS: 가중 저수지 샘플링(weighted reservoir sampling) 방식으로 목표 기여 가중치에 따라 최적의 반사 후보를 선택합니다.
반사 계산: 원시 트레이싱과 서펠 기반 간접 조명을 모두 활용하여 씬에서 복사 조도를 수집하는 반사 레이를 추적합니다. 이 아이디어는 서펠 레이 트레이스와 유사합니다. 이 방식은 반사 수렴을 놀라울 정도로 가속화합니다.

위 이미지에서 단 1번의 바운스만으로도 서펠 간접 조명이 얼마나 큰 차이를 만드는지 확인할 수 있습니다.
파이어플라이 억제: 임계값 기반 밝기 클램핑을 적용하여 반사 출력의 이상값(파이어플라이)을 방지하고 안정적이고 사실적인 시각 결과를 보장합니다.
이 패스는 RIS와 서펠 간접 조명 기법을 통해 효율성을 유지하면서 광택 있고 금속성 표면의 사실적인 렌더링에 필수적인 고품질 정반사 반사를 제공합니다.
공간적-시간적 필터링 패스
공간적-시간적 필터링 패스는 공간 재구성 및 시간적 누적 기법을 적용하여 정반사 반사 데이터를 정제합니다. 이 패스는 노이즈와 아티팩트를 줄이면서 매끄럽고 시각적으로 정확한 반사를 보장합니다.

씬의 반사 조명
- 공간 재구성 필터링: 인근 픽셀에서 반사 데이터를 수집하고 평균화하는 이웃 샘플링 패턴을 사용합니다. BRDF 기여, 재질 일관성, PDF 값에 따른 샘플 가중치를 적용하여 관련성 높은 샘플을 우선시합니다.
- 재질 일관성 확인: 일치하는 재질 ID를 가진 샘플만 반사 데이터에 기여하도록 하여 재질별 특성을 보존합니다.
- 분산 계산: 샘플 기여의 분산을 계산하여 필터링된 반사의 신뢰성과 안정성을 측정합니다.
- 시간적 누적: 현재 필터링된 결과를 이전 프레임의 반사와 결합하여 시간적 안정성을 높이고 깜빡임을 줄입니다.

- 적응형 샘플링 패턴: 미리 정의된 패턴(코드에서 블루 노이즈 디스크)을 사용한 확률적 샘플링을 활용하여 서로 다른 픽셀 영역에서 성능과 품질의 균형을 맞춥니다. 원시 트레이싱 결과가 절반 해상도 텍스처에 있으므로, 각 절반 해상도 픽셀은 공간 필터링에서 2x2 쿼드에 해당합니다. 따라서 블루 노이즈 텍스처를 4등분하여 임계값을 설정하는 방식으로 서로 다른 샘플링 패턴을 적용합니다.

양방향 필터링 패스
양방향 정리 패스는 공간, 색상, 법선 유사성을 고려한 양방향 필터를 적용하여 필터링된 반사 데이터를 정제합니다. 이 패스는 날카로운 엣지와 중요한 디테일을 보존하면서 반사의 부드러움을 향상시킵니다.

노이즈 제거를 위한 필터링된 반사 이미지
- 분산 기반 필터링: 분산에 따라 픽셀을 다르게 처리합니다:
- 컬링된 픽셀: 분산이 임계값 이하인 경우 픽셀을 폐기합니다.
- 저분산 픽셀: 원본 반사 데이터를 유지합니다.
- 고분산 픽셀: 양방향 필터링을 적용하여 데이터를 부드럽게 합니다.
- 양방향 필터링: 세 가지 가중치를 결합하여 반사 데이터를 정제합니다:
- 공간 가중치: 더 먼 이웃의 기여에 페널티를 부여합니다.
- 범위 가중치: 색상이 크게 다른 이웃의 영향을 줄입니다.
- 법선 가중치: 표면 법선 정렬을 고려하여 기하학적 유사성을 반영합니다.
- 동적 커널 반경: 픽셀 분산에 따라 필터 커널 반경을 조정하여 고분산 영역에서는 더 적극적인 스무딩을 허용하면서 다른 곳에서는 선명도를 유지합니다.
- 엣지 보존: 법선 유사성과 색상 차이를 고려하여 경계와 세밀한 디테일이 보존되도록 합니다.
이 패스는 중요한 표면 디테일과 전환을 유지하면서 노이즈와 아티팩트를 줄여 고품질 반사 시각 결과를 보장하고, 완성도 높은 최종 이미지를 제공합니다.

SSAO 패스
씬에 더 많은 사실감을 더하는 SSAO 패스입니다. 노이즈 제거를 위해 시간적 누적을 사용합니다.

라이트 통합 패스
이 패스는 직접 조명을 계산하고 이전 패스에서 수집한 간접 조명 및 반사 정보와 통합합니다.
직접 조명에 필요한 정보(재질, 월드 위치 등)는 G버퍼에서 획득 및 압축 해제/재구성한 후, 레이 쿼리 기능을 사용하여 셰이딩을 계산합니다.

TAA 패스
TAA 패스는 뷰 절두체를 **지터(jitter)**하고 여러 프레임 간 색상을 전략적으로 평균화합니다.
위치 재구성: 깊이 버퍼와 화면 UV를 사용하여 월드 위치를 재구성합니다.
이전 프레임 재투영: 이전 프레임의 뷰-프로젝션 행렬을 사용하여 현재 픽셀의 월드 위치를 이전 프레임에서의 UV로 계산합니다.
재투영

이웃 색상 벡터 AABB: 3x3 이웃 색상과 인접 이웃 색상("+" 패턴의 주변 픽셀)을 샘플링하고 색상 벡터의 AABB를 계산합니다.
AABB

이웃 색상 클리핑: 단순히 클램핑하는 대신 현재 색상을 히스토리 색상 방향으로 클리핑합니다. 이렇게 하면 이전 프레임의 색상이 자연스럽게 수용되어 고스팅과 스미어링 효과를 줄입니다.
클램핑 및 클리핑

히스토리 프레임 블렌딩 및 가중치: 이전 프레임과 현재 프레임의 색상 사이를 선형 보간합니다. 피드백 팩터가 높을수록 더 빠르게 수렴되지만 아티팩트가 발생할 수 있습니다.
블렌딩

마일스톤 개발 일지
마일스톤 1
첫 번째 마일스톤에서는 렌더러의 기반을 구축하는 데 큰 진전을 이루었습니다:
주요 성과
- 여러 차례의 미팅과 논의를 진행하여:
- 모든 필요한 렌더 패스를 정의했습니다.
- 가능한 구현 세부 사항을 탐구했습니다.
- 레이 쿼리 및 리소스 관리를 포함한 코드베이스와 Vulkan 프레임워크를 숙지했습니다.
- 일부는 나이브하거나 빈 플레이스홀더인 기본 렌더 패스의 초기 구현을 생성했습니다.
- 가시성, 법선, 깊이 등 필수 속성을 캡처하는 기능적인 G버퍼 패스를 추가했습니다.
- 서펠을 파이프라인에 통합하기 위한 나이브 서펠화 방식 작업을 시작했습니다.
이 마일스톤은 서펠 기반 GI 시스템을 위한 견고한 기반을 마련했습니다.
구현된 렌더 패스
- G버퍼 패스: 가시성, 법선, 깊이 정보 캡처.
- 서펠 준비 컴퓨트 패스: 서펠 기반 조명 계산을 위한 데이터 준비.
- 서펠 생성 컴퓨트 패스: 씬 지오메트리에서 서펠 생성.
- 서펠 업데이트 컴퓨트 패스: 서펠 데이터 동적 업데이트.
- 직접 조명 패스: 직접 조명 효과 계산.
- 포스트 프로세싱 패스: 최종 이미지에 후처리 효과 적용.

데모

마일스톤 2 목표
두 번째 마일스톤에서는 서펠 시스템 개선과 고급 기능 통합에 집중합니다:
- 향상된 서펠화: 더 나은 정확도와 성능을 위한 서펠 생성 및 관리 프로세스 개선.
- 서펠 재활용: 메모리 오버헤드를 줄이기 위해 서펠을 효율적으로 재사용하는 재활용 메커니즘 구현.
- 서펠 가속 구조: 빠른 서펠 쿼리와 상호작용을 위한 그리드 기반 가속 구조 개발.
- 서펠 레이 생성 및 레이 트레이싱 (가능한 경우): 더 정확한 빛 전파 및 가시성 계산을 위한 서펠 기반 레이 트레이싱 통합 탐구.
이러한 개선을 통해 렌더러의 전반적인 효율성과 사실감을 향상시키는 것을 목표로 합니다.
마일스톤 2
마일스톤 2에서는 서펠 기반 GI 시스템에서 중요한 발전을 이루었습니다:
완료된 목표
- 더 나은 서펠화: 더 높은 정확도와 효율성을 위한 서펠 생성 개선.
- 서펠 재활용: 메모리 사용을 줄이고 동적 씬 업데이트를 유지하기 위한 서펠 재사용 메커니즘 구현.
- 서펠 가속 구조: 빠른 서펠 쿼리와 상호작용을 위한 나이브 균일 그리드 기반 가속 구조 개발.
부분 완료된 목표
- 서펠 레이 생성 및 레이 트레이싱: 레이 생성 및 트레이싱을 서펠로 통합하는 작업을 시작하여 부분적으로 구현 완료.
새로 구현된 패스:
- 서펠 컴퓨트 패스:
- 서펠 생성
- 서펠 트레이싱
- 서펠 업데이트/재활용
- 모든 서펠 정보를 수집하는 통합 패스

데모

마일스톤 3 및 최종 목표
마일스톤 3와 프로젝트 최종 단계를 위한 목표는 다음과 같습니다:
- 광택 간접 조명: 간접 조명 파이프라인에 광택 반사 지원 추가.
- 공간적-시간적 필터링: 더 나은 렌더링 품질을 위한 시간적 안정성과 공간적 일관성 향상.
- 더 나은 서펠화 및 트레이싱: 향상된 성능과 정확도를 위한 서펠 생성 및 트레이싱 알고리즘 개선.
- 비균일 가속 구조: 향상된 확장성과 효율성을 위해 균일 그리드에서 비균일 구조로 전환.
- 데모 씬: 렌더러의 역량을 보여줄 시연 씬 식별 및 준비.
마일스톤 3
마일스톤 3에서는 마일스톤 2에서 발견된 주요 문제를 해결하고 중요한 개선을 구현했습니다:
마일스톤 2의 문제점:
- 낮은 해상도 및 성능 저하: 이전 구현에서 낮은 해상도와 최적화되지 않은 프레임 속도 문제가 있었습니다.
- 저주파 노이즈: 조명 파이프라인의 눈에 띄는 아티팩트로 인해 시각적 품질이 저하되었습니다.
마일스톤 3 개선 사항:
- 더 나은 서펠화 및 트레이싱: 서펠 생성 및 트레이싱 알고리즘을 개선하여 정확도를 높이고 아티팩트를 줄였습니다.
- 더 높은 해상도 및 향상된 성능: 1080x720에서 2560x1440로 렌더링 해상도를 높이면서 120 FPS 이상을 유지하여 더 부드러운 성능을 구현했습니다.
- 비균일 가속 구조: 더 효율적인 서펠 쿼리와 더 나은 확장성을 위해 균일 그리드를 비균일 구조로 교체했습니다. 테스트 스타디움 씬에서 15% FPS 향상을 확인했습니다.
- 안정성 개선:
- 깜빡임과 불일관성을 방지하기 위한 렌더 파이프라인 동기화.
- 정밀도 문제를 완화하기 위한 G버퍼 깊이 바이어스 및 레이 오프셋 기법.
- 일관된 조명 품질을 보장하기 위한 더 균일한 서펠 분포.
새로운 기능:
- 다양한 조명 및 씬 구성에서 렌더러의 역량을 더 잘 보여주기 위한 새로운 데모 씬 추가.
데모

마일스톤 3 및 최종 목표:
- 광택 간접 조명: 광택 반사 지원 추가 (현재 진행 중).
- 공간적-시간적 필터링: 시간적 안정성과 공간적 품질 향상을 위한 필터링 기법 구현 (현재 진행 중).
- 더 나은 서펠화 및 트레이싱: 중요한 개선 사항과 함께 완료.
- 비균일 가속 구조: 성공적으로 구현.
이러한 개선을 통해 SurfelPlus는 높은 성능과 품질로 동적 전역 조명을 구현할 수 있는 매우 효율적이고 시각적으로 견고한 렌더러로 자리매김했습니다.
최종
완료된 목표:
- 광택 간접 조명:
- 광택 반사에 대한 지원을 완전히 구현하여, 광택 있는 표면에서 정확한 빛의 바운스를 시뮬레이션함으로써 시각적 사실감을 높였습니다. 이 기능은 광택 금속이나 유리 같은 재질의 충실도를 크게 향상시킵니다.
- 광택 반사를 위한 공간적-시간적 필터링:
- 광택 반사를 위한 확률적 공간적-시간적 필터링 기법을 성공적으로 통합했습니다. 이 접근 방식은 시간적 안정성과 공간적 일관성을 모두 향상시켜 씬의 깜빡임과 노이즈를 줄입니다.
추가로 구현된 기능:
- 양방향 필터링:
- 공간적-시간적 필터링 이후 간접 조명을 추가로 부드럽게 하기 위한 양방향 필터링 단계를 추가했습니다. 이 단계는 노이즈를 제거하면서 엣지 디테일을 보존하여 더 깔끔하고 시각적으로 매력적인 결과물을 제공합니다.
- 시간적 안티앨리어싱 (TAA):
- 특히 씬의 고대비 영역에서 앨리어싱 아티팩트를 해결하기 위해 TAA를 구현했습니다.
- 현재 구현은 카메라 움직임에서 파생된 모션 벡터에 초점을 맞추어 동적 카메라 인터랙션 중 더 부드러운 시각 결과를 제공합니다.
- 시간 제약으로 인해 레이 히트 재투영은 포함되지 않았지만, 향후 확장을 위한 기반이 마련되었습니다.
- 화면 공간 앰비언트 오클루전 (SSAO):
- 렌더링 파이프라인에 SSAO를 통합하여 깊이감과 접촉 그림자에 대한 인식을 향상시켰습니다. 이 기능은 빛이 자연스럽게 차단되는 영역에 미묘한 오클루전 효과를 추가하여 전반적인 사실감을 향상시킵니다.

이러한 개선 사항들은 SurfelPlus의 시각적 품질과 성능을 종합적으로 향상시켜, 동적 환경에서 실시간 전역 조명을 위한 견고하고 다재다능한 렌더러로 만들어 줍니다.
TAA 패스
TAA 패스는 뷰 절두체를 지터하고 여러 프레임 간 색상을 전략적으로 평균화합니다.
위치 재구성: 깊이 버퍼와 화면 UV를 사용하여 월드 위치를 재구성합니다.
이전 프레임 재투영: 이전 프레임의 뷰-프로젝션 행렬을 사용하여 현재 픽셀의 월드 위치를 이전 프레임에서의 UV로 계산합니다.
재투영

이웃 색상 벡터 AABB: 3x3 이웃 색상과 인접 이웃 색상("+" 패턴의 주변 픽셀)을 샘플링하고 색상 벡터의 AABB를 계산합니다.
AABB

이웃 색상 클리핑: 단순히 클램핑하는 대신 현재 색상을 히스토리 색상 방향으로 클리핑합니다. 이렇게 하면 이전 프레임의 색상이 자연스럽게 수용되어 고스팅과 스미어링 효과를 줄입니다.
클램핑 및 클리핑

히스토리 프레임 블렌딩 및 가중치: 이전 프레임과 현재 프레임의 색상 사이를 선형 보간합니다. 피드백 팩터가 높을수록 더 빠르게 수렴되지만 아티팩트가 발생할 수 있습니다.
블렌딩

샤프닝: 라플라스 연산자로 최종 이미지를 필터링합니다.

데모

참고 자료
'TECH.ART.FLOW.IO' 카테고리의 다른 글
| [번역] Colored Shadow Penumbra (4) | 2026.05.04 |
|---|---|
| [번역] Modern rendering culling techniques (3) | 2026.04.24 |
| [번역] 실시간 렌더링 - UNITY 그림자 렌더링 총정리 (0) | 2026.04.14 |
| [번역] 명일방주: 엔드필드 캐릭터 렌더링 (Unity URP) (1) | 2026.04.13 |
| [발표 번역] UF2025(Shanghai)—《델타포스》글로벌 일루미네이션 기술 심층 분석: Lightmap에서 Lumen까지 크로스플랫폼 구현의 여정 (0) | 2026.04.10 |