빛
Q. RP어디 단계?
A. 픽셀/프래그먼트 셰이더
GPU 연산이 일어난다 -> 과부하 요소가 있다. -> 최적화 해야 한다.
Q. Unity6는 어떤 RP 방식?
A. Forward+ RP 방식
목차
- Unity 에서 Light 종류
- 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
- Skin Width
- 충돌 계산의 완충지대
- 수치가 작을수록 벽에 낌
- 수치가 클수록 캐릭터는 공중에 뜬 것처럼 움직임
- Min Move Distance
- Default = 0.001
- Jittering 방지를 위해 기본값 유지.
이동 방식 3가지
- 순간 이동
- 사례: 충돌이 필요 없는 투사체. 배경 연출. 아이템 획득 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
NavMesh 란 ?
이동 로직을 코드로 짜지 않고 사용하는 시스템
내부적으로 Graph로 데이터화 하여 성능-안정성이 우수함.
NavMesh 는 Bake 시점에 연산이 끝남
Bake 단계 (사전 준비)
컴포넌트: NavMesh Surface -> Bake 버튼 클릭!
공간 판별
Unity Scene 스캔
- 표면 Walking 가능 여부 -
- 경사 각도 등반 가능 여부 -
Max Slope
- 지나갈 수 있는 폭 여부 -
Radius
공간을 Polygon 형태로 분해 / 생성
- 다각형(Polygon)으로 쪼갬
- 이동에 필요한 정보만 남김
면(Polygon) 간 연결
Area Cost 저장
Runtime 단계 (이동 요청시)
- 현재 위치가 속한 폴리곤 찾기 -> 내위치 찾기
- 목적지 찾기
- 폴리곤 그래프에서 최적 경로 검색
- A* 알고리즘 기반. 상대적으로 노드 수가 적음
- 폴리곤 경로를 따라 이동 경로 생성
NavMesh 가 내부에 갖고 있는 정보
이동 정보만 가짐
그래프 기반 이동 -> 검증된 길만 탐색
A* vs NavMesh
| A* | NavMesh |
|---|
| 노드 생성 | 런타임(Runtime) | Bake |
| 그래프 구성 | 직접 | 엔진 |
| 비용 계산 | 항상 | 최소화 |
NavMesh 기본 속성
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 로 해야 피해다님.
- 유의사항
- 많이 쓰면 성능 하락
- 많이 움직일 필요가 없는 물체 정도만 사용
4. NavMesh Link
- 끊긴 Polygon 간 연결
- 예시; 사다리, 뛰어내리기, 올라가기, 등...
5. NavMesh Modifier Volumn
- 특정 영역의 길을 설정
- 함정 구역, 늪, 낭떨어지, 등 ...
Navigation Settings
Agent
- Radius/Height -> 캐릭터 둘레/키
- Step Height / Max Slope -> 계단/경사 허용치
Area
- 0-31 번까지 설정 가능
- Cost = Path 비용 낮을 수록 우선 순휘 높음.