La Qt-ficazione di V-Ray

Link Rapidi

In V-Ray arriva QT: ora si mira a soppiantare la libreria Win32 con funzionalità moderne, velocità più elevate e capacità multiple.

Librerie, Librerie

3D Studio Max è un vecchio gigante del settore, prossimo ai 30 anni.

Abbiamo goduto di un forte rapporto con lui per la maggior parte di questo periodo e, soprattutto, abbiamo condiviso ricordi cari di ogni volta che la comparsa di una nuova tecnologia doveva farsi strada nelle mani degli utenti.

Uno di questi miglioramenti è stata l’adozione delle librerie Qt per le UI di Max.

Iniziato con un lavoro nascosto all’interno di Max con la versione 2017, la comparsa delle prime interfacce utente Qt arriva nella versione 2018 ed è ancora in corso.

L’introduzione di Qt mira a soppiantare l’obsoleta libreria Win32 con un insieme di funzionalità moderne, velocità più elevate e capacità multipiattaforma.

Librerie, Librerie

In questo primo post di Chaos Innovation Lab, veniamo guidati attraverso il laborioso percorso che porta alla Qt-ficazione delle UI di V-Ray sotto Autodesk 3ds Max.

I test

Per dimostrare i punti esposti in tutto il post, farò riferimento ai risultati di miei test eseguiti qualche anno fa, che rimangono validi in ciò che mostrano, e ad alcuni che sono stati ritestati su hardware e software molto attuali.

Ho analizzato i tempi necessari per ridisegnare completamente l’UI di tre materiali chiave: V-Ray Material, ALSurface e FastSSS2, poiché sono centrali per molti flussi di lavoro e contengono molti controlli dell’interfaccia.

L’editor dei materiali è stato allargato alla massima altezza per garantire il disegno di tutti i controlli possibili e il rendering delle anteprime è stato disattivato.

I tempi sono stati presi 100 volte ed è poi stata fatta la media.

I risultati saranno menzionati quando pertinenti nel post.

Un passato dorato... che non c'è mai stato

Ciò che una decina di anni fa era ritenuto adeguato, o addirittura veloce, era percepito come tale perché l’intera esperienza, dalla velocità dell’hardware alle nostre aspettative, lo consentiva.

In altre parole, eravamo proporzionalmente meno sensibili al problema rispetto a oggi.

Per mettere alla prova questa teoria, ho cercato di effettuare un benchmark con l’ultima versione di V-Ray 3.x (3.7), su Max 2015, poiché questa versione è completamente priva di Qt.

La velocità misurata è quindi quella dei controlli nativi Win32, più o meno nella loro forma migliore.

  • La classe VRayMtl ha impiegato 1,6159 secondi per essere ridisegnata;
  • VRayALSurfaceMtl ha impiegato 1,2955 secondi
  • VRayFastSSS2 ha impiegato circa lo stesso tempo, 1,2655 secondi.

Trascinare l’editor dei materiali o la finestra delle impostazioni di rendering in Max è dolorosamente lento, con il cursore del mouse che si sposta altrove mentre le finestre cercano disperatamente di raggiungerlo (e ci vuole quasi un secondo intero per farlo, sull’hardware potente attuale).

Questa è una testimonianza della lungimiranza degli sviluppatori di Autodesk, che hanno notato che le prestazioni stavano diventando inadeguate e hanno introdotto Qt in anticipo.

Complimenti.

Dolori Crescenti

Mentre la Qt-fication di Max era in corso, verso la versione 2018 di Max, abbiamo iniziato a ricevere segnalazioni di rallentamenti dell’interfaccia utente, alcuni dei quali erano abbastanza grandi da non poter essere attribuiti semplicemente alla stanchezza della workstation dell’utente.

È in questo periodo che ho iniziato ad analizzare le prestazioni dei vari componenti dell’interfaccia utente Win32, scoprendo che potevano mostrare velocità di ridisegno irregolari.

Allo stesso modo, le finestre diventavano eccezionalmente lunghe da aprire, a volte impiegando manciate di secondi, e diventavano ancora più lente quando venivano spostate sul resto dell’interfaccia utente di Max.

I problemi erano dovuti alla traduzione automatica da parte di Max dei controlli Win32 in versioni Qt, un processo che su macchine multi-core con un clock boost inferiore per ogni core si trasformava in un problema che comprometteva il flusso di lavoro. Mentre su CPU a core inferiore e clock più elevato era un semplice fastidio.

Era una situazione tutt’altro che ideale, ma non era opzionale: la compatibilità doveva essere mantenuta mentre avveniva la transizione a Qt.

Tuttavia, questo si ripercuoteva su tutti i controlli dell’interfaccia utente, causando gravi lag, rallentamenti intermittenti e una generale lentezza: dopo tutto, avevamo molti, moltissimi controlli in uso in tutte le nostre interfacce.

Per quantificare il calo, ecco i risultati del test della stessa versione di V-Ray (3.7) con Max 2018:

  • VRayMtl: 2,5436 s.
  • VRayALSurfaceMtl: 2,0685 s.
  • VRayFastSSS2: 1,9779 s.

Si può notare che il rallentamento è proporzionale e riguarda tutti allo stesso modo, circa il 63%.

