Computer Graphics/VulkanPT

pt - 13. svgf 폐기

surkim 2025. 8. 12. 16:35

호기롭게 SVGF(Screen Space Variance Guided Filtering) 적용을 시도했지만,
원하는 퍼포먼스가 나오지 않아 폐기하기로 했다.
필터 자체의 한계도 명확히 보였다.

 

그래도 얻은 건 있었다.
논문을 찾아 읽고 직접 구현해본 경험,
그리고 구현 과정에서 여러 문제를 맞닥뜨리고 해결해본 경험이다.

 

가장 기억남는것중 하나가 알베도 디모듈레이션(demodulation) 과정에서 생긴 문제다.

필터 적용 전에 알베도 성분이 날아가는 것을 방지하여

빛 성분을 알베도로 나누는 방식인데, 처음에는 모든 픽셀에 그대로 적용했다.

 

그 결과, 알베도가 0에 가깝거나 아예 없는 픽셀에서도 나눗셈이 일어나 값이 튀었고,
히스토리 버퍼가 오염되면서 노이즈가 크게 발생했다.

특히 Path Tracing에서는 완전 스펙큘러 반사나 광원 직접 샘플링, 그리고 디퓨즈 스페큘러 섞여 있는 재질에서도 확률상 스페큘러만 계산되는 것도 있어서 결국 알베도 개념이 없는 픽셀이 많다.

이런 경우까지 나눗셈을 하니 깨끗해야 할 값이 망가졌다.

 

마지막에는 조건을 걸어, 알베도가 존재하고 일정 값 이상일 때만 나누도록 수정했다.

그렇게 해서 문제는 해결했지만, 전체적인 구조와 성능 문제로 SVGF 자체는 사용하지 않기로 했다.

성능 면에서는 Path Tracing 원본 출력은 노이즈가 있어도 현실감이 강하게 느껴졌는데,
SVGF를 적용하면 노이즈는 줄지만 화면이 부드럽게 뭉개져서 오히려 밋밋해 보였다.

특히 디모듈 모듈 문제에서 스페큘러 부분이 많이 없어져버리는 문제가 심했다.


게다가 필터 과정이 생각보다 느려, 기대했던 프레임 향상 효과도 없었다.
결국 효과와 성능 모두 만족스럽지 않다는 결론을 내리고 폐기했다.

총 정리 ppt 중 일부

 

 

깃에는 PBRT-bathroom-renderer 로 옮겨서 path tracing 만 적용된 버전으로 따로 옮기고

소개문을 작성해주었다.

https://github.com/ksro0128/PBRT_bathroom_renderer

 

GitHub - ksro0128/PBRT_bathroom_renderer

Contribute to ksro0128/PBRT_bathroom_renderer development by creating an account on GitHub.

github.com


 

지금까지는 .pbrt 파일만 지원하는 렌더러 였는데

이제는 .gltf를 지원하는 패스트레이싱 렌더러를 만들었다.

재질별 계산식을 통합식으로 수정했고

 

투과는 하고있는데..

gltf 특성상 투과를 얇은 재질, 두꺼운 재질 2가지를 지원하는데

이걸 통합적으로 생각하다가 지금은 흐지부지 되었었다.

일단은 빼고 ui만 수정해서 마무리짓고 정리해서 글 올려야겠다.