<aside> ⁉️ 궁금한 내용, 오타, 수정사항, 문의사항은 아래 깃허브 이슈 혹은 노션 블록 댓글로 달아주시면 바로 확인해드립니다! 도움이 되셨다면 아래 링크를 통해 🌟 한번 꾹 눌러주세요 ‼️

</aside>

GaepoMorningEagles/mini_raytracing_in_c


0. overview

0.1. 만든이들

kilee(이기훈) / hyeonkim(김형태) / mijeong(정민재)

0.2. 왜만들었는지

개발자의 길로 들어온지 반년차인 우리에게 ray tracing이라는 생소한 기술을 적용한 렌더링 프로그램을 만들어보는 실습은 짧은 개발자 인생에서 겪게된 가장 높은 벽이였다. 특히 우리가 실습을 할 당시 기준으로 한글로 작성된 ray tracing 실습 레퍼런스가 전무했었고, ray tracing 의 수학의 정석과, 개념원리 와 같은 두개의 사이트(ScratchpixelsRaytracing in one weekend) 는 모두 c++을 통해 실습이 구성되어있어, 영알못에 다룰줄 아는 언어라곤 c밖에 없고 그마저도 비루한 수준의 실력인 우리에게는 시작부터 좌절의 연속이였다.

하지만 최종적으로 우리가 만든 프로그램으로 아래와 같은 멋진 이미지를 생성할 수 있었다

https://camo.githubusercontent.com/021b6c2665c33f15c80af7352bb1952e27517e425f76949487b50b366a7bcd20/68747470733a2f2f6c696b696c65652e6769746875622e696f2f6173736574732f696d672f323032312d30312d30382d52617974726163696e675f4330302f636f6d62696e6174696f6e2e706e67

앞서 언급한 우리가 실습을 진행하며 겪었던 좌절들을, 이 실습 교재의 독자들이 조금은 수월하게 넘어갈 수 있길 바라는 마음에서 이 교재를 작성하게 되었다.

0.3. 레이트레이싱이란?

https://camo.githubusercontent.com/1f55d340aba1a16b5b0e223ad689c7482edfed7336fc5e13806fb3248b333033/68747470733a2f2f65332e333635646d2e636f6d2f32302f30312f3230343878313135322f736b796e6577732d6176617461722d322d636f6e636570742d6172745f343838363730302e6a70673f6279706173732d736572766963652d776f726b6572263230323030313039303732373333

이 글을 보는 여러분은 아마도 영화 아바타를 봤을 것이다. 아바타를 보지 않았다면 토이스토리라도. 이러한 사실적인 이미지를 만드는 과정을 렌더링이라고 한다. 렌더링 기법에는 다양한 기술들이 있는데, 우리의 교재 이름인 ray-tracing도 그러한 기술 중 하나이다. 레이트레이싱 기술 자체에 대한 설명은 좋은 레퍼런스가 많으니 여기서는 생략한다.

0.4. 뭘만들었는지

높은 수준의 레이트레이싱 프로그램을 구현하는데에는 꽤나 방대한 양의 이론적 배경 지식이 요구된다. 하지만 컴퓨터 그래픽스를 처음 접하는 사람들은 (우리가 그랬던 것처럼) 압도적인 양의 배경 지식에 좌절할 수 있다.

레이트레이싱 기술의 골자는 눈으로 들어오는 광선을 역추적하는 방식인데, 사실적인 이미지를 얻기 위해서는 물리법칙의 준수가 가장 중요하다. 그렇기에 상업용 프로그램들에서는 보다 정확한 물리법칙에 기반한 path-tracing 등의 알고리즘을 사용하지만, 교재에서는 입문자들이 레이트레이싱 기술의 핵심을 학습하는 것이 목적이기 때문에 단순하면서도 레이트레이싱의 원리를 쉽게 학습할 수 있는 phong lighting model을 사용한다.

또한 이 교재는 이론 중심의 설명보다는, 점진적인 개발 실습을 통해 단계별로 결과물을 확인할 수 있도록 작성했다.

컴퓨터 그래픽스에 대해 더 자세히 알고 싶다면 아래에 링크를 따라가 보는 것을 추천한다.