Den 31 januari, efter mer Àn ett och ett halvt Ärs kontinuerlig utveckling, slÀpptes version 1.0 av det lÀtta och portabla plattformsoberoende biblioteket för vektorgrafik ThorVG, avsett för visualisering av vektorscener och animationer. Stöd för uppladdning av filer i formaten Lottie och SVG Tiny 1.2 (en lista över de funktioner som implementerats i SVG Tiny finns pÄ projektets Wiki).
Biblioteket erbjuder anvĂ€ndarvĂ€nliga API:er för import, skapande och visning av vektorgrafik, sĂ„vĂ€l som för export till olika grafiska format, vilket gör det universellt för anvĂ€ndning i olika programvaruplattformar och applikationer för visualisering av grafiskt innehĂ„ll. Ăven konsolverktygen lottie2gif och svg2png ingĂ„r.
ThorVG anvÀnds för rendering av vektorgrafik i projekt som Tizen OS, Godot Engine, LVGL och spelare dotLottie.
Projektet Àr skrivet i C++ (standard C++14) och distribueras under MIT-licensen.
Detta Ă€r inte bara en uppdateringâdet Ă€r en ombyggd grund för högpresterande, skalbar och bĂ€rbar 2D-vectorgrafik pĂ„ alla plattformar och enheter. Under utvecklingen har ThorVG förvandlats till en mogen, produktionsklar grafikmotor som har visat beprövad kvalitet och prestanda i verkliga applikationer.
ThorVG har snabbt vunnit popularitet och mött ett vÀxande intresse frÄn communityn, vilket speglar dess utveckling frÄn ett tidigt stadium till en vÀlkÀnd och praktiskt anvÀnd vektorgrafikmotor redo för verkligt plattformsoberoende bruk.
Ăndringslista:
- Utökade textrenderingsfunktioner, rika visuella effekter och stöd för exakt överlagring för förbÀttrad grafisk uttryck.
- Stöd för horisontell och vertikal justering, vilket möjliggör precis kontroll över textens placering i olika anvÀndargrÀnssnittskontexter.
- Automatisk radbrytning med möjlighet att vÀlja lÀge: per tecken, per ord, intelligent brytning och avkortning med ellips för att hantera överflöd.
- Stöd för manuell radbrytning som gör att utvecklare kan kontrollera radbrytningar explicit med hjÀlp av ny rad-symboler som \n. Detta möjliggör exakt formatering av fleradenstrÀngar, sÀrskilt i dynamiska layouter eller textanimationer.
- Stöd för anpassat avstÄnd mellan tecken, vilket möjliggör precis justering för att förbÀttra lÀsbarheten eller uppnÄ specifika typografiska stilar.
- Stöd för textkontur, vilket gör att man kan skapa stilistiska effekter och förbÀttra kontrasten mot olika bakgrunder (skÀrmavel 1).
- En mer komplex och konsekvent system för överlÀggningslÀgen har införts, vilket avsevÀrt förbÀttrar beteendet hos överlÀggningslÀgen och anpassar formler och logik för komposition till branschstandarder sÄsom Lottie, SVG och W3C:s specifikation för 'Compositing and Blending'. Dessa förbÀttringar sÀkerstÀller större visuell konsistens och plattformsoberoende kompatibilitet, sÀrskilt inom webben och animationsarbetsflöden.
- Följande överlÀggningslÀgen har implementerats och stöds: 'Nyans', 'MÀttnad', 'FÀrg' och 'Ljushet' med anvÀndning av HSL-fÀrgkomposition. Dessa lÀgen förbÀttrar kompatibiliteten med Lotties lager- och framtida stöd för SVG-blandning (skÀrmavel 2).
- Betydande förbÀttringar och utvidgningar i visuella effekter pÄ scenenivÄ, vilket gör vektorgrafik mer uttrycksfull och visuellt rik:
- Skuggeffekt med Gaussisk oskÀrpa (videodemonstration).
- Metoder för fÀrgbyte som Àndrar grafiken genom att omdefiniera hur fÀrger appliceras, blandas eller matchas baserat pÄ nyans (videodemonstration).
- Nya hjÀlpfunktioner har lagts till för att utöka interaktiva möjligheter. Dessa inkluderar stöd för rumsliga informationsfrÄgor (demonstration) och detektering av trÀffar pÄ visade objekt (videodemonstration).
- Utökade animationsmöjligheter för Lottie för plattformsoberoende uppspelning, inklusive modulÀra förinstÀllningar för Web Player, optimerade för storlek, prestanda och renderingslÀge (CPU/GPU)
- Betydande förbÀttringar av stöd för Lottie-animationer med ökad kompatibilitet, flexibilitet och interaktivitet pÄ alla plattformar. Inte bara har spektrumet av stödda Lottie-funktioner och uttryck utvidgats, utan ocksÄ verktyg för utvecklare har tillhandahÄllits för att dynamiskt kontrollera animationsbeteendet under körning, vilket gör ThorVG till en av de mest kraftfulla Lottie-uppspelningsbiblioteken som finns pÄ marknaden. Listan över implementerade funktioner i projektets Wiki.
- Sedan idag Àr filÀndelsen .lot en ny officiell standard frÄn IANA för Lottie-filer. ThorVG stödjer nu officiellt .lot som det standardfilformat för Lottie utöver den traditionella .json-filtillÀgget.
- Tweening
- Stöd för interpolation mellan icke-linjÀrt angrÀnsande nyckelbilder har lagts till, vilket ger smidigare övergÄngar och mer exakt tidskontroll. Denna förbÀttring Àr sÀrskilt effektiv vid anvÀndning med tillstÄndsbaserad animation (Àven kÀnd som markeringsbaserad uppspelning) i Lottie. I mÄnga fall Àr animationer avsedda att övergÄ mellan tillstÄnd pÄ komplexa, icke-linjÀra sÀtt. Traditionell Lottie, med sin strÀngt sekventiella tidsstruktur, har svÄrt att hantera sÄdana scenarier, vilket ofta leder till hastiga ÄterstÀllningar eller klumpiga hopp nÀr man övergÄr mellan icke-sekventiella nyckelbilder: videodemonstration 1, videodemonstration 2.
- Med hjÀlp av tweening kan utvecklare nu interpolera direkt mellan tvÄ separata nyckelbilder, Àven om de inte Àr linjÀrt angrÀnsande pÄ tidslinjen. Detta möjliggör mer naturliga och smidiga visuella effekter vid övergÄngar mellan tillstÄnd, vilket avsevÀrt ökar flexibiliteten och realism i interaktiva animationer: videodemonstration 1, videodemonstration 2.
- Nu (som en experimentell funktion) stödjs överskrivning av vÀrden för uttrycksvariabler under körning, vilket möjliggör dynamisk körning av skriptlogik baserat pÄ anvÀndarinmatning. Detta gör det till ett sÀrskilt kraftfullt verktyg för att skapa interaktiva animationer med hjÀlp av Lottie-resurser, vilket möjliggör skapande av skrÀddarsydda variationer som gÄr bortom det ursprungliga designen.videodemonstration).
- En anpassningsbar Asset Resolver-mekanism har lagts till, vilket ger större flexibilitet vid inladdning av externa resurser (t.ex. bilder) som refereras i Lottie-animationer.
- Utökad stöd för Lottie LayerEffect-funktionen, som möjliggör rika visuella förbÀttringar direkt pÄ animationslager med ovan beskrivna effekter.
- Eftersom vissa effekter kan vara resurskrÀvande har ett alternativ för att justera kvalitet och prestanda för rendering av effekter föreslagits, vilket Àr perfekt för optimering pÄ plattformar med begrÀnsade CPU-resurser. Detta ger utvecklare möjlighet att styra renderingens noggrannhet och optimera prestanda beroende pÄ mÄlplattform.
- Stödet för uttryck har utvidgats genom att lÀgga till följande nyckelfunktioner och egenskaper:
- wiggle, temporalWiggle: tillÀmpning av slumpmÀssig rörelse beroende av tid.
- pointOnPath: berÀkning av position lÀngs en vÀg.
- propertyIndex, groupIndex: referens till indexet för egenskapen eller gruppen.
- value, property, effect: Ätkomst till vÀrden för egenskaper och externa effekter.
- Mer exakt överensstÀmmelse med specifikationerna:
- TextFollowPath â en ny specifikation som gör att text kan följa godtyckliga vektorsprĂ„k (videodemonstration).
- Textjusteringsalternativ â en mer exakt visning av textlager baserat pĂ„ instĂ€llningar för deras horisontella och vertikala justering (videodemonstration).
- Maskeringsutvidgning â en ny funktion som möjliggör mer exakt kontroll över hur maskens form pĂ„verkar den visuella kompositionen (videodemonstration).
- SVG
- ThorVG ger nu Ätkomst till individuella SVG-element och möjliggör Àndringar med unika id-attribut definierade i den ursprungliga SVG-filen. Denna funktion gör det möjligt för utvecklare att direkt vÀlja och manipulera specifika vektorgrafiker i den importerade SVG-scenen, vilket Àr perfekt för interaktiva eller dynamiska anvÀndningsscenarier (t.ex. tematisk design, markering).
- Support Gaussisk suddighets-effekt.
- Intelligent rendering
- Programvarumotorn ThorVG stödjer nu intelligent partiell rendering, vilket ger mer effektiva renderingprocesser genom att endast uppdatera de delar av vektorscenen som har Àndrats. Genom inre spÄrning av Àndrade omrÄden minimerar den onödiga omritningar och optimerar den övergripande prestandan. Denna funktion erbjuder betydande fördelar i scenarier som anvÀndargrÀnssnittsrendering, designverktyg eller applikationer dÀr större delen av scenen förblir statisk och endast smÄ element uppdateras mellan bilderna. I sÄdana fall kan avstÄendet frÄn fullstÀndig rendering av scenen avsevÀrt minska den berÀkningsmÀssiga belastningen och öka energieffektiviteten, vilket Àr sÀrskilt vÀrdefullt för mobila och inbyggda system.
- För att uppnÄ detta tillÀmpar ThorVG 1.0 en kombination av algoritmiska metoder som Àr speciellt utformade för partiell rendering. Nedan följer de grundlÀggande strategierna som ligger till grund för detta system:
- LinjÀra genomgÄngsalgoritmer: Figurer sorteras efter x-koordinater, och en linjÀr genomgÄngsstrategi tillÀmpas för att minska onödiga kontroller av "smutsiga" omrÄden. Detta minskar komplexiteten frÄn O(N à M) till O(N + M + K + N log N), dÀr N Àr antalet figurer, M Àr antalet "smutsiga" omrÄden och K Àr antalet faktiska överlappningar.
- Uppdelning och villkorlig sammanslagning: Finkornig uppdelning av delomrÄden balanseras med intelligent sammanslagning för att undvika fragmentering. HÀr prioriteras horisontell sammanslagning för mer effektiv anvÀndning av cacheminnet.
- Rumslig uppdelning (standard 4Ă4-gitter): Renderingsytan delas in i 16 omrĂ„den, vilket möjliggör kontroll av endast de relevanta "smutsiga" omrĂ„dena för figurer, vilket avsevĂ€rt minskar overhead vid komplexa uppdateringar av anvĂ€ndargrĂ€nssnittet.
- Genom att arbeta tillsammans erbjuder dessa tekniker en smidigare och snabbare rendering, sÀrskilt i inbyggda system eller realtidsystem dÀr partiella uppdateringar ofta sker. Mer detaljerad information kommer att publiceras i ett separat inlÀgg. blogg.
- Observera att i fallet med högdynamiskt innehÄll, sÄsom dynamiska spel eller helskÀrmsanimationer, dÀr nÀstan alla objekt Àndras i varje bildruta, ger partiell rendering lite eller ingen prestandafördel och kan till och med leda till smÄ overheadkostnader. I sÄdana fall Àr det vanligtvis bÀttre att vÀlja fullstÀndig rendering av scenen. Av denna anledning stöder ThorVG bÄde partiell och fullstÀndig rendering, vilket ger dig möjlighet att vÀlja den optimala metoden för ditt anvÀndningsfall. Du kan analysera prestandan hos din produkt och fatta ett informerat beslut med hjÀlp av alternativet Meson -Dpartial=[true/false] och alternativet EngineOption::Smart i klassen SwCanvas:
auto canvas = SwCanvas::gen(EngineOption::Smart);
- En ny era av integration av webbtekniker med WebGL, WebGPU och ett lÀttvikts WebCanvas för sömlös rendering i webblÀsaren
- WebGL- och WebGPU-backend Àr nu officiellt redo för produktionsanvÀndning. Dessa GPU-baserade renderare erbjuder nu full funktionell kompatibilitet med den traditionella CPU-backenden, med stöd för alla funktioner i ThorVG Canvas med samma bildkvalitet och stabilitet. JÀmfört med version 0.15 har prestandan vid GPU-rendering ökat med mer Àn 150%, vilket ger en betydande förbÀttring av rendering av webbvektorgrafik i realtid.
- Betydande prestandaökning i miljöer med begrÀnsad CPU/GPU-kraft och inbyggda miljöer
- ThorVG 1.0 erbjuder förbÀttrad prestanda jÀmfört med version 0.15, med mÀrkbar ökning bÄde för CPU och GPU.
- Nyckeloptimeringar:
- FörbÀttrad effektivitet i renderingspipeline.
- Minskade overheadkostnader för allokering av rambuffer.
- Optimiserad analys av Lottie-kompositioner.
- FörbÀttrad batch-rendering och GPU-caching.
- ThorVG Àr optimerat för rasterisering baserat pÄ CPU, med fokus pÄ vektorvisualisering i miljöer dÀr GPU-resurser Àr begrÀnsade, otillgÀngliga eller medvetet inte anvÀnds. I typiska CPU-test visar ThorVG i genomsnitt en 1,8 gÄnger högre prestanda jÀmfört med den allmÀnt anvÀnda vektor grafikmotorn Skia vid utförande av typiska vektorvisualiseringsuppgifter. Fördelen blir sÀrskilt tydlig i scenarier med hög geometribruk, sÄsom visualisering av rektanglar, linjer, rotationer och cirklar (screenshot 3).
- ThorVG Janitor
- Ett verkligt prestandademonstration av ThorVG:s rendering kan ses i projektet ThorVG Janitor â ett interaktivt spel som Ă€r utvecklat för att demonstrera CPU-prestanda under hög grafisk belastning. Scenen innehĂ„ller hundratals fiender skapade med partikelbaserad grafik, flerlagers bakgrunder av stjĂ€rnhimmel med fullstora rasterbilder, visuella effekter i realtid som DropShadow och Blur, samt upp till 25000 objekt som renderas samtidigt. Ăven vid maximal belastning vid 2K upplösning (2048Ă1152) visar projektet stabil prestanda över 120 FPS, vilket understryker ThorVG:s effektivitet och lĂ€mplighet för komplexa miljöer med mĂ„nga effekter (videodemonstration, skĂ€rmdump).
- Andra betydande Àndringar
- Exempel pÄ integration av ThorVG i Godot. I denna video-demonstration ThorVG Àr integrerat med Godot i en webbmiljö för att rendera hundratals Lottie animationsobjekt med mer Àn 120 bilder per sekund. Denna demonstration visar ThorVG:s potential i webbmiljöer för smidig och högkvalitativ animation under körning.
- Tillagd ett handledningsexempel för att anvÀnda ThorVG WebCanvas.
- Interaktiv ThorVG Playground.
- En wrapper för ThorVG för sprÄket Swift har lagts till: https://github.com/thorvg/thorvg.swift.
- Exempel pÄ anvÀndning av ThorVG har flyttats till ett separat arkiv https://github.com/thorvg/thorvg.example.
- Ett tillÀgg har publicerats thorvg.vscode för VSCode för att skapa, redigera och förhandsgranska ThorVG-resurser direkt i Visual Studio Code-miljön.
- I version 1.0 har API:t genomgÄtt en betydande omstrukturering som syftar till att öka prestanda, anvÀndarvÀnlighet, konsekvens och kompatibilitet med C.
- Stödet för TVG Picture-formatet (TVG) har tagits bort. Detta beslut fattades för att förbereda det nya ThorVG Picture-formatet, som utvecklades med animation som huvudkoncept.
- MÄnga buggfixar och förbÀttrad stabilitet för produktionsanvÀndning.
KĂ€lla: linux.org.ru
