레이블이 Computer Graphics인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Computer Graphics인 게시물을 표시합니다. 모든 게시물 표시

2013년 7월 8일 월요일

3D Basic Lesson 1-2. 간단히 설명하는 레이트레이싱




몇 주 전 Scratchapixel쪽에 강좌를 한글로 번역해도 좋냐는 메일을 보냈고, 대략 다음과 같은 내용의 답변을 받았다.


스크래치는 앞으로 여러 언어로 서비스할 계획에 있지만, 현재로써는 예산의 한계때문에 그러지 못하고 있습니다. 스크래치가 다국어 서비스를 시작하기 전까지는 번역본을 블로그에 게재하셔도 좋습니다.

막상 허락은 받아 놨는데 내가 이걸 번역할 근성이 될 지... 일단은 일주일에 한 챕터씩 하는걸로. 되는데까지는 해보자.

-----


다음은 Scratchapixel 의 글 중 [3D Basic Lessons - Lesson 1 : Writing a Simple Raytracer] 중 '2. Raytracing Algorithm in a Nutshell' 을 번역한 것입니다.

원문 : http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-1-writing-a-simple-raytracer/raytracing-algorithm-in-a-nutshell/


이전 강좌 : 3D Basic Lesson 1-1. 어떻게 동작하나요?

Lesson 1-2. 간단히 설명하는 레이트레이싱 


우리가 왜 물체를 볼 수 있는지는 Ibn al-Haytham이 설명했습니다. 그의 발견에는 두 가지 흥미로운 점이 있습니다. 첫째로 우리는 빛이 없이는 아무것도 볼 수 없고, 둘재로 주위에 물체가 없으면 우리는 빛을 볼 수 없습니다. 우리가 은하계 사이를 여행한다면 그런 일이 평범하게 일어나곤 하겠지요. 만일 우리 주위에 어떠한 물질도 존재하지 않는다면 우리는 광자들이 그 공간을 돌아다니고 있다 하더라도 암흑 외에는 그 어떤것도 볼 수 없게 됩니다.

정방향 추적Forward Tracing


그림 4: 광원에서 나온 무수히 많은 광자들이 초록색 구를 때리지만, 단 하나만이 눈의 표면에 닿는다.

컴퓨터로 생성한 이미지에서 빛과 물체 사이의 상호작용을 시뮬레이션하고 싶다면 우리가 알아야 할 것이 하나 더 있습니다. 물체에 의해 반사된 광선의 수에 비해,  한정된 몇 개의 광선만이 눈의 표면에 들어온다는 것입니다. 여기 그 예가 있습니다. 한번에 한개의 광자만을 발산하는 광원이 있다고 상상해봅시다. 광원에서 나온 광자는 어떤 물체에 닿을 때까지 직선으로 나아갈 것입니다. 광자의 흡수를 고려하지 않는다면, 물체에 닿은 광자가 어떤 임의의 방향으로 반사될 것이라고 생각할 수 있습니다. 반사된 광자가 우리의 눈 표면에 도달하면 우리는 광자가 반사되었던 바로 그 지점을 "보는" 것입니다.



 독자로부터의 질문: 위에서 "빛이 비춰지는 영역의 각 점이나 물체가 광선을 모든 방향으로 방사 (반사) 한다." 고 하셨는데요, 이건 "어떤 임의의 방향" 이라는 말과는 배치되는 것 아닌가요?
 답변: 왜 빛이 모든 방향으로 반사되는지 설명하는 것은 이번 레슨의 주제와는 조금 맞지 않는 것 같습니다 (완전한 설명을 위해 빛-물체간의 상호작용에 관한 레슨을 보세요). 그래도 짧게 답변드리자면, 맞습니다. 또한 아닙니다. 물론 실제 세계에서 표면에 반사된 광자는 위상기하학과 광자가 입사되는 방향에 따라 정의된 어떤 특정한 방향으로 나아갑니다. 우리 눈에 난반사 물체의 표면은 부드럽게 보이는데, 현미경으로 보면 그 미세 구조는 매우 복잡하고, 전혀 부드럽지 않습니다. 왼쪽의 사진은  다른 배율들로 촬영한 종이의 표면입니다. 광자들은 너무나 작아서 우리 눈에  보이지 않는 이 복잡한 구조에 따라 반사됩니다. 광선의 다발이 이 난반사 물체의 표면을 비추면, 광자들이 복잡한 구조의 서로 다른 부분들에 닿아 여러 방향으로 반사되는 것입니다. 그 방향이 너무나 많기 때문에 우리가 "가능한 모든 방향" 이라고 한 것입니다. 이러한 이유로 광자들과  이러한 미시 구조와의 상호작용을 시뮬레이션하기 위해 광선들을 임의의 방향으로 균등하게 반사시켜도 실제와 크게 다르지 않게 됩니다.
