31. januar, efter halvandet års kontinuerlig udvikling, blev version 1.0 af det lette og bærbare tværplatforms bibliotek til vektorgrafik udgivet ThorVG, designet til visualisering af vektor scener og animationer. Det understøtter indlæsning af filer i formaterne Lottie og SVG Tiny 1.2 (listen over implementerede funktioner af SVG Tiny i Wiki-projektet).
Biblioteket tilbyder brugervenlige API'er til import, oprettelse og visning af vektorgrafik, samt til eksport til forskellige grafiske formater, hvilket gør det alsidigt til brug i forskellige softwareplatforme og applikationer til visualisering af grafisk indhold. Der medfølger også konsolværktøjer lottie2gif og svg2png.
ThorVG anvendes til rendering af vektorgrafik i projekter som Tizen OS, Godot Engine, LVGL og spillere dotLottie.
Projektet er skrevet i C++ (standard C++14) og distribueres under MIT-licensen.
Det er ikke bare en opdatering - det er en ombygget grundlag for højtydende, skalerbar og bærbar to-dimensionel vektorgrafik på alle platforme og enheder. Gennem udviklingen er ThorVG blevet en moden, produktionsklar grafikmotor, der har vist pålidelig kvalitet og ydeevne i virkelige applikationer.
ThorVG har hurtigt vundet popularitet og skabt voksende interesse fra fællesskabet, hvilket afspejler dens udvikling fra et tidligt projekt til en bredt anerkendt og praktisk anvendt vektorgrafikmotor, klar til egentlig tværplatformsbrug.
Ændringslog:
- Udvidede muligheder for tekstrendering, rige visuelle effekter og støtte til præcis overlejring for forbedret grafisk udtryk
- Understøttelse af horisontal og vertikal justering, der giver mulighed for præcise kontrol over tekstplacering i forskellige brugergrænseflade kontekster.
- Automatisk linjeskift med mulighed for at vælge tilstand: efter tegn, efter ord, intelligent opdeling og afkortning med ellipsis til håndtering af overfyld.
- Understøttelse af manuel linjeskæring, så udviklere eksplicit kan kontrollere linjeskæringer med tegn som . Dette muliggør præcis formatering af multilinje tekstblokke, især i dynamiske layouts eller tekstanimationer.
- Understøttelse af tilpasset afstand mellem tegn, hvilket muliggør præcis justering for at forbedre læsbarheden eller opnå bestemte typografiske stilarter.
- Understøttelse af tekstomrids, der muliggør oprettelse af stilistiske effekter og forbedrer kontrasten på forskellige baggrunde (skærmbillede 1).
- Introduktion af et mere omfattende og sammenhængende system af lagknappefunktioner, der betydeligt forbedrer lagkrydsningsadfærd og bringer formler og kompositionslogik i overensstemmelse med branchestandarder som Lottie, SVG og W3C-specifikationen 'Compositing and Blending'. Disse forbedringer sikrer større visuel konsistens og tværplatforms-kompatibilitet, især i web- og animationsworkflow.
- De følgende lagknapfunktioner er implementeret og understøttet: 'Skygge', 'Mætning', 'Farve' og 'Lysstyrke' ved brug af HSL-farverums-komposition. Disse funktioner forbedrer kompatibiliteten med Lottie-lag-effekter og fremtidig understøttelse af SVG-blanding (skærmbillede 2).
- Betydelige forbedringer og udvidelser i visuelle effekter på scene-niveau, hvilket gør vektorgrafik mere udtryksfuld og visuel rig.
- Skyggeeffekt med Gaussian-blur filter (video demonstration).
- Farveudskiftningsmetoder, der ændrer det visuelle udtryk af grafik ved at redefinere hvordan farver påføres, blandes eller matches baseret på nuance (video demonstration).
- Nye hjælpefunktioner er tilføjet for at udvide interaktive muligheder. Disse omfatter understøttelse af rumlige informationsforespørgsler (demonstration) og detektering af hits på synlige objekter (video demonstration).
- Udvidede Lottieanimationsmuligheder til tværplatformsafspilning, inklusive modulære Web Player præindstillinger optimeret til størrelse, ydeevne og renderingsmetode (CPU/GPU)
- Betydelige forbedringer i understøttelsen af Lottie-animationer med øget kompatibilitet, fleksibilitet og interaktivitet på tværs af alle platforme. Omfanget af understøttede funktioner og udtryk i Lottie er ikke kun udvidet, men der er også leveret værktøjer til udviklere, der gør det muligt at styre animationens adfærd dynamisk under kørslen, hvilket gør ThorVG til et af de mest kraftfulde Lottie-afspilningsbiblioteker tilgængeligt på markedet. Liste over implementerede funktioner i projektets Wiki.
- I dag er filtypenavnet .lot blevet den nye officielle standard fra IANA for Lottie-filer. ThorVG understøtter nu officielt .lot som standard filformat for Lottie-filer ud over det traditionelle .json-format.
- Tweening
- Der er tilføjet støtte til interpolation mellem ikke-lineært nærliggende keyframes, hvilket sikrer mere glidende overgange og mere præcis tidskontrol. Denne forbedring er især effektiv ved brug af animationsafspilning baseret på tilstande (også kendt som markørbaseret afspilning) i Lottie. I mange tilfælde er animationer designet til at bevæge sig mellem tilstande på komplekse, ikke-lineære måder. Traditionel Lottie med sin strengt sekventielle tidsstruktur har svært ved at håndtere sådanne scenarier, hvilket ofte fører til pludselige nulstillinger eller klodsede spring, når der skiftes mellem ikke-sekventielle keyframes. video-demonstration 1, video-demonstration 2.
- Med tweening kan udviklere nu udføre interpolation direkte mellem to adskilte keyframes, selvom de ikke er lineært nærliggende på tidslinjen. Dette giver en mere naturlig og glidende visuel effekt ved overgange mellem tilstande, hvilket betydeligt øger fleksibiliteten og realismen i interaktive animationer. video-demonstration 1, video-demonstration 2.
- Nu understøttes (som en eksperimentel funktion) overskrivning af værdierne for expressions-variabler under kørslen, hvilket muliggør dynamisk udførelse af scriptlogik baseret på brugerinput. Dette gør det til et særligt kraftfuldt værktøj til at skabe interaktive animationer ved hjælp af Lottie-ressourcer, hvilket muliggør oprettelse af individuelle variationer, der går ud over det originale design.video demonstration).
- Der tilføjede tilpassede Asset Resolver-mekanisme giver større fleksibilitet ved indlæsning af eksterne ressourcer (f.eks. billeder), som Lottie-animationer henviser til.
- Udvidet support for Lottie LayerEffect-funktionen, som gør det muligt at foretage rige visuelle forbedringer direkte på animationslag med de ovenfor beskrevne effekter.
- Da nogle effekter kan være ressourcekrævende, tilbydes en mulighed for at justere kvaliteten og ydelsen ved rendering af effekterne, hvilket er ideelt til optimering på platforme med begrænsede CPU-ressourcer. Dette giver udviklere mulighed for at kontrollere nøjagtigheden af rendering og optimere ydeevnen i henhold til den målrettede platform.
- Understøttelsen af udtryk er blevet udvidet ved at tilføje følgende nøglefunktioner og egenskaber:
- wiggle, temporalWiggle: anvendelse af tilfældig bevægelse, der er tidsafhængig.
- pointOnPath: beregning af position langs en sti.
- propertyIndex, groupIndex: reference til egenskabs- eller gruppeindekset.
- value, property, effect: adgang til egenskabsværdier og eksterne effekter.
- Mere nøjagtig overensstemmelse med specifikationer:
- TextFollowPath – en ny specifikation, der gør det muligt for tekst at følge vilkårlige vektorstier (video demonstration).
- Tekstjusteringsindstillinger – en mere præcis visning af tekstlag baseret på indstillingerne for deres horisontale og vertikale justering (video demonstration).
- Maskeforlængelse – en ny funktion, der gør det muligt at kontrollere maskens form mere præcist på den visuelle komposition (video demonstration).
- SVG
- ThorVG gør det nu muligt at få adgang til individuelle SVG-elementer og ændre dem ved hjælp af unikke id-attributter defineret i den oprindelige SVG-fil. Denne funktion giver udviklere mulighed for direkte at vælge og manipulere specifikke vektorformer i den importerede SVG-scene, hvilket er ideelt til interaktive eller dynamiske brugsanvendelser (f.eks. tematisk design, fremhævelse).
- Support Gaussian blur-effekt.
- Intelligent rendering
- ThorVG software engine supports now intelligent partial rendering, which provides more efficient rendering workflows by updating only those parts of the vector scene that have changed. Thanks to its internal tracking of modified areas, it minimizes unnecessary redraws and optimizes overall performance. This feature offers significant advantages in scenarios such as rendering user interfaces, design tools, or applications where most of the scene remains static, with only small elements being updated between frames. In such cases, avoiding full scene rendering can significantly reduce the computational load and enhance energy efficiency, which is especially valuable for mobile and embedded systems.
- To achieve this goal, ThorVG 1.0 applies a combination of algorithmic methods specifically designed for partial rendering. Below are the main strategies underlying this system:
- Linear sweep algorithm: shapes are sorted by x-coordinates, and a linear sweep strategy is applied to reduce unnecessary checks of 'dirty' areas. This reduces the complexity from O(N × M) to O(N + M + K + N log N), where N is the number of shapes, M is the number of 'dirty' areas, and K is the number of actual overlaps.
- Subdivision and conditional merging: fine-grained subdivision of subareas is balanced with intelligent merging to avoid fragmentation. Priority is given to horizontal merging for more efficient memory cache usage.
- Spatial subdivision (default 4×4 grid): the rendering surface is divided into 16 areas, allowing only the corresponding 'dirty' areas of shapes to be checked, significantly reducing overhead during complex UI updates.
- Working together, these techniques ensure smoother and faster rendering, especially in embedded systems or real-time systems where partial updates frequently occur. More detailed information will be published in a separate post. blog.
- Bemærk, at i tilfælde af høj-dynamisk indhold, såsom dynamiske spil eller fuldskærmsanimationer, hvor næsten alle objekter ændres i hvert billede, giver delvis rendering lidt eller slet ikke fordele i ydeevnen og kan endda føre til små overheadomkostninger. I sådanne tilfælde er det normalt bedre at vælge fuld scenegengivelse. Af denne grund understøtter ThorVG både delvis og fuld rendering, hvilket giver dig mulighed for at vælge den optimale tilgang til dit brug. Du kan analysere din produktpræstation og træffe informerede beslutninger ved at bruge indstillingen Meson -Dpartial=[true/false] og indstillingen EngineOption::Smart i klassen SwCanvas:
auto canvas = SwCanvas::gen(EngineOption::Smart);
- En ny æra af integration af webteknologier med WebGL, WebGPU og letvægts WebCanvas for sømløs rendering i browseren
- Backends til WebGL og WebGPU er nu officielt klar til produktionsbrug. Disse GPU-baserede renderer tilbyder nu fuld funktionskompatibilitet med den traditionelle CPU-backend, idet de understøtter alle funktioner i ThorVG Canvas med samme kvalitet og stabilitet som billedet. Sammenlignet med version 0.15 er GPU-renderingens ydeevne steget med mere end 150%, hvilket giver en væsentlig forbedring af web-vektorgrafik rendering i realtid.
- Betydelig ydeevneforbedring i miljøer med begrænsninger på CPU/GPU-strøm og indlejrede miljøer
- ThorVG 1.0 tilbyder forbedret ydeevne sammenlignet med version 0.15, med mærkbar gevinst både i CPU og GPU.
- Nøgleoptimeringer:
- Forbedret effektivitet i render pipeline.
- Reduceret overheadomkostninger til tildeling af frame buffer.
- Optimeret analyse af Lottie-kompositioner.
- Forbedret batch rendering og GPU caching.
- ThorVG er optimeret til rasterisering baseret på CPU med fokus på vektorvisualisering i miljøer, hvor GPU-ressourcer er begrænsede, utilgængelige eller bevidst ikke bruges. I typiske CPU-tester viser ThorVG i gennemsnit 1,8 gange højere ydeevne sammenlignet med den bredt anvendte vektorgrafikmotor Skia, når man udfører typiske opgaver inden for vektorvisualisering. Fordelen er især tydelig i scenarier med intensiv brug af geometri, såsom visualisering af rektangler, streger, rotationer og cirkler (screenshot 3).
- ThorVG Janitor
- Den reelle demonstration af renderingperformance fra ThorVG kan ses i projektet ThorVG Janitor – et interaktivt spil designet til at demonstrere CPU-ydeevne under høj grafisk belastning. Scenen inkluderer hundredvis af fjender, skabt med partikelfbaseret grafik, multilags baggrunde af stjernehimmel med fuldskala rasterbilleder, realtidsvisuelle effekter såsom DropShadow og Blur, samt op til 25000 objekter, der gengives samtidigt. Selv ved maksimal belastning med en opløsning på 2K (2048×1152) viser projektet stabil ydeevne over 120 FPS, hvilket understreger effektiviteten og anvendeligheden af ThorVG til komplekse miljøer med mange effekter (video demonstration, screenshot).
- Andre betydningsfulde ændringer
- Eksempel på integration af ThorVG i Godot. I denne video-demo ThorVG er integreret med Godot i et webmiljø til rendering af hundredvis af Lottie animationsobjekter med en hastighed på over 120 billeder per sekund. Denne demo viser potentialet for ThorVG i et webmiljø til glat og høj kvalitetsanimation under kørslen.
- Tilføjet tutorial eksempel for brugen af ThorVG WebCanvas.
- Tilføjet interaktiv ThorVG Playground.
- En wrapper til ThorVG til Swift-sproget er blevet tilføjet: https://github.com/thorvg/thorvg.swift.
- Eksempler på brug af ThorVG er flyttet til et separat repository https://github.com/thorvg/thorvg.example.
- Udgivet en udvidelse thorvg.vscode til VSCode for at skabe, redigere og forhåndsvise ThorVG-ressourcer direkte i Visual Studio Code-miljøet.
- I version 1.0 er der foretaget en betydelig omstrukturering af API'en, som har til formål at forbedre ydeevnen, brugervenligheden, konsistensen og kompatibiliteten med C.
- Støtte til TVG-billedeformatet (TVG) er blevet fjernet. Denne beslutning blev truffet for at forberede det nye ThorVG-billedeformat, der er udviklet med animation som hovedkoncept.
- Adskillige fejlrettelser og forbedringer af stabiliteten til produktionsbrug.
Kilde: linux.org.ru
