Search

Ray Tracing in One Weekend

Created
2021/03/30
tag
C++
Graphics
RT
Ray Tracing

1. Before the Course

All materials are from the Ray Tracing in One Weekend by Peter Shirley. The course can be found at the link directly below.
The course is originally from the book series of RAY TRACING IN ONE WEEKEND, and the information of those can be found at the link directly below.
Also, the 2 things up above are following by the RayTracing/raytracing.github.io which is given the link below.
Therefore, all copyrights of this material belong to the original author.

2. Overview

λ³Έ κ°•μ˜λ₯Ό μ§„ν–‰ν•˜λŠ” Peter Shirley (μ΄ν•˜ ν”Όν„° ꡐ수)λŠ” λͺ‡ 년에 걸쳐 λ§Žμ€ Graphics μˆ˜μ—…μ„ ν•΄μ™”λ‹€. ν•΄λ‹Ή Graphics μˆ˜μ—…μ„ ν•  λ•ŒλŠ” μ’…μ’… RT (Ray Tracing) λ₯Ό μ΄μš©ν•˜μ—¬ μ§„ν–‰ν–ˆλ‹€κ³  ν•˜λŠ”λ°, RTλ₯Ό μ΄μš©ν•œ μ΄μœ λŠ” 비둝 κ·Έλž˜ν”½ κ΅¬ν˜„μ„ μœ„ν•΄ μš”κ΅¬λ˜λŠ” λͺ¨λ“  μ½”λ“œλ“€μ„ μž‘μ„±ν•΄μ•Ό ν•˜μ§€λ§Œ 멋진 Imageλ₯Ό API ν•˜λ‚˜ 없이 κ΅¬ν˜„ν•  수 있기 λ•Œλ¬Έμ΄λΌκ³  ν•œλ‹€. ν”Όν„° κ΅μˆ˜λŠ” μˆ˜κ°•μƒλ“€μ΄ μ΅œλŒ€ν•œ 빨리 멋진 ν”„λ‘œκ·Έλž˜λ°μ„ ν•  수 μžˆλ„λ‘ κ°•μ˜ 자료λ₯Ό RT μ‚¬μš©λ²•μ— 맞게 μ‘°μ •ν–ˆλ‹€. 비둝 κ°•μ˜ μžλ£Œμ— 기재된 것듀이 μ™„μ „ν•œ κΈ°λŠ₯을 κ°–μΆ˜ RTκ°€ λ˜μ§€λŠ” μ•Šκ² μ§€λ§Œ, μ—¬λŸ¬ μ˜ν™”μ—μ„œ RTκ°€ μ£Όμš”ν•  수 있게 ν•΄μ€¬λ˜ 간접적인 μ‘°λͺ… μ •λ„λŠ” 될 수 μžˆλ‹€κ³  ν•œλ‹€. κ°•μ˜ μžλ£Œμ— 주어진 μˆœμ„œλŒ€λ‘œ 단계별 ν•™μŠ΅μ„ ν•΄λ³΄μž. 만일 더 κ΄‘λ²”μœ„ν•œ κΈ°λŠ₯을 κ°–μΆ˜ RT에 λŒ€ν•΄μ„œ μΆ”κ΅¬ν•˜κ³  κ°ˆλ§ν•œλ‹€λ©΄, 단계별 ν•™μŠ΅μ΄ μ•žμ„  λͺ©μ μ— 맞게 μš°λ¦¬κ°€ λ§Œλ“œλŠ” RT에 λŒ€ν•œ ꡬ쑰λ₯Ό ν™•μž₯μ‹œν‚€λŠ”λ° 도움이 될 것이닀.
λˆ„κ΅°κ°€ RT라고 λ§ν•œλ‹€λ©΄ μ΄λŠ” ꡉμž₯히 포괄적인 의미λ₯Ό κ°–λŠ”λ‹€. κ°•μ˜μ—μ„œ μ§„ν–‰λ˜λŠ” RTλŠ” μƒλ‹Ήνžˆ 일반적으둜 μ·¨κΈ‰λ˜λŠ” 기술적인 경둜 좔적을 μ˜λ―Έν•œλ‹€κ³  보면 λœλ‹€. 컴퓨터가 μ—°μ‚°ν•˜κ²Œλ˜λŠ” μ½”λ“œλ“€μ€ ꡉμž₯히 κ°„λ‹¨ν•˜κ²Œ λ‚˜νƒ€λ‚  것이고, μ•„λ§ˆ 이 κ°•μ˜λ₯Ό 톡해 직접 κ΅¬ν˜„ν•˜λŠ” Imageλ“€λ‘œμ„±μ·¨κ°μ„ λŠλ‚„ 수 μžˆμ„ 것이닀.
κ°•μ˜λ₯Ό μ§„ν–‰ν•˜λ‹€λ³΄λ©΄ ν”Όν„° ꡐ수의 RTλ₯Ό μ‚¬μš©ν•˜λŠ” 방법과 디버깅 νŒμ„ λ³Ό 수 μžˆλ‹€. 결과적으둜 κ°•μ˜λ₯Ό 마무리 ν–ˆμ„ λ•ŒλŠ” 멋진 Imageλ₯Ό λ§Œλ“€μ–΄λ‚΄λŠ” RTλ₯Ό κ°€μ§ˆ 수 μžˆλ‹€. ν”Όν„° ꡐ수의 κ°•μ˜λŠ” C++을 μ΄μš©ν•˜μ—¬ μ§„ν–‰λœλ‹€. 만일 C++이 μ£Όλ ₯ μ–Έμ–΄κ°€ μ•„λ‹ˆλ”λΌλ„ κ°•μ˜λ₯Ό μ§„ν–‰ν•˜λŠ”λ°λŠ” 큰 λ¬Έμ œλŠ” λ˜μ§€ μ•ŠλŠ”λ‹€κ³  ν•œλ‹€. ν”Όν„° κ΅μˆ˜κ°€ Graphicsμ—μ„œ C++을 μ£Όλ ₯으둜 μ‚¬μš©ν•˜λŠ”λ°λŠ” μ—¬λŸ¬ μ΄μœ κ°€ μžˆλ‹€κ³  ν•˜λŠ”λ° κ·Έ μ΄μœ λŠ” λΉ λ₯΄κ³  이식성이 μ’‹κ³  λŒ€λΆ€λΆ„μ˜ κ²Œμž„ ν˜Ήμ€ μ˜ν™”μ˜ Renderer듀은 C++둜 μž‘μ„±λ˜μ–΄ 있기 λ•Œλ¬Έμ΄λΌκ³  ν•œλ‹€. κ°•μ˜λ₯Ό C++둜 μ§„ν–‰ν•˜λŠ”λ° μžˆμ–΄μ„œ λ¬Έμ œκ°€ μ—†λŠ” μ΄μœ λŠ” C++의 λ§Žμ€ Modern νŠΉμ„±λ“€μ„ μ§€μ–‘ν–ˆκΈ° λ•Œλ¬Έμ΄λΌκ³  λ³Ό 수 μžˆλ‹€. ν•˜μ§€λ§Œ RT에 μžˆμ–΄μ„œ 상속과 μ—°μ‚°μž μž¬μ •μ˜λŠ” 맀우 μœ μš©ν•˜κΈ° λ•Œλ¬Έμ— 이 점을 염두에 두면 μ’‹λ‹€. κ°•μ˜ λ‚΄μ—μ„œλŠ” vec3 Classμ—μ„œ μ œκ³΅ν•˜λŠ” λͺ‡ μ—°μ‚°μžλ₯Ό μ œν•˜κ³ λŠ” λ§Žμ€ 것듀을 보여쀄 것이고, 비둝 직접적인 κ΅¬ν˜„μ„ ν•˜λŠ” 것을 μ„ ν˜Έν•˜μ§€λ§Œ 이용 κ°€λŠ₯ν•œ μ½”λ“œλ“€μ΄ μžˆλ‹€λ©΄ 이λ₯Ό μ΄μš©ν•œλ‹€κ³  ν•˜λ‹ˆ μ°Έκ³ ν•˜μž.
ν”Όν„° κ΅μˆ˜κ°€ μž‘μ„±ν•œ μ½”λ“œκ°€ 보고 μ‹Άλ‹€λ©΄ μœ„μ— 제곡된 GitHubμ—μ„œ μ°Ύμ•„λ³Ό 수 μžˆλ‹€.
이 κ°•μ˜μ—μ„œλŠ” Vector의 기본적인 μΉœλ°€ν•¨ (Dot Product와 Vector Additionκ³Ό 같은)을 κ°€μ •ν•˜κ³  μ§„ν–‰λœλ‹€. 만일 이에 λŒ€ν•΄μ„œ 잘 λͺ¨λ₯Έλ‹€λ©΄ Marschner ν˜Ήμ€ ν”Όν„° ꡐ수의 책을 ν†΅ν•΄μ„œ ν•™μŠ΅ν•˜κ³  와도 μ’‹κ³  Foley, Van Dam, McGuire λ“±μ˜ Graphics Codexλ₯Ό μ°Έκ³ ν•˜μž.
만일 κ°•μ˜ 진행에 μžˆμ–΄μ„œ λ¬Έμ œκ°€ λ°œμƒν•˜κ±°λ‚˜ λˆ„κ΅°κ°€μ—κ²Œ 보여주고 싢은 멋진 μž‘μ—…μ„ ν•΄λƒˆλ‹€λ©΄ ptrshrl@gmail.com 둜 메일을 보내면 λœλ‹€κ³  ν•œλ‹€.
κ°•μ˜μ— κ΄€λ ¨λœ μ•„λž˜μ˜ λΈ”λ‘œκ·Έμ— 좔가적인 μ„œμ κ³Ό 자료 링크λ₯Ό κΈ°μž¬ν•˜μ˜€λ‹€κ³  ν•œλ‹€.

3. Course

Search
κ°•μ˜ 진행에 원 GitHub의 μ½”λ“œλŒ€λ‘œ 진행이 잘 λ˜μ§€ μ•ŠλŠ” 경우, μ•„λž˜ GitHub의 μ½”λ“œλ₯Ό μ°Έκ³ ν•˜μž.