-
라이트맵유니티/유니티 기능 2024. 3. 8. 13:09
컴퓨터 그래픽에서 사용하는 라이팅은 굉장히 무겁고 연산비용이 비싸다
그렇기에 유니티는 라이팅 데이터 에셋을 사용하여 라이팅 효과의 실시간 연산량을 줄이며 씬에 변화가 감지될때마다
매번 새로운 라이팅 데이터 에셋을 생성한다. 그리고 이 라이팅 데이터 에셋에 포함된 주요 데이터 중 하나가 라이트맵이다
라이트맵이란 "오브젝트가 빛을 받았을 때 어떻게 보일지" 미리 그려둔 텍스쳐로, 해당 정보를 텍스쳐 형태로 저장한다
실제로 빛 연산 정보를 사전에 계산하여 텍스쳐에 담아내는데 이 과정을 Bake 라고 한다
라이팅맵을 이용하면 실시간 라이팅 연산을 줄여주는 동시에 빛의 현상을 표현할 수 있다
(실시간으로 빛을 내는 오브젝트는 없음. 빛을 내는것처럼 보이는것뿐)
이제 실제 라이팅 맵을 쓰는 법을 알아보자
Window-Rendering-Lighting 으로 들어가면 Lighting 설정창이 뜬다
Scene창에서 Lighting Setting Asset 에서 New를 클릭하면 자동으로 Project창에 파일이 하나 생성되는것을 볼 수 있다
이름은 Main Lighting Setting으로 고쳐주자
이번엔 환경광을 설정해주자. 환경광이란 씬에 가장 기본으로 깔리는 빛으로 모든 게임오브젝트에 적용된다
또한, 모든 방향에서 같은 세기로 들어오기 때문에 그림자나 명암을 만들지 않는다. (게임 전체 색 분위기를 좌우함)
Enviroment를 선택한뒤 Eviroment Lighting - Source를 Color로 바꿔준뒤 색상은 짙은 갈색으로 조절한다
확실히 전체 컬러와 분위기가 변경된것을 볼수 있다
이번엔 글로벌 일루미네이션을 설정해보자
Global Illumination : 물체의 표면에 직접 들어오는 빛뿐만 아니라 다른 물체의 표면에서 반사되어
들어온 간접광까지 표현 (줄여서 GI라고도 함)
예상대로 글로벌 일루미네이션 역시 높은 처리량을 요구하기에 실시간으로 처리하는건 여전히 힘들다
그렇기에 어느정도 대안과 함께 타협을 하며 구현해낼수 있다
글로벌 일루미네이션에는 두가지 종류가 있다
실시간 글로벌 일루미네이션 (RealTime Global Illumination)
베이크된 글로벌 일루미네이션 (Baked Global Illumination)
둘의 공통점이라면 무조건 움직이지 않는, 고정된 오브젝트에만 적용이 가능하다. 진정한 의미의 실시간이 아니기때문
차이점이라면 글로벌 일루미네이션에 반영될 빛이 실시간으로 변할 수 있도록 허용하냐는것이다
실시간 글로벌 일루미네이션 빛의 세기와 방향등이 달라졌을때 그 변화를 간접광에 실시간으로 반영한다
베이크된 글로벌 일루미네이션은 간접광들을 라이트맵으로 구워 오브젝트위에 미리 입히는 방식이다(실시간반영X)
이제 한번 라이트맵을 구워보자
가장 먼저 RealTime Global Illumination과 Baked Global Illumination 체크하여 글로벌 일루미네이션을 활성화한다
직사광 연산을 위한 샘플링 횟수(Direction Samples) : 16으로 줄임
간접광 연산을 위한 샘플링 횟수(Indirection Samples) : 256으로 줄임
환경광 연산을 위한 샘플링 횟수(Enviroment Samples) : 128로 줄임
간접광 텍스쳐 해상도(Lightmap Resolution) : 유닛당 0.5텍셀로 줄임
라이트맵 텍스쳐 해상도(Lightmap Padding) : 유닛당 10텍셀로 줄임
이 모든 설정을 전체적으로 라이트의 품질을 낮추는 설정들이다. 정교함은 떨어져도 3D 모델리 로우품질이라면
거의 티가 나지 않으니 이 설정이 더 효율적이다
저장한 설정은 Inspector 창에서도 확인할 수 있다
'유니티 > 유니티 기능' 카테고리의 다른 글
★오브젝트 이동 간편하게 하는법 (0) 2024.03.12 오브젝트 복사시 자동이름 짓기 (0) 2024.03.12 TileMap (1) 2024.03.07 Multiple sprite (0) 2024.03.05 에셋스토어에서 에셋 다운받아 적용하기 (1) 2024.02.05