가끔 거시적 크기 (눈에 보이는 정도의 크기) 에서 이러한 구조를 가지고 있는 물체는 빛을 특정한 방향으로 반사하기도 합니다. 이것은 비등방성anisotropic 반사라고 하며 빛-물체간 상호작용을 다룬 레슨에서 자세히 다뤄질 것입니다. 이러한 거시적 구조는 나비의 날개에서 볼 수 있는 무지개 빛을 만드는 원인이 되기도 합니다. 




이러한 현상을 컴퓨터 그래픽스의 관점으로 바라봅시다. 먼저, 눈을 픽셀들로 구성된 이미지 평면으로 대체할 수 있습니다. 이 경우에는 발산된 광자들이 이미지 평면 위의 픽셀들 중 하나에 닿으면서 그 지점의 밝기를 0보다 큰 값으로 증가시킵니다. CG 이미지는 이 과정을 모든 픽셀들의 밝기(또는 색상) 이 조절될 때까지 반복하는 방법으로 생성할 수 있습니다. 이 기술은 전반향 광선 추적forward ray-tracing 이라고 불리는데 그 이유는 광원에서 관측자 방향으로 앞으로 나아가며 광선을 추적하기 때문입니다.

이 방법에 어떤 문제가 있는지 보이시나요?

문제는 다음과 같습니다: 우리는 반사된 광자가 항상 눈으로 들어온다고 가정했습니다. 실제로는 광선들이 가능한 모든 방향으로 반사되기 때문에 그 중 어느 광선이 눈으로 들어올 확률은 매우 적습니다. 눈에 들어오는 하나의 광자를 찾기 위해서는 엄청난 양의 광선을 쏘아야 합니다. 실제 세상에서는 이렇게 셀 수 없이 많은 광자들이 빛의 속도로 모든 방향을 향해 여행하고 있는 것입니다.

이제 이렇게 생각하실지도 모르겠네요. "정말로 광자들을 임의의 방향으로 쏘아야 하는 건가요? 눈의 위치를 알고 있으니까 그 방향으로 광자를 쏘고, 그 중 이미지 평면을 지나는 것이 있다면 그것이 어느 픽셀을 지나는지 보면 되는 거 아닌가요?" 이것은 확실히 가능한 최적화 방법 중 하나이지만, 특정한 재질에만 쓰일 수 있습니다. 나중에 빛-물체간 상호작용에 대한 레슨에서 설명하겠지만 난반사 표면에서 방향성은 중요하지 않습니다. 이것은 난반사 표면에 도달한 광자는 부딪힌 부분의 normal (역주: 구의 중심으로부터 표면의 한 점을 향하는 벡터) 을 축으로 하는 반구의 어느 방향으로나 반사될 수 있기 때문입니다. 그런데 표면이 거울이고 난반사 속성이 없다면, 광선은 하나의 정확한 방향으로만 반사될 것입니다; 거울 반사 방향입니다 (나중에 이를 어떻게 계산하는지 배울 것입니다). 이러한 종류의 표면을 계산하기 위해, 거울 반사가 일어나는 경우에는 광자의 방향을 인위적으로 바꿔서는 안 되는 것입니다. 곧 이 방법이 완전히 만족스러운 건 아니라는 뜻이지요.

