반응형

출처::성심여대 컴퓨터공학부





Ray Tracing





특징



  물체를 화면에 표시하는 가장 기본적인 방법은 물체의 3차원 좌표를 시각변환과 원근투영 방법을 이용해서 2차원적 화면 좌표로 변환시키는 것이다. 또한 물체를 화면에 3차원적으로 표현하기 위한 방법 중의 하나인 와이어 프레임에 의한 간단한 표시법으로는 깊이감이 제대로 나타나지 않기 때문에 물체에 실제감을 더해주기 위해 은선과 은면제거 그리고 음영표현 방법을 사용해 보았다.

그러나 위와 같은 방법으로는, 아무리 실감 나는 표현을 한다고 해도 거울이나 투명한 물체 등을 표현하기는 불가능하다. 그것은 지금까지의 표시 방법이 눈과 물체와의 위치관계에 따라 좌표를 변환하는 것을 기본으로 하고 있지만, 거울면에서는 다른 위치에서 바라본 듯한 풍경이 나타나기 때문이다.

ray tracing 은 더욱 현실감 있는 표현이 가능방법으로서 광선추적이라고도 한다. 이것은 반사, 음영 만들기, 즉 유리 물체 등에 있어서의 빛의 굴절을 정확히 모사하고, 보다 현실에 가까운 입체표현이 가능한 방법으로 가장 유효한 랜더링 방법이다
   Ray Tracing은 광선의 경로를 하나하나 추적하여 눈에 들어오는 빛을 찾아내는 방법인데, 이 방법을 이용하면 굴절과 반사의 효과를 나타내는 데 있어 그리 어렵지 않다. 평범한 다면체들을 그려내기 위해 Ray Tracing 방법으로 광선을 일일이 추적하는 것은 비효율적이지만, 거울이나 투명체를 표현하는 데 있어서는 Ray Tracing이 가장 알맞은 방법이다.

Ray Tracing의 또다른 장점은 은면제거 알고리즘이 따로 필요하지 않다는 것이다. 그 이유는 가려진 물체가 발산하는 빛은 우리의 눈에 직접 들어오지 않고 다른 물체에 닿아버리므로 결국 이 빛은 화면에 표시되지 않기 때문이다. 그러나 광선을 하나씩 추적한다는 말에서 느낄 수 있듯이, 비록 광선추적 알고리즘 자체는 그리 복잡하지 않다 하더라도 전체적인 계산량이 많아진다는 단점이 있다.


광선추적법을 이용한 표현



1. 투명물체와 경면반사의 표현이 가능 
2. 은면소거의 처리가 불필요 
3. 초병렬처리가 가능 



 
 


광선추적의 기초


Ray Tracing이란 관찰자의 눈에 들어오는 광선을 찾아 그 광선의 색을 화면에 표시해주는 방법으로서, 여러 방향에서 관찰자의 눈으로 들어오는 광선들의 색을 정확히 찾기만 한다면 영상을 만드는 일은 아주 간단해진다.

광선을 추적하는 방법에는 두 가지가 있는데, 하나는 광원이 내보내는 빛의 방향을 세분하여 추적하는 정방향 광선추적법이고, 다른 하나는 관찰자의 눈에서 광원방향으로 시선을 추적하는 역방향 광선추적법이다.

(1) 정방향 광선추적법(Forward Ray Tracing)

정방향 광선추적법은 역방향 광선추적법에 비해 자연현상을 좀더 충실하게 시뮬레이션한다는 장점이 있기는 하지만, 광원이 내보내는 여러 방향의 광선을 모두 추적해야 하는 비능률적인 면이 있다. 즉, 우리가 수많은 방향으로 세분화시킨 광선들을 모두 추적한다 해도, 그것들 중 대부분은 우리의 눈에 들어오지 않을 뿐만 아니라 그러한 광선은 영상을 만들어내는 데 전혀 도움이 되지 않기 때문이다. 그러므로 충분한 개수의 광선이 눈(화면)에 들어오도록 만들려면 광원에서 출발한 광선들을 거의 무한하게 세분화시켜야 한다는 것을 알 수 있다. 그러나 광원을 떠나는 빛을 셀 수는 없는 일이므로, 사실 이러한 방법으로 자연현상을 흉내내는 일은 거의 불가능하다.

