라이트매핑은 정적이므로 동적으로 움직이는 객체에는 적용할 수 없다. 물론 실시간 조명의 Culling Mask를 사용해 주인공에게만 조명 효과를 부여할 수 있지만 라이팅매핑이 적용된 간접광원 또는 그림자영역에 들어갔을때 밝은 조명이 비치는 부자연 스러운 장면이 연출된다.

이를 개선하기 위해 유니티는 라이트 프로브(Light Probes)라는 기능을 제공한다. 라이트프로브는 스테이지 조명이 있는 곳 주변에 라이트 프로브를 배치하고 라이트맵을 베이크할때 해당 라이트프로브에 주변부의 광원 데이터를 미리 저장해 둔다. 저장된 광원데이터는 실행시 근처를 지나치는 동적 객체에 광원 데이터를 전달해 해당 객체의 색상과 보간시켜 마치 실시간 조명과 같은 효과를 내는 방식이다.

 

Light Probe Group

라이트 프로브를 만들어 주인공을 밝게 만들어보다 하이라키뷰의 _STAGE를 선택해 메뉴에서 [Light]->[Light Probe Group]을 선택해 Light Probe Group를 생성한다. _STABE하위에 생성한 Light Probe Group의 Position이 (0,0,0)인지 다시한번 확인한다.

Light Probe는 바닥위에 위치해야 효과를 낼수 있다 따라서 Y를  1.2로 설정해 라이트프로브가 모두 바닥위에 배치되도록한다.

Edit Light Probes를 클릭하면 4개의 버튼이 나타나고 Select All 버튼을 클릭하면 라이트 프로브가 파란색으로 바낀다.

Duplicate Selected를 클릭하면 변화가 없어 보이지만 복사가 되었다 Transform축을 클릭해 이동한다.

Selected All - duplicate Selected를 반복해 Floor를 채워보자

Lighting 뷰에서 베이크 해보면 이제 Player가 Point Light색에 따라 변화하는 걸 알수 있다.

 

Anchor Override

라이트 프로브는 Player가 근접한 4개의 라이트 프로브에서 베이크된 조명값을 전달한다. 

Anchor Override기능을 이용해 보간되는 위치를 설정할 수 있다. 이 속성에 원하는 위치를 연결하면 그 위치부터 텍스처 색상이 보간되기 시작한다. 하이라키뷰의 Player를 선택하고 head를 열어 놓고 slade_mesh 3개를 선택하고 인스펙터의 Anchor Override 에 연결해준다

 

'유니티게임강좌 > 라이트매핑' 카테고리의 다른 글

[라이트매핑] 라이트매핑  (0) 2023.03.20
[라이트매핑] 광원 타입  (0) 2023.03.19

라이트매핑은 조명효과를 텍스처로 미리 만드는 과정을 말한다. 이 텍스처를 라이트맵이라고 하고 이과정을 Bake한다고 한다. 라이트맵은 실시간 렌더링화면과 오버레이돼 믹싱된다.

 

 Generate Lightmap UVs 옵션

외부에서 임포트된 모델은 Models  탭에서 Generate Lightmap UVs속성을 체크해야 라이트매핑 효과가 적용된다.

05.Models/Stair폴더의 Stair모델을 선택하고 인스펙터뷰에서 Model탭을 누르고 아래 Generate Lightmap UVs를 체크하고 Apply한다.

 

 

Contribute GI 플러그

라이트매핑을 하려면 라이트매퍼에 그 대상을 알려줘야 한다. 따라서 Barrel, Floor, Wall, Stair를 선택하고 인스펙터뷰의 Static 플래그 중 Contribute GI를 체크해야한다. 프로젝트뷰 프리팹폴더에서 처리한다.

Barrel은 동적장애물 처리를 했기때문에 Contrubute GI만 선택하고 나머지 Floor, Wall,Stair등은 Navigation Static도 선택한다. Contribute GI를 선택하지 않으면 라이트매핑 대상에서 제외된다.

라이팅뷰

