* 이 게시글은 ⌜유니티 그래픽스 최적화 스타트업⌟ 서적으로 공부한 내용을 개인적으로 정리한 것입니다.
[드로우콜]
: CPU가 GPU에게 렌더링하라고 명령을 보내는 것
오브젝트를 렌더링하려면 매번 렌더 상태 정보들을 변경해주어야 함 → 렌더 상태 변경
메시를 그리라는 명령 → DP Call 명령
왼쪽 사진처럼 명령을 바로 보내는 게 아니라 버퍼에 명령을 쌓아두고,
GPU가 작업이 끝나면 다음 할 일을 가져가는 식으로 작업함 → 병령 작업 가능
커맨드 버퍼(Command Buffer)에 각종 상태 변경 명령들과 DP Call 명령을 쌓아두어 순차적으로 수행
[드로우콜 발생 조건]
: 기본 적으로 오브젝트 하나에 메시 1개, 머티리얼 1개라면 드로우콜이 1번 발생
→ 즉, Batch가 1
1. 메시가 여러 개인 경우
오브젝트가 하나로 보이더라도 여러 메시로 이루어진 경우가 있음
한 오브젝트에 메시가 10개라면 오브젝트에 씬에 10개 나오는 경우, 100개의 드로우콜 발생
2. 머티리얼이 여러 개인 경우
한 오브젝트에 여러 머티리얼을 사용하는 경우가 있음, 이 또한 머티리얼 개수만큼 드로우콜 발생
3. 쉐이더에 의한 경우
멀티패스로 두 번 이상 렌더링을 거치기도 함 (ex. 외곽선이 포함된 카툰 쉐이더)
여러 이유에 의해 드로우콜 발생이 많아질 수도 있으므로 유의해야 함
수많음 상태 변경들을 포함하기 때문에 드로우콜의 비용을 개당 단언하기도 어려움
[Batch & SetPass]
Batch : DP Call과 상태 변경들을 합친 넓은 의미의 드로우콜
SetPass : 드로우콜이 일어날 때 상태 변경의 발생 여부
(Batch 10번 발생 + SetPass 1번 발생 = 쉐이더의 변경 X, 최소한의 상태 변경만)
[배칭]
: 다른 오브젝트/메시를 사용하더라도 같은 머티리얼을 사용하는 것
하나의 텍스처에 여러 오브젝트에 필요한 그림을 그려 공용으로 사용
(ex. 아틀라스, 스프라이트 시트 등) (주의: 해상도 문제를 고려해야 함!)
'공부 나눔 (Sharing Study) > Unity만' 카테고리의 다른 글
[Unity] 병목 현상 해결하기 (0) | 2023.09.11 |
---|---|
[Unity] 그래픽스 (0) | 2023.09.11 |
[Unity] 미니맵 원하는 모양으로 만들기 (+컬링마스크) (2) | 2022.06.01 |
[Unity] Canvas/UI 에 영상 넣는 방법 (Raw Image, Render Texture) (3) | 2021.05.22 |
[Unity] 영상 넣는 방법 (알파값 있는 영상, 배경없는 영상) (2) | 2020.05.11 |