[한정현 컴퓨터 그래픽스] 16장 전역 조명과 텍스처링

이한결·2025년 3월 19일
0

[KUOCW]Computer Graphics

목록 보기
15/16

출처: https://www.youtube.com/watch?v=E35m-vRm_KY&list=PLYEC1V9tJOl03WLDoUEKbiYW_Xt4W6LTl&index=17
한정현님의 컴퓨터그래픽스 16장 강의를 기반으로 제작한 블로그입니다.

Global Illumination

이전에 배운 phong lighting만 고려할 경우 우리는 local illumination만 고려한 것 입니다. 예를 들어서 그림 (a)에서 S2S_2는 원래 S1S_1에 의해서 빛이 가려져서 어두워야하지만, (a)에서는 local만 고려했기 때문에 발게 나옵니다.

그러면 S2S_2는 (b)에서처럼 완전히 어둡냐? 그것도 아닙니다. 왜냐하면 빛이 S3S_3에 부딪힌 후 다시 반사되는 소량이 존재하기 때문입니다. 따라서 최종적으로 모든 빛을 고려한 global illumination의 결과는 그림 (c)와 같습니다.

Ray Tracing

해상도와 동일한 개수만큼 projection line을 생성한 후, 각 projection line은 해당 픽셀의 색상을 결정합니다. Ray tracing에서는 projection line과 반대 방향으로 카메라에서부터 빛을 쏘고 이를 primary ray라고 부릅니다. Primary ray가 물체에 부딪히면 secondary rays(Shadow, Reflection, Transmitted)를 산란시킵니다.

Shadow Ray

Primary ray를 통해서 초록색 구의 p1p_1점에서 부딪히고, 이 점에서 3가지 secondary ray가 반사가 됩니다. Shadow ray의 역할은 광원에서 빛이 다다르는지 확인하는 역할을 합니다. 현재 s1s_1은 보라색 구에 막혀서 빛이 다다르지 않는 상태입니다.

Reflection Ray

Reflection ray는 처음 들어오는 primary ray와 normal ray의 각도와 동일한 각도만큼 normal ray에서 primary ray의 반대방향에 나타나는 광선 입니다. 계산 방식은 위와 같이 진행됩니다. 이때 위의 수식 ll은 이전에 local illumination 할 때 고려한 대상이고, 여기서는 I1-I_1으로 바꿔야합니다. 따라서 최종적으로 정리된 수식은 I12n1(n1.I1)I_1 - 2n_1(n_1 . I_1) 입니다.

Transmitted Ray

마지막으로 물체에 대해서 굴절되는 ray인 transmitted ray를 알아 보겠습니다. 위의 그림처럼 우리는 Snell’s law에 의해서 굴절되는 빛을 구할 수 있고 해당 빛을 transmitted ray(t1t_1)이라고 정의합ㄴ디ㅏ.

Recursive

이전까지 하나의 점 p1p_1에서 secondary rays까지 계산을 했고, 이중에서 reflection ray와 transmitted ray는 다른 물체와 부딪힐 수 있기 때문에 해당 ray가 또다른 primary ray가 됩니다. 위의 그림에서는 r1r_1이 primary ray가 돼서 노란색 구에 부딪혀서 노란색 구에서 secondary rays가 계산 되는 것을 확인할 수 있습니다. 이를 시각적으로 나타낸 그림이 왼쪽에 나타나 있습니다. p1p_1에서 시작해서 빛이 recursive하게 진행됩니다. Recursive는 무한번 반복될 수 있기 때문에 일반적으로 왼쪽 tree 그림에서 depth를 정해서 해당 부분까지만 진행하도록 합니다.

이렇게 결정된 p2p_2에서의 색깔값을 우리는 카메라에서 동일한 색상으로 인지할 수 있을까요? 아닙니다. p1p_1에서 반사되는 정도를 고려해야 하고 이를 나타내는 계수가 specular rerflectance coefficient(msm_s)입니다. 해당 값은 p1p_1의 반사계수에 따라서 결정됩니다.

마찬가지로 p3p_3에 대해서도 transmission coefficient를 계산해서 빛의 세기를 결정합니다. 그러면 최종적으로 p1p_1의 색상에 c2c_2c3c_3의 계수를 곱한 값을 더해주면 픽셀에서의 생상이 결정됩니다. 이렇게 모든 해상도에서 진행하면 특정 시점에서의 이미지가 생성됩니다.

Limitations

Ray tracing을 현실 세계에서 적용하기 어려운 첫번째 이유는 표면이 완벽하게 매끄럽지 않고, 매우 작은 단위에서 미세한 거칠기(microfacts)가 존재합니다. 이로 인해 빛이 하나의 이상적인 normal이 형성되는게 아니라 다양한 방향으로 산란 됩니다.

제한적인 recursion으로 인해 일부 광선을 표현하지 못하는 경우가 있습니다.

여러개의 normal이 나오는 부분을 해결하기 위해서는 물체에 따라서 산란되는 정도가 다르니까 이를 고려한 계산 방법도 존재하긴 합니다.

Enviroment Mapping

실시간성으로 ray tracing을 진행하기 위해서 Texture map처럼 미리 reflection할 영역을 정의한 Enviroment Mapping이라는 개념을 도입했습니다. Enviroment Mapping은 정육면체의 6개의 영역에 대해서 미리 특정 시점에서 보이는 영역을 정의합니다.

이후 Reflection을 진행할 때 Recursive하게 계속 진행하는게 아니라 특정 Enviroment map의 texel에 부딪히면, 그 값만 가져와서 진행합니다. 이렇게 recursive하지 않고 한번만 계산할 수 있습니다.

하지만 이는 global 방법이 아닌 local한 방법으로 문제가 존재합니다. 주전자의 반사된 부분에 주전자의 입구부분이 존재해야하는데 enviroment mapping을 사용했기 때문에 주전자의 앞 부분이 반사되지 않습니다.+

profile
열정으로 가득할 페이지

0개의 댓글