[Unity]13.라이트매핑을 이용한 조명 효과 사용법

안녕하세요 유랑입니다.



이번 시간에는 라이트 매핑에 대해 배워보겠습니다.

모바일 플랫폼에 실시간 조명을 쓰기에는 벅찬 경우가 많습니다.

라이트 매핑을 통해 조명 최적화 방법에 대해 알아보겠습니다.




1. 조명



전역 조명은 직접 광원(Direct Light)과 다른 물체에 반사된 간접 광원(Indirect Light) 및 

그림자를 렌더링하는 것을 의미합니다.

그렇기 때문에 많은 부하를 주기 때문에 하드웨어의 성능에 따라서 실시간 연산이 힘든 경우가 많습니다.

따라서 유니티는 실시간 전역 조명 이외에 미리 계산된 

전역 조명(Precomputed Realtime GI)을 처리하는 기능을 제공합니다.







1-1) 조명모드 - Realtime, Mixed, Baked



- Realtime => 씬에 직접 광을 정용하며 매 프레임 조명 연산을 해서 화면을 업데이트한다.

                   연산 부하가 크고, 간접 광원을 사용하지 않아 그림자는 검은색으로 표현한다.


- Mixed => 직접 광원과 간접 광원 모두를 사용한다.


- Baked => 런타임 시 조명 연산 처리를 하지 않는 조명이다. 정적(Static)인 물체에만 조명 연산을 처리해 

                표면의 조명과 그림자를 생성한다. 동적인 물체는 라이트 프로브를 이용해 적용한다.









1-2) 프로젝트 생성 후 설정



프로젝트 이름과 위치를 설정 후 만들어 줍니다.






라이트매핑을 적용할 맵을 만들어 보겠습니다.

에셋스토어에서 Lowpoly Modern City Decoration Set을 다운받아 주세요.

그리고 에셋들을 이용해 맵을 구성해 주세요.

간단하게 하셔도 상관없습니다.





저는 이렇게 만들었습니다.

간단하게 하려고 했는데 하다보니 욕심이 생기더라구요ㅠㅠ






1-3) Lightmap Static 플래그



라이트매핑을 하려면 대상을 알려주어야 합니다.

만들어 놓은 오브젝트들을 드래그하여 Lightmap Static 체크를 해주세요.







1-4) Generate Lightmap UVs 옵션



라이트매핑을 적용하려면 외부에서 임포트한 3D 모델의 UV를 설정해야 한다.

각 모델들을 선택 해 Generate Lightmap UVs를 체크 후 Apply를 클릭하자.







1-5) 라이팅뷰 



상단 메뉴바에서 Window => Rendering => Lighting Settings를 선택해 주자.

유니티 기본 설정값은 라이트맵을 자동으로 베이크하라고 설정되어 있다.

Auto Generate 옵션이 체크된 상태에서 베이크된 라이트맵은 캐시에 저장되며,

이 캐시를 GI Cashe라 하며 Unity Preferences 창에서 저장 경로와 사이즈 설정이 가능하다.









2. Baked 라이트매핑



2-1) 라이트 매핑 셋팅하기



이제 라이트맵을 수동으로 베이크할 차례이다.

씬 뷰에 있는 Directional Light는 Realtime 조명으로 씬을 환하게 비춘 조명이다.

라이트맵 결과물을 확인하기 위해서 비활성화 혹은 삭제를 하자.






어두운 느낌을 표현하기 위해서 Lighting => Environment Lighting로 들어간 후 설정값을 다음과 같이 변경하자.

Intensity Multiplier 속성은 반사율을 나타내는데 0으로 설정하자.

- Source => Color

- Ambient Color => Black 





실시간 전역 조명을 쓰지 않기에 Realtime Lighting 언체크하고 다음과 같이 설정하자.

Subtractive로 설정하면 라이트맵과 라이트 프로브, 그림자 모두 하나의 라이트맵에 베이크 된다.

- Mixed Lighting => Baked Global Illumination 체크

- Lighting Mode => Subtractive 설정





빈게임오브젝트를 생성 후 BakedLights 이름으로 변경한 뒤 원하는 위치마다 PointLight를 만들어 주자.





Range를 이용해 밝기의 범위, Color는 색깔, Mode는 Baked, 

Intensity 라이트의 밝기, Shadow Type은 그림자 표현 타입을 뜻한다.






2-2) Auto Generate



실시간 라이트매핑 옵션을 비활성화하자.

모바일에서는 성능 저하를 일으키는 원인이다.






Lightmap Resolution은 유닛당 텍셀값으로,

이 값을 증가시키면 라이트맵의 품질은 높아지나 베이크 시간이 증가하고,

라이트맵의 개수가 많아진다.

Lightmap Size 속성은 라이트맵의 크기를 결정하며, 하드웨어 성능을 고려해 

적절한 값을 찾아야 한다.

Gnerate Lighting을 이용해 라이트맵을 베이크 하자.





라이트맵 베이크가 완료되면 라이팅 뷰 상단의 Global Maps안에 베이크된 텍스처 확인이 가능하며,

프로젝트 뷰에 해당 라이트맵 파일들이 생성된 걸 알 수 있다.





Auto Generate 옵션을 끄고 진행할 때는 수정사항이 생겼을 대 매번 베이크하는게 번거롭기 때문에

최종 작업물에만 수동으로 베이크하는 걸 권유한다.






3. 마무리



이번 시간에는 라이트매핑을 이용해 저명 효과 주는 방법에 대해 배웠습니다.

다음 시간에는 SkyBox를 이용해 배경처리를 하겠습니다.

라이트매핑은 모바일쪽 게임 제작에 필수 사항이기에 많은 연습이 필요한 것 같아요.

저 또한 부족하기에 추후 다른 콘텐츠로 제작 해 보겠습니다.

오늘도 고생하셨습니다.

감사합니다.



수업자료: https://github.com/YouRang12/-Tistory-Unity---Basic


댓글

Designed by JB FACTORY