주차정리 0416~0422
기존 지연렌더링 파이프라인에서
Gbuffer생성 파이프라인과 Lighting 계산 사이에 ray-traced reflection 파이프라인을 추가했습니다.
G-buffer에서 얻은 position, normal, roughness 등을 기반으로
RT Reflection 파이프라인에서 반사된 간접 조도를 계산하여 최종 조명계산에 넘겨줍니다.
우선은 path tracing을 기반으로 간접 반사 조명을 정확하게 구현하는 것을 목표로 했습니다.
반사 조도 계산은 적분이지만, 모든 방향을 계산할 수는 없습니다.
그래서 확률적으로 중요한 방향만 선택하는 Importance Sampling이 필요합니다.
특히 GGX 기반의 BRDF를 쓰기 때문에, GGX 분포에 따라 방향을 샘플링하는 것이 가장 이상적입니다.
importanceSampleGGX로 얻은 하프벡터 H를 기준으로
실제 반사 방향 ωi를 계산합니다.
이때 1개 방향에 대한 조도는
결국 Li를 제거한 나머지가 감쇠 계수가 됩니다.
RT Reflection에서는 importance sampling된 방향으로 레이를 발사하고
그 결과 얻은 조도에 감쇠 계수 β를 곱하여 누적합니다.
이제 히트 지점에서의 조도 Li만 계산하면 됩니다.
반사 방향 ωi로 쏜 레이가 다른 표면에 맞았다면,
그 지점에서는 광원과의 visibility 확인 후, Cook-Torrance BRDF를 사용해 조도를 계산합니다.
출사 방향만 다를 뿐 lightpass에서 계산되는 공식과 똑같게 적용했습니다.
만약 바운스가 남아있다면, 히트된 위치에서 다시 샘플링을 수행하여
새로운 반사 방향으로 레이를 발사하고
새롭게 계산된 감쇠 계수 β를 누적하여 다음 입사 조도를 계산합니다.
이 과정을 반복하여 최종 간접 조도 Lo에 누적하게 됩니다.
샘플 개수가 하나가 아닌 경우
여러 경로를 평균내어 최종적으로 반사 간접 조명을 계산합니다.
이 결과를 토대로 최종 조명 계산에서는,
반사 간접 조명 결과를 별도의 텍스처(rtOutput)에 저장한 뒤,
LightPass에서 Fresnel 계수를 기준으로 직접 조명과 블렌딩하여 최종 픽셀 색을 결정합니다.
앞으로 방향성은
적은 샘플로도 충분한 품질을 얻기 위해, 디노이징 기법을 도입할 계획입니다.