From 3dfbfbf3813c4210cda69ba9f82acadb7522d214 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Thu, 9 Mar 2023 06:09:56 +0100 Subject: [PATCH] Add links to demo projects where relevant (#6874) * Add links to demo projects where relevant - Warn about poor compute shader support on mobile GPUs (due to driver bugs). - Update control gallery image for 4.0. - Fix typo in Internationalizing games. --------- Co-authored-by: Max Hilbrunner --- img/control_gallery.webp | Bin 0 -> 40888 bytes tutorials/3d/3d_antialiasing.rst | 5 ++++ tutorials/3d/3d_text.rst | 3 +++ tutorials/3d/csg_tools.rst | 5 ++++ .../introduction_to_global_illumination.rst | 5 ++++ tutorials/3d/lights_and_shadows.rst | 5 ++++ tutorials/3d/mesh_lod.rst | 5 ++++ tutorials/3d/occlusion_culling.rst | 5 ++++ tutorials/3d/resolution_scaling.rst | 5 ++++ tutorials/3d/volumetric_fog.rst | 4 +-- tutorials/i18n/internationalizing_games.rst | 7 +++++- tutorials/i18n/pseudolocalization.rst | 15 ++++++------ tutorials/io/saving_games.rst | 5 ++++ .../navigation/navigation_introduction_2d.rst | 7 ++++++ .../navigation/navigation_introduction_3d.rst | 6 ++++- tutorials/performance/using_servers.rst | 5 ++++ tutorials/shaders/compute_shaders.rst | 23 ++++++++++++++---- tutorials/ui/control_node_gallery.rst | 2 +- tutorials/ui/gui_using_fonts.rst | 5 ++++ 19 files changed, 100 insertions(+), 17 deletions(-) create mode 100644 img/control_gallery.webp diff --git a/img/control_gallery.webp b/img/control_gallery.webp new file mode 100644 index 0000000000000000000000000000000000000000..836744f546cd7b1507f3e85f9ecb16c77bfbf123 GIT binary patch literal 40888 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. + Multisample antialiasing (MSAA) ------------------------------- diff --git a/tutorials/3d/3d_text.rst b/tutorials/3d/3d_text.rst index b36a9de0e..ccb2c6d28 100644 --- a/tutorials/3d/3d_text.rst +++ b/tutorials/3d/3d_text.rst @@ -16,6 +16,9 @@ Additionally, Godot makes it possible to position Control nodes according to a .. seealso:: + You can see 3D text in action using the + `3D Labels and Texts demo project `__. + This page does **not** cover how to display a GUI scene within a 3D environment. For information on how to achieve that, see the `GUI in 3D `__ diff --git a/tutorials/3d/csg_tools.rst b/tutorials/3d/csg_tools.rst index 36263e388..745ad3d54 100644 --- a/tutorials/3d/csg_tools.rst +++ b/tutorials/3d/csg_tools.rst @@ -25,6 +25,11 @@ Interior environments can be created by using inverted primitives. .. image:: img/csg.gif +.. seealso:: + + You can check how to use CSG nodes to build various shapes (such as stairs or roads) using the + `Constructive Solid Geometry demo project `__. + Introduction to CSG nodes ------------------------- diff --git a/tutorials/3d/global_illumination/introduction_to_global_illumination.rst b/tutorials/3d/global_illumination/introduction_to_global_illumination.rst index 8d7783931..3c2d8abcf 100644 --- a/tutorials/3d/global_illumination/introduction_to_global_illumination.rst +++ b/tutorials/3d/global_illumination/introduction_to_global_illumination.rst @@ -340,6 +340,11 @@ If you are unsure about which GI technique to use: :ref:`ReflectionProbes ` are the only supported options. See also :ref:`doc_introduction_to_global_illumination_alternatives`. +.. seealso:: + + You can compare global illumination techniques in action using the + `Global Illumination demo project `__. + .. _doc_introduction_to_global_illumination_gi_mode_recommendations: Which global illumination mode should I use on meshes and lights? diff --git a/tutorials/3d/lights_and_shadows.rst b/tutorials/3d/lights_and_shadows.rst index d1f81f970..598c7d7ce 100644 --- a/tutorials/3d/lights_and_shadows.rst +++ b/tutorials/3d/lights_and_shadows.rst @@ -20,6 +20,11 @@ result. Light can come from several types of sources in a scene: The emission color is a material property. You can read more about it in the :ref:`doc_standard_material_3d` tutorial. +.. seealso:: + + You can compare various types of lights in action using the + `3D Lights and Shadows demo project `__. + Light nodes ----------- diff --git a/tutorials/3d/mesh_lod.rst b/tutorials/3d/mesh_lod.rst index b123878ff..d073dbffd 100644 --- a/tutorials/3d/mesh_lod.rst +++ b/tutorials/3d/mesh_lod.rst @@ -13,6 +13,11 @@ On this page, you'll learn: - How to measure mesh LOD's effectiveness in your project (and alternatives you can explore if it doesn't meet your expectations). +.. seealso:: + + You can see how mesh LOD works in action using the + `Occlusion Culling and Mesh LOD demo project `__. + Introduction ------------ diff --git a/tutorials/3d/occlusion_culling.rst b/tutorials/3d/occlusion_culling.rst index 62074a552..7e0e0f0e5 100644 --- a/tutorials/3d/occlusion_culling.rst +++ b/tutorials/3d/occlusion_culling.rst @@ -12,6 +12,11 @@ On this page, you'll learn: - How to set up occlusion culling in Godot. - Troubleshooting common issues with occlusion culling. +.. seealso:: + + You can see how occlusion culling works in action using the + `Occlusion Culling and Mesh LOD demo project `__. + Why use occlusion culling ------------------------- diff --git a/tutorials/3d/resolution_scaling.rst b/tutorials/3d/resolution_scaling.rst index 53c92c67b..2772870d6 100644 --- a/tutorials/3d/resolution_scaling.rst +++ b/tutorials/3d/resolution_scaling.rst @@ -20,6 +20,11 @@ scaling is not intended to be a replacement for decreasing graphics settings on lower-end hardware. Consider exposing both resolution scale and graphics settings in your in-game menus. +.. seealso:: + + You can compare resolution scaling modes and factors in action using the + `3D Antialiasing demo project `__. + .. note:: Resolution scaling is currently not available for 2D rendering, but it can be diff --git a/tutorials/3d/volumetric_fog.rst b/tutorials/3d/volumetric_fog.rst index ec0e20b88..a96093f14 100644 --- a/tutorials/3d/volumetric_fog.rst +++ b/tutorials/3d/volumetric_fog.rst @@ -22,8 +22,8 @@ On this page, you'll learn: .. seealso:: - The Godot demo projects repository contains a - `volumetric fog demo `__. + You can see how volumetric fog works in action using the + `Volumetric Fog demo project `__. Here is a comparison between traditional fog (which does not interact with lighting) and volumetric fog, which is able to interact with lighting: diff --git a/tutorials/i18n/internationalizing_games.rst b/tutorials/i18n/internationalizing_games.rst index 89b0cf6cd..8294e34b1 100644 --- a/tutorials/i18n/internationalizing_games.rst +++ b/tutorials/i18n/internationalizing_games.rst @@ -226,7 +226,7 @@ For RTL languages, Godot will automatically do the following changes to the UI: - Swaps left and right text alignment. - Mirrors horizontal order of the child controls in the containers, and items in Tree/ItemList controls. - Uses mirrored order of the internal control elements (e.g. OptionButton dropdown button, checkbox alignment, List column order, Tree item icons and connecting line alignment, e.t.c.), in some cases mirrored controls use separate theme styles. -- Coordinate system is not mirrored, and non-UI nodes (sprites, e.t.c) are not affected.x +- Coordinate system is not mirrored, and non-UI nodes (sprites, e.t.c) are not affected. It is possible to override text and control layout direction by using the following control properties: @@ -237,6 +237,11 @@ It is possible to override text and control layout direction by using the follow .. image:: img/ui_mirror.png +.. seealso:: + + You can see how right-to-left typesetting works in action using the + `BiDI and Font Features demo project `__. + Adding break iterator data to exported project ---------------------------------------------- diff --git a/tutorials/i18n/pseudolocalization.rst b/tutorials/i18n/pseudolocalization.rst index e7ac25e50..a9ef607e4 100644 --- a/tutorials/i18n/pseudolocalization.rst +++ b/tutorials/i18n/pseudolocalization.rst @@ -15,9 +15,10 @@ when it comes to locale changes. Pseudolocalization simulates changes that might take place during localization. This way, any issues regarding internationalization can be recognized early on during development. -.. note:: The official demo for pseudolocalization can be used to play around with - the various properties and observe their effects. You can - `download it from the godot-demo-projects GitHub repository `_. +.. seealso:: + + You can see how pseudolocalization works in action using the + `Pseudolocalizaton demo project `__. Enabling and configuring pseudolocalization ------------------------------------------- @@ -34,8 +35,8 @@ Pseudolocalization can also be :ref:`toggled at runtime from a script ` property in TranslationServer. -However, if runtime configuration of pseudolocalization properties is required, +However, if runtime configuration of pseudolocalization properties is required, they can be directly configured using :ref:`ProjectSettings.set_setting(property, value) ` and then calling :ref:`TranslationServer.reload_pseudolocalization() ` -which reparses the pseudolocalization properties and reloads the pseudolocalization. +which reparses the pseudolocalization properties and reloads the pseudolocalization. The following code snippet shall turn on ``replace_with_accents`` and ``double_vowels`` properties and then call ``reload_pseudolocalization()`` for the changes to get reflected:: diff --git a/tutorials/io/saving_games.rst b/tutorials/io/saving_games.rst index abc28fb91..383021ed3 100644 --- a/tutorials/io/saving_games.rst +++ b/tutorials/io/saving_games.rst @@ -17,6 +17,11 @@ scale as the game grows more complex. If you're looking to save user configuration, you can use the :ref:`class_ConfigFile` class for this purpose. +.. seealso:: + + You can see how saving and loading works in action using the + `Saving and Loading (Serialization) demo project `__. + Identify persistent objects --------------------------- diff --git a/tutorials/navigation/navigation_introduction_2d.rst b/tutorials/navigation/navigation_introduction_2d.rst index 3a4f570de..7d219a2e8 100644 --- a/tutorials/navigation/navigation_introduction_2d.rst +++ b/tutorials/navigation/navigation_introduction_2d.rst @@ -61,6 +61,13 @@ The 2D navigationm eshes are defined with the following resources: - The NavigationServer2D uses this resource to update navmesh of individual regions. - The TileSet Editor creates and uses this resource internally when defining tile navigation areas. +.. seealso:: + + You can see how 2D navigation works in action using the + `2D Navigation Polygon `__ + and `Grid-based Navigation with AStarGrid2D `__ + demo projects. + Setup for 2D scene ------------------ diff --git a/tutorials/navigation/navigation_introduction_3d.rst b/tutorials/navigation/navigation_introduction_3d.rst index c253780d4..bf7223c0c 100644 --- a/tutorials/navigation/navigation_introduction_3d.rst +++ b/tutorials/navigation/navigation_introduction_3d.rst @@ -1,6 +1,5 @@ .. _doc_navigation_overview_3d: - 3D Navigation Overview ====================== @@ -66,6 +65,11 @@ The 3D navigation meshes are defined with the following resources: - The NavigationServer3D uses this resource to update navmesh of individual regions. - The GridMap Editor uses this resource when specific navigation meshes are defined for each gridcell. +.. seealso:: + + You can see how 3D navigation works in action using the + `3D Navigation demo project `__. + Setup for 3D scene ------------------ diff --git a/tutorials/performance/using_servers.rst b/tutorials/performance/using_servers.rst index 9cb9849a5..95da03774 100644 --- a/tutorials/performance/using_servers.rst +++ b/tutorials/performance/using_servers.rst @@ -25,6 +25,11 @@ back to a more handcrafted, low level implementation of game code. Still, Godot is designed to work around this problem. +.. seealso:: + + You can see how using low-level servers works in action using the + `Bullet Shower demo project `__ + Servers ------- diff --git a/tutorials/shaders/compute_shaders.rst b/tutorials/shaders/compute_shaders.rst index dbe34745d..900711d7f 100644 --- a/tutorials/shaders/compute_shaders.rst +++ b/tutorials/shaders/compute_shaders.rst @@ -17,16 +17,17 @@ A compute shader is a special type of shader program that is orientated towards general purpose programming. In other words, they are more flexible than vertex shaders and fragment shaders as they don't have a fixed purpose (i.e. transforming vertices or writing colors to an image). Unlike fragment shaders -and vertex shaders, compute shaders have very little going on behind the scenes. The code you write is what the GPU runs and very little else. This can make them +and vertex shaders, compute shaders have very little going on behind the scenes. +The code you write is what the GPU runs and very little else. This can make them a very useful tool to offload heavy calculations to the GPU. Now let's get started by creating a short compute shader. First, in the **external** text editor of your choice, create a new file called -``compute_example.glsl`` in your project folder. When you write compute shaders in Godot, you write them -in GLSL directly. The Godot shader language is based on GLSL. If you are -familiar with normal shaders in Godot, the syntax below will look somewhat -familiar. +``compute_example.glsl`` in your project folder. When you write compute shaders +in Godot, you write them in GLSL directly. The Godot shader language is based on +GLSL. If you are familiar with normal shaders in Godot, the syntax below will +look somewhat familiar. .. note:: @@ -35,6 +36,9 @@ familiar. you are using the Forward+ or Mobile renderer. The setting for which is located in the top right-hand corner of the editor. + Note that compute shader support is generally poor on mobile devices (due to + driver bugs), even if they are technically supported. + Let's take a look at this compute shader code: .. code-block:: glsl @@ -345,3 +349,12 @@ the data and print the results to our console. With that, you have everything you need to get started working with compute shaders. + +.. seealso:: + + The demo projects repository contains a + `Compute Shader Heightmap demo `__ + This project performs heightmap image generation on the CPU and + GPU separately, which lets you compare how a similar algorithm can be + implemented in two different ways (with the GPU implementation being faster + in most cases). diff --git a/tutorials/ui/control_node_gallery.rst b/tutorials/ui/control_node_gallery.rst index adb8c6bef..9aa77b4aa 100644 --- a/tutorials/ui/control_node_gallery.rst +++ b/tutorials/ui/control_node_gallery.rst @@ -5,7 +5,7 @@ Control node gallery Here is a list of common Control nodes with their name next to them: -.. image:: /img/control_gallery.png +.. image:: /img/control_gallery.webp The Control Gallery demo pictured above can be found `on GitHub `__. diff --git a/tutorials/ui/gui_using_fonts.rst b/tutorials/ui/gui_using_fonts.rst index 9067de3a3..30cd80bf0 100644 --- a/tutorials/ui/gui_using_fonts.rst +++ b/tutorials/ui/gui_using_fonts.rst @@ -37,6 +37,11 @@ as *ligatures* (several characters transforming into a single different design). Fonts are covered by copyright. Double-check the license of a font before using it, as not all fonts allow commercial use without purchasing a license. +.. seealso:: + + You can see how fonts work in action using the + `BiDI and Font Features demo project `__. + Dynamic fonts -------------