surkim 2025. 4. 21. 10:48

sponza 씬은 거친부분의 매질이 대부분을 이루고 있어 reflection이 눈에 띄게 보이지 않아 잠깐 씬을 바꿔 실험하고 있습니다.

양 옆, 바닥 부분과 가운데의 구 재질을 roughness : 0, metallic : 1로 두고 rt reflcetion을 시연했습니다. 

single bounce, sample: 1, 4, 16
sample: 16, bounce: 1, 2, 4

 

샘플 수에 따른 duration

samples 1 4 16
duration 1.482ms 2.305ms 6.142ms
  • 샘플 수 증가에 따라 노이즈가 줄고 품질은 개선됨
  • 반면 시간은 선형 이상 증가, 샘플 수 16에서는 6ms 이상 소요

 

 

bounce에 따른 duration (16 samples)

bounce 1 2 4
duration 6.163ms 12.034ms 21.031ms
  • 바운스 수가 늘어날수록 거울 사이의 다중 반사가 더 많이 누적.
  • 반면 연산량이 급격히 증가하여, 실시간 적용에는 무거운 비용

 

GGX importance sampling 기반 RT Reflection 입니다.

  1. G-buffer에서 normal, roughness, viewDir 정보를 이용해
    GGX 분포 기반으로 하프 벡터를 샘플링합니다.
  2. 이를 바탕으로 반사 방향을 결정, 각 방향으로 레이를 발사합니다.
  3. 각 바운스에서는 다음과 같은 순서를 따릅니다:
    • 레이 충돌 지점에서 albedo, ao, ambient 값을 읽음
    • 최종 색은 color += beta * albedo * ao * ambient 로 누적됨.
    • beta는 (BRDF * cosθ) / pdf 형식으로 바운스가 누적 되면서 업데이트.
  4. 바운스 수 만큼 반복.

샘플지점의 직접광 계산(Cook-Torrance BRDF 기반) 은 아직 미구현이며,

다음 단계에서 hit 지점에서의 직접 조명 평가를 포함할 예정입니다.

이를 통해 reflection 경로 상에서의 정확한 광량 기여와 에너지 분배를 구현할 계획입니다.

 

초기 구현으로 최적화는 전혀 적용되지 않았으며,
샘플 수와 바운스 수에 따른 구조적 성능 및 품질 차이를 평가하는 실험 단계입니다.

 

현재는 샘플 수가 적을 경우 노이즈가 강하게 발생하지만,
향후 사용자가 샘플 수를 크게 늘리지 않아도 되도록,
Temporal Accumulation(시간 누적) 및 Spatial Denoising(공간 디노이징) 기법을 도입할 예정입니다.

 

이를 통해 적은 샘플 수로도 고품질 반사 결과를 유지할 수 있도록 개선할 계획입니다.