독자로부터의 질문: "눈은 점으로 된 광수용기인가요? 아니면 면적이 있는 표면으로 된 광수용기인가요? 광자를 수용하는 표면의 면적이 매우 작다 하더라도 여전히 그 영역이 점보다는 클 텐데, 그렇다면 그 표면은 단 한 개의 광선이 아니라 더 많은 광선을 수용하게 되는 것 아닌가요?"
답변: 정확합니다. 눈은 카메라의 필름이나 전하 결합 소자CCD처럼 점이 아니라 면적이 있는 표면으로 된 광수용기입니다. 이 레슨은 레이트레이싱 알고리즘을 소개하는 레슨이므로 이 주제를 지금 자세히 설명하기는 조금 어렵습니다. 카메라와 사람 눈 모두 들어온 광선들을 그 표면의 뒷부분으로 모아주는 (초점을 맞추는) 렌즈를 가지고 있습니다. 만일 렌즈의 반지름이 매우 작다면 (광수용기가 점에 가깝다면) 기술적으로 물체로부터 반사된 빛이 한 방향에서만 온다고 생각할 수 있습니다. 이것이 바늘구멍 카메라pinhole camera가 동작하는 방식입니다. 나중에 카메라에 대한 레슨에서 이 주제에 대해 더 이야기할 것입니다.

이러한 방법을 사용하여 난반사 물체만 그리기로 결정했다 하더라도 아직 한 가지 문제가 남아 있습니다. 우리는 광원으로부터 화면에 광자를 쏘는 과정을 광선 (혹은 작은 페인트 입자) 들을 물체 표면에 뿌리는 것으로 생각할 수 있는데, 충분히 촘촘하게 뿌려지지 않는다면 어떤 부분은 보이지 않는 채로 남게 될 것입니다.

검은 종이 위에 흰색 펜으로 점을 찍어 주전자를 그리려 한다고 생각해 봅시다 (각각의 점이 광자를 의미합니다). 아래 그림에서 보이듯 주전자와 충돌하는 광자들의 수가 적으면 나타나지 않은 부분이 대부분입니다. 계속 점을 찍어 나가면, 주전자가 광자들로 "거의 완전히" 덮여 물체를 쉽게 알아볼 수 있을 때까지 광자들의 밀도가 증가합니다.



하지만 1000개나 그 몇 배의 광자를 쏘더라도, 우리는 물체의 표면이 완전히 광자들로 덮일 것이라고 확신할 수 없습니다. 이것이 이 방식의 주요한 문제점입니다. 다시 말해서, 물체가 적절히 표현되기 위한 충분한 수의 광자들이 발사되었다고 판단될 때 까지 프로그램을 실행시켜야 한다는 말입니다. 이는 우리가 실행을 멈출 시점을 결정하기 위해 물체가 그려지는 모습을 관찰하고 있어야 한다는 의미입니다. 실제 제작 환경에서는 불가능한 일입니다. 게다가 레이트레이싱에서 가장 연산비용이 많이 드는 작업은 광선과 지형지물의 교차지점을 찾는 것인데, 광원으로부터 많은 수의 광자를 내보내는 것 까지는 크게 상관이 없을지라도, 그것들의 모든 교차지점을 찾는 것은 허용할 수 없을만큼 비용이 클 것입니다.

결론: 원칙적으로 정방향 광선추적forward ray-tracing (또는 광원으로부터 빛을 쏘기 때문에 광 추적light tracing이라고도 합니다) 을 사용하면 자연에서 빛이 운동하는 과정을 시뮬레이션 할 수 있습니다. 하지만, 이 방법은 지금까지 얘기한 것 처럼 효과적이거나 실용적이지 못합니다.


역방향 추적Backward Tracing

그림 5: 역방향 광선추적backward ray-tracing. 눈에서부터 구의 한 지점까지 광선을 추적하고, 다시 그 지점에서 광원까지 광선을 추적한다.

광원으로부터 광수용기 (우리의 눈 같은 것 말입니다) 를 향해 광선을 추적하는 대신에, 수용기로부터 물체를 향해 거꾸로 광선을 추적합니다. 실제로 일어나는 것과 방향이 반대이므로 역방향 광선 추적backward ray-tracing 이라고 불리거나, 눈에서부터 광선을 발사하므로  눈 추적eye tracing 이라고도 불립니다 (그림 5). 이 방법은 전방향 광선 추적forward ray-tracing의 결점에 대해 편리한 해법을 제시합니다. 시뮬레이션이 자연의 것처럼 빠르고 완벽할 수는 없으므로, 우리는 타협하여 눈에서 장면scene을 향하는 방향으로 빛을 추적해야 합니다. 만일 광선이 물체에 닿는다면 또 다른 광선 (빛 광선light ray라고 불리는) 을 발생시켜 그 부분이 얼마나 많은 빛을 받게 되는지를 알아볼 수 있습니다. 때때로 이 "빛 광선light ray"는 장면의 다른 물체로부터 가로막히게 되는데, 이것은 처음 빛이 물체에 닿은 부분이 그림자 안에 있다는 것을 의미합니다 (곧 그 부분은 광원으로부터 어떠한 빛도 받지 않는다는 뜻입니다) . 이러한 이유로 우리는 이 광선들을 빛 광선light ray 가 아니라 그림자 광선shadow ray 이라고 부를 것입니다. 컴퓨터 그래픽 분야에서는 우리가 눈에서부터 장면을 향해 쏜 첫 광선을 일차 광선primary ray, 시계 광선visibility ray, 또는 카메라 광선camera ray 이라고 부릅니다.

