Version: 2018.1
조명 모드
실시간 조명

조명: 기술 정보 및 용어

  • 표면(Surface): 씬에 있는 모든 메시의 삼각형은 씬의 표면이라고 합니다. 표면의 점은 씬에 정의된 삼각형 내부의 점입니다.

  • 자체 광원(Emitted Light): 자체 광원은 씬의 표면으로 직접 방출되는 광원입니다.

  • 직접광(Direct Light): 직접광은 방출되어 씬의 표면에 부딪힌 다음에 반사되어 센서(예를 들어 눈의 홍채 또는 카메라)에 도달하는 광원입니다. 광원의 직접적인 기여는 해당 광원에서 센서에 도달하는 모든 직접광에 기인합니다.

  • 간접광(Indirect Light): 간접광은 방출되어 씬의 표면에 두 번 이상 부딪히고 나서, 결국 반사되어 센서에 도달하는 광원입니다. 광원의 간접적인 기여는 해당 광원에서 센서에 도달하는 모든 간접광에 기인합니다.

씬에서 시뮬레이션된 광원의 반사

거친 표면은 광원에 의해 직접적으로 비추어지지 않는 표면을 비추면서 다양한 방향에서 오는 광원을 산란시킵니다. 씬의 표면이 거칠수록, 그림자 영역이 더 밝게 나타납니다. 과거에는 이 효과를 직접광의 결과에 단순히 추가되는 주변광 컬러로 정의하여 근사했기 때문에 그림자 영역의 표면이 완전히 검은색으로 보이지 않았을 것입니다. 더 정교한 근사는 훨씬 더 복잡한 주변광을 가지기 위해 표면의 방향 또는 심지어 스피리컬 하모닉스에 따라 다른 앰비언트 컬러를 시뮬레이션하기 위해 경사도를 사용합니다.

부드럽고 반짝이는 표면은 입사된 광원의 대부분을 예측 가능한 방향으로 반사하여 머티리얼에 하이라이트를 생성합니다. 반짝이는 표면의 극단적인 예는 거울인데, 하나의 방향에서 들어오는 모든 입사광이 정확히 다른 한 방향으로 반사됩니다. 반짝이는 반사의 변위는 반투명한 머티리얼인데, 광원이 머티리얼에 들어온 후 다시 나갈때 입사광을 굴절시킬 수 있습니다.

간접 조명의 경우, 광원 경로는 씬의 표면과 적어도 두 번의 상호 작용을 합니다. 이 상호 작용은 반짝이거나 또는 거친 표면에서의 반사 조합이 될 수 있습니다. 예를 들어, 거친 표면에 부딪혀 생기는 글로시 반사/굴절은 커스틱(caustics)이라고 하는 모든 방향에서 보이는 광원이 집중되어 밝거나 어둡게 보이는 패턴을 나타내게 됩니다. 다른 거친 표면에 부딪혀 생기는 거친 반사를 주변광(ambient lighting)이라고 합니다.

씬 표면에 여러 번 반사되는 광원의 특성 때문에, 제대로 된 솔루션은 모든 표면 머티리얼 특성과 모든 관련된 광원의 경로에서의 광원의 상호작용을 고려해야 합니다. 이러한 이유로 전역 조명(Global Illumination)이라고 합니다.

문제 해결

광선 추적(Ray tracing)은 컴퓨터 그래픽스에서 이 문제를 해결하는 매우 훌륭한 방법인데, 씬을 통과하는 광선의 경로를 따라 현실에서 실제로 일어나는 현상에 대한 시뮬레이션을 시도합니다. 이러한 점에서 영화 산업은 이미지 생성을 위해 광선 추적 방법을 사용하고 있습니다.

안타깝게도, 광선 추적은 대부분의 실시간 그래픽스에 사용하기에는 아직 너무 느려서, 래스터화(rasterization)가 이미지를 생성하는 표준 방법입니다. 광선 추적과 달리, 래스터화는 씬을 통과하는 임의의 광원 경로를 따라갈 수 없습니다. 사실, 래스터화는 광원 경로 중 하나의 세그먼트만을 계산할 수 있습니다. 이 때문에 실시간 그래픽스에서의 조명이 복잡해집니다.

래스터화는 광선을 추적할 수 없기 때문에, 실시간 조명은 가장 시각적 효과가 큰 부분들에 집중합니다. 여기에는 이미션과 직접 조명이 해당합니다. 심지어 이러한 경우에도 광원 경로는 두 개의 세그먼트로 구성됩니다. 하나는 카메라에서 표면까지의 경로이고, 다른 하나는 표면에서 광원까지의 경로입니다.

첫 번째 세그먼트는 카메라 포지션에서 렌더링된 뷰입니다. 두 번째 세그먼트를 계산하려면, 섀도우 매핑과 같은 기술이 사용됩니다. 섀도우 맵은 그림자를 만드는 각 광원에만 적용되기 때문에, 각 광원에 대해 고유한 섀도우 맵핑이 생성되어야 합니다. 그림자를 만드는 광원이 많을수록, 더 많은 섀도우 맵이 생성되어야 합니다. 광원의 수에 따라, 렌더링 시간은 급격히 길어집니다. 섀도우 맵의 또 다른 약점은 제한된 해상도입니다. 제한된 해상도로 인해 블록 형태의 그림자가 발생합니다. 따라서 섀도우 맵은 제한된 해상도로 인해 발생하는 이미지 품질 문제와 섀도우 맵을 저장하는 메모리 요구 사항, 매 프레임마다 섀도우 맵을 생성하는 데 걸리는 시간으로 인한 성능 문제 모두를 나타냅니다.

오프라인 렌더링과는 달리, 게임에서는 하나의 프레임을 렌더링하는 데 사용할 수 있는 시간에 제한이 있습니다. 예를 들어, VR 애플리케이션은 초당 90프레임(FPS)을 달성하기 위해 한 프레임을 그리는데 11.11밀리초가 주어집니다. 빠른 플레이어 반응에 종속하는 게임은 60FPS를 위해 16.66밀리초가 주어집니다. 30FPS를 목표로 하는 게임은 33.33밀리초가 주어집니다. 이러한 시간에는 또한 AI 및 물리 현상과 같이 애플리케이션 또는 게임의 나머지 부분을 위한 산출 시간도 포함됩니다. 따라서 시스템을 최대로 활용하기 위해 모든 것을 효율적으로 만드는 것이 중요합니다. 모든 렌더링은 프레임 사이의 시간 간격보다 더 짧은 시간 안에 수행되어야 합니다.

요약

요약해 보자면, 해결해야 하는 두 가지 주요 문제는 다음과 같습니다.

  1. 직접 조명의 그림자를 계산할 때 발생하는 성능 불이익을 다루는 방법

  2. 간접 조명을 처리하는 방법(참고: 실시간 그래픽스의 맥락에서, 실제 의미가 직접 조명을 포함하지만, 전역 조명이 간접 조명과 동일한 의미로 사용됨)


  • 2017–06–08 일부 편집 리뷰를 거쳐 페이지 게시됨

  • Unity 5.6에 추가된 광원 모드

조명 모드
실시간 조명