31. jaanuaril, pärast poolteist aastat pidevat arendust, ilmus 1.0 kerge ja kaasaskantav platvormidevaheline vektorgraafika teek ThorVG, mis on mõeldud vektorskeemade ja animatsioonide visualiseerimiseks. Toetatakse failide laadimist formaatides Lottie ja SVG Tiny 1.2 (loetelu SVG Tiny teostatud võimalustest projekti Wiki).
Teek pakub mugavaid API-sid vektorgraafika importimiseks, loomiseks ja kuvamiseks, samuti selle eksportimiseks erinevatesse graafilistesse formaatidesse, mis muudab selle universaalseks kasutamiseks erinevates tarkvaraplatformides ja graafikasisu visualiseerimise rakendustes. Kaasa tulevad käsurea utiliidid lottie2gif ja svg2png.
ThorVG-d kasutatakse vektorgraafika renderdamiseks sellistes projektides nagu Tizen OS, Godot Engine, LVGL ja mängijad dotLottie.
Projekt on kirjutatud C++ keeles (C++14 standard) ja levitatakse MIT litsentsi alusel.
See ei ole lihtsalt uuendus — see on ümber kujundatud alus, mis toetab kõrge jõudlusega, skaleeritavat ja ülekantavat kahesuunalist vektorgraafikat kõikides platvormides ja seadmetes. ThorVG on arenduse käigus saanud küpseks, tootmisvalmidusse jõudnud graafikamootoriks, mis on tõestanud oma kvaliteeti ja jõudlust reaalses kasutuses.
ThorVG on kiiresti populaarsust kogunud ja saanud järjest suuremat huvi kogukonna seas, mis peegeldab selle arengut varajase etapi projektist laialdaselt tunnustatud ja praktiliselt kasutatavaks vektorgraafikamootoriks, mis on valmis tõeliseks platvormidevaheliseks kasutamiseks.
Muudatuste nimekiri:
- Täpsem tekstiredigeerimise võimalused, rikkalikud visuaalsed efektid ja täpne kattuvuse tugi, et parandada graafilist väljendust.
- Toetab horisontaalset ja vertikaalset joondamist, mis võimaldab täpselt kontrollida teksti paigutust erinevates kasutajaliidese kontekstides.
- Automaatne reavaheline jagamine, mille abil saab valida režiimi: sümbolite, sõnade kaupa, intellektuaalne jagamine ja kolmnurkne katkestamine ülevoolu töötlemiseks.
- Käsitsi reavaheline jagamine, mis võimaldab arendajatel selgelt kontrollida reavahe jagamist uue rea sümbolitega, näiteks \n. See võimaldab täpselt vormindada mitmerealisi tekstibloke, eriti dünaamilistes paigutustes või tekstianimatsioonides.
- Kohandatava sümbolite vahe kauguse tugi, võimaldades täpset kohandamist, et parandada loetavust või saavutada teatud tipograafilisi stiile.
- Teksti ääristamise tugi, mis võimaldab luua stilistilisi efekte ja parandada kontrasti erinevatel taustadel (screenshot 1).
- Esitatud on ulatuslikum ja kooskõlalisem kihiloomise režiimide süsteem, mis parandab oluliselt kihiloomise käitumist ja viib valemid ja kompositsiooniloogika vastavusse tööstusstandarditega, nagu Lottie, SVG ja W3C „Kompositsioon ja segamine“ spetsifikatsioon. Need parendused tagavad suuremat visuaalset ühtsust ja platvormidevahelist ühilduvust, eriti veebis ja animatsioonitöövoogudes.
- Toetatakse järgmisi kihiloomise režiime: „Toon“, „Sügavus“, „Värv“ ja „Heledus“, kasutades HSL värviruumi kompositsioonitehnikaid. Need režiimid parandavad Lottie kihtide efektide ühilduvust ja tulevaste SVG segamise toetust (screenshot 2).
- Olulised parendused ja laiendused visuaalsetes efektides stseenitasandil, muutes vektorgraafika väljendusrikkamaks ja visuaalselt põnevamaks:
- Varjutuse efekt gaussi hägustamise filtriga (video-demonstratsioon).
- Värvide asendamise meetodid, mis muudavad graafika välimust, muutes värvide rakendamise, segamise või varjundi põhjal ühtimise või vastavuse viisi (video-demonstratsioon).
- Lisatud on uusi abifunktsioone interaktiivsuse laiendamiseks. Nende hulka kuulub ruumilise teabe päringute tugi (demonstreerimine) ja tabamuste tuvastamine kuvatud objektidele (video-demonstratsioon).
- Täpsemad Lottie animatsiooni võimalused platvormideüleseks esitamiseks, sealhulgas veebimängija modulaarsed eelvalikud, mis on optimeeritud suuruse, jõudluse ja renderdamise režiimi (CPU/GPU)
- Olulised täiustused Lottie animatsiooni toe osas, sealhulgas parem ühilduvus, paindlikkus ja interaktiivsus kõikidel platvormidel. Toetatakse mitte ainult laiendatud Lottie funktsioonide ja väljendite spektrit, vaid pakutakse ka arendajatele vahendeid, mis võimaldavad dünaamiliselt kontrollida animatsiooni käitumist täitmise ajal, muutes ThorVG-ist ühe võimsama Lottie esituse teeki turul. Tehtud võimaluste loetelu projekti Wiki-s.
- Praegu on .lot failitüüp uus ametlik IANA standard Lottie failide jaoks. ThorVG toetab nüüd ametlikult .lot formaati Lottie failide standardina, lisaks traditsioonilisele .json laiendusele.
- Twining
- Lisatud on tugi mitte-lineaarsete järjestatud võtmeraadete vahelise interpolatsiooni jaoks, mis tagab sujuvamad üleminekud ja täpsema ajakontrolli. See täiendus on eriti efektiivne olekute põhjaliku animatsiooni esitamisel (tuntud ka kui märgistus-põhine esitamine) Lottie'is. Paljudel juhtudel on animatsioonid mõeldud üleminekuks olekute vahel keerulistes, mitte-lineaarsetes viisides. Traditsiooniline Lottie, millel on rangelt järjekindel ajastruktuur, ei suuda sellistes stsenaariumites sujuvalt toime tulla, mis sageli viib järskude katkestuste või ebamugavate hüpeteni, kui liigutakse ebatavaliste võtmealade vahel: video-demonstratsioon 1, video-demonstratsioon 2.
- Twiinimise abil saavad arendajad nüüd teha interpolatsiooni otse kahe eraldi võtme raadi vahel, isegi kui need ei ole ajaskaalal lineaarselt järjestatud. See võimaldab saavutada looduslikumaid ja sujuvamaid visuaalseid efekte olekute vaheliste üleminekute korral, mis suurendab oluliselt interaktiivsete animatsioonide paindlikkust ja realismi: video-demonstratsioon 1, video-demonstratsioon 2.
- Nüüd toetatakse (katsefunktsioonina) muutuja väärtuste käitamise ajal uuesti kirjutamist, mis võimaldab dünaamiliselt teostada skripti loogikat kasutaja sisendi alusel. See muudab selle eriti võimsaks vahendiks interaktiivsete animatsioonide loomiseks Lottie ressursside abil, võimaldades luua individuaalseid variatsioone, mis ületavad algset disaini.video-demonstratsioon).
- Lisatud kohandatav varade lahendaja, mis tagab suurema paindlikkuse väliste ressursside (nt piltide) laadimisel, millele Lottie animatsioonid viitavad.
- Laiendatud tugi Lottie LayerEffect funktsioonile, võimaldades rikkalikke visuaalseid täiustusi otse animatsiooni kihtides, kasutades ülaltoodud kirjeldatud efekte.
- Kuna mõned efektid võivad olla ressursimahukad, on pakutud kvaliteedi ja jõudluse seadistamise valik, et renderdada efekte, mis sobib ideaalselt CPU piiratud platvormide optimeerimiseks. See võimaldab arendajatel kontrollida renderdamise täpsust ja optimeerida jõudlust vastavalt sihtplatvormile.
- Avaldamise toetust on laiendatud järgmiste võtmeomaduste ja -funktsioonide lisamisega:
- wiggle, temporalWiggle: juhusliku liikumise rakendamine, mis sõltub ajast.
- pointOnPath: asukoha arvutamine teel.
- propertyIndex, groupIndex: viide vara või grupi indeksile.
- value, property, effect: juurdepääs vara väärtustele ja välistele efektidele.
- Täpsem vastavus spetsifikatsioonidele:
- TextFollowPath – uus spetsifikatsioon, mis võimaldab tekstil järgida omapäraseid vektoriteid (video-demonstratsioon).
- Teksti joondamise parameetrid – täpsem teksti kihtide kuvamine lähtuvalt nende horisontaal- ja vertikaaljoondamise seadistustest (video-demonstratsioon).
- Maski laiendamine – uus funktsioon, mis võimaldab täpsemalt kontrollida maski kuju mõju visuaalsele kompositsioonile (video-demonstratsioon).
- SVG
- ThorVG võimaldab nüüd pääseda juurde üksikutele SVG-elementidele ja neid muuta, kasutades algfaile määratud unikaalseid id-attribuute. See funktsioon võimaldab arendajatel otse valida ja manipuleerida konkreetsete vektorfiguuridega imporditud SVG-skeenis, mis sobib suurepäraselt interaktiivsete või dünaamiliste rakenduste (nt teemade kohandamine, esiletõstmine) jaoks.
- Toetamine Gaussi udu efekti.
- Intelligentne renderdamine
- ThorVG tarkvaramootor toetab nüüd Intellegentset osalist renderdamist, mis tagab tõhusamad renderdamise tööd, uuendades ainult neid vektorskeemi osi, mis on muutunud. Sisemise muudetud alade jälgimise abil minimeerib see tarbetud uuendusi ja optimeerib üldiselt tulemuslikkuse. See funktsioon pakub olulisi eeliseid sellistes stsenaariumides nagu kasutajaliidese renderdamine, projekteerimistööriistad või rakendused, kus enamik stseenist jääb staatiliseks ja ainult väikesed elemendid värskendavad kaadrite vahel. Sel juhul võib stseeni täieliku renderdamise vältimine oluliselt vähendada arvutuskoormust ja suurendada energiatarbimise efektiivsust, mis on eriti väärtuslik mobiilsete ja sisseehitatud süsteemide puhul.
- Selle eesmärgi saavutamiseks rakendab ThorVG 1.0 osalise renderdamise jaoks spetsiaalselt välja töötatud algoritmiliste meetodite kombinatsiooni. Allpool on peamised strateegiad, mis põhinevad sellel süsteemil:
- Lineaarse läbitungimise algoritm: kujundid sorteeritakse x-koordinaatide järgi ja rakendatakse lineaarse läbitungimise strateegiat, et vähendada tarbetuid kontrollimisi "mustade" alade osas. See vähendab keerukust O(N × M) pealt O(N + M + K + N log N)-ni, kus N on kujundite arv, M on "mustade" alade arv, K on tegelikud kattumised.
- Jagamine ja tingimuslik ühendamine: peene teraga osade jagamine tasakaalustatakse intelligentse ühendamisega fragmentatsiooni vältimiseks. Sel juhul eelistatakse horisontaalset ühendamist efektiivsemaks mälu vahemälu kasutamiseks.
- Ruumi jagamine (vaikimisi 4×4 võrk): renderdamispind jagatakse 16 alaks, mis võimaldab kontrollida ainult vastavaid kujundite "musti" alasid, oluliselt vähendades kulusid keerukate kasutajaliidese värskenduste puhul.
- Koostöös tagavad need tehnikad sujuvama ja kiirema renderdamise, eriti sissebuilt süsteemides või reaalajas süsteemides, kus toimub sageli osalisi värskendusi. Üksikasjalik teave avaldatakse eraldi postituses. blogis.
- Pange tähele, et kõrge dünaamilise sisu, nagu dünaamilised mängud või täisekraanianimatsioonid, puhul, kus peaaegu kõik objektid muutuvad igas kaadris, annab osaline renderdamine vähe või ei anna üldse eeliseid jõudluses ning võib isegi kaasa tuua väikseid ülevaatusi. Sellistes olukordades on tavaliselt parem valida stseeni täisrenderdamine. Selle tõttu toetab ThorVG nii osalist kui ka täit renderdamist, mis annab teile võimaluse valida teie kasutusjuhtumi jaoks optimaalse lähenemise. Saate analüüsida oma toote jõudlust ja teha teadlikke otsuseid, kasutades valikut Meson -Dpartial=[true/false] ja seadistust EngineOption::Smart klassis SwCanvas:
auto canvas = SwCanvas::gen(EngineOption::Smart);
- Uus ajastukäik veebitehnoloogiate integreerimisel WebGL, WebGPU ja kerge WebCanvas abil sujuvaks renderdamiseks brauseris
- WebGL ja WebGPU tagused backendid on nüüd ametlikult tootmiskasutuseks valmis. Need GPU-põhised renderdajad pakuvad nüüd täisfunktsionaalset ühilduvust traditsioonilise CPU backendiga, toetades kõiki ThorVG Canvas'i võimalusi sama kvaliteedi ja pildistabiliteediga. Võrreldes versiooniga 0.15 on GPU renderdamise jõudlus tõusnud rohkem kui 150%, mis toob kaasa märkimisväärse täiustuse veebivektorigraafika reaalajas renderdamises.
- Märkimisväärne jõudluse tõus keskkondades, kus on piirangud CPU/GPU võimsusele ning sisseehitatud keskkondades.
- ThorVG 1.0 pakub võrreldes versiooniga 0.15 paremat jõudlust, märgatava kasvu nii CPU kui ka GPU osas.
- Peamised optimeerimised:
- Parandatud renderdamise toru efektiivsus.
- Vähendatud kaadri puhvri eraldamise kulud.
- Optimeeritud Lottie koostise analüüs.
- Parandatud partii renderdamine ja GPU vahemälu.
- ThorVG on optimeeritud CPU-põhiseks rasteriseerimiseks, keskendudes vektorgraafika visualiseerimisele keskkondades, kus GPU ressursid on piiratud, puuduvad või on tahtlikult kasutamata. Tüüpilistes CPU testides näitab ThorVG keskmiselt 1.8 korda kõrgemat jõudlust võrreldes laialdaselt kasutatava vektorgraafikamootoriga Skia, tehes tavalisi vektorgraafika visualiseerimise ülesandeid. Eelis on eriti märgatav geomeetria intensiivsetes stsenaariumides, nagu ristkülikute, joonte, pööramiste ja ringide visualiseerimine (screenshot 3).
- ThorVG Janitor
- ThorVG renderdamise jõudluse tõelist demonstreerimist saab näha projektis ThorVG Janitor – interaktiivses mängus, mis on loodud protsessori jõudluse demonstreerimiseks kõrgete graafiliste koormustega. Stseen sisaldab sadu vaenlasi, mis on loodud partikulaarsete graafikatehnoloogiate abil, mitmekihilised täheööd taustad koos täiskuva rastrifailidega, reaalajas visuaalsed efektid nagu DropShadow ja Blur, samuti kuni 25000 objekti, mis renderdatakse samal ajal. Isegi 2K (2048×1152) maksimaalsel koormusel näitab projekt stabiilset jõudlust üle 120 FPS, mis tõestab ThorVG efektiivsust ja sobivust keerukates keskkondades, kus on palju efekte.video-demonstratsioon, ekraanipilt).
- Teised olulised muudatused
- Näide ThorVG integreerimisest Godot'iga. Dokumendihalduses selle video-demonstratsiooni ThorVG on integreeritud Godot'iga veebikeskkonnas, et renderdada sadu Lottie animatsiooni objekte rohkem kui 120 kaadrit sekundis. See demonstreerib ThorVG potentsiaali veebikeskkonnas sujuvate ja kvaliteetsete animatsioonide reaalajas esitamiseks.
- Lisatud õpetlik näide ThorVG WebCanvas'i kasutamisest.
- Lisatud interaktiivne ThorVG Playground.
- Lisatud ThorVG mähis keelele Swift: https://github.com/thorvg/thorvg.swift.
- ThorVG kasutusnäidised on viidud eraldi hoidlasse https://github.com/thorvg/thorvg.example.
- Avaldatud laiendus thorvg.vscode VSCode'i jaoks, et luua, redigeerida ja vaadata ThorVG ressursse otse Visual Studio Code'i keskkonnas.
- Versioonis 1.0 on API struktuuri oluliselt muudetud, et parandada jõudlust, kasutusmugavust, ühtsust ja ühilduvust C-ga.
- Toetust TVG Picture (TVG) formaadile on eemaldatud. See otsus tehti, et ette valmistada uut ThorVG Picture formaati, mis keskendub animatsioonile kui peamisele kontseptsioonile.
- Mitmeid veaparandusi ja stabiilsuse parandusi tootmis kasutuseks.
Allikas: linux.org.ru
