O que contact-dots faz?
Coloca pontos (dots) nas mãos, membros, pés e pelve de cada personagem (e em qualquer outra coisa que você nomear),
em seguida mede, quadro a quadro, no Blender headless, o espaço de cada ponto até uma superfície, a
distância entre pontos e o ângulo entre direções. Escreve dots.json, imprime um breve
resumo e renderiza dots-sheet.png (um close-up por verificação e por pior penetração).
Nunca altera um arquivo de origem e escreve apenas na pasta de saída que você nomear.
Quando usar
- "A palma direita dela está realmente na coxa esquerda dele no quadro 40?" (contato corporal,
touch) - "Algum dedo entra dentro do copo?" (penetrações são sempre verificadas)
- "O carregador está encaixado no quadro 40", "a caixa está apoiada plana", "a arma fica na mão",
"o pé plantado não desliza" (estruturais:
seat,rest,hold,distance) - "O cotovelo nunca dobra para trás", "a tampa abre 0-110 graus", "a palma está virada para a mesa"
(rotação:
range,align)
Não serve para: corrigir poses, física ou equilíbrio, contato de boca ou tecido, sobreposição malha-contra-malha.
Necessidades
Blender (qualquer versão recente; seu próprio Python é usado internamente) e biblioteca padrão do Python 3 para
o script hospedeiro. O Blender é encontrado a partir de --blender CAMINHO, depois $BLENDER, depois PATH, depois as
pastas de instalação comuns.
Comandos
Todos através de scripts/dots.py nesta pasta da habilidade:
python scripts/dots.py selftest [--out DIR] # respostas conhecidas; execute primeiro em uma máquina nova
python scripts/dots.py bones <arquivo.fbx|.blend> # os ossos do rig e o mapa de ossos proposto
python scripts/dots.py measure <config.json> # mede, julga, escreve dots.json + dots-sheet.png
python scripts/dots.py sheet <dots.json> # rerrenderiza apenas a folha
Opções: --blender CAMINHO, --timeout S (padrão 600), --limits finger|limb (medir),
--no-sheet (medir, apenas números).
A linha de resultado (após qualquer aviso ou linhas de autoteste): dots: PASS ... (saída 0), dots: FAIL ... (saída 1) ou
dots: skipped (<motivo>) (saída 2: sem Blender, timeout, erro do Blender ou configuração ruim;
o motivo diz qual). Uma execução ignorada não é um resultado: corrija o motivo e execute novamente.
De uma frase a uma configuração
- Execute
dots.py bones <arquivo>para cada arquivo de personagem se você não tiver certeza do mapeamento do rig (Mixamo e nomes humanoides Unity mapeiam sozinhos; caso contrário, escreva umboneMap). - Atribua a cada personagem um
rolecurto (her,him,a,b): os pontos são<role>.<dot>. - Transforme cada coisa a verificar em uma entrada de
checks, com os quadros em que deve se manter. - Nomeie uma pasta
out(caminhos relativos são relativos ao arquivo de configuração).
"A palma direita dela na coxa esquerda dele no quadro 40":
{"out": "dots_out",
"characters": [{"role": "her", "file": "her.fbx"}, {"role": "him", "file": "him.fbx"}],
"frames": [40],
"checks": [{"id": "palm-on-thigh", "kind": "touch", "a": "her.R.palm", "b": "him.LeftUpLeg", "frames": [40]}]}
"A mão direita dela na coxa esquerda dele" (qualquer parte da mão): "a": "her.R.hand" (o ponto
mais próximo do grupo é considerado).
Pontos corporais (S = R ou L): S.<finger>.tip, S.<finger>.mid (thumb, index, middle, ring,
pinky), S.palm, S.forearm.1-3, S.upperarm.1-3, S.thigh.1-3, S.shin.1-3, S.knee,
S.heel, S.ball, S.toe, pelvis.front, pelvis.back. Grupos: S.hand, S.foot,
S.forearm, S.upperarm, S.thigh, S.shin, pelvis.
Superfícies (b de um toque): <role> (corpo inteiro), <role>.<osso canônico> (uma parte do corpo,
ex.: him.LeftUpLeg, him.Spine1, him.Head), self, self.<osso>, prop:<nome do objeto>,
floor, nearest.
Verificações estruturais e rotacionais usam pontos personalizados (em um osso, um objeto ou uma região de malha) e
direções (eixo de osso ou objeto, uma linha entre pontos, uma normal de superfície, uma normal de palma, um eixo
mundo). Configuração completa: references/config.md. Um exemplo trabalhado por tipo de verificação:
references/checks.md.
Uma cena inteira com toque, segurar, alinhar, faixa e repouso (uma mão de manequim segura e levanta uma barra): examples/grab/
no repositório ContactDots (config.json; o resultado esperado é PASS 10/10, 0 penetrações).
Limites: predefinição finger (padrão: um contato pode estar no máximo 3 mm afastado em seus quadros e no
máximo 2 mm para dentro em qualquer quadro) ou limb (10 mm / 10 mm), ou seus próprios números.
Lendo os resultados
O resumo lista cada verificação com seu número, pior quadro, o limite e PASS/FAIL, em seguida
penetrações mais profundas que o limite. Espaços são pele até superfície em mm: positivo = separado,
negativo = dentro. Detalhes de dots.json: references/results.md.
- Um FAIL de toque com um pior espaço positivo = não está tocando (flutuando); com um espaço mais profundo grande negativo = afundando.
skinMmemdots.jsoné o raio de pele próprio de cada ponto; um raio estranho significa pesos de pele ruins ou uma malha corporal errada, e o espaço daquele ponto é aproximado.- Nenhuma verificação declarada: o resumo lista contatos observados (pontos dentro de 30 mm) em vez disso.
Aviso de quadro mundial
Dois arquivos FBX nem sempre compartilham um quadro mundial (diferentes raízes de exportação ou deslocamentos). Com dois ou mais personagens, o resumo imprime a posição da raiz de cada personagem no primeiro quadro. Confirme que eles estão onde deveriam, um em relação ao outro, antes de confiar em qualquer número de par. Se não estiverem, os números não têm significado: corrija a exportação, não ajuste os números.
OLHE a folha
Apenas números não são suficientes. Abra dots-sheet.png (na pasta out) antes de relatar:
cada malha em uma cor sólida por personagem ou objeto em um fundo escuro, pontos pequenos por personagem,
o par medido unido por uma linha (amarelo = passa, magenta = falha; um anel em torno de um espaço próximo de zero),
um disco translúcido na superfície tocada (cor complementar, contorno e seta normal),
tríades XYZ (X vermelho, Y verde, Z azul claro) na palma, pulso, cabeça e pelve em vistas próximas,
setas para verificações de ângulo, uma legenda por tile (id, valor, limite, PASS/FAIL). O par medido,
setas, contorno do disco e tríades são desenhados na frente das malhas; os pontos pequenos podem se esconder atrás deles. Verifique se cada tile mostra as partes que você quis (mão direita, coxa direita,
quadro direito). Um passe no ponto errado é uma resposta errada.
Relate de volta
A primeira linha do resumo, cada número de verificação com seu limite e quadro, penetrações acima do limite, as posições das raízes se dois personagens, e o que a folha mostra. Diga que mediu apenas.