Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Typing diary

Raytracing 본문

그래픽스, 게임 수학

Raytracing

Jcon 2022. 8. 21. 14:59

각각의 픽셀에 대응하는 광선의 경로를 역추적 하여 렌더링하는 기법이다.

실제 사람의 눈으로 물체를 인식하는 방법과 유사하기 때문에 사실적인 렌더링이 가능하지만 연산량이 매우 많다.

때문에 실시간 렌더링이 아닌 영화 CG같은 곳에 많이 쓰였지만, 엔비디아의 RTX 그래픽 카드가 RT코어와 머신러닝을 이용한 최적화를 통해 실시간 레이트레이싱을 지원하면서 게임에도 적용할 수 있게 되었다.

다음 그림 같이 카메라로 부터 광선을 발사하여 광선이 물체와 부딪히면 광선과 대응하는 픽셀에 RGB값을 변경하게 된다.

빛을 광원이 아닌 카메라에서 부터 역추적 하는 이유는 광원에서 나온 빛 중 일부만 카메라에 비치게 되는데 카메라에 비치지 않은 빛은 렌더링 결과에 영향을 미치지 못한다. 때문에 불필요한 연산을 줄이기 위해 카메라로 부터 광선을 역추적 하는 것이다.

광선 위에 임의로 점 D를 잡았을때, 점 P 는

$P=C+t*D$P=C+t*D

로 표현이 가능하다.

t에 관한 방정식을 세워 식에 만족하는 t값을 알아내게 되면 광선과 물제가 부딪히는 지점인 점 P의 위치를 알 수 있다.

다음과 같은 과정으로 t에 관한 2차 방정식을 세울 수 있고 근의 공식으로 t의 값을 구할 수 있다.

판별식 d = b^2-4ac 를 이용해

충돌 여부를 미리 체크 하고

해가 2개 나온 경우 값이 더 적은 해의 값을 사용해야 하기 때문에

$x\ =\ \frac{-b-\sqrt{b^2-4ac}}{2a}$x = bb24ac2a

다음 식을 사용하면 된다.

이렇게 충돌 지점을 구하고 반사된 지점의 광선을 재귀적으로 추적하여 최종적으로 화면에 출력할 RGB값을 얻게 된다.

Shadertoy에 적용한 결과이다.

레스터라이즈 기법에서는 구현하기 힘든 반사, 간접광 등이 어렵지 않게 렌더링 되는 것을 볼 수 있다.

https://www.shadertoy.com/view/Ntf3Wn

'그래픽스, 게임 수학' 카테고리의 다른 글

Backface Culling  (0) 2022.08.21
행렬식(determinant)  (0) 2022.08.21
LU 분해  (0) 2022.08.21
확장 행렬과 가우스-조던 소거법  (0) 2022.08.21
벡터 방정식  (0) 2022.08.21