- Probe Group Light 테스트
- GI : Grobal Illumination (전역조명)
- 간접광
- Deffored Rendering : 매쉬 하나 그리면 라이팅을 계산한다.
- 1 Pass : IA → VS → RS → PS(조명 계산 정보를 기록만 해놓는다.) → OM (1pass ; 랜더링 파이프라인 과정을 한번 거쳤다)
- 2 Pass : IA → VS → RS → PS(기록해놓은 계산 정보를 가지고 그린다.) → OM
- M + L ⇒ 지금은 이 방식을 사용한다.
- Forward Rendering : 매쉬마다 라이팅을 미리 계산하고 그린다.
- IA → VS(애니메이션 계산) → RS (그려진다) → PS(조명 계산이 이뤄진다.) → OM(캐릭터 하나가 랜더링된다.)
- PS 단계에서 FOrward Rendering 이 실행된다.
- M * L
- Bake 조명은 ‘static’만 받을 수 있고 다른 조건에서도 받고싶다면 Prob Group으로 범위를 조절하면 조명을 받을 수 있다.
- Surface - Skinned Mesh Renderer - Probes - Anchor Override : 한 부위에 조명을 집중적으로 받을 수 있다. (여러개를 넣을 수 있다.)
- 26번 Occlusion 프로젝트 생성
- BackFaceCulling
- VS 에서 정점이 탈락하는 과정 : Culling ⇒ 그리지 말라고 탈락시키는 과정이다. ⇒ 퍼포먼스가 떨어지니까)
- MSAA : 2X 4X 8X 옵션이 있는 이것은 blur처럼 주변 픽셀의 평균을 내서 조명? 그림자? 계산을 하는 옵션이다.
깊이가 다른 두 오브젝트 렌더링 과정 (깊이버퍼)
- 그림자가 생기는 과정이다.
- 파란 오브젝트 : 0.8 / 빨간 오브젝트 : 0.3
- 1 Pass : IA → VS → RS(3D가 2D로 변하는 과정) → PS(2D) → OM(2D를 3D로 변하는 과정) ⇒ 파란 오브젝트 렌더링
- 2 Pass : IA → VS → RS → PS → OM ⇒ 0.8깊이를 가진 파란오브젝트 위에 빨간 오브젝트 렌더링
- 0.8 깊이 > 0.3 깊이이니 겹치는 부분이 0.3 깊이보다 큰 부분은 그림자가 생성된다.
- 이것을 ‘깊이 버퍼’라고 한다.
- 한번 렌더링을 찍어놓고 0.3이 0.8을 가렸으니 그 부분은 그림자가 생길것이다 라고 생각하고 계산하는 것이다.
- 이 방법은 문제가 있다.
- 가장 먼저 발생하는 문제 : 싶이가 다른 가른 오브젝트를 같이 렌더링하기 때문에 ‘Z Fighitng(겹쳐서 깨지는 문제)’가 발생한다.
- 깊이가 판단이 안되기 때문이다.
- 그림자도 같이 깨져 보인다.
- VS 과정에서
- Z FIghting이 발생한다면?
- 1 Pass : Backface Culling ⇒ 앞면만 두번 그리니 그냥 전면을 안그려버린다.
- 2 Pass : Backface Culling ⇒ 정상적으로 Backface Culling을 실행해서 전면만 그린다.
- 깊이 차이가 생겨 G fighing이 발생하지 않는다.
- 결과 : 1 Pass에 후면(음영부분)만 렌더링된다.
- 2 Pass에 전면(앞에서 보이는 부분)이 렌더링된다.
- 두 렌더링에서 깊이차이가 발생하여 그림자부분이 그려진다.
- 그림자 그리는 문제 3가지
- Z - Fighing
- 1 Pass 컬링을 뒤집어서 해결한다. (먼저 보이는 전면을 안그리고 후면(음영부분) 먼저 렌더링한다.)
- 이 방법으로 그림자를 선명하게 할 수 있지만, 그림자를 선명하게 한다고 그림자 픽셀 수를 증가시킨다면 퍼포먼스가 증가하여 FPS 프레임 수가 급감한다. (컴퓨터 사양이 좋아야 프레임수가 안떨어진다)
- PCF (Percentage Closer F?) - 해상도문제
- 그림자가 칠해질 바로 근처에 그림자가 칠해지지 않는 부분을 약간만 그림자를 그려서 조금 더 부드럽게 만들어준다.
- 여전히 자글거려서 약간의 도움밖에 안된다.
- 블러 (Blur) - 피터 패닝
- 그림자 주변 픽셀의 경계선을 전부더해서 평균픽셀로 만든다음 계산한다.
- 그림자가 조금 흐려지긴 하지만 이전보다는 자연스러워보인다.
- 기본적으로는 고정된 큰 건물에 적용한다.
- 뒤에 가려지는 건물이 많아서이다.
- 그래서, 가장 큰 건물에는 ‘오클루더 스테틱’ 설정으로 준다.
- 작은 건물에는 ‘오클루디 스테틱’ 설정을 준다.
- Window - Rendering - Occlusion Culling (클릭)
- 27 NavMesh 프로젝트 생성
- UnitTest Obtacle(장애물) 생성
- Navigation 장애물 스테틱설정
- 동적 장애물 테스트
- 피해 갈 장애물에 Navigation static 설정을 하고 Navigation에서 Bake를 누르면 장애물을 피해간다.
- 하지만, 갑자기 사라지는 장애물이 있을때 장애물이 사라지더라도 있던 자리를 피해서 돌아간다.
- Add Component - Nav Mesh Obstacle : 동적 장애물로 설정해주는 컴포넌트
- 스테틱 설정을 하지 않더라도 동적 장애물로 설정된다.
- Carve : 계속된 연산을 진행해서 부드럽게 장애물을 피하라는 속성이다.
- Move Threshold : 장애물을 피하러 움직일때 정해진 거리만큼 다시 연산하라는 속성이다.
- Time To Stationary : 일정 시간마다 다시 연산하라는 속성이다.
- 연산량이 너무 많아 부하가 걸린다.
- UnitTest OffMeshLink 생성
- 지붕에 있는 적이 플레이어를 쫒을때 사용하는 기능이다.