분류 전체보기 122

pt - 12. taa 적용

Path Tracing 파이프라인에서 서브픽셀 단위로 지터링된 primary ray를 생성하여 샘플을 수집하고이를 프레임마다 누적하는 방식으로 TAA를 적용하였다. 레스터라이제이션을 활용한 gbuffer 생성 방식을 고려해보았지만 primary ray 생성 로직 자체를 변경하지 않는 이상 구조적으로 오히려 성능 저하 요인이 된다고 판단하여 해당 방식은 일단 폐기

pt - 10. NEE 계산 수정, svgf 디모듈레이션 수정, 필터에서 거울만 수정

Path Tracing에서 Next Event Estimation (NEE) 을 도입하면직접광 샘플링과 BRDF 샘플링이 동시에 조명을 설명하게 되므로Multiple Importance Sampling (MIS) 을 통해 두 샘플링 방식의 중복 기여를 보정해야 한다. NEE를 적용한 이후 직접광 샘플에 대해서는 MIS weight를 올바르게 적용했지만간접광 (BRDF를 따라간 bounce) 에 대해서는 MIS weight 계산이 누락된 것을 확인했다. 때문에 NEE를 추가했을때 MIS 보정이 들어가지 않아서 과하게 밝아지는 문제가 발생했던 것이다. 결과적으로 간접광만 누적한것과NEE를 추가해서 누적한 이미지는 같아야하는데 (수렴속도만 차이나야하는데)NEE를 추가하면서 과하게 밝아진 부분을 해결했다. 처음..

pt - 9. 푸른 빛 원인 찾음

직접광 / 간접광을 분리하여 샘플링하고 디모듈레이션 하는 과정에서 잘못된 방법을 사용하여 푸른빛이 도는 결과가 나온 것이었다. 간접광 계산할 때 디퓨즈와 스페큘러 샘플링을 확률적으로 선택하여 진행되는데 이 중 디퓨즈 샘플링일때만 albedo 영향을 받기 때문에 일괄적으로 albedo를 나누면 안되고 실제 albedo영향을 받는 픽셀만 선택하여 디모듈레이션 해줘야했다. 위 이미지는 정확한 결과 이미지는 아니고간접광에서는 정확하게 albedo영향을 계산해서 빼줬는데직접광 영향은 아직 정확하게 계산을 못해서 직접광은 잠시 albedo 성분을 vec3(1.0)으로 없애고 실험해보았다.

pt - 8. 전반적인 정리 (NEE 개념, svgf 개념), 현재 문제점들

레퍼런스 복습 모든 렌더링은 이 렌더링 방정식을 푸는 것으로 시작렌더링 방정식은 순환 적분식 구조이므로 직접푸는 것은 불가능 따라서 몬테카를로와 같은 근사식으로 렌더링 방정식을 근사path tracing은 경로 하나만 샘플링하여 그 경로하나가 전체 적분 값을 대표하도록 처리 기존 구현 방식 초기에는 BRDF 중요도 기반 샘플링을 통해 path tracing을 구성BRDF로 샘플링한 방향이 우연히 광원에 도달하면그때만 throughput × radiance를 계산하는 방식BRDF 샘플링 → 경로 따라 ray를 쏨광원에 닿을 때까지 bounce맞으면 그때만 기여 누적 문제점1 SPP에서 광원에 도달하지 못하면 그 샘플이 버려짐노이즈가 심하고 수렴이 느림NEE (Next Event Estimation) 추가..

pt - 7. svgf 필터 추가

SVGF 기법을 Path Tracing 렌더러에 단계적으로 도입 중이다.현재는 초기 구현 단계로, 카메라 정지 상태에서의 샘플 누적 및 A-Trous 필터 기반의 분산 가이드 블러링이 구현된 상태다. 현재 구현된 구조 1. 기본 구조G-buffer 구성Normal, Depth, Albedo를 G-buffer에 출력조명 분리직접광(Direct)과 간접광(Indirect)을 분리하여 샘플링각 결과에 대해 Albedo 디모듈레이션 수행 (Radiance / Albedo)2. Temporal Accumulation (단순 방식)이전 프레임의 누적 버퍼가 존재할 경우, 현재 프레임과 8:2 비율로 선형 보간하여 누적현재는 카메라 이동 시 모든 히스토리 삭제 (정확한 모션 벡터 기반 일치는 미도입 상태)3. Va..

pt - 6. 푸른빛 해결, 안티 엘리어싱, 러시안룰렛 추가

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

pt - 5. 광원 정규화, bloom 적용, NEE 적용 중

1. 광원 정상적인 정규화 초기에는 Blackbody 스펙트럼을 RGB로 변환할 때,CIE XYZ 변환 과정에서 Y 성분을 1로 고정하는 임의의 정규화 방식을 사용했었는데하지만 이 방식은 색온도에 따른 고유한 색감을 제대로 반영하지 못해,렌더링 결과에서 색 표현이 부정확하게 왜곡되는 문제가 발생했었다. 이를 해결하기 위해, Physically Based Rendering에서 소개하는 방식대로Planck 분포의 λ_peak 지점에서의 복사휘도를 기준으로 전체 스펙트럼을 정규화하는 절차를 적용했다.그 결과, CIE XYZ 변환을 통해 얻어진 RGB 색상과 밝기는레퍼런스 이미지와 비교했을 때 색감과 세기 모두에서 일관된 결과를 보여주었다. 즉, 절대 복사량을 직접 사용하는 것이 아니라,온도 기반으로 색상을 정..

pt - 4. 문제 해결 + blackbody 관련 정리

.pbrt 파일내 blackbody L로 지정된 광원에서파서에서 파싱된 결과가 조단위 이상으로 매우 크게 출력 됐었다.[bathroom.pbrt]AttributeBegin AreaLightSource "diffuse" "blackbody L" [6500 100 ] #"color L" [2500 2500 2500] Shape "plymesh" "string filename" "geometry/mesh_00062.ply" AttributeEnd[파싱 결과] 4400002063400960.0 4162397761699840.0 4331947501289472.0 초기에는 해당 값을 파서의 잘못된 계산, 보정치가 잘못 들어간 줄 알고 수치 보정을 적용했었다.float Y_norm = xyz[1];if (..

pt - 3. rendering equation 개념 정리 + 현재 문제들

모든 렌더링은 이 렌더링 이퀘이션을 푸는 것으로 시작된다.수식을 보면, 한지점에서 다른 지점으로 가는 빛의 총 양은 자발광과 다른곳에서 들어온 반사광의 총합으로 구성된다.path tracing 역시 이 렌더링 이퀘이션을 자신만의 방법으로 풀어낸 것 렌더링 이퀘이션은 적분 항 안에반사광이 다시 렌더링 이퀘이션을 참조하고 있고즉 순환하는 적분식 구조를 가지며, 이를 해석적으로 직접 풀어내는 것은 불가능하다.이 렌더링 이퀘이션은 뉴만 시리즈로 근사할 수 있는데적분식을 K로 퉁쳐서 보면 식을 간단히 표현하면 빛의 총합은 무한히 반복되는 적분 항들의 합으로 표현된다.이를 통해 한 점에서 다른 점으로 가는 빛의 총량을 무한 경로의 합으로 볼 수 있고이 때 path tracing을 제안한 Kajiya은 모든 경로를 ..