De vídeo de performance com fogo para sprites
Você está guiando um artista desde o vídeo bruto até folhas de sprites que podem ser usadas em um jogo. Eles conhecem sua performance; você opera as ferramentas. Mantenha-os envolvidos nos dois pontos onde o olho deles importa (quais movimentos e onde cada um começa e termina) e faça todo o resto você mesmo.
As ferramentas estão na pasta tools/ deste kit (dois níveis acima deste arquivo). Chame-a de $KIT. Cada ferramenta é executada dentro de um diretório de projeto que você cria para este artista; os vídeos de origem são referenciados, nunca copiados.
Leia references/how-it-works.md uma vez antes de começar. Explica as três ideias nas quais todo o pipeline se baseia: camadas separadas de corpo e fogo, tratamento de exposição e normalização ancorada nos pés.
0. Configuração (uma vez por máquina)
cd $KIT && python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
Use uma compilação nativa do Python para a máquina (no Apple Silicon, um Python para x86 instala silenciosamente um PyTorch antigo, apenas para CPU). ffmpeg e ffprobe devem estar no PATH. Uma GPU (Apple MPS ou CUDA) é fortemente recomendada: a renderização custa aproximadamente 3 s por quadro de saída em um M2 Max. Os pesos do modelo são baixados no primeiro uso.
Abaixo, py significa $KIT/.venv/bin/python e os comandos são executados a partir do diretório do projeto.
1. Solicite a filmagem correta
Peça ao artista os arquivos originais da câmera, não uma exportação editada ou de mídia social. Olhe na pasta que eles indicarem: um original 4K, 10 bits, 50 fps geralmente está ao lado de um corte final de 720p, e tudo a jusante é melhor a partir dele. Pergunte também se há filmagem deles andando ou parados antes do fogo ser aceso: rotinas com fogo raramente contêm um ciclo de caminhada limpo, e os jogos precisam de um.
mkdir -p ~/sprite-projects/NOME && cd ~/sprite-projects/NOME
py $KIT/tools/ingest.py principal "/caminho/para/original.mov" # repita com outros nomes para outros clipes
Leia o que a ingestão imprime. Ela mede o nível real de preto (as tags de faixa de arquivo não são confiáveis) e avisa sobre fontes de 8 bits, baixa resolução e taxa de quadros variável. A taxa de quadros variável deve ser corrigida primeiro (re-codificar para taxa de quadros constante), ou os números dos quadros divergem entre o proxy e a fonte.
2. Encontre filmagem utilizável
py $KIT/tools/pose_pass.py principal # lento: cerca de 15 quadros proxy por segundo
py $KIT/tools/find_segments.py principal --strips # adicione --performer pele se uma multidão vestida estiver em cena
py $KIT/tools/find_bursts.py principal # respirações de fogo, encontradas pelo brilho
find_segmentsmantém sequências onde o corpo inteiro está no quadro e ereto. Espere que uma fração da filmagem se qualifique: câmeras portáteis cortam os pés constantemente. Isso é normal; informe o artista o número.- Olhe para alguns
strips/*.jpgvocê mesmo. Se rastrearem a pessoa errada, mude para o modo--performer. - Olhe para
bursts/principal.jpg. Mantenha apenas respirações de fogo reais, entãopy $KIT/tools/catalog.py add-bursts principal(e exclua quaisquer entradas erradas decatalog/selected.json). As respirações de fogo são encontradas dessa forma porque a busca baseada em pose rejeita quadros estourados.
3. Cataloque os movimentos (use subagentes)
py $KIT/tools/catalog.py batches 5
Dê cada lote a um subagente usando o prompt em references/catalog-prompt.md (preencha o número do lote e descreva o artista em uma linha para que os revisores possam rejeitar a pessoa errada). Eles leem as tiras de filme numeradas por quadro e escrevem catalog/outK.json. Este é o passo que mais se beneficia de agentes paralelos: é pura observação, e cada lote é independente. Então:
py $KIT/tools/catalog.py select # pré-seleção: qualidade >= 4, mais caminhadas/giros/rotações/golpes com 3
py $KIT/tools/catalog.py list
Informe claramente ao artista o que foi encontrado e o que não foi (por exemplo: "13 paradas, 8 giros, mas apenas uma caminhada real, do clipe antes do fogo ser aceso").
4. O artista corta e escolhe
py $KIT/tools/make_trim.py # um clipe de contexto por movimento + trim.html
open trim.html
As faixas dos revisores são deliberadamente apertadas; os movimentos reais precisam respirar no que vem antes e depois. No trim.html, o artista arrasta o início e o fim de cada movimento por alguns segundos da filmagem ao redor, marca Manter ou Descartar, e copia a lista da caixa na parte inferior. Peça para colarem para você. A página armazena seu estado no navegador deles, então você não pode lê-lo sozinho. Salve o texto colado em um arquivo e:
py $KIT/tools/catalog.py apply-trim mantidos.txt
5. Renderizar, empacotar, revisar
py $KIT/tools/render_move.py --kept # demorado: execute em segundo plano
py $KIT/tools/pack.py --kept
open review.html
Antes de relatar, veja você mesmo vários arquivos moves/NOME/preview.jpg. Coisas para verificar e dizer em voz alta:
- outra pessoa mesclada no recorte (defina
"gate": truenesse movimento emcatalog/selected.jsonse o movimento não tiver adereço, então re-renderize com--force); - parede iluminada pelo fogo aparecendo na camada de fogo;
- pés ou cabeça cortados:
render_moveimprime a parcela de cada faixa com o corpo inteiro no quadro. Cortes estendidos geralmente encontram filmagem onde o artista sai do quadro.
review.html reproduz cada movimento com fundo e alternância de camadas, incluindo "corpo + brilho aditivo do fogo", que é como um jogo deve desenhar. atlas.json tem a grade de quadros, taxa de quadros, âncora dos pés e faixa de origem por movimento.
6. Opcional: Look de 8 bits
Se quiserem uma versão retro, use o skill fire-sprites-retro.
Regras de honestidade para este trabalho
- Relate contagens e limites, não apenas sucessos: quantos segundos foram utilizáveis, quais movimentos têm membros cortados, quais camadas de fogo incluem parede.
- A filmagem impõe limites rígidos. Uma nuvem de fogo que sai do quadro da câmera tem uma borda reta; uma chama estourada não tem textura interna para recuperar. Diga isso em vez de prometer uma correção.
- Nunca coloque a filmagem, nome ou sprites renderizados do artista em lugar público. As saídas permanecem no diretório do projeto, a menos que eles peçam o contrário.
Veja references/troubleshooting.md para problemas encontrados na prática e o que os resolveu.