(2) 역방향 광선추적법(Backward Ray Tracing)

관찰자의 시선방향을 따라가서 빛을 내보낸 물체를 찾아내는 방법이다. 시선이 물체에 닿았다는 것은 그 방향에서 물체의 빛이 눈으로 들어오는 것을 의미하므로, 시선방향으로 빛을 역추적하면 눈에 들어올 광선만을 추적할 수 있게 된다. 그러므로 광원에서 나오는 무한히 많은 빛들 중에서 눈에 들어올 빛을 찾아내는 정방향 광선추적법보다 시선방향으로 빛을 역추적하는 역방향 광선추적법이 훨씬 효율적임을 알 수 있다.

역방향 광선추적법이란 이러한 역추적 방법을 뜻하는 것으로서, 시선의 경로를 따라가다가 빛을 분산시키는 물체에 도달하면 Shading 모델로 광선의 색과 밝기를 결정하는 방법이다. 일반적으로 Ray Tracing이라 하면 광원에서 광선을 추적하는 정방향 광선추적법이 아닌 눈에서 광원으로의 시선추적 방법인 역방향 광선추적법을 의미한다.



Ray Tracing에서는 시선을 추적하므로, 모든 계산이 물체를 나타내는 3차원의 실좌표계(World Coordinate)상에서 이루어진다.

눈에서 출발하는 시선을 설정하는 원리는 눈과 물체 사이에 화면을 놓고 화소와 시선을 대응시키는 것이다. 눈에서 출발한 시선을 따라가다가 거울을 만나게 되면 시선을 반사시켜 방향을 바꾸어준 뒤, 시선과 만나는 다른 물체를 찾는 일을 되풀이한다. 그리고 헝겊과 같이 빛을 분산시키는 물체에 시선이 닿게 되면 더 이상 시선을 추적하기 어려우므로 헝겊의 색을 화소에 칠해주는데, 이 경우 단순히 한가지 색채만을 쓰는 것이 아니라 광원과 물체 표면과의 각도 관계를 이용하여 색에 밝기를 더해준다.

Ray Tracing에서는 시선을 직선방정식으로 나타내고, 직선과 물체의 교점을 계산하는 방법을 사용하며, 여러 물체와의 교점 중에서 가장 가까운 교점을 시선이 도달한 곳으로 생각한다.




광선추적 알고리즘


매끄러운 평면에 광선이 조사되면, 일부는 반사하고 일부는 내부를 향해 나아간다. 반사광선은 입사각  와 같은 각도로 반사하지만, 내부로 향하는 광선의 방향은 물체를 구성하는 물질의 굴절률에 따라 다르다.  표면에서 분리된 2개의 빛은 다시 다른 표면에 조사되어 분리된다. 아래 그림  (a)와  같이 다수의 반사, 굴절을 반복하여 시점으로 향한 빛이 실제로 관찰  되어진다. 즉, 시점에서 관측되어진 명도 I는 그림(b)의 나무로 표현되는 것과 같이,  반사광, S1과 물체 내부로부터의 투과광T1의 합으로 주어진다. 이 나무구조는  무한히 계속된다. 

