쿼드트리
요즘엔 쿼드트리를 쓰기보다 BSP(Binary Space Partitioning)를 더 활용함
컬링(Culling)

이상적인 객체지향 설계 순서
- 객체를 만들 때 속성부터 생각하지 말고 객체의 책임부터 생각하는게 낫다고 한다
- 바텀업이 아니라 탑다운
함수 반환 타입 고민
std::vector<Node*> Query(Node* queryNode);// vsbool Query(Node* queryNode, std::vector<Node*>& outNodeList);| 기준 | 반환형 vector | bool + out |
|---|---|---|
| 가독성 | ⭐⭐⭐⭐ | ⭐⭐ |
| 실패 표현 | ❌ 애매 | ⭐⭐⭐⭐ |
| 반복 호출 성능 | 보통 | ⭐⭐⭐⭐ |
| API 안정성 | ⭐⭐⭐⭐ | 계약 필요 |
| Modern C++ 스타일 | ⭐⭐⭐⭐ | ⭐ |
그래픽스 프로그래밍
.cso
compiled shader object, 확장자가 표준이 아니라 엔진별로 다를 수 있음
FBX
FBX (Filmbox) 는 3D 데이터 교환용 파일 포맷(산업 표준)
FBX에 포함 가능한 데이터
- 3D 메시 (Polygon Mesh)
- 머티리얼 / 텍스처
- 본(Bone) 구조
- 애니메이션 데이터
- 카메라 / 라이트
사용 목적
서로 다른 툴 간 데이터 전달:
- Maya → Unity
- Blender → Unreal Engine
리깅 (Rigging)
3D 모델에 뼈(Bone, 관절 구조)를 심어 움직일 수 있게 만드는 작업
기본 과정
- 모델링 완료
- 본 구조 생성
- 메시와 본 연결
- 애니메이션 가능 상태로 구성
스키닝 (Skinning)
Mesh를 Bone에 연결하는 작업
Weight Painting
각 정점(Vertex)이 어떤 뼈(Bone)의 영향을 얼마나 받을지 설정
e.g.
- 팔꿈치 → 상완 50% + 하완 50%
- 손등 → 손목 100%
목적
- 관절의 자연스러운 변형
- 찢어짐/비정상 왜곡 방지
FK, IK
FK (Forward Kinematics)
부모 뼈를 회전 → 자식 뼈가 따라 움직임 e.g. 어깨 회전 → 팔 → 손
특징
- 구조 단순
- 자연스러운 아크 동작
- 걷기, 팔 휘두르기 등에 적합
IK (Inverse Kinematics)
끝 지점을 움직이면 중간 관절이 자동 계산됨 e.g. 손을 벽에 붙이면 팔꿈치 자동 계산
특징
- 발 고정
- 손 위치 고정
- 지형 대응
게임 엔진에서의 처리
기본 파이프라인
모델링 ↓ 리깅 ↓ 스키닝 ↓ 애니메이션 제작 ↓ FBX Export ↓ 엔진 Import엔진에서 수행하는 기능
1. 리타게팅 (Retargeting)
다른 캐릭터에 애니메이션 재사용
2. 런타임 블렌딩
- 걷기 ↔ 달리기 보간
- 공격 중 피격 블렌딩
- Aim Offset
3. IK 보정
- 계단에서 발 위치 자동 보정
- 총기 양손 정렬
4. 물리 기반 처리
- 라그돌 (Ragdoll)
- 물리 본 (머리카락, 옷)