메뉴에서 Window>Rendering>Lighting을 선택해 라이팅 뷰를 열고 Scene탭을 클릭한다. 라이팅뷰는 4개의 영역으로 분리돼 있으며 라이팅매핑을 위한 다양한 속성을 제공한다. 먼저 Scene탭의 속성은 다음과 같다.

한번도 라이트맵을 베이킹하지 않았다면 모든 섹션이 비활성화 되어 있습니다 .[New Lighting Settings]버튼을 클릭해 새로운 라이팅 세팅을 생성한다. 생성한 라이팅 섹션의 이름을 씬이름과 동일하게 Play라고 지정한다.

아래 Auto Generate속성을 체크하면 라이트맵을 백그라운드로 베이크한다. 씬뷰에 새로운 모델 또는 조명을 변경하면 라이트매퍼가 다시 베이크작업을 시작한다. 이때 오른쪽 아래 있는 상태바에 베이크 과정이 표시된다. 라이트맵은 캐시에 저장되는데 캐시는 실행파일에 포함되지 않으므로 실행파일과 함께 배포하려면 반드시 Auto Generate 옵션을 끄고 수동으로 베이크한다.

Progressive 라이트매퍼

Progressive 라이트매퍼는 경로추적기반의 라이트매퍼로서 라이트맵과 라이트프로브를 점진적으로 베이크하는 기능을 제공한다. 또한,  Progressive GPU라이트매퍼는 GPU의 그래픽 가속 기능을 이용해 좀 더 빠르게 라이트 매핑을 할 수 있다. 기존 Enlighten 라이트매퍼는 베이크가 완료전까지는 결과물을 볼수 없으나 Progressive 라이트 매퍼는 대략적인 결과물을 바로 보여준다. 

 

라이팅뷰의 Environment

라이트맵을 수동으로 베이크해보자. 씬뷰에 있는 Directional Light는 Realtime조명으로 씬을 전체적으로 비췄던 조명이다. 라이트맵의 결과물을 확인하기 쉽게 이걸 잠시 비활성화한다.

조명을 비활성화해도 희미하게 보이는데 Skybox의 하늘빛이 환경 광원으로 작용하고 있다. 환경광원은 Ambient Light라고도 한다. 바닥에도 반사광이 표시된다. 

라이트뷰를 열어 Environment탭을 선택해 보면 Source가 Skybox로 되어 있어서 그렇고  Intensity Multiplier를 2로 변경하면 좀더 밝아진다.

어둡게 하기위해 Soruce를 color로 바꾸고 검정색을 선택한다.

Environment Reflection속성은 3D 모델 표면에 반사 광원의 효과를 설정하는 옵션이다. 기본값인 Skybox의 빛을 Floor에 비추고 있다. Source를 Custom으로 변경하거나 반사율을 나타내는 Intensity Multiplier속성을 0으로 설정하면 바닥이 어둡게 된다.

Baked 라이트매핑

Baked 라이트매핑을 위해 먼저 라이팅뷰의 [Scene]탭으로 이동한 다음 Realtime Lighting 섹션에서 Realtime Global Illumination 속성을 언체크한다. 이 기능은 전역조명을 실시간 계산해서 반영하는것으로 게임용 PC에서 적합하다.

Mixed Lighting - Baked Global Illumination을 체크하고 Lighting Mode는 Subtractive로 설정해 라이트맵과 라이트프로브, 그림자를 모두 하나의 라이트맵에 베이크한다.

조명을 여러개 배치하기 위해 하이라키뷰의 _STAGE를 선택하고  Point Light를 차일드로 추가한다. Point Light속성은 intensity는 10으로 다음 표과 같이 설정한다. 조명의높이는 주인공의 키 높이 정도로 Y:2정도로 올려서 스테이지에 배치한다.  10개정도  카피해서 배치한후. 색은 R G B 원색으로 각각 바꿔준다.

AutoGenerate 기능이 켜져있기 대문에 조명을 추가하면 바로바로 라이트맵을 베이크하기 시작하고 시간이 지나면서 품질이 좋와진다. 대신 AutoGenerate 기능이 켜져있어 조명을 추가할때마다 엄청 부하가 먹는다 

 

