Let's Girin!

[Unity] 쉐이더와 비주얼 이펙트 본문

Unity

[Unity] 쉐이더와 비주얼 이펙트

window= 2023. 10. 12. 12:34

※ 유니티 코리아에서 2023년 10월 11일 강의된 내용을 정리하였습니다.

출처) https://www.youtube.com/watch?v=UFwpKSy07J4

 

////////////////////////////////////////////////////////////////////////////// 요약 정리 //////////////////////////////////////////////////////////////////////////////////////////////////

1. Universal Render Pipeline(URP)

게임 엔진의 그래픽 렌더파이프라인 중 하나로서, 사전 빌드된 스크립터블 렌더 파이프라인이다. 

● 고품질 그래픽

● 우수한 그래픽스 렌더링 성능

● 플랫폼 호환성(모바일, 고사양 콘솔, PC 등 다양한 플랫폼에서 최적화된 그래픽스를 쉽고 빠르게 구현 가능)

● 확장성

후처리 이펙트

● 커스터마이징 가능

● 자동 업데이트 변환 지원 : 쉐이더, 스크립트, 어셈블리

● 자동 변환 미지원 : 커스터마이징, UsePass, Shader.Find 등

 

2. 조명 처리 방식

2-1. Multi-lights in Multi-Passes

여러번의 렌더링 작업으로 조명을 나누어 처리하는 방법.(렌더링 속도↓, 조명 효과↑)

- 오브젝트마다 light를 그린다.

- light가 많을수록 그 갯수만큼 여러 Pass를 거치게 되어 있다. 

 

* [ Built-In Render Pipeline ]

● 비교적 단순한 그래픽 처리

● 모바일 및 저성능 플랫폼 

제한된 커스터마이징

 

2-2. Multi-lights in Single-Pass 

한번의 렌더링 작업으로 모든 조명을 처리하는 방법.(렌더링 속도↑, 조명 효과↓)

- 여러개의 light를 싱글 Pass로 처리한다.

 

3. Rendering pipeline

그래픽을 생성하고 렌더링하는 과정

[애플리케이션] - [지오메트리] - [래스터라이저]

 

3.1 Geometry Rendering

● 3D 모델, 메쉬, 버텍스 데이터 처리, 객체 생성

3D 공간에서 2D 화면 공간으로 객체 변환

 

3.1_1. [ World - View - Projection- Transform ]

Vertex Shader : 정점의 위치와 크기를 계산.

Fragment Shader : 정점의 색을 계산.

 

 

3.1_2. Post Processing : 렌더링된 이미지에 대해 후처리 효과를 적용하는 기술

Depth Buffer, Stencil Buffer는 객체의 깊이, 그림자, 마스크 등 그래픽 효과를 관리.

[ Depth Buffer ]

● 객체의 깊이 정보를 저장

● 카메라에서 객체까지의 거리 저장

 

[ Stencil Buffer ]

● 객체 특정 영역의 마스킹 정보를 저장

● 특정 부분만 렌더링

ex. 특정 영역의 마스킹, 포탈 효과, 투시 효과 등.

 

* 일반적으로 Depth Buffer랑 Stencil Buffer를 하나로 묶어서 사용.

 

 

4. 배칭(Batching)

● 여러 객체를 단일 그래픽 배치로 결합하여 GPU 렌더링 효율성을 향상시키는 프로세스

● 오버헤드 감소, 렌더링 성능 향상

● 드로우콜 + 렌더 상태 변경

 

* 머테리얼을 공유하면 메쉬에 잇는 여러 오브젝트들을 하나의 드로우콜로 처리할 수 있음.

 

[ static Batching ]

● 런타임 중에 변형이 없는(위치, 회전, 스케일 등) 정적 객체를 대상

● CPU에서 하나의 커다란 메쉬 정보를 만들어서 GPU에게 던져주고 GPU 는 그걸 받아서 그대로 그려줌.

● Command 갯수는 줄어들지만 Command 부피 즉, 메모리가 늘어남.

 

* 이러한 정적 배칭의 단점을 개선하기 위해 GPU Instancing을 사용한다.

[ GPU Instancing ]

● 동일한 메쉬와 머테리얼을 사용하는 여러개의 객체를 렌더링

GPU 메모리는 오브젝트 하나만 들고있고 CPU에서는 위치정보만 묶어서 던져주면, CPU는 메쉬를 위치에 그려줌.

● 성능이 빠르지만, 대신 모든 디바이스에서 되는 건 아니고 이 기능을 지원하는 디바이스에서만 사용 가능.

● 동일한 메쉬만 처리 가능(대량의 동일 오브젝트 렌더링 시 유용)

 

5. Toon Shading

● 조명과 그림자를 단순화하여 렌더링된 객체를 일종의 만화 또는 애니메이션 스타일로 렌더링하는 기술.

 

5.1 Outline

● 물체의 외곽선(윤곽)을 강조

● 일반적으로 검은색 외곽선이며 2D 만화 스타일

● 외곽선은 노말 방향으로 렌더링

● 렌더링 후 뒤집어서 렌더링을 더 하기 때문에 한번 더 드로우콜 발생.

 

5.2 Toon Style 

● 물체의 표면 색상 및 그림자 처리 강조

● 일반적인 시각적 스타일 조절

 

6. Ambient Occlusion

● 객체와 객체 사이, 객체의 표면과 주변 환경 사이의 그림자를 생성하는 기술

Post Processing 후처리 적용

 

SSAO(Screen Space Ambient Occlusion)

렌더링된 객체의 Depth Buffer와 Normal Buffer가 필요함.

● Forward 기준 후처리에서 SSAO를 사용하기 위한 Depth Buffer를 추가적으로 만들어줘야 하기에 오브젝트를 한번 더 그리게 되므로 드로우콜이 발생.

다른 후처리 중에 Depth Buffer를 사용중인 작업이 있다면 이미 있기 때문에 SSAO를 활성화한다 해서 CPU 입장에서 추가적인 드로우콜 부담이 없음(픽셀 부담은 별개)

 

 

7. Decals

표면에 추가적인 그래픽 레이어를 오버레이 하는 기술

도장 아이콘 같은 오브젝트. 

배치가 확 늘어남. 

깊이 정보를 이용. 드로우콜 이슈랑 엮여있음.

 

 

 

 

반응형

'Unity' 카테고리의 다른 글

[Unity] 최적화 - Yield return new  (1) 2023.11.02
[Unity] 2D 쉐이더  (0) 2023.10.13
[Unity] URP/HDRP/SRP  (1) 2023.07.24
[Unity] 데이터베이스 서버 만들기  (0) 2023.05.17
[Unity] C# API 게임 서버 만들기  (2) 2023.05.16