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. 간단히 설명하는 레이트레이싱


댓글 없음:

댓글 쓰기