--- id: wiki-2026-0508-indirect-draw title: Indirect Draw category: 10_Wiki/Topics status: needs_review canonical_id: self aliases: [P-Reinforce-AUTO-8EEC8D] duplicate_of: none source_trust_level: A confidence_score: 0.9 tags: [auto-reinforced] raw_sources: [] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Indirect Draw" inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # [[Indirect Draw|Indirect Draw]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > Indirect Draw(๊ฐ„์ ‘ ๊ทธ๋ฆฌ๊ธฐ)๋Š” ๋ Œ๋”๋งํ•  ๊ฐ์ฒด์˜ ์ˆ˜์™€ ์ •๋ณด๋ฅผ CPU๊ฐ€ ์•„๋‹Œ GPU๊ฐ€ ์ปดํ“จํŠธ ์…ฐ์ด๋”([[Compute Shader|Compute Shader]])์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ง์ ‘ ๊ฒฐ์ •ํ•˜์—ฌ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๋Š” GPU ์ฃผ๋„ ๋ Œ๋”๋ง(GPU-driven Rendering) ๊ธฐ๋ฒ•์ด๋‹ค [1, 2]. ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง([[Frustum Culling|Frustum Culling]])์ด๋‚˜ ์˜คํด๋ฃจ์ „(Occlusion) ์ปฌ๋ง์˜ ๊ฒฐ๊ณผ๋ฅผ GPU ๋‚ด๋ถ€ ๋ฒ„ํผ์— ์ €์žฅํ•˜๊ณ  `drawIndirect` ๋ช…๋ น์œผ๋กœ ๋ฐ”๋กœ ์ถœ๋ ฅํ•˜๋ฏ€๋กœ, CPU์™€ GPU ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ „์†ก๋Ÿ‰ ๋ฐ ๋™๊ธฐํ™” ์ง€์—ฐ์„ ๊ฑฐ์˜ 0์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค [2, 3]. ๋งค ํ”„๋ ˆ์ž„ ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ GPU์—์„œ ์ง์ ‘ ์ปฌ๋งํ•˜๊ณ  ๋ Œ๋”๋งํ•ด์•ผ ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ 3D ํ™˜๊ฒฝ์—์„œ ํ•„์ˆ˜์ ์ธ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ์ˆ ๋กœ ํ™œ์šฉ๋œ๋‹ค [1, 2]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) * **์ž‘๋™ ์›๋ฆฌ ๋ฐ GPU ์ฃผ๋„ ๋ Œ๋”๋ง (GPU-Driven Rendering):** ์ „ํ†ต์ ์ธ ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๋‹ฌ๋ฆฌ, Indirect Draw๋Š” ์ปดํ“จํŠธ ์…ฐ์ด๋”๋ฅผ ํ†ตํ•ด GPU๊ฐ€ ๊ฐ์ฒด์˜ ๊ฐ€์‹œ์„ฑ์„ ์ง์ ‘ ํŒ๋ณ„ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค [2, 4]. ์ปฌ๋ง ํ…Œ์ŠคํŠธ(Cull test)๋ฅผ ํ†ต๊ณผํ•˜์—ฌ ํ™”๋ฉด์— ๋ณด์—ฌ์•ผ ํ•  ๊ฐ์ฒด๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด, ๊ฐ„์ ‘ ๊ทธ๋ฆฌ๊ธฐ ๋ช…๋ น(draw indirect command)์˜ ์ธ์Šคํ„ด์Šค ์นด์šดํŠธ(instanceCount) ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ๊ฐ€์‹œ์„ฑ์ด ํ™•์ธ๋œ ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ๋งŒ ๋ Œ๋”๋ง ๋ช…๋ น์„ ๋ฒ„ํผ์— ์ถ”๊ฐ€(append)ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค [4, 5]. * **์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ CPU ๋ณ‘๋ชฉ ํ•ด์†Œ:** ๋ Œ๋”๋ง์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ์™€ ๋ช…๋ น ๋ฒ„ํผ๊ฐ€ GPU ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑ๋˜๊ณ  ์ง์ ‘ ์ฐธ์กฐ๋˜๋ฏ€๋กœ(`drawIndexedIndirect` ๋“ฑ), CPU์™€ GPU ๊ฐ„์˜ ๋ฌด๊ฑฐ์šด ๋ฉ”๋ชจ๋ฆฌ ์ „์†ก ๋ฐ ๋™๊ธฐํ™” ์ง€์—ฐ์ด ์ œ๊ฑฐ๋œ๋‹ค [2, 3]. ์ด๋Š” ๊ตฌ์กฐ์ ์œผ๋กœ "CPU๊ฐ€ GPU์—๊ฒŒ ๋ฌด์—‡์„ ํ• ์ง€ ์ง€์‹œํ•˜๋Š” ๋ฐฉ์‹"์—์„œ ๋ฒ—์–ด๋‚˜ "GPU๊ฐ€ ์Šค์Šค๋กœ ๋ฌด์—‡์„ ๋ Œ๋”๋งํ• ์ง€ ์ง€์‹œํ•˜๋Š” ์‹œ์Šคํ…œ"์œผ๋กœ์˜ ๊ทธ๋ž˜ํ”ฝ์Šค ํŒจ๋Ÿฌ๋‹ค์ž„ ์ „ํ™˜์„ ์˜๋ฏธํ•œ๋‹ค [3]. * **์ง€์› ํ™˜๊ฒฝ ๋ฐ ํ•œ๊ณ„ ๊ทน๋ณต:** [[WebGPU|WebGPU]], Vulkan ๋“ฑ ์ตœ์‹  ๊ทธ๋ž˜ํ”ฝ์Šค API ํ™˜๊ฒฝ์—์„œ ์ฃผ๋กœ ํ™œ์šฉ๋˜๋ฉฐ, Three.js์—์„œ๋„ WebGPU ๋„์ž…๊ณผ ํ•จ๊ป˜ ์ ๊ทน ํ™œ์šฉ๋˜๊ณ  ์žˆ๋‹ค [2, 6, 7]. ๋งค์šฐ ๋ณต์žกํ•˜๊ณ  ๋ฐฉ๋Œ€ํ•œ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃฐ ๋•Œ, ๊ธฐ์กด์˜ [[InstancedMesh|InstancedMesh]]๋‚˜ BatchedMesh๊ฐ€ CPU ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ๋ฐ ๋ฒ„ํผ ํŒจํ‚น์œผ๋กœ ์ธํ•ด ๊ฒช๊ฒŒ ๋˜๋Š” ์„ฑ๋Šฅ ์ €ํ•˜ ํ•œ๊ณ„๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ๋กœ ํ‰๊ฐ€๋ฐ›๋Š”๋‹ค [2, 8, 9]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & Updates) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Graphics & Performance ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[GPU-driven Rendering|GPU-Driven Rendering]], Compute Shader, Frustum Culling, [[WebGPU|WebGPU]] - **Projects/Contexts:** Three.js WebGPURenderer, BatchedMesh, [[Vulkan|Vulkan]] - **Contradictions/Notes:** ๋Œ€๊ทœ๋ชจ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ BatchedMesh๋งŒ์œผ๋กœ๋Š” CPU์˜ ๋ฒ„ํผ ์—…๋กœ๋“œ ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด ๊ทผ๋ณธ์ ์ธ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฉฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” WebGPU ํ™˜๊ฒฝ์˜ Indirect Draw ์ง€์›์ด ํ•„์ˆ˜์ ์ด๋ผ๋Š” ์ ์ด ์†Œ์Šค์—์„œ ํ•œ๊ณ„์ (pushing the limits)์œผ๋กœ ์ง€์ ๋œ๋‹ค [9]. --- *Last updated: 2026-04-19* --- ## ๐Ÿค– LLM ํ™œ์šฉ ํžŒํŠธ (How to Use This Knowledge) **์–ธ์ œ ์ด ์ง€์‹์„ ์“ฐ๋Š”๊ฐ€:** - *(TODO)* **์–ธ์ œ ์“ฐ๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€:** - *(TODO)* ## ๐Ÿงช ๊ฒ€์ฆ ์ƒํƒœ (Validation) - **์ •๋ณด ์ƒํƒœ:** needs_review - **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** A - **๊ฒ€ํ†  ์ด์œ :** *(P-Reinforce Phase 1 ์ž๋™ ์ •๊ทœํ™”. ๋ณธ๋ฌธ ๊ฒ€์ฆ ํ•„์š”.)* ## ๐Ÿงฌ ์ค‘๋ณต ๊ฒ€์‚ฌ (Duplicate Check) - **๊ธฐ์กด ์œ ์‚ฌ ๋ฌธ์„œ:** *(TODO: ์ธ๋ฑ์„œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌํฌํŠธ ์ฐธ์กฐ)* - **์ฒ˜๋ฆฌ ๋ฐฉ์‹:** UPDATE (์ž๋™ ์ •๊ทœํ™”) - **์ฒ˜๋ฆฌ ์ด์œ :** Phase 1 ์ •๊ทœํ™” โ€” ์˜› ํ…œํ”Œ๋ฆฟ/๋ˆ„๋ฝ ํ•„๋“œ ๋ณด๊ฐ•. ## ๐Ÿ•“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Changelog) | ๋‚ ์งœ | ๋ณ€๊ฒฝ ๋‚ด์šฉ | ์ฒ˜๋ฆฌ ๋ฐฉ์‹ | ์‹ ๋ขฐ๋„ | |------|-----------|-----------|--------| | 2026-05-08 | P-Reinforce Phase 1 ์ •๊ทœํ™” (frontmatter + ํ—ค๋” ํ‘œ์ค€ํ™”) | UPDATE | A | ## ๐Ÿ’ป ์ฝ”๋“œ ํŒจํ„ด (Code Patterns) **ํŒจํ„ด 1:** *(TODO: ์ด ํ”„๋กœ์ ํŠธ ์ปจ๋ฒค์…˜ ๋ฐ˜์˜ํ•œ ๊ตฌ์กฐ ์Šค์ผˆ๋ ˆํ†ค)* ```text # TODO ``` ## ๐Ÿค” ์˜์‚ฌ๊ฒฐ์ • ๊ธฐ์ค€ (Decision Criteria) **์„ ํƒ A๋ฅผ ์จ์•ผ ํ•  ๋•Œ:** - *(TODO)* **์„ ํƒ B๋ฅผ ์จ์•ผ ํ•  ๋•Œ:** - *(TODO)* **๊ธฐ๋ณธ๊ฐ’:** > *(TODO)* ## โŒ ์•ˆํ‹ฐํŒจํ„ด (Anti-Patterns) - **[์•ˆํ‹ฐํŒจํ„ด]:** *(TODO: ๋ฌด์—‡์„ ํ•˜๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€ + ์ด์œ  + ๋Œ€์‹  ๋ฌด์—‡์„)*