Company
교육 철학
📖

1. Overview (개요)

1. Overview

저는 수년 동안 많은 그래픽 수업을 가르쳐 왔습니다. 종종 레이 트레이싱으로 수업을 진행하는데, 모든 코드를 직접 작성해야 하지만 API 없이도 멋진 이미지를 얻을 수 있기 때문입니다. 이 강의 노트를 각색하여 여러분이 가능한 한 빨리 멋진 프로그램을 만들 수 있도록 안내하겠습니다. 완전한 기능을 갖춘 레이 트레이서는 아니지만, 레이 트레이싱을 영화의 필수 요소로 만든 간접 조명은 포함하고 있습니다. 이 과정을 따르면 여러분의 레이 트레이서 아키텍처를 더 광범위한 시스템으로 확장하기에 좋을 것입니다. 누군가가 "레이 트레이싱"이라고 말할 때 여러 가지 의미를 가질 수 있습니다. 제가 설명할 것은 기술적으로 경로 추적기(path tracer)이며, 상당히 일반적인 것입니다. 코드는 간단하지만(컴퓨터가 일을 하도록 하세요!) 만들 수 있는 이미지에 매우 만족할 것입니다.
저는 제가 하는 순서대로 레이 트레이서를 작성하는 과정을 안내하겠습니다. 몇 가지 디버깅 팁도 함께 제공할 것입니다. 마지막에는 멋진 이미지를 생성하는 레이 트레이서를 갖게 될 것입니다. 주말 안에 완료할 수 있어야 합니다. 더 오래 걸리더라도 걱정하지 마세요. 저는 C++를 주요 언어로 사용하지만, 꼭 그럴 필요는 없습니다. 하지만 C++는 빠르고 이식성이 좋으며 대부분의 프로덕션 영화 및 비디오 게임 렌더러가 C++로 작성되기 때문에 사용하는 것을 추천합니다. C++의 "현대적인 기능" 대부분은 피하지만, 상속과 연산자 오버로딩은 레이 트레이서에 너무 유용해서 포기할 수 없습니다. 저는 온라인으로 코드를 제공하지 않습니다. 하지만 코드는 실제이며 vec3 클래스의 몇 가지 간단한 연산자를 제외한 모든 것을 보여줍니다. 저는 코드를 직접 입력하여 배우는 것을 매우 중요하게 생각합니다. 코드를 사용할 수 있을 때는 사용하지만, 사용할 수 없을 때만 제가 말한 것을 실천합니다. 그러니 묻지 마세요!
제가 마지막 부분을 그대로 남겨둔 이유는 제가 얼마나 180도 태도를 바꿨는지가 우스워서입니다. 여러 독자들이 미묘한 오류로 어려움을 겪었는데, 코드를 비교했을 때 도움이 되었습니다. 그러니 코드를 직접 입력하시되, 각 책의 완성된 소스 코드는 GitHub의 RayTracing 프로젝트에서 찾을 수 있습니다.
이 책들의 구현 코드에 대한 참고 사항 — 포함된 코드에 대한 우리의 철학은 다음 목표를 우선시합니다:
코드는 책에서 다루는 개념을 구현해야 합니다.
우리는 C++를 사용하지만, 가능한 한 단순하게 사용합니다. 우리의 프로그래밍 스타일은 매우 C와 유사하지만, 코드를 더 쉽게 사용하거나 이해할 수 있게 만드는 경우 현대적인 기능을 활용합니다.
우리의 코딩 스타일은 연속성을 위해 가능한 한 원본 책에서 확립된 스타일을 따릅니다.
줄 길이는 코드베이스와 책의 코드 목록 간의 일관성을 유지하기 위해 줄당 96자로 유지됩니다.
따라서 코드는 기본 구현을 제공하며, 독자가 즐길 수 있는 수많은 개선 사항이 남아 있습니다. 코드를 최적화하고 현대화할 수 있는 방법은 무궁무진합니다. 우리는 단순한 해결책을 우선시합니다.
우리는 벡터에 대한 약간의 친숙함(내적과 벡터 덧셈 같은)을 가정합니다. 만약 모르신다면, 조금 복습하세요. 복습이 필요하거나 처음 배우는 경우, Morgan McGuire의 온라인 *Graphics Codex*, Steve Marschner와 Peter Shirley의 Fundamentals of Computer Graphics, 또는 J.D. Foley와 Andy Van Dam의 Computer Graphics: Principles and Practice를 참조하세요.
이 프로젝트, GitHub의 저장소, 디렉토리 구조, 빌드 및 실행, 수정 및 기여 방법에 대한 정보는 프로젝트 README 파일을 참조하세요.
추가 프로젝트 관련 리소스는 Further Reading 위키 페이지를 참조하세요.
이 책들은 브라우저에서 직접 인쇄할 수 있도록 포맷되었습니다. 또한 각 릴리스의 "Assets" 섹션에 각 책의 PDF도 포함되어 있습니다.
우리와 소통하고 싶으시다면, 다음 이메일로 연락 주시기 바랍니다:
Peter Shirley, ptrshrl@gmail.com
Steve Hollasch, steve@hollasch.net
Trevor David Black, trevordblack@trevord.black
마지막으로, 구현에 문제가 발생하거나 일반적인 질문이 있거나 자신의 아이디어나 작업을 공유하고 싶으시다면, GitHub 프로젝트의 GitHub Discussions 포럼을 참조하세요.
이 프로젝트에 도움을 주신 모든 분들께 감사드립니다. 이 책 마지막의 감사의 말 섹션에서 그들을 찾을 수 있습니다.
이제 시작해봅시다!
얌얌코딩에서는 이를 최신 병렬 프로그래밍이 가능한 CUDA와 연결시켜서 수업을 진행할 것입니다. 또한 실시간으로 결과를 확인할 수 있는 기능도 추가하여, 여러분이 코드 변경 사항을 즉시 시각적으로 확인할 수 있도록 할 것입니다.얌얌코딩에서는 이를 최신 병렬 프로그래밍이 가능한 CUDA와 연결시켜서 수업을 진행할 것입니다. 또한 실시간으로 결과를 확인할 수 있는 기능도 추가하여, 여러분이 코드 변경 사항을 즉시 시각적으로 확인할 수 있도록 할 것입니다.