newhaneul

[Multimedia] Lecture 11. Raytracing 본문

4. University Study/Multimedia

[Multimedia] Lecture 11. Raytracing

뉴하늘 2026. 4. 11. 17:23
728x90

본 포스팅은 인하대학교 안남혁 교수님의 [202601-EEC4410-001] Multimedia을 수강하고 공부한 내용을 정리하기 위한 포스팅입니다.

 

1. 지역 조명과 전역 조명 (Local vs. Global Illuminations)

조명 모델은 빛을 연산하는 방식과 범위에 따라 크게 두 가지로 나뉜다.

  • 지역 조명 (Local Illumination): 퐁(Phong) 모델이 대표적이며, 오직 객체와 광원 사이의 상호작용만을 연산한다. 그림자나 다른 객체에 의해 반사되는 간접광을 무시하므로 물리적으로는 완전히 정확하지 않지만, 연산량이 적어 게임이나 VR 같은 실시간 렌더링 환경에 주로 사용된다.
  • 전역 조명 (Global Illumination): 광선 추적법(Ray-tracing)이 대표적이며, 씬(Scene) 내에 존재하는 다른 객체들을 잠재적인 간접 광원으로 고려하여 연산한다. 연산량이 매우 높고 특수한 파이프라인이 요구되지만, 극도로 사실적인 결과를 만들어내므로 애니메이션이나 VFX 같은 오프라인 렌더링에 주로 사용된다.

 

  • (a) 지역 조명 기본: 오직 광원과 개별 객체 사이의 상호작용만 계산한다. 빛이 물체 표면에 어떻게 맺히는지는 계산하지만, 물체가 다른 물체에 미치는 영향(예: 그림자, 빛 반사)은 무시하므로 빛과 그림자의 경계가 물리적으로 부자연스럽다.
  • (b) 그림자를 추가한 지역 조명: 객체 간의 가려짐을 계산하여 $S_2$ 구체에 까맣게 그림자를 추가한 모습이다. 하지만 현실에서처럼 빛이 바닥이나 다른 물체에 부딪혀 튕겨 나오는 간접광(Indirect light)을 계산하지 않기 때문에, 어두운 부분의 디테일이 완전히 묻혀버려 여전히 사실적이지 않다.
  • (c) 전역 조명: 빛이 씬(Scene) 내부의 다른 객체들에 부딪혀 반사되는 '간접 광원'의 역할까지 모두 고려한다. 주변 환경에 의해 어두운 부분도 은은하게 밝아지는 효과와 부드럽고 사실적인 그림자가 표현되어 매우 자연스럽다.

 

 

  • 지역 조명 (Local Illumination):
    • 대표 모델: 퐁(Phong) 조명 모델
    • 특징: 전통적인 렌더링 파이프라인에서 수행되며, 전역 조명에 비해 연산량이 매우 적다.
    • 활용: 물리적으로 완벽하게 사실적이지는 않지만, 빠른 연산 속도 덕분에 게임이나 VR 환경과 같이 즉각적인 반응이 필요한 실시간 렌더링(Real-time rendering)에 주로 사용된다.
  • 전역 조명 (Global Illumination):
    • 대표 모델: 광선 추적법 (Ray-tracing)
    • 특징: 빛의 경로를 물리적으로 정밀하게 추적하므로 연산량이 매우 높으며, 이를 처리하기 위한 특수한 파이프라인이나 하드웨어가 요구된다.
    • 활용: 극도로 사실적인 결과물을 만들어내기 때문에, 프레임당 연산 시간에 크게 구애받지 않는 애니메이션이나 영화 VFX 등의 오프라인 렌더링(Off-line rendering)에 주로 사용된다. 단, 최근에는 NVIDIA RTX와 같은 그래픽 카드의 발전으로 하드웨어 가속을 통한 실시간 광선 추적법도 게임 등에 적극적으로 도입되고 있다.

 

 

