godot-demo-projects Documentation

Demonstration and Template Projects

9,727 stars GDScript 1 file · ~63,790 tokens
RAW Doc

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 master branch is compatible with Godot's master development branch (next 4.x release).
  • The 3.x branch is compatible with Godot's 3.x development 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.

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

text
Find the sourcefiles of Xolonium at
<gitlab.com/sev/xolonium>

Credits

text
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

text
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

text
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 European

Available glyphs

text
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~

 ¡¢£¤¥¦§¨©ª«¬ ®¯°±²³´µ¶·¸¹º»¼½¾¿
ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß
àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğ
ĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľ
ĿŀŁłŃńŅņŇňŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞş
ŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽž
ƒǺǻǼǽǾǿȘșȚțȷ

ˆˇˉ˘˙˚˛˜˝

ͺ;΄΅Ά·ΈΉΊΌΎΏΐ
ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫάέήίΰ
αβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ

ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОП
РСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп
рстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџ
ѢѣѲѳѴѵҐґҒғҔҕҖҗҘҙҚқҜҝҞҟҠҡҢңҤҥҦҧҨҩ
ҪҫҬҭҮүҰұҲҳҴҵҶҷҸҹҺһҼҽӀӁӂӇӈӋӌӏӐӑӒӓ
ӔӕӖӗӘәӜӝӞӟӠӡӢӣӤӥӦӧӨөӮӯӰӱӲӳӴӵӶӷӸӹ
Ԥԥ

ḂḃḊḋḞḟṀṁṖṗṠṡṪṫẀẁẂẃẄẅẞỲỳ

     ‒–—―‘’‚‛“”„‟†‡•…‰′″‹›‽‾⁄
⁰⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
₤₦₩₫€₯₱₹₺₽₿
℅ℓ№℗™Ω℮
⅛⅜⅝⅞
←↑→↓
∂∆∏∑−∕∙√∞∟∫≈≠≤≥
⌖
■▬▮▰▲▶▼◀◆◊●◢◣◤◥
☄★☠☢☣⚙⚛⚠⚡⛔
❇❈❌❤❰❱❲❳
fffiflffiffl
🌌🌍🌎🌏👽💣🔥🔫
😁😃😄😆😇😈😉😊😎😐😒😕😘
😛😝😞😟😠😣😭😮😲😴😵
🚀

Debugging glyphs

text
  U+EFFD  Font version
  U+F000  Font hinting indicator

Changelog

text
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:

  1. Neither the Font Software nor any of its individual components,
    in Original or Modified Versions, may be sold by itself.

  2. 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.

  3. 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.

  4. 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.

  5. 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:

  1. Separate each behavior and transitions between behaviors,
    thus make scripts shorter and easier to manage.

  2. Respect the Single Responsibility Principle.
    Each State object represents one action.

  3. 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 have
StaticBody2D
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 using
CharacterBody2D.
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, using
Light2D
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

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

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 than
CharacterBody2D,
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 with
RigidBody2D,
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 all
Area2D
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.
  • 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.
  • 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.
  • 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 the
SkeletonIK3D
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 via
move_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

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 the production=yes SCons 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

  • http://www.fracteed.com/godot.html

  • 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 a
CharacterBody3D.
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 uses
AudioServer.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 via
apply_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 TIME variable 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:

  1. Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.

  2. 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.

  3. 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.

  4. 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.

  5. 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 a
VehicleBody3D
node. The trailer truck is tied together using a
ConeJointTwist3D
node, and the tow truck is tried together using a chain made of
RigidBody3D
nodes which are pinned together using
PinJoint3D nodes.

Credits

Ambient sounds

Models

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:

Model License:

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:

Model License:

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 a
StaticBody3D
with each block having its own
CollisionShape3D
for collisions. The meshes are created using
SurfaceTool
which allows specifying vertices, triangles, and UV coordinates
for constructing a mesh.

The chunks and chunk data are stored in
Dictionary
objects. New chunks have their meshes drawn in separate
Threads,
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 the
RayCast3D
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 the
FileAccess 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

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.

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 in
AudioServer
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 in
AudioServer
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 an
AudioStreamPlayer
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 via
Control 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:

  1. Neither the Font Software nor any of its individual components,
    in Original or Modified Versions, may be sold by itself.

  2. 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.

  3. 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.

  4. 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.

  5. 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:

  1. Neither the Font Software nor any of its individual components, in
    Original or Modified Versions, may be sold by itself.

  2. 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.

  3. 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.

  4. 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.

  5. 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.


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.
    Its animation_finished signal is connected to a method that changes the scene
    to res://main.tscn.
    • The res://main.tscn scene 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.

[!TIP]

