--- id: P-REINFORCE-AUTO-7A315B category: "10_Wiki/๐Ÿ’ก Topics/Graphics & Performance" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Frustum Culling" --- # [[Frustum Culling|Frustum Culling]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง(Frustum Culling)์€ ์นด๋ฉ”๋ผ์˜ ์‹œ์•ผ(View Frustum) ๋ฐ–์œผ๋กœ ๋ฒ—์–ด๋‚œ ๊ฐ์ฒด๋ฅผ ๋ Œ๋”๋ง ์—ฐ์‚ฐ์—์„œ ์ œ์™ธํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ GPU ์ž์› ์†Œ๋ชจ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด๋‹ค [1]. ํ•˜์ง€๋งŒ InstancedMesh๋ฅผ ์ ์šฉํ•  ๊ฒฝ์šฐ ์—”์ง„ ์ˆ˜์ค€์—์„œ ์ „์ฒด๋ฅผ ๋‹จ์ผ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•˜๋ฏ€๋กœ, ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฑฐ๋Œ€ํ•œ ๋ฐ”์šด๋”ฉ ๋ณผ๋ฅจ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ ๋ฒˆ๋งŒ ์ปฌ๋ง์ด ์ˆ˜ํ–‰๋˜๋Š” '์ „๋ถ€ ์•„๋‹ˆ๋ฉด ์ „๋ฌด(All-or-Nothing)' ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค [2]. ์ด๋กœ ์ธํ•ด ํ™”๋ฉด์— ๊ทนํžˆ ์ผ๋ถ€์˜ ์ธ์Šคํ„ด์Šค๋งŒ ๋…ธ์ถœ๋˜๋”๋ผ๋„ ๋ณด์ด์ง€ ์•Š๋Š” ๋‚˜๋จธ์ง€ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์˜ ์ •์  ๋ณ€ํ™˜ ์—ฐ์‚ฐ์„ GPU๊ฐ€ ๊ฐ•์ œ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ตฌ์กฐ์  ํ•œ๊ณ„๋ฅผ ์•ผ๊ธฐํ•œ๋‹ค [2]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) - **InstancedMesh์—์„œ์˜ ๊ตฌ์กฐ์  ๋น„ํšจ์œจ์„ฑ** Three.js๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์นด๋ฉ”๋ผ ์‹œ์•ผ ๋ฐ–์˜ ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ปฌ๋งํ•ด ๋“œ๋กœ์šฐ ์ฝœ ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•œ๋‹ค [3]. ๊ทธ๋Ÿฌ๋‚˜ InstancedMesh๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค ๋‹จ์œ„์˜ ๋„ค์ดํ‹ฐ๋ธŒ ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง ๊ธฐ๋Šฅ์ด ์ƒ์‹ค๋œ๋‹ค [4]. ์—”์ง„์€ ์ „์ฒด ์ธ์Šคํ„ด์Šค์˜ ๋ฐ”์šด๋”ฉ ๋ณผ๋ฅจ๋งŒ์„ ๊ฒ€์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, 10,000๊ฐœ์˜ ๊ฐ์ฒด ์ค‘ ๋‹จ 1๊ฐœ๋งŒ ์‹œ์•ผ์— ๋“ค์–ด์™€๋„ GPU๋Š” 9,999๊ฐœ์˜ ๋ณด์ด์ง€ ์•Š๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ •์  ์…ฐ์ด๋”(Vertex Shader) ํ–‰๋ ฌ ๊ณฑ์…ˆ ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค [2]. ์ด๋Š” ํŠนํžˆ ์ €์‚ฌ์–‘ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ๋‚˜ ํ†ตํ•ฉ GPU ํ™˜๊ฒฝ์—์„œ ์น˜๋ช…์ ์ธ GPU ์ ์œ ์œจ ์ƒ์Šน ๋ฐ ํ”„๋ ˆ์ž„ ๋“œ๋ž์„ ์œ ๋ฐœํ•œ๋‹ค [2, 5]. - **์ˆ˜๋™ CPU ์ปฌ๋ง์˜ ๋ณ‘๋ชฉ ํ˜„์ƒ** GPU ๋‚ญ๋น„๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(CPU) ์ˆ˜์ค€์—์„œ ๊ฐ ์ธ์Šคํ„ด์Šค์˜ ์œ„์น˜๋ฅผ ์นด๋ฉ”๋ผ ํ‰๋ฉด๊ณผ ๋Œ€์กฐํ•˜์—ฌ ๊ฐ€์‹œ์„ฑ์„ ํŒ๋‹จํ•˜๊ณ  ๋ Œ๋”๋งํ•  ๋ฒ„ํผ๋ฅผ ๋งค ํ”„๋ ˆ์ž„ ์žฌ๊ตฌ์„ฑ(Reordering)ํ•  ์ˆ˜ ์žˆ๋‹ค [5, 6]. ํ•˜์ง€๋งŒ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํŠน์„ฑ์„ ๊ฐ–๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋Œ€๊ทœ๋ชจ ๋ฐฐ์—ด์„ ๋งค๋ฒˆ ์ˆœํšŒํ•˜๊ณ  ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ์น˜๋ช…์ ์ธ CPU ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋ณ‘๋ชฉ๊ณผ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC) ๋ถ€ํ•˜๋ฅผ ์ผ์œผํ‚จ๋‹ค [5]. - **ํ•œ๊ณ„ ๊ทน๋ณต์„ ์œ„ํ•œ ๋Œ€์•ˆ ์ „๋žต** 1. **๊ณต๊ฐ„ ๋ถ„ํ•  ๊ธฐ๋ฐ˜ ๊ทธ๋ฃนํ™” ์ „๋žต**: ์ˆ˜๋งŒ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ InstancedMesh๋กœ ๋ฌถ๋Š” ๋Œ€์‹ , ๊ณต๊ฐ„์ ์œผ๋กœ ์ธ์ ‘ํ•œ ๊ฐ์ฒด๋“ค์„ 100~500๊ฐœ ๋‹จ์œ„์˜ ์†Œ๊ทœ๋ชจ InstancedMesh๋กœ ๋ถ„ํ•  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด ๊ฒฝ์šฐ ๋“œ๋กœ์šฐ ์ฝœ ํšŸ์ˆ˜๋Š” ๋‹ค์†Œ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง ์ •๋ฐ€๋„๊ฐ€ ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์–ด GPU์˜ ๋ฌด์˜๋ฏธํ•œ ์ •์  ์—ฐ์‚ฐ์„ ๊ทน์ ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค [7]. 2. **GPU ์ปดํ“จํŠธ ์ปฌ๋ง ๋ฐ ๊ฐ„์ ‘ ๊ทธ๋ฆฌ๊ธฐ(Indirect Draw)**: WebGPU ํ™˜๊ฒฝ์˜ ์ปดํ“จํŠธ ์…ฐ์ด๋”(Compute Shader)๋ฅผ ํ™œ์šฉํ•ด GPU๊ฐ€ ์ง์ ‘ ์ธ์Šคํ„ด์Šค์˜ ๊ฐ€์‹œ์„ฑ์„ ํŒ๋ณ„ํ•˜๋„๋ก ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค [8, 9]. ํŒ๋ณ„ ๊ฒฐ๊ณผ๋Š” GPU ๋‚ด๋ถ€ ๋ฒ„ํผ์— ์ €์žฅ๋˜์–ด `drawIndirect` ๋ช…๋ น์œผ๋กœ ์ฆ‰๊ฐ ๋ Œ๋”๋ง๋˜๋ฏ€๋กœ, CPU ์—ฐ์‚ฐ ๋ฐ CPU-GPU ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ณ‘๋ชฉ์„ ์™„๋ฒฝํžˆ ํšŒํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค [9]. 3. **ํ™•์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋„์ž…**: BVH(Bounding Volume Hierarchy)๋ฅผ ์ด์šฉํ•œ ๊ณ ์† ๊ณต๊ฐ„ ์ฟผ๋ฆฌ์™€ `InstancedBufferAttribute`๋ฅผ ํ™œ์šฉํ•œ ๊ฐ„์ ‘ ์ฐธ์กฐ(Indirection) ๋ฐฉ์‹์„ ํ†ตํ•ด ๊ธฐ์กด InstancedMesh๋ฅผ ํ™•์žฅํ•˜์—ฌ ํšจ์œจ์ ์ธ ๊ฐœ๋ณ„ ์ปฌ๋ง์„ ์ œ๊ณตํ•˜๋Š” `InstancedMesh2`์™€ ๊ฐ™์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ์ด ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์žˆ๋‹ค [10-12]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Graphics & Performance ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[InstancedMesh|InstancedMesh]], [[Draw Call|Draw Call]], [[WebGPU|WebGPU]], [[Bounding Volume Hierarchy (BVH)|Bounding Volume Hierarchy (BVH)]] - **Projects/Contexts:** [[Three.js|Three.js]], [[InstancedMesh2|InstancedMesh2]] - **Contradictions/Notes:** InstancedMesh ๊ธฐ์ˆ ์€ ๋“œ๋กœ์šฐ ์ฝœ ๊ฐ์†Œ๋ฅผ ํ†ตํ•ด CPU ๋ณ‘๋ชฉ์„ ํš๊ธฐ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋‚˜, ๋™์‹œ์— ๊ฐœ๋ณ„ ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง์„ ๋ฌด๋ ฅํ™”์‹œํ‚ด์œผ๋กœ์จ ๊ฒฐ๊ณผ์ ์œผ๋กœ GPU ์ธก๋ฉด์— ์ƒˆ๋กœ์šด ์ •์  ์—ฐ์‚ฐ ๋ณ‘๋ชฉ์„ ์œ ๋ฐœํ•˜๋Š” ๋ชจ์ˆœ์ ์ธ ์ ˆ์ถฉ(Trade-off)์„ ์š”๊ตฌํ•œ๋‹ค [5, 13]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Frustum Culling.md ---