lunedì 29 ottobre 2007

Wow, che forme!

Mi sono preso una giornata sabatica per cercare informazioni sulle geometrie, ed ho fatto davvero delle bellissime scoperte.
La prima, prima su tutte, è quella di poter realizzare le superfici di suddivisione con suddivisione infinita! Il che vuol dire massima correttezza nel rendering, e la tecnica non è neanche particolarmente lenta, anzi! :D
La tecnica si può applicare sicuramente alle catmull-clark ed alle loop, penso anche alle doo-sabin ma non sono ancora sicuro.

Molte delle tecniche che vado ad esporre fra poco sono molto complesse, a livello matematico in genere, ma a volte anche a livello implementativo. Quindi non verranno implementate a breve. Però sono tutte previste per delle versioni future di cassata, c'è solo da aspettare :)

Ecco le cose che verranno implementate (e che sono sicuramente tecnicamente possibili):

  • Shader per le geometrie. Questo permette di fare geometrie personalizzate, ad esempio frattali, ma qualunque cosa venga in mente va benissimo.
  • Geometrie infinite. Questo vuol dire semplicemente che si possono ad esempio fare dei piani (cosa utile quando si fa magari qualche scena di prova e si han problemi con l'orizonte :) ).
  • Mesh, NURBS e superfici di suddivisione catmull-clark, loop e doo-sabin. Le prime 2 a scelta con suddivisione "tradizionale" od infinita (quindi senza più problemi di suddivisione insufficente od altro). Per l'ultima solo la prima soluzione. Tutte le superfici di suddivisione supporteranno anche parametri speciali come piegature ed altre cose simili.
  • Displacement, sia tramite texture procedurali che immagini.
  • CSG, Constructive Solid Geometry, ovvero le operazioni booleane, quindi intersezioni, unioni e differenze (da quel che ho capito sono davvero utili a livello di CAD anche nel rendering, a seconda di come si affronta il rendering). È ancora da decidere come combinare questa tecnica con l'UV-Mapping.

Ecco invece quello che mi piacerebbe implementare ma che non sono sicuro sia possibile, per problemi tecnici:

  • Doo-sabin suddivise all'infinito come le altre superfici di suddivisione. Sono quasi convinto che si possa fare, ma non ne sono sicuro ancora al 100%.
  • Displacement con suddivisioni infinite, quindi un displacement perfetto, senza alcun problema di risoluzione, ne rallentamenti all'aumentare di questa, e via dicendo. Purtroppo da questo punto di vista sono abbastanza scettico sulla sua realizzabilità, ma comunque non si sa mai.
  • Applicazione perfetta delle texture su superfici di suddivisione all'infinito. Quest'ultimo punto non deve trarre in inganno perché comunque l'applicazione delle texture sulle superfici di suddivisione, col metodo detto prima, è ottima. Solo che non è proprio perfetta. Sono abbastanza convinto che si possa risolvere, ma non sicuro come per il primo punto di questa lista.

Invece qua c'è una lista delle cose da valutare per l'inserimento (l'unico scopo che avrebbero è ottimizzare il rendering, poiché sono già realizzabili con le strutture viste prima):

  • Punti, curve ed altre cose di questo genere, che normalmente non verrebbero visualizzate perché sono adimensionali o monodimensionali, ma che poi verrebbero "ispessite". Possono essere utili per le particelle, per il pelo e per altre tecniche simili. Alternative possibili sono le nurbs o le superfici di suddivisione, ma sono abbastanza lente, quindi avere un oggetto appositamente progettato per queste cose, che permetta di velocizzare il rendering, è senza dubbio preferibile. Faccio comunque notare che la maggior parte delle cose fatte con le particelle possono essere simulate molto meglio con dei materiali appositi. Non è così nel caso del pelo, ma per esempio per fuoco o fumo probabilmente conviene fare un materiale apposito (ma dipende comunque tutto dai casi). È probabile che verranno introdotte.
  • Geometrie più semplici come sfere, coni, cilindri, cuboidi ed altre cose simili. Sono tutte estremamente facili da rappresentarsi con le nurbs, ma è da decidere se vale davvero la pena di fare una struttura ottimizzata per gestirle. Non ho idea di quanto siano importanti per alcuni modellatori che ne fanno uso, o per un qualche modo di "fare grafica", se saranno importanti verranno implementate.

Lo so che sono una mole enorme di roba, ma non vuol dire che si debbano realizzare tutte ora, anzi. Probabilmente prima che si realizzino tutte passeranno almeno 2-3 anni. Questo post era solo per dire cosa aspettarsi sulle geometrie nei prossimi anni con cassata :)

Nessun commento: