조명
광원

조명 개요

3D 오브젝트의 셰이딩을 계산하기 위해서는 Unity가 오브젝트에 비치는 광원의 강도, 방향 및 컬러를 알아야 합니다.

이런 프로퍼티는 씬의 광원 오브젝트를 통해 제공됩니다. 다양한 광원 타입은 각각에 할당된 컬러를 다양한 방법으로 발산합니다. 광원에 따라 광원에서 거리가 멀어질수록 약해지거나, 광원에서 받는 광원의 각도에 대한 규칙이 다를 수 있습니다. Unity에서 사용 가능한 여러 광원 타입에 대해서는 광원 타입에 자세하게 설명되어 있습니다.

Unity는 복잡한 고급 조명 효과를 각각의 여러 이용 사례에 적합한 여러 가지 다양한 방법으로 계산할 수 있습니다.

조명 기법 선택

Unity의 조명은 어떤 식으로든 ‘실시간’ 또는 ‘미리 계산된’ 조명으로 간주할 수 있으며, 두 기법을 모두 함께 사용하여 몰입감이 높은 씬 조명을 만들 수 있습니다.

이어지는 내용에서는 다양한 기법을 통해 얻을 수 있는 기회와 각 기법의 상대적인 장점과 개별적인 성능 특성을 간략하게 요약합니다.

실시간 조명

Unity의 디폴트 라이트는 방향 광원, 스폿 및 점 광원, 그리고 실시간 광원입니다. 실시간 광원은 씬에 비치는 직접광에 기여하고 모든 프레임마다 업데이트됩니다. 광원과 게임 오브젝트가 씬 안에서 움직임에 따라 조명이 즉시 업데이트됩니다. 이 현상은 씬 및 게임 뷰에서 모두 관찰할 수 있습니다.

실시간 광원의 실시간 광원 단독 효과. 반사광이 없으므로 섀도우가 완전히 검정색입니다. 스폿 광원의 원뿔 안에 있는 표면만 영향을 받습니다.

실시간 조명은 씬 내 오브젝트에 조명을 비추는 기장 기본적인 방법으로, 캐릭터나 기타 움직이는 지오메트리에 광원을 비추는 데 유용합니다.

하지만 Unity의 실시간 광원에서 나오는 광선은 단독으로 사용할 경우 반사된 빛이 2차 광원으로 사용되지 않습니다. 전역 조명 등의 기법을 사용하여 더 사실적인 씬을 만들기 위해서는 Unity의 미리 계산된 조명 솔루션을 활성화해야 합니다.

베이크된 라이트맵

Unity는 (전역 조명, 즉 GI라는 기법을 사용하여) 복잡한 정적 조명 효과를 계산하고 라이트맵이라는 레퍼런스 텍스처 맵에 저장할 수 있습니다. 이 계산 프로세스를 베이킹이라고 합니다.

라이트맵을 베이크할 때는 광원이 씬의 정적 오브젝트에 미치는 영향이 계산되고 계산 결과가 텍스처에 기록됩니다. 이 텍스처는 씬 지오메트리 위에 오버레이되어 조명 효과를 만듭니다.

왼쪽: 라이트맵이 적용된 간단한 씬. 오른쪽: Unity가 생성한 라이트맵 텍스처. 그림자 및 광원 정보가 모두 캡처됩니다.
왼쪽: 라이트맵이 적용된 간단한 씬. 오른쪽: Unity가 생성한 라이트맵 텍스처. 그림자 및 광원 정보가 모두 캡처됩니다.

이런 라이트맵에는 표면에 닿는 직접광과 씬의 다른 오브젝트나 표면에서 반사되는 간접광이 모두 포함될 수 있습니다. 이 조명 텍스처는 오브젝트의 머티리얼과 연결된 셰이더에서 컬러(알베도) 및 릴리프(노멀) 같은 표면 정보와 함께 사용될 수 있습니다.

베이크된 조명을 사용하는 경우 이런 라이트맵은 게임플레이 중에 변경되지 않으므로 ‘정적’ 라이트맵이라고 합니다. 실시간 광원은 라이트맵이 적용된 씬 위에 오버레이시켜 추가적으로 사용할 수 있지만, 라이트맵 자체를 대화식으로 변경할 수 없습니다.

이 방식을 사용할 경우 게임플레이 시에 광원을 실시간으로 움직일 수 있는 유용성을 잠재적인 성능 향상과 맞바꾸는 것이므로, 모바일 플랫폼처럼 성능이 낮은 하드웨어에 적합합니다.

자세한 내용은 조명 창 레퍼런스미리 계산된 조명을 참조하십시오.

미리 계산된 실시간 전역 조명

정적 라이트맵은 씬 내 조명 상태의 변화에 반응할 수 없지만, 미리 계산된 실시간 GI는 복잡한 씬 조명을 대화식으로 업데이트하는 기법으로 사용할 수 있습니다.

이 방식을 사용하면 조명 변화에 실시간으로 반응하는 반사광을 사용한 풍부한 전역 조명을 비춘 환경을 만들 수 있습니다. 좋은 예로 광원의 위치와 컬러가 시간에 따라 변하는 타임오브데이(time-of-day) 시스템을 들 수 있습니다. 기존의 베이크된 조명으로는 이를 구현할 수 없습니다.

미리 계산된 실시간 GI를 사용한 타임오브데이(time-of-day)의 간단한 예
미리 계산된 실시간 GI를 사용한 타임오브데이(time-of-day)의 간단한 예

이런 효과를 플레이 가능한 프레임 속도로 제공하기 위해서는 긴 시간이 걸리는 방대한 양의 숫자 계산 일부를 실시간 프로세스에서 미리 계산하는 프로세스로 전환해야 합니다.

미리 계산하면 복잡한 광원 동작을 계산하는 부담이 게임플레이 중에 발생하지 않고 여유가 있을 때 발생합니다. 이를 ‘오프라인’ 프로세스라고 합니다.

자세한 내용은 조명 및 렌더링 튜토리얼을 참조하십시오.

장점과 비용

베이크된 GI 조명과 미리 계산된 실시간 GI를 동시에 사용할 수는 있지만, 두 시스템을 모두 동시에 렌더링하는 데 사용되는 리소스의 양은 각 시스템을 렌더링하는 데 사용되는 리소스의 양을 합한 것과 정확히 동일하다는 데 주의해야 합니다. 두 라이트맵 집합을 비디오 메모리에 저장해야 할 뿐만 아니라 둘을 모두 셰이더에서 디코딩해야 하므로 처리 성능이 2배 필요합니다.

특정 조명 메서드를 다른 조명 메서드 대신 선택할 것인지는 프로젝트의 성격과 사용할 하드웨어의 성능에 따라 결정할 수 있습니다. 예를 들어 비디오 메모리와 처리 성능이 보다 제한적인 모바일 하드웨어에서는 베이크된 GI 조명 방식이 성능에 더 유리합니다. 전용 그래픽스 하드웨어가 있는 스탠드얼론 컴퓨터나 최신 게임 콘솔에서는 미리 계산된 실시간 GI를 사용하거나 두 시스템을 모두 동시에 사용할 수도 있습니다.

선택할 접근방식을 결정할 때는 특정 프로젝트와 원하는 타겟 플랫폼의 성격을 기준으로 평가해야 합니다 여러 다양한 하드웨어가 타겟인 경우에는 종종 가장 성능이 낮은 하드웨어에 따라 필요한 접근방식이 결정된다는 점을 기억해야 합니다.

참고 항목: 광원 문제 해결 및 성능

조명
광원