[Unity] URP vs Built-In, Stencil과 렌더링 이론, Instancing 기법, SSAO와 Decals
URP
우수한 LIghts 효과 Built-In에선 지원 중단함
빌트인에선 멀티 라이트 갯수만큼 곱연산
URP에선 싱글패스 처리
Stencil Buffer
Mask
URP Pipeline Asset
URP Renderer Asset
See Through의 스텐실의 Not Equal은 체크한 레이어를 제외하고 렌더링 해준다.
Instancing
# Draw Call
CPU -> GPU에게 Draw를 명령한다.
Baching
CPU의 부담을 줄여주기 위해 커맨드를 효율적으로 구성해서 담아주는 Baching 기법이 중요하다.
Static Batching
커맨드의 갯수는 줄여주지만 커맨드 양이 많아지므로 메모리의 부하가 늘어남
과남용할 경우 메모리 부하가 큼
GPU Instancing
효과 :
단점 : GPU중 지원하는 모델이 한정적이다.
RenderMeshPrimitives
Instancing 갯수와 상관 없이 코드 단위에서 생성된다.
따로 상호작용하는 부분이 없는 요소(잔디 등)에 유용
따라서 하이어라키엔 존재하지 않음
쉐이더 코드에서 작성하는 것이므로 고급 기술이 요구된다.
Toon Shading
투 패스로 그려주어서 드로우콜이 추가적으로 발생한다.
다만, 3D 오브젝트마다 피봇이 다르기 때문에 각 버텍스마다 노말 방향으로 확장해야한다.
Material이 두 개 존재하는 걸 확인할 수 있음
아웃라인 쉐이더는 쉐이더 입문에서 많이 다룬다.
Ambient Occlusion
계단 사이에 그림자와 볼륨, 사실감을 추가한다.
Screen Space Ambient Occlusion
일종의 포스트 프로세싱 처리 중 하나
설명 :
Renderer Feature에서 다룰 수 있다.
대부분 포스트 프로세싱 작업에서 Depth 정보를 읽어와야 하는데, 다른 포스트 프로세싱을 사용중인 것이 아닌 단일로 사용할 경우 Two-Pass로 한 번 더 Draw하게 되므로 소모가 발생할 수 있다. 따라서 Depth정보를 사용하는 다른 후처리가 있다면 추가로 Draw하지 않으므로 단일과 비교해서 큰 소모가 발생하진 않는다.
결론은 어떠한 포스트 프로세싱을 사용하냐에 따라 SSAO가 CPU에게 큰 부담이 되거나 그보다 덜할 수 있다.
샘플링 수가 많을수록 퀄리티가 좋아진다. 픽셀 부하와 관련
모바일 환경에선 꽤 부담이 크다.
Decals
Decal이란?
Renderer Feature에서 활성화해서 사용
Decal 또한 Normal Map에 그려지므로 Detph 정보를 읽어와야함(DrawCall 이슈와 연관있음)
SSAO와 동시에 켰을 땐 이미 Detph 정보를 한 번 읽어왔으니 Batch의 수가 Decal Render 양만 Batch하는 걸 볼 수 있다.