Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Introduction à la 3D

Creating a 3D game can be challenging. That extra Z coordinate makes many of the common techniques that helped to make 2D games simpler no longer work. To aid in this transition, it is worth mentioning that Godot uses similar APIs for 2D and 3D. Most nodes are the same and are present in both 2D and 3D versions. In fact, it is worth checking the 3D platformer tutorial, or the 3D kinematic character tutorials, which are almost identical to their 2D counterparts.

En 3D, les mathématiques sont un peu plus complexes qu'en 2D, consulter l'entrée Mathématiques des vecteurs dans le wiki (qui a été spécialement créé pour les développeurs de jeux, pas pour les mathématiciens ou les ingénieurs) vous aidera à développer des jeux 3D efficacement.

Node3D node

Node2D is the base node for 2D. Control is the base node for everything GUI. Following this reasoning, the 3D engine uses the Node3D node for everything 3D.

Note

Be aware that "Spatial" Nodes are now called "Node3D" starting with Godot 4. Any Godot 3.x references to "Spatial" Nodes refer to "Node3D" in Godot 4.

../../_images/tuto_3d1.png

Node3Ds have a local transform, which is relative to the parent node (as long as the parent node is also of or inherits from the type Node3D). This transform can be accessed as a 4×3 Transform3D, or as 3 Vector3 members representing location, Euler rotation (X, Y and Z angles) and scale.

../../_images/tuto_3d2.png

Contenu 3D

Unlike 2D, where loading image content and drawing is straightforward, 3D is a little more difficult. The content needs to be created with special 3D tools (also called Digital Content Creation tools, or DCCs) and exported to an exchange file format to be imported in Godot. This is required since 3D formats are not as standardized as images.

Manually authored models (using 3D modeling software)

There are two pipelines to import 3D models in Godot. The first and most common one is by Importation de scènes 3D, which allows you to import entire scenes (exactly as they look in the 3D modeling software), including animation, skeletal rigs, blend shapes, etc.

The second pipeline is by importing simple .OBJ files as mesh resources, which can be then put inside a MeshInstance3D node for display.

Géométrie générée

Il est possible de créer une géométrie personnalisée en utilisant directement la ressource ArrayMesh. Créez simplement vos tableaux et utilisez la fonction ArrayMesh.add_surface_from_arrays(). Une classe d'aide est également disponible, SurfaceTool, qui fournit une API et des aides plus simples pour indexer, générer des normales, des tangentes, etc.

Dans tous les cas, cette méthode est destinée à générer de la géométrie statique (modèles qui ne seront pas souvent mis à jour), car la création de tableaux de sommets et leur soumission à l'API 3D a un coût de performance significatif.

Géométrie immédiate

If, instead, you need to generate simple geometry that will be updated often, Godot provides a special ImmediateMesh resource that can be used in a MeshInstance3D node. This provides an OpenGL 1.x-style immediate-mode API to create points, lines, triangles, etc.

2D en 3D

Alors que Godot dispose d'un puissant moteur 2D, de nombreux types de jeux utilisent la 2D dans un environnement 3D. En utilisant une caméra fixe (orthogonale ou en perspective) qui ne tourne pas, des nœuds tels que Sprite3D et AnimatedSprite3D peuvent être utilisés pour créer des jeux 2D qui tirent avantage du mélange avec des fonds 3D, d'une parallaxe plus réaliste, des effets de lumière / d'ombre, etc.

L'inconvénient est, bien sûr, la complexité et les performances réduites par rapport à la 2D simple, ainsi que le manque de référence de travail en pixels.

Environnement

Outre l'édition d'une scène, il est souvent fréquent d'éditer l'environnement. Godot fournit un nœud WorldEnvironment qui permet de changer la couleur de fond, le mode (comme dans, mettre une skybox), et appliquer plusieurs types d'effets post-traitement intégrés. Les environnements peuvent également être remplacées dans la caméra.

Fenêtre d'affichage 3D

Editing 3D scenes is done in the 3D tab. This tab can be selected manually, but it will be automatically enabled when a Node3D node is selected.

../../_images/tuto_3d3.png

Les contrôles de navigation de scène 3D par défaut sont similaires à ceux de Blender (visant à avoir une certaine cohérence dans le pipeline du logiciel libre...), mais des options sont incluses pour personnaliser les boutons de la souris et le comportement pour être similaire aux autres outils dans les paramètres de l'éditeur :

../../_images/tuto_3d4.png

Système de coordonnées

Godot utilise le système métrique pour tout ce qui est en 3D, 1 unité étant égale à 1 mètre. La physique et d'autres domaines sont accordés pour cette échelle. Par conséquent, tenter d'utiliser une échelle différente est généralement une mauvaise idée (sauf si vous savez ce que vous faites).

