Pixar rilascia l'attesissimo OpenSubdiv 3.0

OpenSubdiv 3.0, con profondi cambiamenti degli algoritmi di base e la semplificazione ed esecuzione delle API e della GPU, tenta di raggiungere un obbiettivo più rapido, efficiente e flessibile del proprio codice di suddivisione, con l'introduzione di molti miglioramenti che costituiscono un punto di partenza piuttosto radicale rispetto alle versioni precedenti.

torus.png

Subdivision Core (Sdc)

Considerando il passato e le rappresentazioni topologiche presenti e future, è stato sviluppato un nuovo “low-level” chiamato Sdc (suddivisione Core). Questo livello incapsula una serie completa di opzioni applicabili, formule necessarie per il supporto nel creare la formazione semi-sharp, formule per le maschere di rifinitura di ogni schema di suddivisione e molto altro. Inoltre fornisce un'implementazione di suddivisione utilizzando le librerie di OpenSubdiv, utili nel fornire dettagli necessari e consistenti. 

Topologia e ricercatezza

OpenSubdiv 3.0 introduce una nuova rappresentazione topologica chiamata VTR (Vectorized Topology Representation). Rispetto alla libreria Hbr utilizzata nelle versioni precedenti, Vtr è molto più efficiente e di gran lunga più flessibile. Uno degli obiettivi principali della nuova relese è la prestazione e il miglioramento della ricercatezza iniziale dell'analisi topologica.

 

adaptive.gif

Supporto per topologia Non-manifold

Con la conversione topologica non più vincolata da Hbr, OpenSubdiv si smarca dalle mesh con topologia manifold (con una sola eccezione di mesh non tris e con Loop di suddivisione); qualsiasi insieme di facce e vertici che può essere rappresentato in formati comuni come Obj o Alembic, può essere suddiviso.

371c434266ee3a1c39f4a6f3a310e0a0.png

 

Facce Variabili nella Topologia

In precedenza, i dati di faccia variabile erano assegnati dal valore del vertice per ogni faccia, e la continuità dei dati era determinata confrontandoli in successione. In alcuni casi succedeva che due valori non erano destinati ad essere condivisi e quindi ad ssere "saldati" insieme. Tale tecnica ora è specificata topologicamente: proprio come nella topologia vertice (la quale è definita da una serie di vertici e riferimenti interi (indici) per gli angoli di ogni faccia), la topologia di faccia variabile è definita da una serie di valori e riferimenti interi (indici) per ogni angolo di ogni faccia. Quindi, se i valori intorno ad un vertice sono distinti, non viene effettuato nessun confronto dei dati. Questo assicura che la topologia corrisponde a ciò che viene spesso misurata in formati comuni come Obj, Alambic e USD. Possono essere definiti multipli "canali" di dati faccia e ciascuno è topologicamente indipendente dall'altro.

 

Limit Surface e Patches

Un obiettivo fondamentale di OpenSubdiv è quello di fornire una rappresentazione accurata e affidabile della superficie limite. Sono stati apportati miglioramenti sia alle proprietà (posizioni e tangenti) in molti punti nella suddivisione gerarchica, cosi come le rappresentazioni di patches usati per la continuità tra di loro della superficie limite

Rimozione Fixed Valence Table

Le proprietà "Limit" dei vertici straordinari sono calcolati da una arbitraria valenza e i nuovi tipi di patch si basano sulle dimensioni “Tables”. Tutte le tabelle che limitavano la valenza di un vertice a qualche dimensione relativamente piccola sono stati ora rimossi (con alcune rare eccezioni).

Creazione di singole Patch

OpenSubdiv 3.0 ora implementa una migliorata valutazione delle creazioni semi-smooth usando singole patch. Con questa ottimizzazione si ha una vera efficienza sia nei tempi di calcolo, sia per il consumo della memoria.

Nuovo Patch di approssimazione irregolare