종래의 음영모델을 이용하는 경우, 광원으로부터 출발해서 반사, 분리의 반복을 계산하면 시접까지 도달한 빛은 극히 적고, 다른 많은 연산처리가 그래픽 표현에는 불필요하게 되고 만다. 따라서 레이트레이싱에서는 역으로 시점방향에서 출발해서 최종적으로 얻고 싶은 2차원 디스플레이상의 화살의 각 화소점만의 컬러정보를 얻는 수법을 이용하고 있다. 
그것은 옆 그림에서 나타나듯이, 시점 I로부터 화상평면의 각 화소점 (m,n)을 향해서 단위광원을 방사하여 그 광선과 물체의 교점을 구하는 작업과 교점에 잇어서 물체의 컬러정보를 구하는 작어븡로 구성된다. 그때, 각 화소점과 핀홀을 연결한 광선이 대상물체와 한번도 교차하지 않으면 배경색(예를 들어 흑)이 된다. 혹시 물체와 교차하면 대상물체가 불투명한 경우는 그림자 모델에 의해 그 점의 밝기를 계산한다. 

이상을 정리하면 다음과 같은 알고리즘이 되고 모든 것이 투명 물체인 경우의 기본적인 레이트레이싱법이 된다. 
 

1. m,n의 초기값을 설정한다. 
2. 시점I로부터 화소(m,n)에 광선을 방사하고, 모든 물체와의 교점을  구한다. 
3. 교점이 존재하면 화상평면에 가장 가까운 교점을 구한다. 
   교점이 존재하지 않으면 5번으로 간다. 
4. 3점의 물체의 그림자 만들기를 행하고, 색을 결정해서 화소(m,n) 에 부여한다. 
5. 화소(m,n)를 배경색으로 한다. 
6. 이상의 처리를 모든 화소에 대해 행한다.

 

유리구 등과 같이 투명한 물체의 경우는 스넬의 법칙에 나타내듯이, 반사광 그 속으로 들어가는 투과광을 생각해서 임사되어진 단위광량 1을 적당한 비율로 반사광과 투과광에 분배한다. 그리고, 각각의 빛이 투명한 물체에 닿은 경우, 각각이 가진 광량에 비례해서 각 불투명 물체의 색을 혼합하고, 화소점의 컬러 정보로 한다. 혹시 두 개로 나뉘어진 빛이 다시 투명물체에 닿았을 때는 똑 같이 반복반사와 투과를 계산한다. 이렇게 해서 가지고 있는 광량이 어떤 명도 이하가 되든가, 반사의 횟수가 어떤 제한을 넘으면 계산을 그만두게 하면 된다. 이와 같은 계산을 화상평면상의 모든 화소점에 대해서 행하면 레이트레이싱 화상이 구해진다. 아래의 왼쪽그림은 렌즈 등의 투명한 유리구가 있는 경우의 레이트레이싱 화상 예이고, 아래의 오른쪽 그림은 경면반사가 있는 경우 화상의 예이다. 

심화 학습

Recursive Ray Tracing



 


광선 교점의 계산



레이트레이싱에서는 교점 계산에 많은 시간이 소요된다. 따라서, 물체와의 교점 계산법에 대해서 살펴보자.

시점의 위치를 P0(x0,y0,z0)으로 하고, 디스플레이상의 점을 Pmn(x1, y1, z1) 으로 하면, P0에서 Pmn에 도달하는 광선은 t를 이용하면 아래의 식으로 주어진다.

여기서

라고 놓으면



가 된다. 이때 t를 음의 값으로 하면 광선은 시점으로부터 멀어지는 방향이 되고, t를 1보다 크게 하면, Pmn으로부터 물체가 존재하는 공간으로 들어오는 것이 된다. 이렇게 해서 모든 물체와의 교차판정을 행하고 가장 시점에 가까운 교점과 그 물체를 구한다. 
광선과 구의 교점

대상물체가 다음 식으로 나타내어지는 구체라고 하면 


식 2을 식 3에 대입하면 

가 된다. 이식은 t의 2차방정식이다. 따라서 이 식이 실근을 가지지 않으면 구와 광선과의 교점은 없는 것이 되고, 하나의 실근을 가지면 접하고, 두 개의 실근을 가질 때에는 작은 쪽의 t가 최초의 교점의 위 값이 된다. 
 

광선과 면의 교점

