⚙️ Programming/C# & Unity

[Unity] URP vs Built-In, Stencil과 렌더링 이론, Instancing 기법, SSAO와 Decals

Sugar0810 2024. 1. 16. 21:06
Unity Korea - 10월 11일 오후 4시⏰알쓸유잡 : 멋진 쉐이더와 비주얼 이펙트의 레시피🍳1부

 

URP

우수한 LIghts 효과 Built-In에선 지원 중단함

 

빌트인에선 멀티 라이트 갯수만큼 곱연산

 

URP에선 싱글패스 처리

 

 

URP의 디버그 뷰에서 Depth Buffer 확인 가능

 

 

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 이슈와 연관있음)

 

 

 

 

Only Decal Enabled
SSAO, Decal Enabled

SSAO와 동시에 켰을 땐 이미 Detph 정보를 한 번 읽어왔으니 Batch의 수가 Decal Render 양만 Batch하는 걸 볼 수 있다.