라이트맵 베이크

라이트맵을 캐시가 아닌 텍스처파일로 베이크하려면 백그라운드기능을 꺼야한다 .라이트뷰 Auto Generate 옵션을 언체크한다.

Generate Lighting을 클릭하면 열심히 렌더링한다 제대로 조명이 안나온다면 오브젝트의 Static에 GI가 체크되어 있는지 확인해본다

Lighting 뷰의 [Baked Lightmaps]탭을 누르면 라이트맵을 확인할 수 있다. 포토샵에서 편집이 가능하다.

L

Area Light

_Stage 오브젝트의 자식으로 Area Light를 하나 만들고 벽쪽으로 배치하고 다음과 같이 길게 만들어 본다. Area Light는 유일하게 실시간 라이트가 아니다. 베이크후 효과를 볼 수 있다.

 

Realtime Lighting

이 섹션에는 인라이튼 실시간 전역 조명 시스템과 관련된 설정이 포함되어 있습니다.

프로퍼티기능

Realtime Global Illumination 이 체크박스를 선택하면 Unity는 이 조명 설정 에셋을 사용하는 씬에서 인라이튼 실시간 전역 조명 시스템을 활성화합니다.
Realtime Environment Lighting 인라이튼 실시간 전역 조명 시스템을 사용하여 주변광을 실시간으로 계산하고 업데이트하려면 이 프로퍼티를 활성화합니다.

이 프로퍼티는 씬에서 인라이튼 실시간 전역 조명  베이크된 전역 조명이 모두 활성화된 경우에만 사용할 수 있습니다.

 

Mixed Lighting

이 섹션에는 조명 설정 에셋을 사용하는 씬 내 베이크된 광원  혼합 광원의 동작에 영향을 주는 설정이 나와 있습니다.

프로퍼티:기능:

Baked Global Illumination 이 설정을 활성화하면 Unity는 이 조명 설정 에셋을 사용하는 씬에 대해 베이크된 전역 조명 시스템을 활성화합니다. 이 설정을 비활성화하면 Unity는 이 조명 설정 에셋을 사용하는 씬에 대해 베이크된 전역 조명 시스템을 비활성화합니다.

베이크된 전역 조명 시스템을 활성화하면 Unity는 라이트매핑의 경우에만 씬에서 베이크된 광원을 사용하고, 혼합 광원은 Lighting Mode 설정에 따라 동작합니다. 베이크된 전역 조명 시스템을 비활성화하면 Unity는 씬의 모든 베이크된 광원과 혼합 광원이 실시간 광원처럼 동작하도록 강제로 지정합니다.
Lighting Mode Unity가 이 조명 설정 에셋을 사용하는 씬 내 모든 혼합 광원에 사용할 조명 모드를 지정합니다.

조명 모드를 변경하면 이 조명 설정 에셋을 사용하는 씬의 조명 데이터를 다시 베이크해야 합니다.
  Baked Indirect 이 조명 설정 에셋을 사용하는 씬 내 모든 혼합 광원에 Baked Indirect 조명 모드를 사용합니다.
  Subtractive 이 조명 설정 애셋을 사용하는 씬의 모든 혼합 조명에 대해 서브트랙티브 조명 모드를 사용합니다.

  Shadowmask 이 조명 설정 애셋을 사용하는 씬의 모든 혼합 조명에 대해 섀도우 마스크 조명 모드를 사용합니다.

 

Lightmapping Settings

프로퍼티기능

