introduction_to_3d.rst 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. .. _doc_introduction_to_3d:
  2. Introduction to 3D
  3. ==================
  4. Creating a 3D game can be challenging. That extra Z coordinate makes
  5. many of the common techniques that helped to make 2D games simpler no
  6. longer work. To aid in this transition, it is worth mentioning that
  7. Godot uses similar APIs for 2D and 3D. Most nodes are the same and
  8. are present in both 2D and 3D versions. In fact, it is worth checking
  9. the 3D platformer tutorial, or the 3D kinematic character tutorials,
  10. which are almost identical to their 2D counterparts.
  11. In 3D, math is a little more complex than in 2D, so also checking the
  12. :ref:`doc_vector_math` entry in the wiki (which was especially created for game
  13. developers, not mathematicians or engineers) will help pave the way for you
  14. to develop 3D games efficiently.
  15. Node3D node
  16. ~~~~~~~~~~~
  17. :ref:`Node2D <class_Node2D>` is the base node for 2D.
  18. :ref:`Control <class_Control>` is the base node for everything GUI.
  19. Following this reasoning, the 3D engine uses the :ref:`Node3D <class_Node3D>`
  20. node for everything 3D.
  21. .. note:: Be aware that "Spatial" Nodes are now called "Node3D"
  22. starting with Godot 4. Any Godot 3.x references to "Spatial"
  23. Nodes refer to "Node3D" in Godot 4.
  24. .. image:: img/tuto_3d1.png
  25. Node3Ds have a local transform, which is relative to the parent
  26. node (as long as the parent node is also of **or inherits from** the type
  27. Node3D). This transform can be accessed as a 4×3
  28. :ref:`Transform3D <class_Transform3D>`, or as 3 :ref:`Vector3 <class_Vector3>`
  29. members representing location, Euler rotation (X, Y and Z angles) and
  30. scale.
  31. .. image:: img/tuto_3d2.png
  32. 3D content
  33. ~~~~~~~~~~
  34. Unlike 2D, where loading image content and drawing is straightforward, 3D is a
  35. little more difficult. The content needs to be created with special 3D tools
  36. (also called Digital Content Creation tools, or DCCs) and exported to an
  37. exchange file format to be imported in Godot. This is required since 3D formats
  38. are not as standardized as images.
  39. Manually authored models (using 3D modeling software)
  40. -----------------------------------------------------
  41. .. FIXME: Needs update to properly description Godot 3.x workflow
  42. (used to reference a non existing doc_importing_3d_meshes importer).
  43. There are two pipelines to import 3D models in Godot. The first and most common
  44. one is by :ref:`doc_importing_3d_scenes`, which allows you to import entire
  45. scenes (exactly as they look in the 3D modeling software), including animation,
  46. skeletal rigs, blend shapes, etc.
  47. The second pipeline is by importing simple .OBJ files as mesh resources,
  48. which can be then put inside a :ref:`MeshInstance3D <class_MeshInstance3D>`
  49. node for display.
  50. Generated geometry
  51. ------------------
  52. It is possible to create custom geometry by using the
  53. :ref:`ArrayMesh <class_ArrayMesh>` resource directly. Simply create your arrays
  54. and use the :ref:`ArrayMesh.add_surface_from_arrays() <class_ArrayMesh_method_add_surface_from_arrays>`
  55. function. A helper class is also available, :ref:`SurfaceTool <class_SurfaceTool>`,
  56. which provides a more straightforward API and helpers for indexing,
  57. generating normals, tangents, etc.
  58. In any case, this method is meant for generating static geometry (models
  59. that will not be updated often), as creating vertex arrays and
  60. submitting them to the 3D API has a significant performance cost.
  61. Immediate geometry
  62. ------------------
  63. If, instead, you need to generate simple geometry that
  64. will be updated often, Godot provides a special node,
  65. :ref:`ImmediateMesh <class_ImmediateMesh>`,
  66. which provides an OpenGL 1.x style immediate-mode API to create points,
  67. lines, triangles, etc.
  68. 2D in 3D
  69. --------
  70. While Godot packs a powerful 2D engine, many types of games use 2D in a
  71. 3D environment. By using a fixed camera (either orthogonal or
  72. perspective) that does not rotate, nodes such as
  73. :ref:`Sprite3D <class_Sprite3D>` and
  74. :ref:`AnimatedSprite3D <class_AnimatedSprite3D>`
  75. can be used to create 2D games that take advantage of mixing with 3D
  76. backgrounds, more realistic parallax, lighting/shadow effects, etc.
  77. The disadvantage is, of course, that added complexity and reduced
  78. performance in comparison to plain 2D, as well as the lack of reference
  79. of working in pixels.
  80. Environment
  81. ~~~~~~~~~~~
  82. Besides editing a scene, it is often common to edit the environment.
  83. Godot provides a :ref:`WorldEnvironment <class_WorldEnvironment>`
  84. node that allows changing the background color, mode (as in, put a
  85. skybox), and applying several types of built-in post-processing effects.
  86. Environments can also be overridden in the Camera.
  87. 3D viewport
  88. ~~~~~~~~~~~
  89. Editing 3D scenes is done in the 3D tab. This tab can be selected
  90. manually, but it will be automatically enabled when a Node3D node is
  91. selected.
  92. .. image:: img/tuto_3d3.png
  93. Default 3D scene navigation controls are similar to Blender (aiming to
  94. have some sort of consistency in the free software pipeline..), but
  95. options are included to customize mouse buttons and behavior to be
  96. similar to other tools in the Editor Settings:
  97. .. image:: img/tuto_3d4.png
  98. Coordinate system
  99. -----------------
  100. Godot uses the `metric <https://en.wikipedia.org/wiki/Metric_system>`__
  101. system for everything in 3D, with 1 unit being equal to 1 meter.
  102. Physics and other areas are tuned for this scale. Therefore, attempting to use a
  103. different scale is usually a bad idea (unless you know what you are doing).
  104. When working with 3D assets, it's always best to work in the correct scale (set
  105. the unit to metric in your 3D modeling software). Godot allows scaling
  106. post-import and, while this works in most cases, in rare situations it may
  107. introduce floating-point precision issues (and thus, glitches or artifacts) in
  108. delicate areas such as rendering or physics. Make sure your artists always work
  109. in the right scale!
  110. The Y coordinate is used for "up". As for the horizontal X/Z axes, Godot uses a
  111. **right-handed** coordinate system. This means that for most objects that need
  112. alignment (such as lights or cameras), the Z axis is used as a "pointing
  113. towards" direction. This convention roughly means that:
  114. - **X** is sides
  115. - **Y** is up/down
  116. - **Z** is front/back
  117. See this chart for comparison with other 3D software:
  118. .. figure:: img/introduction_to_3d_coordinate_systems.webp
  119. :align: center
  120. :alt: 3D coordinate systems comparison chart
  121. Image by `Freya Holmér <https://twitter.com/FreyaHolmer>`__
  122. Space and manipulation gizmos
  123. -----------------------------
  124. Moving objects in the 3D view is done through the manipulator gizmos.
  125. Each axis is represented by a color: Red, Green, Blue represent X, Y, Z
  126. respectively. This convention applies to the grid and other gizmos too
  127. (and also to the shader language, ordering of components for
  128. Vector3, Color, etc.).
  129. .. image:: img/tuto_3d5.png
  130. Some useful keybindings:
  131. - To snap placement or rotation, press :kbd:`Ctrl` while moving, scaling
  132. or rotating.
  133. - To center the view on the selected object, press :kbd:`F`.
  134. View menu
  135. ---------
  136. The view options are controlled by the "View" menu in the viewport's toolbar.
  137. .. image:: img/tuto_3d6.png
  138. You can hide the gizmos in the 3D view of the editor through this menu:
  139. .. image:: img/tuto_3d6_1.png
  140. To hide a specific type of gizmos, you can toggle them off in the "View" menu.
  141. .. image:: img/tuto_3d6_2.png
  142. Default environment
  143. -------------------
  144. When created from the Project Manager, the 3D environment has a default sky.
  145. .. image:: img/tuto_3d8.png
  146. Given how physically-based rendering works, it is advised to always try to
  147. work with a default environment in order to provide indirect and reflected
  148. light to your objects.
  149. Cameras
  150. -------
  151. No matter how many objects are placed in the 3D space, nothing will be
  152. displayed unless a :ref:`Camera3D <class_Camera3D>` is
  153. also added to the scene. Cameras can work in either orthogonal or
  154. perspective projections:
  155. .. image:: img/tuto_3d10.png
  156. Cameras are associated with (and only display to) a parent or grandparent
  157. viewport. Since the root of the scene tree is a viewport, cameras will
  158. display on it by default, but if sub-viewports (either as render target
  159. or picture-in-picture) are desired, they need their own children cameras
  160. to display.
  161. .. image:: img/tuto_3d11.png
  162. When dealing with multiple cameras, the following rules are enforced for
  163. each viewport:
  164. - If no cameras are present in the scene tree, the first one that
  165. enters it will become the active camera. Further cameras entering the
  166. scene will be ignored (unless they are set as *current*).
  167. - If a camera has the "*current*" property set, it will be used
  168. regardless of any other camera in the scene. If the property is set,
  169. it will become active, replacing the previous camera.
  170. - If an active camera leaves the scene tree, the first camera in
  171. tree-order will take its place.
  172. Lights
  173. ------
  174. The background environment emits some ambient light which appears on surfaces.
  175. Still, without any light sources placed in the scene, the scene will appear
  176. quite dark unless the background environment is very bright.
  177. Most outdoor scenes have a directional light (the sun or moon), while indoor
  178. scenes typically have several positional lights (lamps, torches, …).
  179. See :ref:`doc_lights_and_shadows` for more information on setting up lights in Godot.