콘텐츠로 이동

AutoPivot

AutoPivot은 각 peg의 피벗을 아트가 실제로 있는 자리에 놓고, 모든 프레임을 아티스트가 그린 자리에 유지한다.

Assemble의 마지막 페이즈로 실행되며, 기본으로 켜져 있다 — Browser의 Settings 섹션이나 Preferences의 AutoPivot 체크박스.

해결하는 문제

Harmony에 아트를 손으로 임포트하면 드로잉이 어디 있든 상관없이 모든 peg의 피벗이 원점 — 카메라의 한가운데 — 에 떨어진다. 팔을 회전시키면 어깨가 아니라 장면 중앙을 축으로 돈다.

그것을 손으로 고치면 peg 하나당 드래그 한 번, 모든 peg에서, 모든 장면에서다.

페이즈 A — 토너먼트

프레임 1에서 OSA는 방금 만든 노드들로 peg 계층을 세우고, 그룹과 컴포지트를 지나 각 peg의 실제 서브트리를 찾는다.

각 peg에서 바운딩 박스 면적이 가장 큰 자식 서브트리가 이기고, 그 무게중심이 peg의 피벗이 된다.

면적 최대는 임의의 기준이 아니다: 리그에서 peg가 존재하는 이유는 거의 언제나 그 아래에서 가장 큰 것이다. 머리 peg의 가장 큰 자식은 머리이고, 팔 peg의 그것은 팔이다. 가장 큰 서브트리를 고르면 피벗이 그 peg가 움직이려고 존재하는 바로 그 아트 위에 놓인다.

OSA가 만든 노드만 고려된다. 이미 장면에 있던 노드는 그대로 둔다 — AutoPivot은 남의 리그를 절대 편집하지 않는다.

페이즈 B — 프레임별 보정

애니메이션에 중요한 부분이 여기다.

아트를 추출할 때 모든 프레임은 기준 위치(프레임 1)에 중심이 맞춰진다. 그것이 페이즈 A의 피벗을 시퀀스 전체에 대해 옳게 만든다 — 하지만 동시에 프레임 2 이후가 자기 위치가 아니라 프레임 1의 위치에 앉게 된다는 뜻이기도 하다.

그래서 페이즈 B는 프레임마다, 각 프레임의 아트를 원래 PSD에 있던 자리에 정확히 되돌려놓는 peg 위치 델타를 계산한다:

  • 추출 중 기록된 픽셀 → OGL 보정을 쓰므로 계산이 장면 자신의 단위로 이루어진다;
  • 부모 peg가 먼저, 위에서 아래로 움직이고, 각 자식은 상속된 부모 델타를 뺀다 — 잔차만 적용하므로 중첩된 리그가 부모의 이동을 이중으로 세지 않는다;
  • position.x / position.y만 애니메이션된다. 회전은 절대, 스큐도 절대 아니다: AutoPivot은 배치를 보존하려고 존재하지 움직임을 만들어내려고 존재하지 않는다;
  • 모든 키프레임은 스텝 보간(constSeg)이므로 노출 사이에 드리프트가 없다 — 홀드된 드로잉은 미끄러지지 않는다.

peg 제외하기

Inspector의 Peg 블록에서 Exclude AutoPivot을 체크하면 그 peg의 피벗은 있는 그대로 남는다.

Peg 블록

이것은 .anm이나 .pvt 파일에서 온 모든 peg에 자동으로 설정된다. 그 피벗들은 베이크에 속하고, 덮어쓰면 방금 임포트한 애니메이션이 깨지기 때문이다. Transform Sync를 보라.

peg의 피벗이 의도된 아트 디렉션일 때 손으로 쓰라 — 무게중심이 아니라 브래킷에서 흔들리는 간판 같은 경우.

Original Bitmap 모드에서

크롭 자체가 정규화다. Original Bitmap의 드로잉에는 art layer가 없고, 노출을 크롭하는 패스가 곧 AutoPivot을 위해 그것을 정규화하는 패스다 — 두 개가 아니라 하나의 연산이다.

그래서 큰 플레이트에서 이 모드가 더 싸다: 30 000픽셀 이미지 위에 별도의 정규화 단계가 없다.

아무것도 하지 않을 때

상황 이유
노출이 있는 드로잉 노드가 없음 측정할 바운딩 박스가 없다
모든 peg가 제외됨 계산할 것이 없다
그 peg를 OSA가 만들지 않음 AutoPivot은 자기 노드만 건드린다

이 각각은 조용한 무동작이 아니라 로그 한 줄이다 — 피벗이 움직이지 않았다면 osa.log가 셋 중 무엇이었는지 말해준다.