Skip to the content.

실시간 광선 추적법 공부 노트 (2022.04.03)

Home

이 노트는 Real-Time Rendering 책을 읽고 한국어로 정리한 책입니다.

실시간 광선 추적법

래스터화와는 다르게 광선 추적법ray tracing은 좀 더 빛의 물리학에 입각한 방법임. 그렇기에 좀 더 현실적인 이미지를 얻을 수 있음.

래스터화와 광선 추적법은 결국 간단하게 보면 이중 for문임. 래스터화는:

for (T in triangles)
    for (P in pixels)
        determine if P is inside T

광선 추적법은:

for (P in pixels)
    for (T in triangles)
        determine if ray through P hits T

결국 알고리듬 자체는 단순함. 하지만 이걸 빠르게 수행하려면 소프트웨어와 하드웨어 둘 다 좀 노력해야함. 광선 추적기의 중요 기능 중 하나는 바로 공간 자료구조로, 대표적으로 바운딩 볼륨 계층(BVH)이 있음. 이걸 사용하면 광선 추적법 알고리듬이 O(log n)으로 축소가 됨(n은 장면 안의 삼각형의 개수). 근데 GPU가 어클루전 컬링 하드웨어가 있고, 렌더링 엔진에서는 프러스텀 컬링, 디퍼드 셰이딩 등의 기술을 사용하기에 사실상 래스터화는 O(n)보다 빠르게 돌음. 워낙 다양한 요소들 때문에 래스터화를 O() 표기법으로 표현하는 건 좀 무리가 있음.

래스터화와 광선 추적법의 중요한 차이점이라면, 광선 추적법은 어느 방향이든지 광선을 쏠 수 있다는 것임. 그렇기 때문에 재귀적으로 반사나 굴절을 렌더링해줄 수 있으며, 렌더링 방정식을 완전히 사용해줄 수 있음. 하지만 노이즈라는 단점이 있음. 영역광을 샘플링하거나, 표면이 매끈할 때, 혹은 환경 맵을 사용할 때, 그리고 경로 추적법을 사용할 때 등등의 상황에서 노이즈가 발생하는 편임.

그러므로 실시간 광선 추적법을 대세로 만드려면 결국엔 디노이징과 같은 추가적인 기술을 사용할 수 밖에 없음. 일단 당장은 래스터화와 광선 추적법을 섞어서 사용하는 것이 일반적일 것임. 장기적으로는 하드웨어에 발전에 따라 달라질 것임.

광선 추적법 기초

광선 추적법 셰이딩

래스터화가 더 빠르면 래스터화를 사용하고, 아니라면 광선을 사용

상하위 단계 가속화 구조

일관성

추적할 광선의 특징도 중요함. 일관적인 광선에 더 잘 작동하는 구조(예를 들어 카메라 광선, 그림자, 거울 반사 등)가 있는가 하면, 비일관적이어도 괜찮은, 무작위로 산란되는 광선들(주로 난반사 전역 조명이나 앰비언트 어클루전 방법)도 있음.

광선과 셰이딩 일관성

비일관적인 광선의 경우 보통 표면 위의 한 점에서 밖으로 나가는 방향을 의미하는 반구에서 무작위로 샘플링해야할 때 생성됨. 대표적으로 앰비언트 어클루전과 난반사 전역 조명을 계산할 때 사용함.

디노이징

실무에서는 광선과 셰이딩 일관성을 고려한 렌더링 알고리듬을 적용할 땐 매우 조심해야함. 비일관적인 광선을 써야할 때도 발산을 줄이는 방법에 여러 가지가 있음. 예를 들어 앰비언트 어클루전이나 다른 전역 조명 효과들은 화면 위의 각 픽셀마다 나가는 방향으로의 반구에서 샘플링을 해야함. 이게 비싸다보니 일반적으로는 픽셀 당 샘플 몇 개만 쏘고 최종 결과에는 양방향 필터를 걸어줌. 이러면 픽셀마다 샘플링 방향이 다르니 비일관적임. 더 나은 방법으로는 적은 수의 픽셀 간격마다 같은 방향을 사용하여 추적을 정렬시켜 같은 시간에 비슷한 방향을 처리하도록 해주는 것이 있음.

전역 조명을 디노이징 해주는 여러 방법도 존재함. 서로 다른 효과마다 해당 효과에 특화된 필터를 사용해주는 것도 가능함. 이 경우 Frostbite과 SEED의 연구원들이 사용하는 방법임.

텍스처 필터링

예상

디노이징 알고리듬 덕에 광선 추적법이 좀 더 많은 것들을 해낼 수 있게 됨. 그 중 하나가 스크린 스페이스 반사를 사용하지 않고 광선 추적법으로 모든 반사를 처리하는 것 등이 있음.

다른 것으로는 서브서피스 스캐터링이 있음. 새 API를 통해 메시 내에서 산란광을 추적하여 텍스처 공간에서 여러 방향으로 들어오는 샘플들에 대해 시간적으로 값을 누적시킨 뒤, 디노이징 알고리듬을 적용시키는 등으로 적용함. 전역적으로 보면 그림자, 간접광, 앰비언트 어클루전 등 전부 광선 추적법의 영향을 받을 것임.

Participating media도 게임 같은 실시간 어플리케이션에 중요한 요소가 되고 있음. 복셀이나 레이 마칭법을 벗어난 방법도 한 번 고려해볼만함. 중요도 샘플링을 할 때 Woodcock 트래킹을 써주고 디노이징까지 혼용한 광선 추적법과 같은 새로운 방법도 나올 수 있음.

추가 문헌 및 자료