Carrot
본문 바로가기
Unity/멋쟁이사자처럼 부트캠프

[멋쟁이사자처럼부트캠프] 유니티 게임 개발 5기(51일차) - FPS 게임 (8)

by 독기품은토끼 2025. 7. 30.
✅ 오늘의 학습 목표
1. Light 실습
2. Light Map 실습
3. Post Processing 후처리 효과 실습

1. 라이트 (Light)

Unity에서 조명을 담당하는 컴포넌트는 Light다.

Light 컴포넌트를 사용하면 씬 안의 물체들이 어떻게 보일지, 그림자는 어떻게 생길지 등을 설정할 수 있다.

 

1. 종류

 

  • Directional Light : 태양광처럼 일정한 방향으로 비추는 역할
  • Point Light : 실내나 조명 장치 등에 사용하며 자신의 위치를 기준으로 구 형태로 방사
  • Spot Light : 특정한 방향성을 가진 라이트로, 포인트 라이트에 비해 사용빈도가 낮음
  • Area Light : 형광등이나 조명 기구와 같이 면적으로 빛을 내는 역할 / 베이킹할 때만 사용

Directional / Point / Spot / Area

 

 

2. 기본 설정

General

  • Type
    Light의 종류를 설정
  • Mode
    라이트가 실시간(Realtime), 베이크(Baked), 혼합(Mixed) 중 어떤 방식으로 작동할지를 정한다.
    • Realtime: 게임 중 실시간으로 빛 계산이 이루어짐. 동적인 오브젝트에 적합하지만 성능 부담이 있다.
    • Baked: 라이트맵에 굳혀서 계산된 빛을 사용. 정적인 환경에 적합하며 성능이 좋다.
    • Mixed: 정적 오브젝트는 굽고, 동적 오브젝트는 실시간으로 처리. 적절히 균형 잡힌 방식.

Emission

  • Color
    빛의 색을 정한다. 시간대에 따라 노을 느낌을 주거나, 이색적인 분위기를 만들고 싶을 때 조정해 주면 좋다.
  • Intensity
    빛의 강도. 수치를 올릴수록 더 밝아지고, 낮추면 어두워진다.
  • Indirect Multiplier
    간접광(반사된 빛)의 세기를 조절한다. 라이트맵을 사용할 때 효과가 있다.

Rendering

  • Culling Mask
    이 라이트가 영향을 줄 오브젝트를 Layer로 지정한다. 예를 들어 UI에는 영향이 가지 않게 하고 싶다면 UI 레이어를 꺼주면 된다.

Shadows

  • Type
    그림자 생성 여부를 설정한다. 
    • None: 그림자 없음
    • Hard Shadows: 경계가 딱딱한 그림자
    • Soft Shadows: 경계가 부드러운 그림자
  • Strength
    그림자의 투명도. 1에 가까울수록 진하고, 0에 가까울수록 흐리다.
  • Bias
    그림자 오류를 줄이기 위한 설정. 값이 너무 낮으면 자기 그림자가 겹쳐 보이는 셀프 섀도잉 문제가 생기고, 너무 높으면 그림자가 붕 뜨는 듯 보일 수 있다.

 

3. Area Light

 

Area Light는 Bake 전용 라이트이기 때문에, 실시간 조명처럼 바로 보이지 않고 라이트맵에 굽는 방식으로만 작동한다.

그래서 빛의 영향을 받을 오브젝트는 Static으로 설정되어 있어야 한다.

이후 Ctrl + 9 단축키를 눌러 Lighting 창을 연 다음,

Lighting Settings Asset을 생성하고 Generate Lighting을 눌러 베이크 과정을 진행하면 Area Light가 닿는 범위에 간접광이 적용되는 것을 확인할 수 있다.

 

4. Spot Light - Cookie

 

Spot Light에는 Light Cookie를 설정해서 단순한 원형 빛 대신 원하는 모양으로 빛을 표현할 수 있다.
Light Cookie는 흑백 이미지를 이용해서 빛의 투과 모양을 마스크처럼 바꾸는 기능이다.

예를 들어 창문 그림자를 연출하거나, 로고 모양의 빛을 만들고 싶을 때 유용하다.

 

 

2. 라이트 맵 (Light Map)

정적 오브젝트들을 대상으로 미리 계산한 라이트 결과를 2D Texture로 저장하는 최적화 방법

 

 

Light Scene을 Generate하면 라이트맵과 관련된 여러 파일이 생성되는데, 이 파일들이 어떤 방식으로 저장되는지 직접 확인해 보자

 

