Up to date

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

Introducción al 3D

Crear un juego en 3D puede ser todo un reto. Esa coordenada Z extra hace que muchas de las técnicas comunes que ayudaron a hacer juegos 2D simples ya no funcionen. Para ayudar en esta transición, vale la pena mencionar que Godot utiliza APIs similares para 2D y 3D. La mayoría de los nodos son iguales y están presentes en las versiones 2D y 3D. De hecho, vale la pena comprobar el tutorial de plataformas 3D, o los tutoriales de personajes cinemáticos 3D, que son casi idénticos a sus homólogos 2D.

An example 3D game demo created using Godot

Godot Third Person Shooter (TPS) Demo, available on the Github repository or the Asset Library.

In 3D, math is a little more complex than in 2D. For an introduction to the relevant math written for game developers, not mathemeticians or engineers, check out Matemáticas vectoriales and Usando transformaciones 3D.

3D workspace

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

../../_images/tuto_3d3.webp

Similar to 2D, the tabs below the workspace selector are used to change between currently opened scenes or create a new one using the plus (+) button. The left and right docks should be familiar from editor introduction.

Below the scene selector, the main toolbar is visible, and beneath the main toolbar is the 3D viewport.

Main toolbar

Some buttons in the main toolbar are the same as those in the 2D workspace. A brief explanation is given with the shortcut if the mouse cursor is hovered over a button for one second. Some buttons may have additional functionality if another keypress is performed. A recap of main functionality of each button with its default shortcut is provided below from left to right:

../../_images/3d_toolbar.webp
  • Select Mode (Q): Allows selection of nodes in the viewport. Left clicking on a node to select one. Left clicking and dragging a rectangle selects all nodes within the rectangle's boundaries, once released. Holding Shift while selecting adds more nodes to the selection. Clicking on a selected node while holding Shift deselects the node. In this mode, you can use the gizmos to perform movement or rotation.

  • Move Mode (W): Enables move (or translate) mode for the selected nodes. See Gizmos de espacio y manipulación for more details.

  • Rotate Mode (E): Enables rotation mode for the selected nodes. See Gizmos de espacio y manipulación for more details.

  • Scale Mode (R): Enables scaling and displays scaling gizmos in different axes for the selected nodes. See Gizmos de espacio y manipulación for more details.

  • Show the list of selectable nodes at the clicked position: As the description suggests, this provides a list of selectable nodes at the clicked position as a context menu, if there is more than one node in the clicked area.

  • Lock (Ctrl + L) the selected nodes, preventing selection and movement in the viewport. Clicking the button again (or using Ctrl + Shift + L) unlocks the selected nodes. Locked nodes can only be selected in the scene tree. They can easily be identified with a padlock next to their node names in the scene tree. Clicking on this padlock also unlocks the nodes.

  • Group selected nodes (Ctrl + G). This allows selection of the root node if any of the children are selected. Using Ctrl + G ungroups them. Additionally, clicking the ungroup button in the scene tree performs the same action.

  • Use Local Space (T): If enabled, gizmos of a node are drawn using the current node's rotation angle instead of the global viewport axes.

  • Use Snap (Y): If enabled, movement, and rotation snap to grid. Snapping can also temporarily be activated using Ctrl while performing the action. The settings for changing snap options are explained below.

  • Project Camera Override: This action temporarily replaces the active camera in the level (e.g., the camera following the player) with the camera in the editor's viewport, allowing you to move freely and inspect the level's different parts, while game is running.

  • Toggle preview sunlight: If no DirectionalLight3D exist in the scene, a preview of sunlight can be used as a light source. See Preview environment and light for more details.

  • Toggle preview environment: If no WorldEnvironment exists in the scene, a preview of the environment can be used as a placeholder. See Preview environment and light for more details.

  • Edit Sun and Environment Settings (three dots): Opens the menu to configure preview sunlight and environment settings. See Preview environment and light for more details.

  • Transform menu: It has three options:

    • Snap Object to Floor: Snaps an object to a solid floor.

    • Transform Dialog: Opens a dialog to adjust transform parameters (translate, rotate, scale, and transform) manually.

    • Snap Settings: Allows you to change transform, rotate snap (in degrees), and scale snap (in percent) settings.

  • View menu: Controls the view options and enables additional viewports:

../../_images/tuto_3d6.webp

In this menu, you can also show/hide grids, which are set to 1x1 meter by default, and the origin, where the blue, green, and red axis lines intersect. Moreover, specific types of gizmos can be toggled in this menu.

../../_images/tuto_3d6_2.webp

An open eye means that the gizmo is visible, a closed eye means it is hidden. A half-open eye means that it is also visible through opaque surfaces.

Clicking on Settings in this view menu opens a window to change the Vertical Field of View (VFOV) parameter (in degrees), Z-Near, and Z-Far values.

