본문 바로가기
그래픽스/최적화

[최적화] SetPass Call(셋패스 콜), Draw Call(드로우콜)

by 유니티세상 2025. 6. 26.

SetPass Call

GPU에 머티리얼과 셰이더 상태를 적용하는 명령 호출

 

Unity는 화면에 무언가를 그릴 때

  1. Material/Shader 상태를 설정
  2. 실제 메시를 GPU로 전달해서 렌더링
    이 두 단계로 렌더링을 합니다.

이 중 ①번이 바로 SetPass Call

셰이더 상태 바꿔줘!” 라고 GPU에게 전달

 

 

  • Draw Call: “이거 그려줘!”
  • SetPass Call: “그리기 전에 붓 바꾸고, 물감 새로 섞어!”

SetPass Call은 GPU에 셰이더, 텍스처, 머티리얼 등 그래픽 상태를 바꾸는 명령
Draw Call은 실제 메시를 그리는 명령

 

 

SetPass Call이 많으면 GPU 상태 변경이 자주 일어나 느려짐

머티리얼 공유, 인스턴싱, 배칭 등으로 SetPass 줄이기

SetPass Call이 성능에 민감할까?

  • 셰이더 상태 변경은 GPU 입장에서 꽤 무거운 작업입니다.
  • 한 프레임에 수백~수천 개의 오브젝트가 있다면, 각각이 다른 머티리얼/셰이더를 쓴다면 매번 SetPass Call이 발생합니다.
  • 이때 동일 셰이더/머티리얼을 공유하는 오브젝트끼리 묶으면 SetPass Call 1회로 여러 Draw Call을 할 수 있어 성능이 훨씬 좋아집니다.

 

 

// A, B, C라는 오브젝트가 있다

// A, B는 같은 머티리얼
// C는 다른 머티리얼

// 결과:
SetPass Call 1 → A 렌더링
              → B 렌더링 (같은 상태 유지)

SetPass Call 2 → C 렌더링 (상태 바꿔야 함)