우선 Directional Light의 Type을 Baked로 설정한다.
그리고 씬에 배치된 오브젝트 중 하나만 Static을 해제하고, 나머지는 Static으로 설정한다.
이 상태에서 Lighting 창(Ctrl + 9)에서 Generate Lighting을 눌러 베이크를 진행하면, 라이트맵이 생성되고 아래와 같은 결과를 확인할 수 있다.

 

 

씬 뷰에서 Static 오브젝트의 위치를 옮겨보면, 그림자나 색이 라이트맵에 남아있는 현상을 볼 수 있다.

 

 

이유는 간단하다.

라이트맵에는 조명 정보뿐 아니라 그림자, 색의 반사, 광량 등의 정보가 텍스처 형태로 굽혀 저장되기 때문이다.

따라서 오브젝트가 Static이 아니거나, Light의 Mode가 Realtime일 경우에는 이 라이트맵이 적용되지 않고, 실시간 조명만 적용된다.

 

또 가끔 라이트가 벽을 뚫고 비치는 현상이 생기기도 하는데,
이런 경우는 다음과 같은 원인일 수 있다:

  • 벽이 얇거나 실제로 구멍이 있는 경우
  • Light의 그림자(Shadows)가 꺼져 있는 경우

이럴 때는 Light 컴포넌트에서 Shadows를 Hard 또는 Soft로 설정하면 해결된다.
참고로, Hard Shadows는 경계가 뚜렷하고 성능이 가볍고 Soft Shadows는 경계가 부드럽지만 계산량이 더 많다.

 

 

그림자 설정이 켜진 상태에서 Generate Lighting을 다시 하면,
Shadowmask 파일이 함께 생성되는 것을 확인할 수 있다.
이 Shadowmask는 라이트맵의 그림자 정보 중 '정적인 그림자'만 따로 분리해서 저장한 데이터다.

 

 

씬 뷰 상단의 Shaded 드롭다운 메뉴를 사용하면 라이트맵 결과를 직접 시각적으로 확인할 수 있다.

  • Baked Lightmap: 오브젝트에 베이크 된 광량 확인
  • Directionality: 빛의 방향성 정보
  • Shadowmask: 정적 그림자의 마스크 정보

이 뷰들을 활용하면 라이트맵이 제대로 적용되었는지, 그림자 분포는 어떤지 직접 확인할 수 있어 조명 디버깅에 매우 유용하다.

 

 

Realtime Global Illumination

Realtime GI는 실시간으로 간접광을 계산해 주는 기능이지만,
Unity 6에서는 이 기능을 처리하던 Enlighten 시스템이 제거되었기 때문에 더 이상 사용할 수 없다.

Lighting 창에 옵션은 남아 있지만, 실제로는 작동하지 않으며 프로젝트에서 Enlighten을 사용하지 않는 경우라면 이 기능은 꺼두는 것이 맞다.

 

Baked Global Illumination

Baked GI는 조명과 오브젝트가 고정된 환경에서 간접광을 미리 계산해서 저장해 두는 방식이다.

  • Bake Indirect (간접광) : 씬에 있는 모든 Mixed 라이트에 적용된다. 그림자는 실시간으로 그리고 간접광만 라이트맵으로 표현하기 때문에 환경에서 그림자의 변화가 있을 때 사용한다.
  • Subtractive (감산) : 낮은 퀄리티의 결과를 내며, 저사양의(모바일) 디바이스를 대상으로 하는 경우 사용한다. / 최후의 대안
  • Shadow mask : 라이트맵 이외에도 추가로 방향과 그림자에 대한 맵이 생성된다. 높은 퀄리티를 원할 때 사용하며 Light Probe (라이트 프로브)를 활용할 때 해당 모드를 사용해주어야 한다.

Ambient Occlusion(앰비언트 오클루전)

틈이나 접촉면처럼 빛이 잘 닿지 않는 부분을 어둡게 표현해서 조명이 간접적으로 반사되는 느낌을 시각적으로 보완해 주는 기능

 

 

1. 환경 광 (Ambient Light)

🥕 예행 작업
1. Asset 다운로드
 

Free Stylized Skybox | 2D 하늘 | Unity Asset Store

Elevate your workflow with the Free Stylized Skybox asset from Yuki2022. Browse more 2D 텍스처 및 소재 on the Unity Asset Store.

assetstore.unity.com

 

