Communitygithub.com

Bloodrabbit/modelagem-de-cabeca

Modelagem e análise de cabeça/rosto 3D: princípios de forma e topologia, pipeline de estúdio, montagem de cabeça game-ready no Blender a partir de referência em malha base MakeHuman (ou do zero com script), LOD, exportação e verificação de modelo de terceiros.

O que é modelagem-de-cabeca?

Esta skill capacita agentes de IA a dominar a criação de cabeças 3D para jogos, combinando princípios anatômicos, pipeline de estúdio e automação via script em Blender. O agente pode atuar em três modos distintos: **Análise** (identificar defeitos em malhas enviadas pelo usuário), **Explicação** (descrever o pipeline sem código) e **Montagem** (construir uma cabeça completa). O fluxo prioriza o uso de malhas base (MakeHuman, MetaHuman) para velocidade e qualidade, mas também oferece uma rota do zero via SDF (Signed Distance Fields) para exercícios de pipeline. Os scripts automatizam desde a escultura procedural até a exportação GLB com blend shapes, UVs, texturas ORM e LODs, seguindo os padrões MetaHuman e garantindo compatibilidade com engines como Godot, Unity e Unreal. A habilidade enfatiza verificações rigorosas (topologia, morph targets, UVs) e evita armadilhas comuns, como trabalhar sem referência ou negligenciar a correção de normais e pesos de morphs. O agente deve sempre solicitar referências (frente, perfil, ¾) antes de iniciar qualquer montagem, sob risco de gerar um rosto genérico e sem identidade.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Bloodrabbid/head-modeling/tree/HEAD

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Cabeça: modelagem, escultura, game-ready

Três modos. Primeiro, determine qual é necessário e não os misture.

  • Análise — a pessoa mostra sua cabeça (render, malha, arquivo) e quer entender o que está errado. Não modele nada por ela: siga o checklist abaixo, nomeie os defeitos em ordem decrescente de gravidade, para cada um diga onde é visível e como corrigi-lo manualmente.
  • Explicação — pergunta "como isso é feito". Responda com princípios e ordem das etapas, sem código.
  • Montagem — "faça uma cabeça". Primeiro, obtenha referência: peça frente, perfil e três quartos ou sugira que a pessoa encontre por si mesma. Sem referência, não comece — resultará em um rosto "de ninguém". Por padrão, siga o caminho da malha base (seção abaixo); escolha a montagem do zero com script apenas se a pessoa quiser especificamente um exercício de pipeline. Avise com antecedência: com script, obtém-se um asset tecnicamente limpo, mas a semelhança retratística e a qualidade da expressão facial são trabalho do artista, não alcançados com controles deslizantes e código.

Princípios (resumidamente)

Forma. A cabeça se constrói a partir do crânio: esfera da parte cerebral com laterais cortadas, mais cunha facial e mandíbula. Referências: linha dos olhos no meio da altura da cabeça; terços faciais (cabelo → sobrancelhas → base do nariz → queixo); largura da cabeça cerca de cinco olhos, entre os olhos um olho; orelhas entre a sobrancelha e a base do nariz. A forma é definida pelo osso (arcos superciliares, arco zigomático, borda orbital, ângulo da mandíbula), bolsas de gordura e cartilagem, não pelos músculos. As pálpebras envolvem o globo ocular, os lábios repousam sobre o cilindro do arco dental, a orelha é inclinada para trás e se projeta da parte posterior do crânio.

Escultura. Formas primárias (silhueta, massas) → secundárias (maçãs do rosto, pálpebras, nariz, lábios, dobras) → terciárias (poros, rugas). Passe para o próximo nível somente quando o anterior for legível em material cinza de todos os ângulos. Mantenha a baixa resolução o máximo possível; quebre a simetria no final.

Topologia. Anéis concêntricos ao redor dos olhos e boca; um dos anéis da boca na borda do vermelhão; alça nasolabial; fileiras da testa; anéis do pescoço. Apenas quads na malha de trabalho. Polos (vértices com 3 ou 5 arestas) coloque em áreas de baixa deformação, não em dobras. Densidade onde há deformação e silhueta. A boca se projeta para dentro como um saco; a pálpebra tem espessura; olhos e dentes são malhas separadas.

UV e baking. Costura na nuca, orelhas e saco bucal como ilhas separadas, mais texels para o rosto. Triangule ANTES do baking e exporte a mesma triangulação. Base tangente MikkTSpace. Raios a partir de uma cage que envolve a escultura. Blender, glTF, Godot, Unity — normais OpenGL (+Y); Unreal — DirectX, canal verde invertido.