대상 물체가 폴리곤으로 구성되어 있는 경우는 우선 처음에 광선과 폴리곤을 포함하는 평면과의 교점을 구하고, 그 교점이 폴리곤의 내부에 존재하는지의 여부를 판정하게 된다. 
폴리곤을 포함하는 평면의 방정식을 다음 식으로 한다. 

여기에 식2를 대입한다. 

 

이 식으로부터 다음이 구해진다. 
 

혹시 t = 0 이 되면 평면과 광선은 평행이 되어 교차하지 않는 것이 된다. 교점이 폴리곤 내부에 있는지 여부의 가장 간단한 판정방법은 아래 그림에 나타나듯이 , 폴리곤과 교점 P를 xz평면상에 투영하는 것이다. 투영한 점 P 가 투영되어진 폴리곤 내부에 존재하면 교점이 존재하는 것이 된다. 
 


고속화 기술


레이트레이싱은 효과적인 렌더링법이지만 디스플레이 평면의 해상도가 높을수록 광선의 수가 증가하고 처리시간이 걸린다. 또 대상물체가 증가할수록 광선과 물체와의 교차를 판정하는 시간이 걸리고, 처리 시간이 방대해지는 결점이 있다.  그 때문에 다수의 고속화 알고리즘이 개발되어 있다.  고속화의 방식에는 하드웨어 방식과 소프트웨어 방식이 있다. 
하드웨어 방식에 대해서는, 레이트레이싱에서는 각 화소점의 계산이 독립적이어서 다른 영향을 받지 않는다는 사실로부터 병렬처리가 가능하고,기본적으로 프로세서의 수를 증가시키면 그 만큼 고속화가 실현된다.  그 때문에 많은 병렬처리 시스템이 제안되어 있다. 

(1) Supersampling

Ray Tracing에 의한 영상을 얻기 위한 기본적인 표시법은 화소 하나에 시선 하나씩을 대응시키는 방법이다. 이 방법의 결점은 물체 사이의 경계부분에서 색의 차이가 심하면 경계의 형태가 마치 계단과 같은 모습으로 나타난다는 것이다.

Supersampling은 이러한 한계를 개선하기 위해 고안된 방법으로서, 화소를 더 세분하고 하나의 화소에 여러개의 시선을 설정하여 추적하는 방법이다. Supersampling에서는 세분한 시선들의 밝기를 평균하여 화소의 색을 얻는데, 이는 높은 해상도의 가상적인 영상을 화면의 해상도로 낮추어 표시하는 것과 같다. 물론 이 방법으로 모든 결점을 완전히 해결할 수 있는 것은 아니지만, 색의 변화가 심한 부분에 중간색이 나타나므로 보다 현실감이 높은 영상이 얻어진다.

Supersampling을 한다고 해도 광선의 방향을 일정한 간격으로 세분하는 방법을 사용하면 경우에 따라서 아주 이상한 영상을 만들어내는 수가 있는데, 일 예로 광선의 세분간격과 비슷한 간격의 무늬를 가지는 물체는 그 무늬가 제대로 표현되지 않는다. 광선을 아무리 세분한다고 해도 일정한 간격으로 세분한 이상은, 이러한 현상을 완전히 막을 수는 없다.

그러나 현실감을 높이는 대신 그만큼 계산량이 늘어나게 되는데, 예를 들어 화소를 2×2의 격자로 세분한다고 하면 대략 계산량이 4배로 늘어나게 된다.

(2) Distributed Ray tracing

이러한 현상을 막기 위해 고안된 것이 distributed ray tracing(광선의 분산 추적)이다. 이것은 시선의 방향에 난수를 더하여 "확률적 분포"를 가해주는 방법으로서, 시선을 설정할 때나 반사와 굴절을 계산할 때 방향을 불규칙하게 흐트러뜨리면 일정한 시선간격에 의한 결점이 나타나지 않을 뿐만 아니라 빛이 번지는 효과도 얻을 수 있다는 원리를 이용한 것이다. 그러므로 그림자의 계산에 이 방법을 도입하면 그림자의 경계면이 흐려지는 효과를 얻을 수 있다.