Lightmap Resolution 라이트맵에 사용할 단위당 텍셀 수를 지정합니다. 이 값을 높게 설정하면 라이트맵 품질이 개선되지만 베이크 시간도 늘어납니다. 이 값을 두 배로 늘리면 라이트맵의 높이와 너비가 모두 2배가 되기 때문에 텍셀 수는 4배로 증가합니다. 조명 창의 통계 영역에서 Occupied texels 수를 확인할 수 있습니다.
Lightmap Padding 베이크된 라이트맵의 개별 셰이프 간 간격을 텍셀 단위로 결정합니다. 기본값은 2입니다.
Max Lightmap Size 개별로 포함된 게임 오브젝트 영역을 통합하는 전체 라이트맵 텍스처의 크기(픽셀 단위)를 지정합니다. 기본값은 1024입니다.
Lightmap compression 에디터가 라이트맵에 사용하는 압축 수준입니다.
- None: 라이트맵을 압축하지 않습니다.
- Low Quality: 보통 품질보다 메모리와 저장 공간을 덜 사용하지만 시각적 결함이 발생할 수도 있습니다.
- Normal Quality: 메모리 사용량과 화질 사이의 균형을 유지합니다.
- High Quality: 보통 품질보다 더 많은 메모리와 저장 공간이 필요하지만 더 나은 시각적 결과를 제공합니다.
Ambient Occlusion 베이크된 앰비언트 오클루전에서 상대 표면 밝기를 제어할 수 있습니다. 이것은 조명을 베이크하는데 사용하는 라이트매퍼에 의해 계산된 간접 조명에만 적용됩니다. 기본적으로 활성화되어 있습니다. 앰비언트 오클루전이 활성화되면 최대 거리, 간접 조정, 직접 조정의 세 가지 설정이 노출됩니다. 세 가지 설정 모두 값이 높을수록 오클루전된 영역과 조명을 완전히 받은 영역 간의 콘트라스트가 더욱 증가합니다.
Max Distance 오브젝트에 오클루전을 적용할지 결정하기 위해 조명 시스템에서 광선을 투사하는 거리를 지정합니다. 값이 높을수록 더 긴 광선이 생성되고 라이트맵에 그림자가 더 많이 추가되는 한편, 값이 낮을수록 오브젝트가 서로 매우 가까이에 있는 경우에만 그림자를 추가하는 더 짧은 광선이 생성됩니다. 값을 0으로 설정하면 최대 거리가 없는 무한하게 긴 광선이 투사됩니다. 기본값은 1입니다.
Indirect Contribution 최종 라이트맵의 오브젝트에서 바운스되고 방출되는 간접 주변광의 밝기를 스케일합니다. 0과 10 사이의 값으로 기본값은 1입니다. 값이 1보다 작으면 강도가 감소하고 값이 1보다 크면 증가합니다.
Direct Contribution 직접광의 밝기를 스케일합니다. 0과 10사이의 값으로 기본값은 0입니다. 값이 높을수록 에디터가 직접 조명에 적용하는 콘트라스트가 증가합니다.
Directional Mode 오브젝트 표면의 각 포인트에서 가장 우세하게 비추는 광원의 특성에 관한 정보를 저장할 수 있는 라이트맵을 활성화합니다. 자세한 내용은 방향성 라이트매핑을 참조하십시오. 기본 모드는 Directional입니다.
Directional Directional 모드에서 Unity는 광원에서 비추는 우세한 방향을 저장하는 두 번째 라이트맵을 생성합니다. 이를 통해 디퓨즈 노멀 매핑된 머티리얼을 전역 조명 시스템과 연동할 수 있습니다. 셰이더는 렌더링하는 동안 두 개의 라이트맵 텍스처를 샘플링합니다. 결과적으로 방향성 모드는 추가 라이트맵 데이터를 위해 비방향성 모드보다 약 2배의 비디오 메모리를 필요로 합니다. 추가 방향성 텍스처를 생성하면 베이킹 성능에 영향을 줍니다. 방향 라이트맵은 SM2.0 하드웨어에서 또는 GLES2.0을 사용할 때 디코드할 수 없습니다.
Non-directional Non-directional 모드 라이트맵에는하나의 텍스처만 포함됩니다. 결과적으로 방향 라이트맵보다 비디오 메모리와 저장 공간이 적게 필요하며 셰이더에서 더 빠르게 디코드할 수 있습니다. 이러한 최적화는 화질을 저하합니다.
Indirect Intensity 실시간 및 베이크된 라이트맵에 저장되는 간접광의 밝기를 결정합니다. 0과 5 사이의 값입니다. 값을 1보다 크게 설정하면 간접광의 강도가 증가하고, 값을 1보다 작게 설정하면 간접광의 강도가 감소합니다. 기본값은 1입니다.
Albedo Boost Unity가 표면 사이에서 바운스하는 광원의 양을 지정합니다. 이 값은 1에서 10 사이입니다. 이 값을 높게 설정할수록 간접광 계산을 위해 알베도 값을 흰색으로 끌어옵니다. 기본값은 1이며 물리적으로 정확합니다.
Lightmap Parameters 라이트맵 파라미터 에셋은 베이크된 전역 조명과 관련된 설정 값을 저장합니다. 에디터는 선택할 수 있는 몇 가지 기본 라이트맵 파라미터 에셋을 제공하지만 Create New 옵션을 사용하여 자체 라이트맵 파라미터 파일을 만들 수도 있습니다. 자세한 내용은 라이트맵 파라미터를 참조하십시오. 기본값은 Default-Medium입니다. 옵션은 Default-Medium, Default-HighResolution, Default-LowResolution 및 Default-VeryLowResolution입니다.

