Il grafo di Scena e gli schemi
Sedici cavalieri in cerchio attorno a una statua, ognuno con la spada puntata verso di essa, non sono sedici importazioni piazzate a mano. Sono un grafo: un’importazione, un anello di esse, un look-at e un po’ di variazione così che non ce ne siano due identici. Passare da sedici a ventiquattro costa un numero.
Il pannello Grafo di Scena della fase Scena contiene quel grafo. È la stessa tela del grafo di Stile della fase Stile (riquadri, collegamenti, impostazioni nel corpo) con un suo tipo di collegamento, così un nodo di look non vi si può trascinare dentro, né il contrario. Nota vi mette una nota, come sul grafo di Stile: le tue parole in un riquadro dietro i nodi, che sposta i nodi al suo interno.
Un progetto che non lo apre mai, e non aggiunge nulla alla scena, non salva alcun grafo, e renderizza ciò che ha importato.
Tutto ciò che aggiungi alla scena è un nodo di questo grafo: un altro modello (un elemento), un oggetto di scena su un osso, una molla, una forma, un’immagine, parole, un volume, una lampada, un effetto, e il terreno, l’erba, l’acqua e il cielo del mondo (D49). Il + della Struttura aggiunge il nodo, alla fine della catena; la Struttura elenca le cose del grafo, e una riga e il suo nodo sono la stessa cosa: scegliere l’una sceglie l’altro, l’Ispettore lo mostra con ogni controllo che ha, ed eliminare l’uno elimina entrambi. Un nodo aggiunto dal menu Aggiungi del grafo è subito una riga della Struttura. Una cosa dentro un gruppo (la lanterna di un kit) è elencata sotto una riga per il gruppo; sceglierla apre il gruppo sul posto e sceglie il nodo al suo interno.
Ogni impostazione di questi nodi è una proprietà (vedi nodi): una riga con una porta alla sua sinistra, impostata sul nodo o collegata da un valore. Un solo Valore numerico collegato al Quanti di un Anello e a quello di una Riga li fa crescere insieme. Anche i nodi del mondo (terreno, acqua, cielo, nuvole, vento…) hanno le loro; ciò che non è un numero o una parola (se una zona ha un colore proprio, cos’altro muove il vento, le ore del giorno) resta un controllo sul nodo.
I nodi
| Nodo | Cosa fa |
|---|---|
| Importa | Ciò che il progetto ha importato, dove si trova: il modello con i suoi oggetti di scena. |
| Oggetto | Il modello con i suoi oggetti di scena, dove si trova. Ciò che nessun nodo nomina non viene renderizzato. |
| Elemento | Un altro modello accanto all’importazione, dal suo file: dove sta, la sua rotazione e scala, una clip propria. Aggiunto come una forma: passa oltre il suo elenco e aggiunge una copia di sé (--item). |
| Oggetto di scena | Un modello tenuto da un osso dell’importazione — una spada, una torcia — con la sua posizione, rotazione e scala sull’osso e il nodo del modello che l’osso afferra (--add-prop). Fa parte del modello: ogni copia dell’importazione lo porta con sé, quindi non aggiunge una copia propria e passa oltre il suo elenco. |
| Molla | Un osso e tutto ciò che sta sotto, che oscilla con il movimento — capelli, un mantello, una coda — con rigidità, smorzamento e gravità (--spring). Come un oggetto di scena, fa parte del modello in ogni suo oggetto. |
| Forma | Una delle forme di Pixor (un box, un cilindro, lettere) con la sua posizione, dimensione, rotazione, colore e smussatura sul nodo. Passa avanti il suo elenco e aggiunge un oggetto di sé; senza nulla collegato inizia un elenco, così una Forma dentro un Anello è un anello di quella forma. |
| Immagine, Testo | Un'immagine su un piano, o parole in un font pixel su un cartoncino (Immagini e parole), aggiunte come si aggiunge una forma. |
| Volume | Fumo, fuoco o un liquido (Volumi): uno per ogni oggetto del nodo che raggiunge l’Uscita, posizionato da esso. |
| Lampada | Una luce con una posizione: una per ogni oggetto che arriva all’Uscita, quindi una Riga dopo una lampada è una fila di lampade. Una lampada non collegata a nulla non illumina nulla. |
| Effetto | Particelle (un’esplosione, scintille, pioggia, lucciole), una per ogni oggetto che raggiunge l’Uscita. |
| Anello | Oggetti attorno a un cerchio: quanti, a che distanza, dove si trova il primo e se sono rivolti verso il centro. |
| Riga | Oggetti in fila, a un passo di distanza. |
| Griglia | Oggetti su una griglia, tanti in larghezza e tanti in profondità. |
| Dispersione | Oggetti sparsi in una scatola, a seme, con una distanza minima tra due qualsiasi di essi. |
| Guarda verso | Gira ogni oggetto verso un punto. Ruota di più orienta un modello la cui arma non è sul suo asse in avanti. |
| Varia | Dà a ogni oggetto la sua fase della clip, rotazione e dimensione, dal suo numero e da un seme. |
| Riproduci | La clip che questi oggetti riproducono, qualunque cosa riproduca il resto dello sheet: un albero che ondeggia accanto a un cavaliere che attacca. La riproducono in ogni azione, sui fotogrammi dell’azione: un mulino che gira accanto a una casa ferma è una nuova azione nella fase Azione e un nodo Riproduci sul mulino. Le azioni si creano lì, non qui. |
| Visto da | Gli oggetti che vede una sola camera, e i fotogrammi (sotto). |
| Fondi | Due elenchi di oggetti come uno solo. |
| Sposta, Specchio | Sposta, ruota e ridimensiona ogni oggetto; aggiungi il riflesso di ogni oggetto rispetto a un piano. |
| Suddividi | Divide ogni triangolo di ogni oggetto in quattro, una volta o fino a quattro volte, così uno Spostamento ha dei punti da muovere. |
| Spostamento | Spinge la superficie di ogni oggetto in dentro e in fuori con un rumore a seme, fino a un valore in metri, con protuberanze a una certa distanza. Ogni copia ha le sue protuberanze, così una fila di box è una fila di rocce diverse. |
| Campo di altezze | Solleva dritta la superficie di ogni oggetto secondo un campo di altezze a seme visto dall’alto: dopo un Suddividi, un piano piatto diventa un terreno ondulato. Il terreno si alza soltanto. |
| Smussatura | Taglia gli spigoli dei box di ogni oggetto a 45 gradi. |
| Posa a terra | Fa cadere ogni oggetto dritto sulla superficie più alta sotto di esso: le altre cose della scena (o una di esse) e qualsiasi terreno prima di esso nella catena, con un rialzo sopra, inclinandolo con il pendio quanto chiedi. |
| Sulla superficie | Distribuisce oggetti di ciò che riceve sulla superficie di una cosa, in base all’area e con un seme, solo sulle parti superiori o ovunque. |
| Sui punti | Mette un oggetto di ciò che riceve su ogni vertice di una cosa. |
| Differenza | Gli oggetti del primo ingresso, con gli oggetti del secondo ritagliati da essi dove si trovano: finestre in un muro, una tacca in una cassa. Il secondo ingresso è solo la forma del buco e non viene renderizzato. |
| Unisci | Due elenchi di oggetti disegnati come una sola parte, così dove si toccano non viene tracciata nessuna linea: una torre di scatole che si legge come un unico edificio. |
| Imposta forma | Imposta un’impostazione delle forme di ogni oggetto (dimensione (un multiplo), larghezza, altezza, profondità, segmenti, smussatura o tinta) da un attributo per un numero più un numero. |
| Attributo | Scrive un numero su ogni oggetto, perché lo usi un nodo successivo (sotto). |
| Seleziona | Mantiene gli oggetti il cui attributo supera un test. |
| Uscita | Ciò che sta davanti alla camera: l’unico risultato del grafo. |
I nodi del mondo (Terreno, Rametti, Fogliame, Acqua, Nuvole, Cielo, Vento, Raggi di luce, Ore del giorno e Blocchi) sono nello stesso menu Aggiungi; vedi Mondi. I nodi di valore (un numero, un acceso/spento, un angolo, parole e l’aritmetica tra di essi) alimentano le proprietà.
Un nodo di disposizione viene eseguito una volta per ogni copia che riceve. Un anello di righe è una riga per ogni copia dell’anello. Questo è tutto l’annidamento: non c’è una seconda regola.
La variazione viene dal numero della copia e dal seme del grafo, mai da altro, quindi lo stesso grafo dà la stessa folla ogni volta, su qualsiasi macchina e con entrambi i backend.
Sedici cavalieri
Aggiungi Anello, imposta Quanti a 16 e Raggio a 3, disattiva Rivolto al centro, poi aggiungi Guarda verso con Verso sulla statua. Aggiungi Varia e dai a Fase della clip 1 così sono tutti in punti diversi della loro camminata. Il numero in fondo alla tela dice quante copie produce il grafo, e lo sprite accanto le mostra.
Una statua accanto a loro è un nodo Elemento: un altro modello, dal suo file, nel punto in cui viene messo. Come ogni nodo cosa, passa avanti ciò che riceve e aggiunge una copia di sé, quindi la sua posizione nella catena dice cosa lo ripete: un Elemento dopo l'Anello è una statua tra sedici cavalieri, un Elemento prima sarebbero sedici statue. Nell'app, + › Un elemento › Da un file di modello… della Struttura lo mette alla fine della catena, dopo l'anello.
Da uno script, un nodo alla volta:
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 mettono un nodo alla fine della catena. Uno che crea copie proprie e non riceve nulla (un Oggetto, un Importa) avvia la catena al posto dell'importazione nuda, e dopo qualsiasi altra cosa va accanto alla catena, fuso con essa, così nulla di ciò che era renderizzato va perso. --alone aggiunge un nodo non collegato a nulla, e --in collega un altro nodo a uno dei suoi ingressi.
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
Un Elemento a sé stante, non collegato a nulla (--alone), avvia un elenco proprio, che un Fondi, una Dispersione o un Visto da riceve. Un Oggetto indica solo il modello: un elemento, una forma e un'immagine sono nodi a sé, e indicarne uno con un Oggetto è un errore.
Cosa vede ogni camera
Una camera inquadra tutto ciò che il grafo le mette davanti. Visto da dà a una camera copie che nessun'altra camera vede, così un progetto con una camera principale e una camera ritratto può mostrare l'intero anello in uno sheet e la statua nell'altro: unisci l'Elemento della statua, da solo, tramite un Visto da portrait, al resto con Fondi. Il ritratto inquadra la statua insieme a ciò che vede ogni camera; la camera principale non vede mai la statua.
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
Qui l’Elemento della statua viene aggiunto con --alone, così non sta alla fine della catena dell’anello (pxr graph list stampa i numeri); il Fondi va alla fine della catena, così l’anello entra nel suo primo ingresso. pxr render scrive game.png, l’anello da solo, e game_portrait.png, l’anello attorno alla statua.
Un grafo usato come un solo nodo
Un anello di cavalieri attorno a una statua, una fila di bancarelle, una folla con le sue variazioni: un grafo di scena può essere salvato come un unico gruppo e usato in un altro progetto. Salva kit… sulla barra, senza alcun gruppo scelto, scrive l'intero grafo come kit (Salva il grafo di Scena come kit; il suo nodo Uscita diventa l'uscita del gruppo), e con un gruppo scelto quel gruppo (Salva il gruppo come kit); Usa kit… (Aggiungi un kit come gruppo) nel menu Aggiungi della tela ne inserisce uno come gruppo. È un unico riquadro, chiamato con il suo nome, e la freccia su di esso (o un doppio clic) lo apre sul posto per vedere o cambiare di cosa è fatto; la freccia lo richiude. Un nodo In al suo interno rappresenta un ingresso, così a un anello salvato si possono passare copie da disporre ad anello.
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
Un gruppo è un dato, non codice: può fare solo ciò che fanno i nodi al suo interno, e renderizza esattamente come farebbero loro.
Più sheet da un solo render
Ciò che viene scritto non riguarda questo grafo. Il nodo Uscita alla fine della catena è ciò che sta davanti alla camera, ed è l’unico; un secondo file (un set di icone, un’immagine promozionale, uno sheet delle sole linee) è un’uscita del grafo di Asset, che prende i fotogrammi in cui sono state renderizzate le copie di questo grafo.
Una scena di più modelli, animata
Anche un elemento prende una clip, e una fase per farla avanzare:
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
Un elemento con una clip porta con sé il suo rig e la riproduce; uno senza viene cotto nel punto in cui si trova, il che costa meno. La clip viene dal file del modello stesso o dai suoi file fratelli name@clip, come ovunque in Pixor.
Posizionare, rimodellare e scegliere
I nodi del grafo di Scena non si limitano a disporre. Sposta sposta, ruota e ridimensiona ogni copia; Specchio aggiunge il riflesso di ogni copia rispetto a un piano.
Attributo scrive un numero su ogni copia (il suo numero nell’elenco, dove si trova, come è ruotata, quanto dista dal centro, o un rumore a seme) e Seleziona mantiene le copie il cui attributo supera un test e scarta le altre. Insieme sono il modo per dire solo quelli in fondo, a metà dimensione senza nominare quali sono in fondo (z punta verso la camera, quindi il fondo è l’estremo basso):
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
Suddividi e Spostamento rimodellano le superfici stesse delle copie: un cubo diventa una roccia, una scogliera liscia una scabra. Sono impostazioni che le copie portano con sé e con cui vengono costruite le loro parti, non triangoli modificati a mano, quindi lo stesso grafo dà le stesse rocce ovunque:
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
Posa a terra, Sulla superficie e Sui punti leggono la scena in cui il grafo posiziona le cose. Una dispersione in una scatola diventa una dispersione su una collina quando dopo di essa viene un Posa a terra e il terreno è nel suo elenco:
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 le candele stanno su ogni angolo di una corona con il nodo Forma della candela e Sui punti della corona. La tela conta le copie di Sulla superficie prima che venga costruito qualcosa; il conteggio di Sui punti si conosce quando è pronta la scena.
Differenza taglia con ciò che riceve per secondo, dove si trova: una piccola scatola, in una Riga di tre, attraverso un muro lungo dà un muro con tre finestre. L’interno di un buco è rivestito del colore con cui è disegnata la maggior parte della parte. Una parte legata a un rig (un modello con skinning, una forma su un osso o una forma con chiavi) non viene tagliata, perché un taglio cambia vertici che sono stati dati al rig, e nemmeno una di più di 5,000 triangoli.
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
Una forma sta centrata sul suo at, quindi la prima finestra è 1.2 m a sinistra del centro del muro e la Riga mette le altre due a 1.2 m l'una dall'altra, tutte e tre dentro il muro di 4 m.
Le forme che Pixor costruisce hanno impostazioni proprie, e Imposta forma le pilota dal grafo: una fila di casse, ognuna più alta della precedente e un po’ più avanti sulla ruota dei colori, è il nodo Forma della cassa, una Riga, un Attributo della posizione di ogni copia lungo la riga e due Imposta 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
Le casse stanno tra 0 e 4.4 m, quindi crescono da 0.5 m fino a circa 1.2 m e il loro colore passa dall’arancione al giallo e al verde, fino al verde acqua. La tinta fa ruotare il colore, che quindi si vede su una forma colorata; una forma grigia resta grigia.
Le impostazioni di una forma vengono applicate prima di qualsiasi Suddividi o Spostamento, in qualunque ordine siano i nodi, perché una forma ricostruita dalle sue impostazioni parte dalla propria superficie. Le ricevono solo le forme a sé stanti; una forma appesa a un osso fa parte del modello.
Una parte legata a uno skin o con morph target viene deformata ma non suddivisa, perché un nuovo punto a metà di uno spigolo non ha pesi onesti; e nemmeno una parte che ondeggia al vento.
Una copia si distingue dalle vicine per il suo numero, i suoi attributi e un seme, oppure per niente — mai per un nome, perché darle un nome farebbe del grafo un file di scena.
Schemi
Un progetto punta a questo modello. Uno schema è la stessa cosa con i percorsi estratti e dotati di nomi e tipi — il look, il grafo qui sopra, le clip e le esportazioni — così una ricetta si esegue su una cartella di modelli invece di essere copiata venti volte e modificata ogni volta.
Progetto › Salva come schema… scrive un .pixorblueprint. Aprirne uno (Progetto › Apri progetto…) chiede i suoi ingressi e poi si comporta come un progetto qualsiasi; ciò che ne esce è senza titolo, quindi salvarlo non può sovrascrivere la ricetta.
Dalla riga di 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 cambia un’impostazione di un nodo: nel grafo di scena se ha quel nodo, altrimenti in ogni pipeline di Asset e Stile che lo ha (--set hold.times=4: il nodo Tenuta di ogni pipeline di Asset). --set PIPELINE/NODE.SETTING=VALUE lo cambia solo in quella pipeline. Un nodo si nomina con la sua etichetta inglese in minuscolo, con trattini tra le parole (ring per un Anello, look-at per un Guarda verso: pxr project scene li stampa); funziona anche l’etichetta stessa ("Look at"). Il file della palette di ogni Stile è uno slot a sé: palette per il primo Stile, palette:NAME per un altro. Uno slot mancante o di tipo sbagliato indica lo slot e il tipo che voleva, prima che venga caricato qualsiasi cosa.
Pixor include alcuni schemi in assets/blueprints/: uno sheet di personaggio a quattro lati, un’icona d’inventario e un’immagine promozionale.
Cosa è cambiato dall’ultima build
Ogni esportazione porta una ricetta (come è stato fatto lo sheet), così due build si possono confrontare senza un database delle build:
pxr diff out-yesterday/ out-today/
Dice quali file sono nuovi, quali sono spariti, quali differiscono e di quanti pixel, e quale impostazione, quale ingresso o quale schema l’ha causato:
changed ring.png 36598 of 82944 pixels (44.12%)
scene.nodes[3].settings.count: 16 -> 12
--exact esce con 1 a ogni cambiamento, per una build che dev’essere riproducibile.
I livelli che scrive un’esportazione
I pezzi del paper doll, lo sheet delle ombre e i livelli di parallasse sono file separati. Nella Vista 2D della fase Asset, Tutti, impilati nella selezione Livello impila i livelli di uno sheet dal fondo verso il davanti, come farà un motore: un interruttore per livello, e una riga che dice se ogni livello ha la dimensione della base. Non bisogna esportare nulla prima: i livelli vengono disegnati dai fotogrammi già renderizzati, dallo stesso codice che li scrive, disposti come li dispone l’uscita di sprite sheet scelta: lo sprite finito (base), la sua ombra, le linee, i colori piatti, le normali, la profondità, l’emissione e le uscite extra del grafo di Stile. Lo sprite e la sua ombra sono attivi all’inizio; una normal map sopra lo sprite lo nasconderebbe. Dai file rilegge invece ciò che un’esportazione ha effettivamente scritto: gli stessi file che caricherà un motore, pezzi del paper doll e livelli di parallasse compresi.
Quanto descritto in questa pagina è nella versione completa; la demo gratuita nel browser si limita al look predefinito e allo sheet PNG.
Prova nel browser Ottieni Pixor