--- id: P-REINFORCE-AUTO-D6CCE0 category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - InstancedMesh 동적 버퍼 ν™•μž₯" --- # [[InstancedMesh 동적 버퍼 ν™•μž₯]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > InstancedMesh 동적 버퍼 ν™•μž₯은 λ Œλ”λ§ 쀑 μΈμŠ€ν„΄μŠ€ μˆ˜κ°€ 초기 ν• λ‹Ήλœ μš©λŸ‰(Capacity)을 μ΄ˆκ³Όν•  λ•Œ, μ‹œμŠ€ν…œμ΄ μƒˆλ‘œμš΄ 더 큰 버퍼λ₯Ό ν• λ‹Ήν•˜κ³  κΈ°μ‘΄ 데이터λ₯Ό λ³΅μ‚¬ν•˜λŠ” 과정을 μ˜λ―Έν•œλ‹€ [1]. 이 κ³Όμ •μ—μ„œ μˆ˜μ‹­ λ©”κ°€λ°”μ΄νŠΈ 크기의 배열이 λΉˆλ²ˆν•˜κ²Œ μƒμ„±λ˜κ³  νŒŒκ΄΄λ˜μ–΄ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(GC)을 μœ λ°œν•˜λ©°, μ΄λŠ” ν”„λ ˆμž„ μ§€μ—°(μŠ€ν„°ν„°λ§)μ΄λ‚˜ λ©”λͺ¨λ¦¬ ν• λ‹Ή 였λ₯˜λ‘œ 이어진닀 [1, 2]. 결과적으둜 μ΄λŸ¬ν•œ μ„±λŠ₯ 병λͺ©μ„ ν”Όν•˜κΈ° μœ„ν•΄ κ°œλ°œμžλ“€μ€ λŸ°νƒ€μž„ ν™•μž₯을 ν”Όν•˜κ³ , μ΅œλŒ€ μ˜ˆμƒ μΈμŠ€ν„΄μŠ€ μˆ˜μ— 맞좘 버퍼 사전 ν• λ‹Ήμ΄λ‚˜ 객체 풀링 μ „λž΅μ„ ꢌμž₯ν•˜κ³  μžˆλ‹€ [1, 3]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **동적 버퍼 ν™•μž₯의 λ°œμƒ 원리** InstancedMeshλŠ” 객체 μˆ˜κ°€ λ™μ μœΌλ‘œ λ³€ν•˜λŠ” ν™˜κ²½(예: 적듀이 μˆ˜μ‹œλ‘œ μƒμ„±λ˜κ±°λ‚˜ νŒŒκ΄΄λ˜λŠ” 상황)μ—μ„œ 초기 μš©λŸ‰μ„ λ„˜μ–΄μ„œλ©΄ μƒˆλ‘œμš΄ 버퍼λ₯Ό λ™μ μœΌλ‘œ ν™•μž₯ν•΄μ•Ό ν•œλ‹€ [1]. μ΄λ•Œ κΈ°μ‘΄ 데이터λ₯Ό μƒˆλ‘­κ³  더 큰 λ²„νΌλ‘œ λ³΅μ‚¬ν•˜λŠ” μž‘μ—…μ΄ ν•„μ—°μ μœΌλ‘œ μˆ˜λ°˜λœλ‹€ [1]. - **μ„±λŠ₯ μ €ν•˜ 및 λ©”λͺ¨λ¦¬ 문제** 동적 버퍼 ν™•μž₯은 λ©”λͺ¨λ¦¬ ν• λ‹Ή λΉˆλ„κ°€ 맀우 μž¦μ•„ CPU λΆ€ν•˜λ₯Ό κ·Ήλ„λ‘œ 높이며, 데이터 전솑 νš¨μœ¨μ„ λ–¨μ–΄λœ¨λ¦°λ‹€ [1]. κ΅¬ν˜• `TypedArray` 데이터가 λ©”λͺ¨λ¦¬μ—μ„œ λΉˆλ²ˆν•˜κ²Œ ν•΄μ œλ˜λŠ” κ³Όμ •μ—μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ κ°€λΉ„μ§€ 컬렉터(GC)κ°€ μž‘λ™ν•˜μ—¬ ν”„λ ˆμž„μ΄ μΌμ‹œμ μœΌλ‘œ λ©ˆμΆ”λŠ” ν˜„μƒ(Stuttering)이 λ°œμƒν•œλ‹€ [1]. A-Frame 기반 κ΅¬ν˜„ λ“± 일뢀 ν™˜κ²½μ—μ„œλŠ” μš©λŸ‰ 증가 μ‹œ 이전 InstancedMeshλ₯Ό κΉ”λ”ν•˜κ²Œ ν•΄μ œ(dispose)ν•˜μ§€ λͺ»ν•΄ μž‘μ€ λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)κ°€ λ°œμƒν•  μš°λ €λ„ μ‘΄μž¬ν•œλ‹€ [4]. Needle Engine ν™˜κ²½μ—μ„œλ„ 버퍼가 λ™μ μœΌλ‘œ ν™•μž₯될 λ•Œ "[Instancing] Growing Buffer"λΌλŠ” λ‘œκ·Έμ™€ ν•¨κ»˜ λ Œλ”λ§μ΄ μΌμ‹œμ μœΌλ‘œ 수 μ΄ˆκ°„ λ©ˆμΆ”λŠ” μ„±λŠ₯ 병λͺ©μ΄ κ΄€μ°°λ˜μ—ˆλ‹€ [2]. - **μ΅œμ ν™” 및 λŒ€μ•ˆ μ „λž΅** μ΄λŸ¬ν•œ μ„±λŠ₯ ν•˜λ½μ„ λ°©μ§€ν•˜λ €λ©΄ λŸ°νƒ€μž„μ— λ™μ μœΌλ‘œ 버퍼λ₯Ό ν™•μž₯ν•˜λŠ” λŒ€μ‹ , μ•± μ‹œμž‘ μ‹œμ μ΄λ‚˜ λ‘œλ“œ μ‹œ μ΅œλŒ€ μ˜ˆμƒ μΈμŠ€ν„΄μŠ€ μˆ˜μ— 맞좰 μΆ©λΆ„ν•œ 크기의 버퍼λ₯Ό 미리 ν• λ‹Ή(Preallocate)ν•˜λŠ” 방식이 ꢌμž₯λœλ‹€ [3, 5]. λ˜ν•œ, λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œλŠ” 예츑 λΆˆκ°€λŠ₯ν•œ 버퍼 ν™•μž₯을 막기 μœ„ν•΄ 사전에 μ—„κ²©ν•œ λ©”λͺ¨λ¦¬ μ˜ˆμ‚°μ„ μˆ˜λ¦½ν•΄μ•Ό ν•œλ‹€ [1]. λ©”λͺ¨λ¦¬ ν• λ‹Ή 및 ν•΄μ œμ˜ μ˜€λ²„ν—€λ“œλ₯Ό μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•΄ ν•œ 번 μƒμ„±λœ μΈμŠ€ν„΄μŠ€ 데이터λ₯Ό μž¬μ‚¬μš©ν•˜λŠ” 객체 풀링(Object Pooling)μ΄λ‚˜ 링 버퍼(Ring Buffer) ꡬ쑰λ₯Ό μ±„νƒν•˜λŠ” 것이 νš¨μœ¨μ μ΄λ‹€ [1]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[InstancedMesh]], [[κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ (Garbage Collection)]], 객체 풀링 (Object Pooling), 버퍼 사전 ν• λ‹Ή (Buffer Preallocation) - **Projects/Contexts:** [[Needle Engine]], A-Frame (instanced-mesh μ»΄ν¬λ„ŒνŠΈ), μ‹€μ‹œκ°„ μ›Ή κ·Έλž˜ν”½μŠ€ μ΅œμ ν™” - **Contradictions/Notes:** 예츑 λΆˆκ°€λŠ₯ν•œ λ‹€λŸ‰μ˜ 객체λ₯Ό λ Œλ”λ§ν•˜λ €λ©΄ 동적 ν™•μž₯이 ν•„μˆ˜μ μΈ κΈ°λŠ₯처럼 λ³΄μ΄λ‚˜, μ‹€μ œ λ Œλ”λ§ ν™˜κ²½μ—μ„œλŠ” 이 과정이 ν”„λ ˆμž„ λ“œλžκ³Ό λ©”λͺ¨λ¦¬ λˆ„μˆ˜ μœ„ν—˜ λ“± 높은 리슀크λ₯Ό μˆ˜λ°˜ν•˜λ―€λ‘œ 였히렀 κ³ μ • μš©λŸ‰ ν• λ‹Ήμ΄λ‚˜ 풀링을 톡해 μ›μ²œμ μœΌλ‘œ ν™•μž₯을 νšŒν”Όν•˜λŠ” 것이 κ°•λ ₯히 ꢌμž₯λœλ‹€ [1, 3, 4]. --- *Last updated: 2026-04-19* ---