introduction.rst 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. :: _doc_introduction:
  2. Introduction
  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 simple no
  6. longer work. To aid in this transition, it is worth mentioning that
  7. Godot uses very 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. [[Vector Math]] in the wiki (which were specially created for game
  13. developers, not mathematicians or engineers) will help pave the way into
  14. efficiently developing 3D games.
  15. Spatial Node
  16. ~~~~~~~~~~~~
  17. `Node2D <https://github.com/okamstudio/godot/wiki/class_node2d>`__ is
  18. the base node for 2D.
  19. `Control <https://github.com/okamstudio/godot/wiki/class_control>`__ is
  20. the base node for everything GUI. Following this reasoning, the 3D
  21. engine uses the
  22. `Spatial <https://github.com/okamstudio/godot/wiki/class_spatial>`__
  23. node for everything 3D.
  24. .. image:: /img/tuto_3d1.png
  25. Spatial nodes have a local transform, which is relative to the parent
  26. node (as long as the parent node is also **or inherits** of type
  27. Spatial). This transform can be accessed as a 4x3
  28. `Transform <https://github.com/okamstudio/godot/wiki/class_transform>`__,
  29. or as 3
  30. `Vector3 <https://github.com/okamstudio/godot/wiki/class_vector3>`__
  31. members representing location, euler rotation (x,y and z angles) and
  32. scale.
  33. .. image:: /img/tuto_3d2.png
  34. 3D Content
  35. ~~~~~~~~~~
  36. Unlike 2D, where loading image content and drawing is straightforward,
  37. 3D is a little more difficult. The content needs to be created with
  38. special 3D tool (usually referred to as DCCs) and exported to an
  39. exchange file format in order to be imported in Godot (3D formats are
  40. not as standardized as images).
  41. DCC-Created Models
  42. ------------------
  43. There are two pipelines to import 3D models in Godot. The first and most
  44. common one is through the [[Import 3D]] importer, which allows to import
  45. entire scenes (just as they look in the DCC), including animation,
  46. skeletal rigs, blend shapes, etc.
  47. The second pipeline is through the [[Import Meshes]] importer. This
  48. second method allows importing simple .OBJ files as mesh resources,
  49. which can be then put inside a
  50. `MeshInstance <https://github.com/okamstudio/godot/wiki/class_meshinstance>`__
  51. node for display.
  52. Generated Geometry
  53. ------------------
  54. It is possible to create custom geometry by using the
  55. `Mesh <https://github.com/okamstudio/godot/wiki/class_mesh>`__ resource
  56. directly, simply create your arrays and use the
  57. `Mesh.add\_surface <https://github.com/okamstudio/godot/wiki/class_mesh#add_surface>`__
  58. function. A helper class is also available,
  59. `SurfaceTool <https://github.com/okamstudio/godot/wiki/class_surfacetool>`__,
  60. which provides a more straightforward API and helpers for indexing,
  61. generating normals, tangents, etc.
  62. In any case, this method is meant for generating static geometry (models
  63. that will not be updated often), as creating vertex arrays and
  64. submitting them to the 3D API has a significant performance cost.
  65. Immediate Geometry
  66. ------------------
  67. If, instead, there is a requirement to generate simple geometry that
  68. will be updated often, Godot provides a special node,
  69. `ImmediateGeometry <https://github.com/okamstudio/godot/wiki/class_immediategeometry>`__
  70. which provides an OpenGL 1.x style immediate-mode API to create points,
  71. lines, triangles, etc.
  72. 2D in 3D
  73. --------
  74. While Godot packs a powerful 2D engine, many types of games use 2D in a
  75. 3D environment. By using a fixed camera (either orthogonal or
  76. perspective) that does not rotate, nodes such as
  77. `Sprite3D <https://github.com/okamstudio/godot/wiki/class_sprite3d>`__
  78. and
  79. `AnimatedSprite3D <https://github.com/okamstudio/godot/wiki/class_animatedsprite3d>`__
  80. can be used to create 2D games that take advantage of mixing with 3D
  81. backgrounds, more realistic parallax, lighting/shadow effects, etc.
  82. The disadvantage is, of course, that added complexity and reduced
  83. performance in comparison to plain 2D, as well as the lack of reference
  84. of working in pixels.
  85. Environment
  86. ~~~~~~~~~~~
  87. Besides editing a scene, it is often common to edit the environment.
  88. Godot provides a
  89. `WorldEnvironment <https://github.com/okamstudio/godot/wiki/class_worldenvironment>`__
  90. node that allows changing the background color, mode (as in, put a
  91. skybox), and applying several types of built-in post-processing effects.
  92. Environments can also be overriden in the Camera.
  93. 3D Viewport
  94. ~~~~~~~~~~~
  95. Editing 3D scenes is done in the 3D tab. This tab can be selected
  96. manually, but it will be automatically enabled when a Spatial node is
  97. selected.
  98. .. image:: /img/tuto_3d3.png
  99. Default 3D scene navigation controls are similar to Blender (aiming to
  100. have some sort of consistency in the free software pipeline..), but
  101. options are included to customize mouse buttons and behavior to be
  102. similar to other tools in Editor Settings:
  103. .. image:: /img/tuto_3d4.png
  104. Coordinate System
  105. -----------------
  106. Godot uses the `metric <http://en.wikipedia.org/wiki/Metric_system>`__
  107. system for everything. 3D Physics and other areas are tuned for this, so
  108. attempting to use a different scale is usually a bad idea (unless you
  109. know what you are doing).
  110. When working with 3D assets, it's always best to work in the correct
  111. scale (set your DCC to metric). Godot allows scaling post-import and,
  112. while this works in most cases, in rare situations it may introduce
  113. floating point precision issues (and thus, glitches or artifacts) in
  114. delicate areas such as rendering or physics. So, make sure your artists
  115. always work in the right scale!
  116. The Y coordinate is used for "up", though for most objects that need
  117. alignment (like lights, cameras, capsule collider, vehicle, etc), the Z
  118. axis is used as a "pointing towards" direction. This convention roughly
  119. means that:
  120. - **X** is sides
  121. - **Y** is up/down
  122. - **Z** is front/back
  123. Space and Manipulation Gizmos
  124. -----------------------------
  125. Moving objects in the 3D view is done through the manipulator gizmos.
  126. Each axis is represented by a color: Red, Green, Blue represent X,Y,Z
  127. respectively. This convention applies to the grid and other gizmos too
  128. (and also to the shader language, ordering of components for
  129. Vector3,Color,etc).
  130. .. image:: /img/tuto_3d5.png
  131. Some useful keybindings:
  132. - To snap motion or rotation, press the "s" key while moving, scaling
  133. or rotating.
  134. - To center the view on the selected object, press the "f" key.
  135. View Menu
  136. ---------
  137. The view options are controlled by the \`[view]\` menu. Pay attention to
  138. this little menu inside the window because it is often overlooked!
  139. .. image:: /img/tuto_3d6.png
  140. Default Lighting
  141. ----------------
  142. The 3D View has by some default options on lighting:
  143. - There is a directional light that makes objects visible while editing
  144. turned on by default. It is no longer visible when running the game.
  145. - There is subtle default environment light to avoid places not reached
  146. by the light to remain visible. It is also no longer visible when
  147. running the game (and when the default light is turned off).
  148. These can be turned off by toggling the "Default Light" option:
  149. .. image:: /img/tuto_3d8.png
  150. Customizing this (and other default view options) is also possible via
  151. the settings menu:
  152. .. image:: /img/tuto_3d7.png
  153. which opens this window, allowing to customize ambient light color and
  154. default light direction:
  155. .. image:: /img/tuto_3d9.png
  156. Cameras
  157. -------
  158. No matter how many objects are placed in 3D space, nothing will be
  159. displayed unless a
  160. `Camera <https://github.com/okamstudio/godot/wiki/class_camera>`__ is
  161. also added to the scene. Cameras can either work in orthogonal or
  162. perspective projections:
  163. .. image:: /img/tuto_3d10.png
  164. Cameras are associated and only display to a parent or grand-parent
  165. viewport. Since the root of the scene tree is a viewport, cameras will
  166. display on it by default, but if sub-viewports (either as render target
  167. or picture-in-picture) are desired, they need their own children cameras
  168. to display.
  169. .. image:: /img/tuto_3d11.png
  170. When dealing with multiple cameras, the following rules are followed for
  171. each viewport:
  172. - If no cameras are present in the scene tree, the first one that
  173. enters it will become the active camera. Further cameras entering the
  174. scene will be ignored (unless they are set as *current*).
  175. - If a camera has the "*current*" property set, it will be used
  176. regardless of any other camera in the scene. If the property is set,
  177. it will become active, replacing the previous camera.
  178. - If an active camera leaves the scene tree, the first camera in
  179. tree-order will take it's place.
  180. Lights
  181. ------
  182. There is no limitation on the number of lights and types in Godot. As
  183. many as desired can be added (as long as performance allows). Shadow
  184. maps are, however, limited. The more they are used, the less the quality
  185. overall.
  186. It is possible to use [[Light Baking]], to avoid using large amount of
  187. real-time lights and improve performance.