When working with 3D assets, it's always best to work in the correct scale (set the unit to metric in your 3D modeling software). Godot allows scaling post-import and, while this works in most cases, in rare situations it may introduce floating-point precision issues (and thus, glitches or artifacts) in delicate areas such as rendering or physics. Make sure your artists always work in the right scale!

The Y coordinate is used for "up". As for the horizontal X/Z axes, Godot uses a right-handed coordinate system. This means that for most objects that need alignment (such as lights or cameras), the Z axis is used as a "pointing towards" direction. This convention roughly means that:

  • X est les côtés

  • Y est haut/bas

  • Z est avant/arrière

See this chart for comparison with other 3D software:

3D coordinate systems comparison chart

Image by Freya Holmér

Espace et gadgets de manipulation

Le déplacement des objets dans la vue 3D se fait à l'aide des gadgets de manipulation. Chaque axe est représenté par une couleur : Rouge, Vert, Bleu représentent X,Y,Z respectivement. Cette convention s'applique également à la grille et aux autres gadgets (ainsi qu'au langage shader, à l'ordre des composants pour Vector3, Color, etc.).

../../_images/tuto_3d5.png

Quelques raccourcis clavier utiles :

  • Pour aligner le placement ou la rotation, appuyez sur la touche Ctrl tout en vous déplaçant, en redimensionnant ou en tournant.

  • Pour centrer la vue sur l'objet sélectionné, appuyez sur la touche F.

Using Blender-style transform shortcuts

Since Godot 4.2, you can enable Blender-style shortcuts for translating, rotating and scaling nodes. In Blender, these shortcuts are:

  • G for translating

  • R for rotating

  • S for scaling

After pressing a shortcut key while focusing on the 3D editor viewport, move the mouse or enter a number to move the selected node(s) by the specified amount in 3D units. You can constrain movement to a specific axis by specifying the axis as a letter, then the distance (if entering a value with the keyboard).

For instance, to move the selection upwards by 2.5 units, enter the following sequence in order (Y+ is upwards in Godot):

G-Y-2-.-5-Enter

To use Blender-style transform shortcuts in Godot, go to the Editor Settings' Shortcuts tab, then in the Spatial Editor section:

  • Bind Begin Translate Transformation to G.

  • Bind Begin Rotate Transformation to R.

  • Bind Begin Scale Transformation to S.

  • Finally, unbind Scale Mode so that its shortcut won't conflict with Begin Rotate Transformation.

Menu affichage

Les options d'affichage sont contrôlées par le menu "Affichage" dans la barre d'outils de la fenêtre d'affichage.

../../_images/tuto_3d6.png

Vous pouvez masquer les gadgets dans la vue 3D de l'éditeur via ce menu :

../../_images/tuto_3d6_1.png

Pour masquer un type spécifique de gadgets, vous pouvez les désactiver dans le menu "Affichage".

../../_images/tuto_3d6_2.png

Environnement par défaut

Lorsqu'il est créé à partir du gestionnaire de projet, l'environnement 3D possède un ciel par défaut.

../../_images/tuto_3d8.png

Given how physically-based rendering works, it is advised to always try to work with a default environment in order to provide indirect and reflected light to your objects.

Caméras

No matter how many objects are placed in the 3D space, nothing will be displayed unless a Camera3D is also added to the scene. Cameras can work in either orthogonal or perspective projections:

../../_images/tuto_3d10.png

Les caméras sont associées à une vue parent ou grand-parent (et ne s'affichent que dans cette vue). Comme la racine de l'arborescence de la scène est une fenêtre d'affichage, les caméras s'y affichent par défaut, mais si des fenêtres secondaires (en tant que cible de rendu ou image dans l'image) sont souhaitées, elles ont besoin de leurs propres caméras enfants pour les afficher.

../../_images/tuto_3d11.png

Lorsque vous avez affaire à plusieurs caméras, les règles suivantes s'appliquent à chaque fenêtre d'affichage :

  • Si aucune caméra n'est présente dans l'arbre de scène, la première qui y entre deviendra la caméra active. Les autres caméras entrant dans la scène seront ignorées (à moins qu'elles ne soient réglées sur current).

  • Si une caméra possède la propriété "current", elle sera utilisée indépendamment de toute autre caméra de la scène. Si la propriété est définie, elle devient active et remplace la caméra précédente.

  • Si une caméra active quitte l'arbre de scène, la première caméra en ordre arborescent prendra sa place.

Lumières

The background environment emits some ambient light which appears on surfaces. Still, without any light sources placed in the scene, the scene will appear quite dark unless the background environment is very bright.

Most outdoor scenes have a directional light (the sun or moon), while indoor scenes typically have several positional lights (lamps, torches, …). See Les lumières et ombres 3D for more information on setting up lights in Godot.