Nel frattempo, sono apparse le prime finestre di dialogo native di Qt, ad esempio nel Physical Material di Autodesk, e sono state eccezionalmente veloci laddove Win32 era in ritardo: fino a dieci volte più veloci nel ridisegnare tipi di controllo specifici, come gli spinner o i menu a discesa.

Cambio di Paradigma

Scrivere l’interfaccia utente con l’approccio nativo di Qt non è stato semplice: non c’è quasi corrispondenza tra gli approcci, i metodi e i controlli del vecchio Win32, quindi il codice dell’interfaccia utente deve essere ricostruito da zero.

Ciò significa riscrivere ogni etichetta, riorganizzare ogni spinner, reimpostare i valori predefiniti per ogni elemento, mettere a punto i comportamenti dei vari controlli e così via. Con l’idea, naturalmente, di non compromettere l’esperienza e l’efficienza dell’utente.

Il Giocoliere

È giusto dire che non abbiamo fatto tutto bene la prima volta: alcuni comportamenti inaspettati, e spesso ingiustificati, sono emersi quando gli sviluppatori hanno iniziato a lavorare sulle interfacce utente, e per un po’ non è stato possibile trovare una soluzione.

I vari componenti Qt non avevano le stesse dimensioni dei vecchi componenti Win32, per cui l’allineamento era praticamente ovunque sballato.

Inoltre, l’approccio predefinito per i nuovi controlli era il posizionamento relativo, non assoluto; la politica predefinita per i controlli era il ridimensionamento automatico; i vari comportamenti erano nettamente diversi da quelli che ci si aspettava da loro come diretta continuazione della libreria Win32 (per esempio nei pulsanti dei materiali e delle mappe), e così via.

La litania di contrattempi che abbiamo affrontato ci ha fatto capire che l’integrazione doveva andare di pari passo con quella di Max stesso e la sua maturazione delle librerie Qt integrate.

Non avendo il lusso di avere tempo, abbiamo fatto ricorso a enormi quantità di lavoro manuale e minuzioso per far sì che le interfacce utente avessero un aspetto coerente e si comportassero in modo funzionale.

Fortunatamente, molti layout dell’interfaccia utente in V-Ray sono stati generati automaticamente (ad esempio, l’interfaccia utente della maggior parte degli elementi di rendering, o il materiale VRayALSurface, o la texture VRayDirt) e condividono un codice comune, il che ha reso le cose un po’ più facili.

Tuttavia, quando abbiamo finito di realizzare le prime UI di prova, era evidente che la quantità di lavoro necessaria per completare la transizione a Qt in modo tempestivo era enorme.

Stato di Avanzamento

A partire da V-Ray 6.0 Update 1 (o 6.1), la transizione alle librerie Qt è stata sostanzialmente completata.

I materiali, le mappe, i vari nodi, i modificatori e tutte le finestre ausiliarie che possono essere convertite in Qt sono state convertite.

Restano ancora da tradurre alcune parti minori che non si prestano (ad esempio,il vecchio light lister), e ci riserviamo ancora un po’ di tempo per raccogliere i feedback e le opinioni degli utenti sui nuovi layout e comportamenti dei controlli, in modo da completare al meglio la traduzione e massimizzare la qualità della vita degli utenti.

Rimangono alcune limitazioni comportamentali che dovranno essere curate, in parte da noi stessi e in parte come prodotto secondario della maturazione dell’integrazione delle librerie Qt in Max stesso.

La transizione non è ancora del tutto completa, per cui ci si aspetta ancora un po’ di tempo per l’adattamento.

Ne è valsa la pena?

Tuttavia, ci sentiamo giustificati per l’impegno profuso in questa impresa e piuttosto rinfrancati dai numeri che abbiamo ottenuto:

Il VRayMtl in Max 2023 e V-Ray 6.1 ora disegna in 0,4664 secondi (anche se ha guadagnato qualche controllo in più da ridisegnare dalla versione 3.7!), il VRayALSurfaceMtl impiega 0,3621 secondi e il VRayFastSSS2 solo 0,2857 secondi.

In tutti i casi, il ridisegno dei controlli avviene così velocemente che l’occhio non lo vede.

Allo stesso modo, il trascinamento della finestra è istantaneo e la finestra è incollata al cursore del mouse.

Ciò significa che le attuali interfacce utente Qt sono da tre a quattro volte più veloci di quelle native Win32 e fino a sette volte più veloci di quelle tradotte Win32.

L’ultima parola, tuttavia, spetta a voi, i nostri utenti:

prendetevi il tempo di provare l’ultimo aggiornamento di V-Ray 6 e fateci sapere come avete trovato il nuovo look, la velocità e l’usabilità delle interfacce utente Qt.

Altro su V-Ray 6.1

V-Ray 6.1 include anche molti altri miglioramenti. Per maggiori dettagli leggi qui. Puoi controllare il registro completo delle modifiche è disponibile in questo documento.

Qui puoi trovare il post originale a cura di Emanuele Lecchi.

Tradotto da 3DWS

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Su questo articolo

In V-Ray arriva QT: ora si mira a soppiantare la libreria Win32 con funzionalità moderne, velocità più elevate e capacità multiple.

Altri articoli interessanti