Pe 31 ianuarie, după un an și jumătate de dezvoltare continuă, a fost lansată versiunea 1.0 a bibliotecii ușoare și portabile de grafică vectorială multidisciplinară. ThorVG, destinată vizualizării unor scene și animații vectoriale. Este suportată încărcarea fișierelor în formate Lottie și SVG Tiny 1.2 (lista funcționalităților implementate SVG Tiny în Wiki-ul proiectului.).
Biblioteca oferă APIs prietenoase pentru importul, crearea și afișarea graficii vectoriale, precum și pentru exportul acesteia în diverse formate grafice, ceea ce o face versatilă pentru utilizarea în diferite platforme software și aplicații pentru vizualizarea conținutului grafic. De asemenea, sunt furnizate utilitare de consolă lottie2gif și svg2png.
ThorVG este utilizată pentru redarea graficii vectoriale în proiecte precum Tizen OS, Godot Engine, LVGL și player-e dotLottie..
Proiectul este scris în C++ (standard C++14) și este distribuit sub licența MIT.
Aceasta nu este doar o actualizare — este o bază reconstruită pentru grafică vectorială bidimensională de înaltă performanță, scalabilă și portabilă pe toate platformele și dispozitivele. Pe parcursul dezvoltării, ThorVG a evoluat într-un motor grafic matur, gata pentru producție, care a demonstrat calitate și performanță dovedite în aplicații reale.
ThorVG a câștigat rapid popularitate și a generat un interes în creștere din partea comunității, reflectând evoluția sa de la un proiect incipient la un motor grafic vectorial recunoscut și utilizat practic, gata pentru utilizare reală multiplatformă.
Lista modificărilor:
- Capabilități avansate de redare a textului, efecte vizuale bogate și suport pentru suprapuneri precise pentru o exprimare grafică îmbunătățită.
- Suport pentru alinierea orizontală și verticală, permițând controlul precis asupra amplasării textului în diverse contexte ale interfeței utilizatorului.
- Împărțirea automată a liniilor cu opțiunea de a alege modul: pe caractere, pe cuvinte, împărțire inteligentă și tăiere cu puncte de suspensie pentru a gestiona supraaglomerarea.
- Suport pentru întreruperea manuală a liniilor, permițând dezvoltatorilor să controleze explicit pauzele de linie prin intermediul caracterelor de linie nouă, cum ar fi \n. Acest lucru permite formatarea precisă a blocurilor de text multiline, în special în layout-uri dinamice sau animații de text.
- Suport pentru distanța personalizată între caractere, ceea ce permite ajustări precise pentru îmbunătățirea citibilității sau atingerea unor stiluri tipografice specifice.
- Suport pentru conturarea textului, permițând crearea efectelor stilistice și îmbunătățirea contrastului pe diverse fundaluri (captură de ecran 1).
- A fost introdus un sistem de moduri de suprapunere mai complex și consistent, îmbunătățind semnificativ comportamentul modurilor de suprapunere și aliniind formulele și logica compunerii la standardele industriei, cum ar fi Lottie, SVG și specificația W3C „Compunere și Amestecare”. Aceste îmbunătățiri oferă o coerență vizuală mai mare și compatibilitate multiplatformă, în special în fluxurile de lucru web și de animație.
- Modurile de suprapunere suportate sunt: „Nuanta”, „Saturatie”, „Culoare” și „Luminozitate”, utilizând compunerea spațiului de culoare HSL. Aceste moduri îmbunătățesc compatibilitatea cu efectele straturilor Lottie și cu suportul viitor pentru amestecarea SVG (captură de ecran 2).
- Îmbunătățiri semnificative și extensii în efectele vizuale la nivel de scenă, făcând grafica vectorială mai expresivă și vizual mai bogată:
- Efect de umbră cu filtrul de blur Gaussian (demonstrație video).
- Metode de înlocuire a culorilor care schimbă aspectul graficii prin redefinirea modului de aplicare, amestecare sau mapare a culorilor pe baza nuanței (demonstrație video).
- Au fost adăugate noi funcții auxiliare pentru extinderea capacităților interactive. Acestea includ suport pentru interogările de informații spatiale (demonstrație) și detectarea coliziunilor cu obiectele afișate (demonstrație video).
- Funcționalități avansate de animație Lottie pentru redare multiplatformă, inclusiv preseturi modulare Web Player, optimizate pentru dimensiune, performanță și mod de redare (CPU/GPU)
- Îmbunătățiri semnificative în suportul pentru animațiile Lottie, îmbunătățind compatibilitatea, flexibilitatea și interactivitatea pe toate platformele. Nu doar gama de funcții și expresii Lottie suportate a fost extinsă, ci și instrumentele oferite dezvoltatorilor pentru a controla dinamic comportamentul animației în timpul rulării, făcând ThorVG una dintre cele mai puternice biblioteci de redare Lottie disponibile pe piață. Lista funcționalităților implementate în Wiki-ul proiectului.
- Până în prezent, extensia de fișier .lot este noua standard oficial IANA pentru fișiere Lottie. ThorVG suportă acum oficial .lot ca format standard pentru fișiere Lottie, în plus față de extensia tradițională .json.
- Twinning
- A fost adăugat suportul pentru interpolarea între cadrele cheie non-liniare adiacente, asigurând tranziții mai fluide și un control mai precis al timpului. Această îmbunătățire este deosebit de eficientă atunci când este utilizată cu redarea animației bazată pe stări (cunoscută și sub numele de redare bazată pe marcatori) în Lottie. În multe cazuri, animațiile sunt concepute să treacă între stări în moduri complexe și non-liniare. Lottie tradițională, cu structura temporară strict secvențială, are dificultăți în gestionarea acestor scenarii, ceea ce duce adesea la resetări bruște sau salturi stânjenitoare când se trece între cadre cheie nesecvențiale: video-demo 1, video-demo 2.
- Cu ajutorul twinning-ului, dezvoltatorii pot acum să efectueze interpolarea direct între două cadre cheie separate, chiar dacă acestea nu sunt adiacente linear pe axa temporală. Acest lucru permite obținerea unor efecte vizuale mai naturale și fluide în tranzițiile între stări, sporind semnificativ flexibilitatea și realismul animațiilor interactive: video-demo 1, video-demo 2.
- Acum (ca funcție experimentală) se suportă rescrierea valorilor variabilelor de expresie în timpul execuției, permițând execuția dinamică a logica scriptului pe baza inputului utilizatorului. Acest lucru îl face un instrument deosebit de puternic pentru crearea de animații interactive utilizând resurse Lottie, permițând crearea de variații individuale, care depășesc designul original.demonstrație video).
- A fost adăugat un mecanism personalizabil Asset Resolver, care oferă o flexibilitate mai mare în încărcarea resurselor externe (de exemplu, imagini) la care se face referire în animațiile Lottie.
- Suport extins pentru funcția Lottie LayerEffect, care permite îmbunătățiri vizuale bogate direct pe straturile de animație cu efectele menționate mai sus.
- Deoarece unele efecte pot fi consumatoare de resurse, a fost propusă o opțiune de ajustare a calității și performanței pentru redarea efectelor, ideală pentru optimizarea pe platforme cu resurse CPU limitate. Acest lucru le permite dezvoltatorilor să controleze precizia redării și să optimizeze performanța în funcție de platforma țintă.
- Suportul pentru expresii a fost extins prin adăugarea următoarelor funcții și proprietăți cheie:
- wiggle, temporalWiggle: aplicarea unei mișcări aleatorii în funcție de timp.
- pointOnPath: calcularea poziției de-a lungul unui traseu.
- propertyIndex, groupIndex: referință la indicele proprietății sau grupului.
- value, property, effect: acces la valorile proprietăților și efectelor externe.
- O conformitate mai mare cu specificațiile:
- TextFollowPath – o nouă specificație care permite textului să urmeze căi vectoriale arbitrare (demonstrație video).
- Parametrii de aliniere a textului – o reprezentare mai precisă a straturilor de text pe baza setărilor lor de aliniere orizontală și verticală (demonstrație video).
- Extinderea măștii – o nouă funcție care permite un control mai precis asupra influenței formei măștii asupra compoziției vizuale (demonstrație video).
- SVG
- ThorVG permite acum accesul la elemente SVG individuale și modificarea acestora cu atribute unice id, definite în fișierul SVG sursă. Această funcție le permite dezvoltatorilor să selecteze și să manipuleze direct forme vectoriale specifice din scena SVG importată, ideală pentru scenarii de utilizare interactive sau dinamice (de exemplu, tematică, evidențiere).
- Asistență efectul de estompare Gaussiană.
- Redare inteligentă
- Motorul software ThorVG suportă acum randarea parțială inteligentă, care asigură fluxuri de lucru de randare mai eficiente prin actualizarea doar a părților scenei vectoriale care s-au modificat. Datorită urmăririi interne a zonelor modificate, minimizează redimensionările inutile și optimizează performanța generală. Această funcție oferă avantaje semnificative în scenarii precum randarea interfețelor utilizator, uneltele de proiectare sau aplicațiile în care o mare parte a scenei rămâne statică, iar între cadre sunt actualizate doar elementele mici. În aceste cazuri, abandonarea randării complete a scenei poate reduce semnificativ încărcătura computațională și îmbunătăți eficiența energetică, ceea ce este deosebit de valoros pentru sistemele mobile și încorporate.
- Pentru a atinge acest obiectiv, ThorVG 1.0 aplică o combinație de metode algoritmice, special concepute pentru randarea parțială. Iată principalele strategii care stau la baza acestui sistem:
- Algoritmul de trecere liniară: formele sunt sortate după coordonatele x, iar o strategie de trecere liniară este aplicată pentru a reduce verificările inutile ale zonelor 'murdare'. Aceasta reduce complexitatea de la O(N × M) la O(N + M + K + N log N), unde N este numărul de forme, M este numărul de zone 'murdare', K fiind numărul de suprapuneri reale.
- Divizarea și fuzionarea condiționată: divizarea fină a subzonelor este echilibrată de o fuziune inteligentă pentru a evita fragmentarea. Aici, se acordă prioritate fuzionării orizontale pentru utilizarea mai eficientă a cache-ului de memorie.
- Divizarea spațială (prin default, o grilă de 4×4): suprafața de randare este împărțită în 16 zone, permițând verificarea doar a zonelor 'murdare' relevante ale formelor, reducând semnificativ cheltuielile în timpul actualizărilor complexe ale interfeței utilizator.
- Colaborând, aceste tehnici oferă o randare mai fluidă și mai rapidă, în special în sistemele încorporate sau în sistemele în timp real, unde apar frecvent actualizări parțiale. Informații mai detaliate vor fi publicate într-o postare separată. blogul.
- Vă rugăm să rețineți că, în cazul conținutului cu dinamicitate ridicată, cum ar fi jocurile dinamice sau animațiile pe ecran complet, unde aproape toate obiectele se schimbă în fiecare cadru, randarea parțială oferă puține sau deloc avantaje în performanță și poate chiar duce la cheltuieli suplimentare minore. În aceste situații, de obicei, este mai bine să alegeți randarea completă a scenei. Din acest motiv, ThorVG suportă atât configurația de randare parțială, cât și cea completă, oferindu-vă posibilitatea de a alege abordarea optimă pentru cazul dvs. de utilizare. Puteți analiza performanța produsului dvs. și lua o decizie fundamentată folosind opțiunea Meson -Dpartial=[true/false] și opțiunea EngineOption::Smart din clasa SwCanvas:
auto canvas = SwCanvas::gen(EngineOption::Smart);
- O nouă eră a integrării tehnologiilor web cu WebGL, WebGPU și WebCanvas ușor pentru randare fără întreruperi în browser
- Backend-urile WebGL și WebGPU sunt acum oficial gata pentru utilizare în producție. Aceste renderer-e bazate pe GPU oferă acum compatibilitate completă funcțională cu backend-ul tradițional pe CPU, susținând toate capacitățile ThorVG Canvas cu aceeași calitate și stabilitate a imaginii. Comparativ cu versiunea 0.15, performanța randării GPU a crescut cu peste 150%, asigurând o îmbunătățire semnificativă a randării graficii vectoriale web în timp real.
- Creștere semnificativă a performanței în medii cu limitări de putere CPU/GPU și medii încorporate
- ThorVG 1.0 oferă o performanță îmbunătățită comparativ cu versiunea 0.15, cu un salt semnificativ atât pe CPU, cât și pe GPU.
- Optimizări cheie:
- Eficiență îmbunătățită a conveierului de randare.
- Reducerea cheltuielilor pentru alocarea bufferului de cadre.
- Analiza optimizată a compozițiilor Lottie.
- Randare pe loturi îmbunătățită și caching pe GPU.
- ThorVG este optimizat pentru rasterizare pe bază de CPU, punând accent pe vizualizarea vectorială în medii unde resursele GPU sunt limitate, indisponibile sau intenționat neutilizate. În teste tipice, ThorVG demonstrează în medie o performanță de 1,8 ori mai mare în comparație cu motorul grafic vectorial utilizat pe scară largă Skia, executând sarcini tipice de vizualizare vectorială. Avantajul este cu atât mai evident în scenarii cu utilizare intensivă a geometriei, cum ar fi vizualizarea dreptunghiurilor, linelor, rotațiilor și cercurilor (captura 3).
- ThorVG Janitor
- O demonstrație reală a performanței de redare ThorVG poate fi observată în proiectul ThorVG Janitor – un joc interactiv, dezvoltat pentru a demonstra performanța procesorului în condiții grafice intense. Scena include sute de inamici creați cu grafică bazată pe particule, fundaluri multilayer de cer înstelat cu imagini rasterizate la dimensiune completă, efecte vizuale în timp real, precum DropShadow și Blur, precum și până la 25000 de obiecte redimensionate simultan. Chiar și cu o sarcină de vârf la rezoluție 2K (2048×1152), proiectul demonstrează o performanță stabilă de peste 120 FPS, subliniind eficiența și adecvarea ThorVG pentru medii complexe cu multe efecte (demonstrație video, captură de ecran).
- Alte modificări semnificative
- Exemplu de integrare a ThorVG în Godot. În această video-demonstrație ThorVG este integrat cu Godot într-un mediu web pentru a reda sute de obiecte de animație Lottie cu o viteză de peste 120 de cadre pe secundă. Această demonstrație arată potențialul ThorVG în mediu web pentru animație fluidă și de înaltă calitate în timpul execuției.
- Adăugat exemplu de învățare utilizarea ThorVG WebCanvas.
- Adăugată interactivitate ThorVG Playground.
- A fost adăugat un wrapper ThorVG pentru limbajul Swift: https://github.com/thorvg/thorvg.swift.
- Exemplele de utilizare a ThorVG au fost mutate într-un repository separat https://github.com/thorvg/thorvg.example.
- A fost publicat un extension thorvg.vscode pentru VSCode pentru crearea, editarea și previzualizarea resurselor ThorVG direct în mediul Visual Studio Code.
- În versiunea 1.0 a avut loc o restructurare semnificativă a API-ului, menită să îmbunătățească performanța, utilizabilitatea, consistența și compatibilitatea cu C.
- S-a eliminat suportul pentru formatul TVG Picture (TVG). Această decizie a fost luată pentru a pregăti noul format ThorVG Picture, dezvoltat având în vedere animația ca concept principal.
- Corecturi multiple de erori și îmbunătățiri ale stabilității pentru utilizarea în producție.
Sursa: linux.org.ru
