Auto Remesher

Auto Remesher is an automatic quad remeshing tool, and it will be integrated to Dust3D once it has acceptable performance.

Why we need yet another remesh tool?

I posted a Tweet about the status of the current open source quad remeshing libraries. From the replies I got, I guess I am not the only one who is not satisfied with the current status of auto retopology.

In this post, I am not going to talk about closed source options except Quad Remesher. It’s the state of the art tool, with plugins work with almost all the mainstream 3D modeling software. I never try it by myself, only know it from the demos and the videos other people posted. The quality looks like is the best among all the options at the moment, I heard that Pixelogic bought it and integrated it to ZBrush as Zremesher many years ago.

Instant Meshes

The best open source alternative is Instant meshes. It’s superfast, with high quality quads generation. It’s already been integrated to Dust3D. The main complaint is there are annoying holes left after remeshing.

Quadriflow

Quadriflow is another nice option, the quality of the generated quads is slightly better than Instant meshes sometimes, but not always. Artifacts could still be generated as well. Since it’s globalized optimization comparing to localized methods, it’s much slower than Instant meshes.

OpenVDB volume to mesh

OpenVDB is a academy award winning library. OpenVDB volume to mesh is great for high dense quads generation. This method is fast and robust. But the quads generated have a blocky feeling when the poly count is low. BTW, OpenVDB has been introduced to the next release of Dust3D as the core supporting library for sculpting feature.

Constrained Mixed-Integer Solver

There is a golden piece which you normally don’t hear people talk about it on the forums. But it appears on almost every paper related with quadrangulation. That’s the Constrained Mixed-Integer Solver, you need an extra quad extraction tool to work together for remeshing though. The quads generated from this combination are beautiful, the main pitfall is it’s too slow. I hope it can be optimized by introduce tbb or other parallel optimization.

Auto Remesher

Auto Remesher repository is the new bottle for old wine, libigl wrapper of Constrained Mixed-Integer Solver and the libQEx quad extraction. These two pieces were there for years, but there isn’t an integrated tool which can be downloaded directly and work out of the box for remeshing, or there is but I cannot find it.

Benefits to Dust3D

Dust3D start as a low poly quick modeling tool. Without adding new features, remesh function is not urgently needed, because the mesh is procedurally generated, we can avoid to generate bad quads. After voxel based sculpting feature been introduced, we need a good high poly to low poly quads converter without manual twist steps. I hope this repository could be a starting point and playground for meshing beautiful quads.

Join mailing list and follow twitter to get updates.

Non-destructive Painting in Dust3D

Implementing the next coming feature, Non-destructive Painting, is one of the most exciting moments of coding Dust3D. Dust3D is a 3D modeling software, featuring a semi-auto generation workflow of 3D assets making.

What’s Non-destructive Painting? The painting result, including the colors and the positions of the colors, are mesh independent, and are been stored in a voxel grid.

When new paint action committed, the mouse position will be converted to a voxel cell, color info will be updated to that cell, and based on the current brush size, neighboring voxel cells will be updated with a gradient color as well. The final mesh color calculation is similar with the painting process, the only difference is that, paining is updating to voxel cell, mesh coloring is fetching from voxel cell.

Imaging your house been split to 100x100x100 cells, every brush you draw in the space, will lit one or more cells. You are not painting in a 2D space, but in real 3D. There is a voxel editor called MagicaVoxel, is modeling in this way.

In Dust3D software, you are not allowed to edit vertex position directly, because all the vertices, quads, triangles are generated automatically, based on the nodes on the canvas you drawn. Any node or edge between nodes been changed, the mesh will be regenerated. The traditional vertex painting will not work on this workflow, unless you lock the generated mesh. Once you lock the mesh generation, you lose the chance to modify the mesh topology by nodes.

By introducing this 3D space painting, you are free to change the nodes even after the painting is finished.

Here is the demonstration of painting a banana mesh in Dust3D, and the next video shows how Non-destructive works.

This feature will be available in Dust3D 1.0 RC 7 soon.

Join mailing list and follow twitter to get updates.

New Features in Dust3D 1.0.0-rc.1

Dust3D is a 3D modeling software for indie developers to quick create video game characters. There are many new features been introduced in this release candidate version: Dust3D 1.0.0-rc.1

New Rig Generator

New rig system are more stable than the previous version, and is capable of handling uncombined meshes during the skinning and weighting processes. You can check the Cat example model from File / Open Example to see how to create a run motion which then could be exported as FBX and GLB for importing to Unreal Engine, Unity, Godot Engine or other game engine.

Remesh

The state of the art Instant Meshes is been introduced to remesh the model based on the poly count setting. It’s native built-in, not invoked by command line. Choose the target poly count from component context menu you can get your model or component remeshed instantly.

Cloth Simulation

An easy cloth simulating system based on Samer Itani’s FastMassSpring implementation.

Spanish and Italian

Thanks MrAlexEsisteGia for the Italian translation and azagaya for the Spanish translation. Two new languages are been added.

UI Improvements

Thanks to Karl Robillard’s contributions, the window size could be preserved between runs, and many useful shortcuts for menu items are been added.

Join mailing list and follow twitter to get updates.

Procedural 3D Model Generation in Dust3D

In this article, I will try to introduce you the Procedural Generation feature in Dust3D using JavaScript.

About Dust3D

Dust3D is a free and open-source software for quick making 3D model with texture and rig automatically generated. It supports Linux, MacOS, and Windows.

In case you never use this software before, Here is a short demo on how to make a model in this software in none procedural mode.

