일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Custom Package
- 2D Camera
- 다이나믹 폰트
- base64
- sha
- Framework
- job
- C#
- DotsTween
- adfit
- 단말기 해상도
- Dots
- Unity Editor
- Dynamic Font
- Job 시스템
- Tween
- 프레임워크
- TextMeshPro
- unity
- 텍스트 메시 프로
- 샘플
- 커스텀 패키지
- jumping ball
- AES
- ui
- 이미지 폰트
- 암호화
- 가이드
- 최적화
- RSA
- Today
- Total
EveryDay.DevUp
[Unity] Draw Call ( 드로우콜 ), Batching ( 배칭 ) 본문
● Draw Call이란?
: CPU가 GPU에게 오브젝트를 그려라 라는 명령을 내리는 것
▶ 그려라 라는 명령 안에는 메시 정보, 텍스쳐 정보, 쉐이더 정보, 라이트 정보 등 하나의 오브젝트를 그리기 위한 정보가 담겨짐
▶ 한 프레임이 그려지는 것은 CPU, GPU의 작업이 모두 끝났을 때가 됨. 게임 최적화를 위해서는 CPU의 부하인지, GPU의 부하인지를 체크 해야함
▶ Unity에서는 Batch ( 그리라는 명령 + 상태 변경 )을 넓은 의미의 Draw Call이라고 하며, SetPass는 쉐이더로 인한 렌더링 패스 횟수을 이야기 함
● Draw Call이 발생하는 경우
▶ 하나의 오브젝트에 메시가 여러 개인 경우
▶ 하나의 오브젝트에 여러개의 메터리얼이 있는 경우
▶ 하나의 쉐이더에 멀티 패스가 정의 되어 있는 경우
● Unity에서 Draw Call 을 줄이기 위한 Batching 시스템
: 서로 다른 메시에서 같은 메터리얼을 쓰는 경우 Unity에서는 해당 Mesh 정보를 하나로 합쳐서 Draw Call 1개로 처리
: 같은 메터리얼을 사용한다고 해서 배칭이 100%되지는 않고 라이트맵, 리플렉션 프로브 등의 영향으로 배칭이 일어나지 않을 수도 있음
▶ Static Batching ( 스태틱 배칭 )
: 움직이지 않는 정적인 오브젝트의 경우 Static 체크를 하면 하나의 메시로 만들어서 처리
: 하나의 메시로 합쳐서 사용하기 때문에, 사용하지 않는 메시 정보도 메모리에 올라가기 때문에 메모리 이슈가 있을 수 있음
▶ Dynamic Batching ( 다이나믹 배칭 )
: 동적으로 움직이는 오브젝트들을 하나의 메시로 만들어서 처리
: 런타임 상에서 발생하기 때문에 제약 사항이 있음
( 스킨드 메시 적용 불가능, 버텍스 개수가 300개 보다 많은 경우 적용 불가능 )
● Unity에서 Draw Call 을 줄이기 위한 GPU 인스턴싱
: 한번의 Draw Call로 인스턴싱되는 오브젝트들의 정보를 별도의 버퍼에 저장하고 한번에 처리해서 렌더링
: Batching과 달리 메시 정보를 합치는 과정이 없기 때문에 상대적으로 오버헤드가 적음
: 스탠다드 쉐이더를 사용하는 머터리얼의 파라미터 설정으로 처리 가능
( 스킨드 메시 적용 불가능, 디바이스 스펙에 의존적으로 OpenGL ES3.0이상, Vulkan, Metal에서만 가능 )
참고 자료 : 유니티 그래픽스 최적화 스타트업
참고 자료 : https://www.youtube.com/watch?v=ffRDriHukSI
'Unity > 최적화' 카테고리의 다른 글
[Unity] Sprite Atlas ( 스프라이트 아틀라스 ) (0) | 2020.05.29 |
---|---|
[Unity] 9-Slice ( 나인 슬라이스 ) 이미지 (0) | 2020.05.27 |
[Unity] UGUI 최적화 (1) | 2020.05.20 |
[Unity] GC 최적화 (0) | 2020.05.01 |
[Unity] 메모리에 영향을 주는 에셋 설정 (0) | 2020.04.27 |