DmitriySalnikov / godot_debug_draw_3d

Draw 3D debug graphics and 2D overlays with this add-on.
https://dd3d.dmitriysalnikov.ru/
Other
407 stars 19 forks source link
csharp gdextension gdnative gdscript godot godot-engine godot4

icon

Debug drawing utility for Godot

This is an add-on for debug drawing in 3D and for some 2D overlays, which is written in C++ and can be used with GDScript or C#.

Based on my previous addon, which was developed only for C#, and which was inspired by Zylann's GDScript addon

Documentation

Godot 3 version

Support me

Your support adds motivation to develop my public projects.

Boosty

USDT-TRC20

USDT-TRC20 TEw934PrsffHsAn5M63SoHYRuZo984EF6v

Features

3D:

2D:

Overlay:

Precompiled for:

This addon supports working with several World3D and different Viewports. There is also a no depth test mode and other settings that can be changed for each instance.

Interactive Web Demo

screenshot_web

[!WARNING]

  • Firefox most likely can't run this demo

Download

To download, use the Godot Asset Library or download the archive by clicking the button at the top of the main repository page: Code -> Download ZIP, then unzip it to your project folder. Or use one of the stable versions from the GitHub Releases page (just download one of the Source Codes in assets).

Installation

Examples

More examples can be found in the examples_dd3d/ folder.

Simple test:

func _process(delta: float) -> void:
    var _time = Time.get_ticks_msec() / 1000.0
    var box_pos = Vector3(0, sin(_time * 4), 0)
    var line_begin = Vector3(-1, sin(_time * 4), 0)
    var line_end = Vector3(1, cos(_time * 4), 0)

    DebugDraw3D.draw_box(box_pos, Vector3(1, 2, 1), Color(0, 1, 0))
    DebugDraw3D.draw_line(line_begin, line_end, Color(1, 1, 0))
    DebugDraw2D.set_text("Time", _time)
    DebugDraw2D.set_text("Frames drawn", Engine.get_frames_drawn())
    DebugDraw2D.set_text("FPS", Engine.get_frames_per_second())
    DebugDraw2D.set_text("delta", delta)

screenshot_1

An example of using scoped configs:

@tool
extends Node3D

func _ready():
    # Set the base scoped_config.
    # Each frame will be reset to these scoped values.
    DebugDraw3D.scoped_config().set_thickness(0.1).set_center_brightness(0.6)

func _process(delta):
    # Draw using the base scoped config.
    DebugDraw3D.draw_box(Vector3.ZERO, Quaternion.IDENTITY, Vector3.ONE * 2, Color.CORNFLOWER_BLUE)
    if true:
        # Create a scoped config that will exist until exiting this if.
        var _s = DebugDraw3D.new_scoped_config().set_thickness(0).set_center_brightness(0.1)
        # Draw with a thickness of 0
        DebugDraw3D.draw_box(Vector3.ZERO, Quaternion.IDENTITY, Vector3.ONE, Color.RED)
        # If necessary, the values inside this scope can be changed
        # even before each call to draw_*.
        _s.set_thickness(0.05)
        DebugDraw3D.draw_box(Vector3(1,0,1), Quaternion.IDENTITY, Vector3.ONE * 1, Color.BLUE_VIOLET)

screenshot_5

[!TIP]

If you want to use a non-standard Viewport for rendering a 3d scene, then do not forget to specify it in the scoped config!

API

This project has a separate documentation page.

Also, a list of all functions is available in the documentation inside the editor (see DebugDraw3D and DebugDraw2D).

screenshot_4

Known issues and limitations

The text in the keys and values of a text group cannot contain multi-line strings.

The entire text overlay can only be placed in one corner, unlike DataGraphs.

Frustum of Camera3D does not take into account the window size from ProjectSettings.

More screenshots

DebugDrawDemoScene.tscn in editor screenshot_2

DebugDrawDemoScene.tscn in play mode screenshot_3