Mentre il supporto per “Gregory patch” è ancora disponibile, sono state introdotte diverse nuove opzioni per la rappresentazione di Patch irregolari: “Legacy Gregory”, il veloce “Gregory Basis stencils” e “BSPLINE”. Gregory Basis stencils fornisce la stessa approssimazione di Legacy Gregory, ma viene eseguita molto più velocemente e con una rappresentazione GPU semplificata. Patch BSPLINE non sono così vicine all'approssimazione come quelle di Gregory patches, ma permettono una tassellazione di una mesh con una singola configurazione dello shader globale (Gregory Basis patches richiede un'ulteriore configurazione dello shader).

Valutazione veloce e Display

OpenSubdiv 3.0 introduce nuove strutture di dati e algoritmi che migliorano notevolmente le prestazioni comuni di valutazione ripetuta sia sulla CPU che sulla GPU.

Introduzione Stencil Tables

OpenSubdiv 3.0 sostituisce le tabelle di suddivisione serializzate con Stencil Tables fattorizzati. La classe Subdivision Tables delle versioni precedenti conteneva un gran numero di interdipendenze di dati, la quale creavano restrizioni o costringevano lanci aggiuntivi del kernel. La maggior parte di queste dipendenze sono ora fattorizzate nella fase di pre-calcolo. Stencil rimuove tutte le dipendenze dei dati e semplifica tutti i calcoli in un unico kernel. Questa semplificazione, si traduce in una fase di pre-calcolo molto veloce, esecuzione più rapide su GPU e meno driver "overhead". Stencil Tables sono supportate su tutte le stesse piattaforme presenti nelle release precedenti (tranne GCD).

 

far_stencil5.png

Veloci e semplici GPU Kernels

Sul lato della GPU, la sostituzione dei tables di suddivisione con i stencil riduce notevolmente le strozzature di calcolo, ottenendo una interpolazione quattro volte più veloce. Allo stesso tempo, stencil riducono la complessità di interpolazione di un singolo lancio kernel per primitivo, quindi, un miglioramento fondamentale per piattaforme mobili. Come risultato di questi cambiamenti, il calcolo “batching” è ormai banale, abilitando semplificazioni API nel livello OSD.

Unified Adaptive Shaders

Le configurazioni adattive di tassellazione dello shader sono state notevolmente semplificate. Il numero di configurazioni è stato ridotto da una combinazione esplosiva "per-patch" per una costante doppia configurazione globale. Questo massiccio miglioramento rispetto ai risultati di base del codice 2.x si traduce in tempi di caricamento notevolmente più rapidi e una riduzione dei costi per ogni fotogramma per il disegno adattivo. Simile al calcolo kernel, questa semplificazione dello shader ha portato ulteriori semplificazioni nel livello OSD.

Updated Source-Code Style

OpenSubdiv 3.0 sostituisce la denominazione dei prefissi con i namespace C++ per tutti i livelli API, portando il “source style“ in linea con le specifiche contemporanee. I grandi cambiamenti introdotti in questa versione generalmente rompe la compatibilità con gli attuali client-code. Tuttavia, questo dà la possibilità di effettuare alcuni aggiornamenti necessari per le linee guida del codice. 

 

Riassunto delle nuove caratteristiche presenti inOpenSubdiv 3.0

  • Faster subdivision using less memory
  • Support for non-manifold topology
  • Face-Varying data specified topologically
  • Elimination of fixed valence tables
  • Single-crease patch for semi-sharp edges
  • Additional irregular patch approximations
  • Introduction of Stencil Tables
  • Faster, simpler GPU kernels
  • Unified adaptive shaders
  • Updated coding style with namespaces
  • More documentation and tutorials
Bug Fixes
  • Smooth Face-Varying interpolation around creases

Per saperne di più e rimanere aggiornati sui nuovi sviluppi, si consiglia

http://graphics.pixar.com/opensubdiv/docs/intro_30.html

http://graphics.pixar.com/opensubdiv/docs/release_notes.html