31. januar, etter halvannet år med kontinuerlig utvikling, ble 1.0-versjonen av det lette og bærbare vektorgrafikkbiblioteket for kryssplattformer utgitt. ThorVG, designet for å visualisere vektorscener og animasjoner. Filer i følgende formater støttes Lottie и SVG Tiny 1.2 (En liste over implementerte SVG Tiny-funksjoner er tilgjengelig på prosjektets wiki.).
Biblioteket sørger for praktiske APIer for import, oppretting og visning av vektorgrafikk, samt eksport til ulike grafikkformater, noe som gjør den universelt anvendelig for ulike programvareplattformer og applikasjoner for visualisering av grafisk innhold. Kommandolinjeverktøyene lottie2gif og svg2png er også inkludert.
ThorVG brukes til å gjengi vektorgrafikk i prosjekter som Tizen OS, Godot-motor, LVGL og spillere prikk Lottie.
Prosjektet er skrevet i C++ (C++14-standarden) og distribueres under MIT-lisensen.
Dette er ikke bare en oppdatering – det er et gjenoppbygd fundament for høytytende, skalerbar og bærbar 2D-vektorgrafikk på tvers av alle plattformer og enheter. I løpet av utviklingen har ThorVG utviklet seg til en moden, produksjonsklar grafikkmotor som demonstrerer dokumentert kvalitet og ytelse i virkelige applikasjoner.
ThorVG har raskt blitt populært og tiltrukket seg økende interesse fra fellesskapet, noe som gjenspeiler utviklingen fra et tidligfaseprosjekt til en allment anerkjent og mye brukt vektorgrafikkmotor klar for reell bruk på tvers av plattformer.
Liste over endringer:
- Avanserte tekstgjengivelsesfunksjoner, rike visuelle effekter og presis overleggsstøtte for forbedret grafisk uttrykk
- Støtte for horisontal og vertikal justering gir presis kontroll over tekstplassering i ulike brukergrensesnittkontekster.
- Automatisk linjedeling med mulighet for å velge modus: etter tegn, etter ord, smart deling og ellipseavkortning for håndtering av overløp.
- Støtte for manuelle linjeskift lar utviklere eksplisitt kontrollere linjeskift ved hjelp av linjeskifttegn som \n. Dette gir presis formatering av tekstblokker med flere linjer, spesielt i dynamiske oppsett eller tekstanimasjoner.
- Støtte for justerbar tegnavstand, noe som muliggjør finjustering for å forbedre lesbarheten eller oppnå spesifikke typografiske stiler.
- Støtte for tekstkonturer lar deg lage stilistiske effekter og forbedre kontrasten på forskjellige bakgrunner (skjermbilde 1).
- Et mer omfattende og konsistent blandemodussystem er introdusert, noe som forbedrer blandingsmodusens virkemåte betydelig og justerer formler og komposisjonslogikk med bransjestandarder som Lottie, SVG og W3C Compositing and Blending-spesifikasjonen. Disse forbedringene gir større visuell konsistens og kompatibilitet på tvers av plattformer, spesielt i nett- og animasjonsarbeidsflyter.
- Følgende blandingsmoduser er implementert og støttet: Fargetone, Metning, Farge og Lysstyrke, ved bruk av HSL-fargeromskomposisjon. Disse modusene forbedrer kompatibiliteten med Lottie-lageffekter og fremtidig SVG-blandingsstøtte (skjermbilde 2).
- Betydelige forbedringer og utvidelser av visuelle effekter på scenenivå, noe som gjør vektorgrafikk mer uttrykksfull og visuelt rik:
- Skyggeeffekt med Gaussisk uskarphet-filter (videodemonstrasjon).
- Fargeerstatningsteknikker som endrer utseendet til grafikk ved å omdefinere måten farger brukes, blandes eller matches basert på fargetone (videodemonstrasjon).
- Nye hjelpefunksjoner er lagt til for å forbedre interaktive funksjoner. Disse inkluderer støtte for spørringer om romlig informasjon (demonstrasjon) og treffdeteksjon på viste objekter (videodemonstrasjon).
- Forbedrede Lottie-animasjonsmuligheter for avspilling på tvers av plattformer, inkludert modulære forhåndsinnstillinger for Web Player optimalisert for størrelse, ytelse og gjengivelsesmodus (CPU/GPU)
- Betydelige forbedringer av støtten for Lottie-animasjon forbedrer kompatibilitet, fleksibilitet og interaktivitet på tvers av alle plattformer. Ikke bare har utvalget av støttede Lottie-funksjoner og -uttrykk blitt utvidet, men utviklerverktøy har blitt tilgjengelige for å dynamisk kontrollere animasjonsatferd under kjøretid, noe som gjør ThorVG til et av de kraftigste Lottie-avspillingsbibliotekene som er tilgjengelige. En liste over implementerte funksjoner er tilgjengelig på prosjektets wiki..
- Fra og med i dag er filtypen .lot den nye offisielle IANA-standarden for Lottie-filer. ThorVG støtter nå offisielt .lot som standard Lottie-filformat, i tillegg til den tradisjonelle .json-filtypen.
- Tvilling
- Støtte for interpolering mellom ikke-lineært tilstøtende nøkkelbilder er lagt til, noe som muliggjør jevnere overganger og mer presis timingkontroll. Denne forbedringen er spesielt effektiv når den brukes med tilstandsbasert animasjonsavspilling (også kjent som markørbasert avspilling) i Lottie. I mange tilfeller er animasjoner designet for å gå over mellom tilstander på komplekse, ikke-lineære måter. Tradisjonell Lottie, med sin strengt sekvensielle timingstruktur, sliter med å håndtere slike scenarier, noe som ofte resulterer i brå fall eller vanskelige hopp ved overgang mellom ikke-sekvensielle nøkkelbilder: videodemonstrasjon 1, videodemonstrasjon 2.
- Med tweening kan utviklere nå interpolere direkte mellom to individuelle nøkkelbilder, selv om de ikke er lineært tilstøtende på tidslinjen. Dette gir mer naturlige og jevne visuelle effekter under tilstandsoverganger, noe som øker fleksibiliteten og realismen til interaktive animasjoner betydelig: videodemonstrasjon 1, videodemonstrasjon 2.
- Nå (som en eksperimentell funksjon) støttes omskriving av uttrykksvariabler under kjøring, slik at skriptlogikk kan utføres dynamisk basert på brukerinndata. Dette gjør det til et spesielt kraftig verktøy for å lage interaktive animasjoner ved hjelp av Lottie-ressurser, noe som gir mulighet for tilpassede variasjoner som går utover det opprinnelige designet.videodemonstrasjon).
- La til en tilpassbar Asset Resolver-motor, som gir større fleksibilitet ved lasting av eksterne ressurser (som bilder) som refereres til av Lottie-animasjoner.
- Utvidet støtte for Lottie LayerEffect, slik at du kan bruke rike visuelle forbedringer direkte på animasjonslag med effektene beskrevet ovenfor.
- Siden noen effekter kan være ressurskrevende, finnes det et alternativ for å justere kvaliteten og ytelsen til effektgjengivelsen, ideelt for optimalisering på CPU-begrensede plattformer. Dette lar utviklere kontrollere gjengivelseskvaliteten og optimalisere ytelsen avhengig av målplattformen.
- Støtten for uttrykk er utvidet med følgende nøkkelfunksjoner og egenskaper:
- wiggle, temporalWiggle: Bruk tilfeldig bevegelse basert på tid.
- pointOnPath: Beregner posisjonen langs en bane.
- eiendomsindeks, gruppeindeks: En referanse til indeksen for en egenskap eller gruppe.
- verdi, egenskap, effekt: tilgang til eiendomsverdier og eksterne effekter.
- Mer nøyaktig samsvar med spesifikasjonene:
- TextFollowPath er en ny spesifikasjon som tillater at tekst følger vilkårlige vektorbaner (videodemonstrasjon).
- Tekstjusteringsalternativer – Mer nøyaktig visning av tekstlag basert på deres horisontale og vertikale justeringsinnstillinger (videodemonstrasjon).
- Maskeutvidelse er en ny funksjon som lar deg kontrollere mer presist hvordan formen på en maske påvirker den visuelle komposisjonen din (videodemonstrasjon).
- SVG
- ThorVG lar deg nå få tilgang til og endre individuelle SVG-elementer ved hjelp av unike ID-attributter definert i SVG-kildefilen. Denne funksjonen lar utviklere velge og manipulere spesifikke vektorformer direkte i en importert SVG-scene, ideelt for interaktive eller dynamiske brukstilfeller (f.eks. temaer, utheving).
- Støtte Gaussisk uskarphetseffekt.
- Intelligent gjengivelse
- ThorVG-programvaremotoren støtter nå intelligent delvis rendering, som muliggjør mer effektive renderingsarbeidsflyter ved å bare oppdatere de delene av en vektorscene som har endret seg. Ved å spore endrede regioner internt minimeres unødvendige tegninger og optimaliserer den generelle ytelsen. Denne funksjonen gir betydelige fordeler i scenarier som UI-rendering, designverktøy eller applikasjoner der mesteparten av scenen forblir statisk og bare små elementer oppdateres mellom rammer. I slike tilfeller kan det å unngå full scenerendering redusere beregningsbelastningen betydelig og forbedre strømeffektiviteten, noe som er spesielt verdifullt for mobile og innebygde systemer.
- For å oppnå dette målet bruker ThorVG 1.0 en kombinasjon av algoritmiske metoder som er spesielt utviklet for delvis gjengivelse. De viktigste strategiene som ligger til grunn for dette systemet er som følger:
- Lineær passalgoritme: Figurene sorteres etter x-koordinater, og en lineær passstrategi brukes for å redusere unødvendige kontroller av skitne områder. Dette reduserer kompleksiteten fra O(N × M) til O(N + M + K + N log N), hvor N er antall figurer, M er antall skitne områder, og K er antall faktiske overlappinger.
- Deling og betinget sammenslåing: Finkornet delregionsdeling balanseres av intelligent sammenslåing for å unngå fragmentering. Horisontal sammenslåing prioriteres for mer effektiv utnyttelse av minnebufferen.
- Romlig underinndeling (standard 4x4-rutenett): Gjengivelsesflaten er delt inn i 16 regioner, slik at bare de tilsvarende "skitne" områdene av figurer kan kontrolleres, noe som reduserer overhead betydelig under komplekse brukergrensesnittoppdateringer.
- Sammen gir disse teknikkene jevnere og raskere gjengivelse, spesielt i innebygde systemer eller sanntidssystemer der delvise oppdateringer er hyppige. Flere detaljer vil bli publisert i et eget innlegg. blogginnlegg.
- Vær oppmerksom på at for svært dynamisk innhold, som fartsfylte spill eller fullskjermsanimasjoner der nesten alle objekter endrer seg i hver ramme, gir delvis gjengivelse liten eller ingen ytelsesfordel og kan til og med medføre en liten overhead. I slike tilfeller er full scenegjengivelse vanligvis et bedre valg. Av denne grunn støtter ThorVG både delvise og fulle gjengivelseskonfigurasjoner, slik at du kan velge den optimale tilnærmingen for ditt brukstilfelle. Du kan analysere produktets ytelse og ta en informert beslutning ved å bruke alternativet Meson -Dpartial=[true/false] og alternativet EngineOption::Smart i SwCanvas-klassen:
auto lerret = SwCanvas::gen(EngineOption::Smart);
- En ny æra innen webintegrasjon med WebGL, WebGPU og den lette WebCanvas for sømløs gjengivelse i nettleseren
- WebGL- og WebGPU-backend-ene er nå offisielt klare for produksjonsbruk. Disse GPU-baserte renderprogrammene tilbyr nå full interoperabilitet med den tradisjonelle CPU-backend-en, og støtter alle ThorVG Canvas-funksjoner med samme bildekvalitet og stabilitet. Sammenlignet med versjon 0.15 har GPU-renderingsytelsen økt med over 150 %, noe som gir en betydelig forbedring i gjengivelse av webvektorgrafikk i sanntid.
- Betydelige ytelsesforbedringer i CPU/GPU-begrensede og innebygde miljøer
- ThorVG 1.0 tilbyr forbedret ytelse i forhold til versjon 0.15, med merkbare gevinster for både CPU og GPU.
- Viktige optimaliseringer:
- Forbedret effektivitet i gjengivelsespipeline.
- Redusert overhead for tildeling av rammebuffer.
- Optimalisert Lottie-sammensetningsanalyse.
- Forbedret batch-rendering og GPU-caching.
- ThorVG er optimalisert for CPU-basert rasterisering, med fokus på vektorgjengivelse i miljøer der GPU-ressurser er begrensede, utilgjengelige eller bevisst underutnyttet. I typiske CPU-benchmarktester viser ThorVG gjennomsnittlig 1.8 ganger raskere ytelse enn den mye brukte Skia-vektorgrafikkmotoren når den utfører typiske vektorgjengivelsesoppgaver. Denne fordelen er spesielt tydelig i geometriintensive scenarier som gjengivelse av rektangler, streker, rotasjoner og sirkler (skjermbilde 3).
- ThorVG Vaktmester
- En demonstrasjon av ThorVGs renderingsytelse i den virkelige verden kan sees i prosjektet. ThorVG Vaktmester – et interaktivt spill designet for å vise frem prosessorytelse under tung grafikkbelastning. Scenen inkluderer hundrevis av fiender laget med partikkelbasert grafikk, flerlags stjernehimmelbakgrunner med fullstørrelsesbitmaps, visuelle effekter i sanntid som DropShadow og Blur, og opptil 25 000 objekter gjengitt samtidig. Selv ved toppbelastning med 2K-oppløsning (2048×1152) demonstrerer prosjektet stabil ytelse over 120 FPS, noe som fremhever ThorVGs effektivitet og egnethet for komplekse, effekttunge miljøer.videodemonstrasjon, skjermbilde).
- Andre viktige endringer
- Et eksempel på ThorVG-integrasjon i Godot. I denne videodemonstrasjonen ThorVG er integrert med Godot i et webmiljø for å gjengi hundrevis av Lottie-animasjonsobjekter med over 120 bilder per sekund. Denne demoen demonstrerer ThorVGs potensial i et webmiljø for jevn animasjon av høy kvalitet under kjøring.
- La til undervisningseksempel bruker ThorVG WebCanvas.
- La til interaktiv ThorVG-lekeplassen.
- La til ThorVG-omslag for Swift: https://github.com/thorvg/thorvg.swift.
- Eksempler på bruk av ThorVG er flyttet til et eget arkiv https://github.com/thorvg/thorvg.example.
- Utvidelse publisert thorvg.vscode for at VSCode skal kunne opprette, redigere og forhåndsvise ThorVG-ressurser direkte i Visual Studio Code.
- Versjon 1.0 inkluderer en betydelig API-omstrukturering som tar sikte på å forbedre ytelse, brukervennlighet, konsistens og kompatibilitet med C.
- Støtte for TVG Picture-formatet (TVG) er fjernet. Denne avgjørelsen ble tatt for å forberede seg på det nye ThorVG Picture-formatet, designet med animasjon som kjernekonsept.
- Tallrike feilrettinger og stabilitetsforbedringer for produksjonsbruk.
Kilde: linux.org.ru