빛은 단순히 조명 오브젝트에서만 나오는 것이 아니라 하늘, 벽, 바닥 등의 표면에서 반사되며 다양한 방향으로 퍼진다.
이렇게 주 광원 외에 환경 전체에서 퍼지는 빛을 환경광(Ambient Light) 이라고 한다.

 

환경광은 씬 전체에 기본적인 밝기와 색감을 부여하는 역할을 하며, 특히 그림자가 진 부분이나 간접광이 닿지 않는 영역에서 중요한 역할을 한다.

Unity에서 환경광 설정은 Lighting 창(Ctrl + 9)의 Environment 탭에서 조정할 수 있다.

 

 

Environment Lighting 항목에서는 환경광의 소스와 컬러를 어떻게 적용할지 결정할 수 있다.

  • Source: 환경광의 소스를 선택하는 옵션
    • Skybox: 스카이박스 머티리얼(HDR 포함)의 영향을 받아 자동으로 환경광을 계산
    • Color: 단색을 직접 지정
    • Gradient: 하늘, 지평선, 바닥 각각의 색을 수동으로 설정

Skybox

스카이박스가 HDR 이미지 기반 머티리얼일 경우, 빛의 색과 방향성까지 포함해서 환경광이 계산된다.
그래서 시간대에 따라 색이 바뀌거나, 현실적인 반사광이 자동으로 적용되는 효과를 얻을 수 있다.

 

Color & Gradient

HDR 스카이박스가 없는 경우 Color나 Gradient를 선택하여 직접 색을 설정해 환경광을 조정할 수 있다.
특히 Gradient를 사용할 경우, 세 가지 색을 나누어 설정할 수 있다:

  • Sky Color: 위쪽(하늘 방향)에서 들어오는 빛의 색
  • Equator Color: 수평선 근처, 가로 방향에서 들어오는 빛의 색
  • Ground Color: 아래쪽(지면 방향)에서 반사되는 빛의 색

이렇게 Gradient 방식은 빛이 위·중간·아래에서 다르게 들어오는 듯한 분위기를 만들 수 있어 보다 섬세한 환경 조명을 구성하고 싶을 때 유용하다.

 

FPS 게임 씬에 적용한 환경광

 

2. Light Probe

Light Probe는 움직이는 오브젝트도 조명의 영향을 자연스럽게 받도록 도와주는 기능이다.
고정된 오브젝트는 라이트맵으로 조명을 굽는 반면, 움직이는 오브젝트는 Light Probe의 조명 데이터를 실시간으로 보간해서 적용해 줄 수 있다는 뜻이다.

 

 

Light Probe Groups 오브젝트를 생성한 뒤,
Probe 툴을 선택한 상태에서 프로브들을 드래그로 이동하거나 모서리를 확장해 영역을 조정할 수 있다.

Ctrl + D 단축키를 누른 채 이동시키면 프로브가 복사된다.

 

 

 

이 실습을 시각적으로 보여주기 위해 간단한 터널 구조를 만들었다.
터널 내부 조명은 실시간으로 반응할 필요가 없으므로, Light의 Mode는 Baked로 설정하고
터널 오브젝트는 Static으로 설정해 베이크 대상에 포함시켰다.
터널 안을 이동할 큐브 오브젝트는 Static을 해제한 상태로 배치해 주었다.

 

 

 

이 상태에서 Light Probe Groups를 터널 영역에 맞춰 배치하고 Generate하면,
큐브가 터널 내부를 이동할 때 주변 환경 조명의 영향을 자연스럽게 받는 것을 확인할 수 있다.

 

※ 주의할 점
Light Probe Groups 기능을 사용하려면
Project Settings > Graphics > PC_RP Asset 항목에서
Light Probe System을 반드시 Light Probe Groups로 설정해줘야 한다.
이 설정이 되어 있지 않으면, 씬에 Light Probe들을 배치해도 아무 효과가 나타나지 않는다.

 

 

3. Reflection Probe

 

리플렉션 프로브는 콜라이더와 같은 범위를 갖고 있는데,

이 범위 내에 있는 오브젝트가 반사를 일으키는 재질이면 주변의 모습을 캡처해 놓았다가 반사하는 이미지로 뿌려준다.

 

 

리플렉션 정보를 갱신하기 위해 씬 전체를 다시 베이킹할 수도 있지만 처리 시간이 오래 걸릴 수 있다.
이럴 경우에는 리플렉션 프로브 오브젝트에 있는 Bake 기능을 사용하면

