[Graphics] Path Tracing Engine 개발 일지1 - Path Tracing이란?

Jooh·2020년 4월 11일
0
post-thumbnail

Path Tracing이란?

https://en.wikipedia.org/wiki/Path_tracing

컴퓨터 그래픽 렌더링 기법 중 Ray Tracing의 기법 중 하나입니다.

Ray Tracing을 간단히 정의하자면 현실에서 빛이 물체에 반사되어 눈/카메라에 보여지는 방식을 따라한 알고리즘으로 사실적인 렌더링 방식이며 반사, 굴절에 대한 효과를 표현하는데에 탁월합니다. 모방의 정도에 따라 이름이 나뉘며, Path Tracing은 그 중 가장 충실히 모방한 방법이고 이 때문에 계산해야할 것이 많습니다.

일반적인 RayTracing은 기존의 렌더링 방식에서 굴절, 반사의 경우에만 추가적으로 Ray를 쏴서 추가연산을 하고, 그 외의 물체의 경우 기존에 사용하던 Shading 방식을 통해 추가적인 Ray를 추적하지 않고, 바로 색을 계산합니다. RTX 엔진에서 반사효과를 강조하는 이유입니다. 기존방식의 반사들은 heuristic한 방식으로 반사효과를 표현했기 때문에, 이를 개선한 부분은 크게 현실적으로 보입니다.

그에 반해 Path Tracing은 반사, 굴절이 없는 물체에도 즉, 모든 물체에 추가적인 Ray를 추적해서 엄청난 사실성을 자랑합니다. 실제로 모든 물체는 빛을 반사, 흡수하고, 여러 번 반사된 빛이 최종적으로 눈에 들어와서 색이 인지되는 것 인데 이를 최대한 따라한 것이지요. 이렇게 현실의 빛 효과를 완벽히 따라해야 나타날 수 있는 효과들 - soft shadows, depth of field, motion blur, caustics, ambient occlusion, and indirect lighting 등을 표현할 수 있게 되는 것입니다.
하지만 그만큼 연산량도 엄청납니다. 반사, 굴절 효과만 표현하려고 달려든 RTX도 연산량이 엄청나니 Path Tracing은 말할 것도 없죠.


Path Tracing으로 만든 이미지를 간단히 보자면

( Tracing 엔진으로 4시간 넘게 렌더링한 이미지 입니다 )

Soft Shadow : 경계가 blur한 그림자.

Depth of field : 피사도 심계. 어느 한 곳에 눈/카메라를 집중시키면 그 앞이나 그 뒤에 있는 물체는 초점을 잃게 되는 현상.

Motion Blur : 움직이는 물체가 blur하게 보이는 현상.

caustics : 굴절되는 물체에서 빛이 모이는 부분이 심하게 밝게 보이는 현상.

indirect lighting : 비간접적 라이팅. 물체에 의해서 반사된 빛이 다른 물체에도 영향을 주기 때문에 직접적으로 빛이 닿지 않는 곳에도 어느정도의 밝기가 존재하는 현상.

ambient occlusion : indirect lighting 현상 때문에 일어나는 현상으로, 가령 터널의 겉 부분은 어느정도 밝지만 안 쪽에 부분은 완전히 어두워져 버리는 현상.

이 글의 목적

이 Path Tracing 알고리즘을 공부하면서, Graphics API 없이 C++로 엔진을 구현해보았는데, 나름 배운 것도 많고 글을 쓰면서 내용을 정리하고자 포스팅을 하려고 합니다. 렌더링은 CPU로만 하였고 추후에 시간이 된다면 GPU를 사용할 수 있게 해보려고 합니다.

블로그 이전 & 소스코드

https://jooh3444.tistory.com/3

https://github.com/Jooh34/Path-Tracing

profile
게임 개발자

4개의 댓글

comment-user-thumbnail
2021년 1월 18일

패스트레이싱이랑 레이트레이싱의 차이점이 궁금해서 여기저기 돌아다녔넌데 이렇게 이해 쏙쏙 들어오게 정리 잘 해주셔서 감사합니다!!:)

1개의 답글
comment-user-thumbnail
2021년 11월 16일

좋은 글 정말 감사합니다!
혹시 참고하신 오픈 소스 있으신가요?

1개의 답글