O grafo de asset
O grafo de asset é onde uma exportação é projetada; a Janela de exportação é onde ela é executada. A etapa Asset transforma listas de sprites em arquivos, e o jeito de fazer isso é um grafo: listas de sprites entram, são organizadas numa folha e saem como arquivos. Esses são os três tipos de conexão, e eles não se misturam — uma lista não pode ser conectada a uma Folha sem ser organizada antes, e uma folha não pode receber tag.
Suas entradas são nós Sprites (e nós Arquivo de imagem, para imagens de fora), cada um trazendo listas de sprites: uma ação vista por uma câmera, desenhada com um Estilo, com um conjunto de partes, cortada em quadros, com todas as camadas. Um nó Sprites nomeia tudo isso, fixo: as escolhas do cabeçalho da janela não são dele, então o que um asset grava nunca depende do que por acaso está sendo mostrado. Suas saídas são um nó por arquivo. Um nó Folha é uma folha de sprites na memória: ele mostra a folha na face e não grava nada. Cada arquivo é um nó Arquivo conectado a partir dele — Imagem PNG para a própria folha, depois o JSON, o .aseprite, os SpriteFrames do Godot, o mapa de normais. Para exportar uma folha de sprites, conecte Folha → PNG. Um grafo pode ter quantos de cada o projeto tiver arquivos para gravar.
Tudo o que se pode dizer a uma exportação está num nó, menos para qual pasta ela vai: isso é da janela Exportar, que lista cada arquivo que o grafo vai gravar ali, por nome e tipo, antes de você pressionar Exportar — o jeito mais rápido de ver o que uma mudança no grafo faz com os arquivos. Como os quadros de uma folha são nomeados fica no nó de imagem PNG dela (e no Inspetor, com sua Folha), seu layout no Organizar que a alimenta, e cada outro arquivo que ela grava — com os ajustes próprios daquele arquivo: a escala de um GIF, a taxa de um vídeo, qual sombra, quais variantes de paleta — é um nó Arquivo conectado a partir dela. Um projeto que nunca reconecta o grafo não guarda nenhum: é uma folha de cada lista de sprites.
Uma imagem pode mostrar qualquer camada. Sob a imagem de uma Folha aqui, Camada escolhe a camada que ela desenha — até que seja definida, a mesma que a Camada da própria Vista 2D desenha — o sprite, seus traços, suas cores chapadas, suas normais, profundidade, emissão, uma saída extra de um Estilo — ou Todas as camadas de uma vez: as de um quadro lado a lado, as de uma lista uma linha cada.
Esse é o grafo com que você começa, o pipeline de asset Principal:
Sprites (every action except Static) → Arrange → Sheet (sheet) → PNG image
As opções do cabeçalho da janela
Ação, Estilo e Asset são pipelines independentes, cada um com seu próprio grafo. A ponta direita da linha de abas dos espaços de trabalho tem quatro seletores — Câmera, Ação, Estilo, Asset — depois de Reproduzir/Pausar: uma escolha de cada, valendo em todas as etapas.
| Degrau | Desenha |
|---|---|
| Ação | a ação escolhida, vista pela câmera escolhida |
| Estilo | a ação escolhida, vista pela câmera escolhida, desenhada pelo Estilo escolhido |
| Asset | o que os nós Sprites do seu próprio grafo nomeiam — não as escolhas do cabeçalho |
A lista Estilos (etapa Estilo) e a lista Assets (etapa Asset) são as mesmas escolhas dos seletores Estilo e Asset do cabeçalho: um clique em qualquer um mostra a mesma coisa. A janela Exportar começa com o pipeline de asset escolhido no seletor Asset do cabeçalho e grava só ele; seus arquivos recebem os nomes de quando todos os pipelines de asset são gravados (pxr render --pipeline all grava todos).
De onde vêm as listas de sprites
As listas de sprites são feitas aqui, pelos nós Sprites, e só aqui: quais ações entram nas folhas é o que os nós Sprites recebem, nada mais. Um nó Sprites nomeia uma câmera, uma ação, um Estilo e um conjunto de partes, e guarda o corte: como o movimento da ação vira quadros.
A Ação dele é uma de:
- Todos exceto Estático (
every-one-except-static, o que um nó Sprites novo, o pipeline de asset com que um projeto começa e um projeto novo usam): cada ação da lista de Ações menos Estático, a pose de descanso parada — mesmo assim Estático, quando o projeto não tem outra ação (um modelo parado), para que um caixote ainda tenha seu sprite. - Todos (vazio, ou
*): cada ação, Estático entre elas. - Uma ação pelo nome, Estático entre elas: só aquela ação, ou várias (
walk, attacka partir depxr graph set). Um clipe do modelo é desenhado quando um nó Sprites o nomeia, seja ou não uma das ações do projeto — nomeado, seus quadros estão sempre lá, na imagem do nó, no que ele alimenta e na exportação.
Um nome que não corresponde a nada (uma ação excluída ou renomeada em outro lugar) é indicado no nó, em palavras simples: Nenhum quadro de Sway visto por South: escolha no nó Sprites uma ação e uma câmera que o projeto tenha.
O corte fica na face do nó e no Inspetor:
- Quadros/s (
fps): um quadro a cada tantos segundos, 12 por segundo até ser definido. - Quadros mantidos (
smart): tantos quadros inteligentes, escolhidos como um animador escolheria — as poses em que o movimento muda de direção, mais onde ele é rápido, cada um retido até o próximo. 0 é desligado. Quadros inteligentes na face do nó os liga, Usar quadros/s volta a um passo regular. - Quadros escolhidos (
picked): tempos em segundos, escolhidos à mão. Com o nó Sprites escolhido, a Linha do tempo atrás do grafo de asset mostra os quadros dele: clique na faixa de chaves para adicionar ou remover um, ou arraste uma chave ao longo dela (um passo de desfazer cada). A face diz N quadros escolhidos na linha do tempo.
Quadros escolhidos têm prioridade quando existem, depois os quadros mantidos, depois os quadros por segundo. Um nó Sprites adicionado a um grafo começa cortado como o primeiro do grafo. Uma ação feita de nós ou chaves é cortada nos seus próprios quadros. Retenção (ms) ao lado do contador de quadros da Linha do tempo define a retenção do quadro mostrado (veja reter um quadro por mais tempo): a da ação, então todo nó Sprites que pega o clipe a mantém. A etapa Ação não muda com nada disso: ela reproduz o movimento inteiro, e um quadro de sprite cai no tempo em que foi cortado.
Entre o nó Sprites e o Organizar ficam os nós que fatiam uma lista:
| Nó | O que ele faz |
|---|---|
| Intervalo de quadros | Só os quadros de from a to do que entra, contados a partir de 0: a preparação de um ataque como uma lista própria, um quadro de um parado como ícone, uma lista em duas folhas. Um intervalo mantém o que cada quadro mostrava — seu tempo no clipe, seu conjunto de partes, seu deslocamento de raiz. Um intervalo de um intervalo conta no que entrou; parte de um loop deixa de fazer loop; um intervalo além do fim mantém o último quadro. |
| Reter | Cada quadro retido tantas vezes mais: 2 toca a lista na metade da velocidade. |
Sprites (South, attack, Pixel Art, smart 6) → Frame range (2 to 5) → Hold (×2) → Arrange → Sheet → PNG image
Escolher um nó Sprites, Intervalo de quadros ou Reter faz a Vista 2D reproduzir a lista que ele fornece, cortada, fatiada e em camadas como será gravada. Nenhum desses nós custa uma renderização: eles decidem quais quadros vão para onde antes de existir um pixel.
Para usar uma cadeia de novo, escolha Sprites → Intervalo de quadros → Reter e agrupe-os (Ctrl+G); depois Salvar kit… guarda o grupo como kit de nós em Meus nós; ou salve todo o pipeline de asset como kit (veja Pipelines de asset).
Renderizações, e como seus arquivos se chamam
Uma renderização é um enquadramento, um Estilo e como cada clipe é cortado. Nós Sprites compartilham uma renderização enquanto concordam: o mesmo Estilo, enquadrados juntos, e nenhum clipe cortado de dois jeitos. Assim, uma caminhada a 8 quadros por segundo e um ataque escolhido à mão são uma renderização e uma folha. Um segundo nó que corta a caminhada em quadros inteligentes, ou a desenha com outro Estilo, é uma renderização própria.
A primeira renderização grava seus arquivos com os nomes que o grafo lhes dá. Outra é gravada ao lado deles sob as palavras que diferem das da primeira: sua câmera, o nome do seu Estilo e, depois, o corte de cada clipe que ela corta de outra forma — 8fps (ou 12_5fps), smart6, picked4 (quatro quadros escolhidos à mão). Assim, out/hero.png, depois out/hero_smart6.png e out/hero_Pixel_Art_2_8fps.png, cada um na paleta do seu Estilo. pxr names lista os arquivos de cada renderização, com os quadros que um Intervalo de quadros mantém, e recusa duas renderizações que gravariam um mesmo arquivo — dois cortes diferentes de quatro quadros escolhidos à mão do mesmo clipe — antes que qualquer coisa seja renderizada: would be written twice.
A partir de um script:
pxr graph add game.pixor --which asset --node sprites --set action=attack --set smart=6 # node 4, merged in by node 5
pxr graph add game.pixor --which asset --node frame-range --set from=2 --set to=5 --alone --in frames=4 # node 6
pxr graph add game.pixor --which asset --node hold --set times=2 --alone --in frames=6 # node 7
pxr graph wire game.pixor --which asset --from 7 --to 5 --slot frames2 # the cut attack into the Merge, in place of node 4
pxr graph set game.pixor --which asset --node frame-range --set to=6
pxr project set game.pixor --add-style portrait
pxr graph add game.pixor --which asset --node sprites --set action=walk --set style=portrait --set fps=8
pxr names game.pixor
O Intervalo de quadros e o Reter ficam entre o nó Sprites do ataque e o Mesclar, então cortam só o ataque. Adicionados sem --alone, eles ficariam antes do Organizar, depois do Mesclar, e cortariam todas as listas que o Mesclar junta.
pxr render --fps 8, --smart-frames 6 e --keys 0,0.25,0.5 definem o corte de todos os nós Sprites de uma vez. Um modelo de projeto rodado com pxr run game.pixorblueprint --set hold.times=4 alcança o nó Reter de cada pipeline de asset; --set icons/hold.times=4, só o do pipeline icons.
O painel
Depois que um grafo é guardado, a Vista 2D acima dele mostra o que a saída escolhida grava — suas tomadas, blocos, posições, pilhas e sobreposições — desenhado pelo mesmo código que grava o arquivo; antes disso, é uma linha por ação e lado, que você pode arrastar para reordenar.
O grafo de asset é um painel da etapa Asset, sob a Vista 2D, na mesma tela do grafo de Cena: caixas, conexões, ajustes na face de cada nó, um mais para adicionar um nó à cadeia conectada, um menos para excluir um, Quadro para ver tudo, Organizar para dispor tudo de novo, Nota para pôr uma nota nele, Grupo para fazer dos nós escolhidos um grupo, e Salvar kit… para guardar o grupo escolhido, ou, sem nenhum escolhido, o grafo inteiro, como kit (Salvar o grafo de asset como kit) — a barra que todo grafo tem, com as teclas que todo grafo tem (Trabalhando nele). A biblioteca de nós à esquerda lista Entradas e Saídas, os Pipelines do projeto e Meus pipelines, depois Entre e os seus próprios kits em Meus nós. Clique com o botão direito na tela › Voltar a uma folha o devolve a uma só folha com os arquivos que tinha. Ícones grava ícones de inventário. A linha na parte de baixo diz o que o grafo grava. Arquivos gerados, o primeiro da barra, abre a pasta gerada no seu gerenciador de arquivos.
Todo nó de arquivo tem Abrir: ele abre o arquivo daquele nó no aplicativo com que o seu sistema abre esse tipo de arquivo — a folha num editor de imagens, o .aseprite no Aseprite, o vídeo num player, o arquivo compactado num gerenciador de arquivos compactados (a dica dele diz qual). Um arquivo que ainda não foi gerado, ou está desatualizado, é gerado antes, com um indicador de carregamento em Abrir enquanto isso.
Cada ajuste de um nó de asset é uma propriedade (veja nós): uma linha com uma porta à esquerda, definida no nó ou conectada a partir de um valor. Delete exclui o nó escolhido, como o menos faz; o último nó que grava permanece.
Cada nó entre as listas e os arquivos mostra o que repassa, disposto numa folha: um nó Camada a sua camada, um Intervalo de quadros os seus quadros, um Espelhar o seu espelho, um Organizar a sua folha. Uma imagem mostra tudo o que os seus nós Sprites nomeiam, seja o que for que o cabeçalho da janela mostre: cada câmera, ação e Estilo, de cada renderização em que são desenhados. Câmeras enquadradas à parte (outra vista, inclinação ou tamanho), outro Estilo ou um clipe cortado de outro jeito são renderizações próprias, gravadas em folhas próprias; uma imagem alimentada por várias dispõe um bloco para cada folha, sob o nome do arquivo em que ela é gravada (hero.png, depois hero_top.png), com as linhas como as daquela folha. As renderizações que a Vista 2D não mostra são desenhadas por trás dela, uma depois da outra, e guardadas até o projeto mudar. Um nó nunca impede a imagem de outro: cada um é disposto só a partir do que o alimenta, e um nó que não pode ser — um arquivo de imagem ainda não escolhido, um Mesclar sem nada conectado — diz o porquê em vermelho onde estaria sua imagem, assim como os nós que ele alimenta, enquanto os outros mantêm as suas. As imagens são dispostas a partir de cada lista, desenhada inteira: enquanto um Intervalo de quadros ou Reter escolhido faz a Vista 2D reproduzir a sua lista, elas mantêm as últimas listas desenhadas inteiras, e um nó adicionado nesse meio-tempo recebe sua imagem delas. Quando algo a partir do qual são desenhadas muda nesse meio-tempo — uma parte escondida na Estrutura, um material, uma lâmpada — elas são desenhadas de novo por trás da Vista 2D, que continua reproduzindo o intervalo. Todo nó de arquivo mostra seu arquivo antes de ser exportado, feito pelo mesmo gravador que uma exportação usa: uma imagem dele no nó, e ele inteiro na Vista 2D quando o nó está escolhido — um PNG ou um mapa como imagem, um GIF, um APNG ou um vídeo tocando, um JSON, um arquivo do Godot ou um arquivo de texto como texto, e um ZIP como a lista do que ele contém. Um nó que grava vários arquivos (um GIF por clipe, uma camada por arquivo) tem uma lista Arquivo acima da vista.
Arquivos rápidos, e Gerar
O que é rápido de fazer aparece conforme o grafo muda; o que é lento espera pelo Gerar do seu nó (D51). Rápido: tudo entre as listas e os arquivos, a Folha, e Imagem PNG, JSON, SpriteFrames do Godot, Paleta, Arquivo de texto, Mapa de emissão, Camada de sombra e Camadas de traço e chapadas. Lento: GIF, APNG e Vídeo por clipe, o Arquivo Aseprite, Mapas de normais e de profundidade, Variantes de paleta, Kit de luz, Cartucho PICO-8, Relatório, Arquivo ZIP, Arquivo de animação e Ícones — o que codifica cada quadro de novo, ou renderiza. (Camadas de paper doll e de paralaxe são renderizações próprias: a janela Exportar as faz.)
Um nó lento mostra Gerar em vez do seu arquivo. Clicado, o arquivo é feito à parte — o botão vira um indicador de carregamento, e você continua trabalhando —; depois o nó mostra a sua imagem, a Vista 2D mostra o arquivo, e o botão passa a dizer Gerar de novo. Mude qualquer coisa que o alimente, e o nó mantém o que fez, mas diz Desatualizado em vez de refazer: clique em Gerar de novo, ou em Abrir, que gera antes.
Arquivos gerados
O que Gerar e Abrir produzem são arquivos de verdade, numa pasta temporária do projeto aberto (dentro da pasta temporária do seu sistema, com o nome pixor-generated- mais o projeto), uma pasta por pipeline de asset e uma por nó. Arquivos gerados, na barra, a abre. Ela se limpa sozinha: excluir um nó exclui os arquivos dele, excluir um pipeline de asset exclui a pasta dele, e fechar o projeto ou sair do Pixor exclui a pasta inteira; uma pasta que uma falha deixou para trás é removida na próxima vez que o Pixor iniciar. Eles nunca são o que uma exportação grava: a janela Exportar grava cada arquivo do zero.
Os ajustes do nó escolhido também ficam no Inspetor — e, sem nada escolhido, os da própria Folha do grafo. Abaixo dos ajustes de uma Folha ali, cada arquivo que ela pode gravar é uma opção: marcar JSON ou Vídeo por clipe adiciona esse nó Arquivo, conectado a partir da folha, e desmarcar o remove. Assim uma exportação se configura em poucos cliques sem tocar numa conexão, e continua sendo um grafo: cada opção é um nó que você pode ver, com seus próprios ajustes.
Os nós
Nós N x N. Camada, Intervalo de quadros, Reter, Espelhar, Tag, Organizar e Posicionar fazem a mesma coisa com quantas listas estiverem conectadas a eles, e devolvem cada uma numa saída própria, em frente à sua entrada: um nó Camada pega as normais de quatro listas de sprites e repassa quatro listas. Sempre há uma entrada sobrando para a próxima. Mesclar é o contrário: qualquer número de listas entra, uma sai.
| Nó | Recebe | Entrega | O que ele faz |
|---|---|---|---|
| Sprites | — | quadros | Entrada. Listas de sprites, fixadas aqui seja o que for que o cabeçalho da janela mostre: com várias cenas, a cena escolhida (ou todas); a câmera escolhida (ou todas) — uma câmera é um lado — a ação escolhida (Todos exceto Estático, Todos, ou uma pelo nome, Estático entre elas), desenhada com o Estilo escolhido (o primeiro de cada do projeto, até ser definido), e cortada como dizem seus Quadros/s, Quadros mantidos ou Quadros escolhidos (veja de onde vêm as listas de sprites). Câmera e ação também aceitam, a partir de pxr graph set, uma lista separada por vírgulas (South, East, North) ou o início de um nome e * para um anel (turret*). Um conjunto de partes do projeto renderiza cada clipe de novo com esse conjunto ligado em cada quadro (equipamento, estados de dano). Cada camada vem com a lista; um nó Camada escolhe uma, e sem ele a folha é do sprite finalizado. |
| Arquivo de imagem | — | quadros | Entrada: uma imagem de fora, como uma lista de sprites própria: um PNG — um quadro, ou uma faixa ou grade cortada em quadros de Largura do quadro por Altura do quadro, cada um retido por Cada quadro — ou um GIF, com seus quadros, seus atrasos e se repete em loop. Chamado é o nome da sua linha. A imagem assume a paleta da folha (cada pixel a sua cor mais próxima; o que é mais da metade transparente fica vazio) e é centralizada numa célula; um quadro maior que uma célula é recusado, com os dois tamanhos. Ela vai para as folhas às quais o seu nó está conectado e para nenhuma outra. |
| Juntar | quadros, … | quadros | Cada lista conectada, como uma só: várias listas de sprites numa folha. |
| Camada | quadros × N | quadros × N | Uma camada de cada lista: final, lines ou flat, ou um dos mapas com que um jogo ilumina o sprite — normal, depth, emission —, o que faz da folha em que ela cai uma imagem de cores em vez de índices de paleta; ou shadow, a sombra que cada quadro projeta, em preto (a que a Sombra do projeto pede, senão uma sombra de contato), que uma Sobreposição coloca sob o sprite; ou o nome de uma das saídas extras do grafo de Estilo, cujas linhas então recebem o nome dela (idle_South_rim). As próprias imagens de uma renderização também são camadas: com objetos de cena ou peças, a base de um paper doll e cada peça pelo nome (idle_South_helmet); com camadas de paralaxe, de layer0 (a mais distante) até a última. Cada uma só é renderizada quando uma Camada a nomeia, por pxr render — que é o que a janela Exportar do app executa. Separe as camadas de uma lista com um nó Camada por camada, cada um para sua própria Folha; combine-as com um Mesclar, uma Pilha ou uma Sobreposição. |
| Intervalo de quadros | quadros × N | quadros × N | Quadros de from a to de cada lista, contados a partir de 0: from=3 to=3 para uma imagem parada ou um ícone (um novo é from=0 to=0, o primeiro quadro), from=2 to=5 para alguns. Separe uma lista em várias folhas com um Intervalo de quadros por parte. |
| Reter | quadros × N | quadros × N | Cada quadro de cada lista retido times vezes mais. |
| Espelhar | quadros × N | quadros × N | Cada lista espelhada da esquerda para a direita, representando outra câmera: um nó Sprites de Leste espelhado como Oeste é walk_West, desenhado a partir de walk_East — pixels, normais, hitboxes e root motion espelhados. Um modelo simétrico não precisa renderizar o outro lado. |
| Tag | quadros × N | quadros × N | Se as linhas repetem em loop (Manter, Sim ou Não) e um pivô próprio (x,y em pixels da célula) para um clipe que fica de outro jeito. Um clipe que não repete é uma tag que toca uma vez no JSON e no .aseprite; o pivô fica em cada quadro do JSON e numa chave da fatia de pivô. |
| Organizar | quadros × N | folha × N | Cada lista numa folha: grade ou faixa, espaçamento, extrusão, potência de dois, recorte, quadros repetidos guardados uma vez, uma largura máxima para quebrar as linhas, uma altura máxima além da qual a folha é dividida em páginas (clipes inteiros por página, cada uma com seu próprio conjunto de arquivos), e quadros por linha, que encadeia cada clipe após o último, como faz uma folha de contatos. |
| Posicionar | folha × N | folha × N | Cada folha movida para um lugar na imagem. |
| Pilha | folha, folha | folha | Duas folhas como uma, a segunda abaixo ou ao lado da primeira, com um espaço. |
| Sobreposição | base, topo | folha | Uma folha colocada exatamente sobre outra, do jeito que a engine empilha camadas: os pixels vazios da de cima mostram a de baixo. Cada camada pode ser desligada para ver a outra sozinha. As duas precisam se alinhar quadro a quadro — os mesmos quadros nos mesmos lugares —, ou a exportação diz qual quadro não se alinha. |
| Folha | folha | arquivo | Uma folha de sprites na memória. Ela não grava nada: seus arquivos são nós Arquivo conectados a partir dela. Chamado é o nome dela. |
| Arquivo | folha | arquivo | Saída: um arquivo em disco, gravado a partir da Folha da qual está conectado, com seus próprios ajustes na face, Abrir para abrir o arquivo e Gerar quando ele é lento de fazer. Imagem PNG (a própria folha, e como seus arquivos se chamam: Arquivos para, o caminho que o PNG grava, cujo nome os outros adotam, dentro da pasta dada à janela Exportar; Nomes de arquivo, o modelo que dá nome aos quadros, com o primeiro nome gerado mostrado embaixo; Receita nos arquivos, se os arquivos levam como foram feitos; Seus próprios arquivos dá à folha um caminho, nomes e receita próprios, e, desligado, seus arquivos vão para onde o projeto exporta — o Inspetor mostra isso também com a Folha), JSON, Arquivo Aseprite, SpriteFrames do Godot, Mapa de normais, Mapa de profundidade, Mapa de emissão, Camadas de traço e chapadas, Paleta, Kit de luz, Cartucho PICO-8, Relatório; GIF por clipe e APNG por clipe (Escala); Vídeo por clipe (Escala, Quadros por segundo, Fundo); Camada de sombra (contato ou projetada); Variantes de paleta (a lista delas); Camadas de paper doll (Peças); Camadas de paralaxe (Camadas, Névoa nas camadas distantes). Excluir uma Folha exclui os seus nós Arquivo. |
| Arquivo de texto | folha | arquivo | Saída: um arquivo de texto a partir de um modelo aplicado aos quadros (abaixo). |
| Arquivo de animação | quadros | arquivo | Saída: uma animação de cada lista de sprites conectada, sem folha no meio: um GIF, um APNG ou um vídeo sem compressão (Cada lista como), Escala vezes maior, um vídeo a Quadros por segundo sobre Fundo. Para inicia o nome de cada arquivo: out/spin grava out/spin_walk_South.gif. |
| Ícones | — | arquivo | Saída: ícones de inventário do modelo, no ângulo de ¾ sob a luz de estúdio, contornados na cor da Raridade (ou Do nome do arquivo), Enquadrado ou não, em cada um dos Tamanhos: um PNG por ícone, e um atlas e um índice JSON por tamanho, na pasta Para. Um ícone é uma renderização própria, então não recebe nada; o pxr os faz depois das folhas, na pasta da exportação. Veja ícones de inventário. |
| Arquivo ZIP | arquivo, … | arquivo | Saída: um ZIP dos arquivos dos nós de arquivo conectados a ele (Para é para onde vai) — uma Folha conectada é tudo o que essa folha grava — ou, sem nada conectado, de todos os arquivos que a exportação gravou. As camadas de paper doll e de paralaxe entram com o resto. Os mesmos arquivos geram o mesmo arquivo compactado, byte a byte. É o que se entrega a outra pessoa ou se envia para uma loja. |
Um plano, não uma renderização. O grafo decide quais quadros vão para onde antes de existir um pixel, então a etapa Asset funciona com a etapa Estilo vazia, e pxr names mostra cada nome e id que o grafo vai gravar, sem renderizar.
Os quadros mantêm sua identidade. Reorganizar uma folha move retângulos e deixa o id de cada quadro intacto (veja Como os quadros se chamam, e o que são).
Pipelines de asset
Um projeto tem quantos pipelines de asset quiser, cada um com seu próprio grafo de asset sob seu nome — a folha do personagem, um conjunto de ícones, as imagens de uma página de loja — e a janela Exportar grava aquele que você escolher (pxr render --pipeline all grava todos). A lista Assets à esquerda da etapa Asset e o seletor de Asset do cabeçalho escolhem o que fica na tela. Novo pipeline de asset sob a lista cria uma cópia do que está sendo mostrado, com o nome dele (Principal 2), e o menu de clique direito de uma linha o renomeia, o Duplica, o exclui (Excluir NAME…, que pergunta antes: inclusive o primeiro, desde que reste outro), e:
- Salvar kit… (Salvar o pipeline de asset como kit) grava o pipeline como kit. Salvo na biblioteca de pipelines (onde o diálogo abre), ele aparece na biblioteca de nós de todo projeto em Meus pipelines.
- Usar kit… (Usar um kit de pipeline de asset), ou um clique num deles em Meus pipelines, torna um pipeline salvo de outro projeto parte deste projeto. Os nomes dele — do pipeline, das folhas, dos arquivos — viram nomes que nada aqui tem.
pxr project set game.pixor --add-pipeline icons
pxr graph set game.pixor --which asset --pipeline icons --node arrange --set layout=strip
pxr graph save game.pixor --which asset --pipeline icons --as-pipeline -o icons.pixorkit
pxr project set other.pixor --use-pipeline icons.pixorkit
pxr project set other.pixor --remove-pipeline icons
Imagens de fora
Um nó Arquivo de imagem põe numa folha do Pixor o que foi desenhado em outro lugar: um logotipo numa folha de título, um efeito pintado à mão, quadros de outra ferramenta. Adicione-o, use Escolher… para um PNG ou um GIF, e ele se junta às listas de sprites por meio de um Mesclar; conecte-o a uma folha própria para mantê-lo à parte.
pxr graph add game.pixor --which asset --node image-file --set name=logo --set file=art/logo.png
pxr graph add game.pixor --which asset --node image-file --set name=spark --set file=art/spark.gif
pxr graph list game.pixor --which asset # every node, numbered
pxr graph set game.pixor --which asset --node logo --set cell_w=16 --set cell_h=16 # a strip of 16 px frames
pxr graph set game.pixor --which asset --node logo --set own_colours=true # keep its colours
--node recebe o número de um nó de pxr graph list, seu nome (logo) ou seu tipo (frame-range) quando o grafo tem um só nó desse tipo.
Uma imagem assume a paleta da folha: cada pixel a mais próxima das cores dela. Marque Suas próprias cores e ela mantém as próprias: elas são acrescentadas ao fim da paleta da folha (as mais usadas primeiro, tantas quantas couberem na paleta), então todos os arquivos da folha — o PNG, o .aseprite, os GIFs, os arquivos de paleta — as levam, e uma variante de paleta as deixa como estão. Os próprios quadros da folha não mudam.
Uma imagem maior que a célula aumenta as células de todos os arquivos em que entra: os outros quadros ficam centralizados nas células maiores, e o pivô, as hitboxes e os pontos de fixação deles se movem junto.
Vários arquivos a partir de uma renderização
Um grafo pode ter vários nós Folha, cada um com um PNG conectado a partir dele: uma renderização então grava uma folha de personagem, um conjunto de ícones e uma imagem promocional. Uma Folha sem PNG não grava imagem — só os arquivos conectados a partir dela, e é assim que se grava só o JSON de uma folha. Uma segunda Folha recebe o que a primeira recebe até ser conectada a listas próprias. Cada uma tem seu próprio caminho, modelo de nome e receita, ou usa os do projeto; os arquivos ao lado dela — e a sombra, as variantes e as escalas deles — são os seus nós Arquivo. Quando duas usam os do projeto, a primeira grava a folha do projeto e a seguinte grava ao lado, com o próprio nome (out/hero_icons.png para uma chamada icons), então nada é gravado duas vezes; duas que indicam um mesmo caminho próprio são recusadas, com os dois nomes. Uma Folha adicionada por um script recebe um nome que nenhuma outra saída tem (folha 2), como no app, e pxr names lista os arquivos com os nomes que a renderização lhes dá.
Câmeras com a mesma vista, inclinação, tamanho e visual são enquadradas juntas e gravam uma folha, uma linha para cada: os lados de um anel se alinham. Uma câmera configurada de outro jeito grava suas próprias folhas, e um nó Sprites recebe as linhas do grupo que está sendo gravado. Um nó Sprites que nomeia câmeras de dois grupos — South, top — as reúne num só arquivo, gravado assim que todas as câmeras renderizaram, ao lado da folha do projeto, com o nome do seu nó Folha (out/hero_both.png); as linhas recebem o nome da sua câmera (walk_South, walk_top). Uma folha tem um só tamanho de quadro e uma só paleta, então câmeras que enquadram em tamanhos diferentes são recusadas em vez de espremidas juntas: dê a elas o mesmo tamanho.
Uma grade de ícones são três nós: um nó Sprites da ação idle a partir da câmera South, um Organizar como tira e uma Folha cujo PNG vai para out/icons.png. Uma folha de contatos é o mesmo com espaçamento. Não são recursos; são grafos.
A partir de um script:
pxr graph add game.pixor --which asset --node sprites --set action=idle --set camera=South --alone # node 11
pxr graph add game.pixor --which asset --node arrange --set layout=strip --alone --in frames=11 # node 12
pxr graph add game.pixor --which asset --node sheet --set name=icons --set path=out/icons.png --set formats=png --alone --in sheet=12
pxr graph set game.pixor --which asset --node icons --set formats=json,godot # its File nodes
pxr graph wire game.pixor --which asset --from 10 --to 12 --slot frames2 # the spark into the Arrange's spare input
pxr graph add game.pixor --which asset --node sheet --set name=sparks --set path=out/sparks.png --set formats=png --alone --in sheet=12.1 # output 1 of an N x N node
pxr graph list game.pixor --which asset # every node, and every output's path
pxr graph drop game.pixor --which asset --node logo # the logo's Image file node
pxr render game.pixor # out/game.png, out/icons.png (.json, .tres), out/sparks.png
A caminhada desenhada no Estilo portrait é enquadrada à parte, então grava suas próprias folhas ao lado destas: out/game_portrait_8fps.png, e a faísca, que não tem Estilo próprio, de novo em out/sparks_South_portrait_8fps.png.
Os números são os que o passo a passo desta página fornece; pxr graph list imprime os de um projeto. --alone mantém a grade de ícones fora da cadeia da folha principal: uma lista idle mesclada nela também seriam os mesmos quadros duas vezes, o que o modelo de nome recusa.
pxr graph add põe um nó na cadeia, já conectado: um Intervalo de quadros ou um Reter antes do Organizar, um nó de folha depois dele, e um segundo nó Sprites ao lado do primeiro por meio de um Mesclar. --set numa Folha aceita path, names e recipe; formats adiciona e remove os nós Arquivo dela — o PNG sempre entre eles, como na lista de uma exportação; remova o nó dele para não gravar nenhum —, e as palavras dos ajustes que os nós Arquivo guardam criam e definem esses nós: shadow=drop, variants=hit-flash,hue:120, anim_scale=4, paper_doll=yes, pieces=helmet:Helmet,Visor, parallax=3, haze=none. Os ajustes próprios de um nó Arquivo são definidos nele pelo seu número: --node 5 --set fps=60.
Traços ao lado das cores
Uma folha pode ter mais de uma camada das mesmas listas. Conecte o nó Sprites duas vezes — uma direto, outra por uma Camada de lines — e junte-os com Mesclar antes de um Organizar, ou organize cada um e use Pilha para pôr as duas folhas lado a lado. O JSON nomeia as linhas de traços como walk_South_lines, e os ids delas diferem dos quadros de cor pela camada, que é o que eles são. Um modelo de nome que não diz {layer} a acrescenta aos nomes desses quadros mesmo assim (hero_walk_South_00_lines.png), para que dois quadros nunca caiam num mesmo nome; os próprios quadros do sprite mantêm os seus. Um nó Sprites de um conjunto de partes faz o mesmo com {set} (hero_attack_South_00_bare.png), e o conjunto faz parte dos ids desses quadros. Ou ponha as duas exatamente uma sobre a outra com uma Sobreposição, do jeito que a engine vai desenhá-las.
Arquivos de texto a partir de um modelo
Uma engine de que o Pixor nunca ouviu falar precisa de um descritor, e isso é um arquivo de texto sobre os mesmos metadados de quadro que o JSON traz. Um nó Arquivo de texto grava um a partir de um modelo:
{sheet} {width}x{height}
{#frames}{name} {x} {y} {w} {h} {duration}{sep}
{/frames}
{#frames} ... {/frames} grava o seu corpo uma vez por quadro. Fora dele, as palavras são as da folha: {project}, {object}, {sheet} (o nome do arquivo da imagem), {width}, {height}, {cell_w}, {cell_h}, {pivot_x}, {pivot_y}, {frames}. Dentro dele, as de um quadro: {name}, {id}, {action}, {side}, {row}, {index}, {n} (o número do quadro na folha), {layer}, {x}, {y}, {w}, {h}, {source_x}, {source_y}, {duration} (milissegundos), {pivot_x} e {pivot_y} (os do próprio clipe, quando uma Tag lhe deu um), {loop} (true ou false), {root_x}, {root_y}, {root_dx} e {root_dy} (root motion, como o JSON o dá), {boxes} e {sockets} (como JSON), e {sep}, que é uma vírgula, exceto depois do último quadro — o bastante para uma lista JSON. {index:3} completa um número com zeros; {{ e }} gravam uma chave.
Um modelo de texto também pode ficar num arquivo próprio ao lado do projeto: dê ao nó um Arquivo de modelo de texto (--set file=frames.tpl por um script), e ele é lido toda vez que a saída é gravada, para que um estúdio edite o seu descritor onde guarda os outros arquivos.
Não há condicionais, nem aritmética, nem inclusões. É um jeito de escrever um nome de arquivo, não uma linguagem. Uma palavra que o Pixor não conhece é recusada quando o modelo é digitado, não gravada num arquivo.
Um layout usado como um grupo
Uma grade de ícones, uma folha de contatos, o jeito próprio de um estúdio dispor um personagem: Salvar kit… na barra, sem grupo escolhido, salva o grafo de asset como kit (Salvar o grafo de asset como kit): o seu layout, o que alimenta a sua Folha, como um grupo que recebe listas de sprites (cada nó Sprites vira uma entrada) e entrega a folha. A Folha e os arquivos pendurados nela continuam do projeto. + › Usar kit… (Adicionar um kit como grupo) o põe no grafo de asset de outro projeto como um grupo, para conectar a uma Folha ali ou pôr no lugar de um Organizar. Clique duas vezes nele, ou clique na seta do título, para abri-lo no lugar; a seta o recolhe de novo. Por um script:
pxr graph save hero.pixor --which asset -o icon-grid.pixorkit --name "Icon grid"
pxr graph add villain.pixor --which asset --kit icon-grid.pixorkit --alone --in 0=0 # fed by node 0
pxr graph swap villain.pixor --which asset --node arrange --kit icon-grid.pixorkit
O que ele não faz
- Formatos binários continuam sendo código. PNG,
.aseprite, GIF, APNG,SpriteFramesdo Godot, os light kits e.p8são nós Folha e Arquivo; um modelo grava texto. - Sem binários de plugin e sem nós de script, aqui como nos outros grafos.
O que esta página descreve está na versão completa; a demo grátis no navegador fica no visual padrão e na folha PNG.
Testar no navegador Obter o Pixor
