[20260213] Lighting, Timeline, NavMesh

SmartBear·2026년 2월 13일
post-thumbnail

Q. RP어디 단계?

A. 픽셀/프래그먼트 셰이더

GPU 연산이 일어난다 -> 과부하 요소가 있다. -> 최적화 해야 한다.

Q. Unity6는 어떤 RP 방식?

A. Forward+ RP 방식

목차

  1. Unity 에서 Light 종류
  2. Light Setting 세팅 - 알아야할 속성

Unity에서 지원하는 빛의 종류

Light Mode

  • Realtime
    • 매 프레임 객체에 빛과 그림자를 실시간으로 계산.
    • 부하가 높음.
    • 그림자 연산도 신경써야함(특히 모바일).
    • ex: 횟불, 빛 연산이 민감한 곳.
  • Mixed
    • 정적 객체 -> Lightmap 으로 bake
    • 동적 객체 -> Realtime 으로 bake
    • Lighting Settings
      • Shadowmask (default): 정적/동적 그림자를 섞음.
      • Subtractive: 저사양 모바일에서 활용. 가볍고 퀄리티가 낮음.
      • Backed InDirect: 고사양용
  • Baked
    • 빛의 정보를 미리 계산하여 lightmap(Texture) 형식으로 저장.
    • Runtime 연산이 거의 없음.
    • 부하가 낮음.
    • 빛의 위치와 물체가 정적으로 있는 환경에서 주로 사용.

1. Directional Light

  • 모든 씬에서 태양광 역할

2. Point Light

  • 구 모양의 전방향 조명

3. Spot Light

  • 집중된 조명

4. Area Light

  • Only Baked 로 사용. 연산비용이 높기 때문.
  • 방 내 형광등, 채광 같은 것으로 사용 가능.

5. (+) Light Prob Group

  • Baked 된 정적 Texture (lightmap) 을(를) 동적 오브젝트에 입혀줄 수 있는 기능

6. (+) Reflection Prob

  • 반사광

Lighting Setting

  • Lighting Settings Asset: 에셋 지정.
  • Lightmapper : Progressive GPU 로 권장됨.
  • Lightmap Resolution
    • 모바일: 5-15 (권장)
    • PC/Console: 20-40
  • Max Lightmap Size
    • 텍스처 해상도 (Default 1024) ; 고정
  • Direct/Indirect Samples
    • 수치가 높을 수록 노이즈가 준다. 다만, Bake 시간이 많이 증가됨.

Character Controller

속성

  • Slope Limit
    • Default = 45
    • 해당 기울기보다 높으면 갈 수 없음
  • Step Offset
    • Default = 0.3
    • 계단 높이.
  • Skin Width
    • 충돌 계산의 완충지대
    • 수치가 작을수록 벽에 낌
    • 수치가 클수록 캐릭터는 공중에 뜬 것처럼 움직임
  • Min Move Distance
    • Default = 0.001
    • Jittering 방지를 위해 기본값 유지.

이동 방식 3가지

1. Transform

  • 순간 이동
  • 사례: 충돌이 필요 없는 투사체. 배경 연출. 아이템 획득 UI. 카메라 연출
transform.position += direction * speed * Time.deltaTime();

2. Rigidbody

  • 물리 법칙의 지배(!?)
  • velocity, AddForce, MovePosition, ...
  • 사례: 레이싱 게임, 앵그리 버드, 젤다, ...

3. Character Controller

  • 단독 캐릭터 조작시 많이 사용.
  • 사례: 소울류, FPS, TPS, RPG 주인공, ...

Jittering ?

Character Controller + Rigidbody 같이 쓸 때 나타나는 현상
두 컴포넌트간 좌표 수정을 하려고함.

Timeline

(TBD)

NavMesh

이동 로직을 코드로 짜지 않고 사용하는 시스템
내부적으로 Graph로 데이터화 하여 성능-안정성이 우수함.
NavMesh 는 Bake 시점에 연산이 끝남

Bake 단계 (사전 준비)

컴포넌트: NavMesh Surface -> Bake 버튼 클릭!

공간 판별

Unity Scene 스캔

  • 표면 Walking 가능 여부 -
  • 경사 각도 등반 가능 여부 - Max Slope
  • 지나갈 수 있는 폭 여부 - Radius

공간을 Polygon 형태로 분해 / 생성

  • 다각형(Polygon)으로 쪼갬
  • 이동에 필요한 정보만 남김

면(Polygon) 간 연결

  • Polygon 간 생기는 선 - Edge

Area Cost 저장

  • 이동 우선순위를 정함

Runtime 단계 (이동 요청시)

  1. 현재 위치가 속한 폴리곤 찾기 -> 내위치 찾기
  2. 목적지 찾기
  3. 폴리곤 그래프에서 최적 경로 검색
  • A* 알고리즘 기반. 상대적으로 노드 수가 적음
  1. 폴리곤 경로를 따라 이동 경로 생성
  • 좌표 X
  • 텍스처 X
  • 렌더링 정보 X

이동 정보만 가짐
그래프 기반 이동 -> 검증된 길만 탐색

A* vs NavMesh

A*NavMesh
노드 생성런타임(Runtime)Bake
그래프 구성직접엔진
비용 계산항상최소화

1. NavMesh Surface

  • 이동 가능 영역을 저장 및 관리

2. NetMash Agent

  • 이동, 회전, 충돌 회피
  • Speed / Angular Speed / Stopping Distance
agnet.SetDestination(target.poisition)
  • 유의사항
    • transform.position 으로 이동 X
    • Rigidbody 동시 제어 X

3. NavMesh Obstacle

  • 장애물.
  • Carve -> true 로 해야 피해다님.
  • 유의사항
    • 많이 쓰면 성능 하락
    • 많이 움직일 필요가 없는 물체 정도만 사용
  • 끊긴 Polygon 간 연결
  • 예시; 사다리, 뛰어내리기, 올라가기, 등...

5. NavMesh Modifier Volumn

  • 특정 영역의 길을 설정
  • 함정 구역, 늪, 낭떨어지, 등 ...

Agent

  • Radius/Height -> 캐릭터 둘레/키
  • Step Height / Max Slope -> 계단/경사 허용치

Area

  • 0-31 번까지 설정 가능
  • Cost = Path 비용 낮을 수록 우선 순휘 높음.
profile
Python Dev with Infra -> Game Programmer

0개의 댓글