'유니티게임강좌 > 라이트매핑' 카테고리의 다른 글

[라이트매핑] 라이트 프로브  (2) 2023.03.20
[라이트매핑] 광원 타입  (0) 2023.03.19

광원 타입

이 페이지는 Type 프로퍼티가 Light 컴포넌트에 미치는 영향에 대해 설명합니다.

Type 프로퍼티를 사용하여 조명의 동작 방식을 선택할 수 있습니다. 사용할 수 있는 값은 다음과 같습니다.

  • 점 광원, 씬의 한 점에 위치하여 모든 방향으로 균등하게 빛을 발산하는 광원
  • 스폿 광원, 씬의 한 점에 위치하여 원뿔 모양으로 빛을 발산하는 광원
  • 방향 광원, 무한히 멀리 위치하여 한 방향으로만 빛을 발산하는 광원
  • 면 광원, 씬에서 사각형 또는 디스크로 정의하며 표면 영역 전체에 걸쳐 균등하게 모든 방향으로 빛을 방출하지만 사각형 또는 디스크의 한쪽 면에서만 빛을 방출하는 광원

점 광원

점 광원은 공간의 한 점에 있고, 광원을 모든 방향으로 균등하게 내보냅니다. 표면에 닿는 광원의 방향은 광원이 닿은 지점에서 라이트 오브젝트의 중심으로 다시 이어지는 선입니다. 광도는 광원에서 거리가 멀어질수록 약해지고, 지정된 거리에서 0이 됩니다. 이를 ‘역제곱 법칙’이라고 하며, 광원이 실제 세계에서 작용하는 방법과 유사합니다.

점 광원은 씬에 있는 램프와 기타 로컬 광원을 시뮬레이션하는 데 유용합니다. 스파크 또는 폭발에서 발생하는 광원이 주변을 실감나게 비추게 하는 데도 사용할 수 있습니다.

씬의 점 광원 효과

스폿 광원

스폿 광원은 점 광원과 마찬가지로 광원이 떨어지는 지정된 위치와 범위가 있습니다. 하지만 스폿 광원은 특정 각도로 제약되므로 조명이 비추는 원뿔 모양의 영역이 발생합니다. 원뿔의 중앙은 라이트 오브젝트의 전방(Z) 방향을 가리킵니다. 또한 광원은 스폿 광원 원뿔의 가장자리로 갈수록 약해집니다. 각도를 넓히면 원뿔의 너비가 증가하고 ‘페넘브라’라고 하는 이 페이드(광원이 약해지는 영역)의 크기도 함께 커집니다.

스폿 광원은 일반적으로 플래시라이트, 자동차 헤드라이트 및 서치라이트 같은 인공 광원으로 사용됩니다. 스크립트나 애니메이션에서 방향을 제어하는 움직이는 스폿 광원은 씬의 작은 영역에만 광원을 비추고 극적인 조명 효과를 만들어 냅니다.

