O grafo de Cena e os modelos de projeto
Dezesseis cavaleiros em círculo em volta de uma estátua, cada um apontando uma espada para ela, não são dezesseis importações posicionadas à mão. São um grafo: uma importação, um anel delas, um olhar-para e um pouco de variação para que não haja dois iguais. Mudar de dezesseis para vinte e quatro custa um número.
O painel Grafo de cena da etapa Cena contém esse grafo. É a mesma tela do grafo de Estilo da etapa Estilo — caixas, conexões, ajustes no corpo — com seu próprio tipo de conexão, então um nó de visual não pode ser solto nele, nem o contrário. Nota coloca uma nota nele, como no grafo de Estilo: suas palavras numa caixa atrás dos nós, que move os nós dentro dela.
Um projeto que nunca o abre, e não adiciona nada à cena, não guarda grafo algum e renderiza o que importou.
Tudo o que você adiciona à cena é um nó deste grafo — outro modelo (um item), um objeto de cena num osso, uma mola, uma forma, uma imagem, palavras, um volume, uma lâmpada, um efeito, e o terreno, a grama, a água e o céu do mundo (D49). O + da Estrutura adiciona o nó, no fim da cadeia; a Estrutura lista as coisas do grafo, e uma linha e o seu nó são uma coisa só: escolher um escolhe o outro, o Inspetor o mostra com todos os controles que ele tem, e excluir um exclui os dois. Um nó adicionado pelo próprio menu Adicionar do grafo vira na hora uma linha da Estrutura. Uma coisa dentro de um grupo (a lanterna de um kit) é listada sob uma linha para o grupo; escolhê-la abre o grupo no lugar e escolhe o nó dentro dele.
Cada ajuste destes nós é uma propriedade (veja nós): uma linha com uma porta à esquerda, definida no nó ou conectada a partir de um valor. Um Valor numérico conectado ao Quantos de um Anel e ao de uma Linha faz os dois crescerem juntos. Os nós do mundo (terreno, água, céu, nuvens, vento…) também têm as suas; o que não é um número ou uma palavra — se um trecho tem cor própria, o que mais o vento move, as horas do dia — continua sendo um controle no nó.
Os nós
| Nó | O que ele faz |
|---|---|
| Importar | O que o projeto importou, onde está: o modelo com seus objetos de cena. |
| Objeto | O modelo com seus objetos de cena, onde ele está. O que nenhum nó nomeia não é renderizado. |
| Item | Outro modelo ao lado da importação, a partir do seu arquivo: onde ele fica, seu giro e escala, um clipe próprio. Adicionado como uma forma: ele repassa sua lista e adiciona uma cópia de si mesmo (--item). |
| Objeto de cena | Um modelo que um osso da importação segura — uma espada, uma tocha — com sua posição, giro e escala no osso e o nó dele que o osso agarra (--add-prop). Faz parte do modelo: cada cópia da importação o carrega, então ele não adiciona nenhuma cópia própria e repassa sua lista. |
| Mola | Um osso e tudo abaixo dele balançando com o movimento — cabelo, uma capa, uma cauda — com sua rigidez, amortecimento e gravidade (--spring). Como um objeto de cena, faz parte do modelo em cada objeto dele. |
| Forma | Uma das formas próprias do Pixor — uma caixa, um cilindro, letras — com posição, tamanho, giro, cor e chanfro no nó. Ela repassa sua lista e acrescenta um objeto de si mesma; sem nada conectado, ela começa uma lista, então uma Forma ligada a um Anel é um anel dessa forma. |
| Imagem, Texto | Uma imagem num plano, ou palavras numa fonte pixelada num cartão (Imagens e palavras), adicionada como uma forma. |
| Volume | Fumaça, fogo ou um líquido (Volumes): um para cada objeto do nó que chega à Saída, posicionado por ele. |
| Lâmpada | Uma luz com um lugar: uma para cada objeto que chega à Saída, então uma Linha depois de uma lâmpada é uma fileira de lâmpadas. Uma lâmpada conectada a nada não ilumina nada. |
| Efeito | Partículas — uma explosão, faíscas, chuva, vaga-lumes — uma para cada objeto que chega à Saída. |
| Anel | Objetos em volta de um círculo: quantos, a que distância, onde fica o primeiro e se eles olham para o centro. |
| Linha | Objetos em linha, a um passo de distância. |
| Grade | Objetos numa grade, tantos na largura e tantos na profundidade. |
| Espalhar | Objetos espalhados numa caixa, com semente, com uma distância mínima que nenhum par deles ultrapassa. |
| Olhar para | Vira cada objeto para olhar para um ponto. Girar mais mira um modelo cuja arma não está no seu eixo frontal. |
| Variar | Dá a cada objeto sua própria fase de clipe, giro e tamanho, a partir do seu número e de uma semente. |
| Reproduzir | O clipe que esses objetos tocam, seja o que for que o resto da folha toque: uma árvore balançando ao lado de um cavaleiro atacando. Eles o tocam em todas as ações, sobre os quadros da ação — um moinho girando ao lado de uma casa parada é uma nova ação na etapa Ação e um nó Reproduzir no moinho. As ações são feitas lá, não aqui. |
| Visto por | Os objetos que só uma câmera vê, e quadros (abaixo). |
| Juntar | Duas listas de objetos como uma só. |
| Mover, Espelhar | Desloque, gire e redimensione cada objeto; adicione o reflexo de cada objeto em relação a um plano. |
| Subdividir | Divide cada triângulo de cada objeto em quatro, uma vez ou até quatro vezes, para que um Deslocar tenha pontos para mover. |
| Deslocar | Empurra a superfície de cada objeto para dentro e para fora com ruído com semente, até uma quantidade em metros, com ondulações a uma certa distância umas das outras. Cada cópia ganha as próprias ondulações, então uma linha de caixas vira uma linha de rochas diferentes. |
| Campo de altura | Eleva a superfície de cada objeto direto para cima por um campo de altura com semente visto de cima: depois de um Subdividir, um plano liso vira um terreno ondulado. O chão só sobe. |
| Chanfro | Corta as arestas das caixas de cada objeto a 45 graus. |
| Pousar no chão | Solta cada objeto direto para baixo sobre a superfície mais alta abaixo dele: as outras coisas da cena (ou uma delas) e qualquer terreno antes dele na cadeia, um ajuste de altura acima dele, inclinando-se com o declive até onde você pedir. |
| Na superfície | Espalha objetos do que recebe sobre a superfície de algo, por área e com semente — só nos topos, ou em todo lugar. |
| Nos pontos | Coloca um objeto do que recebe em cada canto de uma coisa. |
| Diferença | Os objetos da primeira entrada com os objetos da segunda recortados deles onde estão: janelas numa parede, um entalhe num caixote. A segunda entrada é só a forma do buraco e não é renderizada. |
| Unir | Duas listas de objetos desenhadas como uma só parte, para que nenhum traço seja desenhado onde elas se encontram: uma torre de caixas que se lê como um só prédio. |
| Definir forma | Define um ajuste das formas de cada objeto — tamanho (um múltiplo), largura, altura, profundidade, segmentos, chanfro ou matiz — a partir de um atributo vezes um número mais um número. |
| Atributo | Grava um número em cada objeto, para um nó posterior usar (abaixo). |
| Selecionar | Mantém os objetos cujo atributo passa num teste. |
| Saída | O que fica diante da câmera: o único resultado do grafo. |
Os nós de mundo — Terreno, Brotos, Folhagem, Água, Nuvens, Céu, Vento, Raios de luz, Horas do dia e Blocos — ficam no mesmo menu Adicionar; veja Mundos. Os nós de valor (um número, um liga/desliga, um ângulo, palavras e a aritmética entre eles) alimentam as propriedades.
Um nó de layout roda uma vez por cópia que recebeu. Um anel de linhas é uma linha por cópia do anel. Isso é tudo sobre aninhamento — não há uma segunda regra.
A variação vem do número da cópia e da semente do grafo, nunca de outra coisa, então o mesmo grafo dá a mesma multidão sempre, em qualquer máquina e nos dois backends.
Dezesseis cavaleiros
Adicione Anel, defina Quantos como 16 e Raio como 3, desligue Virar para o meio, depois adicione Olhar para com Em direção a na estátua. Adicione Variar e dê 1 a Fase do clipe para que todos estejam em pontos diferentes da caminhada. O número no rodapé da tela diz quantas cópias o grafo faz, e o sprite ao lado as mostra.
Uma estátua ao lado deles é um nó Item: outro modelo, do seu arquivo, parado onde é posto. Como todo nó de coisa, ele repassa o que recebe e acrescenta uma cópia de si, então a posição dele na cadeia diz o que o repete: um Item depois do Anel é uma estátua entre dezesseis cavaleiros, um Item antes dele seriam dezesseis estátuas. No app, o + da Estrutura › Um item › De um arquivo de modelo… o põe no fim da cadeia, depois do anel.
A partir de um script, um nó por vez:
pxr project scene game.pixor ring --count 16 --radius 3 --face-out
pxr project scene game.pixor look-at --at 0,0.8,0
pxr project scene game.pixor vary --phase 1 --seed 3
pxr project scene game.pixor --set ring.count=24
pxr project scene game.pixor # prints the graph and the count
pxr graph add e pxr project scene põem um nó no fim da cadeia. Um que faz cópias próprias e não recebe nada (um Objeto, uma Importação) começa a cadeia no lugar da importação simples, e depois de qualquer outra coisa fica ao lado da cadeia, mesclado com ela, para que nada do que foi renderizado se perca. --alone adiciona um nó conectado a nada, e --in conecta outro nó a uma das entradas dele.
pxr graph add game.pixor --which scene --node object --set of=model # the knight alone
pxr graph add game.pixor --which scene --node ring --set count=16 --set radius=3
pxr project set game.pixor --item statue.glb@0,0 # an Item after the ring
Um Item sozinho, conectado a nada (--alone), começa uma lista própria, que um Mesclar, um Espalhar ou um Visto por recebe. Um Objeto indica só o modelo: um item, uma forma e uma imagem são nós próprios, e indicar um deles com um Objeto é um erro.
O que cada câmera vê
Uma câmera enquadra tudo o que o grafo põe diante dela. Visto por dá a uma câmera cópias que nenhuma outra câmera vê, então um projeto com uma câmera principal e uma câmera de retrato pode mostrar o anel inteiro numa folha e a estátua na outra: junte o Item da estátua, sozinho, por um Visto por portrait, ao resto com Mesclar. O retrato enquadra a estátua com o que todas as câmeras veem; a câmera principal nunca vê a estátua.
pxr project new game.pixor --model knight.glb --force
pxr project scene game.pixor ring --count 16 --radius 3 # node 2
pxr project set game.pixor --add-camera portrait:three-quarter:64 # NAME:VIEW:SIZE[:ANGLE]
pxr graph add game.pixor --which scene --node item --set model=statue.glb --alone # node 3
pxr graph add game.pixor --which scene --node seen-by --set camera=portrait --alone --in objects=3 # node 4
pxr graph add game.pixor --which scene --node merge --in b=4 # the ring, and the statue for the portrait
pxr project scene game.pixor # 17 objects
Aqui o Item da estátua é adicionado com --alone, então não fica no fim da cadeia do anel (pxr graph list mostra os números); o Mesclar vai no fim da cadeia, então o anel entra pela primeira entrada dele. pxr render grava game.png, só o anel, e game_portrait.png, o anel em volta da estátua.
Um grafo usado como um nó
Um anel de cavaleiros em volta de uma estátua, uma fileira de barracas de feira, uma multidão com sua variação: um grafo de cena pode ser salvo como um grupo e usado em outro projeto. Salvar kit… na barra, sem grupo escolhido, grava o grafo inteiro como kit (Salvar o grafo de cena como kit; o nó Saída dele vira a saída do grupo), e com um grupo escolhido, esse grupo (Salvar o grupo como kit); Usar kit… (Adicionar um kit como grupo), no menu Adicionar da tela, insere um como grupo. É uma caixa, chamada pelo próprio nome, e a seta nela (ou um clique duplo) a abre no lugar para ver ou mudar do que ela é feita; a seta a recolhe de novo. Um nó Entrada dentro dela representa uma entrada, então um anel salvo pode receber cópias para pôr em anel.
pxr graph save market.pixor --which scene -o stalls.pixorkit --name "Row of stalls"
pxr graph add town.pixor --which scene --kit stalls.pixorkit
pxr graph flatten town.pixor --which scene # the nodes it stands for
Um grupo é dado, não código: só pode fazer o que os nós dentro dele fazem, e renderiza exatamente como eles renderizariam.
Várias folhas a partir de uma renderização
O que é gravado não é assunto deste grafo. O nó Saída no fim da cadeia é o que fica diante da câmera, e é o único; um segundo arquivo — um conjunto de ícones, uma imagem promocional, uma folha só dos traços — é uma saída do grafo de asset, que recebe os quadros em que as cópias deste grafo foram renderizadas.
Uma cena com vários modelos, animada
Um item também recebe um clipe, e uma fase para avançá-lo:
pxr project new patrol.pixor \
--item knight.glb@-0.9,0.2,-20:walk \
--item knight.glb@0.9,0.2,-20:walk,0.45 \
--item chest.glb@-1.8,-1.6,25,1.2
Um item com clipe traz o seu rig e o reproduz; um sem clipe é assado onde está, o que sai mais barato. O clipe vem do próprio arquivo do modelo ou dos seus irmãos name@clip, como em todo o resto do Pixor.
Posicionar, remodelar e escolher
Os nós do grafo de cena fazem mais do que organizar. Mover desloca, gira e redimensiona cada cópia; Espelhar adiciona o reflexo de cada cópia em relação a um plano.
Atributo grava um número em cada cópia — seu número na lista, onde ela está, como está girada, a que distância está do centro, ou ruído com semente — e Selecionar mantém as cópias cujo atributo passa num teste e descarta o resto. Juntos, eles são a forma de dizer só os de trás, com metade do tamanho sem nomear quais estão atrás (z aponta para a câmera, então o fundo é a ponta baixa):
pxr project new town.pixor --model chest.glb --force
pxr project scene town.pixor row --count 6 --step 1,0,0.5
pxr project scene town.pixor attribute --name depth --from z
pxr project scene town.pixor select --name depth --how below --at 1
pxr project scene town.pixor move --size 0.5
Subdividir e Deslocar remodelam as próprias superfícies das cópias: uma caixa vira uma rocha, um penhasco liso vira um áspero. São ajustes que as cópias carregam e com que suas partes são construídas, não triângulos editados à mão, então o mesmo grafo dá as mesmas rochas em toda parte:
pxr project new yard.pixor --add-shape rock=box:0.5 --size 64
pxr project scene yard.pixor row --count 3 --step 1.4,0,0
pxr project scene yard.pixor subdivide --times 3
pxr project scene yard.pixor displace --amount 0.12 --bumps 0.35 --seed 4
Pousar no chão, Na superfície e Nos pontos leem a cena em que o grafo posiciona as coisas. Um espalhamento numa caixa vira um espalhamento numa colina quando um Pousar no chão vem depois dele e o terreno está na sua lista:
pxr project new hill.pixor --model chest.glb --terrain 12:24:2 # the terrain is node 2
pxr graph add hill.pixor --which scene --node object --set of=model --alone # node 3
pxr graph add hill.pixor --which scene --node scatter --alone --in objects=3 --set count=14
pxr graph add hill.pixor --which scene --node merge --in b=4
pxr graph add hill.pixor --which scene --node drop-to-ground
e velas ficam em cada canto de uma coroa com o nó Forma da vela e Nos pontos da coroa. A tela conta as cópias de Na superfície antes de qualquer coisa ser construída; a contagem de Nos pontos é conhecida assim que a cena é.
Diferença corta com o que receber em segundo lugar, onde estiver: uma caixa pequena, numa Linha de três, atravessando uma parede comprida, é uma parede com três janelas. O interior de um buraco é revestido com a cor em que a maior parte da parte é desenhada. Uma parte ligada a um rig (um modelo com skin, uma forma num osso ou uma forma com chaves) não é cortada, já que um corte muda vértices que foram dados ao rig, e nem uma com mais de 5,000 triângulos.
pxr project new house.pixor --add-shape wall=box:4,2,0.2 --size 96 # the wall, node 2
pxr graph add house.pixor --which scene --node shape --set name=window --set size=0.4,0.5,0.4 --set at=-1.2,0.1,0 --alone # node 3
pxr graph add house.pixor --which scene --node row --alone --in objects=3 --set count=3 --set step=1.2,0,0 # node 4
pxr graph add house.pixor --which scene --node difference --in "cut by=4"
pxr render house.pixor -o out/house.png
Uma forma fica centrada no seu at, então a primeira janela fica 1.2 m à esquerda do meio da parede, e a Linha põe as outras duas a 1.2 m dela, as três dentro da parede de 4 m.
As formas que o Pixor constrói têm ajustes próprios, e Definir forma os controla a partir do grafo: uma fileira de caixas, cada uma mais alta que a anterior e um pouco mais adiante no círculo cromático, é o nó Forma da caixa, uma Fileira, um Atributo de onde cada cópia fica ao longo da fileira e dois Definir forma.
pxr project new crates.pixor --add-shape 'crate=box:0.5:0,0,0:#c86432' --size 64 # an orange crate alone
pxr project scene crates.pixor row --count 5 --step 1.1,0,0
pxr project scene crates.pixor attribute --name x --from x
pxr project scene crates.pixor set-shape --setting height --from x --times 0.15 --plus 0.5
pxr project scene crates.pixor set-shape --setting hue --from x --times 40
pxr project scene crates.pixor bevel --width 0.06
pxr render crates.pixor -o out/crates.png
As caixas ficam de 0 a 4.4 m, então crescem de 0.5 m até cerca de 1.2 m e passam do laranja, pelo amarelo e verde, até o verde-azulado. O matiz gira uma cor, então aparece numa forma colorida; uma cinza continua cinza.
Os ajustes de uma forma são aplicados antes de qualquer Subdividir ou Deslocar, em qualquer ordem que os nós estejam, porque uma forma reconstruída a partir dos seus ajustes parte da própria superfície. Só as formas que ficam sozinhas os recebem; uma forma presa a um osso faz parte do modelo.
Uma parte ligada a uma skin ou que tem morph targets é deslocada mas não subdividida, porque um ponto novo no meio de uma aresta não tem pesos honestos; nem uma parte que balança ao vento.
Uma cópia difere das vizinhas pelo seu número, seus atributos e uma semente, ou não difere — nunca por ter um nome, porque nomear uma faria do grafo um arquivo de cena.
Modelos de projeto
Um projeto aponta para este modelo. Um modelo de projeto é a mesma coisa com os caminhos retirados e com nomes e tipos dados — o visual, o grafo acima, os clipes e as exportações —, então uma receita roda sobre uma pasta de modelos em vez de ser copiada vinte vezes e editada a cada vez.
Projeto › Salvar como modelo de projeto… grava um .pixorblueprint. Abrir um (Projeto › Abrir projeto…) pede as entradas dele e depois se comporta como qualquer projeto; o que sai é sem título, então salvá-lo não sobrescreve a receita.
Pela linha de comando:
pxr project blueprint game.pixor -o four-way.pixorblueprint
pxr run four-way.pixorblueprint --in model=hero.glb -o out/hero.png
pxr batch models/ --blueprint four-way.pixorblueprint --out out/
pxr run four-way.pixorblueprint --in model=hero.glb --set ring.count=12
pxr graph set four-way.pixorblueprint --which style --node 0 --set dither=0.5 # change the recipe itself
--set NODE.SETTING=VALUE altera um ajuste de um nó: no grafo de cena, se ele tiver esse nó; senão, em todo pipeline de asset e Estilo que o tenha (--set hold.times=4: o nó Reter de todo pipeline de asset). --set PIPELINE/NODE.SETTING=VALUE altera só naquele pipeline. Um nó é nomeado pelo seu rótulo em minúsculas, com hifens entre as palavras (ring para um Anel, look-at para um Olhar para: pxr project scene os mostra); o próprio rótulo ("Look at") também funciona. O arquivo de paleta de cada Estilo é um slot próprio: palette para o primeiro Estilo, palette:NAME para outro. Um slot ausente ou com o tipo errado informa o slot e o tipo esperado, antes de qualquer coisa ser carregada.
O Pixor traz alguns em assets/blueprints/: uma folha de personagem de quatro lados, um ícone de inventário e uma imagem promocional.
O que mudou desde a última versão
Toda exportação leva uma receita (como a folha foi feita), então duas builds podem ser comparadas sem um banco de dados de builds:
pxr diff out-yesterday/ out-today/
Ele diz quais arquivos são novos, quais sumiram, quais diferem e em quantos pixels — e qual ajuste, qual entrada ou qual modelo de projeto causou isso:
changed ring.png 36598 of 82944 pixels (44.12%)
scene.nodes[3].settings.count: 16 -> 12
--exact sai com 1 a qualquer mudança, para uma build que deve ser reproduzível.
As camadas que uma exportação grava
Peças de paper doll, a folha de sombra e as camadas de paralaxe são arquivos separados. Na Vista 2D da etapa Asset, Todos, empilhados no seletor Camada empilha as camadas de uma folha de trás para a frente, como uma engine fará: um botão por camada, e uma linha dizendo se cada camada tem o tamanho da base. Nada precisa ser exportado antes: as camadas são desenhadas a partir dos quadros já renderizados, pelo código que as grava, organizadas como a saída de folha de sprites escolhida as dispõe — o sprite final (base), sua sombra, traços, cores chapadas, normais, profundidade, emissão e as saídas extras do grafo de Estilo. O sprite e sua sombra começam ligados; um mapa de normais sobre o sprite o esconderia. Dos arquivos lê de volta o que uma exportação realmente gravou — os mesmos arquivos que uma engine vai carregar, incluindo peças de paper doll e camadas de paralaxe.
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