File: README.md
Godot demo projects
Each folder containing a project.godot file is a demo project meant to
be used with Godot Engine, the open source
2D and 3D game engine.
Godot versions
- The
masterbranch is compatible with Godot'smasterdevelopment branch (next 4.x release). - The
3.xbranch is compatible with Godot's3.xdevelopment branch (next 3.x release). - The other branches are compatible with the matching stable versions of Godot.
- Click here to see all branches.
- For example, the
2.1
branch is for demos compatible with Godot 2.1.x.
Importing demos
To import all demos at once in the project manager:
- Clone this repository or download a ZIP archive.
- If you've downloaded a ZIP archive, extract it somewhere.
- Open the Godot project manager and click the Scan button on the right.
- Choose the path to the folder containing all demos.
- All demos should now appear in the project manager.
Alternatively, you can download individual demos from the
Asset Store,
either from the website or within Godot's project manager.
Try the demos in your browser
Most of the demos are exported to GitHub Pages. They can be viewed
here.
[!NOTE]
The performance of Godot in a browser is lower than natively on
desktop or mobile. For the best performance, consider downloading
the demos and running them with a native version of the Godot editor.
Useful links
License
Those demos are distributed under the terms of the MIT license, as
described in the LICENSE.md file.
File: CONTRIBUTING.md
Contributing to Godot demo projects
Thanks for your interest in contributing to the Godot demo projects!
The guidelines for contributing to godot-demo-projects are documented in the Godot contributing docs.
File: LICENSE.md
Copyright (c) 2014-present Godot Engine contributors.
Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
File: 2d/README.md
2D Demos
These demos are all 2D, but otherwise do not have a common theme.
Languages: Most have GDScript, some have
Godot shader language
Renderers: Glow for 2D and Physics Platformer use Forward+, 2D Particles uses Mobile, and the rest use Compatibility
File: 2d/bullet_shower/README.md
Bullet Shower
This demonstrates how to manage large amounts of objects efficiently using
low-level Servers.
See
Optimization using Servers
in the documentation for more information.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/bullet-shower-demo/
Screenshots
File: 2d/custom_drawing/README.md
Custom drawing in 2D
A demo showing how to draw 2D elements in Godot without using nodes. This can be done
to create procedural graphics, perform debug drawing to help troubleshoot issues in
game logic, or to improve performance by not creating a node for every visible element.
Antialiasing can be performed using two approaches: either by enabling the antialiasing
parameter provided by some of the CanvasItem draw_* methods, or by enabling 2D MSAA
in the Project Settings. 2D MSAA is generally slower, but it works with any kind of line-based
or polygon-based 2D drawing, even for draw_* methods that don't support an antialiasing
parameter. Note that 2D MSAA is only available in the Forward+ and Mobile
renderers, not Compatibility.
See Custom drawing in 2D
in the documentation for more information.
Language: GDScript
Renderer: Mobile
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/custom-drawing-in-2d-demo/
Screenshots
File: 2d/dodge_the_creeps/README.md
Dodge the Creeps
This is a simple game where your character must move
and avoid the enemies for as long as possible.
This is a finished version of the game featured in the
"Your first 2D game"
tutorial in the documentation. For more details,
consider following the tutorial in the documentation.
Language: GDScript
Renderer: Compatibility
[!NOTE]
There is a C# version available here.
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/dodge-the-creeps-demo/
Screenshots
License
art/House In a Forest Loop.ogg Copyright © 2012 HorrorPen, CC-BY 3.0: Attribution. Source: https://opengameart.org/content/loop-house-in-a-forest
Images are from "Abstract Platformer". Created in 2016 by kenney.nl, CC0 1.0 Universal. Source: https://www.kenney.nl/assets/abstract-platformer
Font is "Xolonium". Copyright © 2011-2016 Severin Meyer [email protected], with Reserved Font Name Xolonium, SIL open font license version 1.1. Details are in fonts/LICENSE.txt.
File: 2d/dodge_the_creeps/fonts/FONTLOG.txt
Please distribute this file along with the Xolonium fonts when possible.
Source
Find the sourcefiles of Xolonium at
<gitlab.com/sev/xolonium>Credits
Xolonium is created with FontForge ,
Inkscape , Python , and
FontTools <github.com/fonttools>.
It originated as a custom font for the open-source
game Xonotic <xonotic.org>. With many thanks to the
Xonotic community for your support.Supported OpenType features
case Provides case sensitive placement of punctuation,
brackets, and math symbols for uppercase text.
frac Replaces number/number sequences with diagonal fractions.
Numbers that touch a slash should not exceed 10 digits.
kern Provides kerning for Latin, Greek, and Cyrillic scripts.
locl Dutch: Replaces j with a stressed version if it follows í.
Sami: Replaces n-form Eng with the preferred N-form version.
Romanian and Moldovan: Replaces ŞşŢţ with the preferred ȘșȚț.
pnum Replaces monospaced digits with proportional versions.
sinf Replaces digits with scientific inferiors below the baseline.
subs Replaces digits with subscript versions on the baseline.
sups Replaces digits with superscript versions.
zero Replaces zero with a slashed version.Supported glyph sets
Adobe Latin 3
OpenType W1G
ISO 8859-1 Western European
ISO 8859-2 Central European
ISO 8859-3 South European
ISO 8859-4 North European
ISO 8859-5 Cyrillic
ISO 8859-7 Greek
ISO 8859-9 Turkish
ISO 8859-10 Nordic
ISO 8859-13 Baltic Rim
ISO 8859-14 Celtic
ISO 8859-15 Western European
ISO 8859-16 South-Eastern EuropeanAvailable glyphs
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~
¡¢£¤¥¦§¨©ª«¬ ®¯°±²³´µ¶·¸¹º»¼½¾¿
ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß
àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğ
ĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľ
ĿŀŁłŃńŅņŇňŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞş
ŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽž
ƒǺǻǼǽǾǿȘșȚțȷ
ˆˇˉ˘˙˚˛˜˝
ͺ;΄΅Ά·ΈΉΊΌΎΏΐ
ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫάέήίΰ
αβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ
ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОП
РСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп
рстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџ
ѢѣѲѳѴѵҐґҒғҔҕҖҗҘҙҚқҜҝҞҟҠҡҢңҤҥҦҧҨҩ
ҪҫҬҭҮүҰұҲҳҴҵҶҷҸҹҺһҼҽӀӁӂӇӈӋӌӏӐӑӒӓ
ӔӕӖӗӘәӜӝӞӟӠӡӢӣӤӥӦӧӨөӮӯӰӱӲӳӴӵӶӷӸӹ
Ԥԥ
ḂḃḊḋḞḟṀṁṖṗṠṡṪṫẀẁẂẃẄẅẞỲỳ
‒–—―‘’‚‛“”„‟†‡•…‰′″‹›‽‾⁄
⁰⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
₤₦₩₫€₯₱₹₺₽₿
℅ℓ№℗™Ω℮
⅛⅜⅝⅞
←↑→↓
∂∆∏∑−∕∙√∞∟∫≈≠≤≥
⌖
■▬▮▰▲▶▼◀◆◊●◢◣◤◥
☄★☠☢☣⚙⚛⚠⚡⛔
❇❈❌❤❰❱❲❳
fffiflffiffl
🌌🌍🌎🌏👽💣🔥🔫
😁😃😄😆😇😈😉😊😎😐😒😕😘
😛😝😞😟😠😣😭😮😲😴😵
🚀Debugging glyphs
U+EFFD Font version
U+F000 Font hinting indicatorChangelog
Xolonium 4.1 2016-11-22 Severin Meyer <[email protected]>
Reverted frac OpenType feature to a more stable implementation
Xolonium 4.0 2016-10-08 Severin Meyer <[email protected]>
Decreased width of most glyphs
Thinner vertical stems in Xolonium-Regular
Thicker horizontal stems in Xolonium-Bold
Revised diagonal stems
Lowered middle bars
Revised diacritical bars
Added glyphs:
ӏẞ₿
U+2007 U+2008 U+2009 U+200A U+202F
U+EFFD U+F000
Revised glyphs:
$&,JKQRXkwxy~¢¤ßǻ˜ζκλμξφЖУжћѴѵ∕₱₺₦₩€ℓ№≈ffffiffl
❤🌍🌎🌏😁😄😇😈😉😊😘😭😮😴🚀
Removed uncommon glyphs:
ʼnſʼҌҍҎҏҾҿӃӄӇӈӚӛӪӫӬӭ
U+0312 U+0313 U+0326
Simplified OpenType features pnum, zero, and case
Removed OpenType feature dlig
Revised vertical metrics
Merged outlines of composite glyphs in otf version
Added ttf version with custom outlines and instructions
Added woff and woff2 version
Xolonium 3.1 2015-06-10 Severin Meyer <[email protected]>
Added currency glyphs:
₦₩₫₱₹₺₽
Revised glyph:
₯
Relicensed public release under the SIL Open Font License 1.1
Xolonium 3.0 2015-05-04 Severin Meyer <[email protected]>
Decreased width of glyphs
Decreased descender height
Increased height of super/subscript glyphs
Revised width of dashes, underscore, and overscore
Sharper bends with more circular proportions
Decreased stroke thickness of mathematical glyphs
Revised diacritical marks
Revised diacritical bars
Revised Cyrillic hooks
Revised glyphs:
GQRYjmuwßŊŒſƒǻfffiffiffl
ΞΨΩδζιξπςστυφω
ЉЄДЛУЭЯбдлэяєљђєћѢѣҨҩҼҽӃӄӘә
#$&'()*,/69?@[]{}~¡£¤¥§©®¿
‹›₤€₯ℓ№℗℮←↑→↓∂∏∑∞≈▰☄❈❰❱❲❳😝
Raised vertical position of mathematical glyphs
Unified advance width of numeral and monetary glyphs
Unified advance width of mathematical glyphs
Revised bearings
Rewrote kern feature
Bolder Xolonium-Bold with improved proportions
Updated glyph names to conform to the AGLFN 1.7
Revised hints and PS Private Dictionary
Added glyphs:
ӶӷԤԥ
Added OpenType features:
case frac liga locl pnum sinf subs sups zero
Xolonium 2.4 2014-12-23 Severin Meyer <[email protected]>
Added dingbats:
⛔💣🔥
Revised size and design of emoticons
Revised dingbats:
⌖☄☠☣⚙⚛⚠⚡❇❈🌌🌍🌎🌏🔫
Removed dingbat:
💥
Xolonium 2.3 2014-08-14 Severin Meyer <[email protected]>
Bugfixed ε and έ, thanks to bowzee for the feedback
Xolonium 2.2 2014-03-01 Severin Meyer <[email protected]>
Added dingbats:
⌖◆●❌💥
Revised dingbats:
•←↑→↓◊☄★☠☣⚙⚛⚠⚡❇❈❤🌌🌍🌎🌏👽🔫🚀
Removed dingbats:
♻✪💡📡🔋🔧🔭
Xolonium 2.1 2013-10-20 Severin Meyer <[email protected]>
Added dingbats:
←↑→↓❰❱❲❳■▬▮▰▲▶▼◀◢◣◤◥
☄★☠☢☣♻⚙⚛⚠⚡✪❇❈❤
🌌🌍🌎🌏👽💡📡🔋🔧🔫🔭🚀
😁😃😄😆😇😈😉😊😎😐😒😕
😘😛😝😞😟😠😣😭😮😲😴😵
Xolonium 2.0.1 2013-07-12 Severin Meyer <[email protected]>
Reorganised and simplified files
Xolonium 2.0 2012-08-11 Severin Meyer <[email protected]>
Revised bends
Revised thickness of uppercase diagonal stems
Revised diacritical marks
Revised hints and PS Private Dictionary
Revised glyphs:
*1469@DPRly{}§©®¶ÐÞƒΘΞαεζνξνυЄЉЊ
ЏБЗЛУЧЪЫЬЭЯбзлчъыьэяєљњџ•€∂∙√∞∫≠
Completed glyph sets:
Adobe Latin 3
OpenType World Glyph Set 1 (W1G)
Ghostscript Standard (ghostscript-fonts-std-8.11)
Added OpenType kern feature
Added Xolonium-Bold
Xolonium 1.2 2011-02-12 Severin Meyer <[email protected]>
Revised glyphs:
D·Ðı
Completed glyph sets:
ISO 8859-7 (Greek)
Unicode Latin Extended-A block
Added glyphs:
†‡•…‰⁄™∂∑−√∞≠≤≥
Xolonium 1.1 2011-01-17 Severin Meyer <[email protected]>
Revised placement of cedilla and ogonek in accented glyphs
Revised glyphs:
,;DKTjkvwxy¥§Ð˛€
Completed glyph sets:
ISO 8859-2 (Central European)
ISO 8859-3 (South European, Esperanto)
ISO 8859-4 (North European)
ISO 8859-5 (Cyrillic)
ISO 8859-9 (Turkish)
ISO 8859-10 (Nordic)
ISO 8859-13 (Baltic Rim)
ISO 8859-14 (Celtic)
ISO 8859-16 (South-Eastern European)
Added glyphs:
ȷʼ̒ ЀЍѐѝ‒–—‘’‚‛“”„‟‹›
Xolonium 1.0 2011-01-04 Severin Meyer <[email protected]>
Completed glyph sets:
ISO 8859-1 (Western European)
ISO 8859-15 (Western European)
Added glyphs:
ĄĆĘŁŃŚŹŻąćęłńśźżıˆˇ˙˚˛˜File: 2d/dodge_the_creeps/fonts/LICENSE.txt
Copyright 2011-2016 Severin Meyer [email protected],
with Reserved Font Name Xolonium.
This Font Software is licensed under the SIL Open Font License,
Version 1.1. This license is copied below, and is also available
with a FAQ at http://scripts.sil.org/OFL
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
File: 2d/drawable_textures/README.md
Drawable Textures
This is a simple demo in which you can paint using a
DrawableTexture.
The code shows how to draw on the texture, and the same texture is being copied
to a sphere and cube mesh to give a better example of how it can be used in-game.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/drawable-textures-demo/
Screenshots
File: 2d/dynamic_tilemap_layers/README.md
Dynamic TileMap Layers
Example of how to make a fake wall using TileMap's_tile_data_runtime_update() method. It shows how
to disable collisions per layer.
[!NOTE]
The new TileMapLayer introduced in Godot 4.3 allows disabling collisions for a layer dynamically using a checkbox in the inspector.
For earlier Godot versions, use the procedure described here.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/dynamic-tilemap-layers-demo/
Screenshots
File: 2d/finite_state_machine/README.md
Hierarchical Finite State Machine
This example shows how to apply the State machine programming
pattern in GDscript, including Hierarchical States, and a
pushdown automaton.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/hierarchical-finite-state-machine-demo/
Why use a state machine
States are common in games. You can use the pattern to:
Separate each behavior and transitions between behaviors,
thus make scripts shorter and easier to manage.Respect the Single Responsibility Principle.
Each State object represents one action.Improve your code's structure. Look at the scene tree and
FileSystem tab: without looking at the code, you'll know
what the Player can or cannot do.
You can read more about States in the excellent
Game Programming Patterns ebook.
Screenshots
File: 2d/glow/README.md
Glow for 2D
This showcases how to use glow in a 2D game via the WorldEnvironment node.
Slide the cave image left and right to observe the glow effect at work. Press G
to toggle the glow map (lens dirt) effect.
The Label is on a separate CanvasLayer, so that it is not affected by glow.
Language: GDScript
Renderer: Mobile
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/glow-for-2d-demo/
Screenshots
File: 2d/hexagonal_map/README.md
Hexagonal Game
Very simple demo showing a hexagonal TileMap and TileSet.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/hexagonal-game-demo/
Screenshots
File: 2d/instancing/README.md
Instancing Demo
A demo showing how to use scene instancing to
make many duplicates of the same object.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/instancing-demo/
Screenshots
File: 2d/isometric/README.md
Isometric Game
This demo shows a traditional isometric view with depth sorting.
A character can move around the level and will also slide around objects,
as well as be occluded when standing in front or behind them.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/isometric-game-demo/
How does it work?
The level uses a TileMap
in which the tiles have different vertical offsets.
The walls, doors, and pillars each haveStaticBody2D
and CollisionPolygon2D
at their base. The player also has a collider at its base,
which makes the player collide with the level.
2D lighting effects are achieved using a mixture of PointLight2D nodes (which provide real-time shadows)
and pre-placed Polygon2Ds with sprites. To provide additional ambient shading, the goblin also has a blob
shadow below its feet (a Sprite2D with a texture).
Screenshots
File: 2d/kinematic_character/README.md
Kinematic Character 2D
Example of how to make a kinematic character controller in 2D usingCharacterBody2D.
The character moves around, is affected by moving platforms,
can jump through one-way collision platforms, etc.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/kinematic-character-2d-demo/
Screenshots
File: 2d/light2d_as_mask/README.md
2D Lights as Mask
Example of how to use 2D lights to mask objects on screen.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/light2d-as-mask-demo/
Screenshots
File: 2d/lights_and_shadows/README.md
2D Lights and Shadows
Simple demo of 2D lights and shadows, usingLight2D
and LightOccluder2D.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/lights-and-shadows-2d-demo/
Screenshots
File: 2d/navigation/README.md
Navigation Polygon 2D
Example of using 2D navigation using:
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/navigation-polygon-2d-demo/
Screenshots
File: 2d/navigation_astar/README.md
Grid-based Navigation with AStarGrid2D
This is an example of using AStarGrid2D for navigation in 2D,
complete with Steering Behaviors in order to smooth the movement out.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/grid-based-navigation-with-astargrid2d-demo/
Screenshots
File: 2d/navigation_mesh_chunks/README.md
Navigation Mesh Chunks 2D
Demo that shows how to bake navigation meshes for large world chunk systems.
A mouse cursor left click changes the start position for the debug paths.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/navigation-mesh-chunks-2d-demo/
Screenshots
File: 2d/particles/README.md
2D Particles
This demo showcases how 2D particle systems work in Godot.
Language: GDScript
Renderer: Mobile
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/particles-2d-demo/
How does it work?
It uses GPUParticles2D nodes
with ParticleProcessMaterial
materials. Note that ParticleProcessMaterial is agnostic between 2D and 3D,
so when used in 2D, the "Disable Z" flag should be enabled.
Screenshots
File: 2d/physics_platformer/README.md
Physics Platformer
This demo uses RigidBody2D
for the player and enemies.
These character controllers are more powerful thanCharacterBody2D,
but can be more difficult to handle, as they require
manual modification of the RigidDynamicBody velocity.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/physics-platformer-2d-demo/
How does it work?
The player and enemies use dynamic character
controllers for movement, made withRigidBody2D,
which means that they can perfectly interact with physics
(there is a see-saw, and you can even ride enemies).
Because of this, all movement must be done in sync with
the physics engine, inside of _integrate_forces().
Screenshots
Music
"Pompy" by Hubert Lamontagne (madbr) https://soundcloud.com/madbr/pompy
File: 2d/physics_tests/README.md
2D Physics Tests
This demo contains a series of tests for the 2D
physics engine.
They can be used for different purpose:
- Functional tests to check for regressions and
behavior of the 2D physics engine - Performance tests to evaluate performance
of the 2D physics engine
Language: GDScript
Renderer: Mobile
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/physics-tests-2d-demo/
Screenshots
File: 2d/platformer/README.md
2D Platformer
This demo is a pixel art 2D platformer with graphics and sound.
It shows you how to code characters and physics-based objects
in a real game context. This is a relatively complete demo
where the player can jump, walk on slopes, fire bullets,
interact with enemies, and more. It contains one closed
level, and the player is invincible, unlike the enemies.
You will find most of the demo’s content in the level.tscn scene.
You can open it from the default game.tscn scene, or double
click on level.tscn in the src/level/ directory.
We invite you to open the demo's GDScript files in the editor as
they contain a lot of comments that explain how each class works.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/platformer-2d-demo/
Features
- Side-scrolling player controller using
CharacterBody2D.- Can walk on and snap to slopes.
- Can shoot, including while jumping.
- Enemies that crawl on the floor and change direction when they encounter an obstacle.
- Camera that stays within the level’s bounds.
- Supports keyboard and gamepad controls.
- Platforms that can move in any direction.
- Gun that shoots bullets with rigid body (natural) physics.
- Collectible coins.
- Pause and pause menu.
- Pixel art visuals.
- Sound effects and music.
Screenshots
Music
Pompy by Hubert Lamontagne (madbr)
File: 2d/polygons_lines/README.md
2D Polygons and Lines
A demo of solid and textured 2D polygons and lines using
Polygon2D and
Line2D.
In this project, solid Line2Ds are antialiased by using a specially crafted texture.
By using a texture that is solid white on all its pixels except the top and bottom edges
(which are fully transparent white), the border appears smooth thanks to bilinear filtering.
A more extensive variation of this concept (which works better with variable-width lines) can be found
in the unofficial
Antialiased Line2D add-on.
2D multisample antialiasing (MSAA) is also supported when using the Forward+ and Mobile rendering
methods. This is a slower approach, but it works on all 2D drawing performed within the viewport,
including Polygon2D nodes or custom drawing.
This approach can be used at the same time as the aforementioned Line2D antialiasing technique.
Language: GDScript
Renderer: Mobile
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/polygons-and-lines-2d-demo/
Screenshots
File: 2d/pong/README.md
Pong with GDScript
A simple Pong game. This demo shows best practices
for game development in Godot, including
signals.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/pong-with-gdscript-demo/
[!NOTE]
There is a C# version available here.
How does it work?
The walls, paddle, and ball are allArea2D
nodes. When the ball touches the walls or the paddles,
they emit signals and modify the ball.
Screenshots
File: 2d/role_playing_game/README.md
Role Playing Game
This shows a method of creating grid-based movement with Godot
and GDScript. It also includes a simple JRPG-style dialogue and
battle system on top of it.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/role-playing-game-demo/
Screenshots
File: 2d/role_playing_game/dialogue/dialogue_data/npc.json
{
"dialog_1" : { "name": "UNKNOWN", "text": "Hey, it's a good time to have a JRPG fight, right?" },
"dialog_2" : { "name": "UNKNOWN", "text": "Let me introduce myself, I'm your OPPONENT." },
"dialog_3" : { "name": "OPPONENT", "text": "Enough talking. Let's fight!" },
}
File: 2d/role_playing_game/dialogue/dialogue_data/object.json
{
"dialog_1" : { "name": "PLAYER", "text": "Just a key..." }
}
File: 2d/role_playing_game/dialogue/dialogue_data/player_lose.json
{
"dialog_1" : { "name": "OPPONENT", "text": "Aha! I won, maybe you can try again next time." }
}
File: 2d/role_playing_game/dialogue/dialogue_data/player_won.json
{
"dialog_1" : { "name": "OPPONENT", "text": "Congratulations, you won!" }
}
File: 2d/screen_space_shaders/README.md
Screen Space Shaders
Several examples of full screen 2D shader processing.
Many common full-res effects are implemented here for reference.
Language: Godot shader language and GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/screen-space-shaders-demo/
Screenshots
File: 2d/skeleton/README.md
Skeleton2D Demo
This demo shows how to create a rigged and animated character in 2D using
Godot's Skeleton2D node. There are several movement-related animations and
there is a simple character controller that controls the animations.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/skeleton2d-demo/
Licenses
GBot character Copyright © circa 2020 Andreas Esau, MIT License.
Initial rigging and animating Copyright © 2020 RustyStriker, MIT License.
Screenshots
File: 2d/sprite_shaders/README.md
Sprite Shaders
This is a sample consisting of different shaders applied to some sprites.
Effects include outlines, blurs, distorts, shadows, glows, and more.
Language: Godot shader language
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/sprite-shaders-demo/
Screenshots
File: 2d/tween/README.md
Tween Interpolation
A demo showing advanced tween usage.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/tween-interpolation-demo/
Screenshots
File: 3d/README.md
3D Demos
These demos are all 3D, but otherwise do not have a common theme.
Languages: All are GDScript
File: 3d/antialiasing/README.md
3D Anti-Aliasing
This project showcases the various 3D antialiasing
techniques supported by Godot.
- Multisample antialiasing (MSAA): High quality, high performance cost.
Does not blur the image.- Does not affect shader-induced aliasing (such as specular aliasing) or alpha
scissor materials, so these will remain aliased.
- Does not affect shader-induced aliasing (such as specular aliasing) or alpha
- Fast approximate antialiasing (FXAA): Low quality, low performance cost.
Slightly blurs the image. - Subpixel morphological antialiasing (SMAA): Medium quality, moderate performance
cost. Slightly blurs the image, but not as much as FXAA. Godot only supports
the spatial version of SMAA, also called SMAA 1x. - Temporal antialiasing (TAA): High-quality, low performance cost. Slightly
blurs the image (but less so than FXAA).- Antialiasing quality is worse on fast-moving objects than other methods,
especially at lower framerates since the TAA won't have enough time to
converge on those objects. You can use the FPS limit setting provided
when TAA is enabled to compare quality between different framerates
(provided your graphics card can keep up). - Can introduce ghosting artifacts on moving objects, especially if motion
vectors are not correctly generated from a given material shader.
- Antialiasing quality is worse on fast-moving objects than other methods,
- Supersampling (SSAA): The highest-quality technique, but also the most
expensive. Does not blur the image.- 200% resolution scale is equivalent to 4× SSAA, as each dimension is
doubled. For example, if running in a 1920×1080 window at 200% render scale,
the 3D framebuffer will be 3840×2160. - SSAA can be used together with FXAA or TAA to counter the blurring added by
those algorithms, while further improving antialiasing quality.
- 200% resolution scale is equivalent to 4× SSAA, as each dimension is
- Alpha antialiasing: Applied on certain materials in the demo, available in
two modes (Alpha Edge Blend and Alpha Edge Clip). This is most effective when
MSAA is enabled, as Godot enables alpha-to-coverage rendering on the material
in this case. When MSAA is disabled, a fixed dithering pattern is applied on
the edge of transparent areas on the material.
Godot allows using multiple antialiasing techniques at the same time. This can
be useful to obtain the best possible quality, or to find a better performance
tradeoff.
A resolution scale slider is also provided. When set below 100%,
AMD FidelityFX Super Resolution 1.0 upscaling can be enabled to improve visuals
compared to traditional bilinear filtering.
Note
AMD FidelityFX Super Resolution 1.0 is not an antialiasing technique.
It works best when used at the same time as another antialiasing method.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/anti-aliasing-3d-demo/
Screenshots
Licenses
Files in the polyhaven/ folder are downloaded from https://polyhaven.com/a/dutch_ship_medium
and are licensed under CC0 1.0 Universal.
File: 3d/antialiasing/textures/checker.LICENSE.md
License for `checker.png`
Copyright (c) 2020 Kenney
Licensed under CC0 1.0 Universal.
Downloaded from https://kenney.nl/assets/prototype-textures
File: 3d/antialiasing/textures/paint.LICENSE.md
License for `paint.png` and `paint_normal.png`
Copyright (c) 2010 johndn
Licensed under CC BY 3.0 Unported.
Downloaded from https://opengameart.org/content/splatter-pack
File: 3d/csg/README.md
Constructive Solid Geometry (CSG)
This project showcases the various constructive solid geometry features supported by Godot.
CSG can be used to prototype level designs within the 3D editor.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/constructive-solid-geometry-csg-demo/
Screenshots
File: 3d/csg/textures/checker.LICENSE.md
License for `checker.png`
Copyright (c) 2020 Kenney
Licensed under CC0 1.0 Universal.
Downloaded from https://kenney.nl/assets/prototype-textures
File: 3d/decals/README.md
Decals
This demo includes many examples of Decal nodes in action,
for the purpose of showcasing Godot's rendering capabilities.
The decal filter mode can be adjusted in the top-left corner:
- For games with a pixel art appearance, the Nearest filter mode can be used
instead of Linear. - Filter modes with Mipmaps prevent decals from looking grainy at a distance, at
a small performance cost. When mipmaps are used without anisotropic filtering,
decals will look blurry when viewed at oblique angles. - Filter modes with Anisotropic don't look grainy at a distance and also avoid
looking blurry when viewed at oblique angles. However, filter modes with
Anisotropic have a greater performance cost than enabling Mipmaps alone.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/decals-demo/
Screenshots
File: 3d/decals/textures/checker.LICENSE.md
License for `checker.png`
Copyright (c) 2020 Kenney
Licensed under CC0 1.0 Universal.
Downloaded from https://kenney.nl/assets/prototype-textures
File: 3d/decals/textures/paint.LICENSE.md
License for `paint.png` and `paint_normal.png`
Copyright (c) 2010 johndn
Licensed under CC BY 3.0 Unported.
Downloaded from https://opengameart.org/content/splatter-pack
File: 3d/decals/textures/paintedarrow.LICENSE.md
License for `paintedarrow.png` and `paintedarrow_normal.png`
Copyright (c) 2020 Alex Foster
Licensed under CC BY-SA 3.0 Unported.
Downloaded from https://github.com/redeclipse/decals/blob/master/molexted/paintedarrow.png
File: 3d/decals/textures/scifi.LICENSE.md
License for `scifi_*.png`
Copyright (c) 2012 Yughues
Licensed under CC0 1.0 Universal.
Downloaded from https://opengameart.org/content/free-decals-01-sci-fi
File: 3d/global_illumination/README.md
Global Illumination
This demo showcases Godot's global illumination systems:
LightmapGI, VoxelGI, SDFGI, ReflectionProbe, and screen-space effects like SSAO and SSIL.
Use the mouse to look around, W/A/S/D
or arrow keys to move.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/global-illumination-demo/
How does it work?
A sphere and box are parented to the camera to showcase dynamic object lighting.
A ReflectionProbe is parented to the sphere to showcase real-time reflections.
When the ReflectionProbe is hidden, it is disabled. In this case,
VoxelGI, SDFGI, or environment lighting will be used to provide fallback reflections.
A Decal node is parented to the moving sphere and cube to provide simple shadows for them.
This is especially effective when using the LightmapGI (All) global illumination mode,
which doesn't allow dynamic objects to cast shadows on static surfaces.
Screenshots
Licenses
zdm2.glb is derived from the Cube 2: Sauerbraten
map "zdm2" and is
licensed under CC BY 4.0 Unported.
The OBJ file which it was converted from is available in the game-maps-obj repository.
File: 3d/graphics_settings/README.md
3D Graphics Settings
A demo showing an example of a graphics settings menu.
Included settings are:
Video settings:
- UI scale.
- Resolution scale.
- Display filter (bilinear, AMD FidelityFX Super Resolution 1.0 or 2.2).
- Fullscreen.
- V-Sync (traditional and adaptive).
- Anti-aliasing (MSAA, FXAA, SMAA, TAA).
- Camera field of view.
Effect settings:
- Signed distance field global illumination (SDFGI).
- Bloom (glow).
- Screen-space ambient occlusion (SSAO).
- Screen-Space reflections (SSR).
- Screen-space indirect lighting (SSIL).
- Volumetric fog.
- Screen adjustments: brightness, contrast, saturation.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/graphics-settings-3d-demo/
Screenshots
File: 3d/ik/README.md
3D Inverse Kinematics
This is an example of different Inverse Kinematic algorithms
implemented in Godot. It contains four scenes, showing
different ways they can be used.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/inverse-kinematics-3d-demo/
How does it work?
This demo shows how to implement IK using two different methods. One uses theSkeletonIK3D
node which is built into Godot. The other method is using a script
called FABRIK (inside of the SADE plugin) for inverse kinematics.
Screenshots
File: 3d/ik/model/README.md
Godot Battle Bot
This folder contains the model and textures/materials for the Godot Battle Bot.
Yes, the battle bot really is 14.5 meters tall. It is a powerful robot.
File: 3d/kinematic_character/README.md
Kinematic Character 3D
Kinematic character demo for 3D using a cube for the character.
This is similar to the 3D platformer demo.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/kinematic-character-3d-demo/
How does it work?
This demo uses a CharacterBody3D
for the player, and StaticBody3D
for the level. Each has colliders, the player moves itself viamove_and_slide() in _physics_process(), and collides with the level.
Screenshots
File: 3d/labels_and_texts/README.md
3D Labels and Texts
This project showcases the two main 3D text techniques supported by Godot:
Label3D and TextMesh.
Both Label3D and TextMesh exist in 3D space and can optionally be occluded by
other objects, but they serve different use cases.
Label3D: The Label3D node is a 3D node like any other. It draws text using
one quad per character, which can optionally be set to work as a billboard.
TextMesh: Unlike Label3D, TextMesh can optionally have actual depth since it
generates geometry to represent the text. TextMesh is not a node, but a
PrimitiveMesh resource you use within a MeshsInstance3D node. Therefore, you
won't see TextMesh in the Create New Node dialog.
Icons can also be displayed in Label3D and TextMesh using icon fonts, which can
be generated from SVG files using services like
Fontello. Note that while Label3D supports colored
rasterized fonts (such as emoji), only monochrome fonts can be generated from
Fontello. TextMesh and Label3D with MSDF fonts are limited to monochrome fonts
too.
Both standard rasterized and MSDF fonts can be used in Label3D, while TextMesh
will only support fonts that can be drawn as MSDF well. This excludes fonts that
have self-intersecting outlines, which Godot currently doesn't handle well when
converting them to MSDF.
In most scenarios, Label3D is easier to use and can look better (thanks to
outlines and MSDF rendering). TextMesh is more powerful and is intended for more
specialized use cases.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/labels-and-texts-3d-demo/
Screenshots
File: 3d/labels_and_texts/fonts/config.json
{
"name": "",
"css_prefix_text": "icon-",
"css_use_suffix": false,
"hinting": true,
"units_per_em": 1000,
"ascent": 850,
"glyphs": [
{
"uid": "959d8ebe4e528fa3870e40b3bd6aab74",
"css": "icon_monochrome_light",
"code": 59392,
"src": "custom_icons",
"selected": true,
"svg": {
"path": "M407.8 75.1C366.4 84.3 325.5 97.1 287.1 116.4 288 150.3 290.2 182.8 294.6 215.8 279.7 225.4 264 233.5 250.1 244.7 235.9 255.6 221.5 266 208.7 278.8 183.1 261.8 156 245.9 128.1 231.9 98 264.3 69.9 299.2 46.9 338.3 64.9 366.7 84.3 395.1 102.2 417.4V610.5 635 657.4C102.7 657.4 103.1 657.4 103.6 657.4L250.7 671.6C258.4 672.4 264.4 678.6 265 686.3L269.5 751.2 397.9 760.4 406.7 700.5C407.9 692.7 414.5 686.9 422.4 686.9H577.6C585.5 686.9 592.1 692.7 593.3 700.5L602.1 760.4 730.5 751.2 735 686.3C735.6 678.6 741.6 672.4 749.3 671.6L896.4 657.4C896.8 657.4 897.3 657.4 897.7 657.4V638.2L897.8 638.2V417.4C918.5 391.3 938.1 362.5 953.1 338.3 930.2 299.2 902 264.3 871.9 231.9 844 245.9 816.9 261.8 791.3 278.8 778.5 266 764.1 255.6 749.9 244.7 736 233.5 720.3 225.4 705.4 215.8 709.8 182.8 712 150.3 712.9 116.4 674.5 97.1 633.6 84.3 592.2 75.1 575.6 102.9 560.5 133 547.3 162.4 531.7 159.8 516 158.8 500.3 158.6V158.6C500.2 158.6 500.1 158.6 500 158.6 499.9 158.6 499.8 158.6 499.7 158.6V158.6C484 158.8 468.3 159.8 452.7 162.4 439.5 133 424.4 102.9 407.8 75.1ZM291.4 426.2C340.4 426.2 380.1 465.8 380.1 514.8 380.1 563.8 340.4 603.5 291.4 603.5 242.5 603.5 202.8 563.8 202.8 514.8 202.8 465.8 242.5 426.2 291.4 426.2ZM708.6 426.2C757.5 426.2 797.2 465.8 797.2 514.8 797.2 563.8 757.5 603.5 708.6 603.5 659.6 603.5 619.9 563.8 619.9 514.8 619.9 465.8 659.6 426.2 708.6 426.2ZM500 478C515.8 478 528.6 489.7 528.6 504V585.6C528.6 599.9 515.8 611.5 500 611.5 484.2 611.5 471.5 599.9 471.5 585.6V504C471.5 489.7 484.2 478 500 478ZM765.7 701.9L761.1 767.2C760.6 775 754.3 781.3 746.5 781.9L589.7 793.1C589.3 793.1 589 793.1 588.6 793.1 580.8 793.1 574.1 787.4 572.9 779.6L563.9 718.6H436.1L427.1 779.6C425.9 787.8 418.5 793.7 410.3 793.1L253.5 781.9C245.7 781.3 239.4 775 238.9 767.2L234.3 701.9 102 689.1C102.1 703.3 102.2 718.9 102.2 722 102.2 861.8 279.5 928.9 499.7 929.7H500 500.3C720.5 928.9 897.7 861.8 897.7 722 897.7 718.9 897.9 703.3 898 689.1ZM358.8 520.1C358.8 552.6 332.4 578.9 299.9 578.9 267.4 578.9 241 552.6 241 520.1S267.4 461.2 299.9 461.2C332.4 461.2 358.8 487.6 358.8 520.1M641.3 520.1C641.3 552.6 667.6 578.9 700.1 578.9 732.6 578.9 758.9 552.6 758.9 520.1S732.6 461.2 700.1 461.2C667.6 461.2 641.3 487.6 641.3 520.1",
"width": 1000
},
"search": [
"icon_monochrome_light"
]
},
{
"uid": "ecf70bd6187356af84cbe8540bab4f2b",
"css": "logo_large_monochrome_dark",
"code": 59394,
"src": "custom_icons",
"selected": true,
"svg": {
"path": "M1377 370.4C1364.6 370.4 1354.3 376.1 1345.9 387.4 1337.6 398.7 1333.4 414.6 1333.4 435 1333.4 455.4 1337.4 471.1 1345.4 482 1353.3 493 1363.8 498.4 1376.8 498.4 1389.8 498.4 1400.3 492.9 1408.4 481.8 1416.5 470.8 1420.5 455 1420.5 434.4 1420.5 413.9 1416.4 398 1408 387 1399.7 375.9 1389.3 370.4 1377 370.4M1376.8 573.6C1340.7 573.6 1311.2 561.8 1288.5 538.1 1265.7 514.5 1254.4 480 1254.4 434.6 1254.4 389.2 1265.9 354.9 1288.9 331.5 1311.9 308.1 1341.6 296.4 1377.9 296.4 1414.3 296.4 1443.7 307.9 1466 330.9 1488.4 353.9 1499.6 388.8 1499.6 435.4 1499.6 482 1488.1 516.7 1465.3 539.5 1442.4 562.2 1412.9 573.6 1376.8 573.6M1607.6 373.1V488.4C1607.6 493.8 1608 497.2 1608.8 498.6 1609.6 500 1611.9 500.7 1615.7 500.7 1629.9 500.7 1640.6 495.5 1647.9 484.9 1655.3 474.4 1658.9 456.9 1658.9 432.3 1658.9 407.7 1655.1 391.7 1647.6 384.3 1640 376.9 1627.9 373.1 1611.5 373.1ZM1533.6 552V320.7C1533.6 314.3 1535.2 309.2 1538.4 305.4 1541.7 301.7 1545.8 299.8 1551 299.8H1615.4C1656.2 299.8 1687.3 310.1 1708.5 330.7 1729.7 351.3 1740.3 383.6 1740.3 427.9 1740.3 522.5 1699.9 569.7 1619.2 569.7H1553.3C1540.2 569.7 1533.6 563.8 1533.6 552M1888.3 370.4C1876 370.4 1865.6 376.1 1857.3 387.4 1848.9 398.7 1844.8 414.6 1844.8 435 1844.8 455.4 1848.7 471.1 1856.7 482 1864.7 493 1875.1 498.4 1888.1 498.4 1901.1 498.4 1911.6 492.9 1919.7 481.8 1927.8 470.8 1931.9 455 1931.9 434.4 1931.9 413.9 1927.7 398 1919.4 387 1911 375.9 1900.7 370.4 1888.3 370.4M1888.1 573.6C1852 573.6 1822.6 561.8 1799.8 538.1 1777.1 514.5 1765.7 480 1765.7 434.6 1765.7 389.2 1777.2 354.9 1800.2 331.5 1823.2 308.1 1852.9 296.4 1889.3 296.4 1925.7 296.4 1955 307.9 1977.4 330.9 1999.8 353.9 2010.9 388.8 2010.9 435.4 2010.9 482 1999.5 516.7 1976.6 539.5 1953.7 562.2 1924.2 573.6 1888.1 573.6M2154.6 563.6C2154.6 568.7 2141.9 571.3 2116.5 571.3 2091 571.3 2078.3 568.7 2078.3 563.6V370H2032C2027.6 370 2024.6 364.1 2022.8 352.3 2022 346.6 2021.6 340.9 2021.6 334.9 2021.6 329.1 2022 323.3 2022.8 317.6 2024.6 305.8 2027.6 299.8 2032 299.8H2199.7C2204.1 299.8 2207.2 305.8 2209 317.6 2209.8 323.3 2210.1 329.1 2210.1 334.9 2210.1 340.9 2209.8 346.6 2209 352.3 2207.2 364.1 2204.1 370 2199.7 370H2154.6ZM1186.2 426.6C1165.4 426.3 1141.7 430.6 1141.7 430.6V471.1H1165.6L1165.3 489.2C1165.3 495.9 1158.7 499.2 1145.4 499.2 1132.2 499.2 1120.5 493.6 1110.4 482.4 1100.2 471.2 1095.1 454.9 1095.1 433.3 1095.1 411.7 1100.1 395.7 1110 385.5 1119.8 375.2 1132.8 370 1148.7 370 1155.4 370 1162.3 371.1 1169.5 373.3 1176.7 375.5 1181.5 377.5 1184 379.5 1186.4 381.4 1188.8 382.4 1190.9 382.4 1193.1 382.4 1196.6 379.8 1201.5 374.7 1206.4 369.5 1210.8 361.7 1214.7 351.3 1218.5 340.9 1220.4 332.9 1220.4 327.2 1220.4 321.6 1220.3 317.7 1220.1 315.7 1214.7 309.8 1204.7 305.1 1190.2 301.6 1175.6 298.1 1159.4 296.4 1141.4 296.4 1101.8 296.4 1070.8 308.9 1048.5 333.8 1026.1 358.7 1014.9 391.1 1014.9 430.9 1014.9 477.7 1026.4 513.2 1049.2 537.4 1072.1 561.5 1102.2 573.6 1139.5 573.6 1159.5 573.6 1177.3 571.9 1192.9 568.4 1208.4 564.9 1218.8 561.4 1223.9 557.8L1225.4 437.1C1225.4 430.1 1206.9 426.9 1186.2 426.6M1104.9 731.4C1102.8 735.8 1098.9 739.8 1093.1 743.4 1087.4 747.1 1080.1 748.9 1071.3 748.9 1059.7 748.9 1050.3 745.2 1043.2 737.8 1036.1 730.4 1032.5 719.8 1032.5 706V671.4C1032.5 657.9 1035.9 647.5 1042.6 640.2 1049.3 633 1058.3 629.4 1069.5 629.4 1080.4 629.4 1088.9 632.2 1094.9 637.9 1100.9 643.7 1104.1 651.7 1104.3 661.9L1104.2 662.3H1095.3C1094.9 654.5 1092.7 648.5 1088.4 644.2 1084.1 640 1077.8 637.8 1069.5 637.8 1061 637.8 1054.3 640.7 1049.4 646.4 1044.6 652.1 1042.1 660.4 1042.1 671.3V706.1C1042.1 717.4 1044.8 726 1050 731.9 1055.3 737.8 1062.4 740.8 1071.3 740.8 1077.8 740.8 1083.1 739.6 1087 737.2 1091 734.9 1093.7 732 1095.3 728.7V698.4H1071.1V690H1104.9ZM1149.2 740.3C1154.5 740.3 1159.2 738.8 1163.4 735.7 1167.5 732.6 1170.4 728.7 1172.1 724V705.3H1156.8C1150.2 705.3 1145 707.2 1141.1 710.9 1137.2 714.6 1135.2 719.1 1135.2 724.6 1135.2 729.2 1136.5 733 1138.9 735.9 1141.4 738.8 1144.8 740.3 1149.2 740.3M1173.5 747.2C1173.1 744.2 1172.7 741.8 1172.4 739.9 1172.2 738 1172.1 736 1172.1 734.1 1169.5 738.4 1166.1 741.9 1161.9 744.7 1157.8 747.5 1153.1 748.9 1148 748.9 1140.9 748.9 1135.4 746.7 1131.5 742.3 1127.6 737.8 1125.7 731.8 1125.7 724.2 1125.7 716.2 1128.5 709.8 1134.1 705 1139.7 700.3 1147.4 697.9 1157 697.9H1172.1V687.3C1172.1 681.2 1170.5 676.4 1167.5 672.9 1164.4 669.5 1160.1 667.8 1154.5 667.8 1149.4 667.8 1145.1 669.4 1141.8 672.7 1138.5 676 1136.8 680 1136.8 684.8L1127.9 684.7 1127.7 684.3C1127.5 677.8 1129.9 672 1135.1 666.9 1140.3 661.8 1146.9 659.3 1155 659.3 1163 659.3 1169.4 661.7 1174.3 666.6 1179.2 671.5 1181.7 678.4 1181.7 687.5V729.8C1181.7 732.9 1181.8 735.9 1182.1 738.8 1182.4 741.7 1182.8 744.4 1183.5 747.2ZM1211.7 660.9L1212.6 674.3C1214.8 669.5 1217.9 665.8 1221.6 663.2 1225.4 660.6 1229.9 659.3 1235 659.3 1240.2 659.3 1244.6 660.8 1248.1 663.9 1251.7 667 1254.3 671.6 1256 677.8 1258.1 672.1 1261.1 667.5 1265 664.2 1268.9 660.9 1273.7 659.3 1279.2 659.3 1286.7 659.3 1292.6 662.4 1296.8 668.5 1300.9 674.6 1303 684.1 1303 696.8V747.2H1293.4V696.6C1293.4 686 1291.9 678.6 1289.1 674.3 1286.2 670 1282.1 667.9 1276.8 667.9 1271.2 667.9 1266.8 670.2 1263.7 675 1260.6 679.8 1258.6 685.8 1257.9 693V695.3 747.2H1248.4V696.7C1248.4 686.4 1246.9 679 1243.9 674.5 1241 670.1 1236.9 667.9 1231.6 667.9 1226.6 667.9 1222.5 669.5 1219.5 672.5 1216.4 675.6 1214.2 679.8 1212.9 685.1V747.2H1203.3V660.9ZM1350.9 667.8C1344.9 667.8 1340 670.5 1336.1 676 1332.2 681.4 1330.2 688.2 1330.1 696.3H1369.9V692.6C1369.9 685.4 1368.2 679.5 1364.9 674.8 1361.5 670.1 1356.9 667.8 1350.9 667.8M1352.3 748.9C1343 748.9 1335.4 745.4 1329.4 738.4 1323.5 731.4 1320.6 722.5 1320.6 711.6V697.3C1320.6 686.4 1323.6 677.3 1329.5 670.1 1335.4 662.9 1342.6 659.3 1350.9 659.3 1360 659.3 1367 662.5 1372 668.9 1377 675.4 1379.5 684 1379.5 694.9V704.4H1330.1V711.6C1330.1 719.9 1332.1 726.9 1336.1 732.4 1340.1 738 1345.5 740.8 1352.3 740.8 1357 740.8 1361.1 739.9 1364.5 738.3 1367.9 736.6 1370.9 734.3 1373.3 731.2L1377.3 738C1374.6 741.3 1371.3 743.9 1367.1 745.9 1363 747.9 1358.1 748.9 1352.3 748.9M1457.4 667.8C1451.3 667.8 1446.4 670.5 1442.5 676 1438.7 681.4 1436.7 688.2 1436.5 696.3H1476.4V692.6C1476.4 685.4 1474.7 679.5 1471.3 674.8 1468 670.1 1463.3 667.8 1457.4 667.8M1458.7 748.9C1449.4 748.9 1441.8 745.4 1435.9 738.4 1430 731.4 1427 722.5 1427 711.6V697.3C1427 686.4 1430 677.3 1435.9 670.1 1441.9 662.9 1449 659.3 1457.4 659.3 1466.4 659.3 1473.4 662.5 1478.4 668.9 1483.4 675.4 1485.9 684 1485.9 694.9V704.4H1436.5V711.6C1436.5 719.9 1438.5 726.9 1442.5 732.4 1446.5 738 1451.9 740.8 1458.7 740.8 1463.5 740.8 1467.5 739.9 1471 738.3 1474.4 736.6 1477.3 734.3 1479.8 731.2L1483.7 738C1481.1 741.3 1477.7 743.9 1473.6 745.9 1469.5 747.9 1464.5 748.9 1458.7 748.9M1511.2 660.9L1512 675.2C1514.3 670.1 1517.3 666.2 1521.2 663.4 1525 660.7 1529.4 659.3 1534.5 659.3 1542.2 659.3 1548.2 662.2 1552.3 667.9 1556.4 673.6 1558.5 682.5 1558.5 694.6V747.2H1548.8V694.7C1548.8 684.8 1547.4 677.9 1544.5 673.9 1541.6 669.9 1537.4 667.9 1532 667.9 1527.1 667.9 1523 669.5 1519.7 672.8 1516.4 676 1513.9 680.2 1512.3 685.6V747.2H1502.7V660.9ZM1586.6 711.6C1586.6 720.4 1588.2 727.4 1591.6 732.5 1594.9 737.8 1600 740.3 1606.7 740.3 1611.4 740.3 1615.3 739.1 1618.5 736.6 1621.7 734.1 1624.2 730.5 1626 726.1V683.3C1624.2 678.7 1621.8 675 1618.7 672.2 1615.6 669.3 1611.6 667.9 1606.9 667.9 1600.2 667.9 1595.1 670.9 1591.7 676.8 1588.3 682.7 1586.6 690.4 1586.6 699.8ZM1576.9 699.8C1576.9 687.6 1579.4 677.8 1584.3 670.4 1589.2 663 1596.1 659.3 1604.8 659.3 1609.7 659.3 1613.9 660.5 1617.6 662.9 1621.2 665.2 1624.2 668.6 1626.6 672.9L1627.6 660.9H1635.7V747.3C1635.7 758.4 1633.1 766.9 1628 773 1622.8 779 1615.5 782.1 1606 782.1 1602.6 782.1 1599 781.6 1595 780.5 1591.1 779.5 1587.7 778.1 1584.6 776.4L1587.3 768C1589.9 769.7 1592.8 771 1596 771.9 1599.2 772.9 1602.4 773.3 1605.9 773.3 1612.7 773.3 1617.8 771.1 1621.1 766.7 1624.4 762.3 1626 755.8 1626 747.3V736.9C1623.6 740.8 1620.6 743.7 1617 745.8 1613.5 747.9 1609.3 748.9 1604.7 748.9 1596 748.9 1589.2 745.5 1584.3 738.7 1579.4 731.9 1576.9 722.9 1576.9 711.6ZM1667.9 747.2H1658.3V660.9H1667.9ZM1667.9 636.3H1658.3V622.7H1667.9ZM1699.1 660.9L1699.9 675.2C1702.2 670.1 1705.3 666.2 1709.1 663.4 1712.9 660.7 1717.3 659.3 1722.4 659.3 1730.2 659.3 1736.1 662.2 1740.2 667.9 1744.3 673.6 1746.4 682.5 1746.4 694.6V747.2H1736.7V694.7C1736.7 684.8 1735.3 677.9 1732.4 673.9 1729.5 669.9 1725.4 667.9 1719.9 667.9 1715 667.9 1710.9 669.5 1707.6 672.8 1704.3 676 1701.8 680.2 1700.2 685.6V747.2H1690.6V660.9ZM1794.4 667.8C1788.4 667.8 1783.5 670.5 1779.6 676 1775.8 681.4 1773.7 688.2 1773.6 696.3H1813.4V692.6C1813.4 685.4 1811.7 679.5 1808.4 674.8 1805 670.1 1800.4 667.8 1794.4 667.8M1795.8 748.9C1786.4 748.9 1778.8 745.4 1773 738.4 1767.1 731.4 1764.1 722.5 1764.1 711.6V697.3C1764.1 686.4 1767.1 677.3 1773 670.1 1778.9 662.9 1786.1 659.3 1794.4 659.3 1803.4 659.3 1810.5 662.5 1815.5 668.9 1820.5 675.4 1823 684 1823 694.9V704.4H1773.6V711.6C1773.6 719.9 1775.6 726.9 1779.6 732.4 1783.6 738 1789 740.8 1795.8 740.8 1800.5 740.8 1804.6 739.9 1808 738.3 1811.5 736.6 1814.4 734.3 1816.8 731.2L1820.8 738C1818.1 741.3 1814.8 743.9 1810.6 745.9 1806.5 747.9 1801.6 748.9 1795.8 748.9M411.9 110.8C377.2 118.6 342.7 129.3 310.5 145.6 311.2 174.1 313.1 201.4 316.8 229.1 304.3 237.1 291.1 244 279.4 253.4 267.5 262.5 255.4 271.3 244.6 282 223.1 267.7 200.4 254.4 176.9 242.6 151.6 269.8 128 299.1 108.7 332 123.9 355.8 140.1 379.7 155.2 398.4V560.7 581.3 600C155.6 600 156 600.1 156.3 600.1L279.9 612C286.4 612.6 291.5 617.8 291.9 624.3L295.7 678.9 403.6 686.6 411 636.2C412 629.7 417.6 624.9 424.2 624.9H554.6C561.2 624.9 566.8 629.7 567.7 636.2L575.2 686.6 683 678.9 686.8 624.3C687.3 617.8 692.3 612.6 698.8 612L822.4 600.1C822.7 600.1 823.1 600 823.5 600V583.9L823.5 583.9V398.4C840.9 376.5 857.4 352.3 870 332 850.7 299.1 827.1 269.8 801.8 242.6 778.4 254.4 755.6 267.7 734.1 282 723.3 271.3 711.2 262.5 699.3 253.4 687.6 244 674.4 237.1 661.9 229.1 665.7 201.4 667.5 174.1 668.2 145.6 636 129.3 601.6 118.6 566.8 110.8 552.9 134.2 540.2 159.5 529.1 184.2 516 182 502.8 181.2 489.6 181V181C489.5 181 489.4 181 489.4 181 489.3 181 489.2 181 489.1 181V181C475.9 181.2 462.7 182 449.6 184.2 438.5 159.5 425.8 134.2 411.9 110.8ZM314.1 405.8C355.3 405.8 388.6 439.1 388.6 480.3 388.6 521.4 355.3 554.8 314.1 554.8 273 554.8 239.7 521.4 239.7 480.3 239.7 439.1 273 405.8 314.1 405.8ZM664.6 405.8C705.7 405.8 739.1 439.1 739.1 480.3 739.1 521.4 705.7 554.8 664.6 554.8 623.4 554.8 590.1 521.4 590.1 480.3 590.1 439.1 623.4 405.8 664.6 405.8ZM489.4 449.4C502.6 449.4 513.4 459.1 513.4 471.2V539.7C513.4 551.8 502.6 561.5 489.4 561.5S465.4 551.8 465.4 539.7V471.2C465.4 459.1 476.1 449.4 489.4 449.4ZM712.6 637.4L708.7 692.3C708.3 698.9 703 704.2 696.4 704.6L564.7 714C564.4 714 564.1 714.1 563.8 714.1 557.2 714.1 551.6 709.3 550.6 702.7L543.1 651.5H435.6L428.1 702.7C427.1 709.6 420.9 714.5 414 714L282.3 704.6C275.7 704.2 270.4 698.9 270 692.3L266.2 637.4 155 626.7C155.1 638.7 155.2 651.7 155.2 654.3 155.2 771.7 304.1 828.2 489.1 828.8H489.4 489.6C674.6 828.2 823.5 771.7 823.5 654.3 823.5 651.7 823.6 638.7 823.7 626.7ZM370.7 484.7C370.7 512 348.6 534.1 321.3 534.1 294 534.1 271.8 512 271.8 484.7S294 435.2 321.3 435.2C348.6 435.2 370.7 457.4 370.7 484.7M608 484.7C608 512 630.1 534.1 657.4 534.1 684.8 534.1 706.9 512 706.9 484.7S684.8 435.2 657.4 435.2C630.1 435.2 608 457.4 608 484.7",
"width": 2473
},
"search": [
"logo_large_monochrome_dark"
]
},
{
"uid": "3a164e5ba7def42e5af0946d1079304e",
"css": "snapgrid",
"code": 59395,
"src": "custom_icons",
"selected": true,
"svg": {
"path": "M125 0V125H0V187.5H125V437.5H0V500H125V750H0V812.5H125V937.5H187.5V812.5H375V750H187.5V500H437.5L500 437.5V187.5H750V375H812.5V187.5H937.5V125H812.5V0H750V125H500V0H437.5V125H187.5V0ZM187.5 187.5H437.5V437.5H187.5ZM437.5 812.5V937.5H562.5V812.5ZM812.5 812.5V937.5H937.5V812.5ZM687.5 437.5A250 250 0 0 0 437.5 687.5V812.5H562.5V687.5A125 125 0 0 1 687.5 562.5 125 125 0 0 1 812.5 687.5V812.5H937.5V687.5A250 250 0 0 0 687.5 437.5Z",
"width": 1000
},
"search": [
"snapgrid"
]
},
{
"uid": "816ca3af916e032fd1eb82bdea2fa06f",
"css": "statussuccess",
"code": 59396,
"src": "custom_icons",
"selected": true,
"svg": {
"path": "M500 62.5C258.4 62.5 62.5 258.4 62.5 500S258.4 937.5 500 937.5 937.5 741.6 937.5 500 741.6 62.5 500 62.5ZM705.8 304.8L794.2 393.2 437.5 750 205.8 518.2 294.2 429.8 437.5 573.1Z",
"width": 1000
},
"search": [
"statussuccess"
]
},
{
"uid": "f8db52fb129b7132b91d3ed9275ed2cb",
"css": "audiostreamwav",
"code": 59400,
"src": "custom_icons",
"selected": true,
"svg": {
"path": "M748.2 62.6C743 62.8 737.8 63.5 732.8 64.9L295.3 189.9C268.5 197.6 250 222.1 250 250V596.9C239.7 594.8 229.3 593.8 218.8 593.8 132.5 593.8 62.5 663.7 62.5 750 62.5 836.3 132.5 906.3 218.8 906.3 302.9 906.2 371.8 839.5 374.8 755.5 374.9 753.7 375 751.8 375 750V297.2L687.5 208V406.3L812.5 343.8V125C812.5 89.8 783.4 61.6 748.2 62.6ZM656.3 500C639 500 625 513.9 625 531.3V843.8C625 861.1 639 875 656.3 875S687.5 861.1 687.5 843.8V531.3C687.5 513.9 673.6 500 656.3 500ZM781.3 562.5C764 562.5 750 576.4 750 593.8V781.3C750 798.6 764 812.5 781.3 812.5S812.5 798.6 812.5 781.3V593.8C812.5 576.4 798.6 562.5 781.3 562.5ZM531.3 625C514 625 500 638.9 500 656.3V718.8C500 736.1 514 750 531.3 750S562.5 736.1 562.5 718.8V656.3C562.5 638.9 548.6 625 531.3 625ZM906.3 625C889 625 875 638.9 875 656.3V718.8C875 736.1 889 750 906.3 750S937.5 736.1 937.5 718.8V656.3C937.5 638.9 923.6 625 906.3 625Z",
"width": 1000
},
"search": [
"audiostreamwav"
]
},
{
"uid": "5185d1b48390de5633d96cff34f51a33",
"css": "icon_gray",
"code": 59401,
"src": "custom_icons",
"selected": true,
"svg": {
"path": "M344.1 511.3C344.1 547.1 315.1 576.2 279.2 576.2 243.3 576.2 214.2 547.1 214.2 511.3 214.2 475.4 243.3 446.3 279.2 446.3 315.1 446.3 344.1 475.4 344.1 511.3M655.8 511.3C655.8 547.1 684.9 576.2 720.8 576.2 756.6 576.2 785.7 547.1 785.7 511.3 785.7 475.4 756.6 446.3 720.8 446.3 684.9 446.3 655.8 475.4 655.8 511.3",
"width": 1000
},
"search": [
"icon_gray"
]
},
{
"uid": "17cf6a56adb9fe41facff411151e0343",
"css": "icon_white",
"code": 59402,
"src": "custom_icons",
"selected": true,
"svg": {
"path": "M938.8 662.8C938.8 662.8 937.4 653.8 936.5 653.9L774.2 669.6C761.3 670.8 751.3 681.1 750.4 694.1L745.9 758 620.3 766.9 611.8 709C609.9 696.1 598.7 686.4 585.6 686.4H414.3C401.3 686.4 390.1 696.1 388.2 709L379.6 766.9 254.1 758 249.6 694.1C248.7 681.1 238.7 670.8 225.8 669.6L63.4 653.9C62.6 653.8 61.9 662.8 61.1 662.8L60.9 697.9 198.4 720.1 202.9 784.6C203.8 797.6 214.3 808.2 227.4 809.1L400.3 821.4C401 821.5 401.6 821.5 402.3 821.5 415.3 821.5 426.5 811.8 428.4 798.9L437.2 739.3H562.8L571.6 798.9C573.5 811.8 584.7 821.5 597.7 821.5 598.4 821.5 599 821.5 599.6 821.4L772.6 809.1C785.6 808.2 796.2 797.6 797.1 784.5L801.6 720.1 939 697.8ZM367.7 505.4C367.7 559.5 323.9 603.3 269.8 603.3 215.8 603.3 172 559.5 172 505.4 172 451.4 215.8 407.7 269.8 407.7 323.9 407.7 367.7 451.4 367.7 505.4M500 612.2C482.6 612.2 468.5 599.4 468.5 583.6V493.5C468.5 477.7 482.6 464.9 500 464.9 517.4 464.9 531.5 477.7 531.5 493.5V583.6C531.5 599.4 517.4 612.2 500 612.2M632.3 505.4C632.3 559.5 676.1 603.3 730.2 603.3 784.2 603.3 828 559.5 828 505.4 828 451.4 784.2 407.7 730.2 407.7 676.1 407.7 632.3 451.4 632.3 505.4",
"width": 1000
},
"search": [
"icon_white"
]
},
{
"uid": "0d68b4247cac7d777fef2901e66380ba",
"css": "icon_blue",
"code": 59403,
"src": "custom_icons",
"selected": true,
"svg": {
"path": "M61.1 398V662.8C61.6 662.8 62.1 662.8 62.5 662.8L224.9 678.5C233.4 679.3 240.1 686.2 240.7 694.7L245.7 766.4 387.3 776.5 397 710.3C398.3 701.7 405.7 695.4 414.3 695.4H585.6C594.3 695.4 601.7 701.7 602.9 710.3L612.7 776.5 754.3 766.4 759.3 694.7C759.9 686.2 766.6 679.3 775.1 678.5L937.4 662.8C937.8 662.8 938.3 662.8 938.8 662.8V641.6L938.9 641.6V398H939.5C961 370.5 980.9 341.6 1000 310.7 974.6 267.6 943.6 229 910.4 193.3 879.6 208.8 849.7 226.3 821.4 245 807.3 231 791.4 219.5 775.7 207.5 760.4 195.1 743.1 186.1 726.6 175.5 731.5 139.1 734 103.3 734.9 65.9 692.6 44.5 647.4 30.4 601.7 20.3 583.4 50.9 566.7 84.1 552.2 116.6 535 113.7 517.7 112.6 500.3 112.4V112.4C500.2 112.4 500.1 112.4 500 112.4 499.9 112.4 499.8 112.4 499.7 112.4V112.4C482.3 112.6 465 113.7 447.8 116.6 433.2 84.1 416.6 50.9 398.3 20.3 352.6 30.4 307.4 44.5 265.1 65.9 266 103.3 268.4 139.1 273.3 175.5 256.9 186.1 239.6 195.1 224.2 207.5 208.6 219.5 192.7 231 178.5 245 150.3 226.3 120.4 208.8 89.6 193.3 56.4 229 25.4 267.6 0 310.7 19.1 341.6 39 370.5 60.5 398ZM793.2 711.9L788.1 783.9C787.5 792.6 780.6 799.5 771.9 800.1L599 812.5C598.6 812.5 598.2 812.5 597.7 812.5 589.1 812.5 581.7 806.2 580.5 797.6L570.5 730.3H429.4L419.5 797.6C418.2 806.6 410.1 813.2 401 812.5L228 800.1C219.4 799.5 212.4 792.6 211.8 783.9L206.8 711.9 60.8 697.8C60.9 713.5 61.1 730.7 61.1 734.1 61.1 888.3 256.7 962.4 499.7 963.2H500.3C743.3 962.4 938.8 888.3 938.8 734.1 938.8 730.6 939 713.5 939.1 697.8Z",
"width": 1000
},
"search": [
"icon_blue"
]
}
]
}
File: 3d/labels_and_texts/textures/checker.LICENSE.md
License for `checker.png`
Copyright (c) 2020 Kenney
Licensed under CC0 1.0 Universal.
Downloaded from https://kenney.nl/assets/prototype-textures
File: 3d/labels_and_texts/textures/textmesh_texture.LICENSE.md
License for `textmesh_texture.png`
Copyright (c) 2022 bruvzg
Licensed under CC0 1.0 Universal.
Downloaded from the test project linked in https://github.com/godotengine/godot/pull/60507
File: 3d/lights_and_shadows/README.md
3D Lights and Shadows
This project showcases various 3D light and shadow features supported by Godot.
This includes contact-hardening shadows (PCSS), light projectors, and area lights.
The background sky uses a PhysicalSkyMaterial, which allows for the sky colors
to be automatically adjusted as the sun performs a day/night cycle. The radiance
map (used to provide ambient and reflected light to the scene) is updated in
real-time with the environment sky's process mode set accordingly.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/lights-and-shadows-3d-demo/
Screenshots
File: 3d/lights_and_shadows/checker.LICENSE.md
License for `checker.png`
Copyright (c) 2020 Kenney
Licensed under CC0 1.0 Universal.
Downloaded from https://kenney.nl/assets/prototype-textures
File: 3d/material_testers/README.md
Material Testers
This demo includes many sphere-like objects with complex materials,
for the purpose of showcasing Godot's rendering capabilities.
This demo was featured at the beginning of the
Godot 3.0 trailer.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/material-testers-demo/
Screenshots
File: 3d/navigation/README.md
3D Navigation
Navigation demo for 3D scenes, with a character
able to pathfind around a static 3D environment.
The navigation path is drawn using a line.
Code is provided for polyline following in 3D.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/navigation-3d-demo/
Screenshots
File: 3d/navigation_mesh_chunks/README.md
Navigation Mesh Chunks 3D
Demo that shows how to bake navigation meshes for large world chunk systems.
A mouse cursor left click changes the start position for the debug paths.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/navigation-mesh-chunks-3d-demo/
Screenshots
File: 3d/occlusion_culling_mesh_lod/README.md
Occlusion Culling and Mesh LOD
This demo showcases the use of occlusion culling and mesh level of detail in a 3D scene.
The demo contains 1,024 identical rooms in a 64×64 grid. The room geometry is
used as a basis for a baked OccluderInstance3D, which allows each room to be
culled if it is hidden by another room's walls.
Occlusion culling can provide a performance benefit in draw call-bound
scenarios. However, since the Forward+ backend uses a depth prepass, the
shading cost is already reduced by the depth prepass. As a result, occlusion
culling will not always result in a tangible performance increase, especially in
outdoor scenes that have fewer occlusion culling opportunities. Indoor scenes
with no DirectionalLight3D casting shadows are a best-case scenario for
occlusion culling.
The blue spheres make use of automatically generated LODs, which reduce the
number of triangles that need to be rendered each frame by the GPU. This
provides a significant performance increase in scenes with complex geometry. In
most scenes, this provides a greater performance benefit compared to occlusion
culling.
While running the demo, you can toggle the use of mesh LOD and occlusion culling
to view the performance difference these features make in this project. Results
will vary depending on your CPU and GPU model.
[!WARNING]
If you are using an engine build that is not fully optimized, you may notice
that enabling occlusion culling decreases performance. This is because
occlusion culling is a demanding process on the CPU, which needs all the
build-time optimization it can get.Official builds are fully optimized, but self-compiled builds are not fully
optimized by default (use theproduction=yesSCons option).
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/occlusion-culling-and-mesh-lod-demo/
Screenshots
File: 3d/particles/README.md
3D Particles
This project showcases various 3D particle features supported by Godot, for both GPU-based and CPU-based particles.
This includes particle collision, attractors, trails, and subemitters.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/particles-3d-demo/
Screenshots
File: 3d/particles/checker.LICENSE.md
License for `checker.png`
Copyright (c) 2020 Kenney
Licensed under CC0 1.0 Universal.
Downloaded from https://kenney.nl/assets/prototype-textures
File: 3d/physical_light_camera_units/README.md
Physical Light and Camera Units
This demo showcases a
physical light and camera units
setup. This allows you to use real world units for lights (lumen, lux, Kelvin)
and cameras (shutter speed, aperture, ISO sensitivity).
By default, Godot uses arbitrary units for many physical properties that apply
to light like color, energy, camera field of view, and exposure. These
properties use arbitrary units, because using accurate physical units comes with
a few tradeoffs that aren't worth it for many games. As Godot favors ease of use
out of the box, physical light units are disabled by default.
If you aim for photorealism in your project, using real world units as a basis
can help make things easier to adjust. References for real world materials,
lights and scene brightness are wildly available on websites such as
Physically Based.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/physical-light-and-camera-units-demo/
Screenshots
File: 3d/physics_interpolation/README.md
Physics Interpolation
This demo showcases physics interpolation
in 3D with varying camera modes (first person, third person, fixed perspective).
This is also known as fixed timestep interpolation.
Physics interpolation makes motion appear smooth regardless of the rendered
framerate and physics ticks per second configured in the Project Settings.
There are some caveats related to its usage though, such as increased latency
and potential issues with teleporting objects. It's recommended to go
through the
documentation
when enabling physics interpolation in a project.
Physics interpolation is enabled by default in this project. Press T
to toggle it while the demo is running. This allows you to see the impact on
smoothness of physics interpolation.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/physics-interpolation-demo/
Screenshots
File: 3d/physics_tests/README.md
3D Physics Tests
This demo contains a series of tests for the 3D
physics engine.
They can be used for different purposes:
- Functional tests to check for regressions and
compare the behavior between physics engines - Performance tests to evaluate and compare
performance between physics engines
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/physics-tests-3d-demo/
Screenshots
File: 3d/physics_tests/assets/robot_head/readme.txt
Robot Head model created by James Redmond (fracteed) 2018
created with Godot 3.0.5
models created using Blender 2.79 and Sunstance Painter/Designer
Creative Commons License CC-BY:
"This license lets others distribute, remix, tweak, and build upon your work, even commercially, as long as they credit you for the original creation.
This is the most accommodating of licenses offered. Recommended for maximum dissemination and use of licensed materials."
File: 3d/platformer/README.md
Platformer 3D
3D Platformer demo using aCharacterBody3D.
It uses similar code to the 2D platformer, but implemented in 3D.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/platformer-3d-demo/
This project uses Virtual joystick add-on by Marco F for touch screen input.
Check it out: https://godotengine.org/asset-library/asset/1787
Screenshots
File: 3d/procedural_materials/README.md
Procedural Materials
This demo includes procedurally generated materials with 3 different techniques:
NoiseTexture2D:
Built-in class that generates images on the CPU based on
noise patterns (such as Simplex or Cellular). This is suited for static
textures only. Texture generation is done asynchronously and is faster than
using scripting, since the noise algorithms are implemented in C++ in the
engine.Scripting: Uses the
Image class
to procedurally generate an
ImageTexture
on the CPU. This is suited for static textures only. This approach is more
flexible than NoiseTexture2D, but is slower to generate textures. Once the
texture is generated, rendering performance is identical to NoiseTexture2D.Shaders: Uses a 2D shader on a
ColorRect
node that matches a
Viewport's
size with the resulting
ViewportTexture
applied to a material. This is updated on the GPU in real-time, and is most
suited for animated textures. This approach can also be used for static
textures, with a lower performance overhead since the texture doesn't need to
be updated every frame.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/procedural-materials-demo/
Screenshots
File: 3d/ragdoll_physics/README.md
Ragdoll Physics
This demo includes an example of ragdoll simulation for characters.
The ragdoll setup in this demo was performed by following the Ragdoll system
tutorial. The character script also has an initial_velocity variable implemented,
which will give an impulse to all bones part of the ragdoll system.
This initial impulse is typically used in games to make ragdoll effects more impactful,
e.g. giving additional recoil after taking a punch.
Impact sounds are played according to the impact speed, and are played with
reduced pitch when slow motion mode is engaged. This usesAudioServer.playback_speed_scale which affects all audio,
so in a more complex project, you would want to use
audio buses
which can make the effect only apply to certain sounds. This can be used to keep
music unaffected by the pitch shifting effect.
Character models use outlines provided by the BaseMaterial3D Stencil > Mode
property. The scene's static geometry is designed using CSG nodes and is baked to a
static mesh and collision to improve load times and allow for global illumination
with LightmapGI.
Controls:
- Space: Add a ragdoll at the mouse cursor position
- Shift (hold): Enable slow motion mode (1/4 speed)
- R: Reset ragdoll simulation and remove user-placed ragdolls
- Right Mouse Button: Orbit camera
- Mouse Wheel: Zoom
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/ragdoll-physics-demo/
Screenshots
File: 3d/ragdoll_physics/characters/mannequiny.LICENSE.md
License for `mannequiny.glb`
Copyright (c) 2020 GDQuest and contributors (https://www.gdquest.com/)
Licensed under CC BY 4.0 International
Downloaded from https://github.com/gdquest-demos/godot-3d-mannequin/issues/19#issuecomment-582235299.
File: 3d/ragdoll_physics/sounds/impact_big.LICENSE.md
License for `impact_big.wav`
Copyright (c) 2020 FFeller
Licensed under CC0 1.0 Universal.
Downloaded from https://freesound.org/people/FFeller/sounds/532873/.
Sound edited to remove silence at the start for lower latency on playback.
File: 3d/ragdoll_physics/sounds/impact_small.LICENSE.md
License for `impact_small.wav`
Copyright (c) 2017 dorian.mastin
Licensed under CC0 1.0 Universal.
Downloaded from https://freesound.org/people/dorian.mastin/sounds/381626/.
Sound edited to remove silence at the start for lower latency on playback.
File: 3d/ragdoll_physics/textures/checker.LICENSE.md
License for `checker.png`
Copyright (c) 2020 Kenney
Licensed under CC0 1.0 Universal.
Downloaded from https://kenney.nl/assets/prototype-textures
File: 3d/rigidbody_character/README.md
RigidBody Character 3D
RigidBody character demo for 3D using a capsule for the character.
Cubes as RigidBodies spawn in the map from above to show interaction
with the player (jump on them, gently push them), which would be
impossible with a CharacterBody.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/rigidbody-character-3d-demo/
How does it work?
This demo uses a RigidBody3D
for the player, and StaticBody3D
for the level. Each has colliders, the player moves itself viaapply_central_impulse() in _physics_process(), and collides with the level.
The ShapeCast3D node is used to detect whether the player is able to jump
(i.e. touching the floor). Compared to a RayCast3D which is infinitely thin,
this allows for more reliable checking if the player is standing over an edge or
corner.
Screenshots
File: 3d/sky_shaders/README.md
3D Sky Shaders
An example of a sky shader in Godot. This shader features real-time volumetric
clouds and physical sky with Raleigh and Mie scattering, which causes the sky's
colors to adjust automatically depending on the sun angle. The sun's angle is set
automatically from the first DirectionalLight3D node in the scene
(unless its sky mode is Light Only).
Physical sky features are based on the built-in PhysicalSkyMaterial, while
volumetric clouds were added after converting PhysicalSkyMaterial to a
ShaderMaterial using the Convert to ShaderMaterial button in the editor
resource dropdown.
[!WARNING]
Sky shaders are rendered every frame if they use the
TIMEvariable or are
otherwise updated every frame (e.g. if a uniform is updated in_process()
or with an AnimationPlayer). This has a significant performance impact for
complex sky shaders. The performance impact can be reduced by adjusting the
radiance map properties in Environment, but it will remain significant.The shader in this demo project is expensive, and is intended to be used in
games where most of the sky remains visible at all times (such as flight
simulators).Optimizations to sky shader rendering are planned in future Godot releases.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/sky-shaders-3d-demo/
How does it work?
The day/night cycle is performed using an AnimationPlayer node that adjusts node
properties and the sky shader parameters in real-time.
Spheres with varying levels of roughness and metallic materials are instanced using
a @tool script
so that they don't have to be created manually in the editor, yet they can still be previewed within the editor.
Screenshots
File: 3d/soft_body_physics/README.md
3D Soft Body Physics
An example of soft body physics
(deformable objects) such as cloth, boxes, and spheres.
Soft bodies support pinning points as well as applying impulses/forces to specific points,
which can be useful for effects such as wind.
Soft bodies can interact with static, rigid, and character bodies (and will be aware of rigid bodies'
weight when doing so). However, soft bodies currently do not interact with other soft bodies,
which means they will pass through each other.
The per-point impulse timer example also showcases how to attach nodes to specific points of a SoftBody3D.
This can be used to make particles, meshes, or even rigid bodies follow specific points.
The cloth soft bodies in this demo use a BaseMaterial3D with the Grow property enabled to prevent
visible clipping into surfaces.
Controls:
- R: Reset soft body simulation and user-placed objects
- C: Place cloth at cursor position
- V: Place light box at cursor position
- B: Place heavy box at cursor position
For performance reasons, only 10 user-placed objects can be present at a time in this demo.
The oldest objects will be removed when attempting to place more than 10 objects.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/soft-body-physics-3d-demo/
Screenshots
File: 3d/soft_body_physics/textures/checker.LICENSE.md
License for `checker.png`
Copyright (c) 2020 Kenney
Licensed under CC0 1.0 Universal.
Downloaded from https://kenney.nl/assets/prototype-textures
File: 3d/sprites/README.md
3D Sprites and Animated Sprites
This project demonstrates the usage of Sprite3D and AnimatedSprite3D in 3D
space.
Both Sprite3D and AnimatedSprite3D are nodes that allow 2D textures or
animations to exist within a 3D world. They are particularly useful for stylized
or lightweight 3D effects using traditional 2D assets.
- Sprite3D: A node that renders a single 2D texture or frame in 3D space. It
can be rotated, scaled, and positioned like any 3D node. Optionally, it can
behave as a billboard to always face the camera. - AnimatedSprite3D: Extends Sprite3D by supporting frame-based animation. You
can assign a SpriteFrames resource to play sequences of textures, making it
suitable for character sprites, visual effects, or flipbook-style animations in
3D.
Both types can be combined with custom shaders to simulate outlines, lighting
effects, or other visual enhancements. In most scenarios, Sprite3D is used for
static images or simple animations, while AnimatedSprite3D is preferred for more
complex animations or when you need to manage multiple frames efficiently.
This demo includes examples of basic rotation animation and showcases how
shaders can be applied to Sprite3D and AnimatedSprite3D for stylized results.
The shaders demonstration also shows how to create paper-like effects, which can
be useful for creating a unique visual style in most of the game.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/sprites-and-animated-sprites-3d-demo/
Screenshots
File: 3d/sprites/textures/checker.LICENSE.md
License for `checker.png`
Copyright (c) 2020 Kenney
Licensed under CC0 1.0 Universal.
Downloaded from https://kenney.nl/assets/prototype-textures
File: 3d/sprites/textures/small_8_direction_characters.LICENSE.md
License for `Small-8-Direction-Characters_by_AxulArt.png`
Copyright (c) AxulArt
Licensed under CC BY 4.0 International.
Downloaded from https://axulart.itch.io/small-8-direction-characters
File: 3d/squash_the_creeps/README.md
Squash the Creeps (3D)
This is a simple game where your character must move
and jump to squash as many enemies for as long as possible.
You gain 1 point for every enemy squashed.
Controls:
- Up Arrow, W, Gamepad Left Stick: Move up
- Down Arrow, S, Gamepad Left Stick: Move down
- Left Arrow, Gamepad Left Stick: Move left
- Right Arrow, Gamepad Left Stick: Move right
- Space, Right Mouse Button, Gamepad A/Cross: Jump
This is a finished version of the game featured in the
"Your first 3D game"
tutorial in the documentation. For more details,
consider following the tutorial in the documentation.
This demo covers:
- Handling player input.
- Moving and jumping in a 3D game.
- Spawning enemies randomly around the game arena.
- Using the built-in animation editor to breathe life to your game.
- Creating a complete game loop with lose conditions, score, and the ability to restart.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/squash-the-creeps-demo/
[!NOTE]
There is a C# version available here.
Screenshots
License
art/House In a Forest Loop.ogg Copyright © 2012 HorrorPen, CC-BY 3.0: Attribution. Source: https://opengameart.org/content/loop-house-in-a-forest
Font is "Montserrat Medium". Copyright 2011 The Montserrat Project Authors. Details are in fonts/LICENSE.txt.
File: 3d/squash_the_creeps/fonts/LICENSE.txt
Copyright 2011 The Montserrat Project Authors (https://github.com/JulietaUla/Montserrat)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
—————————————————————————————-
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
—————————————————————————————-
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
DEFINITIONS
“Font Software” refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.
“Reserved Font Name” refers to any names specified as such after the copyright statement(s).
“Original Version” refers to the collection of Font Software components as distributed by the Copyright Holder(s).
“Modified Version” refers to any derivative made by adding to, deleting, or substituting—in part or in whole—any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.
“Author” refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.
Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.
The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
File: 3d/tonemap_color_correction/README.md
Tonemapping and Color Correction
This showcases various tonemapping operators and their interaction with several
color correction textures (1D and 3D).
A script generating neutral 3D LUT textures is also included.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/tonemapping-and-color-correction-demo/
Screenshots
File: 3d/truck_town/README.md
Truck Town
This is a demo implementing different types of trucks of
varying complexity using vehicle physics.
Controls
- Up Arrow, W, Gamepad Right Trigger: Accelerate
- Down Arrow, S, Space, Gamepad Left Trigger, Gamepad B/Circle, Gamepad X/Square: Brake/reverse
- Left Arrow, Gamepad Left Stick, Gamepad D-Pad Left: Steer left
- Right Arrow, Gamepad Left Stick, Gamepad D-Pad Right: Steer right
- U, Gamepad Select, left-click speedometer: Change speedometer unit (m/s, km/h, mph)
- C, Gamepad Y/Triangle: Change camera (exterior, interior, top-down)
- M, Gamepad D-Pad Down: Change mood (sunrise, day, sunset, night)
- Shift, Gamepad A/Cross: Use boost
- H, Enter, Gamepad Left Stick Press: Use horn
- L, Gamepad Right Stick Press: Toggle headlights (automatically occurs on mood change)
- Escape, Gamepad D-Pad Up: Go back to menu (press again to exit)
On mobile platforms, the vehicle automatically accelerates. Touch the left and
right edges of the screen to steer. Touch the middle of the screen to
brake/reverse (this also temporarily stops acceleration).
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/truck-town-demo/
How does it work?
The base vehicle uses aVehicleBody3D
node. The trailer truck is tied together using aConeJointTwist3D
node, and the tow truck is tried together using a chain made ofRigidBody3D
nodes which are pinned together usingPinJoint3D nodes.
Credits
Ambient sounds
Models
- tree low-poly by Ricardo Sanchez (https://sketchfab.com/380660711785)
- Lowpoly lamp by RitiWox (https://sketchfab.com/RitiWox)
Screenshots
File: 3d/truck_town/car_select/icon_license.txt
The audio_on.png and audio_off.png files are from the "Game Icon" pack made by Kenney (https://kenney.nl/).
They are distributed with the CC0 license (http://creativecommons.org/publicdomain/zero/1.0/).
File: 3d/truck_town/town/lamp/license.txt
Model Information:
- title: Lowpoly lamp
- source: https://sketchfab.com/3d-models/lowpoly-lamp-c020f6af78f7482f8cf2ac84d05c08a5
- author: RitiWox (https://sketchfab.com/RitiWox)
Model License:
- license type: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
- requirements: Author must be credited. Commercial use is allowed.
If you use this 3D model in your project be sure to copy paste this credit wherever you share it:
This work is based on "Lowpoly lamp" (https://sketchfab.com/3d-models/lowpoly-lamp-c020f6af78f7482f8cf2ac84d05c08a5) by RitiWox (https://sketchfab.com/RitiWox) licensed under CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
File: 3d/truck_town/town/tree/license.txt
Model Information:
- title: tree low-poly
- source: https://sketchfab.com/3d-models/tree-low-poly-4cd243eb74c74b3ea2190ebcec0439fb
- author: Ricardo Sanchez (https://sketchfab.com/380660711785)
Model License:
- license type: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
- requirements: Author must be credited. Commercial use is allowed.
If you use this 3D model in your project be sure to copy paste this credit wherever you share it:
This work is based on "tree low-poly" (https://sketchfab.com/3d-models/tree-low-poly-4cd243eb74c74b3ea2190ebcec0439fb) by Ricardo Sanchez (https://sketchfab.com/380660711785) licensed under CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
File: 3d/variable_rate_shading/README.md
Variable Rate Shading
This project showcases how to use
variable rate shading
(VRS) in 3D to improve performance.
Performance metrics are also displayed to evaluate potential performance gains.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/variable-rate-shading-demo/
Screenshots
File: 3d/visibility_ranges/README.md
Visibility Ranges (HLOD)
This demo showcases how to set up a hierarchical LOD system using visibility ranges.
This can improve performance significantly in 3D scenes by reducing the number of
draw calls and polygons that have to be drawn every frame.
Use WASD or arrow keys to move, and use the mouse to look around. Press
L to toggle the use of visibility ranges. Press F to
toggle the fade mode between transparency (the default in this demo) and
hysteresis (which is slightly faster, but results in more jarring
transitions).
[!NOTE]
Performance is expected to decrease significantly after disabling visibility ranges,
as all trees will be drawn with full detail regardless of distance.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/visibility-ranges-hlod-demo/
How does it work?
There are 2 goals when using visibility ranges to improve performance:
- Reduce the number of polygons that need to be drawn.
- Reduce the number of draw calls, while also preserving culling opportunities when up close.
To achieve this, the demo contains four levels of LOD for each cluster of 16 trees.
These are the levels displayed from closest to furthest away:
- Individual tree, with high geometric detail.
- Individual tree, with low geometric detail.
- Tree cluster, with high geoemtric detail.
- Tree cluster, with low geometric detail.
When the distance between the camera and the tree's origin is greater than 20
units, the high-detail tree blends into a low-detail tree (transition period
lasts 5 units).
When the distance between the camera and the tree's origin is greater than 150
units, all low-detail trees in the cluster are hidden, and the trees blend into
a high-detail tree cluster. This transition period lasts for a longer distance
(50 units) as the visual difference between these LOD levels is greater.
When the distance between the camera and the cluster's origin is greater than
450 units, the high-detail tree cluster blends into a low-detail tree cluster
(also with a transition period of 50 units).
When the distance between the camera and the cluster's origin is greater than
1,900 units, the low-detail tree cluster fades away with a transition period of
100 units. At this distance, the fog present in the scene makes this transition
harder to notice.
There are several ways to further improve this LOD system:
- Use MultiMeshInstance3D to draw clusters of geometry in a single draw call.
However, individual meshes will not benefit from frustum or occlusion culling
(only the entire cluster is culled at once). Therefore, this must be done
carefully to balance the number of draw calls with culling efficiency. - Use impostor sprites in the distance. These can be drawn with Sprite3D, or
using MeshInstance3D + QuadMesh with a StandardMaterial3D that has
billboarding enabled.
Screenshots
File: 3d/volumetric_fog/README.md
Volumetric Fog
This is an example of Godot's volumetric fog capabilities with the Vulkan renderer.
Showcased features are:
- Positive/negative density volumes that affect albedo (incoming light) and emission.
- Box/ellipsoid shapes, height falloff, and density modulation using a 3D texture.
- Temporal reprojection for greater stability and avoiding flickering.
- The difference is demonstrated with a moving fog volume.
- Global density adjustment. With FogVolume nodes that have a positive density,
it's possible to apply volumetric fog only in specific areas. - Custom FogVolume shader with real-time 3D noise
(provided by alghost).
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/volumetric-fog-demo/
Screenshots
File: 3d/voxel/README.md
Voxel Game
This demo is a minimal first-person voxel game,
inspired by others such as Minecraft.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/voxel-game-demo/
How does it work?
Each chunk is aStaticBody3D
with each block having its ownCollisionShape3D
for collisions. The meshes are created usingSurfaceTool
which allows specifying vertices, triangles, and UV coordinates
for constructing a mesh.
The chunks and chunk data are stored inDictionary
objects. New chunks have their meshes drawn in separateThreads,
but generating the collisions is done in the main thread, since Godot does
not support changing physics objects in a separate thread. There
are two terrain types, random blocks and flat grass. A more
complex terrain generator is out-of-scope for this demo project.
The player can place and break blocks using theRayCast3D
node attached to the camera. It uses the collision information to
figure out the block position and change the block data. You can
switch the active block using the brackets or with the middle mouse button.
There is a settings menu for render distance and toggling the fog.
Settings are stored inside of an
AutoLoad singleton
called "Settings". This class will automatically save
settings, and load them when the game opens, by using theFileAccess class.
Sticking to GDScript and the built-in Godot tools, as this demo does, is
quite limiting. If you are making your own voxel game, you should probably
use Zylann's voxel module instead: https://github.com/Zylann/godot_voxel
Screenshots
Licenses
Textures are from Minetest Game.
Some textures Copyright © 2010-2018 Minetest contributors,
CC BY-SA 3.0 Unported (Attribution-ShareAlike)
https://creativecommons.org/licenses/by-sa/3.0/
Some textures Copyright © 2010-2018 Minetest contributors,
CC0 1.0 "No rights reserved"
https://creativecommons.org/publicdomain/zero/1.0/
Font is "TinyUnicode" by DuffsDevice. Copyright © DuffsDevice, CC-BY (Attribution) http://www.pentacom.jp/pentacom/bitfontmaker2/gallery/?id=468
Copyright information for textures reused from Minetest Game
While most textures are under CC BY-SA 3.0, some are under CC0 1.0
Cisoun's texture pack (CC BY-SA 3.0):
- default_stone.png
- default_leaves.png
- default_leaves_simple.png
- default_tree.png
- default_tree_top.png
celeron55, Perttu Ahola [email protected] (CC BY-SA 3.0)
- default_mineral_iron.png
- default_mineral_coal.png
- default_bookshelf.png
VanessaE (CC BY-SA 3.0):
- default_sand.png
Calinou (CC BY-SA 3.0):
- default_brick.png
PilzAdam (CC BY-SA 3.0):
- default_mineral_gold.png
jojoa1997 (CC BY-SA 3.0):
- default_obsidian.png
InfinityProject (CC BY-SA 3.0):
- default_mineral_diamond.png
Zeg9 (CC BY-SA 3.0):
- default_coal_block.png
paramat (CC BY-SA 3.0):
- default_bush_stem.png
- default_grass_side.png -- Derived from a texture by TumeniNodes (CC-BY-SA 3.0)
- default_mese_block.png
TumeniNodes (CC BY-SA 3.0):
- default_grass.png
Blockmen (CC BY-SA 3.0):
- default_wood.png
sofar (CC0 1.0):
- default_gravel.png -- Derived from Gambit's PixelBOX texture pack light gravel
Neuromancer (CC BY-SA 3.0):
- default_furnace_bottom.png
- default_furnace_side.png
- default_cobble.png, based on texture by Brane praefect
- default_mossycobble.png, based on texture by Brane praefect
Gambit (CC BY-SA 3.0):
- default_diamond_block.png
kilbith (CC BY-SA 3.0):
- default_steel_block.png
- default_gold_block.png
- default_mineral_tin.png
Mossmanikin (CC BY-SA 3.0):
- default_fern_3.png
random-geek (CC BY-SA 3.0):
- default_dirt.png -- Derived from a texture by Neuromancer (CC BY-SA 3.0)
Krock (CC0 1.0):
- default_glass.png
File: 3d/waypoints/README.md
3D Waypoints
This is an example of displaying GUI elements such as Labels in a 3D world,
by projecting the 3D position onto the screen and displaying the GUI elements
directly, instead of relying on viewports. This results in better readability
and performance for use cases such as showing player names.
Some waypoints showcased in the demo will also snap to the window borders when
outside the player's view.
No Viewport or Sprite3D nodes are used in this demo.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/waypoints-3d-demo/
Screenshots
File: audio/README.md
Audio Demos
These demos showcase various audio features.
Languages: All are GDScript
Renderers: All are Compatibility
File: audio/audio_effects/README.md
Audio Effects demo
This is a simple demo that showcases the various Audio Effects that can be used in Godot.
One or more Audio Effects can be toggled and applied to the playable sound effects and background music.
See Audio buses
and Audio effects
in the manual for more information.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/audio-effects-demo/
Screenshots
Licenses
Music
Monkeys Spinning Monkeys Kevin MacLeod (incompetech.com)
Licensed under Creative Commons: By Attribution 3.0 License
https://creativecommons.org/licenses/by/3.0/
Sound Effects
All sound effects are from Freesound and licensed under CC0.
- Ding by MatthewWong
- Glass Breaking by chewiesmissus
- Meow by tuberatanka
- Whistle by OwlStorm
- Negative Beeps by themusicalnomad
- Sad Trombone by kirbydx
- Static by dotY21
Icon
- Equalizer licensed under CC0.
File: audio/bpm_sync/README.md
Audio BPM Sync
A demo of how to sync the audio playback with the time for a consistent BPM.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/audio-bpm-sync-demo/
How does it work?
For the sound clock, it uses methods inAudioServer
to sync the audio playback.
For the system clock, it uses OS.get_ticks_usec().
Screenshots
File: audio/device_changer/README.md
Audio Device Changer
This is a demo showing how the audio output device can be changed from Godot.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/audio-device-changer-demo/
How does it work?
It uses the set_device() method inAudioServer
to change the audio device.
The list of devices is populated using get_device_list().
Screenshots
File: audio/generator/README.md
Audio Generator
This is a demo showing how one can generate and
play audio samples from GDScript.
It plays a simple 440 Hz sine wave at 22050 Hz.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/audio-generator-demo/
How does it work?
It uses the push_frame() method on an AudioStreamGeneratorPlayback
object, which is inside of anAudioStreamPlayer
node, to generate audio frame-by-frame based on pulse_hz.
File: audio/mic_record/README.md
Audio Mic Record
This is an example showing how one can record audio from
the microphone and later play it back or save it to a file.
With an addition on how to change the format, mix rate and
stereo settings of the recording.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/audio-mic-record-demo/
Screenshots
File: audio/midi_piano/README.md
MIDI Piano
This demo shows how to use
InputEventMIDI
by creating a piano that can be controlled by a MIDI device.
This is known to work with a Yamaha MX88.
The piano can also be controlled by clicking on the keys, or by
manually calling the activate and deactivate methods on each key.
Note that MIDI output is not yet supported in Godot, only input works.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/midi-piano-demo/
Screenshots
File: audio/rhythm_game/README.md
Rhythm Game
A simple rhythm game that utilizes strategies described in the article
"Sync the gameplay with audio and music".
Playback position jitter is resolved using the
1€ filter to achieve smooth note movements.
The metronome sound was recorded by Ludwig Peter Müller in December 2020 under
the "Creative Commons CC0 1.0 Universal" license.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/rhythm-game-demo/
Screenshots
File: audio/spectrum/README.md
Audio Spectrum
This is a demo showing how a spectrum analyzer can be built using Godot.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/audio-spectrum-demo/
Screenshots
File: audio/text_to_speech/README.md
Text-to-Speech Demo
This is a demo showing text-to-speech support.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/text-to-speech-demo/
How does it work?
It uses tts_*() methods of the DisplayServer singleton
to enumerate voice information, send utterances to the OS TTS API, and receive callback signals.
Screenshots
File: compute/heightmap/README.md
Compute Shader Heightmap
This demo project gives an example of how to use compute shaders in Godot.
A compute shader is a piece of code that runs on the GPU and is written in GLSL
(as opposed to the
Godot shader language).
A compute shader can be used to take advantage of the GPU's ability to perform
massively parallel operations faster than a CPU. This demo can generate the
heightmap of an island from a noise texture, both on the CPU and the GPU. You
can try both options to compare the time it takes to generate the heightmap on
the CPU and GPU respectively.
For smaller noise textures, the CPU will often be faster, but the larger the
texture, the more performance gains are obtained by using the GPU.
On a PC with an NVIDIA GeForce RTX 3060 and 11th-generation Intel Core i7 processor,
the compute shader was tested to be faster for textures 1024×1024 and larger.
The dimensions of the image can be set on the exported Dimensions property
on the main scene. By default, it's set to 2048, which creates a 2048×2048
heightmap.
[!NOTE]
The shader code has been structured to be followed step-by-step by the user,
and may not necessarily represent best practices. The CPU code is also less
optimized than it could be. This is to reflect the GPU code as much as
possible. Besides the use of the GPU, no multithreading is used.
Languages: GDScript, GLSL
Renderer: Mobile
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/compute-shader-heightmap-demo/
Screenshots
File: compute/post_shader/README.md
Compositor Effects (Post-Processing)
This demo shows how to use compositor effects to create a post process.
This functionality only works in render device based renderers such as the Forward+ renderer.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/compositor-effects-post-processing-demo/
Technical description
This demo shows the use of the new compositor effect system to add a compute shader based post process.
A compositor effect needs to first be implemented as a subclass of the CompositorEffect resource.
An instance of this resource can then be added to the Compositor
either as part of a WorldEnvironment node or as part of a Camera3D node.
During rendering of a viewport the _render_callback on this resource will be called
at the configured stage and additional rendering commands can be submitted.
The two examples in this project both add a compute call to apply a full screen effect.
Both are designed as tool scripts so they work both in editor and in runtime.
post_process_shader.gd shows an example where a template shader is used into which user code
is injected. The user code is stored in a property of the compositor effect.
This approach is able to recompile the shader as the property changes in runtime.
This approach is not able to make efficient use of shader caching and may not be supported on certain
platforms, such as certain consoles, that require precompiling of shaders.
post_process_grayscale.gd show an example where the shader code is stored in a file,
namely post_process_grayscale.glsl and is compiled on initialisation.
For editing a project this means that the shader is compiled once when the effect is loaded.
Making changes to the glsl file will require reloading the scene.
The advantage of this approach is that Godot can precompile the glsl file.
Screenshots
File: compute/texture/README.md
Compute Texture
This demo shows how to use compute shaders to populate a texture that is used as an input for a material shader.
When the mouse cursor isn't hovering above the plane random "drops" of water are added that drive the ripple effect.
When the mouse cursor is above the plane you can "draw" on the plane to drive the ripple effect.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/compute-texture-demo/
Technical description
The texture populated by the compute shader contains height data that is used in the material shader to create a rain drops/water ripple effect. It's a well known technique that has been around since the mid 90ies, adapted to a compute shader.
Three textures are created directly on the rendering device:
- One texture is used to write the heightmap to and used in the material shader.
- One texture is read from and contains the previous frames data.
- One texture is read from and contains data from the frame before that.
Instead of copying data from texture to texture to create this history, we simply cycle the RIDs.
Note that in this demo we are using the main rendering device to ensure we execute our compute shader before our normal rendering.
To use the texture with the latest height data we use a Texture2DRD resource, this is a special texture resource node that is able to use a texture directly created on the rendering device and expose it to material shaders.
The material shader uses a standard gradient approach by sampling the height map and calculating tangent and bi-normal vectors and adjust the normal accordingly.
Licenses
Files in the polyhaven/ folder are downloaded from https://polyhaven.com/a/industrial_sunset_puresky
and are licensed under CC0 1.0 Universal.
Screenshots
File: gui/README.md
GUI Demos
These demos showcase GUI features and text features viaControl nodes.
Languages: All are GDScript, except SDF has no code
Renderers: All are Compatibility
File: gui/accessibility/README.md
UI Accessibility
This is a demo of UI accessibility in Godot.
Demo shows basic UI accessibility features and making custom nodes accessible.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/ui-accessibility-demo/
Screenshots
File: gui/bidi_and_font_features/README.md
BiDI and Font Features Demo
A demo showing BiDi text and BiDi overrides, line breaking and justification, and OpenType font features.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/bidi-and-font-features-demo/
Screenshots
File: gui/bidi_and_font_features/LICENSE.LinLibertine.txt
Copyright (c) 2003–2012, Philipp H. Poll (www.linuxlibertine.org | gillian at linuxlibertine.org),
with Reserved Font Name "Linux Libertine" and "Biolinum".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
File: gui/bidi_and_font_features/LICENSE.Noto.txt
This Font Software is licensed under the SIL Open Font License,
Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font
creation efforts of academic and linguistic communities, and to
provide a free and open framework in which fonts may be shared and
improved in partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply to
any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software
components as distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to,
deleting, or substituting -- in part or in whole -- any of the
components of the Original Version, by changing formats or by porting
the Font Software to a new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed,
modify, redistribute, and sell modified and unmodified copies of the
Font Software, subject to the following conditions:
Neither the Font Software nor any of its individual components, in
Original or Modified Versions, may be sold by itself.Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the
corresponding Copyright Holder. This restriction only applies to the
primary font name as presented to the users.The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created using
the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
File: gui/control_gallery/README.md
Control Gallery
Showcases various Control nodes with their names affixed for easy recognition.
This demo is inspired by similar "control gallery" demos found in GUI toolkits
such as GTK.
The 3 main panels ("Basic controls", "Numbers", and "Lists")
are separated using HSplitContainer and VSplitContainer nodes.
This makes their individual size adjustable. Drag the empty
space between panels to resize them.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/control-gallery-demo/
Screenshots
File: gui/custom_splash_screen/README.md
Custom Splash Screen
A demo showing how to create a custom splash screen scene, while hiding the
default splash screen for a seamless experience.
This example showcases a simple animation with the AnimationPlayer node.
Since the engine is already running while it's displaying the splash screen,
anything can be done, including audio/video playback. See
Playing videos
in the documentation for details.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/custom-splash-screen-demo/
How it works
- Project settings are configured in a way to hide the default splash screen.
Application > Boot Splash > Show Image is disabled,
and Application > Boot Splash > BG Color is set to the same color as
the first frame of the splash scene (pure black). - The main scene is configured to be
res://splash.tscn. - The main scene features an automatically playing AnimationPlayer.
Itsanimation_finishedsignal is connected to a method that changes the scene
tores://main.tscn.- The
res://main.tscnscene is intentionally not preloaded to ensure the
splash screen can display as quickly as possible. Otherwise, the main
scene's assets would have to be fully loaded before the splash screen can
begin its animation.
- The
[!TIP]
To skip the splash screen during development, you can configure the main
scene to beres://main.tscn, and override it using therelease
feature tag
tores://splash.tscn.
Screenshots
File: gui/drag_and_drop/README.md
Drag and Drop (GUI)
A demo showcasing drag and drop functionality.
- Drag and drop the color buttons to copy their colors over.
- Click on the buttons to manually adjust their color.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/drag-and-drop-gui-demo/
Screenshots
File: gui/gd_paint/README.md
GD Paint
GD Paint is a simple image editor made using Godot and GDScript.
It supports different types of "brushes": a basic pen/pencil
and eraser, as well as a rectangle and a circle brush.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/gd-paint-demo/
Screenshots
File: gui/input_mapping/README.md
GUI Input Mapping
A demo showing how to build an input key remapping screen.
- Click the buttons to change the bound keys.
- Persists the keys to disk, so they are preserved
after the project is restarted.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/gui-input-mapping-demo/
Screenshots
File: gui/msdf_font/README.md
Multi-channel Signed Distance Field Font Demo
This is a demo of Multi-channel Signed Distance Field fonts in Godot.
The technique used allows the text to remain clear under arbitrary zooms and rotations.
The multi-channel part refers to the font texture being generated in a way that allows
for higher precision when rendering the font. This allows MSDF fonts to be more readable
at small font sizes compared to single-channel signed distance field fonts.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/multi-channel-signed-distance-field-font-demo/
Screenshots
File: gui/multiple_resolutions/README.md
Multiple Resolutions and Aspect Ratios
[!NOTE]
This demo is intended to showcase what Godot can do in terms of
supporting multiple resolutions and aspect ratios. As such, this demo is highly
full-featured but it's also fairly complex to understand.If you're in a hurry and want to implement decent support for multiple
resolutions and aspect ratios in your game, see Multiple resolutions crash
course.
This project demonstrates how to set up a project to handle screens of multiple
resolutions and aspect ratios.
This demo allows you to adjust the window's base resolution, stretch mode,
stretch aspect, and scale factor (internally known as "stretch shrink"). This
lets you see what happens when adjusting those properties. Make sure to resize
the project window in any direction to see the difference with the various
stretch mode and stretch aspect settings.
The GUI can be made to fit the window or constrained to a specific aspect ratio
from a list of common aspect ratios. On ultrawide aspect ratios, this can be
used to prevent HUD elements from being too spread apart, which can harm the
gameplay experience. For non-essential HUD elements, specific controls can be
made to ignore this aspect ratio constraint when it makes sense (e.g. a list of
players on the side of the screen).
Additionally, a GUI margin setting is provided to better handle TVs with an
overscan area to prevent GUI elements from being cut off. This can also improve
the gameplay experience on large monitors by bringing HUD elements closer to the
center of the screen.
A DynamicFont with multichannel signed distance field (MSDF) rendering is also used.
This allows for crisp font rendering at any resolution, without having to re-rasterize
the font when the font size changes. This makes changing the various settings in this
demo faster, especially when large font sizes are used as a result of the GUI scale factor
setting being increased.
Note that by default, Godot uses font oversampling for traditional rasterized
DynamicFonts. This means MSDF fonts are not required to have crisp fonts at
higher-than-default screen resolutions.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/multiple-resolutions-and-aspect-ratios-demo/
Technical notes
The demo works with the following project settings:
canvas_itemsstretch mode (this was called2din Godot 3.x).
Recommended for most non-pixel art games.expandstretch aspect (allows support for multiple aspect ratios without
distortion or black bars).- Using a base window size with a 1:1 aspect ratio (
648×648in this demo).
This prevents GUI elements from automatically shrinking, even in portrait
mode.- With this setting, to prevent the GUI from breaking at narrow aspect ratios,
the GUI must be designed to work with a 1:1 aspect ratio. This is not
feasible in most complex games, so a base window size with a wider aspect
ratio (such as 4:3 or 16:10) can be used instead. The wider the aspect
ratio, the easier design becomes, but the GUI will automatically become
smaller at narrow aspect ratios unless the user overrides its scale with the
stretch shrink setting. Many devices such as the Steam Deck and MacBooks
feature 16:10 displays, so it's recommended to use a 16:10 resolution or
narrower as a base window size to ensure a good gameplay experience out of
the box on those devices.
- With this setting, to prevent the GUI from breaking at narrow aspect ratios,
- Using a window size override with a 16:9 aspect ratio (
1152×648in this demo).
This way, the project starts in a 16:9 window even if the base window size has
a 1:1 aspect ratio.- The test window height matches the width and height of the base window size,
so GUI elements are still at the same size.
- The test window height matches the width and height of the base window size,
Multiple resolutions crash course
Not everything in this demo is critical to all games. For gamejam projects or mobile games, most of this can be skipped.
See the Common use case scenarios
section in the Multiple resolutions documentation.
With the simpler setup described in the above documentation, there are a few
limitations compared to this demo:
- The HUD will shrink when the aspect ratio becomes narrower than the base
window size. As such, it's recommended to use a base window size with a 16:10
aspect ratio to prevent the HUD from shrinking on Steam Deck and MacBooks. - Players will not be able to define a margin, which can be problematic when
playing on a TV (as overscan can obstruct some HUD elements). This can be
worked around by ensuring the entire HUD always has a small margin around it.
This can be done by increasing the Margin properties on all sides on the root
Control node by 10-30 pixels or so.
If you're releasing a full-fledged game on a desktop platform such as Steam,
consider implementing full support as this demo suggests. Your players will
thank you :slightly_smiling_face:
Screenshots
File: gui/pseudolocalization/README.md
Pseudolocalization Demo
A demo showcasing the
pseudolocalization
feature in Godot.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/pseudolocalization-demo/
Screenshots
File: gui/regex/README.md
RegEx (Regular Expressions)
A demo showing regex functionality and usage.
Can also serve as a playground for regex testing.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/regex-regular-expressions-demo/
Screenshots
File: gui/rich_text_bbcode/README.md
Rich Text Label with BBCode
A demo showcasing the support for rich text and BBCode viaRichTextLabel.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/rich-text-label-with-bbcode-demo/
Screenshots
File: gui/theming_override/README.md
GUI Theming Override
Demonstrates how to override GUI colors and styleboxes at runtime.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/gui-theming-override-demo/
Screenshots
File: gui/translation/README.md
GUI Translation Demo
This is a demo of how a project can be internationalized. Translations are
created in a CSV file and then imported into Godot.
For correct display, the font used must contain the glyphs required by the
target language. See the fonts folder for some fonts that you can use in your
project. Godot can load system fonts as a fallback, but this is not supported on
all platforms and the different visual design of system fonts can create
inconsistencies.
Godot allows internationalized text to change automatically when the locale is
modified. Resources can also be set to internationalized alternatives and replaced
automatically on locale change. This process is known as remapping.
Both CSV and gettext (PO/POT) approaches are showcased. Use the button in the
bottom-right corner to switch between the two approaches.
The resource remapping process with PO is the same with CSV. The in-game text translation
process is also the same – use keys to fetch the appropriate translation.
The main difference between PO files and CSV files is the way both of them store
the translated data in their files. Have a look at the translations/po
and translations/csv folders to see the files involved.
See Internationalizing games
and Localization using gettext
for more information.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/gui-translation-demo/
Screenshots
File: gui/translation/fonts/LICENSE.DroidSans.txt
Copyright (C) 2008 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
File: gui/ui_mirroring/README.md
UI Mirroring Demo
A demo showing how to use UI mirroring.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/ui-mirroring-demo/
Screenshots
File: gui/ui_mirroring/LICENSE.Noto.txt
This Font Software is licensed under the SIL Open Font License,
Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font
creation efforts of academic and linguistic communities, and to
provide a free and open framework in which fonts may be shared and
improved in partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply to
any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software
components as distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to,
deleting, or substituting -- in part or in whole -- any of the
components of the Original Version, by changing formats or by porting
the Font Software to a new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed,
modify, redistribute, and sell modified and unmodified copies of the
Font Software, subject to the following conditions:
Neither the Font Software nor any of its individual components, in
Original or Modified Versions, may be sold by itself.Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the
corresponding Copyright Holder. This restriction only applies to the
primary font name as presented to the users.The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created using
the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
File: loading/README.md
Loading Demos
These demos demonstrate various ways to load scenes and other data.
Languages: All are GDScript
Renderers: Loading with Threads uses Mobile, the rest are Compatibility
File: loading/autoload/README.md
Autoload Demo
This demo shows how to use autoloads to change between scenes.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/autoload-demo/
Screenshots
File: loading/load_threaded/README.md
Threaded Loading
This demo demonstrates how to use ResourceLoader for background loading.
Language: GDScript
Renderer: Mobile
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/threaded-loading-demo/
Screenshots
File: loading/runtime_save_load/README.md
Run-time File Saving and Loading
This project showcases how to load and save various file types without going
through Godot's resource importing system.
This is useful to load/save images, sounds, 3D scenes, and ZIP archives at
run-time such as user-generated content, without requiring users to generate a
PCK file through Godot.
Can be loaded and saved at run-time:
- Images (JPEG, PNG, WebP)
- 3D scenes (glTF 2.0)
- ZIP archives
- Plain text files[^1]
Can be loaded at run-time:
- Images (TGA, BMP, SVG[^2])
- 3D scenes (FBX[^3])
- Audio (Ogg Vorbis, MP3, WAV)
- Fonts (TTF, OTF, WOFF, WOFF2, PFB, PFM, BMFont)
[^1]: Manipulating custom binary formats is possible using the FileAccess and
PackedByteArray classes, but this is not shown in this demo.
[^2]: It is possible to procedurally generate SVG as text and save it to a file
with .svg extension using the FileAccess class, but this is not shown in
this demo.
[^3]: There are known issues with runtime FBX loading, as mentioned in issue
#96043.
See the Saving and Loading (Serialization) demo for
an example of saving/loading game progress.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/run-time-file-saving-and-loading-demo/
Screenshots
Licenses
- Files in
examples/3d_scenes/gltf/are copyright
Poly Haven
and are licensed under CC0 1.0 Universal. - Files in
examples/audio/are copyright Red Eclipse
and are licensed under CC BY-SA 4.0 International.
File: loading/runtime_save_load/examples/fonts/LICENSE.txt
Copyright (c) 2016-2020 The Inter Project Authors.
"Inter" is trademark of Rasmus Andersson.
https://github.com/rsms/inter
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION AND CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
File: loading/runtime_save_load/examples/misc/file.txt
Plain text file.
File: loading/scene_changer/README.md
Scene Changer
This uses two functions in SceneTree to switch between two scenes.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/scene-changer-demo/
Screenshots
File: loading/serialization/README.md
Saving and Loading (Serialization)
This demo showcases how to save a simple game with each serialization
format supported by Godot:
- ConfigFile
- JSON
For more information, see Saving games
in the documentation.
See the Run-time File Saving and Loading demo for
an example of loading various file types in an exported project without needing
to import them.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/saving-and-loading-serialization-demo/
Screenshots
File: loading/threads/README.md
Loading with Threads
An example using a thread to load an image.
Language: GDScript
Renderer: Mobile
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/loading-with-threads-demo/
Screenshots
File: misc/README.md
Miscellaneous Demos
These demos don't fit into any other category, so they go into this folder.
Languages: All have GDScript, OpenSimplexNoise has
Godot shader language,
OS test has some
C#
Renderers: Large World Coordinates uses Mobile, the rest use Compatibility
File: misc/2.5d/README.md
2.5D Demo Project with GDScript
This demo project shows a way to create a 2.5D game
in Godot by mixing 2D and 3D nodes. It also adds a
2.5D editor viewport for easily editing 2.5D levels.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/project-with-gdscript-2-5d-demo/
[!NOTE]
There is a C# version available here.
How does it work?
Custom node types are added in a Godot plugin to allow 2.5D objects. Node25D serves as the base for all 2.5D objects. Its first child must be a 3D Spatial, which is used to calculate its position. Then, add a 2D Sprite (or similar) to display the object.
Inside of Node25D, a 2.5D transformation matrix made of three Vector2s is used to calculate the 2D position from the 3D position. For getting a 3D position, this project uses CharacterBody and StaticBody (3D), but these only exist for math - the camera is 2D and all sprites are 2D. You are able to use any Spatial node for math.
Several view modes are implemented, including top down, front side, 45 degree, isometric, and two oblique modes. To implement a different view angle, all you need to do is create a new set of basis vectors in Node25D, use it on all instances, and of course create sprites to display that object in 2D.
The plugin also adds YSort25D to sort Node25D nodes, and ShadowMath25D for calculating a shadow (a simple CharacterBody that tries to cast downward).
Screenshots
Music license
assets/mr_mrs_robot.ogg Copyright © circa 2008 Juan Linietsky, CC-BY: Attribution.
File: misc/custom_logging/README.md
Custom Logging
This demo showcases a custom logger implementation, which runs in parallel
with the built-in logging facilities (including file logging). The custom logger
displays all messages printed by the engine in an in-game console.
See Logging
in the documentation for more information about configuring the engine's logging
and writing custom loggers.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/custom-logging-demo/
Screenshots
File: misc/graphics_tablet_input/README.md
Graphics Tablet Input
A demo showing how to use graphics tablet input in Godot. Godot has full support
for pressure sensitivity, tilt and pen inversion (i.e. checking whether the
"eraser" is being used on the pen). Note that some platforms and tablets
may not support reporting tilt.
Input accumulation and V-Sync are disabled by default in this demo to minimize
input lag and get crisp lines (even at low FPS). This makes for the most
responsive drawing experience possible. You can toggle them in the sidebar to
see the difference it makes. Note that on Android, iOS, and Web platforms, V-Sync
is forced at a system level and cannot be disabled.
Lines are drawn using the Line2D node. Every time you lift off the open and start a new
line, a new Line2D node is created. Line antialiasing is provided by enabling 2D MSAA
in the Project Settings.
Mouse input can also be used to draw in this demo, but using a tablet is recommended.
[!NOTE]
If you experience issues on Windows, try changing the tablet driver in the Project
Settings to wintab instead of the default winink. Also, try changing your
tablet's input mode from relative to absolute mode.
Language: GDScript
Renderer: Mobile
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/graphics-tablet-input-demo/
Screenshots
File: misc/hdr_output/README.md
HDR Output
This project showcases high dynamic range output in Godot, as well as best practices.
See the
HDR output documentation
for more information.
Languages: GDScript
Renderer: Mobile
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/hdr-output-demo/
File: misc/hdr_output/output_max_linear_value/Super Mountain Dusk/public-license.txt
Acknowledgements
I would like to express my sincere gratitude to everyone who has made this project
possible. I thank individuals for their ongoing support and contributions.
License
All assets included in this package are licensed under the Creative Commons Zero (CC0)license (https://creativecommons.org/public-domain/cc0/), which means you can use them freely in any project, whether personal orcommercial, without the need for attribution. There are no restrictions on use, modification, or redistribution of these assets.
Luis Zuno aka Ansimuz
File: misc/joypads/README.md
Joypads Demo
A tool for testing
joypad input
and generating controller mapping strings.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/joypads-demo/
Screenshots
File: misc/large_world_coordinates/README.md
Large World Coordinates
This project showcases optional support for double-precision rendering
and physics in action.
When using a single-precision build, precision errors can be noticeable as soon
as you're more than a few thousand units away from the world origin.
When using a double-precision build, meshes will remain stable even when very
far away from the world origin (billions of units away or more).
See the
Large world coordinates documentation
for more information.
[!WARNING]
Official Godot builds do not have double-precision support enabled for performance reasons.
You need to compile a custom engine build with theprecision=doubleSCons option
to use double precision support.
Languages: GDScript
Renderer: Mobile
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/large-world-coordinates-demo/
Screenshots
File: misc/matrix_transform/README.md
Matrix Transform
This demo project is a playground where you can visualize how transforms work.
[!NOTE]
Do not "run" this project, as nothing will appear. You are only meant to use it within the Godot editor.
For more information, see the Matrices and Transforms article.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/matrix-transform-demo/
How does it work?
In both 2D and 3D, colored lines are drawn indicating the basis vectors as well as the origin vector. For 3D, this means cuboids. If you translate, rotate, scale, or shear the AxisMarker objects, you will be able to see how it affects the transform's component vectors, and all child objects are also appropriately transformed.
You are encouraged to manipulate the AxisMarker objects both in the main viewport and in the inspector. You are encouraged to duplicate them in the hierarchy and parent them any way you wish.
In 2D, red and green lines represent the X and Y axes, with blue representing the origin.
In 3D, red, green, and blue lines represent the X, Y, and Z axes, with cyan representing the origin.
One noteworthy implementation detail: to avoid jitter, the origin vector is a parent of a Node, and inherits the AxisMarker's parent's transform.
Screenshots
File: misc/multiple_windows/README.md
Window Management
A demo showing all Window classes and their use within the main window.
It includes:
- Embedding/unembedding subwindows.
- Using a transparent window.
- Adding physical objects to new windows.
- Showcase of all Dialog Windows.
- Showcase of all Popup Windows.
- Adding elements to a PopupMenu.
- Adding an icon to the system tray.
Language: GDScript
Renderer: Compatbility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/multiple-windows-demo/
Screenshots
File: misc/noise_viewer/README.md
Noise Viewer
This is a sample project which allows the user to tweak different parameters of
a FastNoiseLite texture.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/noise-viewer-demo/
Screenshots
File: misc/os_test/README.md
Operating System Testing
This demo showcases various OS-specific features in Godot.
It can be used to test Godot while porting it to a
new platform or to check for regressions.
In a nutshell, this demo shows how you can get information from the
operating system, or interact with the operating system.
Language: GDScript and some C#
(a .NET build is not required to run this demo)
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/operating-system-testing-demo/
How does it work?
The OS
class provides an abstraction layer over the platform-dependent code.
OS wraps the most common functionality to communicate with the host
operating system, such as the clipboard, video driver, date and time,
timers, environment variables, execution of binaries, command line, etc.
The buttons are connected to a node with the actions.gd script, which
perform actions using the OS class.
The text on the left is filled in using the os_test.gd script,
which gathers information about the OS using the OS class.
On a Mono-enabled version of Godot, Godot will load MonoTest.cs into
the MonoTest node. Then, information determined byC# preprocessor defines
will be added to the left panel.
Screenshots
File: misc/pause/README.md
Pause Demo
A demo showing how a game made in Godot can be paused.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/pause-demo/
Screenshots
File: misc/window_management/README.md
Window Management
A demo showing the various window management features available throughDisplayServer.
- Moving the window.
- Making it resizeable / nonresizeable and setting its size.
- Minimizing and maximizing.
- Moving the window around.
- Making the window transparent.
- Capturing, hiding, or confining the mouse.
- Getting various information about the screens, including DPI and refresh rate.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/window-management-demo/
Screenshots
File: mobile/README.md
Mobile Demos
These demos depend on features only available in mobile phones or tablets.
The Android IAP demo only runs on Android.
Languages: All are GDScript
Renderers: Mobile Sensors uses Mobile, the rest use Compatibility
File: mobile/android_iap/README.md
Godot Google Play Billing Demo
This is a demo project (IAP store) showcasing how to use Google Play Billing with Godot using the Godot Google Play Billing plugin.
The demo is intended as a sample implementation to help developers understand how to:
- Initialize Google Play Billing in Godot
- Query available in-app products
- Launch purchase flows
- Handle purchase updates
- Acknowledge and consume purchases correctly
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/android-iap-demo/
Requirements
- Godot Engine v4.2+
- Android gradle build setup (refer to official documentation for gradle build setup)
- A Google Play Console account
- An Android app created in Play Console (draft app is sufficient)
- At least one in-app product configured
Running the demo
- Open the project in Godot.
- Configure the Android export preset. Set the correct package name (must match Play Console).
- Make sure the plugin is correctly installed in the project.
- Build and install the app.
- Make sure the app is uploaded to Play Console (Internal Testing is enough).
Notes
- Billing works for apps installed via Google Play.
- Debug APKs installed manually will only work if the Google Play Store account on the device is added as a license tester in Play Console.
Screenshots
File: mobile/android_iap/assets/kenney_scribble-platformer/License.txt
Scribble Platformer
Created/distributed by Kenney (www.kenney.nl)
Creation date: 10-03-2020
------------------------------
License: (Creative Commons Zero, CC0)
http://creativecommons.org/publicdomain/zero/1.0/
This content is free to use in personal, educational and commercial projects.
Support us by crediting Kenney or www.kenney.nl (this is not mandatory)
------------------------------
Donate: http://support.kenney.nl
Patreon: http://patreon.com/kenney/
Follow on Twitter for updates:
http://twitter.com/KenneyNLFile: mobile/multitouch_cubes/README.md
Multitouch Cubes Demo
Demo of multitouch input and different gestures using the touch API. This demo is meant to be used with a touch-enabled device such as a phone or tablet.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/multitouch-cubes-demo/
Screenshots
File: mobile/multitouch_view/README.md
Multitouch View with GDScript
Simple debugger for multitouch input. Shows colored dots everywhere you press.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/multitouch-view-demo/
Screenshots
File: mobile/sensors/README.md
Mobile Sensors Demo
A demo showing the use of various sensors: an accelerometer, a gyroscope, and a magnetometer.
These sensors are typically found on mobile devices, so don't expect this to work on a desktop.
Language: GDScript
Renderer: Mobile
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/mobile-sensors-demo/
Screenshots
File: mono/README.md
C\# Demos
These demos are written in C#.
You must have the .NET version of Godot to run these.
Languages: All have C#,
2.5D has some GDScript
Renderers: All use Compatibility
File: mono/2.5d/README.md
2.5D Demo Project with C#
This demo project shows a way to create a 2.5D game
in Godot by mixing 2D and 3D nodes. It also adds a
2.5D editor viewport for easily editing 2.5D levels.
Language: C# and a little bit of GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/project-with-csharp-2-5d-demo/
[!NOTE]
There is a GDScript version available here.
How does it work?
Custom node types are added in a Godot plugin to allow 2.5D objects. Node25D serves as the base for all 2.5D objects. Its first child must be a 3D Spatial, which is used to calculate its position. Then, add a 2D Sprite (or similar) to display the object.
Inside of Node25D, new structs called Basis25D and Transform25D are used to calculate the 2D position from the 3D position. For getting a 3D position, this project uses CharacterBody and StaticBody (3D), but these only exist for math - the camera is 2D and all sprites are 2D. You are able to use any Spatial node for math.
Several view modes are implemented, including top down, front side, 45 degree, isometric, and two oblique modes. To implement a different view angle, all you need to do is create a new Basis25D, use it in all your Node25D transforms, and of course create sprites to display that object in 2D.
The plugin also adds YSort25D to sort Node25D nodes, and ShadowMath25D for calculating a shadow (a simple CharacterBody that tries to cast downward).
Screenshots
Music license
assets/mr_mrs_robot.ogg Copyright © circa 2008 Juan Linietsky, CC-BY: Attribution.
File: mono/android_iap/README.md
Android IAP with C#
This demo shows how to make in-app payments in Android in C#.
Note: Running the demo requires exporting and uploading the game to Google Play.
Language: C#
Renderer: Compatibility
Note: There is a GDScript version available
here.
File: mono/dodge_the_creeps/README.md
Dodge the Creeps with C#
This is a simple game where your character must move
and avoid the enemies for as long as possible.
This is a finished version of the game featured in the
"Your first 2D game"
tutorial in the documentation, but ported to C#. For more details,
consider following the tutorial in the documentation.
Language: C#
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/dodge-the-creeps-with-csharp-demo/
[!NOTE]
There is a GDScript version available here.
Screenshots
License
art/House In a Forest Loop.ogg Copyright © 2012 HorrorPen, CC-BY 3.0: Attribution. Source: https://opengameart.org/content/loop-house-in-a-forest
Images are from "Abstract Platformer". Created in 2016 by kenney.nl, CC0 1.0 Universal. Source: https://www.kenney.nl/assets/abstract-platformer
Font is "Xolonium". Copyright © 2011-2016 Severin Meyer [email protected], with Reserved Font Name Xolonium, SIL open font license version 1.1. Details are in fonts/LICENSE.txt.
File: mono/dodge_the_creeps/fonts/FONTLOG.txt
Please distribute this file along with the Xolonium fonts when possible.
Source
Find the sourcefiles of Xolonium at
<gitlab.com/sev/xolonium>Credits
Xolonium is created with FontForge ,
Inkscape , Python , and
FontTools <github.com/fonttools>.
It originated as a custom font for the open-source
game Xonotic <xonotic.org>. With many thanks to the
Xonotic community for your support.Supported OpenType features
case Provides case sensitive placement of punctuation,
brackets, and math symbols for uppercase text.
frac Replaces number/number sequences with diagonal fractions.
Numbers that touch a slash should not exceed 10 digits.
kern Provides kerning for Latin, Greek, and Cyrillic scripts.
locl Dutch: Replaces j with a stressed version if it follows í.
Sami: Replaces n-form Eng with the preferred N-form version.
Romanian and Moldovan: Replaces ŞşŢţ with the preferred ȘșȚț.
pnum Replaces monospaced digits with proportional versions.
sinf Replaces digits with scientific inferiors below the baseline.
subs Replaces digits with subscript versions on the baseline.
sups Replaces digits with superscript versions.
zero Replaces zero with a slashed version.Supported glyph sets
Adobe Latin 3
OpenType W1G
ISO 8859-1 Western European
ISO 8859-2 Central European
ISO 8859-3 South European
ISO 8859-4 North European
ISO 8859-5 Cyrillic
ISO 8859-7 Greek
ISO 8859-9 Turkish
ISO 8859-10 Nordic
ISO 8859-13 Baltic Rim
ISO 8859-14 Celtic
ISO 8859-15 Western European
ISO 8859-16 South-Eastern EuropeanAvailable glyphs
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~
¡¢£¤¥¦§¨©ª«¬ ®¯°±²³´µ¶·¸¹º»¼½¾¿
ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß
àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğ
ĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľ
ĿŀŁłŃńŅņŇňŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞş
ŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽž
ƒǺǻǼǽǾǿȘșȚțȷ
ˆˇˉ˘˙˚˛˜˝
ͺ;΄΅Ά·ΈΉΊΌΎΏΐ
ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫάέήίΰ
αβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ
ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОП
РСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп
рстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџ
ѢѣѲѳѴѵҐґҒғҔҕҖҗҘҙҚқҜҝҞҟҠҡҢңҤҥҦҧҨҩ
ҪҫҬҭҮүҰұҲҳҴҵҶҷҸҹҺһҼҽӀӁӂӇӈӋӌӏӐӑӒӓ
ӔӕӖӗӘәӜӝӞӟӠӡӢӣӤӥӦӧӨөӮӯӰӱӲӳӴӵӶӷӸӹ
Ԥԥ
ḂḃḊḋḞḟṀṁṖṗṠṡṪṫẀẁẂẃẄẅẞỲỳ
‒–—―‘’‚‛“”„‟†‡•…‰′″‹›‽‾⁄
⁰⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
₤₦₩₫€₯₱₹₺₽₿
℅ℓ№℗™Ω℮
⅛⅜⅝⅞
←↑→↓
∂∆∏∑−∕∙√∞∟∫≈≠≤≥
⌖
■▬▮▰▲▶▼◀◆◊●◢◣◤◥
☄★☠☢☣⚙⚛⚠⚡⛔
❇❈❌❤❰❱❲❳
fffiflffiffl
🌌🌍🌎🌏👽💣🔥🔫
😁😃😄😆😇😈😉😊😎😐😒😕😘
😛😝😞😟😠😣😭😮😲😴😵
🚀Debugging glyphs
U+EFFD Font version
U+F000 Font hinting indicatorChangelog
Xolonium 4.1 2016-11-22 Severin Meyer <[email protected]>
Reverted frac OpenType feature to a more stable implementation
Xolonium 4.0 2016-10-08 Severin Meyer <[email protected]>
Decreased width of most glyphs
Thinner vertical stems in Xolonium-Regular
Thicker horizontal stems in Xolonium-Bold
Revised diagonal stems
Lowered middle bars
Revised diacritical bars
Added glyphs:
ӏẞ₿
U+2007 U+2008 U+2009 U+200A U+202F
U+EFFD U+F000
Revised glyphs:
$&,JKQRXkwxy~¢¤ßǻ˜ζκλμξφЖУжћѴѵ∕₱₺₦₩€ℓ№≈ffffiffl
❤🌍🌎🌏😁😄😇😈😉😊😘😭😮😴🚀
Removed uncommon glyphs:
ʼnſʼҌҍҎҏҾҿӃӄӇӈӚӛӪӫӬӭ
U+0312 U+0313 U+0326
Simplified OpenType features pnum, zero, and case
Removed OpenType feature dlig
Revised vertical metrics
Merged outlines of composite glyphs in otf version
Added ttf version with custom outlines and instructions
Added woff and woff2 version
Xolonium 3.1 2015-06-10 Severin Meyer <[email protected]>
Added currency glyphs:
₦₩₫₱₹₺₽
Revised glyph:
₯
Relicensed public release under the SIL Open Font License 1.1
Xolonium 3.0 2015-05-04 Severin Meyer <[email protected]>
Decreased width of glyphs
Decreased descender height
Increased height of super/subscript glyphs
Revised width of dashes, underscore, and overscore
Sharper bends with more circular proportions
Decreased stroke thickness of mathematical glyphs
Revised diacritical marks
Revised diacritical bars
Revised Cyrillic hooks
Revised glyphs:
GQRYjmuwßŊŒſƒǻfffiffiffl
ΞΨΩδζιξπςστυφω
ЉЄДЛУЭЯбдлэяєљђєћѢѣҨҩҼҽӃӄӘә
#$&'()*,/69?@[]{}~¡£¤¥§©®¿
‹›₤€₯ℓ№℗℮←↑→↓∂∏∑∞≈▰☄❈❰❱❲❳😝
Raised vertical position of mathematical glyphs
Unified advance width of numeral and monetary glyphs
Unified advance width of mathematical glyphs
Revised bearings
Rewrote kern feature
Bolder Xolonium-Bold with improved proportions
Updated glyph names to conform to the AGLFN 1.7
Revised hints and PS Private Dictionary
Added glyphs:
ӶӷԤԥ
Added OpenType features:
case frac liga locl pnum sinf subs sups zero
Xolonium 2.4 2014-12-23 Severin Meyer <[email protected]>
Added dingbats:
⛔💣🔥
Revised size and design of emoticons
Revised dingbats:
⌖☄☠☣⚙⚛⚠⚡❇❈🌌🌍🌎🌏🔫
Removed dingbat:
💥
Xolonium 2.3 2014-08-14 Severin Meyer <[email protected]>
Bugfixed ε and έ, thanks to bowzee for the feedback
Xolonium 2.2 2014-03-01 Severin Meyer <[email protected]>
Added dingbats:
⌖◆●❌💥
Revised dingbats:
•←↑→↓◊☄★☠☣⚙⚛⚠⚡❇❈❤🌌🌍🌎🌏👽🔫🚀
Removed dingbats:
♻✪💡📡🔋🔧🔭
Xolonium 2.1 2013-10-20 Severin Meyer <[email protected]>
Added dingbats:
←↑→↓❰❱❲❳■▬▮▰▲▶▼◀◢◣◤◥
☄★☠☢☣♻⚙⚛⚠⚡✪❇❈❤
🌌🌍🌎🌏👽💡📡🔋🔧🔫🔭🚀
😁😃😄😆😇😈😉😊😎😐😒😕
😘😛😝😞😟😠😣😭😮😲😴😵
Xolonium 2.0.1 2013-07-12 Severin Meyer <[email protected]>
Reorganised and simplified files
Xolonium 2.0 2012-08-11 Severin Meyer <[email protected]>
Revised bends
Revised thickness of uppercase diagonal stems
Revised diacritical marks
Revised hints and PS Private Dictionary
Revised glyphs:
*1469@DPRly{}§©®¶ÐÞƒΘΞαεζνξνυЄЉЊ
ЏБЗЛУЧЪЫЬЭЯбзлчъыьэяєљњџ•€∂∙√∞∫≠
Completed glyph sets:
Adobe Latin 3
OpenType World Glyph Set 1 (W1G)
Ghostscript Standard (ghostscript-fonts-std-8.11)
Added OpenType kern feature
Added Xolonium-Bold
Xolonium 1.2 2011-02-12 Severin Meyer <[email protected]>
Revised glyphs:
D·Ðı
Completed glyph sets:
ISO 8859-7 (Greek)
Unicode Latin Extended-A block
Added glyphs:
†‡•…‰⁄™∂∑−√∞≠≤≥
Xolonium 1.1 2011-01-17 Severin Meyer <[email protected]>
Revised placement of cedilla and ogonek in accented glyphs
Revised glyphs:
,;DKTjkvwxy¥§Ð˛€
Completed glyph sets:
ISO 8859-2 (Central European)
ISO 8859-3 (South European, Esperanto)
ISO 8859-4 (North European)
ISO 8859-5 (Cyrillic)
ISO 8859-9 (Turkish)
ISO 8859-10 (Nordic)
ISO 8859-13 (Baltic Rim)
ISO 8859-14 (Celtic)
ISO 8859-16 (South-Eastern European)
Added glyphs:
ȷʼ̒ ЀЍѐѝ‒–—‘’‚‛“”„‟‹›
Xolonium 1.0 2011-01-04 Severin Meyer <[email protected]>
Completed glyph sets:
ISO 8859-1 (Western European)
ISO 8859-15 (Western European)
Added glyphs:
ĄĆĘŁŃŚŹŻąćęłńśźżıˆˇ˙˚˛˜File: mono/dodge_the_creeps/fonts/LICENSE.txt
Copyright 2011-2016 Severin Meyer [email protected],
with Reserved Font Name Xolonium.
This Font Software is licensed under the SIL Open Font License,
Version 1.1. This license is copied below, and is also available
with a FAQ at http://scripts.sil.org/OFL
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
File: mono/multiplayer_pong/README.md
Pong Multiplayer with C#
A multiplayer demo of Pong. One player presses "host".
The other presses "join". This only works locally.
Language: C#
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/pong-multiplayer-with-csharp-demo/
[!NOTE]
There is a GDScript version available
here.
Screenshots
File: mono/pong/README.md
Pong with C#
A simple Pong game. This demo shows best practices
for game development in Godot, including
signals.
Language: C#
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/pong-with-csharp-demo/
[!NOTE]
There is a GDScript version available here.
How does it work?
The walls, paddle, and ball are allArea2D
nodes. When the ball touches the walls or the paddles,
they emit signals and modify the ball.
Screenshots
File: mono/squash_the_creeps/README.md
Squash the Creeps (3D)
This is a simple game where your character must move
and jump to squash as many enemies for as long as possible.
You gain 1 point for every enemy squashed.
Controls:
- Up Arrow, W, Gamepad Left Stick: Move up
- Down Arrow, S, Gamepad Left Stick: Move down
- Left Arrow, Gamepad Left Stick: Move left
- Right Arrow, Gamepad Left Stick: Move right
- Space, Right Mouse Button, Gamepad A/Cross: Jump
This is a finished version of the game featured in the
"Your first 3D game"
tutorial in the documentation. For more details,
consider following the tutorial in the documentation.
This demo covers:
- Handling player input.
- Moving and jumping in a 3D game.
- Spawning enemies randomly around the game arena.
- Using the built-in animation editor to breathe life to your game.
- Creating a complete game loop with lose conditions, score, and the ability to restart.
Language: C#
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/squash-the-creeps-with-csharp-demo/
[!NOTE]
There is a GDScript version available here.
Screenshots
License
art/House In a Forest Loop.ogg Copyright © 2012 HorrorPen, CC-BY 3.0: Attribution. Source: https://opengameart.org/content/loop-house-in-a-forest
Font is "Montserrat Medium". Copyright 2011 The Montserrat Project Authors. Details are in fonts/LICENSE.txt.
File: mono/squash_the_creeps/fonts/LICENSE.txt
Copyright 2011 The Montserrat Project Authors (https://github.com/JulietaUla/Montserrat)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
—————————————————————————————-
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
—————————————————————————————-
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
DEFINITIONS
“Font Software” refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.
“Reserved Font Name” refers to any names specified as such after the copyright statement(s).
“Original Version” refers to the collection of Font Software components as distributed by the Copyright Holder(s).
“Modified Version” refers to any derivative made by adding to, deleting, or substituting—in part or in whole—any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.
“Author” refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.
Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.
The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
File: networking/README.md
Networking Demos
These demos showcase networking and/or multiplayer features.
Languages: All have GDScript, WebRTC uses some C++ with GDExtension
Renderer: All are Compatibility
File: networking/multiplayer_bomber/README.md
Multiplayer Bomber
A multiplayer implementation of the classic bomberman game.
One of the players should press Host, while other player(s)
should type in the host's IP address and press Join.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/multiplayer-bomber-demo/
Screenshots
File: networking/multiplayer_pong/README.md
Pong Multiplayer
A multiplayer implementation of the classic pong game.
One of the players should press Host, while the other
should type in the host's IP address and press Join.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/pong-multiplayer-demo/
[!NOTE]
The non-multiplayer version is available here.
Screenshots
File: networking/webrtc_minimal/README.md
WebRTC Minimal
This is a minimal sample of using WebRTC connections to connect two peers to each other.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/webrtc-minimal-demo/
File: networking/webrtc_signaling/README.md
WebSocket signaling server/client for WebRTC
This demo is divided in 4 parts:
- The
serverfolder contains the signaling server implementation written in GDScript (so it can be run by a game server running Godot) - The
server_nodefolder contains the signaling server implementation written in Node.js (if you don't plan to run a game server but only match-making). - The
clientpart contains the client implementation in GDScript.- Itself divided into raw protocol and
WebRTCMultiplayerhandling.
- Itself divided into raw protocol and
- The
democontains a small app that uses it.
[!NOTE]
You must extract the latest version
of the WebRTC GDExtension plugin in the project folder to run this demo on desktop platforms.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/websocket-signaling-demo/
Protocol
The protocol is JSON based, and uses messages in the form:
{
"id": "number",
"type": "number",
"data": "string",
}With type being the message type, id being a connected peer or 0, and data being the message specific data.
Messages are the following:
0 = JOIN, must be sent by client immediately after connection to get a lobby assigned or join a known one (via thedatafield).
This messages is also sent by server back to the client to notify the assigned lobby, or simply a successful join.1 = ID, sent by server to identify the client when it joins a room (theidfield will contain the be assigned ID).2 = PEER_CONNECT, sent by server to notify new peers in the same lobby (theidfield will contain the ID of the new peer).3 = PEER_DISCONNECT, sent by server to notify when a peer in the same lobby disconnects (theidfield will contain the ID of the disconnected peer).4 = OFFER, sent by the client when creating a WebRTC offer then relayed back by the server to the destination peer.5 = ANSWER, sent by the client when creating a WebRTC answer then relayed back by the server to the destination peer.6 = CANDIDATE, sent by the client when generating new WebRTC candidates then relayed back by the server to the destination peer.7 = SEAL, sent by client to seal the lobby (only the client that created it is allowed to seal a lobby), and then back by the server to notify success.
When a lobby is sealed, no new client will be able to join, and the lobby will be destroyed (and clients disconnected) after 10 seconds.
For relayed messages (i.e. for OFFER, ANSWER, and CANDIDATE), the client will set the id field as the destination peer, then the server will replace it with the id of the sending peer, and send it to the proper destination.
Screenshots
File: networking/webrtc_signaling/server_node/package.json
{
"name": "signaling_server",
"version": "1.0.0",
"description": "",
"main": "server.js",
"dependencies": {
"ws": "^7.5.9"
},
"devDependencies": {
"eslint": "^8.28.0",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-plugin-import": "^2.23.4"
},
"scripts": {
"lint": "eslint server.js && echo "Lint OK" && exit 0",
"format": "eslint server.js --fix && echo "Lint OK" && exit 0"
},
"author": "Fabio Alessandrelli",
"license": "MIT"
}
File: networking/websocket_chat/README.md
WebSocket Chat
This is a demo of a simple chat implemented using WebSockets, showing both how to host a websocket server from Godot and how to connect to it.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/websocket-chat-demo/
Screenshots
File: networking/websocket_minimal/README.md
WebSocket Minimal
This is a minimal sample of connecting two peers to each other using WebSockets.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/websocket-minimal-demo/
File: networking/websocket_multiplayer/README.md
WebSocket Multiplayer
This is a sample showing how the use WebSockets along with the Multiplayer API in Godot.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/websocket-multiplayer-demo/
Screenshots
File: plugins/README.md
Plugin Demos
This contains multiple plugin demos, all placed in a project for convenience.
See the documentation on editor plugins
for more information.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/plugin-demo/
How does it work?
This project contains 4 plugins:
The custom node plugin shows how to create a custom node type
usingadd_custom_type. More info.The main screen plugin is a minimal example of how to create a plugin
with a main screen. More info.The material creator plugin shows how to add a custom dock with some
simple functionality, and shows how to create a custom Resource type
with custom loading, saving, importing, and exporting logic,
including editor integrations. More info.The simple import plugin shows how to make a simple plugin handle importing
a custom file type (*.mtxt). More info.
To use these plugins in another project, copy any of these
folders to the addons/ folder in a Godot project, and then
enable them in the project settings menu.
For example, the path would look like: addons/custom_node
Plugins can be distributed and installed from the UI.
If you make a ZIP archive that contains the folder, Godot will recognize
it as a plugin and will allow you to install it.
This can be done via the terminal: zip -r custom_node.zip custom_node/*
Screenshots
File: plugins/addons/README.md
How to use
To use these plugins in another project, copy any of these
folders to the addons/ folder in a Godot project.
For example, the path would look like: addons/custom_node
Plugins can be distributed and installed from the UI.
If you make a ZIP archive that contains the folder, Godot will recognize
it as a plugin and will allow you to install it.
This can be done via the terminal: zip -r custom_node.zip custom_node/*
File: plugins/addons/custom_node/README.md
Custom Node Plugin Demo
This plugin demo shows one way to create a custom node type in Godot.
For more information, see this documentation article: https://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_plugins.html#a-custom-node
A custom node type:
Derives from an existing node type.
Shows up in the type list when adding a new node.
Has a script attached to add new behavior.
May have a custom icon.
The way it works in this plugin is using the add_custom_type and remove_custom_type in the plugin script file.
Using this method you can specify any name, base type, script, and icon for your custom node.
There is also another way to add custom node types, which is using the class_name keyword in a script,
or using the [GlobalClass] attribute above a class declaration in C#.
File: plugins/addons/main_screen/README.md
Main Screen Plugin Demo
This plugin demo shows how to make a main screen plugin.
The main screen appears as a button next to the "2D", "3D", "Script", and
"AssetLib" buttons. It also shows up when a Node it handles is selected.
For more information, see this documentation article:
https://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_main_screen_plugins.html
If you would like to see a more complete example of what main screen plugins
are capable of, check out the 2.5D demo project.
File: plugins/addons/material_creator/README.md
Material Creator Plugin Demo
This plugin demo demonstrates these things:
How to create a custom dock in the Godot editor with basic functionality.
Custom docks are made of Control nodes, they run in the
editor, and any behavior must be done through@toolscripts.
For more information, see this documentation article:
https://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_plugins.html#a-custom-dockHow to create a custom Resource type, and provide logic for
serializing, deserializing, and converting this Resource type.Editor integration with classes for loading, saving, and importing
this Resource type, including optional import customization.
For a more comprehensive example, see the GLTF module in Godot's source code.
For a less comprehensive example, see the "simple_import_plugin" folder.
Importing vs Loading
The custom Resource type in this demo is supplemented by two different
sets of editor classes:
EditorImportPlugin
in theimporters/folder, which allow customizing how
files are imported into Godot as Resources of different
types and optionally with import settings.
Imported files have.importfiles generated next to them.ResourceFormatLoader
and ResourceFormatSaver
in theload_and_save/folder, which allow easily
editing files in the inspector and saving them back.
Resource files have.uidfiles generated next to them.
These two approaches are mutually exclusive.
You may only use one approach at a time for a given file extension.
This demo showcases both by using 2 different file extensions.
In actual projects, you should either choose EditorImportPlugin(s)
for a configurable import, OR ResourceFormatLoader
for a writeable resource load.
The choice depends on if you treat the file as an external source asset
which should be imported and may be customized at import
(EditorImportPlugin),
or if you treat the file as an internal Godot resource meant to be natively
and directly edited within Godot
(ResourceFormatLoader).
For example, a glTF file may be generated by Blender, and therefore
is not intended to be edited directly in Godot, so it should use
EditorImportPlugin.
Similarly, a PNG file is typically generated by an image editor, and Godot
needs to convert it to a different internal format, like a .ctex file
for a VRAM-compressed texture, so it should use
EditorImportPlugin.
However, files like .tres and .tscn are Godot-native formats meant to be
edited directly in Godot, so they should use
ResourceFormatLoader.
Once you choose one approach, create scripts deriving the appropriate classes,
override their callback functions, and register them in your plugin's*_plugin.gd script.
Example Files
The examples/ folder contains several example files:
blue.tres: Directly saving a SillyMaterialResource using Godot's built-in.tresformat,
without any custom loader/saver logic or import/export logic, available for all Resource types.
This can be edited in Godot's inspector and saved back.cyan.silly_mat_loadable: Storing a SillyMaterialResource as a custom format,
such as via ResourceFormatSaver, which is loaded back using a custom ResourceFormatLoader.
This can be edited in Godot's inspector and saved back.green_as_standard_mat.silly_mat_importable: Storing a SillyMaterialResource as a custom format,
which is imported as a StandardMaterial3D using custom import/export logic. This shows how
importers can import files as any Resource type, converting custom files to data Godot can use.
Imported files are read-only and cannot be edited in the inspector.yellow.silly_mat_importable: Storing a SillyMaterialResource as a custom format,
which is imported as a SillyMaterialResource using custom import/export logic.
Imported files are read-only and cannot be edited in the inspector.yellow_tinted_red.silly_mat_importable: Storing a SillyMaterialResource as a custom format,
which is imported as a SillyMaterialResource using custom import/export logic.This file has the same exact contents as
yellow.silly_mat_importable, but the
corresponding.importfile has a flag set to tint the albedo color towards red,
which makes the material appear orange instead of yellow.
This demonstrates how importers can use import settings to modify data during import.
After import, imported files are read-only and cannot be edited in the inspector.If you try to load this file using "Load Imported Material (EditorImportPlugin)" in the editor,
or callResourceLoader.load()in GDScript, it will load the imported version, which
includes the red tint, so the albedo color will be orange. If you try to import this
file using "Import Material (directly at runtime)" in the editor, or callSillyMaterialResource.read_from_file()in GDScript, it will directly read the original
file's contents, ignoring the import process, so the albedo color will be yellow.
This demonstrates how files can be loaded within Godot's import process (editor only),
or bypass the import process entirely (works in editor and at runtime).
Editor Buttons
The material creator dock has these 6 buttons:
"Apply Material": Applies the current material to all selected MeshInstance3D nodes in the editor.
"Save Material (ResourceFormatSaver)": Saves the current
material to a.silly_mat_loadablefile using the custom
ResourceFormatSaver,
or to a.tresfile using Godot's built-in ResourceFormatSaverText.
This can be edited in Godot's inspector and saved back."Export Material (directly at runtime)": Exports the current material
to a.silly_mat_*file using the functions on SillyMaterialResource.
This works for files outside of theres://folder, and can be done at runtime."Load Material (ResourceFormatLoader)": Loads a
.silly_mat_loadablefile using the custom
ResourceFormatLoader,
or loads a.tresfile using Godot's built-in ResourceFormatLoaderText.
This can be edited in Godot's inspector and saved back."Load Imported Material (EditorImportPlugin)": Loads a
.silly_mat_importablethat was imported by an
EditorImportPlugin.
The loaded data actually comes from the corresponding
imported file saved asres://.godot/imported/something.silly_mat_importable-hash.res.
Imported files are read-only and cannot be edited in the inspector."Import Material (directly at runtime)": Imports a
.silly_mat_*directly from the
source file, performing an import on request instead of loading data the editor imported earlier.
This ignores any editor import settings, works for files outside of theres://folder,
and can be done at runtime.
File: plugins/addons/simple_import_plugin/README.md
Material Import Plugin Demo
This plugin demo shows how a custom import system can
be added to the editor. In this case, it imports a material.
For more information, see this documentation article:
https://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html
In the editor, try opening test.mtxt. Godot will recognize
it and import it as a material because of this plugin.
File: viewport/README.md
Viewport Demos
These demos showcase various ways to use theViewport node.
Languages: All have GDScript, Dynamic Split Screen has
Godot shader language
Renderers: 3D Scaling uses Forward+, the rest are Compatibility
File: viewport/2d_in_3d/README.md
2D in 3D
A demo showing how a 2D scene can be shown within a 3D scene using viewports.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/viewport-2d-in-3d-demo/
How does it work?
The Pong game is rendered to a customViewport
node rather than the main Viewport. In the code,get_texture() is called on the Viewport to get aViewportTexture,
which is then assigned to the quad's material's albedo texture.
Screenshots
File: viewport/3d_in_2d/README.md
3D in 2D
A demo showing how a 3D scene can be shown within a 2D one using viewports.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/viewport-3d-in-2d-demo/
How does it work?
The 3D robot is rendered to a customViewport
node rather than the main Viewport. In the code,get_texture() is called on the Viewport to get aViewportTexture,
which is then assigned to the sprite's texture.
Screenshots
File: viewport/3d_scaling/README.md
3D Resolution Scaling
This demo shows how to downscale the 3D resolution without affecting 2D
elements, to improve performance without making the UI blurry.
See Resolution scaling
in the documentation for details.
Language: GDScript
Renderer: Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/viewport-3d-resolution-scaling-demo/
Screenshots
File: viewport/dynamic_split_screen/README.md
Dynamic Split Screen
This sample project showcases an implementation of dynamic
split screen, also called Voronoi split screen.
Language: Godot shader language and GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/dynamic-split-screen-demo/
Details
A dynamic split screen system displays a single screen when
the two players are close but a split view when they move apart.
The splitting line can take any angle depending on the players'
positions, so it won't be either vertical or horizontal.
This system was popularized by the Lego video games.
How it works
Two cameras are placed inside two separate viewports and their
texture, as well as some other parameters, are passed to a
shader attached to a TextureRect filling the whole screen.
The SplitScreen shader, with the help of the CameraController
script, chooses which texture to display on each pixel to
achieve the effect.
The cameras are placed on the segment joining the two players,
either in the middle if they're close enough or at a fixed
distance otherwise.
How to use it
Open and launch the project inside the Godot engine, then
use WASD to move the first player (in red) and IJKL (or arrow keys)
to move the second player (in blue).
The camera_controller.gd script sets parameters to tune the distance at
which the screen splits and also the width and color of
the splitting line.
Screenshots
File: viewport/gui_in_3d/README.md
GUI in 3D
A demo showing a GUI instanced within a 3D scene using viewports,
as well as forwarding mouse and keyboard input to the GUI.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/gui-in-3d-demo/
Screenshots
File: viewport/screen_capture/README.md
Screen Capture
An example showing how to take screenshots of the screen.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/screen-capture-demo/
Screenshots
File: viewport/split_screen_input/README.md
Split Screen Input
A demo showing a Split Screen GUI and input handling for local multiplayer using viewports.
It demonstrates:
- Single World2D that is shared among many Viewports.
- Simplified input map that uses the same actions for all split screens.
- Input event routing to different viewports based on joypad device ID and dedicated keyboard keys.
- Dynamic keybinding adjustment for each split screen.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/split-screen-input-demo/
Screenshots
File: xr/mobile_vr_interface_demo/README.md
Mobile VR Interface Demo
This is a simple demo that shows how the mobile VR interface can be enabled.
This is a small project to test stereo rendering on desktop without needing XR hardware.
When used on mobile devices, simple 3DOF headtracking can be tested.
Language: GDScript
Renderer: Compatibility, Mobile, Forward+
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/mobile-vr-interface-demo/
How does it work?
This sample shows the simplest form for enabling and testing an XR application.
It uses the built-in Mobile VR Interface.
There is simple left/right/up/down movement on desktop.
Shortcomings
Note that currently, lens distortion in the mobile VR interface is not supported in the Compatibility renderer.
Screenshots
File: xr/openxr_binding_modifier_demo/README.md
XR Binding Modifier demo
This is a demo for an OpenXR project where we show how to use the binding modifier feature in the action map.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/openxr-binding-modifier-demo/
How does it work?
OpenXR has introduced a system called binding modifiers that allow you to add additional logic to the action map.
Currently there are only two modifiers available but more will likely be coming.
[!WARNING]
Binding modifiers are optional features that need to be enabled and may not
be available on all platforms.
Local Floor Reference Space
This demo uses the local floor reference space so the player is centered by default looking at the information displays.
If your player isn't standing in the correct spot, try a system recenter.
This is different per runtime, for instance:
- On Quest (including with SteamLink), hold the Meta button for 3 seconds to initiate a recenter.
- On SteamVR, open the in headset SteamVR menu and choose the recenter option from the menu.
Action map
This project does not use the default action map but instead configures an action map that just contains the actions required for this example to work. This so we remove any clutter and just focus on the functionality being demonstrated.
The actions defined in the action map are solely needed to demonstrate the different modifiers and uses the grip_pose to position the controllers.
Analog Threshold Modifier
This is a modifier that works on boolean inputs that are driven by analog controls such as the trigger or grip button (on some controllers).
With this modifier you can change the default values at which the input toggles from true to false or back.
Note: This modifier is created on the individual bindings using the modifier button next to each binding.
DPad Modifier
The DPad extension splits common inputs like thumbsticks and trackpads into a DPad like input.
When using the DPad inputs you should not also bind the original thumbstick or trackpad input.
Optionally you can also add a modifier to further control this behavior.
[!NOTE]
This modifier is created for the interaction profile with the modifier button
on the right hand side.
Running on PCVR
This project can be run as normal for PCVR. Ensure that an OpenXR runtime has been installed.
This project has been tested with the Oculus client and SteamVR OpenXR runtimes.
Note that Godot currently can't run using the WMR OpenXR runtime. Install SteamVR with WMR support.
Running on standalone VR
You must install the Android build templates and OpenXR loader plugin and configure an export template for your device.
Please follow the instructions for deploying on Android in the manual.
Screenshots
File: xr/openxr_character_centric_movement/README.md
XR Character Body Centric Movement demo
This is a demo for an OpenXR project where player movement is handled with a CharacterBody3D as a base node.
This is based on the Character body centric solution as explained in the room scale manual page.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/openxr-character-body-centric-movement-demo/
How does it work?
With modern VR equipment the user is able to move around a large playspace.
This is often referred to as roomscale VR.
The position of the headset and controllers are tracked in reference to a fixed point within this playspace.
This is often a point on the ground at the center of the playspace mapped out by the user when setting up their guardian.
In Godot the center of this playspace is represented by the XROrigin3D node with camera and controllers being tracked through resp. XRCamera3D and XRController3D child nodes which can thus not be positioned by the user.
The misunderstandings this causes in handling player movement is described in detail in the XR room scale manual page, a highly recommended read before continuing with this demo.
This demo implements the character body centric solution to the player movement problem.
Virtual movement by the player (e.g. movement through controller input) in this demo is handled similarly to a non-XR Godot game.
Physical movement by the player will result in the character body attempting to move to the player's new location.
If successful the XROrigin node is moved in the opposite direction of the player's movement.
If unsuccessful the character body stays behind, the further the player moves the more we black out the screen.
Action map
This project does not use the default action map but instead configures an action map that just contains the actions required for this example to work. This so we remove any clutter and just focus on the functionality being demonstrated.
There are only two actions needed for this example:
- aim_pose is used to position the XR controllers
- move is used as the input for our movement
"Move" being the hero here. This action is only bound to one of the two controllers, by default making it a right hand option. Godot will always associate the move action with the controller that is bound to it.
The code example assumes either controller could trigger the move action. Switching from right to left hand is a separate topic out of scope of this demonstration.
Also following OpenXR guidelines only bindings for controllers with which the project has been tested are supplied. XR Runtimes should provide proper re-mapping however not all follow this guideline. You may need to add a binding for the platform you are using to the action map.
Running on PCVR
This project can be run as normal for PCVR. Ensure that an OpenXR runtime has been installed.
This project has been tested with the Oculus client and SteamVR OpenXR runtimes.
Note that Godot currently can't run using the WMR OpenXR runtime. Install SteamVR with WMR support.
Running on standalone VR
You must install the Android build templates and OpenXR loader plugin and configure an export template for your device.
Please follow the instructions for deploying on Android in the manual.
Screenshots
File: xr/openxr_composition_layers/README.md
OpenXR compositor layer demo
This is a demo for an OpenXR project where we showcase the new compositor layer functionality.
This is a companion to the OpenXR composition layers manual page.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/openxr-compositor-layer-demo/
How does it work?
Compositor layers allow us to present additional content on a headset outside of our normal 3D rendered results.
With XR we render our 3D image at a higher resolution after which its lens distorted before it's displayed on the headset.
This to counter the natural barrel distortion caused by the lenses in most XR headsets.
When we look at things like rendered text or other mostly 2D elements that are presented on a virtual screen,
this causes a double whammy when it comes to sampling that data.
The subsequent quality loss often renders text unreadable or at the least ugly looking.
It turns out however that when 2D interfaces are presented on a virtual screen in front of the user,
often as a rectangle or slightly curved screen,
that rendering this content on top of the lens distorted 3D rendering,
and simply curving this 2D plane,
results in a high quality render.
OpenXR supports three such shapes that when used appropriately leads to crisp 2D visuals.
This demo shows one such shape, the equirect, a curved display.
The only downside of this approach is that compositing happens in the XR runtime,
so any spectator view shown on screen will omit these layers.
Note, if composition layers aren't supported by the XR runtime,
Godot falls back to rendering the content within the normal 3D rendered result.
Action map
This project does not use the default action map but instead configures an action map that just contains the actions required for this example to work.
This so we remove any clutter and just focus on the functionality being demonstrated.
There are only three actions needed for this example:
- aim_pose is used to position the XR controllers,
- select is used as a way to interact with the UI, it reacts to the trigger,
- haptic is used to emit a pulse on the controller when the player presses the trigger.
Aiming at the 2D UI will mimic mouse movement based on where you point.
Only one controller will interact with the UI at any given time seeing we can only mimic one mouse cursor.
You can switch between the left and right controller by pressing the trigger on the controller you wish to use.
Seeing the simplicity of this example we only supply bindings for the simple controller.
XR runtimes should provide proper re-mapping and as support for the simple controller is mandatory when controllers are used,
this should work on any XR runtime.
On some system the simple controller is also supported with hand tracking and on those you can use a pinch gesture
(touch your thumb and index finger together) to interact with the UI.
Running on PCVR
This project can be run as normal for PCVR. Ensure that an OpenXR runtime has been installed.
This project has been tested with the Oculus client and SteamVR OpenXR runtimes.
Note that Godot currently can't run using the WMR OpenXR runtime. Install SteamVR with WMR support.
Running on standalone VR
You must install the Android build templates and OpenXR vendors plugin and configure an export template for your device.
Please follow the instructions for deploying on Android in the manual.
Screenshots
File: xr/openxr_hand_tracking_demo/README.md
XR Hand Tracking Demo
This is a demo showing OpenXR's hand tracking and controller tracking logic.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/openxr-hand-tracking-demo/
Screenshots
How does it work?
Being able to see the player's hands, and having those hands interact with elements in the environment are paramount to a good XR experience.
In this demo we look at the off the shelf logic for displaying a hand model that is automated based on either controller input or through optical tracking of the player's hands.
We also implement logic that allows interaction based on input from the action map that allows the user to pick up the blocks in this demo.
The problem this poses to us is that there have been two schools of thought around what hand tracking actually means,
and depending on the XR runtime in use there may be gaps in functionality.
Hand tracking is only for optical tracking
The first school of thought treats hand tracking as a separate system that purely focusses on optical hand tracking.
The hand tracking API in OpenXR, even if reported as supported, will only provide data if optical hand tracking is used.
This means that when controllers are used, no data is available and you as a developer have to come up with your own
solution for displaying a hand mesh and animating it according to controller input.
Note that the current version of Godot XR Tools contains a full solution for this.
Equally in this line of thought, the action map is only applicable to controller input.
You as a developer are responsible for implementing some means of gesture recognition when optical hand tracking is active.
This becomes extra nightmarish when support for both controller tracking and optical hand tracking needs to be supported in a single application.
The unified approach
The second school of thought ignores the differences between controller tracking and optical hand tracking
and treats them as two versions of the same.
Especially with controllers like the Valve Index, or with various data gloves that are treated as controllers,
there is no discernible difference here.
The hand tracking API is mostly used for visualising the player's hand with bone positions either being inferred
from controller input or matching the optical tracking.
For advanced gesture recognition you would still use this data however it is now accessible regardless of
the physical means in which this data is obtained.
At the same time, in this school of thought the action map system is seen as the primary means to gain input
and is no longer restricted to input from controllers. The XR runtime is now responsible for recognising base
gestures such as pinching and pointing resulting in inputs that can be bound in the action map.
OpenXR is moving towards this approach and this demo has been build in accordance with this however not all runtimes have been updated yet.
SteamVR has followed this approach for a long time and works out of the box, however SteamVR treats everything as controllers resulting in some shortcomings when a Quest is used over Meta Link or Steam Link and optical hand tracking is used.
Metas native Quest runtime on all versions of Quest now support OpenXR's "data source extension" which Godot enables when hand tracking is enabled.
However Meta does not yet support OpenXR's "hand interaction profile extension" which is required.
Meta link is still trailing behind and does not support this brave new world yet.
For other runtimes like Picos, HTC, Varjos, Magic Leaps, etc. may or may not yet support the required extensions.
Conclusion
Due to the wild growth in capabilities in XR runtimes,
and there being no solid way to detect the full limitations of the platform you are currently on,
Godot XR Tools does not have support for the hand tracking API and purely relies on its own inferred hand positioning approach.
However with more and more runtimes adopting these new extensions any solution that targets platforms with support,
it is becoming possible to rely on the hand tracking API.
This demo project shows what that future looks like.
Hand tracking API
As mentioned, the hand tracking API is at the center of visualising the user's hand.
In Godot 4.3 we overhauled the system so the XR Interface needs to convert hand tracking data to the Godot humanoid skeleton hand bone layout.
This also means that this logic works both in WebXR, OpenXR and any other XR Interface that adds support for this feature.
Hand tracking now also makes use of the new Skeleton Modifier logic in Godot 4.3 however
the skeleton is posed in the hands local space, while positioning is provided through an XRNode3D node.
This split is applied because:
- positioning is always within the local space of the XROrigin3D node
- there are many use cases where the positioning may be ignored or modified
[!NOTE]
The trackers used for the hand tracking API are
/user/hand_tracker/left
and/user/hand_tracker/right.
[!NOTE]
There are new project settings in Godot 4.4.
If you upgrade this project to Godot 4.4 or later,
you need to open the Project Settings window,
go to the OpenXR settings
and enable the hand tracking source extensions.
(Half) body Tracking API
Just an honorable mention of this, this is not part of this demo but Godot now also has support
for half and full body tracking that includes hand tracking. This functionality however is only
available on a limited number of XR runtimes.
Fallback skeleton modifier
If the XR runtime doesn't support hand tracking, or doesn't support the controller data source,
this demo implements a fallback modifier that animates the fingers based on trigger
and grip input from the action map.
The hand is now also positioned based on poses accessed through the action map.
By default we use the palm pose, which is properly defined in the OpenXR action map.
As support for the palm pose is optional, we fallback on the grip pose if needed.
While positioning matches closely with the palm pose, orientation of the grip pose
differs between XR runtimes and can cause misalignment of the hand mesh.
Action map
As mentioned, we're using the action map here for input however when optical hand tracking is used
we rely on OpenXR's hand interaction profile extension.
Without support for this extension this demo will not fully function.
This can be solved by checking that no interaction profile has been bound to our XRController3D node,
and performing our own gesture detection.
As this would greatly increase the complexity of this demo and the expectation is that this extension
will soon see wide adoption, this is left out of the demo.
Some headsets will support the simple controller when hand tracking is enabled.
The simple controller interaction profile doesn't support an input for grabbing.
In this scenario you can grab the cubes using the pinch gesture
(touch the tip of your thumb with the tip of our index finger).
We are not using the default action map and instead have created an action map specific to this use case.
There are a number of actions needed for this example:
palm_poseis used to position the XRController3D nodes and our hand fallback by default.grip_poseis used when the palm pose is not supported.pickupis used as the input for picking up an object, and mapped accordingly.triggeris used purely for animating our index finger.hapticis currently not used in the demo but defined for future use.
The pickup logic itself is split into two components:
pickup_handler.gd/.tscnis an Area3D node with logic that is added as a child to an XRController3D node and handles the logic for that hand to pick up objects in range.pickup_able_body.gdis a script that can be added to a RigidBody3D node to make it possible to pick up/drop that object.
Note that the trackers used by the action map are
left_handandright_hand.
MSFT Hand interaction extension
Microsoft introduced a hand interaction extension that Godot now supports and is configured for this project.
Several other vendors such as Meta have added support for this extension as well.
With this extension both grab gestures and pinch gestures are supported and you can thus pick up the blocks in this project by making a grab motion (making a fist).
HTC Hand interaction extension
HTC introduced a hand interaction extension that Godot now support however this has not been implemented in this project.
This extension introduces two new trackers requiring you to change the trackers on the XRController3D node to make this work.
Local floor reference space
A final notable element is that this demo uses the local floor reference space.
With this reference space the XR runtime will center the player on the XROrigin3D node when the user triggers the recenter logic.
The startup behavior is different between different XR runtimes, Quest will attempt to remember where you recentered last, while SteamVR tends to reset this to default.
It can thus not be guaranteed the player is in the correct spot when the demo starts.
Hence the instructions suggesting the user recenters.
Running on PCVR
This project can be run as normal for PCVR. Ensure that an OpenXR runtime has been installed.
This project has been tested with the Oculus client and SteamVR OpenXR runtimes.
Note that Godot currently can't run using the WMR OpenXR runtime. Install SteamVR with WMR support.
Running on standalone VR
You must install the Android build templates and OpenXR loader plugin and configure an export template for your device.
Please follow the instructions for deploying on Android in the manual.
File: xr/openxr_origin_centric_movement/README.md
XR Origin Centric Movement demo
This is a demo for an OpenXR project where player movement is handled with an XRorigin3D as a base node.
This is based on the Origin centric solution as explained in the room scale manual page.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/openxr-origin-centric-movement-demo/
How does it work?
With modern VR equipment the user is able to move around a large playspace.
This is often referred to as roomscale VR.
The position of the headset and controllers are tracked in reference to a fixed point within this playspace.
This is often a point on the ground at the center of the playspace mapped out by the user when setting up their guardian.
In Godot the center of this playspace is represented by the XROrigin3D node with camera and controllers being tracked through resp. XRCamera3D and XRController3D child nodes which can thus not be positioned by the user.
The misunderstandings this causes in handling player movement is described in detail in the XR room scale manual page, a highly recommended read before continuing with this demo.
This demo implements the origin body centric solution to the player movement problem.
This is an older approach to setting up movement in XR which keeps the origin point more clearly mapped in the virtual world.
With this setup it is easier to see how elements are tracked and how the body is moving within the tracked environment.
However moving the player through controller input requires a lot more math as we need to move the origin point to drive player movement.
Action map
This project does not use the default action map but instead configures an action map that just contains the actions required for this example to work. This so we remove any clutter and just focus on the functionality being demonstrated.
There are only two actions needed for this example:
- aim_pose is used to position the XR controllers
- move is used as the input for our movement
"Move" being the hero here. This action is only bound to one of the two controllers, by default making it a right hand option. Godot will always associate the move action with the controller that is bound to it.
The code example assumes either controller could trigger the move action. Switching from right to left hand is a separate topic out of scope of this demonstration.
Also following OpenXR guidelines only bindings for controllers with which the project has been tested are supplied. XR Runtimes should provide proper re-mapping however not all follow this guideline. You may need to add a binding for the platform you are using to the action map.
Running on PCVR
This project can be run as normal for PCVR. Ensure that an OpenXR runtime has been installed.
This project has been tested with the Oculus client and SteamVR OpenXR runtimes.
Note that Godot currently can't run using the WMR OpenXR runtime. Install SteamVR with WMR support.
Running on standalone VR
You must install the Android build templates and OpenXR loader plugin and configure an export template for your device.
Please follow the instructions for deploying on Android in the manual.
Screenshots
File: xr/openxr_passthrough/README.md
OpenXR Passthrough Demo
This is a demo showing OpenXR's passthrough functionality.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/openxr-passthrough-demo/
Screenshots
How does it work?
Passthrough is a feature available on a number of XR headsets.
It uses the cameras on the device to show the real world inside of the headset.
This demo shows how to correctly set up passthrough.
While the demo will attempt to start in passthrough mode (see the OpenXR Project settings),
there are extra steps to perform that you will find in main.gd.
The most important being enabling the viewport's transparent background feature.
Note that the environment is also set up to use the sky for ambient color and reflections,
even after the background has been made transparent.
While not part of this demo,
this allows for accurate light estimation in headsets that support this feature.
Finally there is an example of using the shadow_to_opacity feature to cut out
a box shape.
A use case for this is allowing the user to anchor that box where their keyboard
is positioned, and in doing so keeping the keyboard visible to the user.
You can only see the effect properly in headset as the editor viewport does not
enable a transparent background.
[!IMPORTANT]
In order to save space in this repo, the OpenXR Vendor plugin is not included
but related settings are part of this demo!
Please install it from the asset library first.
Action map
This demo project has a barebones action map as we're only dealing with positioning.
Running on PCVR
This project can be run as normal for PCVR however only a few runtimes actually support passthrough in this way.
For some you still need to install the OpenXR vendors plugin as passthrough support can rely on vendor extensions.
Ensure that an OpenXR runtime has been installed.
Running on standalone VR
This demo works best on standalone headsets as many support passthrough.
You must install the Android build templates and OpenXR vendors plugin.
This project does include an export_preset.cfg file with example setups for some of these devices.
Please follow the instructions for deploying on Android in the manual.
File: xr/openxr_render_models/README.md
OpenXR Render models demo
This is a demo showing OpenXR's render models implementation.
Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/openxr-render-models-demo/
Screenshots
How does it work?
OpenXR allows us to run our application without having knowledge of the hardware being used,
or that we as developers have access too at the time of developing our application.
As a result we don't have direct information telling us what hardware is being used,
however there are situations where we want to visually show this hardware.
This specifically applies to the controllers used by the user, as showing the correct hardware
improves the user's sense of immersion.
The render model API allows us to enumerate the devices currently in use and then query
information such as its 3D asset, its position and orientation in space, and the position
and orientation of individual components of the asset.
Godot's implementation hides most of the complexity of this through the OpenXRRenderModelManager
node as a child of the XROrigin3D node. You can add just this node by itself and let it show
all render models that are currently active, or like we do in this demo, you can add nodes
in the tree of each controller to show render models related to that controller.
Action map
This demo project has a barebones action map as we're only dealing with positioning.
Running on PCVR
This project can be run as normal for PCVR. Ensure that an OpenXR runtime has been installed.
Running on standalone VR
You must install the Android build templates and OpenXR loader plugin and configure an export template for your device.
Please follow the instructions for deploying on Android in the manual.
File: xr/openxr_spectator_view/README.md
XR spectator view demo
This is a demo for an OpenXR project where the player sees a different view inside of the headset
compared to what a spectator sees on screen.
When deployed to a standalone XR device, only the player environment is exported.
Language: GDScript
Renderer: Compatibility, Mobile
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/openxr-spectator-view-demo/
How does it work?
The VR game itself is contained within the main.tscn scene. This is similar to the other XR demos found on this repo.
This demo has a bare bones example as to not distract from the solution we're presenting here.
When run on standalone VR headsets, that scene is loaded.
When run on desktop, we load the spectator.tscn scene instead (used to be called construct.tscn). This scene has the main.tscn scene as a child of aSubViewport which will be used to output the render result to the headset.
The spectator scene also contains a SubviewportContainer with a SubViewport that renders the output that the user
sees on the desktop screen.
By default this will show a 3rd person camera that shows our player.
We've also configured our visual layers as follows:
- Layer 1 is visible both inside the headset and by the 3rd person camera.
- Layer 2 is only visible inside the headset.
- Layer 3 is only visible in the 3rd person camera.
This is used to render the "head" of the player in spectator view only.
Finally, a dropdown also allows us to switch to:
- show the 3rd person camera view,
- show a 1st person camera view but with a stabilized camera,
- showing either the left eye or right eye result the player is seeing (compatibility renderer only).
Tracked camera
There is also an option in the demo to enable camera tracking.
This is currently only supported on SteamVR together with a properly configured HTC Vive Tracker.
When properly set up, this allows you to use a Vive tracker to position the 3rd person camera.
Attaching the Vive tracker to a physical camera, and setting the correct offset would allow
implementation of mixed reality capture by combining the 3rd person render result
with a green screen captured camera.
Camera positioning
If camera tracking is not available our spectator camera will look at our player.
The player can use laser pointers to point at the camera, hold the trigger, and then move the camera.
The laser pointers can be activated on either the left or right hand.
The last hand on which you press a button will become active.
Action map
This project does not use the default action map but instead configures an action map that just contains the actions required for this example to work. This so we remove any clutter and just focus on the functionality being demonstrated.
The following actions are used by this example:
- aim_pose is used to aim out pointers
- interact is used to interact with what we're pointing at
Also following OpenXR guidelines only bindings for controllers with which the project has been tested are supplied. XR Runtimes should provide proper re-mapping however not all follow this guideline. You may need to add a binding for the platform you are using to the action map.
Running on PCVR
This project is specifically designed for PCVR. Ensure that an OpenXR runtime has been installed.
This project has been tested with the Oculus client and SteamVR OpenXR runtimes.
Note that Godot currently can't run using the WMR OpenXR runtime. Install SteamVR with WMR support.
Running on standalone VR
This project also shows how deploying to standalone skips the spectator view option.
You must install the Android build templates and OpenXR vendors plugin and configure an export template for your device.
Please follow the instructions for deploying on Android in the manual.
Screenshots
File: xr/webxr/README.md
WebXR demo
This is a minimal demo of WebXR rendering and controller support.
When exporting to the Web platform, make sure to include the WebXR Polyfill and
WebXR Layers Polyfill which will fill holes in web browsers' WebXR support. To
include these polyfills, open the Export window and copy the following code
into the Head Include property of the Web export preset:
<script src="https://cdn.jsdelivr.net/npm/webxr-polyfill@latest/build/webxr-polyfill.min.js"></script>
<script>
var polyfill = new WebXRPolyfill();
</script>
<script src="https://cdn.jsdelivr.net/npm/webxr-layers-polyfill@latest/build/webxr-layers-polyfill.min.js"></script>
<script>
var layersPolyfill = new WebXRLayersPolyfill();
</script>Language: GDScript
Renderer: Compatibility
Check out this demo on the Asset Store: https://store.godotengine.org/asset/godot-foundation/webxr-demo/
File: .github/dependabot.yml
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
File: .github/PULL_REQUEST_TEMPLATE.md
File: .github/ISSUE_TEMPLATE/bug-report.md
name: Bug Report
about: Report a bug with one of the demo projects.
title: ""
labels: bug
assignees: ""
Which demo project is affected:
OS/device including version:
Issue description:
Screenshots of issue:
File: .github/ISSUE_TEMPLATE/feature---enhancement-request.md
name: Feature / Enhancement Request
about: Adding new features or improving existing ones.
title: ""
labels: enhancement
assignees: ""
Which demo project is affected:
Description:
File: .github/workflows/check_urls.yml
name: 🌐 Check URLs
on: [push, pull_request]
jobs:
check-urls:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
- name: Restore lychee cache
uses: actions/cache@v4
with:
path: .lycheecache
key: cache-lychee-${{ github.sha }}
restore-keys: cache-lychee-
- name: Run lychee
uses: lycheeverse/lychee-action@v2
with:
args: >
--no-progress
--cache
--max-cache-age 1d
"**/*.md" "**/*.gd" "**/*.cs" "**/*.tscn" "**/*.tres" "**/*.html"
- name: Fail if there were link errors
run: exit ${{ steps.lc.outputs.exit_code }}