Updating to match new version of source page |
Updating to match new version of source page |
||
(3 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
== <span class="mw-translate-fuzzy">= ลิงค์โซเชียล = | == <span class="mw-translate-fuzzy">= ลิงค์โซเชียล = | ||
หากคุณต้องการติดตามการพัฒนา โปรดดูลิงก์โซเชียลของเรา:</span> == | หากคุณต้องการติดตามการพัฒนา โปรดดูลิงก์โซเชียลของเรา:</span> == | ||
<span lang="en" dir="ltr" class="mw-content-ltr">If you want to keep up with development, check out our social links:</span> | <span lang="en" dir="ltr" class="mw-content-ltr">If you want to keep up with development, check out our social links:</span> | ||
Line 15: | Line 16: | ||
[[File:YoutubeIcon.png|36px|Resonite YouTube|link=https://www.youtube.com/@resoniteapp|alt=Resonite YouTube]] | [[File:YoutubeIcon.png|36px|Resonite YouTube|link=https://www.youtube.com/@resoniteapp|alt=Resonite YouTube]] | ||
[[File:PatreonIcon.png|36px|Resonite Patreon|link=https://www.patreon.com/resonite|alt=Resonite Patreon]] | [[File:PatreonIcon.png|36px|Resonite Patreon|link=https://www.patreon.com/resonite|alt=Resonite Patreon]] | ||
[[File:SupporterBadge.png|36px|Resonite Supporter|link=https://wiki.resonite.com/Supporting_Resonite]] | |||
== <span lang="en" dir="ltr" class="mw-content-ltr">Get started</span> == | |||
=== วันแรก === | === วันแรก === | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Installing Resonite|Install Resonite]]</span> | |||
* [https://account.resonite.com สร้างบัญชี] | * [https://account.resonite.com สร้างบัญชี] | ||
* [[Basic Controls|การควบคุมพื้นฐาน]] | * [[Basic Controls|การควบคุมพื้นฐาน]] | ||
* [[Avatar Creation|นำขเข้า Avatar]] | * <span class="mw-translate-fuzzy">[[Avatar Creation|นำขเข้า Avatar]]</span> | ||
* [[Patreon Linking|รับรางวัล Patreon ของคุณ]] | * <span class="mw-translate-fuzzy">[[Patreon Linking|รับรางวัล Patreon ของคุณ]]</span> | ||
=== ไปที่ไหนต่อ? === | === ไปที่ไหนต่อ? === | ||
{{Note|<span lang="en" dir="ltr" class="mw-content-ltr">Looking to contribute the wiki? [[Contributing| | |||
{{Note|<span lang="en" dir="ltr" class="mw-content-ltr">Looking to contribute to the wiki? [[Special:MyLanguage/Contributing|Read our guide for that]]!</span>|suggestion}} | |||
* [[Frequently Asked Questions|คำถามที่พอเจอบ่อย]] | * [[Frequently Asked Questions|คำถามที่พอเจอบ่อย]] | ||
* [[Troubleshooting|คำแนะนำในการแก้ไขปัญหาและข้อมูล]] | * [[Troubleshooting|คำแนะนำในการแก้ไขปัญหาและข้อมูล]] | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Dash | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Dash menu]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Inventory |The | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Inventory |The inventory]]</span> | ||
* [[Public Folders|โฟลเดอร์สาธารณะ]] | * [[Public Folders|โฟลเดอร์สาธารณะ]] | ||
* [[Resonite Bot|บอท Resonite และคำสั่งต่างๆ]] | * [[Resonite Bot|บอท Resonite และคำสั่งต่างๆ]] | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Command | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Special:MyLanguage/Command line arguments|Command line arguments]]</span> | ||
* [[Badges|ป้าย]] | * [[Badges|ป้าย]] | ||
* [[Groups|ข้อมูลกลุ่มและพื้นที่จัดเก็บส่วนรวม]] | * [[Groups|ข้อมูลกลุ่มและพื้นที่จัดเก็บส่วนรวม]] | ||
* [[Homes|บ้าน]] | * [[Homes|บ้าน]] | ||
* [[Roadmap|แผนการทำงาน]] | * [[Special:MyLanguage/Roadmap|แผนการทำงาน]] | ||
== <span lang="en" dir="ltr" class="mw-content-ltr">Subscription perks and information</span> == | |||
< | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Supporting Resonite]]</span> | ||
== | |||
</ | == <span lang="en" dir="ltr" class="mw-content-ltr">Community contributions</span> == | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[ | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Public | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Special:MyLanguage/Locale|Locale & language]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[List of | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Special:MyLanguage/Public folders|Public folders]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[List of | ** <span lang="en" dir="ltr" class="mw-content-ltr">[[Special:MyLanguage/List of public folders|List of public folders]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[:Category:Community | * <span lang="en" dir="ltr" class="mw-content-ltr">[[List of groups]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[:Category:Community standards|Community standards]]</span> | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Tutorials]]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Tutorials]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Wiki | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Wiki contributions & translations|Contributing to the wiki]]</span> | ||
< | == <span lang="en" dir="ltr" class="mw-content-ltr">Rules, guidelines & important information</span> == | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Special:MyLanguage/Resonite team|Resonite team]]</span> | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Resonite | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Moderation]]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Moderation]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Mentors]]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Mentors]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[https://resonite.com/policies/Guidelines.html Usage | * <span lang="en" dir="ltr" class="mw-content-ltr">[https://resonite.com/policies/Guidelines.html Usage guidelines]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[https://resonite.com/policies/EULA.html EULA]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[https://resonite.com/policies/EULA.html EULA]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Branding|Branding | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Branding|Branding guidelines]]</span> | ||
<span lang="en" dir="ltr" class="mw-content-ltr"> | == <span lang="en" dir="ltr" class="mw-content-ltr">Creation & technical</span> == | ||
<span lang="en" dir="ltr" class="mw-content-ltr"> | === <span lang="en" dir="ltr" class="mw-content-ltr">General</span> === | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Tips & | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Tips & tricks]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Things to | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Things to avoid]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Optimization | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Optimization guidelines]]</span> | ||
** [[Slot Count|<span lang="en" dir="ltr" class="mw-content-ltr">Slot | ** [[Slot Count|<span lang="en" dir="ltr" class="mw-content-ltr">Slot count</span>]] | ||
** [[Dynamic | ** [[Dynamic texture and mesh loading|<span lang="en" dir="ltr" class="mw-content-ltr">Dynamic texture and mesh loading</span>]] | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Networking Information]]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Networking Information]]</span> | ||
* [[Infrastructure|<span lang="en" dir="ltr" class="mw-content-ltr">Infrastructure</span>]] | * [[Infrastructure|<span lang="en" dir="ltr" class="mw-content-ltr">Infrastructure</span>]] | ||
<span lang="en" dir="ltr" class="mw-content-ltr"> | === <span lang="en" dir="ltr" class="mw-content-ltr">Avatars, materials & textures</span> === | ||
*<span lang="en" dir="ltr" class="mw-content-ltr">[[Humanoid | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Humanoid rig requirements for IK]]</span> | ||
*<span lang="en" dir="ltr" class="mw-content-ltr">[[Avatar | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Avatar creation|Creating avatars]]</span> | ||
*<span lang="en" dir="ltr" class="mw-content-ltr">[[Gestures| | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Gestures|Setup facial animations & other gestures]]</span> | ||
*<span lang="en" dir="ltr" class="mw-content-ltr">[[ | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Component:DynamicBoneChain|Dynamic bones]]</span> | ||
*<span lang="en" dir="ltr" class="mw-content-ltr">[[Material|Materials & | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Material|Materials & shaders]]</span> | ||
*<span lang="en" dir="ltr" class="mw-content-ltr">[[Texture2D|Textures]]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Texture2D|Textures]]</span> | ||
*<span lang="en" dir="ltr" class="mw-content-ltr">[[Avatar System |Common | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Avatar System |Common avatar system]]</span> | ||
*[[Custom Shaders|<span lang="en" dir="ltr" class="mw-content-ltr">Custom Shaders</span>]] | * [[Custom Shaders|<span lang="en" dir="ltr" class="mw-content-ltr">Custom Shaders</span>]] | ||
<span lang="en" dir="ltr" class="mw-content-ltr"> | === <span lang="en" dir="ltr" class="mw-content-ltr">ProtoFlux & components</span> === | ||
<span lang="en" dir="ltr" class="mw-content-ltr"> | |||
<span lang="en" dir="ltr" class="mw-content-ltr">ProtoFlux is | ==== <span lang="en" dir="ltr" class="mw-content-ltr">ProtoFlux</span> ==== | ||
<span lang="en" dir="ltr" class="mw-content-ltr">ProtoFlux is the visual scripting language used in Resonite.</span> | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[ProtoFlux]]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[ProtoFlux]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Context]] | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Context]] determines how ProtoFlux executes.</span> | ||
** <span lang="en" dir="ltr" class="mw-content-ltr">[[Impulses]] | ** <span lang="en" dir="ltr" class="mw-content-ltr">[[Impulses]] are a construction from <code>ExecutionContext</code>.</span> | ||
*** <span lang="en" dir="ltr" class="mw-content-ltr">[[Dynamic | *** <span lang="en" dir="ltr" class="mw-content-ltr">[[Dynamic impulses]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[:Category:ProtoFlux| | * <span lang="en" dir="ltr" class="mw-content-ltr">[[:Category:ProtoFlux|Categories of ProtoFlux nodes]]</span> | ||
==== <span lang="en" dir="ltr" class="mw-content-ltr">Components</span> ==== | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Component]]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Component]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[:Category:Components| | * <span lang="en" dir="ltr" class="mw-content-ltr">[[:Category:Components|Categories of components]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Button | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Button events]]</span> | ||
==== <span lang="en" dir="ltr" class="mw-content-ltr">Types</span> ==== | ==== <span lang="en" dir="ltr" class="mw-content-ltr">Types</span> ==== | ||
Line 112: | Line 115: | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[:Category:Type]]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[:Category:Type]]</span> | ||
<span lang="en" dir="ltr" class="mw-content-ltr"> | == <span lang="en" dir="ltr" class="mw-content-ltr">Complex features</span> == | ||
<span lang="en" dir="ltr" class="mw-content-ltr">Complex features involve using multiple parts of Resonite together.</span> | <span lang="en" dir="ltr" class="mw-content-ltr">Complex features involve using multiple parts of Resonite together.</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Dynamic | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Cloud | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Dynamic variables]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Cloud variables]]</span> | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Plugins]]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Plugins]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Connecting Resonite to | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Connecting Resonite to other applications]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[OAuth]]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[OAuth]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Special:MyLanguage/Universes|Universes]]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Special:MyLanguage/Universes|Universes]]</span> | ||
Line 125: | Line 129: | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Special:MyLanguage/HTTP|HTTP]]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Special:MyLanguage/HTTP|HTTP]]</span> | ||
< | == <span lang="en" dir="ltr" class="mw-content-ltr">Tools & workflow</span> == | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Tools|Tools overview]]</span> | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Tools|Tools | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Community Tools|Community tools]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Community Tools|Community | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Examples, custom tools, and tutorials]]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Examples, custom tools, and tutorials]]</span> | ||
<span lang="en" dir="ltr" class="mw-content-ltr"> | == <span lang="en" dir="ltr" class="mw-content-ltr">Radiant UI & UIX</span> == | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[UIX|UIX]]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[UIX|UIX]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Facets]]</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Facets]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Dash | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Dash menu]]</span> | ||
* [[Context menu|<span lang="en" dir="ltr" class="mw-content-ltr">Context | * [[Context menu|<span lang="en" dir="ltr" class="mw-content-ltr">Context menu</span>]] | ||
== <span lang="en" dir="ltr" class="mw-content-ltr">Worlds, sessions, & headless servers</span> == | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Permission system]]</span> | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Headless server software]] - Create servers to run Resonite sessions.</span> | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Special:MyLanguage/Command line arguments|Command line arguments]]</span> | |||
== <span lang="en" dir="ltr" class="mw-content-ltr">Resonite development</span> == | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[https://github.com/Yellow-Dog-Man/Resonite-Issues/issues GitHub issues]</span> | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[https://github.com/Yellow-Dog-Man/Resonite-Issues/issues GitHub | * <span lang="en" dir="ltr" class="mw-content-ltr">[https://github.com/Yellow-Dog-Man/Resonite-Issues/discussions GitHub feature discussions]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[https://github.com/Yellow-Dog-Man/Resonite-Issues/discussions GitHub | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Roadmap|Planned features]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Planned | * <span lang="en" dir="ltr" class="mw-content-ltr">[[:Category:Versions|Versions & changelogs]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[:Category:Versions | Versions & | * <span lang="en" dir="ltr" class="mw-content-ltr">[[API|API documentation]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[API|API | * <span lang="en" dir="ltr" class="mw-content-ltr">[[Office hours]]</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Office | ** <span lang="en" dir="ltr" class="mw-content-ltr">[[The Resonance]]</span> | ||
== <span lang="en" dir="ltr" class="mw-content-ltr">Competitions</span> == | == <span lang="en" dir="ltr" class="mw-content-ltr">Competitions</span> == | ||
<span lang="en" dir="ltr" class="mw-content-ltr">Resonite occasionally runs game-wide competitions with the community:</span> | <span lang="en" dir="ltr" class="mw-content-ltr">Resonite occasionally runs game-wide competitions with the community:</span> | ||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[MMC]] - A month-long competition run annually by [[Creator Jam]].</span> | * <span lang="en" dir="ltr" class="mw-content-ltr">[[MMC]] - A month-long competition run annually by [[Creator Jam]].</span> | ||
== <span lang="en" dir="ltr" class="mw-content-ltr">Worlds</span> == | == <span lang="en" dir="ltr" class="mw-content-ltr">Worlds</span> == | ||
== Assets == | * [[Special:MyLanguage/Worlds|<span lang="en" dir="ltr" class="mw-content-ltr">Worlds</span>]] | ||
* [[Music]] | * [[Special:MyLanguage/World browser|<span lang="en" dir="ltr" class="mw-content-ltr">World browser</span>]] | ||
* Resonite visual assets (models, textures, sfx, animations) are licensed under the [https://creativecommons.org/licenses/by/4.0/ CC BY 4.0] license. | * [[Special:MyLanguage/World orb|<span lang="en" dir="ltr" class="mw-content-ltr">World orb</span>]] | ||
* [[:Category:Featured Worlds|<span lang="en" dir="ltr" class="mw-content-ltr">Featured worlds</span>]] | |||
* [[:Category:Community Worlds|<span lang="en" dir="ltr" class="mw-content-ltr">Community worlds</span>]] | |||
* [[:Category:Official Worlds|<span lang="en" dir="ltr" class="mw-content-ltr">Official worlds</span>]] | |||
* [[:Category:Creator Jam Worlds|<span lang="en" dir="ltr" class="mw-content-ltr">Creator Jam worlds</span>]] | |||
== <span lang="en" dir="ltr" class="mw-content-ltr">Assets</span> == | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Music]]</span> | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">[[Creator assets]]</span> | |||
* <span lang="en" dir="ltr" class="mw-content-ltr">Resonite visual assets (models, textures, sfx, animations) are licensed under the [https://creativecommons.org/licenses/by/4.0/ CC BY 4.0] license.</span> |
Latest revision as of 17:25, 10 August 2025
ยินดีต้อนรับเข้าสู่ Resonite วิกิศุนย์กลางสำหรับข้อมูลเกี่ยวกับ Resonite วิกินี้ยังอยู่ในการพัฒนา โปรดดู Wiki Status สำหรับข้อมูลเพิ่มเติม
= = ลิงค์โซเชียล
หากคุณต้องการติดตามการพัฒนา โปรดดูลิงก์โซเชียลของเรา: ==
If you want to keep up with development, check out our social links:
Get started
วันแรก
ไปที่ไหนต่อ?
- คำถามที่พอเจอบ่อย
- คำแนะนำในการแก้ไขปัญหาและข้อมูล
- Dash menu
- The inventory
- โฟลเดอร์สาธารณะ
- บอท Resonite และคำสั่งต่างๆ
- Command line arguments
- ป้าย
- ข้อมูลกลุ่มและพื้นที่จัดเก็บส่วนรวม
- บ้าน
- แผนการทำงาน
Subscription perks and information
Community contributions
- Locale & language
- Public folders
- List of groups
- Community standards
- Tutorials
- Contributing to the wiki
Rules, guidelines & important information
Creation & technical
General
Avatars, materials & textures
- Humanoid rig requirements for IK
- Creating avatars
- Setup facial animations & other gestures
- Dynamic bones
- Materials & shaders
- Textures
- Common avatar system
- Custom Shaders
ProtoFlux & components
ProtoFlux
ProtoFlux is the visual scripting language used in Resonite.
- ProtoFlux
- Context determines how ProtoFlux executes.
- Impulses are a construction from
ExecutionContext
.
- Impulses are a construction from
- Categories of ProtoFlux nodes
Components
Types
Complex features
Complex features involve using multiple parts of Resonite together.
- Dynamic variables
- Cloud variables
- Plugins
- Connecting Resonite to other applications
- OAuth
- Universes
- OSC
- Websockets
- HTTP
Tools & workflow
Radiant UI & UIX
Worlds, sessions, & headless servers
- Permission system
- Headless server software - Create servers to run Resonite sessions.
- Command line arguments
Resonite development
- GitHub issues
- GitHub feature discussions
- Planned features
- Versions & changelogs
- API documentation
- Office hours
Competitions
Resonite occasionally runs game-wide competitions with the community:
- MMC - A month-long competition run annually by Creator Jam.
Worlds
Assets
- Resonite visual assets (models, textures, sfx, animations) are licensed under the CC BY 4.0 license.