이 레슨에서 우리는 광선이 광원에서 발산하는 상황을 전방향 추적forward tracing, 반대로 카메라에서 광선이 발사되는 상황을 역방향 추적backwrad tracing이라고 하였습니다. 하지만 어떤 사람들은 이를 반대로 사용하기도 합니다. 카메라에서 광선을 쏘는 것이 컴퓨터 그래픽스에서 가장 일반적인 경로 추적 기술이기 때문에 이것이 전방향 추적forward tracing이라고 불리기도 합니다. 혼란을 막기 위해 조금 더 명시적인 광 추적light tracing 이나 눈 추적eye tracing 같은 용어를 사용하실 수도 있습니다. 이러한 용어는 양방향 경로 추적에서 더 자주 사용됩니다 (고급 과정을 보세요).

결론

눈에서 시작하던 광원에서 시작하던, 컴퓨터 그래픽스에서는 광선을 발사하는 이미지 생성 방식을 경로 추적path tracing 이라고 부릅니다. 광선 추적ray-tracing이라는 용어도 사용될 수 있지만 어쨌거나 경로 추적path tracing이라는 용어의 개념은 광원으로부터 카메라를 향해 (혹은 그 반대로) 경로를 추적하는 방식을 사용한다는 데 있습니다. 여기에 물리법칙을 현실적으로 적용하면, caustics*나 간접 조명indirect illumination (장면 내의 다른 물체로부터 반사된 빛을 반영하는 효과) 같은 광학 효과를 쉽게 시뮬레이션 할 수 있습니다. 다른 레슨에서 이러한 주제를 다룰 것입니다. 



*(역주) caustics : 그림을 보시면 이해가 빠르실 겁니다.
출처 위키피디아

2013년 6월 18일 화요일

3D Basic Lesson 1-1. 어떻게 동작하나요?


서강대학교 영상대학원 정문열 교수님의 그래픽스 수업을 듣는데, scratchapixel.com에 나와있는 Ray-tracer를 분석하는 숙제가 나왔다.

비영리 사이트임에도 강의가 참 알찬 것 같아 번역해보기로 했다. 얼마나 할 수 있을지는 모르겠지만..

홈페이지에서 기부도 받는 모양. 적은 금액이라도 넣어줘야겠다.

--------

다음은 Scratchapixel 의 글 중 [3D Basic Lessons - Lesson 1 : Writing a Simple Raytracer] 중 첫번째 챕터 '1. How Does It Work?' 를 번역한 것입니다.

원문 : http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-1-writing-a-simple-raytracer/how-does-it-work/



Lesson 1-1. 어떻게 동작하나요?

이 강의를 시작하기 앞서, 우리는 어떻게 3차원의 장면을 2차원으로 나타낼 수 있는지를 설명할 것입니다. 여러분이 그 과정과, 그 과정에 연관된 것들을 이해할 수 있다면, 비슷한 방법을 사용해 컴퓨터로 "인공의" 이미지를 만들 수 있습니다. 우리는 현재의 고급 CG 기법들이 이 섹션에서 다루려는 이론 위에 쌓아올려진 것이라고 생각합니다.
 이 강의의 두 번째 섹션에서 우리는 ray-tracing 알고리즘을 소개하고 그것이 어떻게 동작하는지 간략히 설명할 것입니다. 많은 사람들이 왜 우리가 다른 알고리즘들보다 ray-tracing에 집중하는지를 메일로 물어왔는데, 사실은 ray-tracing에 집중한 것이 아닙니다. 왜 우리가 ray-tracing에 초점을 맞췄을까요? 그것은 바로 이 알고리즘이 우리가 물체를 볼 수 있게 만드는 물리적 현상들을 시뮬레이션하는 가장 단순하고 직선적인 방법이기 때문입니다. 이러한 이유에서 우리는 간단한 이미지를 만드는 프로그램을 구현할 때, ray-tracing이 여러 테크닉들 중 최선의 선택이라고 생각합니다.
