31. januar, etter halvannet år med kontinuerlig utvikling, ble versjon 1.0 av et lett og bærbart tverrplattform bibliotek for vektorgrafikk utgitt ThorVG, designet for visualisering av vektor scener og animasjoner. Støtte for innlasting av filer i formatene Lottie og SVG Tiny 1.2 (listen over implementerte funksjoner i SVG Tiny finnes i prosjektets Wiki).
Biblioteket tilbyr brukervennlige APIer for import, opprettelse og visning av vektorgrafikk, samt for eksport til ulike grafiske formater, noe som gjør det allsidig for bruk i ulike programplattformer og applikasjoner for visualisering av grafisk innhold. Det leveres også konsollverktøyene lottie2gif og svg2png.
ThorVG brukes til å rendere vektorgrafikk i prosjekter som Tizen OS, Godot Engine, LVGL og spillere dotLottie.
Prosjektet er skrevet i C++ (standard C++14) og distribueres under MIT-lisensen.
Dette er ikke bare en oppdatering – det er et ombygd fundament for høyytelses, skalerbar og portabel to-dimensjonal vektorgrafikk på alle plattformer og enheter. I løpet av utviklingen har ThorVG blitt en moden, produksjonsklar grafikkmotor som har demonstrert bevist kvalitet og ytelse i virkelige applikasjoner.
ThorVG har raskt blitt populært og har skapt økt interesse fra samfunnet, noe som reflekterer utviklingen fra et tidlig prosjekt til en anerkjent og praktisk anvendt vektorgrafikkmotor, klar for reell tverrplattformbruk.
Endringslogg:
- Utvidede tekstrenderingsevner, rike visuelle effekter, og støtte for nøyaktig overlapping for forbedret grafisk uttrykk
- Støtte for horisontal og vertikal justering som gir mulighet for presis kontroll over tekstplassering i ulike brukergrensesnittkontekster.
- Automatisk linjebrudd med mulighet for valg av modus: etter tegn, etter ord, smart linjebrudd, og avkorting med ellips for håndtering av overflyt.
- Støtte for manuell linjeskift, som gir utviklere eksplisitt kontroll over linjeskift ved hjelp av linjeskifttegn som \n. Dette gjør det mulig å formatere tekstblokker med flere linjer nøyaktig, spesielt i dynamiske oppsett eller tekstanimasjoner.
- Støtte for tilpasset avstand mellom tegn, som gjør det mulig å finjustere for å forbedre lesbarhet eller oppnå bestemte typografiske stiler.
- Støtte for tekstomriss, som gir stilistiske effekter og forbedret kontrast på forskjellige bakgrunner (skjermbilde 1).
- En mer kompleks og konsistent system for sammensettingsmoduser er introdusert, noe som betydelig forbedrer oppførselen til sammensettingsmoduser og bringer formler og logikk i samsvar med bransjestandarder som Lottie, SVG og W3C-spesifikasjonen 'Compositing and Blending'. Disse forbedringene gir større visuell konsistens og plattformkompatibilitet, spesielt i web- og animasjonsarbeidsflyter.
- Følgende sammensettingsmoduser er implementert og støttet: 'Tone', 'Metning', 'Farge' og 'Lysstyrke' ved hjelp av HSL-fargekomposisjon. Disse modiene forbedrer kompatibiliteten med Lottie-lagseffekter og fremtidig støtte for SVG-blanding (skjermbilde 2).
- Betydelige forbedringer og utvidelser i visuelle effekter på scenenivå, noe som gjør vektorgrafikk mer uttrykksfull og visuell rikere:
- Skyggeeffekt med Gaussisk uskarphetsfilter (video-demonstrasjon).
- Metoder for fargeutskifting som endrer grafikkens utseende ved å overstyre hvordan farger anvendes, blandes eller matches basert på nyanse (video-demonstrasjon).
- Nye hjelpefunksjoner er lagt til for å utvide interaktive muligheter. Dette inkluderer støtte for forespørsel om romlig informasjon (demonstrasjon) og oppdagelse av treff på synlige objekter (video-demonstrasjon).
- Utvidede animasjonsmuligheter for Lottie for plattformuavhengig gjengivelse, inkludert modulære presets for Web Player, optimalisert for størrelse, ytelse og gjengivelsesmodus (CPU/GPU)
- Betydelige forbedringer i støtten til Lottie-animasjoner med bedre kompatibilitet, fleksibilitet og interaktivitet på alle plattformer. Ikke bare rekkevidden av støttede funksjoner og uttrykk for Lottie er utvidet, men det er også gitt verktøy for utviklere som gjør det mulig å dynamisk kontrollere adferden til animasjonen under kjøring, noe som gjør ThorVG til et av de mest kraftfulle Lottie-reproksjonsbibliotekene tilgjengelig på markedet. Liste over implementerte funksjoner i prosjektets Wiki.
- Per dags dato er filtypen .lot den nye offisielle standarden fra IANA for Lottie-filer. ThorVG støtter nå offisielt .lot som standard filformat for Lottie i tillegg til det tradisjonelle .json-formatet.
- Tweening
- Støtte for interpolering mellom ikke-lineært sammenknyttede nøkkelbilder er lagt til, noe som gir smidigere overganger og mer presis tidskontroll. Denne forbedringen er spesielt effektiv når den brukes med tilstandsdrevet animasjon (også kjent som markerbasert avspilling) i Lottie. I mange tilfeller er animasjoner ment å gå fra en tilstand til en annen på komplekse, ikke-lineære måter. Tradisjonell Lottie, med sin strengt sekvensielle tidsstruktur, har problemer med slike scenarier, noe som ofte resulterer i brå hopp eller klønete overganger mellom ikke-sekvensielle nøkkelbilder: video-demo 1, video-demo 2.
- Med tweening kan utviklere nå utføre interpolering direkte mellom to separate nøkkelbilder, selv om de ikke er lineært sammenknyttede på tidslinjen. Dette gir mer naturlige og smidige visuelle effekter ved overganger mellom tilstander, noe som betydelig øker fleksibiliteten og realismen i interaktive animasjoner: video-demo 1, video-demo 2.
- Nå (som en eksperimentell funksjon) støttes det å overskrive verdier for variable uttrykk under kjøring, noe som gjør det mulig å dynamisk utføre skriptlogikk basert på brukerens inndata. Dette gjør det til et spesielt kraftig verktøy for å lage interaktive animasjoner ved hjelp av Lottie-ressurser, og lar deg lage individuelle variasjoner som går utover det opprinnelige designet.video-demonstrasjon).
- En tilpasset Asset Resolver-mekanisme er lagt til for å gi større fleksibilitet ved lasting av eksterne ressurser (f.eks. bilder) som brukes i Lottie-animasjoner.
- Utvidet støtte for Lottie LayerEffect-funksjonen, som gjør det mulig å utføre rike visuelle forbedringer direkte på animasjonslag med de effektene som er beskrevet ovenfor.
- Ettersom noen effekter kan være ressurskrevende, er det tilbudt et alternativ for tilpasning av kvalitet og ytelse for gjengivelse av effektene, noe som er ideelt for optimalisering på plattformer med begrensede CPU-ressurser. Dette gir utviklere mulighet til å kontrollere nøyaktigheten av gjengivelsen og optimalisere ytelsen avhengig av den målrettede plattformen.
- Støtten for uttrykk har blitt utvidet med tillegg av følgende nøkkelfunksjoner og egenskaper:
- wiggle, temporalWiggle: anvendelse av tilfeldige bevegelser avhengig av tid.
- pointOnPath: beregning av posisjon langs en bane.
- propertyIndex, groupIndex: referanse til egenskapens eller gruppens indeks.
- value, property, effect: tilgang til egenskapers verdier og eksterne effekter.
- Mer nøyaktig samsvar med spesifikasjonene:
- TextFollowPath – en ny spesifikasjon som lar tekst følge vilkårlige vektorbaner (video-demonstrasjon).
- Tekstjusteringsalternativer – mer nøyaktig visning av tekstlag basert på innstillingene for deres horisontale og vertikale justering (video-demonstrasjon).
- Maskeringsextensjon – en ny funksjon som gir mer presis kontroll over hvordan maskens form påvirker den visuelle sammensetningen (video-demonstrasjon).
- SVG
- ThorVG gjør det nå mulig å få tilgang til individuelle SVG-elementer og endre dem ved hjelp av unike id-attributter definert i den opprinnelige SVG-filen. Denne funksjonen gjør det mulig for utviklere å direkte velge og manipulere spesifikke vektorfigurer i den importerte SVG-scenen, noe som er ideelt for interaktive eller dynamiske bruksområder (f.eks. tematisk design, utheving).
- Støtte Gaussian blur-effekt.
- Intelligent gjengivelse
- Programviss ThorVG støtter nå intelligent delvis rendering, som gir mer effektive renderingarbeidsflyter ved kun å oppdatere de delene av vektorscenen som har endret seg. Takket være intern sporing av endrede områder minimerer den unødvendige omrenderinger og optimaliserer den totale ytelsen. Denne funksjonen gir betydelige fordeler i scenarier som rendering av brukergrensesnitt, designverktøy eller applikasjoner der store deler av scenen forblir statiske, mens bare små elementer oppdateres mellom rammer. I slike tilfeller kan fraværet av full rendering av scenen betydelig redusere beregningsbelastningen og øke energieffektiviteten, noe som er spesielt verdifullt for mobile og innebygde systemer.
- For å oppnå dette bruker ThorVG 1.0 en kombinasjon av algoritmiske metoder utviklet spesielt for delvis rendering. Nedenfor er hovedstrategiene som ligger til grunn for dette systemet:
- Lineær pass-algoritme: figurer sorteres etter x-koordinater, og en lineær pass-strategi brukes for å redusere unødvendige sjekker av "skitne" områder. Dette reduserer kompleksiteten fra O(N × M) til O(N + M + K + N log N), der N er antall figurer, M er antall "skitne" områder, og K er antall faktiske overlappinger.
- Oppdeling og betinget sammenslåing: finfordeling av subområder balanseres med intelligent sammenslåing for å unngå fragmentering. Her prioriteres horisontal sammenslåing for mer effektiv bruk av minnekassen.
- Romlig oppdeling (standard 4×4 rutenett): renderingoverflaten deles inn i 16 områder, noe som gjør det mulig å sjekke bare de relevante "skitne" områdene til figurene, og reduserer betydelig overhead ved kompliserte oppdateringer av brukergrensesnittet.
- Når disse teknikkene brukes sammen, gir de en jevnere og raskere rendering, spesielt i innebygde systemer eller sanntidssystemer, der delvise oppdateringer skjer ofte. Mer detaljert informasjon vil bli publisert i et eget innlegg. bloggen.
- Vær oppmerksom på at ved høy-dynamisk innhold, som dynamiske spill eller fullskjermanimasjoner, hvor nesten alle objekter endres i hvert ramme, gir delvis gjengivelse lite eller ingen ytelsesfordeler og kan til og med føre til små kostnader. I slike tilfeller er det vanligvis bedre å velge fullstendig gjengivelse av scenen. Derfor støtter ThorVG både delvis og full gjengivelseskonfigurasjon, noe som gir deg muligheten til å velge den optimale tilnærmingen for din bruksanvendelse. Du kan analysere ytelsen til produktet ditt og ta en informert beslutning ved å bruke alternativet Meson -Dpartial=[true/false] og alternativet EngineOption::Smart i SwCanvas-klassen.
auto canvas = SwCanvas::gen(EngineOption::Smart);
- En ny æra av integrering av webteknologier med WebGL, WebGPU og lettvekts WebCanvas for sømløs gjengivelse i nettleseren.
- Backendene WebGL og WebGPU er nå offisielt klare for produksjonsbruk. Disse GPU-baserte rendererne tilbyr nå full funksjonalitet i forhold til tradisjonell CPU-backend, og støtter alle funksjoner i ThorVG Canvas med samme kvalitet og bilde stabilitet. Sammenlignet med versjon 0.15 har ytelsen til GPU-gjengivelse økt med mer enn 150%, noe som gir en betydelig forbedring av web-vektor grafikk i sanntid.
- Betydelig ytelsesforbedring i miljøer med begrenset CPU/GPU-strøm og innebygde miljøer.
- ThorVG 1.0 tilbyr forbedret ytelse sammenlignet med versjon 0.15, med merkbare gevinster både på CPU og GPU.
- Nøkkeloptimaliseringer:
- Forbedret effektivitet i gjengivelsespipeline.
- Reduserte overhead-kostnader for tildeling av rammebuffer.
- Optimalisert analyse av Lottie-komposisjoner.
- Forbedret batch-gjengivelse og GPU-buffering.
- ThorVG er optimalisert for rasterisering basert på CPU, med fokus på vektorvisualisering i miljøer der GPU-ressurser er begrenset, utilgjengelige eller bevisst ikke brukes. I typiske CPU-tester viser ThorVG i snitt 1,8 ganger høyere ytelse sammenlignet med den mye brukte vektorgrafikkmotoren Skia når man utfører typiske vektorvisualiseringsoppgaver. Fordelen er spesielt tydelig i scenarier med høy geometribruk, som visualisering av rektangler, streker, rotasjoner og sirkler (skjermbilde 3).
- ThorVG Janitor
- En faktisk demonstrasjon av ThorVGs renderingytelse kan sees i prosjektet ThorVG Janitor – et interaktivt spill utviklet for å demonstrere CPU-ytelse under høy grafisk belastning. Scenen inkluderer hundrevis av fiender laget med partikkeldrevet grafikk, flerlag bakgrunner med stjerneskyer med full størrelse rasterbilder, sanntidsvisuelle effekter som DropShadow og Blur, samt opptil 25000 objekter som rendres samtidig. Selv ved maksimal belastning med 2K oppløsning (2048×1152) viser prosjektet stabil ytelse over 120 FPS, noe som understreker effektiviteten og anvendbarheten til ThorVG i komplekse miljøer med mange effekter (video-demonstrasjon, skjermbilde).
- Andre betydelige endringer
- Eksempel på integrering av ThorVG i Godot. I denne video-demonstrasjonen ThorVG er integrert med Godot i et nettbasert miljø for å rendere hundrevis av Lottie animasjonsobjekter med over 120 bilder per sekund. Denne demonstrasjonen viser potensialet til ThorVG i nettmiljøet for jevn og høykvalitets animasjon under kjøring.
- Inkludert opplærings eksempel bruk av ThorVG WebCanvas.
- Interaktiv ThorVG Playground.
- ThorVG wrapper for Swift-språket er lagt til: https://github.com/thorvg/thorvg.swift.
- Eksempler på bruk av ThorVG er flyttet til et eget depot https://github.com/thorvg/thorvg.example.
- Utvidelse publisert thorvg.vscode for VSCode for å lage, redigere og forhåndsvise ThorVG-ressurser direkte i Visual Studio Code-miljøet.
- I versjon 1.0 er det utført en betydelig omstrukturering av API-en, rettet mot å forbedre ytelse, brukervennlighet, konsistens og kompatibilitet med C.
- Støtte for TVG Picture-formatet er fjernet. Denne beslutningen ble tatt for å forberede det nye ThorVG Picture-formatet, som er utviklet med animasjon som hovedkonsept.
- Flere feilrettinger og forbedret stabilitet for produksjonsbruk.
Kilde: linux.org.ru