The progress of modeling is to put nodes on canvas. By modifying the radius and position of the nodes, and other settings, you control the shape of the generated model.

Procedural Generation using JavaScript

In recent beta release, there is a new feature which allows you to generate nodes from JavaScript. It’s similar as web browser parse JavaScript to create HTML document. For example, the following JavaScript code will generate a paragraph in web browser,

var paragraph = document.createElement("p");
var node = document.createTextNode("This is text node under paragraph element.");
paragraph.appendChild(node);
document.body.appendChild(paragraph);

In Dust3D, you can create a node in a similar way,

var component = document.createComponent();
var part = document.createPart(component);
var node = document.createNode(part);
document.setAttribute(node, "x", 0.5);
document.setAttribute(node, "y", 0.5);
document.setAttribute(node, "z", 1.0);
document.setAttribute(node, "radius", 0.2);

Copy and paste the code to the script editor of Dust3D to run it

This will generate a node on canvas, and then the node been further generated into a cube mesh.

There are two circles on the canvas, orange circle represent the front view, green circle represent the side view. And the small triangle is the model center anchor.

Dust3D Document Structure

From the code, you may noticed that there are component, part, node, and attributes. Let’s explain a little bit here, for details you may need to check the Dust3D Script Reference.

1. Document 2. Canvas 3. Nodes and Edges 4. Part 5. Component

A document shows as a window in Dust3D, you draw nodes and connect nodes with edges on the canvas, all the connected nodes and edges grouped as parts. One document can have multiple parts. Each part belongs to a component.

Now let’s make a more complex example to understand these concepts.

More Complex JavaScript Example

function createNode(part, origin, radius)
{
    var node = document.createNode(part);
    document.setAttribute(node, "x", origin.getComponent(0));
    document.setAttribute(node, "y", origin.getComponent(1));
    document.setAttribute(node, "z", origin.getComponent(2));
    document.setAttribute(node, "radius", radius);
    return node;
}

function createLine(fromPosition, fromRadius, toPosition, toRadius, segments)
{
    var component = document.createComponent();
    var part = document.createPart(component);
    var previousNode = undefined;
    for (var i = 0; i <= segments; ++i) {
        var alpha = (i + 0.0) / segments;
        var origin = fromPosition.clone().lerp(toPosition, alpha);
        var radius = fromRadius * (1.0 - alpha) + toRadius * alpha;
        var node = createNode(part, origin, radius);
        if (undefined != previousNode)
            document.connect(previousNode, node);
        previousNode = node;
    }
    return part;
}

var fromPosition = new THREE.Vector3(0.5, 0.8, 1.0);
var fromRadius = 0.3;

var toPosition = new THREE.Vector3(0.5, 0.2, 1.0);
var toRadius = 0.1;

var segments = document.createIntInput("Segments", 3, 2, 10);
console.log("Hey, we accept parameter from the UI input control! The segments is " + segments);

var linePart = createLine(fromPosition, fromRadius, toPosition, toRadius, segments);
document.setAttribute(linePart, "subdived", "true");

The above JavaScript code generates a cylinder, from the down right corner, you can see a Segments slider control, adjust the slider, the generated result will change according to the segments value you modified. You may need toggle the settings in view menu to see the wireframe, the actual generated segments may greater than the value you configured because of intermediate nodes generation.

Also, there is a text box above the slider, shows

Hey, we accept parameter from the UI input control! The segments is 3

This is the console output. Yes, you can use console.log just as you use it in web browser.

Where to Go From Here?

If you have successfully tried the example code, now it’s time to dive deeper by checking the Dust3D Script Reference, to see a full API and attributes list. You can also check the Procedural Tree example from the Open Example menu which requires 1.0.0-beta.22 and above versions.

Dust3D is very young, any contributions are welcome, if you have any suggestions or want contribute a new feature please don’t hesitate to raise a issue here or make a pull request.

Last, I use my Procedural Tree v3.0 to end this article, please enjoy your procedural generation and welcome to share your script and screenshot to our forum.

Dust3D awarded Epic MegaGrants

I am very excited to share that Dust3D has been awarded Epic MegaGrants.

Dust3D is a 3D modeling software for quick making game assets with texture and rig automatically generated, it supports Linux, MacOS, and Windows. And it’s fully opensourced since the first day, https://github.com/huxingyi/dust3d

Epic MegaGrants is a funding provided by Epic Games,

to support game developers, enterprise professionals, media and entertainment creators, students, educators, and tool developers doing amazing things with Unreal Engine or enhancing open-source capabilities for the 3D graphics community. https://www.unrealengine.com/en-US/megagrants

Thank you Epic Games and all the contributors,

Siaržuk Piatroŭski  
PowPingDone
anderejd  
Alistair Miles  
hdu  
Ian Diaz  
Skullfurious  
Gamefromscratch  
RSDuck  
xtvjxk123456  
Zireael07  
glasyalabolas  
David Patrick  
Abraão Filho  
probonopd  
John Tsiombikas  
Jared Deckard  
Brandon Vandegrift  
iKlsR  
Jimmy Gunawan  
mikeruddy  
Helspank  
Demorde  
vanous  
justStand  
Ruben Niculcea  
boynet  
fornclake  
bvanevery  
Toshio Araki  
Evan Gruda  
KeepFenDou  
Kubilay Yalçın  
Satish Goda  
Sawm Fawk  
Erlend Sogge Heggen  
Michael Nowak  

* Ordered by first contribution

there are many others who also give invaluable supports not listed, thank you all, the grant will enable more possibilities for this tiny software.

Please stay tuned by join our mailing list and twitter hash tag #10minuteseveryday!