Console #165 - An Interview with Jeremy of Dust3D a cross-platform 3D modeling software
Featuring Dendron, Hurl, and Dust3D
This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at firstname.lastname@example.org
Browse through open source projects on OpenSourceHub.io, add your project to get more exposure and connect with other maintainers and contributors!
The personal knowledge management (PKM) tool that grows as you do! Dendron is an open-source, local-first, markdown-based, note-taking tool.
Hurl is a command line tool that runs HTTP requests defined in a simple plain text format. Hurl is very versatile: it can be used for both fetching data and testing HTTP sessions.
Dust3D is a cross-platform 3D modeling software that makes it easy to create low poly 3D models for video games, 3D printing, and more.
Join thousands of other open-source enthusiasts and developers in the Open Source Hub Discord server to continue the discussion on the projects in this week's email!
Hey Jeremy! Thanks for joining us! Let's start with your background.
I am living in Sydney and had spent a couple of years in the Northern Territory of Australia, where the Dust3D project started. I have been interested in programming since I was a child. My father got me a toy learning machine that was like a keyboard, but surprisingly supported a programming language called G-BASIC. It was quite limited, as I remember, it could only store 100 lines of code. But that's how I got introduced to the programming world. I studied physics in university and had one course related to programming, which was C language programming. It's still one of my favorite languages. The other one is Lua.
What is your favorite software tool?
Notepad++, although I haven't been using it for a while because Visual Studio Code has become my daily job tool.
What are you currently learning?
I have been following the underlying technology behind ChatGPT. Maybe in the near future, we won't need a modeling tool. That's both good news and bad news for me. For example, if we can generate whatever models without using 3D modeling software, that's the best news for indie game developers, but obviously bad news for Dust3D.
Why was Dust3D started?
I started this software because I wanted to make a game. Given that there are lots of resources needed for a game, it was impossible for me to model everything in a normal 3D modeling software within a reasonable time.
How does Dust3D work? Could you provide a small behind-the-scenes technical overview?
You take two pictures, one front view and one side view, and draw tube-shaped connected nodes on the canvas according to the reference images for all the parts. That's basically it. Dust3D simplifies the process of setup and performs the mesh processing like generating and combining in the background.
Why did you pick C++?
If you pick Qt as a UI framework, then most likely you will pick C++. I did some experiments with the Rust language as well at the beginning. It's quite good; however, writing in Rust is not as smooth as writing in C++. And Qt was the only practical cross-platform UI choice back at that time.
Where did the name Dust3D come from?
I like minimal library names. For example, "tinyblabla," and "dust" is very tiny.
Who or what was the biggest inspiration for Dust3D?
I read a blog post about how to combine parts to make models using Blender from Jimmy Gunawan. I had the thought of making Dust3D before that, but reading his blog post was a turning point that made me really start it. The blog post is here: [INSPIRATION / Pixar Monster Factory Part One] http://blendersushi.blogspot.com.au/2013/06/inspiration-pixar-monster-factory-part.html
Are there any overarching goals of Dust3D that drive design or implementation? If so, what trade-offs have been made in Dust3D as a consequence of these goals?
The goal is always for indie developers to make all game resources in one place without using other tools. This goal hasn't changed. However, modeling, texturing, UV mapping, rigging, and animation are not easy tasks for me. So the goal is too big for me to finish this software using my leisure time. I would say the modeling, texturing, and UV mapping have kind of achieved what I initially planned. The others still have tons of work to do.
Which one are you going to work on next? Any plans?
Rigging and animating, I have tried many ways to implement them in previous released versions, however, still don’t feel it reached my initial expectations. So in the recent release, I removed them from code base, only keep the features I think it’s useful. The plan is keep exploring new ideas until it’s ready to do an implementation.
What is the most challenging problem that has been solved in Dust3D so far? Could you provide some code links?
The most challenging problem solved is real-time mesh boolean. This was done using CGAL, and now it has been rewritten from scratch and works well without crashing. You can find the code here: https://github.com/huxingyi/dust3d/blob/1.0.0-rc.7/dust3d/mesh/solid_mesh_boolean_operation.cc
What sets Dust3D apart from other 3D modeling software available on the market?
It's tiny, made for indie developers.
What is your typical approach to debugging issues filed in the Dust3D repo?
I get many inspirations when I receive feedback from users. When users report some issues, I find out how they are modeling, and if it shouldn't happen, I make changes. For example, in the first couple of versions of Dust3D, the UI allowed one node to have more than 3 neighboring nodes. When I made a model, I knew how to place the node so that the algorithm could get a better result. But users may not be aware of the internal algorithm, so the result was very bad. I got the idea from a user-provided example file. What if we only allow one node to have 2 neighboring nodes? The problem just goes away, and every part becomes a tube shape. This is the good side. There is another side when you receive a report, for example, the UI is a black screen, and you don't have the specific graphic card that the user is using. It's impossible to fix it, and that's frustrating.
What is the release process like for Dust3D?
In recent years, I have been quite busy with my daily job, so there haven't been many updates. But I will release new versions once major features have been implemented. Also, the GitHub pipeline script for Dust3D has been recently updated, so making a new release should be pretty easy if features are implemented.
Is Dust3D intended to eventually be monetized if it isn't already? If so, how? If it's already monetized, what is your main source of revenue?
There is no plan for that. So far, the big support is from Epic MegaGrants.
What are Epic MegaGrants and how did it help your project?
It’s a program established by Epic Games to provide financial grants to creative and innovative projects which uses Unreal Engine or open sourced. Dust3D was lucky got grant from this program. Like other sponsors for Dust3D, I always feel grateful to them, they keep me motivated.
What is the best way for a new developer to contribute to Dust3D?
There is no best way. If you see things that need to be fixed, make sure you test them locally and then raise a merge request. This applies to all projects.
Where do you see the project heading next?
I am hoping I can work out the remaining difficult issues. If there are no major breakthroughs, I will just keep it quiet.
What motivates you to continue contributing to Dust3D?
The problem, which is making all indie game resources needed in one place, is what I really want to solve.
Where do you see software development heading next?
ChatGPT will become a daily tool, just like Google search and Stack Overflow. Developers may spend more time on thoughts instead of actual coding. Most of the coding part will be replaced with auto-generating in the near future.
Where do you see open-source heading next?
All creative workers would like to share their work unless it's not permitted by the employer or due to other reasons. So sharing is the core. However, the platform may evolve. I don't see much changing in the future.
Do you have any suggestions for someone trying to make their first contribution to an open-source project?
Try to use open-source software or libraries. You will find issues when you use them, and it's a good chance for you to contribute a merge request. I have made many trivial merge requests, fixing some crashes in my most-used software and libraries. It's the best thing to show your future employer.
Want to join the conversation about one of the projects featured this week? Drop a comment, or see what others are saying!