2. 광선 추적법 (Ray-Tracing)

 실제 빛의 경로와 반대로, 카메라(시점)에서 화면의 각 픽셀을 향해 1차 광선(Primary ray)을 발사하여 픽셀의 색상을 결정하는 기법이다. 발사된 1차 광선이 객체와 교차하면 다음 세 가지의 2차 광선(Secondary rays)을 파생시킨다

  • 그림자 광선 (Shadow Ray): 광선과 객체의 교차점(Intersection point)이 그림자 영역에 있는지 확인하기 위해 각 광원을 향해 발사하는 광선이다. 빛을 향해 가는 도중 다른 객체와 부딪히면 해당 지점은 1차적으로 그림자에 있는 것으로 판별되며, 광원의 직접적인 조명 기여도는 무시된다.
  • 반사 광선 (Reflection Ray): 1차 광선이 교차점의 법선(Normal)을 기준으로 반사된 광선이다. 입사 광선 벡터를 $I$, 법선 벡터를 $n$이라고 할 때, 반사 벡터 $R$은 다음과 같은 수식으로 계산된다.
    $$R = I - 2n(n \cdot I)$$
  • 굴절/투과 광선 (Refraction / Transmitted Ray): 부딪힌 객체가 불투명하지 않은(투명/반투명한) 경우에 생성된다. 이는 매질의 굴절률(Refractive index) $\eta$를 사용하는 스넬의 법칙(Snell's law)에 의해 계산되며, 공식은 다음과 같다.
    $$\eta_1 \sin\theta_I = \eta_2 \sin\theta_t$$
  • 재귀적 알고리즘 (Recursive Algorithm): 광선 추적법은 반사 광선과 굴절 광선이 씬을 빠져나가거나 미리 정해진 재귀 레벨(Recursion level)에 도달할 때까지 광선 트리(Ray tree)를 확장하며 반복 계산하는 특징을 가진다. 각 노드에서 반사 광선으로 계산된 색상은 표면의 반사 계수($m_s$)와 곱해지고, 굴절 광선으로 계산된 색상은 투과 계수와 곱해진 후, 이를 그림자 광선의 결과와 더하여 부모 노드로 값을 넘겨준다.

순방향 vs 역방향 광선 추적법

  • 순방향 (Forward Ray-Tracing): 실제 현실에서 빛이 작동하는 방식이다. 태양과 같은 광원에서 무수히 많은 빛이 뿜어져 나와 사물에 부딪히며 반사되다가, 그중 아주 일부만 카메라(관찰자의 눈)에 들어온다. 이 방식을 컴퓨터로 시뮬레이션하면 카메라에 도달하지 않는 불필요한 광선까지 모두 연산해야 하므로 매우 비효율적이다.
  • 역방향 (Backward Ray-Tracing): 컴퓨터 그래픽스에서 실제로 사용하는 방식이다. 반대로 시점(카메라)에서 화면의 픽셀들을 향해 광선을 쏘아 보낸다. 이렇게 하면 최종적으로 화면에 보이게 될 유의미한 광선의 경로만 역추적하여 계산할 수 있으므로 연산 효율이 높아진다.

1차 광선과 2차 광선

 렌더링할 이미지의 픽셀 수만큼 카메라에서 광선이 발사된다.

  • 1차 광선 (Primary Ray): 카메라에서 특정 픽셀을 통과해 3D 씬(Scene) 내부로 쏘아지는 최초의 광선이다.
  • 1차 광선이 물체 표면(교차점)에 부딪히면, 해당 지점의 색상을 결정하기 위해 세 가지 종류의 2차 광선(Secondary Rays)을 새롭게 파생시킨다.

세 가지 2차 광선 (Secondary Rays)의 역할

  • 그림자 광선 (Shadow Ray): 교차점에서 광원(Light)을 향해 똑바로 쏘는 광선이다.
    • 광원을 향해 가던 중 다른 물체(장애물)에 부딪히면 빛이 차단된 것이므로 해당 지점은 그림자 영역에 있다고 판단한다(직접 조명 무시).
    • 만약 장애물 없이 광원에 도달하면, 퐁(Phong) 모델 등을 사용해 해당 광원에 의한 직접 조명을 계산한다.
  • 반사 광선 (Reflection Ray): 물체 표면에 입사된 1차 광선이 표면의 법선(Normal)을 기준으로 반사되어 나가는 경로를 추적한다.
    • 입사 벡터를 $I_1$, 법선 벡터를 $n_1$이라고 할 때, 반사 광선 $r_1$은 다음 수식을 통해 계산된다.
    • $$r_1 = I_1 - 2n_1(n_1 \cdot I_1)$$
  • 굴절/투과 광선 (Refraction / Transmitted Ray): 물체가 반투명(Translucent)하거나 투명할 때만 파생된다. 빛이 매질을 통과하며 꺾이는 현상을 계산한다.
    • 이는 매질의 굴절률(Refractive index, $\eta$)을 사용하는 스넬의 법칙(Snell's law)에 의해 계산되며 수식은 다음과 같다.
    • $$\eta_1 \sin\theta_I = \eta_2 \sin\theta_t$$

재귀적 알고리즘과 광선 트리 (Ray Tree)

  • 광선 추적법은 본질적으로 재귀적(Recursive)인 성질을 가진다.
  • 표면에서 튕겨 나간 반사 광선($r_1$)과 투과된 굴절 광선($t_1$)은 스스로가 새로운 1차 광선이 된 것처럼 씬 내부를 날아가다가 다른 물체에 부딪히면 또다시 새로운 그림자, 반사, 굴절 광선을 파생시킨다. (불투명한 물체에 부딪히면 투과 광선은 무시된다.)
  • 이렇게 가지를 뻗어 나가는 구조를 광선 트리(Ray Tree)라고 부른다.
  • 이 재귀 과정은 광선이 씬 밖으로 완전히 빠져나가거나, 시스템이 미리 정해둔 최대 튕김 횟수(Recursion level)에 도달하면 종료된다.

 

최종 색상의 합산 과정

 광선이 끝까지 추적된 후에는 트리 구조를 따라 거꾸로 올라오며 색상을 더한다.

  • 반사 광선이 가져온 색상은 표면의 정반사 계수($m_s$)와 곱해진다.
  • 굴절 광선이 가져온 색상은 재질 특유의 투과 계수와 곱해진다.
  • 이렇게 조정된 반사 및 굴절 색상을 그림자 광선이 구해온 직접 조명 색상과 모두 더한 뒤, 이 합산된 최종 결과값을 부모 노드(원래 픽셀 방향)로 전달하여 픽셀의 최종 색상을 결정하게 된다.
    $$I = I_{direct} + m_s I_{reflect} + k_t I_{transmit}$$

3. 환경 매핑 (Environment Mapping)

빛나는 객체가 주변 환경을 반사하는 모습을 구현하기 위한 기법이다. Ray-tracing으로 구현하면 실시간 그래픽스에서는 연산 비용이 지나치게 비싸기 때문에, 이를 근사화하여 사용하는 지역 조명 모델 중 하나이다.

  • 원리 (Cube Mapping): 환경 맵(Environment map)이라는 특수 텍스처를 모델링 단계에서 아티스트가 미리 준비하여 객체 주변의 환경을 캡처해 둔다. 큐브 형태의 맵이 가장 대중적이며, 카메라에서 1회 반사된 벡터 $R$을 추적해 큐브 맵 표면의 텍스처 색상을 가져와 색상을 결정한다.
  • 한계점과 해결책: 환경 맵은 전역 조명 모델이 아니기 때문에, 객체 자체의 오목한 구조가 스스로를 반사하지 못하며, 객체가 이동할 때 반사되는 환경이 부정확해진다는 명확한 한계가 존재한다. 이를 해결하기 위해 객체가 유의미하게 이동할 때마다 환경 맵을 새로 생성해 주는 동적 환경 매핑(Dynamic environment mapping)이 주로 사용된다.

환경 매핑의 도입 배경

 표면이 매끄럽고 반짝이는 물체는 주변 환경을 반사하는 성질을 갖고 있다. 이 반사 효과를 Ray-tracing으로 구현하면 물리적으로 잘 나타내지만, 실시간 렌더링에서 사용하기에는 연산 비용이 비싸다는 문제가 있다.

  • Environment Mapping: 연산이 가벼운 지역 조명 모델을 기반으로 하지만, Ray-tracing의 반사 효과를 근사화하여 실시간 환경에서도 그럴듯한 반사 재질을 표현하게 한다.

 

Environment map과 Cube map의 원리

 Environment mapping을 구현하기 위해서는 주변 환경의 모습을 캡처해 둔 특수한 텍스처인 Environment map이 필요하다.

  • 큐브 맵 (Cube Map): 가장 대중적으로 쓰이는 Environment map이다. 주변 환경을 90도 시야각을 가진 6장의 정사각형 이미지로 렌더링하여, 마치 정육면체 상자가 물체를 둘러싸고 있는 것처럼 구성한다.
  • 작동 원리 (단순화된 광선 추적법):
    • 1. 카메라(관찰자)에서 물체 표면의 점 $p$를 향해 광선 $I$를 쏜다.
    • 2. 점 $p$의 법선 벡터 $n$을 기준으로 반사 광선 $R$을 계산한다. 수식은 다음과 같다.
      $$R = I - 2n(n \cdot I)$$
    • 3. 계산된 반사 광선 $R$이 물체를 둘러싼 큐브 맵의 어느 면에 부딪히는지 추적한다.
    • 4. 부딪힌 지점의 텍스처 색상을 가져와 물체 표면 $p$의 색상으로 결정한다.
  • 이 과정은 광선을 딱 한 번만 튕겨서 추적하는 '1회 반사(One-bounce reflection)' 방식이다.

한계점 및 해결책

 Environment mapping은 미리 구워진(Prepared) 텍스처를 표면에 덧씌우는 방식이므로, 전역 조명 모델이 아니라는 본질적인 한계를 가진다.

  • 오목한(Concave) 물체의 자체 반사 불가: 거울처럼 반짝이는 주전자라도, 주전자의 주둥이나 손잡이가 주전자 몸체에 반사되어 비치는 현상은 표현할 수 없습니다. 환경 맵에는 먼 배경의 이미지만 담겨 있을 뿐, 물체 자신의 모습은 포함되어 있지 않기 때문이다.
  • 이동 시 부정확한 반사: 물체가 고정되어 있을 때는 매우 자연스럽지만, 물체가 씬(Scene) 내부를 이리저리 이동하게 되면 실제 주변 환경과 물체에 반사된 환경 맵의 풍경이 일치하지 않는 어색함이 발생한다.
  • 해결책 (동적 환경 매핑): 물체가 유의미하게 이동할 때마다 해당 물체의 새로운 위치를 기준으로 환경 맵 텍스처를 실시간으로 다시 생성하여 덧씌우는 동적 환경 매핑(Dynamic environment mapping)을 사용하여 이 문제를 해결한다.

 

4. Ambient Occlusion

주변광(Ambient light)이 다른 물체나 지형에 의해 얼마나 가려지는지(Occluded)를 추정하여 간접 조명을 더 입체적으로 표현하는 기법이다.

  • 원리: 퐁 조명 모델은 주변광이 모든 방향에서 균일하게 들어온다고 가정하지만, 실제로는 주변 환경에 의해 일부 방향의 빛이 차단된다. 이를 계산하기 위해 객체 표면에서 가상의 반구(Hemisphere)를 생성하고, 반구 공간 내에 막혀 있는 공간(Occupied space)과 비어 있는 공간(Empty space)의 비율을 구해 가려짐 정도(Occlusion degree)를 계산한다.
  • SSAO (Screen-Space Ambient Occlusion): 가려짐 정도를 구하기 위해 광선을 직접 쏘는 것(Ray-casting)은 비용이 높다. 따라서 반구 내에 샘플링된 점들과 깊이 맵(Depth map)을 이용한 깊이 테스트를 통해 비율을 근사화하는데, 이를 SSAO라고 부른다. Ray-tracing보다 훨씬 저렴한 연산 비용으로 물체의 깊이감과 입체감을 더할 수 있다.
  • SSAO의 한계점: 화면 공간(Screen-space) 내의 정보만 사용해 계산하기 때문에, 화면 시야각 밖에 존재하는 객체에 의해 발생하는 가려짐은 계산할 수 없으며 가려짐 비율이 상대적으로 부정확해질 수 있다는 단점이 있다.

Ambient Occlusion (AO)의 등장 배경

 기존의 Phong Lighting model에서는 간접 조명을 표현할 때 주변광(Ambient light)이 표면의 모든 방향에서 균일하게 들어온다고 단순하게 가정하였다. 하지만 실제 현실에서는 주변 지형에 의해 빛이 차단되는 Occluded 현상이 발생한다. Ambient Occlusion은 이러한 가려짐을 계산하여 어두워야할 곳을 어둡게 만들어주는 기법이다.

가려짐 정도(Occlusion Degree) 계산 원리

  • 주변광이 얼마나 차단되는지 파악하기 위해 표면의 점을 기준으로 가상의 반구(Hemisphere)를 형성한다.
  • 원칙적으로는 이 반구 내에서 사방으로 광선을 쏘아(Ray-casting) 부딪히는 물체가 있는지 확인한다.
  • 이를 통해 반구 내 공간 중 다른 물체로 채워진 공간(Occupied space)과 비어있는 공간(Empty space)의 비율을 구하고, 이 가려짐 정도에 비례하여 주변광의 강도를 줄인다

SSAO (Screen-Space Ambient Occlusion) 기법

  • 반구 안에서 무수히 많은 광선을 직접 쏘는 것은 연산 비용이 너무 비싸다.
  • 이를 가볍게 처리하기 위해 고안된 대안이 SSAO이다. SSAO는 카메라 시점 기준의 깊이 맵(Depth map)과 반구 내에 샘플링된 점들의 깊이를 비교(Depth test)하여 가려짐 비율을 빠르게 근사화한다.
  • 본질적으로는 지역 조명(Local illumination) 모델이지만, 적은 연산으로 전역 조명(Global illumination)과 흡사한 효과를 흉내 내는 효율적인 방식이다.

SSAO의 한계점

  • 화면 밖 객체 인식 불가: 이름 그대로 화면 공간(Screen-space) 내에 렌더링된 깊이 맵 정보만 활용한다. 따라서 카메라 시야각 바깥에 위치한 물체가 화면 안쪽 물체에 드리우는 그림자나 가려짐 효과는 계산하지 못한다.
  • 부정확한 비율: 실제 형상이 아닌 2D 화면상의 깊이 정보로만 비율을 추정하므로, 가려짐 비율이 물리적으로 완벽하게 정확하지는 않다는 단점이 있다.

 

 

** 2024-2 중간고사, 퀴즈 **

 

  • 정답: Environment Mapping

 

** 2024-2 중간고사 **

  • 정답: 두 기법에서 입사 광선 벡터의 방향을 정의하는 기준이 정반대이기 때문이다.
    • Ray tracing: 1차 광선(primary ray, $I$)을 카메라에서 표면의 교차점을 향해 들어오는 방향으로 정의한다.
    • Phong model: 빛의 방향 벡터($l$)를 표면의 교차점에서 광원을 향해 나가는 방향으로 정의한다.

 

** 2024-2 퀴즈 **

  • 정답: Ambient occlusion은 물체와 물체가 겹치거나 맞닿는 깊은 틈새 등에 자연스러운 그림자와 음영을 더해준다. 이를 통해 렌더링 된 장면 전체에 뚜렷한 깊이감(depth)과 입체감(three-dimensionality)을 부여하여 결과물의 현실감을 크게 높이는 데 기여한다.

 

** 2024-2 퀴즈**

  • 정답: primary ray가 반투명한 물체의 점 $p$에 부딪히면, 해당 지점에서 그림자 광선(Shadow ray), 반사 광선(Reflection ray), 굴절/투과 광선(Transmitted/refraction ray)의 세 가지 2차 광선(Secondary ray)이 파생된다. 부딪힌 물체가 반투명하므로 완전히 불투명한 물체와 달리 굴절 광선 또한 무시되지 않고 파생된다

    문제의 조건에서 ray tracing의 level(반사 횟수)이 1이라고 가정했으므로, 파생된 반사 광선과 굴절 광선은 씬 내부로 한 번만 더 뻗어나가 부딪힌 지점(또는 배경)의 색상을 가져오고 추적을 종료한다.

    이후 반사 광선을 통해 계산된 색상에는 표면의 정반사 계수($m_s$)를 곱하고, 굴절 광선을 통해 계산된 색상에는 재질 특유의 투과 계수를 곱한다. 마지막으로 이 색상들을 그림자 광선을 통해 구한 직접 조명 색상과 모두 합산하여 점 $p$의 최종 색상을 결정하며, 그 합산된 값이 해당 픽셀의 색상이 된다.

    $$I = I_{direct} + m_s I_{reflect} + k_t I_{transmit}$$
728x90