Distributed Ray tracing 방법을 사용하였을 경우, 영상 전체를 보아서는 빛이 번지는 효과가 난다고는 할 수 있겠지만, 실제에 있어서는 난수에 의해 영상의 세부에 거칠 거칠한 무늬가 나타나게 된다. 그러므로 부드럽게 빛이 번지는 효과를 얻으려면 Supersampling 방법과 병행하여 사용해야 한다.

(3) 공간분할법(Space Subdivision)

Ray Tracing의 계산시간이 많이 걸린다는 단점을 보완하기 위한 방법으로 공간분할법은 물체를 정의한 실 좌표계 공간을 여러 영역으로 세분하고 물체를 영역별로 분류하여, 시선이 지나가는 영역내에 있는 물체들로만 교점테스트를 하므로 불필요한 계산을 줄일 수 있다.

즉, 각 영역에 물체가 하나씩만 있도록 세분한 다음 시선이 지나가는 영역을 효율적으로 찾기만 한다면 교점계산의 부담이 많이 줄어든다.

왼쪽그림과 같이 대상물체가 존재하는 공간을 8분할하고, 그 부분영역을 다시 8분할해 나가서 적당한 크기의 입방체가 될 때까지 부분분할해 간다. 이때, 각 부분영역과 대상물체와 관계는 아래 그림에 나타나듯이 무관계, 일부분관통,내부에 존재의 3가지가 있다. 그리고 광선이 직진하면 순차통과하는 부분영역이 구해지고, 각 부분영역마다 대상물체와의 관계가 구해져 있기 때문에, 그림 b,c,의 경우에 대해서만 교점계산을 행하면 된다. 처음에 대략적인 부분영역을 이용해서 판정하고, 혹시 b,c의 경우가 되면 재차 8분할하는 것보다 효율적으로 교점이 구하여 지게 된다. 부분영역의 계산기 내부에서의 기억방식으로 8분할 트리표현(octree structure)이 이용되어지고 있다. 

(4) 은면제거 알고리즘의 이용

반사체가 많은 그림이라도 시선의 방향이 변하는 평균횟수는 얼마되지 않는다. 또한 반사체나 투명체가 전체 그림에서 차지하는 면적도 얼마 되지 않는다. 그러므로 반사체나 투명체를 제외한 부분을 기존의 은면제거 알고리즘으로 그려낸 후 남은 부분에 대해서만 Ray Tracing을 행하면 계산량을 상당히 줄일 수 있을 것이다.


(5) 볼록포의 이용

대상물체가 복잡한 형상을 하고 있으면, 광선과 대상물체의 교차 여부의 판정에 시간이 걸리며 전체처리 시간의 95%이상이 소요된다고 말하여 진다. 따라서 대상이 되는 입체를 내부에 포함하는 간단한 볼록입체를 이용하고, 이 입체를 새로이 볼록포라고 부르기도 한다. 볼록포와 광선의 교차를 우선 구하여 교차하지 않으면, 원래의 입체는 교차하지 않음을 확실히 알 수 있다.혹시 볼록포와 광선이 교차하고 있으면 실제로 대상물과 광선이 교차하는지의 여부를 종래대로 광선추적의 처리로 구한다. 
볼록포는 교차계산이 용이한 입방체와 구가 이용되어진다. 그러나, 최적형상의 볼록포의 결정은 어려우므로, 현재에도 여러 가지 검토가 행하여 지고 있다. 보통은 아래 그림에 나타나듯이, 볼록포를 광선에 수직한 면에 투영했을 때,볼록포내의 물체가 포함되지 않은 영영(void area)이 적은 쪽이 바람직하다. 







[ Back ] [ Top ][ Next ]

반응형

'Computer_Graphics' 카테고리의 다른 글

3D 책  (0) 2007.03.14
Diffuse Phong Shading, Specular color  (0) 2007.03.14
Raytracing 공부하기  (0) 2007.03.14
Posted by Real_G