Ir para o conteúdo

No Harmony

O Harmony é onde o OTS fala sua língua nativa. O espaço canônico do formato de intercâmbio é a convenção OGL do Harmony — Y-up, right-handed, metros — então nada é swizzlado na entrada ou na saída. Toda outra aplicação converte para o que o Harmony já usa.

Lançando

Rode o script OctoTransformSync pela Scripts toolbar. A janela abre por cima do Harmony e fica ali; rodar o script de novo enquanto ela está aberta só a traz para a frente.

O vocabulário na janela é o do Harmony: as listas dizem PEG e PEGs, e o botão de import diz Apply to PEGs.

As quatro páginas

Dois formatos no topo, duas direções abaixo deles — toda página que você consegue alcançar no Harmony:

Harmony — import .pvt

Um esqueleto em repouso prestes a ser construído. Build Skeleton cria os pegs; Create Cameras acende porque este arquivo carrega uma.

Harmony — export .pvt

Os pegs que você escaneou, com a coluna Rig e a opção Scale. Sem frame range — um .pvt não tem animação.

Harmony — import .anm

A match tree, com um checkbox por linha e as três ações: Apply to PEGs, Create Rig, Create Cameras.

Harmony — export .anm

Mesma lista do export .pvt — uma cena, um agrupamento — mais Start / End e Scene range.


O que o OTS lê de um peg

Para cada peg exportado, o OTS registra:

  • Seu path no node graph, e seu ancestral exportado mais próximo como parent.
  • Seu pivot, em metros canônicos.
  • Seu transform, avaliado por frame keyado como world matrix e tornado relativo àquele ancestral.
  • Seus authoring modes — position separada, rotação quaternion-path, scale separada, 3D habilitado — registrados como dica.
  • Se um nó CAMERA pendura nele, a configuração de câmera.

Keyframes são coletados dos control points reais do peg, mais o primeiro e o último frame do range de export. Handles bezier são lidos nativamente onde o tipo de coluna permite, e reconstruídos por amostragem da curva onde não permite.

A escala field ↔ OGL

O Harmony trabalha em fields, não em metros, e a conversão entre eles não é uma constante — depende da resolução da cena, do field of view e do aspect ratio. O OTS pergunta isso para a cena viva na hora do export e do import em vez de cravar um número no código, e é por isso que o adaptador do Harmony precisa de uma cena aberta para fazer seu trabalho.

Os clip planes de câmera do Harmony também estão em fields. Seus valores originais em field são preservados no arquivo junto com as distâncias convertidas, então um round trip Harmony → qualquer coisa → Harmony devolve os números exatos com que você começou.


O "falso quaternion"

O Harmony tem um tipo de coluna chamado QUATERNIONPATH, e ele não é um quaternion.

É uma subclasse da coluna 3D-path, e armazena um path de três componentes de ângulo Euler mais uma velocidade — não um quaternion (w, x, y, z). Lê-lo como quaternion produz besteira.

Então o OTS sempre lê e escreve a rotação de um peg como Euler XYZ em graus, em todo modo de peg. Internamente, o formato de intercâmbio também carrega um quaternion de verdade para rotação, calculado a partir da world matrix bakeada; esse é independente de ordem e contorna a ambiguidade de ordem Euler por completo, e é o que as outras aplicações preferem no import.

Você não precisa fazer nada a respeito disso. Está aqui porque explica por que a rotação de um peg é tratada do jeito que é, e por que uma leitura ingênua de quaternion numa cena do Harmony dá errado.


Importando sobre pegs existentes

Apply to PEGs escreve a animação nas linhas matched e marcadas.

O Apply reescreve o authoring mode do peg

Antes de escrever, o OTS desvincula qualquer coluna 3D-path ou quaternion-path no peg de destino, força canais separados de position / rotation / scale com 3D habilitado, e escreve curvas bezier novas.

Os valores resultantes estão corretos e as curvas são totalmente editáveis. Mas um peg que foi autorado num 3D path não está num 3D path depois, e isso não é desfeito reimportando.

Isso é um trade-off deliberado: uma curva arbitrária que chega não pode ser representada nas colunas de path do Harmony sem isso. Se o peg é algo que você fez à mão e quer manter como está, aplique sobre um resultado de Create Rig e faça o merge na mão.

Os source_modes registrados no arquivo são apenas uma dica — eles descrevem como o peg foi autorado na saída, e nunca mudam nenhum valor na entrada.


O que o Create Rig constrói

O Create Rig monta um sub-graph completo e organizado em vez de uma pilha de pegs soltos:

  • Um group envelope nomeado com o nome do arquivo, com um Multi-Port-In.
  • Um peg externo para o group inteiro, para você mover o resultado como um objeto só.
  • Um peg por item, com o pivot de repouso escrito nos seus atributos de pivot.
  • Links de pai para filho seguindo a hierarquia do arquivo.
  • Um composite alimentado pelas folhas, e um Multi-Port-Out.
  • O group ligado ao composite principal do group pai.

A construção inteira é um passo de undo.

O Create Cameras adiciona um peg mais um nó CAMERA por câmera, liga a câmera sob o seu peg, e keya o peg a partir do arquivo.


Notas e limites

Sufixos são removidos no match. Um peg do Harmony chamado hip-P e um joint do Maya chamado hip são tratados como o mesmo item, então as convenções usuais -P / -G / -C não quebram um round trip.

O Harmony lê arquivos de um jeito um pouco mais frouxo. Os leitores do adaptador do Harmony não rodam a mesma checagem estrita de versão que os leitores do Maya e do Blender rodam, então um arquivo de versão errada aparece como um erro diferente lá. Reexporte da aplicação de origem e o problema some.

A cena tem que estar aberta. Tudo que o adaptador do Harmony faz — a escala de field, o bake de matriz, as escritas no node graph — roda contra a cena viva.


Veja também