Ceive ImGizmo - A debug gizmo library

A performant immediate and retained mode gizmo library.

Ceive was made in mind for both performance, immedate mode and retained mode, after I looked at the lack of good gizmo librarys on roblox I set out to create one that was not only more performant than other librarys. But was also easier to work with and had more capabilities.

(The name Ceive ImGizmo is derived from Perceive and Immediate Mode Gizmo)

Github

Demo

The demo place can be found here: Gizmos Demo - Roblox

Some performance stats can be seen in the bottom left of this video:

(Im using a library called Iris for the window to control the propertys)

Shapes

Boxes with or without triangles

image

image

Wedges with or without triangles

image

image

Spheres

image

Cylinders

image

Capsules

image

Custom Import OBJ Meshes

image

Usage

The demo place provides an example for every single shape including the custom mesh.

But heres a basic example on how you could create a cylinder

Gizmo.PushProperty("Color3", Color3.new(0.184314, 0.184314, 1))
Gizmo.Cylinder:Draw(CFrame.new(0, 10, 0) * CFrame.Angles(0, math.rad(25), 0), 2, 4, 20) -- Location: CFrame, Radius: number, Length: number, Subdivisions: number

Subdivisions just define how many segments should make up a shape it’s the same as blender when you define how many vertices should make up a cylinder for example.

How it works

Ceive ImGizmo is both an immediate and retained gizmo library, immediate mode means that instead of creating objects and them persisting over multiple frames, they are instead deleted after each render cycle and ready to be used next frame. This means you dont have to keep track of objects and destroy them. All of it is handled at the end of each frame (On heartbeat)

This means setup is so easy you can have gizmos visualising look directions, nav meshes, attack regions and hitboxes in just minutes.

Performance

Cieve uses a WireframeHandleAdornment, This means it is incredibly fast, being able to show 100k lines at 20fps you never have to worry about performance. All of the lines are rendered using 2 Adornments, one thats AlwaysOnTop and one that isn’t. You can be rest assured that there will be negligable performance impact when your gizmos are enabled.

Internally the retained mode just calls back to the immediate mode functions, so there is no performance difference between them.

If you’d wish to enable / disable all gizmos then you can call Gizmo.SetEnabled(value: boolean) this will disable all rendering and clear any Rays / Adornments.

Latest Release:

132 Likes

I don’t think this module has the credit it deserves.

I have had a look into the source code and I must admit, it was impressive and the result both aesthetic and performance wise is phenomenal.

Good work and thanks for open sourcing this for everybody to use.

4 Likes

Thank you, I’m currently working on a v2.0.0 (semantic versioning) which will allow for both retained and immediate gizmos

2 Likes

Would would be nice for something like this to be available in viewport frames, to show 3D shapes in the background of your current interfaces.

Especially with SCIFI games, it would bring first appearances and impressions through the roof.

Sadly the method I use to render (WireframeHandleAdornments) are unable to render in viewports. Which is a shame because thats a cool use case

v2.0.0

v2.0.0 released, completely reworked how everything is handled.

Release can be found here:

And docs can be found here:

1 Like

I gave this a star on github, really cool module and you could make really creative games with this.

1 Like

Oh man this is really cool, I’m liking the wireframe look on the shapes haha, also great use of the Iris library, I use it myself and it’s great :slight_smile:

1 Like

Looks interesting, but what is this used for? Is it primarily for debugging games?

It was designed with debugging in mind but alot of people have pointed out how it would be really nice for holograms for sci-fi games etc, it really has any use case where you could want wireframe objects.

Yo, this is so useful to debug my very own lag compensation I will use it tomorrow

1 Like

v2.1.0

v2.1.0 has been released, along with it comes the addition of Gizmo.TweenProperties

This allows for easy tweening of any property for any gizmo for both immediate and retained, it uses TweenInfo the same as a normal roblox tween.

Documentation can be found here: CEIVE | CeiveImGizmo

As always the demo place provides an example of how to use it.

Can you make this a package on Wally?

1 Like

I would make it a package on wally, but I also can’t be bothered to learn how to use it, set it up and then publish every time I release a new version. I’m sorry if this impedes your ability to use Ceive, I’ve done my best to make it as easy as possible to install a version if your using rojo or not.

2 Likes

v3.0.0

In v3.0.0 comes small api fixes, fixed capsules ends not rendering correctly at certain subdivision levels.
Fixed circles not rendering correctly at certain subdivision levels.

This will be the last major update for a while, I believe Ceive is at a state where I’m happy with performance and how it looks. Minor and Patch updates will likely come intermittently.

Please post any bugs you find or requests for certain features.

v3.1.0

Additions

Ceive.Styles - A table which contains the propertys which you can use in Ceive.PushProperty, check demo place for example.
Ceive.SetStyle() - A function which has arguments for all the propertys which you can use in Ceive.PushProperty, check demo place for example.

Notes

Fixed some typings and added .Init() to the types.

SetStyle API here: CEIVE | CeiveImGizmo

v3.1.1

Fixed an issue where Spheres types didn’t include the Angle

1 Like

v3.1.2

Fixed a bug with volume arrows rendering half the length of the cone down more than expected

v3.1.3

Fixed a bug where boxes and wedges wouldn’t render correctly if their size wasn’t uniform across all axis.

v3.2.0

Added a plane gizmo that takes in (Position, Normal, Size)

Fixed SetStyle so now AlwaysOnTop works as intended