ThorVG 1.0

ThorVG 1.0 ThorVG 1.0 ThorVG 1.0

Am 31. Januar, nach anderthalb Jahren kontinuierlicher Entwicklung, wurde die Version 1.0 der leichten und tragbaren plattformĂŒbergreifenden Vektorgraphics-Bibliothek ThorVG, die zur Visualisierung von Vektorszenen und -animationen gedacht ist. Es werden Dateien in den Formaten unterstĂŒtzt Lottie und SVG Tiny 1.2 (eine Liste der implementierten Funktionen von SVG Tiny im Wiki des Projekts).

Die Bibliothek bietet benutzerfreundliche APIs zum Import, Erstellen und Anzeigen von Vektorgrafiken sowie zum Export in verschiedene Grafikformate, was sie universell fĂŒr den Einsatz in verschiedenen Softwareplattformen und Anwendungen zur Visualisierung grafischer Inhalte macht. Es werden auch Konsolenutools wie lottie2gif und svg2png bereitgestellt.

ThorVG wird zur Renderung von Vektorgrafiken in Projekten wie Tizen OS, Godot Engine, LVGL und den Playern dotLottie.

Das Projekt ist in C++ (Standard C++14) geschrieben und unterliegt der MIT-Lizenz.

Dies ist nicht nur ein Update, sondern eine neu gestaltete Basis fĂŒr leistungsstarke, skalierbare und transportable 2D-Vektorgrafiken auf allen Plattformen und GerĂ€ten. Im Laufe der Entwicklung hat sich ThorVG zu einer ausgereiften, produktionsbereiten Grafik-Engine entwickelt, die nachweisliche QualitĂ€t und Leistung in realen Anwendungen demonstriert hat.

ThorVG hat schnell an PopularitĂ€t gewonnen und ein wachsendes Interesse in der Community geweckt, was seine Evolution von einem Projekt in der frĂŒhen Phase zu einer weithin anerkannten und praktisch genutzten Vektorgrafik-Engine zeigt, die bereit fĂŒr den Einsatz in plattformĂŒbergreifenden Anwendungen ist.

