31 stycznia, po półtorej roku nieprzerwanego rozwoju, wydano wersję 1.0 lekkiej i przenośnej biblioteki grafiki wektorowej działającej na wielu platformach. ThorVG, zaprojektowanej do wizualizacji scen wektorowych i animacji. Obsługiwane są pliki w formatach Lottie i SVG Tiny 1.2 (lista zaimplementowanych możliwości SVG Tiny w Wiki projektu).
Biblioteka oferuje przyjazne API do importu, tworzenia i wyświetlania grafiki wektorowej, jak również do jej eksportu do różnych formatów graficznych, co czyni ją uniwersalną dla różnych platform programowych i aplikacji do wizualizacji treści graficznych. Dostarczane są również narzędzia konsolowe lottie2gif i svg2png.
ThorVG jest wykorzystywany do renderowania grafiki wektorowej w takich projektach jak Tizen OS, Godot Engine, LVGL i odtwarzacze dotLottie.
Projekt napisany jest w języku C++ (standard C++14) i jest rozpowszechniany na licencji MIT.
To nie tylko aktualizacja – to przebudowana podstawa dla wysokowydajnej, skalowalnej i przenośnej grafiki wektorowej na wszystkich platformach i urządzeniach. W trakcie rozwoju ThorVG przekształcił się w dojrzały, gotowy do użycia silnik graficzny, który wykazał potwierdzoną jakość i wydajność w rzeczywistych aplikacjach.
ThorVG szybko zyskał popularność i wzbudził rosnące zainteresowanie wśród społeczności, co odzwierciedla jego ewolucję od wczesnego projektu do szeroko uznawanego i praktycznie używanego silnika grafiki wektorowej, gotowego do rzeczywistego użycia międzyplatformowego.
Lista zmian:
- Rozszerzone możliwości renderowania tekstu, bogate efekty wizualne i wsparcie dla precyzyjnego nakładania warstw w celu poprawy wyrazu graficznego.
- Wsparcie dla poziomego i pionowego wyrównania, umożliwiające dokładne kontrolowanie położenia tekstu w różnych kontekstach interfejsu użytkownika.
- Automatyczne łamanie linii z możliwością wyboru trybu: według znaków, według słów, inteligentne łamanie i przycinanie z wielokropkiem do obsługi przepełnienia.
- Wsparcie dla ręcznego łamania linii, pozwalające programistom na wyraźne kontrolowanie łamań za pomocą znaków nowej linii, takich jak \n. Umożliwia to dokładne formatowanie bloków tekstowych rozciągających się na kilka linii, szczególnie w dynamicznych układach lub animacjach tekstowych.
- Wsparcie dla dostosowanego odstępu między znakami, co umożliwia precyzyjne dostosowanie w celu poprawy czytelności lub osiągnięcia określonych stylów typograficznych.
- Wsparcie dla obwiedni tekstu, które pozwala na tworzenie efektów stylistycznych i poprawę kontrastu na różnych tłach (zrzut ekranu 1).
- Wprowadzono bardziej kompleksowy i spójny system trybów mieszania, który znacząco poprawia zachowanie trybów mieszania oraz dostosowuje formuły i logikę kompozycji do standardów branżowych, takich jak Lottie, SVG i specyfikacja W3C „Kompozycja i Mieszanie”. Te usprawnienia zapewniają większą spójność wizualną i zgodność między platformami, szczególnie w procesach pracy z siecią i animacjami.
- Zrealizowano i obsługiwano następujące tryby mieszania: „Odcień”, „Nasycenie”, „Kolor” i „Jasność” z wykorzystaniem kompozycji przestrzeni kolorów HSL. Te tryby poprawiają zgodność z efektami warstw Lottie i przyszłym wsparciem dla mieszania SVG (zrzut ekranu 2).
- Znaczące ulepszenia i rozszerzenia w efektach wizualnych na poziomie sceny, czyniąc grafikę wektorową bardziej wyrazistą i wizualnie bogatą:
- Efekt cienia z filtrem rozmycia Gaussa (demonstracja wideo).
- Metody zmiany kolorów, które zmieniają wygląd grafiki poprzez nadpisywanie sposobu stosowania, mieszania lub dopasowywania kolorów na podstawie odcienia (demonstracja wideo).
- Dodano nowe funkcje pomocnicze, aby rozszerzyć interaktywne możliwości. Należą do nich wsparcie dla zapytań dotyczących informacji przestrzennych (demonstracja) oraz wykrywanie trafień w wyświetlanie obiektów (demonstracja wideo).
- Rozszerzone możliwości animacji Lottie dla międzyplatformowego odtwarzania, w tym modułowe presety Web Player, zoptymalizowane pod względem rozmiaru, wydajności i trybu renderowania (CPU/GPU)
- Znaczące ulepszenia w wsparciu animacji Lottie z poprawą zgodności, elastyczności i interaktywności na wszystkich platformach. Rozszerzono nie tylko zakres wspieranych funkcji i wyrażeń Lottie, ale także dostarczono narzędzia dla deweloperów, które pozwalają na dynamiczne kontrolowanie zachowania animacji w czasie rzeczywistym, co czyni ThorVG jedną z najpotężniejszych bibliotek odtwarzania Lottie dostępnych na rynku. Lista zrealizowanych funkcji w projekcie Wiki.
- Obecnie rozszerzenie pliku .lot jest nowym oficjalnym standardem IANA dla plików Lottie. ThorVG teraz oficjalnie wspiera .lot jako standardowy format plików Lottie obok tradycyjnego rozszerzenia .json.
- Tweening
- Dodano wsparcie dla interpolacji między nieliniowo przylegającymi kluczowymi klatkami, co zapewnia płynniejsze przejścia i dokładniejsze zarządzanie czasem. To ulepszenie jest szczególnie skuteczne przy użyciu odtwarzania animacji opartego na stanach (znanego również jako odtwarzanie oparte na znacznikach) w Lottie. W wielu przypadkach animacje mają na celu przejścia między stanami w skomplikowany, nieliniowy sposób. Tradycyjny Lottie z jego ściśle sekwencyjną strukturą czasową ma trudności z takimi scenariuszami, co często prowadzi do nagłych zrywania lub niezręcznych skoków podczas przechodzenia między niespójnymi kluczowymi klatkami: film demo 1, film demo 2.
- Dzięki tweeningowi programiści mogą teraz interpolować bezpośrednio między dwoma oddzielnymi kluczowymi klatkami, nawet jeśli nie są one liniowo przylegające na osi czasu. Pozwala to uzyskać bardziej naturalne i płynne efekty wizualne podczas przejść między stanami, co znacznie zwiększa elastyczność i realizm interaktywnych animacji: film demo 1, film demo 2.
- Teraz (jako funkcja eksperymentalna) wspierane jest nadpisywanie wartości zmiennych wyrażeń w czasie wykonywania, co pozwala dynamicznie wykonywać logikę skryptu w oparciu o dane wejściowe użytkownika. Czyni to z niego szczególnie potężne narzędzie do tworzenia interaktywnych animacji z wykorzystaniem zasobów Lottie, pozwalając na tworzenie indywidualnych wariacji wykraczających poza oryginalny projekt (demonstracja wideo).
- Dodano konfigurowalny mechanizm Asset Resolver, zapewniający większą elastyczność przy ładowaniu zewnętrznych zasobów (np. obrazów), do których odwołują się animacje Lottie.
- Rozszerzone wsparcie dla funkcji Lottie LayerEffect, umożliwiającej osiąganie bogatych wizualnych ulepszeń bezpośrednio na warstwach animacji z efektami opisanymi powyżej.
- Ponieważ niektóre efekty mogą być zasobożerne, zaproponowano opcję dostosowania jakości i wydajności renderowania efektów, co jest idealne do optymalizacji na platformach z ograniczonymi zasobami CPU. Umożliwia to deweloperom kontrolowanie dokładności renderowania i optymalizację wydajności w zależności od docelowej platformy.
- Wsparcie dla wyrażeń zostało rozszerzone o dodanie następujących kluczowych funkcji i właściwości:
- wiggle, temporalWiggle: zastosowanie losowego ruchu, zależnego od czasu.
- pointOnPath: obliczanie pozycji wzdłuż ścieżki.
- propertyIndex, groupIndex: odwołanie do indeksu właściwości lub grupy.
- value, property, effect: dostęp do wartości właściwości i efektów zewnętrznych.
- Bardziej dokładne dopasowanie do specyfikacji:
- TextFollowPath – nowa specyfikacja, która pozwala tekstowi podążać za dowolnymi wektorowymi ścieżkami (demonstracja wideo).
- Parametry wyrównania tekstu – dokładniejsze odwzorowanie warstw tekstowych na podstawie ustawień ich poziomego i pionowego wyrównania (demonstracja wideo).
- Rozszerzenie maski – nowa funkcja, która pozwala bardziej precyzyjnie kontrolować wpływ kształtu maski na kompozycję wizualną (demonstracja wideo).
- SVG
- ThorVG teraz umożliwia uzyskiwanie dostępu do poszczególnych elementów SVG i ich modyfikację za pomocą unikalnych atrybutów id, zdefiniowanych w źródłowym pliku SVG. Ta funkcja pozwala deweloperom bezpośrednio wybierać i manipulować konkretnymi wektorowymi kształtami w zaimportowanej scenie SVG, co jest idealne dla interaktywnych lub dynamicznych scenariuszy użycia (np. motywy, wyróżnienia).
- Wsparcie efekt rozmycia Gaussa.
- Inteligentne renderowanie
- Silnik oprogramowania ThorVG teraz obsługuje inteligentne częściowe renderowanie, które zapewnia bardziej efektywne przepływy pracy poprzez aktualizację tylko tych części sceny wektorowej, które uległy zmianie. Dzięki wewnętrznemu śledzeniu zmienionych obszarów minimalizuje niepotrzebne ponowne renderowania i optymalizuje ogólną wydajność. Ta funkcja przynosi znaczące korzyści w takich scenariuszach, jak renderowanie interfejsu użytkownika, narzędzi projektowych czy aplikacji, w których większość sceny pozostaje statyczna, a między klatkami aktualizowane są tylko niewielkie elementy. W takich przypadkach rezygnacja z pełnego renderowania sceny może znacznie zmniejszyć obciążenie obliczeniowe i zwiększyć efektywność energetyczną, co jest szczególnie cenne w systemach mobilnych i wbudowanych.
- Aby osiągnąć ten cel, ThorVG 1.0 stosuje kombinację metod algorytmicznych, specjalnie zaprojektowanych do renderowania częściowego. Poniżej przedstawiono główne strategie, na których opiera się ten system:
- Algorytm liniowego przejścia: figury są sortowane według współrzędnych x, a strategia liniowego przejścia stosowana jest w celu zmniejszenia niepotrzebnych kontroli «brudnych» obszarów. To zmniejsza złożoność z O(N × M) do O(N + M + K + N log N), gdzie N to liczba figur, M to liczba «brudnych» obszarów, a K to liczba faktycznych nakładek.
- Podział i warunkowe łączenie: drobny podział subobszarów jest równoważony inteligentnym łączeniem, aby uniknąć fragmentacji. W tym przypadku priorytetem jest poziome łączenie, aby lepiej wykorzystać pamięć podręczną.
- Podział przestrzenny (domyślnie siatka 4×4): powierzchnia renderowania jest podzielona na 16 obszarów, co pozwala na sprawdzanie tylko odpowiednich «brudnych» obszarów figur, znacznie redukując opóźnienia przy skomplikowanych aktualizacjach interfejsu użytkownika.
- Pracując razem, te techniki zapewniają gładsze i szybsze renderowanie, szczególnie w systemach wbudowanych lub w czasie rzeczywistym, gdzie często występują częściowe aktualizacje. Bardziej szczegółowe informacje zostaną opublikowane w osobnym poście. blogu.
- Zwróć uwagę, że w przypadku treści o wysokiej dynamice, takich jak dynamiczne gry lub animacje pełnoekranowe, w których prawie wszystkie obiekty zmieniają się w każdej klatce, częściowe renderowanie oferuje niewielkie lub wręcz żadne korzyści wydajnościowe i może nawet prowadzić do niewielkich obciążeń. W takich przypadkach zazwyczaj lepiej wybrać pełne renderowanie sceny. Z tego powodu ThorVG wspiera zarówno częściową, jak i pełną konfigurację renderowania, co daje Ci możliwość wyboru optymalnego podejścia do swojego przypadku użycia. Możesz analizować wydajność swojego produktu i podjąć uzasadnioną decyzję, korzystając z opcji Meson -Dpartial=[true/false] oraz opcji EngineOption::Smart klasy SwCanvas:
auto canvas = SwCanvas::gen(EngineOption::Smart);
- Nowa era integracji technologii webowych z WebGL, WebGPU i uproszczonym WebCanvas dla bezproblemowego renderowania w przeglądarce
- Backendy WebGL i WebGPU są teraz oficjalnie gotowe do użycia w produkcji. Te renderery oparte na GPU oferują teraz pełną funkcjonalną zgodność z tradycyjnym backendem CPU, wspierając wszystkie możliwości ThorVG Canvas z taką samą jakością i stabilnością obrazu. W porównaniu do wersji 0.15, wydajność renderowania GPU wzrosła o ponad 150%, co zapewnia istotne polepszenie renderowania grafiki wektorowej webowej w czasie rzeczywistym.
- Znaczący wzrost wydajności w środowiskach z ograniczeniami dotyczącymi mocy CPU/GPU oraz wbudowanych środowiskach
- ThorVG 1.0 oferuje lepszą wydajność w porównaniu do wersji 0.15, z zauważalnym przyrostem zarówno po stronie CPU, jak i GPU.
- Kluczowe optymalizacje:
- Poprawiona efektywność potoku renderowania.
- Zredukowane obciążenie związane z przydzielaniem bufora klatek.
- Optymalizowana analiza kompozycji Lottie.
- Udoskonalone renderowanie wsadowe i buforowanie GPU.
- ThorVG został zoptymalizowany do rasteryzacji opartej na CPU, z naciskiem na wizualizację wektorową w środowiskach, gdzie zasoby GPU są ograniczone, niedostępne lub celowo nieużywane. W typowych testach CPU ThorVG demonstruje średnio 1,8 razy wyższą wydajność w porównaniu do powszechnie stosowanego silnika grafiki wektorowej Skia przy wykonywaniu typowych zadań wizualizacji wektorowej. Przewaga ta jest szczególnie widoczna w scenariuszach intensywnie wykorzystujących geometrię, takich jak wizualizacja prostokątów, linii, obrotów i okręgów (zrzut ekranu 3).
- ThorVG Janitor
- Rzeczywistą demonstrację wydajności renderowania ThorVG można zobaczyć w projekcie ThorVG Janitor – interaktywnej grze, zaprojektowanej w celu pokazania wydajności procesora przy wysokim obciążeniu graficznym. Scena obejmuje setki wrogów stworzonych za pomocą grafiki opartej na cząstkach, wielowarstwowe tła gwieździstego nieba z pełnoekranowymi obrazami rastrowymi, efekty wizualne w czasie rzeczywistym, takie jak DropShadow i Blur, a także do 25000 obiektów renderowanych jednocześnie. Nawet przy szczytowym obciążeniu w rozdzielczości 2K (2048×1152) projekt wykazuje stabilną wydajność powyżej 120 FPS, co podkreśla efektywność i przydatność ThorVG w skomplikowanych środowiskach z dużą ilością efektów (demonstracja wideo, zrzut ekranu).
- Inne znaczące zmiany
- Przykład integracji ThorVG w Godot. W w tej demonstracji wideo ThorVG zintegrowano z Godot w środowisku internetowym do renderowania setek obiektów animacji Lottie z prędkością ponad 120 klatek na sekundę. Ta demonstracja pokazuje potencjał ThorVG w środowisku internetowym do płynnej i wysokiej jakości animacji w czasie rzeczywistym.
- Dodano przykład szkoleniowy użycia ThorVG WebCanvas.
- Dodano interaktywny ThorVG Playground.
- Dodano wrapper ThorVG dla języka Swift: https://github.com/thorvg/thorvg.swift.
- Przykłady użycia ThorVG przeniesiono do oddzielnego repozytorium https://github.com/thorvg/thorvg.example.
- Opublikowano rozszerzenie thorvg.vscode dla VSCode, umożliwiające tworzenie, edytowanie i podglądanie zasobów ThorVG bezpośrednio w środowisku Visual Studio Code.
- W wersji 1.0 dokonano znaczącej restrukturyzacji API, mającej na celu zwiększenie wydajności, użyteczności, spójności i zgodności z C.
- Usunięto wsparcie dla formatu TVG Picture (TVG). Decyzja ta została podjęta w celu przygotowania nowego formatu ThorVG Picture, zaprojektowanego z myślą o animacji jako głównym koncepcie.
- Wielokrotne poprawki błędów i zwiększona stabilność do użytku produkcyjnego.
Źródło: linux.org.ru