Next to the View menu, additional buttons may be visible. In the toolbar image at the beginning of this chapter, an additional Mesh button appears because a MeshInstance3D is selected. This menu provides some quick actions or tools to work on a specific node or selection.

View menu of viewport

Below the Select tool, in the 3D viewport, clicking on the three dots opens the View menu for the viewport. Hiding all shown gizmos in the editor's 3D view can also be performed through this menu:

../../_images/tuto_3d6_1.webp

This menu also displays the current view type and enables quick adjustment of the viewport's viewing angle. Additionally, it offers options to modify the appearance of nodes within the viewport.

Sistema de Coordenadas

Godot utiliza el sistema métrico para todo en 3D, donde 1 unidad equivale a 1 metro. La física y otras áreas están ajustadas para esta escala. Por lo tanto, intentar utilizar una escala diferente generalmente es una mala idea (a menos que sepas lo que estás haciendo).

Al trabajar con recursos 3D, siempre es mejor trabajar en la escala correcta (ajusta el DCC a métrico). Godot permite escalar después de la importación y, aunque esto funciona en la mayoría de los casos, en situaciones poco frecuentes puede presentar problemas de precisión de coma flotante (y, por lo tanto, errores o defectos) en áreas delicadas como el renderizado o la física. Por lo tanto, ¡asegúrate de que tus artistas siempre trabajen en la escala correcta!

La coordenada Y se usa para “arriba”, pensado para la mayoría de los objetos que necesitan alineación (como luces, cámaras, colisionador de cápsula, vehículo, etc.), el eje Z se usa como una dirección “apuntando al frente”. Esta convención significa aproximadamente que:

  • X es los lados

  • Y es arriba/abajo

  • Z es adelante/atrás

Mira esta tabla que lo compara con otros programas 3D:

Tabla comparativa de sistemas de coordenadas 3D

Fuente Freya Holmér

Gizmos de espacio y manipulación

Moving, rotating, and scaling objects in the 3D view is done through the manipulator gizmos. Each axis is represented by a color: Red, Green, Blue represent X, Y, Z respectively. This convention applies to the grid and other gizmos too (and also to the shader language, ordering of components for Vector3, Color, etc.).

../../_images/tuto_3d5.webp

Algunos keybindings útiles:

  • To snap placement or rotation, press Ctrl while moving, scaling, or rotating.

  • Para centrar la vista en el objeto seleccionado, presiona F.

In the viewport, the arrows can be clicked and held to move the object on an axis. The arcs can be clicked and held to rotate the object. To lock one axis and move the object freely in the other two axes, the colored rectangles can be clicked, held, and dragged.

If the transform mode is changed from Select Mode to Scale Mode, the arrows will be replaced by cubes, which can be dragged to scale an object as if the object is being moved.

Usando atajos de transformación estilo Blender

A partir de la versión 4.2 de Godot puedes habilitar atajos estilo Blender para mover, rotar y escalar nodos. En blender esos atajos son:

  • G para mover

  • R para rotar

  • S para escalar

Tras presionar una tecla de atajo mientras se centra la pestaña del editor 3D, mueve el ratón o pulsa un número para mover los modos seleccionados la cantidad especificada en unidades tridimensionales. Puedes restringir el movimiento a un eje concreto especificando primero el eje con una letra y después la distancia (si se añade un valor con el teclado).

Por ejemplo, para mover la selección hacia arriba 2.5 unidades, usa la siguiente secuencia de teclas en orden (Y+ es hacia arriba en Godot):

G-Y-2-.-5-Enter

Para usar los atajos de transformación estilo blender en Godot, ve a la pestaña de Atajos de los Ajustes del Editor, luego en la sección de Editor Espacial:

  • Enlazar Comenzar Transformación de Traslación con G.

  • Enlazar Comenzar Transformación de Rotación con R.

  • Enlazar **Comenzar Transformación de Escalado**con S.

  • Finalmente, desenlazar Modo Escalado de modo que ese atajo no entrará en conflicto con Comenzar Transformación de Rotación.

Truco

More shortcuts can be found on the 3D / Spatial editor page.

Nodo Node3D

Node2D es el nodo base para 2D. Control es el nodo base para todo el GUI. Siguiendo este razonamiento, el motor 3D utiliza el nodo Node3D para todo lo que es 3D.

../../_images/tuto_3d1.webp

Los nodos 3D tienen una transformación local, que es relativa al nodo padre (siempre que el nodo padre también sea o herede del tipo Nodo3D). Se puede acceder a esta transformación como un 3×4 Transform3D, o como 3 Vector3 miembros que representan la ubicación, la rotación de Euler (ángulos X, Y y Z) y la escala.

../../_images/tuto_3d2.webp

Contenido 3D

A diferencia del 2D, donde cargar contenido de imagen y dibujarlo es sencillo, el 3D es un poco más difícil. El contenido debe crearse con herramientas 3D especiales (también llamadas herramientas de creación de contenido digital o DCC) y exportarse a un formato de archivo de intercambio para poder importarlo en Godot. Esto es necesario porque los formatos 3D no están tan estandarizados como las imágenes.

