31 студзеня, пасля паўтара года бесперапыннай распрацоўкі, адбыўся выпуск 1.0 лёгкай і партатыўнай кросплатформавай бібліятэкі вектарнай графікі ThorVG, прызначанай для візуалізацыі вектарных сцэн і анімацый. Падтрымліваецца загрузка файлаў у фарматах Лотте и SVG Tiny 1.2 (спіс рэалізаваных магчымасцяў SVG Tiny у Wiki праекта).
Бібліятэкай прадастаўляюцца зручныя API для імпарту, стварэння і адлюстравання вектарнай графікі, а таксама для яе экспарту ў розныя графічныя фарматы, што робіць яе ўніверсальнай для выкарыстання ў розных праграмных платформах і дадатках для візуалізацыі графічнага кантэнту. Таксама пастаўляюцца кансольныя ўтыліты lottie2gif і svg2png.
ThorVG выкарыстоўваецца для рэндэрынгу вектарнай графікі ў такіх праектах, як Tizen OS, Рухавік Гадо, LVGL і плэераў dotLottie.
Праект напісаны на мове C++ (стандарт C++14) і распаўсюджваецца па ліцэнзіі MIT.
Гэта не проста абнаўленне - гэта перабудаваная аснова для высокапрадукцыйнай, якая маштабуецца і пераноснай двухмернай вектарнай графікі на ўсіх платформах і прыладах. За час распрацоўкі ThorVG ператварыўся ў спелы, гатовы да вытворчасці графічны рухавічок, які прадэманстраваў правераную якасць і прадукцыйнасць у рэальных дадатках.
ThorVG хутка заваяваў папулярнасць і выклікаў якая расце цікавасць з боку супольнасці, што адлюстроўвае яго эвалюцыю ад праекта на ранняй стадыі да шырока прызнанага і практычна выкарыстоўванага вектарнага графічнага рухавічка, гатовага да рэальнага кросплатформавага выкарыстання.
Спіс змен:
- Пашыраныя магчымасці рэндэрынгу тэксту, багатыя візуальныя эфекты і падтрымка дакладнага накладання для палепшанага графічнага выраза
- Падтрымка гарызантальнага і вертыкальнага выраўноўвання, якая дазваляе сапраўды кантраляваць размяшчэнне тэксту ў розных кантэкстах карыстацкага інтэрфейсу.
- Аўтаматычная разбіўка радкоў з магчымасцю выбару рэжыму: па сімвалах, па словах, інтэлектуальная разбіўка і ўсячэнне шматкроп'ем для апрацоўкі перапаўнення.
- Падтрымка ручнога разрыву радкоў, дазваляючы распрацоўнікам відавочна кантраляваць парывы радкоў з дапамогай знакаў новага радка, такіх як \n. Гэта дазваляе сапраўды фарматаваць шматрадковыя тэкставыя блокі, асабліва ў дынамічных макетах ці тэкставых анімацыях.
- Падтрымка наладжвальнай адлегласці паміж знакамі, што дазваляе выконваць дакладную наладу для паляпшэння чытальнасці ці дасягненні вызначаных друкарскіх стыляў.
- Падтрымка абвядзення тэксту, якая дазваляе ствараць стылістычныя эфекты і паляпшаць кантраст на розных фонах (скрыншот 1).
- Прадстаўлена больш комплексная і ўзгодненая сістэма рэжымаў накладання, якая значна паляпшае паводзіны рэжымаў накладання і прыводзячы формулы і логіку кампазіцыі ў адпаведнасць з галіновымі стандартамі, такімі як Lottie, SVG і спецыфікацыя W3C "Compositing and Blending". Гэтыя паляпшэнні забяспечваюць вялікую візуальную ўзгодненасць і кросплатформавую сумяшчальнасць, асабліва ў вэб-і анімацыйных працоўных працэсах.
- Рэалізаваны і падтрымліваюцца наступныя рэжымы накладання: "Адценне", "Насычанасць", "Колер" і "Яркасць" з выкарыстаннем кампазіцыі каляровай прасторы HSL. Гэтыя рэжымы паляпшаюць сумяшчальнасць з эфектамі пластоў Lottie і будучай падтрымкай змешвання SVG (скрыншот 2).
- Значныя паляпшэнні і пашырэнні ў візуальных эфектах на ўзроўні сцэны, робячы вектарную графіку больш выразнай і візуальна насычанай:
- Эфект цені з фільтрам Гаўсавага размыцця (відэа-дэманстрацыя).
- Метады замены кветак, якія змяняюць вонкавы выгляд графікі шляхам пераазначэння спосабу ўжывання, змешванні ці супастаўленні колераў на аснове адцення.відэа-дэманстрацыя).
- Дададзены новыя дапаможныя функцыі для пашырэння інтэрактыўных магчымасцяў. Да іх адносяцца падтрымка запытаў прасторавай інфармацыі (дэманстрацыя) і выяўленне трапленняў па паказу аб'ектаў (відэа-дэманстрацыя).
- Пашыраныя магчымасці анімацыі Lottie для кросплатформавага прайгравання, уключаючы модульныя прасэты Web Player, аптымізаваныя па памеры, прадукцыйнасці і рэжыму рэндэрынгу (CPU/GPU)
- Значныя паляпшэнні ў падтрымцы анімацыі Lottie з паляпшэннем сумяшчальнасці, гнуткасці і інтэрактыўнасці на ўсіх платформах. Пашыраны не толькі спектр падтрымліваемых функцый і выразаў Lottie, але і прадстаўлены прылады для распрацоўнікаў, якія дазваляюць дынамічна кантраляваць паводзіны анімацыі падчас выканання, што робіць ThorVG адной з самых магутных бібліятэк прайгравання Lottie з даступных на рынку. Спіс рэалізаваных магчымасцяў у Wiki праекту.
- На сённяшні дзень пашырэнне файла .lot з'яўляецца новым афіцыйным стандартам IANA для файлаў Lottie. ThorVG зараз афіцыйна падтрымлівае .lot у якасці стандартнага фармату файлаў Lottie у дадатак да традыцыйнага пашырэння .json.
- Твінінг
- Дададзена падтрымка інтэрпаляцыі паміж нелінейна сумежнымі ключавымі кадрамі, што забяспечвае больш плыўныя пераходы і больш дакладнае кіраванне часам. Гэта паляпшэнне асабліва эфектыўна пры выкарыстанні з прайграваннем анімацыі на аснове станаў (таксама вядомым як прайграванне на аснове маркераў) у Lottie. У многіх выпадках анімацыі прызначаны для пераходу паміж станамі складанымі, нелінейнымі спосабамі. Традыцыйная Lottie з яе строга паслядоўнай часавай структурай з цяжкасцю спраўляецца з такімі сцэнарамі, што часта прыводзіць да рэзкіх скідаў або няспраўных скокаў пры пераходзе паміж непаслядоўнымі ключавымі кадрамі: відэа-дэманстрацыя 1, відэа-дэманстрацыя 2.
- З дапамогай твінінгу распрацоўшчыкі зараз могуць выконваць інтэрпаляцыю непасрэдна паміж двума асобнымі ключавымі кадрамі, нават калі яны не з'яўляюцца лінейна сумежнымі на часовай шкале. Гэта дазваляе дамагчыся больш натуральных і плыўных візуальных эфектаў пры пераходах паміж станамі, што значна падвышае гнуткасць і рэалістычнасць інтэрактыўных анімацый: відэа-дэманстрацыя 1, відэа-дэманстрацыя 2.
- Цяпер (у якасці эксперыментальнай функцыі) падтрымліваецца перазапіс значэнняў зменных выразаў падчас выканання, што дазваляе дынамічна выконваць логіку скрыпту на аснове ўводу карыстальніка. Гэта робіць яго асабліва магутнай прыладай для стварэння інтэрактыўных анімацый з выкарыстаннем рэсурсаў Lottie, дазваляючы ствараць індывідуальныя варыяцыі, якія выходзяць за рамкі арыгінальнага дызайну (відэа-дэманстрацыя).
- Дададзены наладжвальны механізм Asset Resolver, які забяспечвае вялікую гнуткасць пры загрузцы вонкавых рэсурсаў (напрыклад, малюнкаў), на якія спасылаюцца анімацыі Lottie.
- Пашыраная падтрымка функцыі Lottie LayerEffect, якая дазваляе ажыццяўляць багатыя візуальныя паляпшэнні непасрэдна на пластах анімацыі з эфектамі, апісанымі вышэй.
- Паколькі некаторыя эфекты могуць быць рэсурсаёмістымі, прапанавана опцыя налады якасці і прадукцыйнасці для рэндэрынгу эфектаў, што ідэальна падыходзіць для аптымізацыі на платформах з абмежаванымі рэсурсамі CPU. Гэта дазваляе распрацоўшчыкам кантраляваць дакладнасць рэндэрынгу і аптымізаваць прадукцыйнасць у залежнасці ад мэтавай платформы.
- Падтрымка выразаў была пашырана за кошт дадання наступных ключавых функцый і ўласцівасцяў:
- wiggle, temporalWiggle: прымяненне выпадковага руху, які залежыць ад часу.
- pointOnPath: вылічэнне становішча ўздоўж шляху.
- propertyIndex, groupIndex: спасылка на індэкс уласцівасці або групы.
- value, property, effect: доступ да значэнняў уласцівасцей і знешніх эфектаў.
- Больш дакладная адпаведнасць спецыфікацыям:
- TextFollowPath – новая спецыфікацыя, якая дазваляе тэксту прытрымлівацца адвольных вектарных шляхоў (відэа-дэманстрацыя).
- Параметры выраўноўвання тэксту - больш дакладнае адлюстраванне тэкставых пластоў на аснове налад іх гарызантальнага і вертыкальнага выраўноўвання (відэа-дэманстрацыя).
- Пашырэнне маскі - новая функцыя, якая дазваляе больш дакладна кантраляваць уплыў формы маскі на візуальную кампазіцыю (відэа-дэманстрацыя).
- SVG
- ThorVG зараз дазваляе атрымліваць доступ да асобных элементаў SVG і змяняць іх з дапамогай унікальных атрыбутаў id, вызначаных у зыходным файле SVG. Гэтая функцыя дазваляе распрацоўнікам напроста выбіраць і маніпуляваць пэўнымі вектарнымі постацямі ў імпартаванай сцэне SVG, што ідэальна падыходзіць для інтэрактыўных ці дынамічных сцэнараў выкарыстання (напрыклад, тэматычнае афармленне, вылучэнне).
- Падтрымка эфекту размыцця па Гаўсе.
- Інтэлектуальны рэндэрынг
- Праграмны рухавічок ThorVG зараз падтрымлівае інтэлектуальны частковы рэндэрынгу, які забяспечвае больш эфектыўныя працоўныя працэсы рэндэрынгу за кошт абнаўлення толькі тых частак вектарнай сцэны, якія змяніліся. Дзякуючы ўнутранаму адсочванню змененых абласцей, ён зводзіць да мінімуму непатрэбныя перамалёўкі і аптымізуе агульную прадукцыйнасць. Гэта функцыя забяспечвае значныя перавагі ў такіх сцэнарах, як рэндэрынгу карыстацкага інтэрфейсу, інструменты праектавання або дадатку, у якіх большая частка сцэны застаецца статычнай, а паміж кадрамі абнаўляюцца толькі невялікія элементы. У такіх выпадках адмова ад поўнага рэндэрынгу сцэны можа значна знізіць вылічальную нагрузку і павысіць энергаэфектыўнасць, што асабліва каштоўна для мабільных і ўбудаваных сістэм.
- Для дасягнення гэтай мэты ThorVG 1.0 прымяняе камбінацыю алгарытмічных метадаў, спецыяльна распрацаваных для частковага рэндэрынгу. Ніжэй прыведзены асноўныя стратэгіі, якія ляжаць у аснове гэтай сістэмы:
- Алгарытм лінейнага праходу: фігуры сартуюцца па каардынатах x, і прымяняецца стратэгія лінейнага праходу для памяншэння непатрэбных праверак «брудных» абласцей. Гэта зніжае складанасць з O (N × M) да O (N + M + K + N log N), дзе N – колькасць фігур, M – колькасць "брудных" абласцей, K – колькасць фактычных перакрыццяў.
- Падзел і ўмоўнае зліццё: дробназярністы падзел субабласцей ураўнаважваецца інтэлектуальным зліццём для пазбягання фрагментацыі. Пры гэтым прыярытэт аддаецца гарызантальнаму зліццю для больш эфектыўнага выкарыстання кэша памяці.
- Прасторавы падзел (па змаўчанні сетка 4×4): паверхня рэндэрынгу падзелена на 16 абласцей, што дазваляе правяраць толькі адпаведныя "брудныя" вобласці фігур, значна скарачаючы накладныя выдаткі пры складаных абнаўленнях карыстацкага інтэрфейсу.
- Працуючы разам, гэтыя тэхнікі забяспечваюць больш плыўны і хуткі рэндэрынгу, асабліва ва ўбудаваных сістэмах або сістэмах рэальнага часу, дзе часта адбываюцца частковыя абнаўленні. Больш падрабязная інфармацыя будзе апублікавана ў асобным пасце блога.
- Звярніце ўвагу, што ў выпадку высокадынамічнага кантэнту, такога як дынамічныя гульні або поўнаэкранныя анімацыі, дзе амаль усе аб'екты змяняюцца ў кожным кадры, частковы рэндэрынгу дае мала ці наогул не дае пераваг у прадукцыйнасці і можа нават прывесці да невялікіх накладных выдаткаў. У такіх выпадках звычайна лепш выбіраць поўны рэндэрынг сцэны. Па гэтай прычыне ThorVG падтрымлівае як частковую, так і поўную канфігурацыю рэндэрынгу, што дае вам магчымасць абраць аптымальны падыход для вашага выпадку выкарыстання. Вы можаце прааналізаваць прадукцыйнасць вашага прадукта і прыняць абгрунтаванае рашэнне, выкарыстаючы опцыю Meson -Dpartial=[true/false] і опцыю EngineOption::Smart класа SwCanvas:
auto canvas = SwCanvas::gen(EngineOption::Smart);
- Новая эра інтэграцыі вэб-тэхналогій з WebGL, WebGPU і аблегчаным WebCanvas для бясшвоўнага рэндэрынгу ў браўзэры
- Бэкэнды WebGL і WebGPU зараз афіцыйна гатовыя да вытворчага выкарыстання. Гэтыя рэндэрэры на базе GPU зараз прапануюць поўную функцыянальную сумяшчальнасць з традыцыйным бэкэндам CPU, падтрымліваючы ўсе магчымасці ThorVG Canvas з такім жа якасцю і стабільнасцю малюнка. У параўнанні з версіяй 0.15, прадукцыйнасць рэндэрынгу GPU павялічылася больш за на 150%, што забяспечвае значнае паляпшэнне рэндэрынгу web-вектарнай графікі ў рэальным часе.
- Значнае павышэнне прадукцыйнасці ў асяроддзях з абмежаваннямі па магутнасці CPU/GPU і ўбудаваных асяроддзях
- ThorVG 1.0 прапануе палепшаную прадукцыйнасць у параўнанні з версіяй 0.15, з прыкметным прыростам як па CPU, так і па GPU.
- Ключавыя аптымізацыі:
- Палепшаная эфектыўнасць канвеера рэндэрынгу.
- Зніжаныя накладныя выдаткі на выдзяленне буфера кадраў.
- Аптымізаваны аналіз кампазіцый Lottie.
- Палепшаны пакетны рэндэрынг і кэшаванне GPU.
- ThorVG аптымізаваны для растравання на базе CPU, з упорам на вектарную візуалізацыю ў асяроддзях, дзе рэсурсы GPU абмежаваныя, недаступныя ці наўмысна не выкарыстоўваюцца. У тыповых тэстах ЦП ThorVG дэманструе ў сярэднім у 1.8 разы больш высокую прадукцыйнасць у параўнанні з шырока выкарыстоўваным рухавіком вектарнай графікі Skia пры выкананні тыповых задач вектарнай візуалізацыі. Перавага асабліва відавочна ў сцэнарах з інтэнсіўным выкарыстаннем геаметрыі, такіх як візуалізацыя прастакутнікаў, рысак, кручэнняў і акружнасцяў (скрыншот 3).
- ThorVG Janitor
- Рэальную дэманстрацыю прадукцыйнасці рэндэрынгу ThorVG можна ўбачыць у праекце ThorVG Janitor - Інтэрактыўнай гульні, распрацаванай для дэманстрацыі прадукцыйнасці працэсара пры высокай графічнай нагрузцы. Сцэна ўключае ў сябе сотні ворагаў, створаных з дапамогай графікі на аснове часціц, шматслойныя фоны зорнага неба з поўнапамернымі растравымі выявамі, візуальныя эфекты ў рэальным часе, такія як DropShadow і Blur, а таксама да 25000 аб'ектаў, якія рэндэруюцца адначасова. Нават пры пікавай нагрузцы з дазволам 2K (2048×1152) праект дэманструе стабільную прадукцыйнасць вышэй за 120 FPS, што падкрэслівае эфектыўнасць і прыдатнасць ThorVG для складаных асяроддзяў з вялікай колькасцю эфектаў (відэа-дэманстрацыя, скрыншот).
- Іншыя значныя змены
- Прыклад інтэграцыі ThorVG у Godot. У гэтай відэа-дэманстрацыі ThorVG інтэграваны з Godot у вэб-асяроддзі для рэндэрынгу сотняў аб'ектаў анімацыі Lottie з хуткасцю больш за 120 кадраў у секунду. Гэтая дэманстрацыя паказвае патэнцыял ThorVG у вэб-асяроддзі для плыўнай і высакаякаснай анімацыі падчас выканання.
- Дададзены навучальны прыклад выкарыстання ThorVG WebCanvas.
- Дададзена інтэрактыўны ThorVG Playground.
- Дададзены ваперпер ThorVG для мовы Swift: https://github.com/thorvg/thorvg.swift.
- Прыклады выкарыстання ThorVG перанесены ў асобны рэпазітар https://github.com/thorvg/thorvg.example.
- Апублікавана пашырэнне thorvg.vscode для VSCode для стварэння, рэдагаванні і папярэдняга прагляду рэсурсаў ThorVG непасрэдна ў асяроддзі Visual Studio Code.
- У версіі 1.0 праведзена істотная рэструктурызацыя API, накіраваная на павышэнне прадукцыйнасці, зручнасць выкарыстання, узгодненасці і сумяшчальнасці з C.
- Выдалена падтрымка фармату TVG Picture (TVG). Гэтае рашэнне было прынята для падрыхтоўкі новага фармату ThorVG Picture, распрацаванага з улікам анімацыі, як асноўнай канцэпцыі.
- Шматлікія выпраўленні памылак і паляпшэнне стабільнасці для вытворчага выкарыстання.
Крыніца: linux.org.ru
