콘텐츠로 이동

차원과 Key Domain

Video tutorial — coming soon

이것이 이 도구 전체가 세워진 아이디어이며, 한 페이지로 충분합니다.

pose는 주소(address)에 저장됩니다. dimension은 그 주소를 이루는 하나의 구성 요소입니다.


layer의 dimension은 어떻게 합산되는가

pose layer는 세 가지를 통해 key를 넣습니다.

its own grid   +   its carrying control   +   its knob

각각이 자신의 축을 기여하고, 그것들이 합쳐져 하나의 주소를 이룹니다.

layer 합계 Chip
3 × 3 grid, global, knob 없음 2 2D
같은 layer가 Head control 안에 있을 때 2 + 2 4D
…13-position phoneme knob를 통해 key가 있을 때 2 + 2 + 1 5D
…그 knob가 3 × 3 grid였다면 2 + 2 + 2 6D

pose layer의 상한은 6이며 — 자신의 grid(최대 2), 자신의 control(최대 2), 그리고 knob 하나(최대 2) — 체인이 완전히 global일 때는 4입니다: control이 없으면 실어 나르는 grid도 없으므로, global layer의 상한은 자신의 2에 2D knob을 더한 것입니다. ORC는 axis를 붙일 수 있는 모든 곳에서 이 예산을 강제합니다 — Knob picker는 예산을 넘는 후보를 숨기고, 드래그는 이유와 함께 거부하며, Make Global은 결과가 4D를 넘게 되면 거부합니다. layer는 정확히 하나의 knob만 가지며, 이것이 연쇄를 제한하는 요인입니다.

Outliner는 모든 행에 이 숫자를 보여주며, 마우스를 올리면 합산 내역을 그대로 풀어서 보여줍니다.

5D — total axes this layer keys across (own grid + carrying parent + each extra knob).

두 경우는 아무것도 기여하지 않습니다.

  • control의 face — 이것 자체가 control의 grid이므로, 그것을 통해 다시 key를 넣지는 않습니다.
  • global layer — 그 위에 아무것도 없습니다. global slider는 1D로 표시됩니다.

driver와 look-at은 8까지 갑니다

driver나 look-at 필드는 같은 스택 위에 자기 자신의 widget이 가진 dimension을 더합니다.

the widget itself (0–2)   +   the control (0–2)   +   the pose layer (0–2)   +   its knob (0–2)

control pose layer 그리고 그 layer의 2-D knob를 통해 key가 있는 2-D pad driver는 8D입니다. 막는 것은 없고, 경고도 없습니다.

Widget 자체 dimension
Checkbox 0
Slider, Combo Slider 1
2-D pad (Continuous Grid) 2
look-at joystick 2

Key domain

key domain이란 무언가가 key를 넣는 위치들의 집합입니다.

pose layer는 자신의 key domain을 트리 안에서 어디에 위치하는가에서 얻습니다 — 그래서 layer를 드래그하면 동작이 바뀌는 것입니다. driver와 look-at은 같은 네 가지 선택지와 같은 이름으로 자신의 key domain을 명시적으로 선택합니다.

Domain 하나의 값이 적용되는 단위 사용 시점
Global 전체. 아예 key를 넣지 않습니다. 값이 pose에 전혀 의존하지 않을 때.
Control control snap 단위 turnaround에 따라 변할 때 — 원근, 단축(foreshortening).
Pose Layer pose layer snap 단위, 모든 control pose에서 동일 각도가 아니라 표정에 속하는 값일 때.
Control + Pose Layer 둘의 곱 실제로 둘 다에 따라 변할 때.

Pose Layer는 global layer가 사용할 수 있는 유일한 domain입니다

Globals에 parent된 layer는 control dimension이 없으므로, ControlControl + Pose Layer는 key를 넣을 대상이 없습니다. ORC는 이 옵션들을 회색으로 비활성화하고 그 이유를 알려줍니다.

look-at의 두 모드는 각각 같은 네 가지 중에서 자신의 domain을 선택합니다 — Look-At 참고.

domain을 사용할 수 없을 때

ORC는 제공할 수 없는 옵션을 절대 숨기지 않습니다. 회색으로 비활성화하고 나아갈 방법을 tooltip에 적어 둡니다.

비활성화됨 이유
Control, Control + Pose Layer "Pick a control first — Globals has no control grid to key across."
Pose Layer "No pose layer to key across for this owner."
Control + Pose Layer "No pose layer under this control — a Globals layer is not under it, so it cannot form the product. Pick the control that owns the layer, or key across the layer alone."
checkbox driver에서 Global을 제외한 나머지 전부 "Checkbox drivers are Global only — pick another widget type to scope to a Control / Pose Layer."

domain이 일시적으로 사용 불가능해지면 — 아직 control을 고르지 않은 경우 등 — ORC는 선택을 기억해 두었다가, 그 dimension이 다시 존재하게 되는 순간 조용히 Global로 낮추는 대신 원래 선택을 복원합니다.

Snap 주소

모든 snap에는 이름이 있으며, 위의 domain들로부터 왼쪽에서 오른쪽 순서로 구성됩니다. control의 위치, 그다음 layer의 위치, 그다음 knob의 위치입니다.

이 주소는 로그, preset 미리보기, Unroll 테이블에서 보게 됩니다.

dimension당 한 세그먼트, 왼쪽에서 오른쪽으로 — control의 snap, 그다음 layer의 snap:

