--- id: P-REINFORCE-AUTO-8EEC8D category: "10_Wiki/๐Ÿ’ก Topics/Graphics & Performance" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Indirect Draw" --- # [[Indirect Draw|Indirect Draw]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > Indirect Draw(๊ฐ„์ ‘ ๊ทธ๋ฆฌ๊ธฐ)๋Š” ๋ Œ๋”๋งํ•  ๊ฐ์ฒด์˜ ์ˆ˜์™€ ์ •๋ณด๋ฅผ CPU๊ฐ€ ์•„๋‹Œ GPU๊ฐ€ ์ปดํ“จํŠธ ์…ฐ์ด๋”(Compute Shader)์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ง์ ‘ ๊ฒฐ์ •ํ•˜์—ฌ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๋Š” GPU ์ฃผ๋„ ๋ Œ๋”๋ง(GPU-driven rendering) ๊ธฐ๋ฒ•์ด๋‹ค [1, 2]. ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง(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, Vulkan ๋“ฑ ์ตœ์‹  ๊ทธ๋ž˜ํ”ฝ์Šค API ํ™˜๊ฒฝ์—์„œ ์ฃผ๋กœ ํ™œ์šฉ๋˜๋ฉฐ, Three.js์—์„œ๋„ WebGPU ๋„์ž…๊ณผ ํ•จ๊ป˜ ์ ๊ทน ํ™œ์šฉ๋˜๊ณ  ์žˆ๋‹ค [2, 6, 7]. ๋งค์šฐ ๋ณต์žกํ•˜๊ณ  ๋ฐฉ๋Œ€ํ•œ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃฐ ๋•Œ, ๊ธฐ์กด์˜ InstancedMesh๋‚˜ BatchedMesh๊ฐ€ CPU ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ๋ฐ ๋ฒ„ํผ ํŒจํ‚น์œผ๋กœ ์ธํ•ด ๊ฒช๊ฒŒ ๋˜๋Š” ์„ฑ๋Šฅ ์ €ํ•˜ ํ•œ๊ณ„๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ๋กœ ํ‰๊ฐ€๋ฐ›๋Š”๋‹ค [2, 8, 9]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Graphics & Performance ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[GPU-driven Rendering|GPU-Driven Rendering]], [[Compute Shader|Compute Shader]], [[Frustum Culling|Frustum Culling]], [[WebGPU|WebGPU]] - **Projects/Contexts:** [[Three.js WebGPURenderer|Three.js WebGPURenderer]], [[BatchedMesh|BatchedMesh]], [[Vulkan|Vulkan]] - **Contradictions/Notes:** ๋Œ€๊ทœ๋ชจ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ BatchedMesh๋งŒ์œผ๋กœ๋Š” CPU์˜ ๋ฒ„ํผ ์—…๋กœ๋“œ ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด ๊ทผ๋ณธ์ ์ธ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฉฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” WebGPU ํ™˜๊ฒฝ์˜ Indirect Draw ์ง€์›์ด ํ•„์ˆ˜์ ์ด๋ผ๋Š” ์ ์ด ์†Œ์Šค์—์„œ ํ•œ๊ณ„์ (pushing the limits)์œผ๋กœ ์ง€์ ๋œ๋‹ค [9]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Indirect Draw.md ---