Let's Girin!
[Unity] 쉐이더와 비주얼 이펙트 본문
※ 유니티 코리아에서 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 |