주소 의미
R5C10 행 5, 열 10에 있는 control face
UR0C4:P1LR1C2:P1RR2C0 control snap R0C4 · page 1의 left grid의 R1C2 · 그 right grid의 R2C0
UR1C2:P2LR0C1 control snap R1C2 · page 2의 left grid
UBR1C2:P1LR0C0 back face의 control snap R1C2 · page 1의 left grid R0C0
G:P1LR1C2 global layer — control 성분이 전혀 없음
UR1C2:K1R0C3 knob 자신의 pose — 소유 control은 R1C2, knob는 R0C3
UR0C4:P1LR1C2:W3 page 1의 pose, layer의 knob 중 position 3

접두사:

U 소유(carrying) control의 snap(그 control의 unit) — 그 control 이름이 무엇이든. Torso control도 U로 key를 넣습니다. UB는 그 back face입니다.
G control이 전혀 없음 — head 없이 key가 있는 global layer.
P1L / P1R, P2L page 1의 left/right grid, page 2의 것, 이런 식으로 — page마다 번호가 매겨진 하나의 체계입니다.
K1 자기 자신의 pose를 authoring하는 knob — K 다음에 자신의 axis slot, 그다음 자신의 snap.
:W3 layer의 knob 중 position 3.

control의 이름은 주소에 절대 나타나지 않습니다 — 각 layer는 정확히 하나의 control에 속하므로, U는 항상 "내 소유 control"을 뜻하며 번호가 필요 없습니다.

왜 글자가 C가 아니라 U인가

U는 control unit을 뜻합니다 — control에 대한 ORC의 내부 명칭입니다. 당연해 보이는 글자는 controlC겠지만, C는 이미 쓰이고 있습니다. 모든 snap 안에서 column을 뜻하는 글자이기 때문입니다. CR0C4라면 서로 다른 두 의미의 C가 다섯 글자 간격으로 나란히 놓이게 됩니다. 주소는 한눈에 읽히기 위해 존재하므로, control은 U로 key를 넣습니다.

왜 2-D knob의 :W는 하나의 flat한 숫자인가

2-D knob는 자신의 위치를 하나의 index로 주소화합니다 — 3 × 3 knob에서 :W7은 행 2, 열 1을 뜻합니다(행 × 열 개수 + 열) — R2C1 형태의 snap 대신입니다. 이것은 의도된 설계입니다. compose된 rig는 각 knob position을 Toon Boom 고유 레이아웃의 stacked state 파일(stack/0.tbState, 1.tbState, …)로 저장하며, 이 flat index가 바로 그 파일의 이름입니다. 주소는 그것이 가리키는 대상과 정렬된 상태를 유지합니다.

주소를 직접 입력할 일은 없습니다. 하지만 메시지, preset 미리보기, Unroll 테이블이 하나를 명명할 때, 이렇게 읽으면 됩니다.

Interpolation

snap 사이를 ORC가 blend합니다. Interpolation이 켜져 있으면 pose는 주변 네 snap의 가중 평균이며, 가중치의 합은 항상 1입니다. 끄면 가장 가까운 snap이 그대로 승리합니다.

이것은 완성된 rig에서 runtime toggle이므로, 애니메이터가 부드러운 control과 계단식(hard-stepped) control 중에서 선택합니다. key가 없는 snap은 빈 구멍이 아니라, 이웃들로부터 blend되는 위치입니다.

또한 이것은 유일하게 전역적인 toggle입니다. 다른 모든 내장 toggle은 그것이 작용하는 대상마다, 그리고 그 대상이 존재할 때만 존재합니다. Mirror는 pair된 pose layer가 필요하고, Mirror All은 pair가 둘 이상 필요하며, Front ↔ Back은 두 face를 모두 가진 control이 필요합니다 — 두 얼굴을 가진 각 control이 자신만의 flip을 구성합니다. Interpolation의 질문 — snap 사이를 blend할 것인가, 아니면 계단식으로 갈 것인가? — 은 rig 전체에 대해 단 한 번 묻습니다. layer마다, control마다 interpolation checkbox가 있다면 결정을 하나도 늘리지 못한 채 widget만 늘어날 것입니다. 그래서 checkbox 하나가 전부를 관장하며, 이 checkbox가 아무 역할도 하지 않는 경우는 blend할 연속적인 것이 전혀 없는 rig — 모두 on/off driver뿐이고 grid가 하나도 없는 경우뿐입니다.

dimension의 비용

모든 axis는 사용 가능한 pose 수, Compose가 걸리는 시간, 그리고 사용하는 메모리를 곱합니다.

Rig 주소화 가능한 pose 수
3 × 3 layer, global 9
…5 × 3 control 안에 있을 때 135
…13-position knob까지 더하면 1,755
…Front Back face까지 더하면 3,510

이것들을 전부 key할 필요는 결코 없습니다. 하지만 추가하는 dimension은 곧 스스로 약속하는 authoring 작업량이며, ORC는 그 수가 늘어남에 따라 알려줍니다.

1024 snaps — authoring this by hand is a big job, and capture/compose time grows with every keyed snap.

경고할 뿐, 막지는 않습니다.

실제로 Compose를 막는 유일한 것

dimensionality 자체는 결코 compose를 멈추지 않습니다. 딱 하나의 구조적 충돌만이 멈춥니다.

같은 node의 같은 channel에 쓰는 두 개의 extra knob는 합산될 수 없습니다. 이런 일이 벌어지면 해당 Outliner 행이 이름, chip, 아이콘까지 빨간색으로 밝혀지고, 해결할 때까지 Compose가 거부됩니다.

그 외 모든 것은 경고일 뿐입니다.

관련 문서

  • Knobs — 세 번째 축
  • Controls — 두 번째 축
  • Drivers — domain을 명시적으로 선택하기
  • Compose — 주소가 무엇으로 변환되는가