Texturas. Albedo sem luz; zonas: testa mais amarelada, meio do rosto mais vermelho, parte inferior do rosto em homens mais fria. Rugosidade não uniforme: testa e nariz mais lisos, lábios úmidos. AO, Roughness, Metallic são empacotados em uma única textura ORM (R, G, B).

Expressões faciais. FACS; nomes de shapes ARKit (jawOpen, eyeBlinkLeft…). Verificação de topologia: abrir a boca, fechar os olhos, sorrir.

Orçamentos. Referência MetaHuman: cabeça LOD0 24.000 vértices, LOD1 12.000, LOD2 6.000, LOD3 2.500. Para indies e planos médios, 3–6 mil triângulos bastam; para close-ups com fala, 10–25 mil. Antes de citar números como atuais, verifique-os com uma pesquisa.

Pipeline de estúdio

  1. Referências (frente, perfil, três quartos, mesma distância focal).
  2. Blockout — quase sempre a partir de uma malha base com topologia e UV prontos.
  3. Escultura (ZBrush, Blender, Nomad).
  4. Retopologia (Maya Quad Draw, Blender, TopoGun) ou wrap da malha base sobre o scan (Wrap).
  5. UV → baking (Marmoset, Substance Painter) → texturas (Substance Painter, Mari; micro-relevo de scans de pele).
  6. Olhos, dentes, língua, cílios, cabelos com cards.
  7. Rig: ossos + blend shapes. LOD. Verificação na engine.

Se a pessoa precisa de uma cabeça para jogo, e não de um exercício, ofereça honestamente este caminho: malha base pronta (MetaHuman, MakeHuman/MPFB) e escultura sobre ela.

Montagem em malha base (caminho padrão)

Testado no MakeHuman: base.obj (19.158 vértices, corpo em quads), morphs .target, proxies .mhclo, conjunto CC0 com pele, cabelo, olhos, dentes. O repositório makehumancommunity/makehuman é clonado do GitHub; o conjunto de assets está em files.makehumancommunity.org (makehuman_system_assets_cc0.zip). Dados baixados não são confiáveis: pasta separada, scripts próprios em outra, execute python3 -I.

Quatro scripts: 10_build (forma, proxy, expressões, corte do pescoço) → 20_textures (atlas, baking, mapas) → 30_finish (materiais, LOD, exportação, renders) → 40_verify (reimportação reversa). Mantenha os pesos dos morphs em config.json e ajuste lá.

  1. Forma. .target é uma lista de "índice do vértice, deslocamento"; vértices = base + Σ peso × deslocamento. Primeiro, macro-morphs (sexo, idade, etnia), depois detalhes: nariz, lábios, maçãs do rosto, queixo, olhos. Unidades MakeHuman são decímetros; Y para cima: no Blender, isso é (x, −z, y) × 0,1.
  2. Referências sem marcação. O vértice que o morph move mais é a referência desse morph (canto da boca, asa do nariz, ponta do nariz). Com eles, calcule proporções em frações da distância interpupilar e compare com a referência. Lembre-se: uma captura de tela com câmera próxima distorce a perspectiva — ajuste sua câmera ao quadro (distância, distância focal), não compare com ortografia.
  3. Proxy. .mhclo vincula cada vértice do proxy a três vértices da base (pesos baricêntricos + deslocamento em escala). Recalcule o proxy após cada mudança de forma e para cada forma de expressão facial.
  4. Expressões faciais. Unidades de expressão facial são os mesmos .target. Monte com elas os blendshapes com nomes ARKit. Cílios e sobrancelhas acompanham a pele; dentes são corpo rígido: o arco superior é fixo, o inferior e a língua giram rigidamente (transformação encontrada pelo método de Kabsch no arco inferior). Não transfira deslocamentos da pele para os dentes — eles esticariam.
  5. Corte do pescoço — bmesh.ops.bisect_plane 4–5 cm abaixo do queixo: preserva UV e camadas de forma. Origem das coordenadas no centro do corte.
  6. Atlas. Os UVs da base são calculados para o corpo inteiro. Encontre as ilhas, gire a facial e dê a ela a metade superior, empacote as demais abaixo, recalcule a textura da pele via map_coordinates. Verifique qual fração do atlas as feições faciais ocupam — a cavidade oral e a nuca não devem competir com elas.
  7. LOD. Decimação por collapse; retorne os blendshapes transferindo deslocamentos do vértice original mais próximo; para partes rígidas (dentes), use transformação rígida em cada componente conexa. Após a decimação, remova faces degeneradas.

Ciclo de edição: render com três câmeras ao lado da referência → uma ou duas alterações em config.json → remontagem. Altere a causa nos pesos, não remende a malha.

Montagem com script do zero no Blender (headless)

