Initial Dansori character workspace
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
# Animation.md — 리그 클립 (`dance_idle.json`) 설명
|
||||
|
||||
리그(16파츠)를 움직이는 **본 단위 키프레임** 클립. 뷰어가 매 프레임 샘플링해 60fps 재생. 이 스키마는 반응 시퀀서(`../06_Reactions/`)의 `transform` 레이어에도 쓰인다.
|
||||
|
||||
## 스키마
|
||||
```jsonc
|
||||
{
|
||||
"duration": 2.0, "loop": true,
|
||||
"defaultEase": "sine", // "linear"도 가능
|
||||
"tracks": {
|
||||
"<boneName>": {
|
||||
"rot": [ {"t":0,"v":0}, {"t":0.5,"v":7}, ... ], // 회전 delta(deg, +=시계)
|
||||
"tx": [...], "ty": [...], // 부모 프레임 이동 delta(px, +y=아래)
|
||||
"sx": [...], "sy": [...] // 스케일 delta(0=변화없음→배율1)
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
- 값은 **리그 휴지 자세에 더해진다**(`rest + delta`).
|
||||
- **각 트랙 첫 키 = 마지막 키** 로 두면 루프가 이음매 없이 반복.
|
||||
|
||||
## 현재 클립: `dance_idle` (가벼운 2박 그루브, 2초 루프)
|
||||
- pelvis: 바운스+스웨이 / chest: 반대 카운터 / head: 좌우 ±7°(+neck 지연) / 팔: 좌우 교대 펌핑 / 다리: 무릎 교대 굽힘.
|
||||
|
||||
## 강도 조절
|
||||
- 과하면 모든 `v`×0.6~0.8 / 목 벌어지면 `head.rot` 폭↓ / 신나게 pelvis `ty`↑ / 빠르게 `duration`↓.
|
||||
|
||||
## 새 클립
|
||||
- 이 파일 복제 → 원하는 본 트랙만 작성(첫=끝) → 뷰어 "애니메이션 불러오기"로 확인.
|
||||
- 상시 포즈 오프셋은 클립이 아니라 `../04_Rig/rig.json`의 `angle`로 주는 게 깔끔(클립은 그 위 흔들림만).
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"name": "dance_idle",
|
||||
"duration": 2.0,
|
||||
"loop": true,
|
||||
"fpsHint": 60,
|
||||
"defaultEase": "sine",
|
||||
"note": "하루카 전용 튜닝 — 세일러 블라우스↔스커트가 별개라 CHEST 트랙 없음(허리 봉인). 블라우스가 재킷처럼 두껍지 않아 어깨 소켓 틈이 나기 쉬워 upperarm 진폭을 작게(±4), 팔 생동감은 forearm/hand(소매 안)로. 스웨이는 pelvis가 상체 통째로.",
|
||||
"tracks": {
|
||||
"pelvis": {
|
||||
"ty": [ {"t":0,"v":0}, {"t":0.5,"v":9}, {"t":1.0,"v":0}, {"t":1.5,"v":9}, {"t":2.0,"v":0} ],
|
||||
"tx": [ {"t":0,"v":0}, {"t":0.5,"v":6}, {"t":1.0,"v":0}, {"t":1.5,"v":-6}, {"t":2.0,"v":0} ],
|
||||
"rot": [ {"t":0,"v":0}, {"t":0.5,"v":3}, {"t":1.0,"v":0}, {"t":1.5,"v":-3}, {"t":2.0,"v":0} ]
|
||||
},
|
||||
|
||||
"neck": { "rot": [ {"t":0,"v":0}, {"t":0.5,"v":2}, {"t":1.0,"v":0}, {"t":1.5,"v":-2}, {"t":2.0,"v":0} ] },
|
||||
"head": {
|
||||
"rot": [ {"t":0,"v":0}, {"t":0.5,"v":5}, {"t":1.0,"v":0}, {"t":1.5,"v":-5}, {"t":2.0,"v":0} ],
|
||||
"ty": [ {"t":0,"v":0}, {"t":0.5,"v":-2}, {"t":1.0,"v":0}, {"t":1.5,"v":-2}, {"t":2.0,"v":0} ]
|
||||
},
|
||||
|
||||
"upperarm_r": { "rot": [ {"t":0,"v":0}, {"t":0.5,"v":4}, {"t":1.0,"v":0}, {"t":1.5,"v":-2}, {"t":2.0,"v":0} ] },
|
||||
"forearm_r": { "rot": [ {"t":0,"v":0}, {"t":0.5,"v":9}, {"t":1.0,"v":0}, {"t":1.5,"v":-5}, {"t":2.0,"v":0} ] },
|
||||
"hand_r": { "rot": [ {"t":0,"v":0}, {"t":0.5,"v":5}, {"t":1.0,"v":0}, {"t":1.5,"v":-3}, {"t":2.0,"v":0} ] },
|
||||
|
||||
"upperarm_l": { "rot": [ {"t":0,"v":0}, {"t":0.5,"v":-2}, {"t":1.0,"v":0}, {"t":1.5,"v":4}, {"t":2.0,"v":0} ] },
|
||||
"forearm_l": { "rot": [ {"t":0,"v":0}, {"t":0.5,"v":-5}, {"t":1.0,"v":0}, {"t":1.5,"v":9}, {"t":2.0,"v":0} ] },
|
||||
"hand_l": { "rot": [ {"t":0,"v":0}, {"t":0.5,"v":-3}, {"t":1.0,"v":0}, {"t":1.5,"v":5}, {"t":2.0,"v":0} ] },
|
||||
|
||||
"thigh_r": { "rot": [ {"t":0,"v":0}, {"t":0.5,"v":2}, {"t":1.0,"v":0}, {"t":1.5,"v":-1}, {"t":2.0,"v":0} ] },
|
||||
"shin_r": { "rot": [ {"t":0,"v":0}, {"t":0.5,"v":5}, {"t":1.0,"v":0}, {"t":1.5,"v":0}, {"t":2.0,"v":0} ] },
|
||||
"thigh_l": { "rot": [ {"t":0,"v":0}, {"t":0.5,"v":-1}, {"t":1.0,"v":0}, {"t":1.5,"v":2}, {"t":2.0,"v":0} ] },
|
||||
"shin_l": { "rot": [ {"t":0,"v":0}, {"t":0.5,"v":0}, {"t":1.0,"v":0}, {"t":1.5,"v":5}, {"t":2.0,"v":0} ] }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user