블렌더 모션 상태 검사은(는) 무엇을 하나요?
사용 시점
- 블렌더 캐릭터 애니메이션이 뒤틀리거나, 대칭이 반전되었거나, 평평해졌거나, 오프셋이 있거나, 발이 미끄러지는 현상이 보일 때
- 임포트된 아바타, 아마추어 또는 리타겟된 모션이 예상 포즈와 일치하는지 묻는 질문이 있을 때
- 렌더링된 증거와 본, 바운딩 박스, 접촉, 방향 벡터와 같은 구조화된 사실을 비교해야 할 때
- 모델이 캐릭터인지, 소품인지, 대용 메시인지, 컨트롤 리그인지, 아니면 깨진 임포트인지 판단해야 하는 워크플로우에 의존할 때
핵심 원칙
애니메이션 3D 에셋을 스크린샷만으로 판단하지 마십시오. 스크린샷은 검토 증거이지만, 축 규칙, 본 이름, 객체 스케일, 로컬 트랜스폼, 부모 관계가 있는 메시, 재질 슬롯, 프레임별 접촉 상태를 숨깁니다.
먼저 블렌더의 구조화된 상태를 추출한 다음, 뷰포트 스크린샷이나 렌더링을 사용하여 그 사실이 의미하는 바를 확인하십시오.
작동 방식
- 모션을 판단하기 전에 깨끗한 씬과 에셋 베이스라인을 설정합니다.
- 블렌더 내부 인터프리터에서 실행되는 블렌더 Python 또는 익스포터를 사용하여 블렌더에서 구조화된 사실을 추출합니다.
- 접촉, 방향, 스케일, 리타겟팅 오류를 가장 잘 드러낼 프레임을 샘플링합니다.
- 측정된 사실을 사용자의 예상 포즈, 방향, 지면, 렌더링 목표와 비교합니다.
- 확인된 사실, 가능한 원인, 필요한 수정 사항을 구분하는 간결한 보고서를 반환합니다.
검사 워크플로우
-
씬 인벤토리.
- 메시, 아마추어, 엠프티, 카메라, 조명, 모디파이어, 부모 관계, 숨겨진 객체 목록.
- 아바타를 판단하기 전에 캐릭터 메시를 헬퍼/프록시 지오메트리와 분리.
- 객체 공간 및 월드 공간 바운딩 박스 기록.
-
골격 식별.
- 아마추어 이름, 포즈 본, 본 헤드/테일, 롤, 부모 체인, 제약 조건, 휴식 포즈 축 캡처.
- 엉덩이, 척추, 목, 머리, 어깨, 팔꿈치, 손, 허벅지, 무릎, 발목, 발과 같은 의미론적 본 매핑.
- 누락된 좌/우 쌍 및 비정상적인 명명 방식 플래그 지정.
-
전방, 상방, 측방 축 결정.
- 골반, 척추, 어깨, 엉덩이, 머리, 발을 함께 사용; 단일 메시 노멀에 의존하지 마십시오.
- 로컬 아마추어 축을 월드 축 및 glTF Y-up 대 블렌더 Z-up과 같은 임포트된 파일 규칙과 비교.
- 얼굴/머리/발 방향이 루트 모션과 충돌할 때 대칭이 반전되었거나 거꾸로 임포트된 가능성 표시.
-
애니메이션 프레임 샘플링.
- 첫 번째, 중간, 접촉, 공중, 극단적인 프레임 검사.
- 루트 위치, 루트 방향, 골반 높이, 상체 기울기, 사지 방향, 발 간격, 메시 경계 기록.
- 길거나 빠른 모션의 경우 뒤집기, 착지, 회전, 충돌, 바닥 접촉 주변에서 더 조밀하게 샘플링.
-
리타겟팅 문제를 비난하기 전에 모델 무결성 확인.
- 애니메이션을 적용하기 전에 깨끗한 베이스라인 모양 확인.
- 사용자가 명시적으로 수리를 요청하지 않는 한 원래 메시, 재질, 아마추어, 스키닝 유지.
- 설명할 수 없는 구형 덩어리, 거대한 프록시 메시, 또는 으스러진 몸체는 반증될 때까지 임포트/선택 문제로 처리.
-
접촉 및 모션 문제 진단.
- 지면 관통: 프레임별로 가장 낮은 발 또는 신발 버텍스를 바닥 높이와 비교.
- 발 미끄러짐: 고정된 프레임 사이에서 발의 월드 위치 비교.
- 다리 교차: 왼쪽/오른쪽 허벅지, 무릎, 발목, 발의 측면 순서 비교.
- 비틀림 손상: 사지 축을 중심으로 한 롤/비틀림과 별도로 본 스윙 방향 비교.
- 스케일 드리프트: 애니메이션된 메시 경계를 깨끗한 베이스라인 경계와 비교.
-
의견보다 사실을 먼저 보고.
- 프레임 번호, 객체 이름, 본 이름, 월드 좌표, 임계값 포함.
- 확인된 실패와 시각적 의심을 분리.
- 구조화된 상태가 무엇을 찾아야 하는지 설명한 후에만 스크린샷 첨부.
권장 보고서 형식
## 블렌더 모션 검사
### 씬 인벤토리
- 캐릭터 후보:
- 아마추어:
- 헬퍼/프록시 객체:
- 카메라/조명:
### 방향
- 월드 상:
- 캐릭터 전방:
- 루트 방향:
- 대칭 반전/거꾸로 위험:
### 베이스라인 무결성
- 깨끗한 메시 경계:
- 애니메이션 메시 경계:
- 재질/스킨 유지 여부:
- 의심스러운 비캐릭터 메시:
### 프레임 결과
| 프레임 | 결과 | 증거 |
| --- | --- | --- |
| 1 | 깨끗한 베이스라인 포즈 | 엉덩이/척추/발 정렬됨 |
| 96 | 발이 바닥 관통 | left_foot min_z = -0.04 |
### 판결
- 통과/실패:
- 필요한 수정:
- 렌더링 준비 상태:
예시
발 미끄러짐이 있는 걷기 사이클
시나리오: 리타겟된 캐릭터가 걷기 사이클 동안 미끄러지는 것처럼 보이지만, 전면 카메라 각도로는 발 접촉을 판단하기 어렵습니다.
워크플로우 적용:
- 씬 인벤토리: 캐릭터 메시
HeroBody, 아마추어HeroRig, 지면Floor, 숨겨진 프록시 메시 없음. - 골격 식별: 의미론적 발은
foot.L및foot.R; 엉덩이는pelvis; 루트 본은root. - 애니메이션 프레임 샘플링: 발이 고정된 순간 주변의 프레임 1, 18, 24, 30, 42, 48 검사.
- 접촉 및 모션 문제 진단: 고정된 프레임 동안 발의 월드 공간 위치 비교.
추출된 사실:
| 프레임 | 사실 | 증거 |
|---|---|---|
| 18 | 왼발이 고정됨 | foot.L min_z = 0.004, 발가락과 발뒤꿈치 모두 바닥 근처 |
| 24 | 왼발이 고정된 상태에서 미끄러짐 | foot.L x = 0.21 -> 0.28 6프레임 동안 |
| 30 | 골반이 계속 앞으로 이동 | pelvis y = 1.14 -> 1.31 |
판결: 렌더링 준비 실패. 모션에 발 잠금 정리 또는 리타겟팅 제약 조건 검토가 필요함; 바디 메시 비율 변경은 필요하지 않음.
거꾸로 임포트된 캐릭터
시나리오: 캐릭터가 정지 프레임에서는 올바르게 보이지만, 애니메이션이 예상 이동 방향과 반대로 움직입니다.
워크플로우 적용:
- 전방, 상방, 측방 축 결정: 머리, 가슴, 발, 루트 모션 비교.
- 애니메이션 프레임 샘플링: 프레임 1과 이동 경로의 중간 지점 검사.
- 의견보다 사실을 먼저 보고: 루트 방향과 모델이 향하는 방향을 별도로 포함.
추출된 사실:
| 프레임 | 사실 | 증거 |
|---|---|---|
| 1 | 캐릭터 얼굴이 월드 -Y 방향 | neck에서 head로의 벡터가 -Y로 확인됨 |
| 72 | 루트 모션이 월드 +Y 방향으로 이동 | root y = 0.0 -> 2.8 |
| 72 | 발은 여전히 이동 방향 반대쪽을 시각적으로 향함 | 발가락 본은 -Y를 가리키지만 변위는 +Y |
판결: 거꾸로 임포트되었거나 리타겟팅 전방 축 불일치 가능성. 애니메이션 커브를 편집하기 전에 임포트/리타겟 축 매핑 수정.
실용 임계값
- 씬 단위 스케일이 달리 명시되지 않는 한 블렌더의 기본 미터 단위를 가정.
- 지면 관통이 1-2cm 이상이면 바닥이 부드럽거나 의도적으로 스타일화되지 않은 이상 눈에 띄는 것으로 처리.
- 갑작스러운 스케일 변화가 5% 이상이면 리그, 제약 조건 또는 트랜스폼 상속 문제 가능성.
- 공중 반전 모션 중 왼쪽/오른쪽 발목 측면 순서가 뒤집히면 나중에 복구되더라도 다리 교차 위험으로 처리.
- 루트 방향 점프가 프레임당 30도 이상이면 소스 모션에 급회전이 포함되지 않은 한 의심스러운 것으로 처리.
안티 패턴
- 명시적으로 메시 수리가 작업이 아닌 한 포즈 일치를 위해 바디 비율을 수정하지 마십시오.
- 기록하기 전에 깨끗한 베이스라인을 베이크하지 마십시오.
- 하나의 렌더링된 카메라 각도를 포즈가 올바르다는 증거로 사용하지 마십시오.
- 헬퍼 객체가 캐릭터의 일부가 아닌 이유를 기록하기 전에 삭제하지 마십시오.
- 아바타가 +Y, -Y, +X 또는 -X를 향하는지 머리, 발, 몸통, 루트 모션을 함께 확인하지 않고 가정하지 마십시오.
도구 노트
블렌더 상태 익스포터를 사용할 수 있다면 메시, 아마추어, 포즈 본, 재질, 접촉, 바운딩 박스, 샘플링된 애니메이션 프레임이 포함된 JSON을 선호하십시오. 익스포터가 없으면 블렌더 자체를 통해 작은 블렌더 Python 스크립트를 실행하십시오. 예를 들어 blender --background scene.blend --python collect_motion_state.py와 같이, bpy는 일반 시스템 Python 인터프리터에서 사용할 수 없기 때문입니다.