Il plugin collada ci consente di importare in vvvv documenti COLLADA (versione 1.4). Risponde alle caratteristiche della versione 1.4.1 delle specificazioni collada.
Le caratteristiche attualmente supportate sono:
Caratteristiche mancanti:
Il plugin è incluso nell'AddOns Pack scaricabile daqui; nella pagina troverete anche le istruzioni su come installare l'AddOns Pack.
Usate il nodo ColladaFile (EX9.Geometry) per caricare un file .dae ed usate un nodo Mesh (EX9.Geometry Collada) per lavorare sul modello importato. Aprite la helppatch del nodo Mesh (EX9.Geometry Collada) per studiare un esempio.
Se il plugin è installato correttamente i nodi che seguono dovrebbero essere presenti nel NodeBrowser.
Carica un flie Collada (.dae) in memoria. Il suo output, il cosiddetto modello Collada, rappresenta il file caricato ed è la base per tutti gli altri nodi Collada.
Questo nodo estrae le informazioni sulle mesh memorizzate nel file .dae e le converte in una Mesh "X", propria di DirectX. Per distinguere tra le differenti geometrie viene generato un sottogruppo, subset, per ciscuna. Date che è possibile che in un file .dae una mesh sia composta di più parti, ad esempio per assegnare materiali diversi, c'è un sottogruppo anche per ciascuna di queste parti.
Leggete più in basso Meshes in Collada e vvvv per maggiori dettagli su come lavorare con le geometrie Collada in vvvv.
Se presente nel file .dae, questo nodo reswtituisce lo scheletro selezionato dal pin Index. Visitate questa pagina per ulteriori dettagli: skeleton-animation-nodes-tutorial
Se presente nel file .dae, questo nodo restituisce una matrice per la vista ed una per la proiezione per la telecamera selezionata dal pin Index. Queste matrici possono essere connesse direttamente al Renderer (EX9).
In un file Collada possono essere definite più meshes, e ciascuna mesh può essere composta di più sottogruppi, subsets, in vvvv ci può essere una sola mesh con più sottogruppi. In vvvv, per poter visualizzare tutte le meshes definite in un file .dae, tutte le meshes vengono concatenate e viene generato un sottogruppo per ciascuna.
Formalmente, la situazione potrebbe essere descritta così:
subsets_in_vvvv(n) := SUM(i := 1 .. n)(subsets(i))
dove n è il numero di meshes nel file .dae
e subsets(i) è il numero di sottogruppi della mesh i
Tenete questo in considerazione se lavorate con files Collada complessi ed usate il pin Index di Mesh (EX9.Geometry Collada) per selezionare singole meshes Collada, e pure un nodo GetSlice (Node) per puntare a singoli sottogruppi della mesh selezionata.
Lo Skinning è una tecnica che lega una mesh statica, skin, ad uno scheletro, il quale può essere facilmente animato. Tecnicamente ogni vertice della skin è associato con uno o più ossi, bones, dello scheletro, e ciascun bone influenza la posizione del vertice in base al peso, ‘’weight factor''.
Significa che ogni vertice della skin deve essere moltiplicato per le matrici di trasformazione dei bones che lo influenzano per ogni frame dell'animazione. Dato che normalmente una mesh consiste di qualche migliaio idi vertici, questa operazione potrebbe essere molto lenta, se fosse fatta tramite la CPU (software skinning).
Ecco perché viene effettuata tramite la GPU e perché non è altrettanto facile che impostare una scena con meshes statiche; d’altronde non è nemmeno impossibile.
Tutto ciò che si deve fare è usare un vertexshader, che esegue le suddette moltiplicazioni, e le alimenta con le matrici dello skinning che ottenete dal pin di output Skinning Transforms di Mesh (EX9.Geometry Collada). Per cominciare date un'occhiata al nodo effetto Skinning.fx.
Tenete presente che ciascun vertice supporta fino a quattro bones, e che lo scheletro non deve avere più di 60 bones.
3D Studio MAX (2010) supporta l'esportazione di file Collada, ma non è perfetto. Per esempio se si usa Physique modifier per effettuare lo skinning di un personaggio, l'esportazione non funzionerà, bisogna invece usare Skin modifier.
In più si deve aggiungere che usa poligoni come primitivi per le meshes esportate, casa che non è supportata da questo plugin (le specificazione sui file Collada dicono che un poligono dovrebbe essere usato solo in casi speciali). Vedere in basso i Messaggi d'Errore per una spiegazione su come caricare files .dae che memorizzano le meshes come poligoni.
Un modo migliore è quello di usare il plugin OpenCOLLADA. Il suo meccanismo d'esportazione supporta i triangoli, può essere usato il Physique modifier ed è anche più veloce del tool nativo.
Il plugin menzionato prima per 3D Studio Max sviluppato da FeelingSoftware è disponibile anche per Maya. (Chi lo avesse testato è pregato di riportare qui un feedback).
Scene con meshes statiche funzionano senza problemi, ma non si può dire altrettanto del rigging dei personaggi, che usano meshes skinned. (Chi avesse notizie sull'animazione è pregato di postarle qui).
Se un file Collada non si carica, aprire un renderer TTY e controllare se i messaggi d'errore (se presenti) sono elencati qui sotto.
Se il messaggio d’errore non è presente in questa lista o non c’è alcun messaggio d’errore, premesso che abbiate consultato la heppatch del nodo Collada in questione e che abbiate seguito le istruzioni che trovate lì, aprite un nuovo thread nel forum.
Il codice sorgente del plugin è diviso in due progetti, ColladaSlimDX and ColladaLoader.
Il codice sorgente può essere trovato:
La struttura della directory dovrebbe apparire così:
misc/ColladaSlimDX
plugins/_PluginInterfaces
plugins/_Utils
plugins/_SharedSources
plugins/Mesh/ColladaLoader
ColladaSlimDX si basa su COLLADA for XNA, ma è stato riscritto per SlimDX, e modificato ed esteso. il suo obiettivo è quello di analizzare un file Collada, costruire un DOM tree (ColladaDocument) e fornire alcuni metodi per lavorare con tutti i differenti oggetti Collada (ColladaModel). In breve, il lavoro sporco.
Per capire come funziona, controllare il codice sorgente di ColladaLoader.
Questa classe contiene il DOM tree del file Collada. Quasi per ciascuna tag definita nelle specificazioni per Collada esiste una classe relativa con lo stesso nome, e definiti tutti i componenti della gerarchia.
Questa classe fornisce qualche metodo d'aiuto per accedere più facilmente al DOM tree. Ad un primo sguardo possono sembrare poco chiari, ma scavando e facendo esperienza di tutti quei piccoli dettagli che fanno sì che la vita di un programmatore sia così miserabile, vedrete che dimostreranno di essere utili. Controllate il codice sorgente per alcuni esempi.
Nuove idee sono benvenute!
Questa classe è probabilmente quella più rognosa. In un documento Collada le cose vengono organizzate in librerie. Per esenpio la library_geometries contiene tutte gli oggetti geometrici, che possono essere meshes o splines. Oppure la library_materials che contiene tutti i materiali che possono essere assegnati ad una geometria. Quindi la prima cosa da fare è leggere tutti questi oggetti in queste librerie, e memorizzarli in dizionari (key, value pairs) per usarli successivamente.
Ora che tutti gli oggetti sono noti, o meglio ancora, ora che tutti gli oggetti di cui vogliamo sapere (luci e telecamere vengono ignorati in questo punto) sono noti, possiamo processare l'importantissimo scene object. Infine, questo ci dice quali geometrie prendano parte alla scena, quali materiali gli debbano essere assegnati, etc.
Lo scene object forniscce un grafico della scena, che è un tree e ciascun nodo del tree contiene (senza doverlo necessariamente fare) informazioni sulla trasformazione (rotazione, spostamento, etc.) e le foglie del tree cui dicono quale geometria, luce, telecamere, controller (per lo skinning o il morphing) o altri subtree debbano essere messi qui.
E' anche a questo punto che il materiale viene assegnato alla mesh.
Per ulteriori spiegazioni vedere:
ColladaLoader è il plugin per vvvv. Attualmente fornisce due nodi, ColladaFile (EX9.Geometry) e Mesh (EX9.Geometry Collada).
Il nodo ColladaFile è molto semplice. Prende una stringa come input, genera un ColladaDocument ed lo usa per generare un oggetto ColladaModel, disponibile per essere divorato dai nodi mesh Collada.
Il nodo Mesh è un po' più complesso. Fondamentalmente prende un oggetto ColladaModel ed usa i metodi d'aiuto per generare una mesh compatibile con Direct3D9, che potrà essere quindi usata in vvvv.
C'è un piccolo problema: in un file Collada è possibile definire più meshes, mentre vvvv ne può gestire solo una alla volta. Per risolvere questo problema tutte le meshes devono essere riunite in una sola. E DirectX è così gentile da fornirci questo metodo.
Per poter ancora distinguere tra tutte le meshes in vvvv, ognuna di queste è assegnata ad un diverso subset.
In vvvv un subset di una mesh è trattata esattamente come la slice di uno spread (tutta quella roba modulo).
In questo modo è possibile assegnare materiali (colore e informazioni sulle textures) e trasformazioni ad ogni mesh.
anonymous user login
~3h ago
~6d ago
~6d ago
~7d ago
~20d ago
~1mth ago
~1mth ago
~1mth ago
~1mth ago
~1mth ago