Skip to content

Commit

Permalink
Add doc for NavigationMesh connections and NavigationDebug
Browse files Browse the repository at this point in the history
Adds documentation how to merge and / or connect different navigationmeshes and how to use the available navigation debug functions.
  • Loading branch information
smix8 committed Aug 8, 2022
1 parent 05ac649 commit 46ebe68
Show file tree
Hide file tree
Showing 11 changed files with 125 additions and 0 deletions.
Binary file added tutorials/navigation/img/nav_debug_settings.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions tutorials/navigation/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,5 @@ Navigation
:name: toc-learn-features-navigation

real_time_navigation_3d
navigation_debug_tools
navigation_connecting_navmesh
62 changes: 62 additions & 0 deletions tutorials/navigation/navigation_connecting_navmesh.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
.. _doc_navigation_connecting_navmesh:

Connecting NavigationMeshes
===========================

Different NavigationMeshes are automatically merged by the NavigationServer
when at least two vertex positions of one edge exactly overlap.

.. image:: img/navigation_vertex_merge.png

The same is true for multiple NavigationPolygon resources. As long as their
outline points overlap exactly the NavigationServer will merge them.
NavigationPolygon outlines must be from different NavigationPolygon resources to connect.

Overlapping or intersecting outlines on the same NavigationPolygon
will fail the navigation mesh creation. Overlapping or intersecting
outlines from different NavigationPolygons will often fail the
navigation region connections on the NavigationServer and should be avoided.

.. image:: img/navigation_vertex_merge2.png

.. warning::

Exactly means exactly for the vertex position merge. Small float errors
that happen quite regularly with imported meshes will prevent a successful vertex merge.

Alternatively NavigationMesh are not merged but still considered as ``connected`` by
the NavigationServer when their edges are nearly parallel and within distance
to each other. The connection distance is defined by the ``edge_connection_margin`` for each
navigation map. In many cases NavigationMesh edges cannot properly connect when they partly overlap.
Better avoid any navigation mesh overlap at all time for a consistent merge behavior.

.. image:: img/navigation_edge_connection.png

If navigation debug is enabled and the NavigationServer active the established navigation mesh connections will be visualized.
See :ref:`doc_navigation_debug_tools` for more info about navigation debug options.

The default 2D ``edge_connection_margin`` can be changed in the ProjectSettings under ``navigation/2d/default_edge_connection_margin``.

The default 3D ``edge_connection_margin`` can be changed in the ProjectSettings under ``navigation/3d/default_edge_connection_margin``.

The edge connection margin value of any navigation map can also be changed at runtime with the NavigationServer API.

.. tabs::
.. code-tab:: gdscript GDScript

extends Node2D
# 2D margins are designed to work with "pixel" values
var default_2d_map_rid : RID = get_world_2d().get_navigation_map()
NavigationServer2D.map_set_edge_connection_margin(default_2d_map_rid, 50.0)

.. tabs::
.. code-tab:: gdscript GDScript

extends Node3D
# 3D margins are designed to work with 3D unit values
var default_3d_map_rid : RID = get_world_3d().get_navigation_map()
NavigationServer3D.map_set_edge_connection_margin(default_3d_map_rid, 0.5)

.. note::

Changing the edge connection margin will trigger a full update of all navigation mesh connections on the NavigationServer.
61 changes: 61 additions & 0 deletions tutorials/navigation/navigation_debug_tools.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
.. _doc_navigation_debug_tools:

Navigation Debug Tools
======================

.. note::

The debug tools, properties and functions are only available in Godot debug builds.
Do not use any of them in code that will be part of a release build.

Enabling debug navigation
-------------------------

The navigation debug visualization is enabled by default inside the Editor.
To visualize navigation meshes and connections also at runtime
enable the option ``Visible Navigation`` in the editor debug menu.

.. image:: img/navigation_debug_toggle.png

In Godot debug builds the navigation debug can also be toggled on the NavigationServers from scripts.

.. tabs::
.. code-tab:: gdscript GDScript

NavigationServer2D.set_debug_enabled(false)
NavigationServer3D.set_debug_enabled(true)

Debug navigation settings
-------------------------

The appearance of navigation debug can be change in the ProjectSettings under ``debug/shapes/navigation``.
Certain debug features can also be enabled or disabled at will but may require a scene restart to apply.

.. image:: img/nav_debug_settings.png

Debug navigation mesh polygons
------------------------------

If ``enable_edge_lines`` is enabled the edges of navigation mesh polygons will be highlighted.
If ``enable_edge_lines_xray`` is also enabled the edges of navigationmeshes will be visible through geometry.

if ``enable_geometry_face_random_color`` is enabled each navigation mesh face receives
a random color that is mixed with the main color from ``geometry_face_color``.

.. image:: img/nav_debug_xray_edge_lines.png


Debug edge connections
----------------------

Different navigation meshes connected within ``edge_connection_margin`` distance are overlaid.
The color of the overlay is controlled with the navigation debug ``edge_connection_color``.
The connections can be made visible through geometry with the navigation debug ``enable_edge_connections_xray`` property.

.. image:: img/nav_edge_connection2d.gif

.. image:: img/nav_edge_connection3d.gif

.. note::

Edge connections are only visible when the NavigationServer is active.

0 comments on commit 46ebe68

Please sign in to comment.