31 januari, na anderhalf jaar onafgebroken ontwikkeling, werd versie 1.0 van de lichte en draagbare cross-platform bibliotheek voor vectorgrafiek uitgebracht ThorVG, bedoeld voor de visualisatie van vector scènes en animaties. Ondersteunt het importeren van bestanden in de formaten Lottie en SVG Tiny 1.2 (lijst van geïmplementeerde mogelijkheden van SVG Tiny in de Wiki van het project).
De bibliotheek biedt handige API's voor het importeren, creëren en weergeven van vectorgraphics, evenals voor export naar verschillende grafische formaten, waardoor het multifunctioneel is voor gebruik in verschillende softwareplatforms en applicaties voor het visualiseren van grafische inhoud. Ook worden de consoletools lottie2gif en svg2png meegeleverd.
ThorVG wordt gebruikt voor het renderen van vectorgrafiek in projecten zoals Tizen OS, Godot Engine, LVGL en spelers dotLottie.
Het project is geschreven in C++ (standaard C++14) en wordt verspreid onder de MIT-licentie.
Dit is niet zomaar een update; het is een opnieuw opgebouwde basis voor high-performance, schaalbare en draagbare tweedimensionale vectorgrafiek op alle platforms en apparaten. Tijdens de ontwikkeling is ThorVG uitgegroeid tot een volwassen, productieklare grafische engine, die bewezen kwaliteit en prestaties heeft laten zien in werkelijke toepassingen.
ThorVG heeft snel populariteit verworven en heeft groeiende interesse vanuit de gemeenschap aangewakkerd, wat de evolutie ervan van een vroeg fase project naar een breed erkende en praktisch gebruikte vector grafische engine weerspiegelt, klaar voor echte cross-platform toepassingen.
Wijzigingenlijst:
- Uitgebreide tekst-rendering mogelijkheden, rijke visuele effecten en ondersteuning voor nauwkeurige overlapping voor verbeterde grafische expressie
- Ondersteuning voor horizontale en verticale uitlijning, waarmee de positie van tekst in verschillende gebruikersinterface-contexten precies kan worden gecontroleerd.
- Automatische regelbreking met selectie van modus: op karakters, op woorden, intelligente breking en afkapping met een puntjes voor overflow-behandeling.
- Ondersteuning voor handmatige regelbreking, waardoor ontwikkelaars expliciet controle kunnen uitoefenen over regelbrekingen met behulp van nieuwe-regel tekens zoals \n. Dit stelt hen in staat om meerregelige tekstblokken nauwkeurig op te maken, vooral in dynamische lay-outs of tekstanimaties.
- Ondersteuning voor instelbare spatiëring tussen karakters, waardoor nauwkeurige aanpassingen mogelijk zijn voor verbeterde leesbaarheid of het bereiken van specifieke typografische stijlen.
- Ondersteuning voor tekstomtrek, waarmee stijlvolle effecten kunnen worden gecreëerd en het contrast op verschillende achtergronden kan worden verbeterd (screenshot 1).
- Een complexer en consistenter systeem van mengmodi is geïntroduceerd, dat het gedrag van mengmodi aanzienlijk verbetert en formules en compositielogica in lijn brengt met sectorstandaarden zoals Lottie, SVG en de W3C-specificatie 'Compositing and Blending'. Deze verbeteringen zorgen voor grotere visuele consistentie en cross-platform compatibiliteit, vooral in web- en animatieworkflows.
- De volgende mengmodi zijn gerealiseerd en worden ondersteund: 'Tint', 'Verzadiging', 'Kleur' en 'Helderheid' met gebruik van HSL-kleursamenstelling. Deze modi verbeteren de compatibiliteit met Lottie-laagseffecten en de toekomstige ondersteuning van SVG-mengingen (screenshot 2).
- Significante verbeteringen en uitbreidingen in visuele effecten op sceneniveau, waardoor vectorafbeeldingen expressiever en visueel rijker worden:
- Schaduw effect met een Gaussische vervaging (video demonstratie).
- Kleurvervangingsmethoden die de uitstraling van grafieken veranderen door de toepassing, het mengen of het afstemmen van kleuren op basis van tint te herschrijvend (video demonstratie).
- Nieuwe ondersteunende functies zijn toegevoegd voor het uitbreiden van interactieve mogelijkheden. Deze omvatten ondersteuning voor ruimtelijke informatiestatistieken (demonstratie) en het detecteren van hits op weergegeven objecten (video demonstratie).
- Geavanceerde Lottie-animatiemogelijkheden voor cross-platform afspelen, inclusief modulaire presets voor Web Player, geoptimaliseerd op grootte, prestaties en weergavemodus (CPU/GPU)
- Significante verbeteringen in de ondersteuning voor Lottie-animatie met verbeterde compatibiliteit, flexibiliteit en interactiviteit op alle platforms. Niet alleen is het scala aan ondersteunde functies en expressies van Lottie uitgebreid, maar zijn ook hulpmiddelen voor ontwikkelaars beschikbaar gesteld om het gedrag van animaties dynamisch te controleren tijdens runtime, waardoor ThorVG een van de krachtigste Lottie-afspeelbibliotheken op de markt is. Lijst van geïmplementeerde mogelijkheden in het Wiki-project.
- De extensie .lot is nu de officiële nieuwe standaard van IANA voor Lottie-bestanden. ThorVG ondersteunt nu officieel .lot als het standaard Lottie-bestandsformaat naast de traditionele .json-extensie.
- Twinning
- Ondersteuning voor interpolatie tussen niet-lineair aangrenzende sleutelframes is toegevoegd, wat zorgt voor soepelere overgangen en meer nauwkeurige tijdscontrole. Deze verbetering is vooral effectief bij het afspelen van animaties op basis van toestanden (ook bekend als afspelen op basis van markeringen) in Lottie. In veel gevallen zijn animaties bedoeld om op complexe, niet-lineaire manieren tussen toestanden te schakelen. Traditionele Lottie, met zijn strikte sequentiële tijdsstructuur, heeft het moeilijk met dergelijke scenario's, wat vaak leidt tot abrupte resets of onhandige sprongen bij overgangen tussen inconsistente sleutelframes: video-demonstratie 1, video-demonstratie 2.
- Met twinning kunnen ontwikkelaars nu interpoleren tussen twee afzonderlijke sleutelframes, zelfs als ze niet lineair aangrenzend zijn op de tijdlijn. Dit maakt natuurlijkere en soepelere visuele effecten mogelijk bij overgangen tussen toestanden, wat de flexibiliteit en realisme van interactieve animaties aanzienlijk verhoogt: video-demonstratie 1, video-demonstratie 2.
- Nu (als experimentele functie) is hername van variabele uitdrukkingswaarden tijdens runtime ondersteund, waardoor je dynamisch scriptlogica kunt uitvoeren op basis van gebruikersinvoer. Dit maakt het een bijzonder krachtig hulpmiddel voor het creëren van interactieve animaties met Lottie-resources, waarmee je unieke variaties kunt maken die verder gaan dan het oorspronkelijke ontwerp (video demonstratie).
- Een aanpasbare Asset Resolver-mechanisme is toegevoegd, wat zorgt voor meer flexibiliteit bij het laden van externe bronnen (zoals afbeeldingen) waarop Lottie-animaties verwijzen.
- Uitgebreide ondersteuning voor de Lottie LayerEffect-functie, waarmee rijke visuele verbeteringen rechtstreeks op de animatielagen kunnen worden toegepast met de hierboven beschreven effecten.
- Omdat sommige effecten veel middelen kunnen vereisen, is er een optie voor het aanpassen van de kwaliteit en prestaties bij het renderen van effecten voorgesteld, wat ideaal is voor optimalisatie op platforms met beperkte CPU-hulpmiddelen. Dit stelt ontwikkelaars in staat om de nauwkeurigheid van het renderen te beheersen en de prestaties te optimaliseren op basis van het doelplatform.
- De ondersteuning voor uitdrukkingen is uitgebreid door de toevoeging van de volgende belangrijke functies en eigenschappen:
- wiggle, temporalWiggle: toepassing van willekeurige beweging die afhankelijk is van de tijd.
- pointOnPath: het berekenen van de positie langs een pad.
- propertyIndex, groupIndex: verwijzing naar de index van een eigenschap of groep.
- value, property, effect: toegang tot waarden van eigenschappen en externe effecten.
- Nauwkeurigere overeenstemming met specificaties:
- TextFollowPath – een nieuwe specificatie die tekst in staat stelt om willekeurige vectorpaden te volgen (video demonstratie).
- Tekstuitlijningsparameters – een nauwkeuriger weergave van tekstlagen op basis van hun horizontale en verticale uitlijningsinstellingen (video demonstratie).
- Maskeruitbreiding – een nieuwe functie die het mogelijk maakt om de invloed van de maskervorm op de visuele compositie nauwkeuriger te controleren (video demonstratie).
- SVG
- ThorVG stelt nu in staat om toegang te krijgen tot individuele SVG-elementen en deze te wijzigen met unieke id-attributen die zijn gedefinieerd in het originele SVG-bestand. Deze functie stelt ontwikkelaars in staat om specifieke vectorfiguren in de geïmporteerde SVG-scène rechtstreeks te selecteren en te manipuleren, wat ideaal is voor interactieve of dynamische gebruiksscenario's (bijvoorbeeld thematische opmaak, markering).
- Ondersteuning gaussian blur effect.
- Intelligent renderen
- De software-engine ThorVG ondersteunt nu intelligente gedeeltelijke rendering, wat zorgt voor efficiëntere rendering-workflows door alleen die delen van de vector scène bij te werken die zijn veranderd. Dankzij de interne tracking van gewijzigde gebieden minimaliseert het onnodige hertekeningen en optimaliseert het de algemene prestatie. Deze functie biedt aanzienlijke voordelen in scenario's zoals het renderen van gebruikersinterfaces, ontwerptools of applicaties waarin het grootste deel van de scène statisch blijft en alleen kleine elementen tussen de frames worden bijgewerkt. In zulke gevallen kan het vermijden van volledige rendering van de scène de rekenbelasting aanzienlijk verlagen en de energie-efficiëntie verhogen, wat vooral waardevol is voor mobiele en embedded systemen.
- Om dit te bereiken, past ThorVG 1.0 een combinatie van algoritmische methoden toe die speciaal zijn ontwikkeld voor gedeeltelijke rendering. Hieronder staan de belangrijkste strategieën die ten grondslag liggen aan dit systeem:
- Lineaire doorloopalgoritme: vormen worden gesorteerd op x-coördinaten en er wordt een strategie voor lineaire doorloop toegepast om onnodige controles van 'vuile' gebieden te verminderen. Dit verlaagt de complexiteit van O(N × M) naar O(N + M + K + N log N), waarbij N het aantal vormen is, M het aantal 'vuile' gebieden en K het aantal daadwerkelijke overlappen.
- Splitsing en conditionele samenvoeging: fijnkorrelige splitsing van subgebieden wordt in balans gebracht met intelligente samenvoeging om fragmentatie te vermijden. Hierbij heeft horizontale samenvoeging prioriteit voor een efficiënter gebruik van het cachegeheugen.
- Spatial partitioning (standaard 4×4 grid): het renderingoppervlak is verdeeld in 16 gebieden, waardoor alleen de relevante 'vuile' gebieden van de vormen worden gecontroleerd, wat de overhead bij complexe updates van de gebruikersinterface aanzienlijk vermindert.
- Wanneer deze technieken samen worden gebruikt, zorgen ze voor een soepelere en snellere rendering, vooral in embedded systemen of realtime systemen, waar vaak gedeeltelijke updates plaatsvinden. Meer gedetailleerde informatie zal in een afzonderlijk bericht worden gepubliceerd. de blog.
- Houd er rekening mee dat bij zeer dynamische inhoud, zoals dynamische spellen of full-screen animaties, waarbij bijna alle objecten bij elke frame veranderen, gedeeltelijke rendering weinig of geen prestatievoordelen biedt en zelfs tot enige overhead kan leiden. In zulke gevallen is het meestal beter om volledige scène-rendering te kiezen. Om deze reden ondersteunt ThorVG zowel gedeeltelijke als volledige renderingconfiguraties, waardoor u de optimale benadering voor uw gebruiksgeval kunt kiezen. U kunt de prestaties van uw product analyseren en een onderbouwde beslissing nemen met behulp van de Meson-optie -Dpartial=[true/false] en de EngineOption::Smart-optie van de SwCanvas-klasse:
auto canvas = SwCanvas::gen(EngineOption::Smart);
- Een nieuw tijdperk van integratie van webtechnologieën met WebGL, WebGPU en een vereenvoudigde WebCanvas voor naadloze rendering in de browser
- De WebGL- en WebGPU-backends zijn nu officieel klaar voor productiegebruik. Deze GPU-gebaseerde renderers bieden volledige functionele compatibiliteit met de traditionele CPU-backend, waarbij ze alle mogelijkheden van ThorVG Canvas ondersteunen met dezelfde beeldkwaliteit en stabiliteit. In vergelijking met versie 0.15 is de GPU-renderingprestaties met meer dan 150% toegenomen, wat een aanzienlijke verbetering van de rendering van webvectorgraphics in realtime waarborgt.
- Significante prestatieverbeteringen in omgevingen met CPU/GPU-voedingsbeperkingen en in embedded omgevingen
- ThorVG 1.0 biedt verbeterde prestaties ten opzichte van versie 0.15, met een merkbare stijging zowel in CPU- als GPU-prestaties.
- Belangrijke optimalisaties:
- Verbeterde efficiëntie van de renderpijplijn.
- Verminderde overhead voor framebufferallocatie.
- Geoptimaliseerde analyse van Lottie-composities.
- Verbeterde batch-rendering en GPU-caching.
- ThorVG is geoptimaliseerd voor rasterisatie op basis van CPU, met de nadruk op vectorvisualisatie in omgevingen waar GPU-resources beperkt, niet beschikbaar of bewust niet gebruikt worden. In typische CPU-tests toont ThorVG gemiddeld een 1.8 keer hogere prestatie vergeleken met de veelgebruikte vector grafische engine Skia bij het uitvoeren van typische vectorvisualisatietaken. Het voordeel is bijzonder duidelijk in scenario's met intensief geometrisch gebruik, zoals het visualiseren van rechthoeken, streepjes, rotaties en cirkels (screenshot 3).
- ThorVG Janitor
- Een echte demonstratie van de renderprestaties van ThorVG is te zien in het project ThorVG Janitor – een interactieve game, ontwikkeld om de CPU-prestaties onder zware grafische belasting te demonstreren. De scène bevat honderden vijanden, gemaakt met behulp van deeltjesgebaseerde graphics, meerlagige achtergronden van de sterrenhemel met full-size rasterafbeeldingen, realtime visuele effecten zoals DropShadow en Blur, en tot 25000 objecten die tegelijkertijd gerenderd worden. Zelfs bij piekdrukte in 2K-resolutie (2048×1152) laat het project een stabiele prestatie van boven de 120 FPS zien, wat de efficiëntie en geschiktheid van ThorVG voor complexe omgevingen met veel effecten onderstreept (video demonstratie, screenshot).
- Andere belangrijke wijzigingen
- Voorbeeld van integratie van ThorVG in Godotwordt een tabel met wijzigingen en instructies voor de overgang naar de nieuwe configuratie gegeven. Voor meer informatie, zie deze video-demonstratie ThorVG is geïntegreerd met Godot in een webomgeving voor het renderen van honderden Lottie-animatieobjecten met meer dan 120 frames per seconde. Deze demonstratie toont het potentieel van ThorVG in webomgevingen voor soepele en van hoge kwaliteit animaties tijdens runtime.
- Toegevoegd tutorialvoorbeeld van het gebruik van ThorVG WebCanvas.
- Een interactieve ThorVG Playground.
- Een wrapper voor ThorVG voor de Swift-taal is toegevoegd: https://github.com/thorvg/thorvg.swift.
- Voorbeelden van het gebruik van ThorVG zijn overgebracht naar een aparte repository https://github.com/thorvg/thorvg.example.
- Een extensie is gepubliceerd thorvg.vscode voor VSCode voor het maken, bewerken en voorvertonen van ThorVG-resources direct in de Visual Studio Code-omgeving.
- In versie 1.0 is er een aanzienlijke herstructurering van de API uitgevoerd, gericht op het verbeteren van de prestaties, gebruiksvriendelijkheid, consistentie en compatibiliteit met C.
- De ondersteuning voor het TVG Picture (TVG) formaat is verwijderd. Deze beslissing werd genomen ter voorbereiding van het nieuwe ThorVG Picture formaat, dat is ontwikkeld met animatie als hoofconcept.
- Talrijke bugfixes en verbeteringen voor stabiliteit voor productiegebruik.
Bron: linux.org.ru