그럼 시작하겠습니다. 다만 먼저 scanline renderer를 구현하기 위한 모든 지식을 다루고 나서, 바로 ray-tracing으로 넘어가도록 하겠습니다.

이미지는 어떻게 생성될까요?

다음과 같이 시작하는 것이 약간 이상할 수도 있겠지만, 이미지를 생성하기 위해 먼저 필요한 것은 2차원 평면입니다(이 평면은 점이 아닌 어떤 영역이 되어야 합니다). 이를 염두에 두고 우리는 꼭지점이 우리 눈의 중심에 있고 바닥이 우리의 시선(기억하세요. 무엇을 볼 때 우리는 눈으로부터 그것을 향하는 선을 따라 보게 됩니다)을 향하는 하나의 각뿔을 상상해 볼 수 있습니다.  앞으로 이것을 절단면cut 이나 조각slice , 혹은 앞서 말한 것처럼 이미지 평면image plane 이라고 부르겠습니다. 이미지 평면은 컴퓨터 그래픽스 개념 중 하나이며, 우리는 이것을 3차원 씬을 2차원 평면에 투영하기 위해 사용할 것입니다.
당연하게 들리겠지만 방금 우리가 설명한 것은 여러 상황에서 이미지를 생성하기 위한 가장 기본적 개념입니다. 예를 들자면 사진에서 필름이 이에 해당하겠습니다.

Figure 1 (시선, 캔버스, 소실점)


원근 투영Perspective Projection

하얀 캔버스에 정육면체를 하나 그린다고 상상해봅시다. 투영 과정을 설명하는 가장 쉬운 방법은 3차원에 있는 정육면체의 각 꼭지점으로부터 눈을 잇는 선을 그리는 것입니다. 캔버스에 물체의 모양을 그려나가기 위해 각 선들이 이미지 평면과 교차하는 점들을 표시하겠습니다. 예를 들어 한 꼭지점을 c0라고 하고 연결된 세 개의 다른 꼭지점들을 차례로 c1, c2, c3라고 하겠습니다. 이 점들을 캔버스에 투영하고 나면 우리는 c0', c1', c2', c3'를 얻습니다. 만일 c0-c1가 하나의 모서리(간선)을 이룬다면, 우리는 이미지 평면 위의 c0'와 c1'를 잇습니다. 이 과정을 정육면체의 모든 꼭지점에 대해 반복하면 결국 3차원 물체를 캔버스 위에 2차원으로 표현하는 것이 됩니다. 자, 여러분은 금방 원근 투영을 통해 이미지를 만들었습니다.
Figure 2: 캔버스의 앞면에 4개의 꼭지점을 투영


이 과정을 장면 안의 모든 물체들에 대해 반복하면, 우리는 특정 소실점으로부터 나타나는 이미지를 얻게 됩니다. 화가들은 이러한 원근 투영의 법칙을 15세기 초가 되서야 이해하기 시작했습니다.

빛과 색깔

3차원 물체의 윤곽선을 2차원 평면에 그리는 법을 알았으니, 그림을 완성하기 위해 색을 입혀 봅시다.

방금 우리가 배운 것을 정리해봅시다: 우리는 3차원 씬scene 에서 두 단계 과정을 거쳐 이미지를 만들 수 있습니다. 첫째 단계는 3차원 물체의 모양을 이미지 평면에 투영하는 것입니다. 이 단계는 물체의 각 부분과 눈을 잇는 선들을 그리는 것이 전부였습니다. 이러한 투영 선들과 이미지 평면이 만나는 지점들을 이으면 외곽선이 만들어졌습니다. 눈치채셨겠지만, 이것이 바로 기하학적 프로세스geometric process 입니다. 두 번째 단계는 바로 그림의 뼈대에 색을 입히는 것입니다.

