1. NEE 이상 고침

샘플중 r 값만, (실질적으로 앞의 4bytes만) 0이 되어버려 전반적인 색이 푸르게 변하는 문제가 있었는데,
해결했다.
정확히 말하자면 .rgen 파일과 .rchit파일간 데이터를 raypayload 구조체로 주고 받는데
이 구조체가 참까다롭다.
명확한 레퍼런스는 결국 못찾아 확실하지 않은데
경험상 128bytes를 넘으면 예상하지 못한 에러가 난다.
이 에러가 정말 예상을 못하는게 명확한 에러가 나는게 아니라
부분적으로 특정 메모리 지역에 null이 채워진다 던가 하는 에러가 나서
원인 찾기가 쉽지가 않았다.
이제 BRDF 기반 경로 추적 과정에 Next Event Estimation(NEE)을 도입하여,
레이가 표면에 도달했을 때 광원을 샘플링해 직접광을 계산하고,
그 기여를 휴리스틱 밸런스를 통해 보정한 뒤 최종 radiance에 반영하도록 구현했다.


brdf기반으로 path tracing 과정에서
레이가 닿는 모든 표면에 대해 라이트를 샘플링 하는데
모든 라이트에 대해 기여를 전부 계산하지는 않고
현재 있는 모든 라이트를 삼각형 단위로 분해한 뒤
그 삼각형들 중 하나를 유니폼하게 선택하고
선택된 삼각형 내부에서 면적 기반 샘플링을 통해 한 점을 고르는 방식으로 구현했다.
샘플링된 위치가 현재 지점에서 가시적인 경우에만
BSDF와 geometric term을 고려하여 직접광 기여를 계산하고
light pdf에 기반한 MIS 보정 후 radiance에 반영했다.
샘플 하나일 때 차이가 명확하다.


2. 안티 엘리어싱
안티 앨리어싱은 복잡하게 처리하지 않고,
픽셀 중심 대신 랜덤한 서브픽셀 위치에서 ray를 쏘는 방식으로 간단히 해결
프레임마다 다른 위치에서 샘플링되기 때문에
프레임 누적으로 자연스럽게 aliasing이 줄어드는 효과를 얻을 수 있었다.




3. 러시안 룰렛
3번 bounce 이후부터 경로를 무조건 이어가는 대신
throughput에 비례한 확률로 생존 여부를 결정하는 러시안 룰렛을 적용했다.
에너지 보존을 위해 살아남을 경우에는 기여를 1/p로 보정한다.


'Computer Graphics > VulkanPT' 카테고리의 다른 글
| pt - 8. 전반적인 정리 (NEE 개념, svgf 개념), 현재 문제점들 (0) | 2025.05.12 |
|---|---|
| pt - 7. svgf 필터 추가 (0) | 2025.05.12 |
| pt - 5. 광원 정규화, bloom 적용, NEE 적용 중 (0) | 2025.05.07 |
| pt - 4. 문제 해결 + blackbody 관련 정리 (0) | 2025.05.02 |
| pt - 3. rendering equation 개념 정리 + 현재 문제들 (0) | 2025.04.29 |