씬의 스폿 광원 효과

방향 광원

방향 광원은 씬에서 햇빛 같은 효과를 만드는 데 유용합니다. 여러 면에서 태양처럼 동작하는 방향 광원은 무한한 거리에 멀리 떨어져 있는 광원이라고 생각할 수 있습니다. 방향 광원은 확인할 수 있는 광원 포지션이 없으므로, 라이트 오브젝트를 씬의 아무 위치에나 배치할 수 있습니다. 씬의 모든 오브젝트에는 광원이 항상 같은 방향에서 오는 것처럼 비춥니다. 광원과 타겟 오브젝트의 거리는 정의되어 있지 않으므로 광원이 약해지지 않습니다.

방향 광원은 게임 세계의 범위 밖에 있는 위치에서 오는 크고 먼 광원을 표현합니다. 사실적인 씬에서는 방향 광원을 사용하여 해나 달을 시뮬레이션할 수 있습니다. 추상적인 게임 세계에서는 빛이 정확하게 어디서 오는지 지정하지 않고 오브젝트에 사실적인 셰이딩을 추가하는 데 유용한 방법이 될 수 있습니다.

씬 내 방향 광원 효과

기본적으로 새 Unity 씬에는 모두 방향 광원이 있습니다. 여기에서 방향 광원은 조명 패널의 환경 조명 섹션(Lighting>Scene>Skybox)에서 정의되는 절차적 스카이 시스템에 연결됩니다. 기본 방향 광원을 삭제하고 새 광원을 만들거나 간단히 ‘Sun’ 파라미터(Lighting>Scene>Sun)에서 다른 게임 오브젝트를 지정하여 이 동작을 변경할 수 있습니다.

기본 방향 광원(즉 ‘Sun’)을 회전하면 ‘스카이박스’가 업데이트됩니다. 빛이 지면과 평행하게 측면에 비스듬하게 비치도록 하면 일몰 효과를 얻을 수 있습니다. 또한 빛이 위쪽을 향하게 하면 밤이 된 것처럼 하늘이 검게 변합니다. 빛을 위에서 비스듬하게 비추면 하늘이 주간과 유사해집니다.

스카이박스를 앰비언트 소스로 선택하면 이런 컬러에 따라 주변광이 변합니다.

면 광원

면 광원(Area lights)은 공간에 있는 사각형 또는 디스크 중 한 가지 모양으로 정의할 수 있습니다. 면 광원은 해당 모양의 한 쪽 면에서 빛을 방출합니다. 자체 광원은 해당 모양의 표면적 전체에 걸쳐 모든 방향으로 균일하게 퍼집니다. Range 프로퍼티는 해당 모양의 크기를 결정합니다. 면 광원이 제공하는 조명의 강도는 광원으로부터 거리의 역제곱에 의해 결정되는 비율로 감소합니다(역제곱 법칙 참조). 이 조명 연산에는 프로세서 성능이 꽤 많이 사용되기 때문에 면 광원은 런타임 시점에 사용할 수 없고 라이트맵으로만 베이크할 수 있습니다.

면 광원은 오브젝트를 여러 다양한 방향에서 동시에 비추기 때문에 다른 광원 타입에 비해 셰이딩이 더 부드럽고 섬세합니다. 면 광원을 사용하여 사실적인 가로등이나 플레이어 가까이에 길게 늘어선 불빛을 만들 수 있습니다. 작은 면 광원을 사용하면 실내 조명처럼 더 작은 광원을 점 광원보다 더 사실적으로 시뮬레이션할 수 있습니다.

면 광원의 전체 표면에서 발산되어 부드러운 그림자를 생성하는 산란광을 만듭니다.

'유니티게임강좌 > 라이트매핑' 카테고리의 다른 글

[라이트매핑] 라이트 프로브  (2) 2023.03.20
[라이트매핑] 라이트매핑  (0) 2023.03.20

+ Recent posts