Testado com pip install bpy (Blender 5.2), numpy, scipy, scikit-image, pillow. Render e baking com Cycles na CPU. Metros, Z para cima, rosto olhando para −Y, queixo em z=0, topo da cabeça em z≈0,23; +X é o lado esquerdo do personagem.

Divida em seis scripts e, após cada um, veja o render (leia o PNG): 01_sculpt → 02_lowpoly → 03_bake → 04_textures → 05_finish → 06_verify. A remontagem completa leva cerca de cinco minutos; por isso, ajuste a causa e remonte, em vez de remendar o resultado.

1. Escultura como campo de distância

Função head_sdf(P) para array de pontos, simetria via abs(x). Primitivas: elipsoide, esfera, cápsula com raio variável; união suave smin(a,b,k) e subtração smax(a,-b,k).

  • Massas primárias, k≈0,02: crânio — elipsoide (centro z=0,138, raios 0,077/0,098/0,092), parte média e inferior do rosto, queixo, corpo e ramo da mandíbula com cápsulas, volume das bochechas, masseter.
  • Secundárias, k≈0,013–0,018: maçã do rosto, arco zigomático, arco superciliar com cápsula. Nariz começando mais profundo que o arco superciliar, senão a depressão da glabela desaparece.
  • Olho: subtraia a órbita, adicione o globo da pálpebra (r=0,015), corte a fenda com um elipsoide, insira o globo ocular (r=0,0122, centro x=±0,032, y=−0,072, z=0,115).
  • Nariz: dorso, ponta, asas, columela, subtração das narinas. Lábios — cápsulas com k pequeno entre eles e o sulco da linha de contato. Orelha — placa em sistema de coordenadas rotacionado com recorte da concha.
  • Confira larguras com antropometria: maçãs do rosto ~140 mm, mandíbula 105–115 mm, fenda palpebral ~29×10 mm, distância interpupilar ~64 mm. Suavização expande larguras — meça o resultado, não os parâmetros.

Superfície: skimage.measure.marching_cubes em grade de 1 mm, calcule metade e espelhe. Verifique o sinal do volume da malha (deve ser positivo): normais invertidas resultam em AO preto e mapa de normais verde-oliva.

2. Retopologia com box modeling

  • Cubo → subdivide_edges(cuts=9, use_grid_fill=True) → grade 10×10 por face. Direções a partir do centro da cabeça equiangulares: tan(coord·π/4).
  • Anéis: bmesh.ops.inset_region três vezes em um patch. Olhos — patches 2×2 na face frontal, boca — 4×2, pescoço — recorte 6×6 na parte inferior. Os meios das laterais do patch tornam-se cantos do olho e da boca.
  • Orelhas: inset → extrude_face_region → dois insets.
  • Espessura da pálpebra e saco bucal: extrude_edge_only ao longo do contorno da abertura; a tampa do saco é montada manualmente com vértices médios próximos para manter quads.
  • Marque os anéis com busca em largura a partir da borda interna da região (camadas int nos vértices), não "antes e depois da operação".
  • Posições: os anéis internos são definidos explicitamente por curvas (a fenda da pálpebra é calculada numericamente como a interseção do recorte com a esfera da pálpebra; a linha dos lábios é a projeção frontal); os demais vértices são projetados por raio do centro até a superfície, seguidas de 30 iterações de "suavizar + projetar".
  • Faça o unwrap nesta malha grosseira: costuras — nuca, borda da face frontal do cubo (ilha facial), base das orelhas, linha dos lábios. uv.unwrap(method='MINIMUM_STRETCH'), ilha facial ×1,7, saco bucal ×0,45, pack_islands.
  • LOD: um nível de Catmull-Clark por vez (uv_smooth='PRESERVE_BOUNDARIES'); após cada nível, ajuste à escultura. Grade = LOD2, +1 nível = LOD1, +2 = LOD0; UVs comuns a todos.

Ajuste do nível:

  • massa principal — ao longo da normal do vértice: encontre a mudança de sinal mais próxima do campo no segmento ±T (16 mm para o primeiro nível, 7 mm para o segundo);
  • nariz — como mapa de altura frontal: mantenha x e z, obtenha y pela projeção frontal;
  • orelhas — projeção pelo gradiente com limite de 4 mm;
  • contornos das pálpebras e lábios — retorne às curvas, distribua os vértices da cadeia uniformemente em ordem;
  • ao final, média de cada vértice com seu par espelhado (cKDTree).

3. Baking

