Files
2nd/10_Wiki/Topics/Draw Call.md
T
2026-05-02 23:33:34 +09:00

4.7 KiB


id: P-Reinforce-AUTO-E9A644 category: Unified confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Draw Call"

Draw Call

📌 한 줄 통찰 (The Karpathy Summary)

드로우 콜(Draw Call)은 CPU가 GPU에게 렌더링할 기하학적 구조, 재질 및 렌더링 상태를 전달하며 객체를 화면에 그리도록 지시하는 명령입니다 [1, 2]. 실제 그래픽을 렌더링하는 연산 자체보다, 렌더링을 준비하고 상태를 변경하는 과정에서 발생하는 CPU 오버헤드가 매우 커서 성능 병목의 주된 원인이 됩니다 [3-5]. 따라서 실시간 3D 그래픽 애플리케이션에서는 높은 프레임 속도 유지를 위해 인스턴싱, 배칭, 지오메트리 병합 등의 최적화 기법을 통해 드로우 콜의 횟수를 최소화해야 합니다 [6-9].

📖 구조화된 지식 (Synthesized Content)

  • 드로우 콜의 작동 원리 드로우 콜이 발생할 때마다 시스템은 여러 단계를 거칩니다. 첫째, CPU가 변환 행렬, 셰이더 참조, 유니폼(Uniform) 및 정점 버퍼 등을 수집하여 준비합니다 [3]. 둘째, GPU 내에서 셰이더 프로그램 전환, 텍스처 바인딩, 렌더링 상태 구성 등의 렌더링 상태 변경(State Change)이 일어납니다 [3, 5, 10]. 셋째, 시스템 버스를 통해 CPU-GPU 간 통신이 이루어진 후 마지막으로 GPU가 실제 정점을 처리하고 렌더링하게 됩니다 [3].

  • 드로우 콜 오버헤드와 CPU 병목 삼각형이 10개이든 10,000개이든 렌더링을 준비하는 13단계의 시간은 거의 동일하게 소모됩니다 [3]. 즉, 화면에 그리는 폴리곤의 개수보다 드로우 콜의 횟수가 성능에 훨씬 더 결정적인 영향을 미칩니다 [11]. 만약 수천 개의 객체를 개별적으로 렌더링한다면 CPU가 명령을 발행하는 속도가 GPU의 렌더링 속도를 따라가지 못해 병목 현상이 발생하고 GPU가 굶주리는(Starve) 상태가 됩니다 [6]. 일반적으로 원활한 60fps 성능을 유지하기 위해서는 프레임당 100회 미만의 드로우 콜을 목표로 하는 것이 좋으며 [11, 12], 기기나 브라우저에 따라 1,0002,000회를 초과하면 CPU 바운드에 의한 심각한 프레임 저하가 발생합니다 [8].

  • 주요 드로우 콜 최적화 기법

    • 인스턴싱(Instancing): 동일한 기하학적 구조와 재질을 공유하는 여러 객체(예: 풀잎, 나무, 입자 등)의 경우, 변환 행렬만 다르게 적용하여 단 한 번의 드로우 콜로 수백~수천 개의 객체를 렌더링할 수 있습니다 ([[InstancedMesh|InstancedMesh]] 활용) [7, 13, 14].
    • 배칭(Batching) 및 병합(Merging): 구조가 다르더라도 동일한 재질을 공유하는 객체들을 묶어 하나의 드로우 콜로 처리하거나(BatchedMesh), 아예 움직이지 않는 정적 객체들의 기하학적 구조를 하나로 병합(Geometry Merging)하여 호출 횟수를 획기적으로 줄입니다 [9, 15, 16].
    • 상태 변경 최소화: 여러 개의 텍스처를 텍스처 아틀라스(Texture Atlases)나 데이터 배열 텍스처(Data Array Textures)로 결합하여, 드로우 콜 중간에 텍스처를 전환하며 발생하는 GPU 렌더링 상태 변경 오버헤드를 방지합니다 [17-19].

⚠️ 모순 및 업데이트 (Contradictions & RL Update)

  • 과거 데이터와의 충돌: 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
  • 정책 변화: Graphics & Performance 분야의 자동 자산화 수행.

🔗 지식 연결 (Graph)

  • Related Topics: Render State, CPU Bottleneck, InstancedMesh, BatchedMesh, Geometry Merging, Texture Atlas
  • Projects/Contexts: Three.js, WebGL, WebGPU, Unity
  • Contradictions/Notes: 소스에 따르면, 드로우 콜을 1회로 줄이는 것(InstancedMesh 등의 도입)이 무조건 프레임 속도 상승으로 이어지지는 않습니다. 수만 개의 객체가 하나의 드로우 콜로 묶이게 되면 엔진의 시야 절두체 컬링(Frustum Culling) 정밀도가 떨어지거나 투명 객체의 정렬(Sorting) 부재로 인해 막대한 오버드로우(Overdraw)가 발생하여, 결과적으로 CPU 명령은 줄어도 GPU 연산량은 오히려 기하급수적으로 늘어나는 현상이 일어날 수 있습니다 [10, 20-22].

Last updated: 2026-04-19