Änderungsprotokoll:

  • Erweiterte Text-Rendermöglichkeiten, reiche visuelle Effekte und UnterstĂŒtzung fĂŒr genaue Überlagerungen zur Verbesserung des grafischen Ausdrucks.
    • UnterstĂŒtzung der horizontalen und vertikalen Ausrichtung, die eine prĂ€zise Kontrolle ĂŒber die Platzierung von Text in verschiedenen Kontexten der BenutzeroberflĂ€che ermöglicht.
    • Automatische Zeilenumbruch mit der Möglichkeit, den Modus auszuwĂ€hlen: nach Zeichen, nach Wörtern, intelligente UmbrĂŒche und Ellipsen zur Behandlung von Überlauf.
    • UnterstĂŒtzung fĂŒr manuelles Zeilenumbruch, das es Entwicklern ermöglicht, ZeilenumbrĂŒche explizit mit Hilfe von Zeilenumbruchzeichen wie \n zu steuern. Dadurch wird eine prĂ€zise Formatierung mehrzeiliger Textblöcke ermöglicht, insbesondere in dynamischen Layouts oder Textanimationen.
    • UnterstĂŒtzung fĂŒr anpassbare AbstĂ€nde zwischen Zeichen, die eine feine Anpassung zur Verbesserung der Lesbarkeit oder zur Erreichung bestimmter typografischer Stile ermöglicht.
    • UnterstĂŒtzung fĂŒr Textumrandungen, die es ermöglicht, stilistische Effekte zu erstellen und den Kontrast auf verschiedenen HintergrĂŒnden zu verbessern (Screenshot 1).
    • Ein umfassenderes und konsistenteres System von Überblendmodi wurde eingefĂŒhrt, das das Verhalten der Überblendmodi erheblich verbessert und Formeln sowie Logik der Komposition an Branchenstandards wie Lottie, SVG und die W3C-Spezifikation "Compositing and Blending" anpasst. Diese Verbesserungen sorgen fĂŒr eine grĂ¶ĂŸere visuelle Konsistenz und plattformĂŒbergreifende KompatibilitĂ€t, insbesondere in Web- und Animations-Workflows.
    • Die folgenden Überblendmodi wurden implementiert und unterstĂŒtzt: "Farbton", "SĂ€ttigung", "Farbe" und "Helligkeit" unter Verwendung der HSL-Farbkompositionsmethode. Diese Modi verbessern die KompatibilitĂ€t mit Lottie-Schichteffekten und zukĂŒnftiger SVG-MischunterstĂŒtzung (Screenshot 2).
    • Bedeutende Verbesserungen und Erweiterungen in visuellen Effekten auf der Szenenebene, die Vektorgrafik ausdrucksvoller und visuell ansprechender machen:
      • Schatteneffekt mit Gaußschem Weichzeichnerfilter (Video-Demonstration).
      • Farbersetzungsmethoden, die das Erscheinungsbild von Grafiken verĂ€ndern, indem sie die Art und Weise, wie Farben auf Basis des Farbtons angewendet, gemischt oder zugeordnet werden, neu definieren (Video-Demonstration).
    • Neue Hilfsfunktionen wurden hinzugefĂŒgt, um die interaktiven Möglichkeiten zu erweitern. Dazu gehört die UnterstĂŒtzung von Abfragen zur rĂ€umlichen Information (Demonstration) und die Erkennung von Treffer auf angezeigte Objekte (Video-Demonstration).
  • Erweiterte Lottie-Animationsfunktionen fĂŒr plattformĂŒbergreifende Wiedergabe, einschließlich modularer Web Player-Vorlagen, die hinsichtlich GrĂ¶ĂŸe, Leistung und Rendering-Modus (CPU/GPU) optimiert sind.
    • Bedeutende Verbesserungen in der UnterstĂŒtzung von Lottie-Animationen mit verbesserter KompatibilitĂ€t, FlexibilitĂ€t und InteraktivitĂ€t auf allen Plattformen. Das Spektrum der unterstĂŒtzten Lottie-Funktionen und -AusdrĂŒcke wurde nicht nur erweitert, sondern es wurden auch Werkzeuge fĂŒr Entwickler bereitgestellt, mit denen sich das Verhalten von Animationen zur Laufzeit dynamisch steuern lĂ€sst, was ThorVG zu einer der leistungsstĂ€rksten Lottie-Wiedergabebibliotheken auf dem Markt macht. Liste der implementierten Funktionen im Projekt-Wiki.
    • Das .lot-Dateiformat ist mittlerweile der neue offizielle Standard der IANA fĂŒr Lottie-Dateien. ThorVG unterstĂŒtzt jetzt offiziell .lot als Standarddateiformat fĂŒr Lottie-Dateien zusĂ€tzlich zur traditionellen Erweiterung .json.
    • Tweening
      • Die UnterstĂŒtzung fĂŒr die Interpolation zwischen nicht linear benachbarten SchlĂŒsselbildern wurde hinzugefĂŒgt, was glattere ÜbergĂ€nge und prĂ€zisere Zeitkontrolle ermöglicht. Diese Verbesserung ist besonders wirksam bei der Wiedergabe von animationsbasierten ZustĂ€nden (auch bekannt als Marker-basiertes Playback) in Lottie. In vielen FĂ€llen sind Animationen darauf ausgelegt, auf komplexe, nicht lineare Weise zwischen ZustĂ€nden zu wechseln. Traditionelles Lottie mit seiner streng sequentiellen Zeitstruktur hat oft Schwierigkeiten mit solchen Szenarien, was hĂ€ufig zu abrupten RĂŒckschlĂ€gen oder unbeholfenen SprĂŒngen beim Übergang zwischen nicht aufeinanderfolgenden SchlĂŒsselbildern fĂŒhrt. Video-Demonstration 1, Video-Demonstration 2.
      • Mit Tweening können Entwickler jetzt die Interpolation direkt zwischen zwei einzelnen SchlĂŒsselbildern durchfĂŒhren, auch wenn diese nicht linear benachbart auf der Zeitachse sind. Dies ermöglicht natĂŒrlichere und flĂŒssigere visuelle Effekte bei ÜbergĂ€ngen zwischen ZustĂ€nden und erhöht erheblich die FlexibilitĂ€t und RealitĂ€tsnĂ€he interaktiver Animationen. Video-Demonstration 1, Video-Demonstration 2.
    • Jetzt (als experimentelle Funktion) wird die Überschreibung von Werten von Ausdrucksvariablen zur Laufzeit unterstĂŒtzt, was die dynamische AusfĂŒhrung von Skriptlogik basierend auf Benutzereingaben ermöglicht. Dies macht es zu einem besonders leistungsstarken Werkzeug zur Erstellung interaktiver Animationen mit Lottie-Ressourcen, mit dem individuelle Variationen ĂŒber das ursprĂŒngliche Design hinaus erstellt werden können.Video-Demonstration).
    • Ein anpassbarer Asset Resolver wurde hinzugefĂŒgt, der mehr FlexibilitĂ€t beim Laden externer Ressourcen (z. B. Bilder), auf die von Lottie-Animationen verwiesen wird, bietet.
    • Erweiterte UnterstĂŒtzung fĂŒr die Funktion Lottie LayerEffect, die reichhaltige visuelle Verbesserungen direkt auf den Animationsebenen ermöglicht, mit den oben beschriebenen Effekten.
    • Da einige Effekte ressourcenintensiv sein können, wurde eine Option zur Anpassung der QualitĂ€t und Leistung beim Rendern von Effekten angeboten, die sich ideal fĂŒr die Optimierung auf Plattformen mit eingeschrĂ€nkten CPU-Ressourcen eignet. Dies ermöglicht Entwicklern, die Genauigkeit des Renderings zu steuern und die Leistung je nach Zielplattform zu optimieren.
    • Die UnterstĂŒtzung fĂŒr AusdrĂŒcke wurde durch die HinzufĂŒgung der folgenden SchlĂŒsselmerkmale und Eigenschaften erweitert:
      • wiggle, temporalWiggle: Anwendung zufĂ€lliger Bewegungen, die von der Zeit abhĂ€ngen.
      • pointOnPath: Berechnung der Position entlang eines Pfades.
      • propertyIndex, groupIndex: Verweis auf den Index der Eigenschaft oder Gruppe.
      • value, property, effect: Zugriff auf die Werte von Eigenschaften und externen Effekten.
    • Genauere Übereinstimmung mit den Spezifikationen:
      • TextFollowPath – eine neue Spezifikation, die es dem Text ermöglicht, willkĂŒrlichen VektorpïŹ‚aden zu folgen (Video-Demonstration).
      • Textausrichtungsparameter – genauere Darstellung von Textebenen basierend auf den Einstellungen ihrer horizontalen und vertikalen Ausrichtung (Video-Demonstration).
      • Maskenerweiterung – eine neue Funktion, die eine genauere Kontrolle ĂŒber den Einfluss der Maskenform auf die visuelle Komposition ermöglicht (Video-Demonstration).
  • SVG
    • ThorVG ermöglicht jetzt den Zugriff auf einzelne SVG-Elemente und deren Änderungen durch eindeutige id-Attribute, die in der Original-SVG-Datei definiert sind. Diese Funktion ermöglicht Entwicklern, spezifische Vektorgrafiken in der importierten SVG-Szene direkt auszuwĂ€hlen und zu manipulieren, was sich ideal fĂŒr interaktive oder dynamische Nutzungsszenarien eignet (z. B. thematische Gestaltung, Hervorhebung).
    • Bestellen Effekt der Gaußschen UnschĂ€rfe.
  • Intelligentes Rendern
    • Der Software-Engine ThorVG unterstĂŒtzt jetzt intelligentes partielles Rendering, das effizientere Rendering-Workflows ermöglicht, indem nur die Teile der Vektorszene aktualisiert werden, die sich geĂ€ndert haben. Durch das interne Verfolgen von geĂ€nderten Bereichen minimiert es unnötige Neudarstellungen und optimiert die Gesamtleistung. Diese Funktion bietet erhebliche Vorteile in Szenarien wie UI-Rendering, Gestaltungstools oder Anwendungen, in denen der Großteil der Szene statisch bleibt und zwischen den Frames nur kleine Elemente aktualisiert werden. In solchen FĂ€llen kann der Verzicht auf ein vollstĂ€ndiges Rendering der Szene die Rechenlast erheblich reduzieren und die energieeffizienz steigern, was insbesondere fĂŒr mobile und eingebettete Systeme von großer Bedeutung ist.
    • Um dieses Ziel zu erreichen, verwendet ThorVG 1.0 eine Kombination aus algorithmischen Methoden, die speziell fĂŒr partielles Rendering entwickelt wurden. Im Folgenden sind die Hauptstrategien, die dieser System zugrunde liegen:
      • Algorithmus des linearen Durchgangs: Die Formen werden nach den x-Koordinaten sortiert und eine Strategie des linearen Durchgangs wird angewendet, um unnötige ÜberprĂŒfungen der "schmutzigen" Bereiche zu reduzieren. Dies reduziert die KomplexitĂ€t von O(N × M) auf O(N + M + K + N log N), wobei N die Anzahl der Formen, M die Anzahl der "schmutzigen" Bereiche und K die Anzahl der tatsĂ€chlichen Überschneidungen ist.
      • Teilung und bedingte ZusammenfĂŒhrung: Eine feingliedrige Teilung der Teilbereiche wird mit einer intelligenten ZusammenfĂŒhrung ausgewogen, um Fragmentierung zu vermeiden. Dabei wird dem horizontalen ZusammenfĂŒhren PrioritĂ€t eingerĂ€umt, um die Speichercache-Nutzung effizienter zu gestalten.
      • RĂ€umliche Teilung (Standard 4×4 Raster): Die RenderoberflĂ€che ist in 16 Bereiche unterteilt, wodurch nur die entsprechenden "schmutzigen" Bereiche der Formen ĂŒberprĂŒft werden, was die Kosten bei komplexen Updates der BenutzeroberflĂ€che erheblich reduziert.
    • Durch die Zusammenarbeit dieser Techniken wird ein flĂŒssigeres und schnelleres Rendering gewĂ€hrleistet, insbesondere in eingebetteten Systemen oder Echtzeitsystemen, in denen hĂ€ufig partielle Aktualisierungen stattfinden. Detailliertere Informationen werden in einem separaten Beitrag veröffentlicht. Blogs.
    • Bitte beachten Sie, dass bei hochdynamischen Inhalten, wie dynamischen Spielen oder Vollbildanimationen, bei denen nahezu alle Objekte in jedem Frame verĂ€ndert werden, eine partielle Darstellung wenig oder gar keinen Leistungsgewinn bringt und sogar zu geringen Overheads fĂŒhren kann. In solchen FĂ€llen ist es hĂ€ufig besser, eine vollstĂ€ndige Szenendarstellung zu wĂ€hlen. Aus diesem Grund unterstĂŒtzt ThorVG sowohl partielle als auch vollstĂ€ndige Renderkonfigurationen, was Ihnen die Möglichkeit gibt, den optimalen Ansatz fĂŒr Ihr Anwendungsbeispiel auszuwĂ€hlen. Sie können die Leistung Ihres Produkts analysieren und eine fundierte Entscheidung treffen, indem Sie die Option Meson -Dpartial=[true/false] und die Option EngineOption::Smart der Klasse SwCanvas verwenden.

    auto canvas = SwCanvas::gen(EngineOption::Smart);

  • Eine neue Ära der Integration von Webtechnologien mit WebGL, WebGPU und leichtgewichtigem WebCanvas fĂŒr nahtloses Rendering im Browser
    • Die Backends WebGL und WebGPU sind jetzt offiziell fĂŒr den Produktionsgebrauch bereit. Diese GPU-basierten Renderer bieten jetzt volle funktionale KompatibilitĂ€t mit dem traditionellen CPU-Backend und unterstĂŒtzen alle Funktionen des ThorVG Canvas mit der gleichen BildqualitĂ€t und -stabilitĂ€t. Im Vergleich zur Version 0.15 hat sich die Rendering-Leistung der GPU um mehr als 150 % erhöht, was eine deutliche Verbesserung beim Rendering von Web-Vektorgrafiken in Echtzeit gewĂ€hrleistet.
  • Deutliche Leistungssteigerung in Umgebungen mit strengen CPU/GPU-Leistungsanforderungen und eingebetteten Umgebungen
    • ThorVG 1.0 bietet verbesserte Leistungen im Vergleich zur Version 0.15, mit einer merklichen Steigerung sowohl bei CPU als auch bei GPU.
    • SchlĂŒsseloptimierungen:
      • Verbesserte Effizienz der Rendering-Pipeline.
      • Reduzierte Overheads bei der Zuweisung von Frame-Puffern.
      • Optimierte Analyse von Lottie-Kompositionen.
      • Verbessertes Batch-Rendering und GPU-Caching.
    • ThorVG ist fĂŒr die Rasterung auf CPU-Basis optimiert und legt den Schwerpunkt auf vektorielle Visualisierung in Umgebungen, in denen die GPU-Ressourcen begrenzt, nicht verfĂŒgbar oder absichtlich nicht genutzt werden. In typischen CPU-Tests zeigt ThorVG eine im Durchschnitt 1,8-mal höhere Leistung im Vergleich zur weit verbreiteten Vektorgrafik-Engine Skia bei der DurchfĂŒhrung typischer Aufgaben der vektoriellen Visualisierung. Der Vorteil ist besonders offensichtlich in Szenarien mit intensiver geometrischer Nutzung, wie der Visualisierung von Rechtecken, Strichen, Drehungen und Kreisen (Screenshot 3).
  • ThorVG Janitor
    • Eine echte Leistungsdemonstration des Renderings von ThorVG kann im Projekt gesehen werden ThorVG Janitor – einem interaktiven Spiel, das entwickelt wurde, um die CPU-Leistung bei hoher grafischer Belastung zu demonstrieren. Die Szene enthĂ€lt Hunderte von Feinden, die mit Partikelgrafiken erstellt wurden, mehrschichtige HintergrĂŒnde des Sternenhimmels mit vollwertigen Rasterbildern, Echtzeit-Visuelleffekte wie DropShadow und Blur sowie bis zu 25.000 Objekte, die gleichzeitig gerendert werden. Selbst bei maximaler Auslastung mit einer 2K-Auflösung (2048×1152) zeigt das Projekt eine stabile Leistung ĂŒber 120 FPS, was die Effizienz und Eignung von ThorVG fĂŒr komplexe Umgebungen mit vielen Effekten unterstreicht (Video-Demonstration, Screenshot).
  • Andere bedeutende Änderungen
    • Beispiel fĂŒr die Integration von ThorVG in Godot. In dieser Video-Demonstration ThorVG ist in Godot in einer Webumgebung integriert, um Hunderte von Lottie-Animationsobjekten mit mehr als 120 Frames pro Sekunde zu rendern. Diese Demonstration zeigt das Potenzial von ThorVG in Webumgebungen fĂŒr flĂŒssige und qualitativ hochwertige Animationen zur Laufzeit.
    • HinzugefĂŒgt Lernbeispiel Verwendung von ThorVG WebCanvas.
    • Interaktive hinzugefĂŒgt ThorVG Playground.
    • Ein Wrapper fĂŒr ThorVG fĂŒr die Sprache Swift hinzugefĂŒgt: https://github.com/thorvg/thorvg.swift.
    • Beispiele zur Verwendung von ThorVG wurden in ein separates Repository ĂŒbertragen https://github.com/thorvg/thorvg.example.
    • Eine Erweiterung veröffentlicht thorvg.vscode fĂŒr VSCode zur Erstellung, Bearbeitung und Vorschau von ThorVG-Ressourcen direkt in der Umgebung von Visual Studio Code.
    • In Version 1.0 wurde die API erheblich umstrukturiert, um die Leistung, Benutzerfreundlichkeit, Konsistenz und KompatibilitĂ€t mit C zu verbessern.
    • Die UnterstĂŒtzung fĂŒr das TVG Picture-Format (TVG) wurde eingestellt. Diese Entscheidung wurde getroffen, um das neue ThorVG Picture-Format vorzubereiten, das mit Animationen als Hauptkonzept entwickelt wurde.
    • Zahlreiche Fehlerbehebungen und StabilitĂ€tsverbesserungen fĂŒr den produktiven Einsatz.

Quelle: linux.org.ru

60GB SSD 8Gb DDR4