4.4 KiB
id, category, confidence_score, tags, last_reinforced, github_commit
| id | category | confidence_score | tags | last_reinforced | github_commit | |
|---|---|---|---|---|---|---|
| P-REINFORCE-AUTO-1189F7 | 10_Wiki/💡 Topics/Graphics & Performance | 0.90 |
|
2026-04-20 | [P-Reinforce] Continuous Worker - SkinnedMesh |
SkinnedMesh
📌 한 줄 통찰 (The Karpathy Summary)
SkinnedMesh는 뼈대(Bone) 계층 구조를 기반으로 한 애니메이션(예: 캐릭터의 얼굴 뼈대나 손가락 움직임 등)을 구현할 때 사용되는 3D 객체 타입입니다 [1-3]. 단일 객체로는 원활하게 동작하지만 대량으로 렌더링할 경우 심각한 CPU 병목 현상을 유발하며 [4], 정점이 다수의 본 행렬에 영향을 받는 특성상 대규모 렌더링 최적화 기법인 InstancedMesh와 기본적으로 호환되지 않는 물리적 한계를 지닙니다 [3].
📖 구조화된 지식 (Synthesized Content)
-
동작 원리와 성능 병목: SkinnedMesh의 각 정점은 여러 개의 본(Bone) 변환 행렬에 의해 영향을 받아 변형됩니다 [3]. 따라서 화면에 100개에서 1,000개 이상의 많은 SkinnedMesh를 개별적으로 렌더링하려고 시도할 경우, 연산 부하로 인해 심각한 CPU 병목 현상에 직면하게 됩니다 [4].
-
InstancedMesh 연동의 구조적 한계: Three.js의 기본 InstancedMesh는 본 기반의 스킨드 애니메이션을 지원하지 않습니다 [3]. 각 인스턴스마다 고유한 포즈를 취하게 하려면 개별 인스턴스별로 전체 본 행렬 세트를 GPU로 전송해야 하는데(예: 100개의 인스턴스가 각각 60개의 본을 가질 경우 매 프레임 6,000개의 행렬 데이터 전송 필요), 이는 인스턴스 속성 버퍼의 제한 용량을 쉽게 초과하게 만듭니다 [3].
-
애니메이션 시스템(AnimationMixer)의 비호환성: Three.js의 표준 애니메이션 시스템인
AnimationMixer는 개별 객체의 시간축을 개별적으로 관리하도록 설계되어 있어, 단일 드로우 콜로 여러 객체를 처리하는 InstancedMesh의 구조와 호환되지 않습니다 [3]. 각 인스턴스마다 다른 애니메이션 재생 상태를 적용하려면 셰이더에서 직접 인스턴스 ID 기반으로 시간 오프셋을 계산하는 등 복잡한 작업이 필요합니다 [3]. -
스킨드 메쉬 렌더링 최적화 전략:
- 본 텍스처(Bone Texture) 도입: GPU 전송 한계를 극복하기 위해 모든 애니메이션 변환 행렬 데이터를 '본 텍스처(Bone Texture)' 또는 텍스처 아틀라스에 구워 넣고, 커스텀 셰이더 단계에서 이를 샘플링해 애니메이션을 구현하는 우회 파이프라인이 사용됩니다 [1, 3, 5].
- 애니메이션 LOD(Level of Detail): 거리가 먼 SkinnedMesh 인스턴스의 경우 계산해야 할 본의 개수를 줄이거나(예: 손가락이나 발의 굽힘 뼈대 연산 생략), 애니메이션 업데이트 주기를 낮추어 본 텍스처의 크기와 연산량을 줄이는 방식이 필수적입니다 [6-9].
- 커스텀 라이브러리 활용: 커뮤니티에서는 기본 기능의 한계를 보완하기 위해, 개별 애니메이션 믹서 제어, LOD 시스템, 그리고 절두체 컬링(Frustum Culling) 기능을 포함하여 2만 개 이상의 스킨드 인스턴스 처리를 가능하게 하는
InstancedMesh2와 같은 확장 라이브러리를 활용하기도 합니다 [6, 10-13].
⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- 과거 데이터와의 충돌: 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- 정책 변화: Graphics & Performance 분야의 자동 자산화 수행.
🔗 지식 연결 (Graph)
- Related Topics: InstancedMesh, InstancedMesh2, AnimationMixer, Bone Texture, Level of Detail (LOD)
- Projects/Contexts: Three.js 엔진의 대규모 군중 렌더링 및 애니메이션 처리
- Contradictions/Notes: 엔진의 공식 기능 상으로는 데이터 전송량의 기하급수적 증가 및
AnimationMixer와의 아키텍처 충돌 문제로 스킨드 메쉬의 대규모 인스턴싱이 불가능하다고 지적되지만 [3], 개발자들은 본 텍스처를 활용한 셰이더 커스터마이징이나InstancedMesh2라이브러리를 적용하여 각기 다른 애니메이션을 가진 수만 개의 SkinnedMesh를 단일 혹은 최소한의 드로우 콜로 최적화하여 렌더링하는 데 성공하고 있습니다 [3, 6, 12].
Last updated: 2026-04-19