Computer Graphics/Project

주차 정리 250410 ~ 250415

surkim 2025. 4. 15. 14:17

이번 주는 RT reflection 기능 도입에 중점을 두고 전체 파이프라인을 구성하고 실험을 진행했습니다.

 

우선 저번 주 주차정리 때의 마지막 결과물 입니다.

저번주는 실험하기위한 전체적인 파이프라인을 구현하였습니다. (shadow - gbuffer - lighting)

 

0410

피드백을 받고 유명한 씬 (Sponza) 을 받아왔습니다.

 

씬을 로드하니 고쳐야할 문제점이 보였습니다.

 - 텍스쳐 메모리 문제

 - 그림자 문제

 - decal 문제

decal을 제외한 각 문제점들은 프로젝트 기간 내에 해결할 예정입니다.

 

0411

레이를 쏘기위한 사전 작업을 했습니다.

 - BLAS, TLAS 구현

 - 레이를 쏘기위한 vulkan 확장 설정

 

이 시점부터 RenderDoc에서 RT 파이프라인이 제대로 캡처되지 않으면서,
실질적인 디버깅이 어려워졌습니다.
이를 대체하기 위해 UI 기반의 profiler를 직접 제작하게 되었습니다.

디버깅이 더 힘들어지면 나중에는 레이 트레이싱을 지원하는 디버거를 찾을 예정입니다.

 

 

레이를 카메라에 쏴서 히트되는 것을 확인했습니다.

맞은 부분은 빨간색 안맞은 부분은 검은색입니다.

 

Ray Tracing을 vulkan에 도입할 때 어떻게 했는지에 대해서 정리했습니다.

https://surkim.tistory.com/118

https://surkim.tistory.com/119

https://surkim.tistory.com/120

 

~0414

 

디버깅을 위해 profiler 창을 만들었습니다.

만들어지는 이미지들을 볼 수 있게 하였고

bench mark 버튼을 만들어 10초간 프레임 수를 측정하도록 만들었습니다.

+

레이를 쏴서 맞는 부분의 머테리얼 정보를 받아오게끔 설정했습니다.

 

 

G-buffer에서 얻은 world position과 normal을 이용해 반사 레이 방향을 계산하고,
해당 레이를 쏴서 히트된 삼각형의 Albedo 값을 추출,
이를 Light Pass에 적용하는 방식의 1-bounce reflection을 구현했습니다.

 

~ 현재

 

현재 만들어 놓은 rt reflection의 품질 개선을 위해 노력중 입니다.

임시로 ui를 만들어

1-bounce, 2-bounce, 1-bounce random 1-sample, 1-bounce random 4-sample

을 비교해 보았습니다.

 

현재 roughness기반으로 랜덤 샘플링하는 과정에서

반사 방향이 치우쳐져 보이는 현상을 발견했는데

 

임시로 가져온 난수 함수가 주 원인으로 생각됩니다.

float hash1(vec2 p) {
    p = fract(p * vec2(123.34, 345.45));
    p += dot(p, p + 34.345);
    return fract(p.x * p.y);
}

vec3 rand = normalize(vec3(
    hash1(seed),
    hash1(seed + 0.13),
    hash1(seed + 0.37)
));

...
float spread = pow(roughness, 2.0);
vec3 sampleDir = normalize(mix(perfectReflect, rand, spread));
...

 

현재 방식은 정반사 방향과 임의 난수 벡터를 보간하여 반사 방향을 만들고 있는데
정반사 벡터 기준으로 반구형태안에서 난수벡터를 만들어 샘플링을 하면 결과가 더 안정적으로 나올 것으로 예상됩니다. (진행 중)

 

 

주차별 계획입니다.

 

  • 1주차: 기본 렌더링 파이프라인 구성 (Shadow → G-buffer → Lighting)
  • 2~3주차: Ray Tracing Reflection 구현
    • SSR도 함께 구현해 비교할 예정입니다.
  • 4~5주차: Ray Tracing 기반 Global Illumination(RT GI) 구현
    • SSAO, SSGI구현과 함께 비교할 예정입니다.
  • 6~8주차: 전체 렌더링 파이프라인 성능 개선 및 최적화 작업 진행