To skip the splash screen during development, you can configure the main
scene to be res://main.tscn, and override it using the release
feature tag
to res://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_items stretch mode (this was called 2d in Godot 3.x).
    Recommended for most non-pixel art games.
  • expand stretch aspect (allows support for multiple aspect ratios without
    distortion or black bars).
  • Using a base window size with a 1:1 aspect ratio (648×648 in 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.
  • Using a window size override with a 16:9 aspect ratio (1152×648 in 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.

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 via
RichTextLabel.

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

text
http://www.apache.org/licenses/LICENSE-2.0

Unless 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:

  1. Neither the Font Software nor any of its individual components, in
    Original or Modified Versions, may be sold by itself.

  2. 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.

  3. 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.

  4. 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.

  5. 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


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:

  1. Neither the Font Software nor any of its individual components,
    in Original or Modified Versions, may be sold by itself.

  2. 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.

  3. 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.

  4. 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.

  5. 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 the precision=double SCons 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 by
C# 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 through
DisplayServer.

  • 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

  1. Open the project in Godot.
  2. Configure the Android export preset. Set the correct package name (must match Play Console).
  3. Make sure the plugin is correctly installed in the project.
  4. Build and install the app.
  5. 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

text
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/KenneyNL

File: 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

text
Find the sourcefiles of Xolonium at
<gitlab.com/sev/xolonium>

Credits

text
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

text
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

text
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 European

Available glyphs

text
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~

 ¡¢£¤¥¦§¨©ª«¬ ®¯°±²³´µ¶·¸¹º»¼½¾¿
ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß
àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğ
ĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľ
ĿŀŁłŃńŅņŇňŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞş
ŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽž
ƒǺǻǼǽǾǿȘșȚțȷ

ˆˇˉ˘˙˚˛˜˝

ͺ;΄΅Ά·ΈΉΊΌΎΏΐ
ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫάέήίΰ
αβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ

ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОП
РСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп
рстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџ
ѢѣѲѳѴѵҐґҒғҔҕҖҗҘҙҚқҜҝҞҟҠҡҢңҤҥҦҧҨҩ
ҪҫҬҭҮүҰұҲҳҴҵҶҷҸҹҺһҼҽӀӁӂӇӈӋӌӏӐӑӒӓ
ӔӕӖӗӘәӜӝӞӟӠӡӢӣӤӥӦӧӨөӮӯӰӱӲӳӴӵӶӷӸӹ
Ԥԥ

ḂḃḊḋḞḟṀṁṖṗṠṡṪṫẀẁẂẃẄẅẞỲỳ

     ‒–—―‘’‚‛“”„‟†‡•…‰′″‹›‽‾⁄
⁰⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
₤₦₩₫€₯₱₹₺₽₿
℅ℓ№℗™Ω℮
⅛⅜⅝⅞
←↑→↓
∂∆∏∑−∕∙√∞∟∫≈≠≤≥
⌖
■▬▮▰▲▶▼◀◆◊●◢◣◤◥
☄★☠☢☣⚙⚛⚠⚡⛔
❇❈❌❤❰❱❲❳
fffiflffiffl
🌌🌍🌎🌏👽💣🔥🔫
😁😃😄😆😇😈😉😊😎😐😒😕😘
😛😝😞😟😠😣😭😮😲😴😵
🚀

Debugging glyphs

text
  U+EFFD  Font version
  U+F000  Font hinting indicator

Changelog

text
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:

  1. Neither the Font Software nor any of its individual components,
    in Original or Modified Versions, may be sold by itself.

  2. 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.

  3. 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.

  4. 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.

  5. 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 all
Area2D
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:

  1. Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.

  2. 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.

  3. 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.

  4. 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.

  5. 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 server folder contains the signaling server implementation written in GDScript (so it can be run by a game server running Godot)
  • The server_node folder contains the signaling server implementation written in Node.js (if you don't plan to run a game server but only match-making).
  • The client part contains the client implementation in GDScript.
    • Itself divided into raw protocol and WebRTCMultiplayer handling.
  • The demo contains 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:

text
{
  "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 the data field).
    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 (the id field will contain the be assigned ID).
  • 2 = PEER_CONNECT, sent by server to notify new peers in the same lobby (the id field will contain the ID of the new peer).
  • 3 = PEER_DISCONNECT, sent by server to notify when a peer in the same lobby disconnects (the id field 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
    using add_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 @tool scripts.
    For more information, see this documentation article:
    https://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_plugins.html#a-custom-dock

  • How 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 the importers/ folder, which allow customizing how
    files are imported into Godot as Resources of different
    types and optionally with import settings.
    Imported files have .import files generated next to them.

  • ResourceFormatLoader
    and ResourceFormatSaver
    in the load_and_save/ folder, which allow easily
    editing files in the inspector and saving them back.
    Resource files have .uid files 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 .tres format,
    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 .import file 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 call ResourceLoader.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 call
      SillyMaterialResource.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_loadable file using the custom
    ResourceFormatSaver,
    or to a .tres file 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 the res:// folder, and can be done at runtime.

  • "Load Material (ResourceFormatLoader)": Loads a
    .silly_mat_loadable file using the custom
    ResourceFormatLoader,
    or loads a .tres file 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_importable that was imported by an
    EditorImportPlugin.
    The loaded data actually comes from the corresponding
    imported file saved as res://.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 the res:// 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 the
Viewport 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 custom
Viewport
node rather than the main Viewport. In the code,
get_texture() is called on the Viewport to get a
ViewportTexture,
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 custom
Viewport
node rather than the main Viewport. In the code,
get_texture() is called on the Viewport to get a
ViewportTexture,
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_pose is used to position the XRController3D nodes and our hand fallback by default.
  • grip_pose is used when the palm pose is not supported.
  • pickup is used as the input for picking up an object, and mapped accordingly.
  • trigger is used purely for animating our index finger.
  • haptic is currently not used in the demo but defined for future use.

The pickup logic itself is split into two components:

  • pickup_handler.gd/.tscn is 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.gd is 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_hand and right_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 a
SubViewport 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:

  1. Layer 1 is visible both inside the headset and by the 3rd person camera.
  2. Layer 2 is only visible inside the headset.
  3. 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:

html
<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:

text
- 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 }}