해당 리플렉션 프로브만 개별적으로 업데이트할 수 있어 효율적이다.

 

 

3. 포스트 프로세싱 (Post Processing) → 후처리 효과

포스트 프로세싱은 말 그대로 렌더링이 완료된 화면(카메라)에 후처리를 적용하는 과정이다.

조명 계산이나 그림자 처리처럼 장면 내에서 발생하는 실시간 계산이 끝난 다음 완성된 화면에 다양한 시각 효과를 덧입히는 방식이다.

 

예를 들어, 색감을 더 따뜻하게 만들거나 화면 가장자리를 어둡게 해 몰입도를 높이는 비네트 효과, 화면 전체에 흐릿한 느낌을 주는 블룸 효과, 영화처럼 명암 대비를 조절해 주는 컬러 그레이딩 등이 모두 포스트 프로세싱을 통해 적용된다.

 

 

포스트 프로세싱을 사용하기 위해서는 패키지 매니저에서 Post Processing을 설치해주어야 한다.

 

 

리플렉션 프로브처럼 콜라이더 같은 범위가 만들어지는데,

이 범위 내에 있는 오브젝트들은 설정한 효과의 영향을 받는다.

 

 

프로파일 파일을 생성해 주면 쉽게 효과를 적용시킬 수 있다.

 

 

프로파일을 수정하기 전에 카메라에 붙어있는 포스트 프로세스를 통해서도 간단히 효과를 적용시킬 수 있다.

 

No Anti-Aliasing
아무 효과도 적용하지 않는 상태다.
계단 현상(aliasing)이 그대로 보이지만, 성능에는 영향을 거의 주지 않는다.
가벼운 프로젝트 거나 픽셀 아트처럼 뚜렷한 경계가 중요한 경우 사용될 수 있다.

 

FXAA (Fast Approximate Anti-Aliasing)
가장 가볍고 빠른 방식의 안티에일리어싱이다.
화면 전체를 픽셀 단위로 분석해서 경계를 부드럽게 만든다.
성능 부담이 거의 없지만, 이미지가 약간 뿌옇게 보일 수 있다.

 

SMAA (Subpixel Morphological Anti-Aliasing)
FXAA보다 선명하고 품질이 높은 방식이다.
픽셀 간의 형태를 파악해 경계선을 부드럽게 처리해 준다.
성능과 품질의 균형이 좋은 편이라, 중간급 장치에서 자주 사용된다.

 

TAA (Temporal Anti-Aliasing)
시간적인 요소(프레임 간 변화)를 이용해 경계를 부드럽게 처리한다.
움직임이 있을 때 계단 현상을 줄이는 데 효과적이고 품질도 가장 좋다.
하지만 저사양에서는 잔상(ghosting)이나 흐림 현상이 생기기도 한다.

 

 

이제 Volume 컴포넌트를 통해 포스트 프로세싱을 해보자

가장 하단에 Add Override를 통해서 효과를 불러올 수 있다.

 

1. Bloom

 

강한 빛 주위를 부드럽게 번지게 만들어주는 효과로, 현실적인 조명을 표현할 때 자주 사용된다.

 

Bloom에는 'Lens Dirt'라는 기능이 있는데,
렌즈에 먼지나 얼룩이 낀 것처럼 표현하여 좀 더 시네마틱 하고 사실적인 연출이 가능하다.

 

 

GitHub - sonicether/SE-Natural-Bloom-Dirty-Lens: (Legacy) post-processing effect for Unity.

(Legacy) post-processing effect for Unity. Contribute to sonicether/SE-Natural-Bloom-Dirty-Lens development by creating an account on GitHub.

github.com

 

렌즈가 살짝 뿌옇고 긁힌 듯한 느낌을 추가로 줄 수 있어 연출에 따라 활용도가 높다.

 

2. Depth Of Field

 

카메라 초점이 맞은 부분 외에는 흐릿하게 처리하는 효과로,
피사계 심도(아웃 포커싱)를 구현할 수 있다.

 

3. Chromatic Aberration

 

화면 가장자리에 색 분리가 일어나며 약간의 노이즈처럼 보이게 만드는 효과다.
현실에서는 렌즈 수차 현상으로 발생하는데, 이를 연출적으로 활용하면 약물 부작용, 정신 혼란, 혹은 카메라 렌즈의 왜곡된 느낌을 줄 수 있다.

 

이 외에도 여러 가지 효과가 있으니 직접 실습해 보면 좋을 것 같다.