관리 메뉴

caLAB

[유니티 개발] Lighting 본문

Unity/유니티 개발

[유니티 개발] Lighting

도이(doi) 2021. 12. 14. 18:02
728x90

유니티에서 visual 퀄리티를 높이는 가장 효과적인 방법은 Lighting이다. 

Lighting만 신경써서 잘 작업해두어도 작업물의 퀄리티가 확 올라간다.

 

유니티에서 제공하는 기본 템플릿에서 라이팅 셋업을 어떻게 해두었는지를 분석해보았다.

주로, 라이팅 및 환경 셋업에 사용되는 요소들은 아래와 같다. 

 

- Reflection Probe

- Light Probe

- Gradient Skybox

- Directional Light

- Point Light

- Volume

- Fog

- Particle (먼지, 빛)

 

위의 요소들이 환경의 분위기를 만들어내는 매우 중요한 요소로써 작용하고 있다.

이 중에서 Reflection Probe, Light Probe, Volume에 대해서 정리해보도록 하겠다. 

Reflection Probe

reflection probe는 환경을 cube map에 저장한 후에 이것을 반사 재질의 material에 적용시키는 것이다. 

반사되는 오브젝트의 반사를 주변 환경과 어울리게 변화시킬 수 있다. 

reflection을 만드는 방법으로는 volume에서 screen space reflections를 세팅하는 방법과 reflection probe를 사용하는 방법이 있다. screen space reflections의 경우에는 opaque에서만 적용 가능하기 때문에 투명한 material 즉, 유리에는 적용이 힘들다, 주로 젖은 땅에 사용하게 된다. reflection probe는 material의 설정을 통해서 refraction(굴절)을 조절할 수 있다.  transparency, smoothness와 thickness 등을 조절하여 사실감 있는 유리의 표현을 할 수 있다. 주로 baked로 설정을 놓고 사용한다. baked는 한 번 환경을 저장한 후 그것을 계속 사용하는 것이라 performance에 유리하다. reflection 데이터를 받지 못하는 경우 반사 재질의 material은 skybox를 기본적인 reflection 데이터로 사용한다. 

Light Probe

라이트 맵핑을 실시간으로 처리하는데 비용이 많이 들기 때문에 light probe에 해당 빛에 대한 정보를 샘플링하고 user가 이동할 때 가까운 light probe 끼리 사이 지점을 보간해준다. 그래서 마치 realtime으로 빛에 인터렉션하는 효과를 퍼포먼스를 유지하면서 보여준다. Light Probe를 생성해주는 기준은 그림자의 영향을 받는 사이 혹은 환경 색의 변화가 있는 곳이다. 사이에서 보간을 받아야 되기 때문에 경계를 기준으로 light probe를 양분해서 생성해주면 좋다. light probe에서 bake할 object들은 static으로 설정한다. 종종 Auto Generate로 Light를 설정해두면 In Game모드에서 이상한 현상이 일어나기 때문에 Auto Generate모드를 해제하고 Generate Lighting을 하고 게임을 실행하도록 한다. 

Volume

Volume에서는 전체적인 환경이나 분위기 세팅을 할 수 있다. 우선, Volume을 만든 후에 Visual Environment를 추가.  Type에서 HDRI Sky를 선택하고 HDRI Sky를 추가해서 HDRI Sky 파일을 추가해서 적용해준다. Bloom을 추가해서 좀 더 주변 환경을 촉촉하게? 만들어준다. Fog를 추가하면 빛이 번지는 효과를 나타낼 수 있다. Project Settings > HDRP Default Settings에서 Volumetric Fog 세팅을 활성화시켜주면 좀 더 풍부한 fog 효과를 볼 수 있다. 

Fog를 좀 더 부드럽고 blur되어 보이게 하기 위한 방법은 두 가지가 있다. Filter mode를 설정하거나 Player Settings > HDRP Default Settings에서 Reprojection모드를 선택할 수 있다. 두 개를 같이 쓰면 무겁기 때문에 하나만 쓰는 것을 추천한다. 

Density Volume

영역을 설정해서 추가적인 Volume을 더할 때 사용한다. Bounding Box 영역 범위 내에서만 Volume의 효과가 보인다.

 

[라이팅 관련 개념]

Global Illumination(GI)는 라이트가 다른 곳에 반사되어서 오거나 다른 라이트와의 간섭을 연산해서 표현해주는 것을 말한다. 따라서 해당 기술은 연산 비용이 많이 들어가게 된다. 이러한 문제를 해결하기 위해서 Light map이 존재한다. 라이트맵은 라이팅 정보를 미리 연산해서 이를 텍스처로 담고 있는 것이다. baked light는 고정된(static)한 오브젝트에 적용한다.

앰비언트 오클루전(Ambient Occlusion) 은 주변광(특정 방향에서 발생하지 않는 조명)이 표면의 한 점에 얼마나 영향을 미치는지 대략적으로 나타냅니다. 앰비언트 오클루전(AO)은 서로 가까이 있는 주름, 구멍 및 표면을 어둡게 합니다. 이 영역은 주변광을 가리므로(차단) 더 어두워 보입니다.

미리 계산된 실시간 GI만 사용하는 경우(미리 계산된 조명 사용 문서 참조), 간접 조명에 사용되는 해상도로는 아주 디테일한 부분이나 동적 오브젝트를 캡처하지 못하므로 실시간 앰비언트 오클루전 포스트 효과를 사용하는 것이 좋습니다. 이 효과는 훨씬 더 디테일한 부분을 많이 가지고 있으며, 결과적으로 조명 품질을 향상시킵니다.

Lightmap UV

[참고]

https://wonsorang.tistory.com/515

 

유니티 그래픽스 최적화 - 7.GI (Global Illumination)

. . 7. GI (Global Illumination) ​ 라이트와 그림자는 연산이 비싸기 때문에 라이트맵과 라이트 프로브 등 미리 연산하는 솔루션들을 적극 활용, 절약하면 좋다. GI 적용 가능. 광원이 태양광 하나로 출

wonsorang.tistory.com

https://chulin28ho.tistory.com/446

 

유니티 신 버전 라이트맵 사용하기 6 ( Using Unity 2017 Lightmap - 6)

Baked Light 이번엔 전통적인 Baked Lighting 입니다. 말그대로 텍스쳐로만 모든 것을 구워버리는 방식이지요. 이걸 하기 위해서는 다음을 준비해야 합니다. - 조명은 Baked로 - GI 적용을 원하는 오브젝트

chulin28ho.tistory.com

 

728x90
반응형
Comments