물체의 색과 밝기는 대부분 빛과 물질material 이 상호작용한 결과입니다. 빛은 광자(전자기 입자)로 이루어져 있습니다. 다른 말로 하면, 빛은 전기적 성분과 자기적 성분을 가지고 있습니다. 이들은 에너지를 전달하고, 직선으로 나아갈 때 음파처럼 진동합니다. 광자들은 다양한 광원에서 생성됩니다. 태양이 광원의 대표적인 예입니다. 광자들의 무리가 물체에 부딪히면 세 가지 현상이 발생합니다: 흡수absorption 되거나, 반사reflection 되거나, 투과transmission 됩니다(역주 : http://www.physicsclassroom.com/Class/light/u12l2c.cfm 여기 그 이유가 설명되어 있습니다). 반사되거나 흡수되거나 투과되는 광자의 양은 물질에 따라 달라지고, 일반적으로 물체가 어떻게 보이는지를 좌우합니다. 하지만 모든 물질들에겐 공통점이 있는데, 물질에 들어오는 광자의 수와, 반사되거나 흡수되거나 투과되는 광자의 수의 합이 항상 같다는 것입니다. 100개의 광자가 물체 위의 어떤 점을 비추면 60개는 흡수되고 40개는 반사되거나 하는 식입니다. 총합은 항상 100입니다. 70개의 광자가 흡수되고 60개는 반사되거나, 20개는 흡수되고 50개는 반사되거나 하는 일은 절대 일어나지 않습니다. 반사, 흡수, 투과되는 광자의 총합이 100이어야만 하기 때문입니다.

보통 과학에서는 물질을 세 종류로 나눕니다. 금속이나 플라스틱처럼 빛을 반사하고 흡수하는 물질이 있습니다. 또한 유리처럼 빛을 반사하고 투과하는 물질도 있습니다. 다른 한 종류는 반투명한 물질입니다.

모든 물질은 이 세 분류 중 하나에 속합니다(자체발광을 하는 물질self-illuminating material 같은 예외도 조금 있습니다). 그렇지 않은 것은 물체가 세 물질의 혼합이거나, 여러 층으로 되어 있는 경우 뿐입니다. 예를 들어 겉에 니스칠을 한 확산체diffuse object 가 있을 수 있습니다(이는 여러 플라스틱처럼 물질이 빛남과 동시에 분산되는 것처럼 보이게 합니다).




지금은 첫 번째 분류에 속하는 물질만 생각하기로 합시다.  문제를 단순하게 하기 위해서 빛의 흡수 과정이 물체의 색에 좌우된다고 가정하겠습니다. 흰 빛이 "빨간 광자", "파란 광자", "초록 광자"로 이루어져 있다고 칩시다. 이 빛이 빨간 물체를 비추면 흡수 과정이 "초록 광자"와 "파란 광자"를 걸러냅니다(혹은 흡수합니다). 이 물체는 "빨간 광자"를 흡수하지 않기 때문에, 이들이 반사됩니다. 이것이 물체가 빨간색으로 보이는 이유입니다. 우리가 물체를 보는 것은 "빨간 광자"의 일부가 물체에 의해 반사되어 우리 눈으로 들어오기 때문입니다. 빛이 비춰진 영역의 모든 점들은 광선을 모든 방향으로 방사radiate 또는 반사reflect 합니다. 각 지점에서 나온 여러 광선 중 하나가 눈에 직각으로 들어올 때 물체가 보이게 됩니다. 우리의 눈은 광수용기photoreceptors 로 이루어져 있어 빛을 신경 신호neural signal 로 변환합니다. 그러면 우리의 뇌는  이러한 신호들을 음영shade 과 색조hue 를 해석하는 데 사용할 수 있게 됩니다(이 과정이 어떻게 이루어지는지는 정확히 밝혀지지 않았습니다). 이것은 나중에 색에 관한 강의에서 더 자세하게 다뤄질 현상들을 설명하는 매우 단순한 접근입니다.

Figure 3: al-Haytham의 모델

원근 투영처럼, 사람들은 빛을 이해하는 데 시간이 좀 걸렸습니다. 그리스인들은 눈에서 나오는 광선 때문에 물체가 보인다고 생각했습니다. 처음으로 우리가 태양광선 때문에 물체를 본다고 생각한 사람은 아랍인 과학자 Ibn al-Haytham (c. 965-1039)였습니다.  직선으로 운동하는 작은 입자들의 흐름이 물체에서 반사되고, 이미지를 이룬다는 것이 그의 이론이었습니다. 자, 이제 컴퓨터로 어떻게 세상을 시뮬레이션 할 수 있는지 알아봅시다!



다음 강좌 : 3D Basic Lesson 1-2. 간단히 설명하는 레이트레이싱