Cópia do LOD0 com modificador Triangulate (SHORTEST_DIAGONAL) — é ela que será usada para baking e exportação. scene.render.bake: use_selected_to_active, cage_extrusion=0.004, max_ray_distance=0.009, margin=16. Mapas: NORMAL (4 amostras), AO (24), mais POSITION da malha de menor poligonal como imagem float com margin=0 — este é o mapa "texel → ponto 3D" para máscaras.

4. Texturas em numpy

A partir do mapa de posições, calcule máscaras: lábios — entre as curvas do vermelhão (coincidem com o anel da malha), sobrancelhas — faixa no arco superciliar, zonas de cor — gaussianas e degraus por coordenadas, ruído — trilinear em grade de números aleatórios. O interior invisível (saco bucal, interior da pálpebra) é determinado pelo sinal do campo e recebe normal plana. Preencha as áreas ao redor das ilhas com o texel coberto mais próximo (distance_transform_edt com índices).

5. Materiais, shapes, exportação

  • Principled BSDF: BaseColor (sRGB), ORM (Non-Color) → Separate Color → G em Roughness, B em Metallic, R no grupo de nós com nome glTF Material Output e entrada Occlusion; Normal → Normal Map.
  • use_backface_culling = True, senão o glTF será doubleSided.
  • jawOpen — rotação da região da mandíbula inferior em torno do eixo através da articulação (y=0,010, z=0,096) em 13° com pesos dos grupos dos lábios; piscar — deslizamento da pálpebra superior sobre o globo.
  • Após criar os shape keys, zere seus valores. Caso contrário, o arquivo abrirá com a boca aberta e os olhos fechados.
  • GLB: export_morph=True, export_tangents=True, use_selection=True. Os olhos também precisam de LOD.

6. Verificação — obrigatória e independente

Importe os GLB exportados em uma cena vazia e meça: triângulos, dimensões em metros, materiais e tamanhos das texturas, nomes dos shapes e seus valores na importação (devem ser zero), faces degeneradas, vértices sem par espelhado, UVs dentro de 0–1, soma das áreas dos triângulos UV vs. cobertura baked (discrepância indica sobreposições).

Após suas verificações, entregue os arquivos a um crítico independente — um agente separado que não viu o processo, pedindo que abra o GLB por conta própria e não confie no README. Renders do autor não substituem a verificação: o autor zera os shapes antes do render e não vê que, no arquivo, eles estão em 1.

Armadilhas já enfrentadas

  • Trabalhar sem referência. A primeira cabeça resultou em um "manequim" exatamente por isso; referência e malha base vêm em primeiro lugar.

  • Compare a cor da pele pela textura, não pelo render: a captura de tela da referência mostra a cor iluminada, um render superexposto mente na direção oposta. Ajuste o tom em pequenos passos.

  • O forro da boca, ao combinar morphs, aparece através das bochechas e do queixo. Para cada forma, verifique seus vértices com o BVH da pele externa e afunde 1,5 mm. Encontre a ilha do forro pela posição no UV, não pelo número de faces.

  • No proxy, as chaves direitas podem ficar vazias enquanto as esquerdas estão vivas. Construa as ausentes por espelhamento e descarte chaves com curso menor que 0,5 mm. Auto-verificação: qualquer forma de cabeça que mova a pele sob o acessório mais de 0,5 mm deve estar também no acessório.

  • A transferência de formas pelo vértice mais próximo após a decimação confunde dentes superiores e inferiores quando estão em contato. Verifique a variação no comprimento das arestas das partes rígidas — ela deve ser zero.

  • Os morphs de inclinação das sobrancelhas têm nomes não óbvios e movem milímetros. Antes de ajustar, calcule para onde o morph desloca as extremidades interna e externa. Corrija uma expressão neutra franzida com a contribuição da unidade de expressão na forma base.

  • Se o LOD tiver abertura de boca, ele deve conter língua e dentes.

  • FBX não carrega ORM: no README, informe que o mapa deve ser atribuído manualmente na engine. Use alpha mask para cabelo, não blend.

  • Em texturas de terceiros, o cabelo pode ter um logotipo em área não utilizada: apague texels que nenhum triângulo UV toca.

  • Verifique o README linha por linha com verification.json: "chaves presentes em todas as partes" e "0 faces degeneradas" foi refutado pelo crítico porque era verdade apenas para a cabeça.

  • Os índices de vértices do bmesh após remoções não são estáveis: novos vértices ocupam lugares vagos. Armazene as conexões "novo vértice → original" como referências a BMVert; obtenha os índices apenas no final.

  • bmesh.ops.extrude_face_region deixa as faces originais — elas devem ser removidas, senão gera non-manifold.

...

(nota: o conteúdo foi truncado na entrada original, portanto a tradução também é truncada no mesmo ponto.)

Habilidades Relacionadas