Modelos creados manualmente (usando software de modelado 3D)

It is possible to import 3D models in Godot created in external tools. Depending on the format, you can import entire scenes (exactly as they look in the 3D modeling software), including animation, skeletal rigs, blend shapes, or as simple resources.

Ver también

See Importando escenas 3D for more on importing.

Geometría generada

Es posible crear geometría personalizada usando el recurso ArrayMesh directamente. Simplemente crea tus arrays y usa la función ArrayMesh.add_surface_from_arrays(). También está disponible una clase de utilidad, SurfaceTool, que proporciona una API más sencilla y ayuda para indexar, generar normales, tangentes, etc.

En cualquier caso, este método está destinado a generar geometría estática (modelos que no se actualizarán con frecuencia), ya que la creación de arrays de vértices y su envío a la API 3D tiene un coste de rendimiento significativo.

Nota

To learn about prototyping inside Godot or using external tools, see Prototipando niveles con CSG.

Geometría inmediata

Si, en cambio, necesita generar geometría simple que se actualizará con frecuencia, Godot proporciona un recurso especial ImmediateMesh que se puede utilizar en un nodo MeshInstance3D. Esto proporciona una API de modo inmediato al estilo OpenGL 1.x para crear puntos, líneas, triángulos, etc.

2D en 3D

Mientras que Godot cuenta con un potente motor 2D, muchos tipos de juegos utilizan 2D en un entorno 3D. Utilizando una cámara fija (ya sea ortogonal o perspectiva) que no gira, nodos como Sprite3D y AnimatedSprite3D pueden ser usados para crear juegos 2D que se aprovechan de la mezcla con fondos 3D, parallax más realistas, efectos de iluminación/sombra, etc.

La desventaja es, por supuesto, que la complejidad añadida y el rendimiento reducido en comparación con 2D simple, así como la falta de referencia de trabajo en píxeles.

Entorno

Además de editar una escena, a menudo es común editar el entorno. Godot proporciona un nodo WorldEnvironment que permite cambiar el color de fondo, el modo (como por ejemplo, poner un skybox), y aplicar varios tipos de efectos de post-procesamiento incorporados. Los entornos también se pueden anular en la cámara.

Preview environment and light

Por defecto, cualquier escena 3D que no tenga un nodo WorldEnvironment, o un DirectionalLight3D, tendrá una previsualización de lo que falta para iluminar la escena.

La luz de previsualización y de ambiente serán visibles en la escena solo mientras estemos en el editor. Si ejecutas la escena o exportas el proyecto no afectarán a la escena.

The preview light and environment can be turned on or off from the top menu by clicking on their respective icon.

../../_images/tuto_3d8.webp

The three dots dropdown menu next to those icons can be used to adjust the properties of the preview environment and light if they are enabled.

../../_images/tuto_3d9.webp

El mismo sol y ambiente de previsualización se usa para todas las escenas en un mismo proyecto, así que haz retoques que se deberían aplicar a todas las escenas para las que necesites esta previsualización de luces.

Cámaras

No importa cuántos objetos se coloquen en el espacio 3D, no se mostrará nada a menos que también se agregue una Camera3D a la escena. Las cámaras pueden funcionar en proyecciones ortogonales o en perspectiva:

../../_images/tuto_3d10.webp

Las cámaras están asociadas y sólo se muestran en el Viewport de un padre o abuelo. Dado que la raíz del árbol de escenas es un viewport, las cámaras se mostrarán en él de forma predeterminada, pero si se desean sub-viewports (ya sea como objetivo de render o como imagen-en-imagen), estos necesitan sus propias cámaras hijas para que se muestre su contenido.

../../_images/tuto_3d11.png

Cuando se trata de varias cámaras, se siguen las siguientes reglas para cada viewport:

  • Si no hay cámaras en el árbol de escenas, la primera que entre en él se convertirá en la cámara activa. Otras cámaras que entren en la escena serán ignoradas (a menos que estén configuradas como actual).

  • Si una cámara tiene la propiedad "actual" establecida, se utilizará independientemente de cualquier otra cámara de la escena. Si la propiedad está configurada, se activará, sustituyendo a la cámara anterior.

  • Si una cámara activa deja el árbol de escena, la primera cámara en orden de árbol tomará su lugar.

Luces

El entorno de fondo emite un poco de luz ambiental la cual, aparece en superficies. Incluso si no hay ninguna fuente de luz colocada en la escena, la escena se verá muy oscura a menos que el entorno de fondo sea muy brillante.

La mayoría de escenas de exterior tienen una luz direccional (el sol o la luna), mientras que las escenas de interior suelen tener varias luces posicionales (lámparas, antorchas, etc.). Mira Luces y sombras 3D para más información sobre la configuración de las luces en Godot.