Go to file
Jeremy Hu 37e1cf2ca7 Fix bmesh vertex hash of subdivision. 2017-01-04 22:45:01 +09:30
build Update progress. 2017-01-02 12:03:54 +09:30
data Fix elbow rotation. 2016-12-27 07:51:25 +09:30
screenshot Fix bmesh vertex hash of subdivision. 2017-01-04 22:45:01 +09:30
src Fix bmesh vertex hash of subdivision. 2017-01-04 22:45:01 +09:30
.gitignore Add Jon Leech's method to draw shpere 2016-12-16 22:15:11 +09:30
README.md Fix bmesh vertex hash of subdivision. 2017-01-04 22:45:01 +09:30

README.md

Dust3D

Dust3D is aim to be a quick modeling tool for game development. Currently the development is in the very early stage.
Please join the discussion reddit/r/gamedev

Idea

I was inspired by Jimmy Gunawan's blogs of monster generation, here is the first one INSPIRATION / Pixar Monster Factory Part One, and by search the Skin Modifier of Blender, I found the theory of Skin Modifier:
B-Mesh: A Fast Modeling System for Base Meshes of 3D Articulated Shapes(Authors: Zhongping Ji, Ligang Liu, Yigang Wang). I started to think of monster model generation for game development from years ago, thanks for this paper, Dust3D is achievable now.
From my initial thought, Dust3D should be a tool like Makehuman, with more versatile features, not only can make human, but also be able to generate monsters automatically.

Build

Generate Xcode Project

$ cd build
$ qmake -spec macx-xcode

Generate Makefile

$ cd build
$ qmake
$ make

TODO & Progress

  • Drawing Primitives (Dec 15, 2016 ~ Dec 17, 2016)
    Sphere
    I don't want the whole project have any unnecessary dependent, like glu library. Let's start with drawing a sphere without gluSphere, because I want implement the same spheres which presented in the B-Mesh paper.
    Cylinder
    Two caps and many strips composites a cylinder.
    Infinite Grid
    Almost all 3D editor have a infinite grid ground, I just made a finite one, in the future, I should expand the grid outside of the screen to make it infinite.
    Now, for just beginning, I think it's a not bad start.
  • Implement B-Mesh algorithm (Dec 18, 2016 ~ Jan 04, 2017)
    There is a implementation of B-Mesh algorithm in C++ language, but I want the pure C version, so I start to implement my own version. I read both paper and this implementation, it gave me very helpful understanding of this algorithm.
    Drawing Skeletal Shape Balls
    Draw shape ball is easy, no need to rotate, I just need scale it along the ball's radius. Draw the cylinder which connects two shape balls is more difficult, I need do some math to rotate it. Here described it.
    Camera Control
    Camera rotate/zoom implemented, here is a good article which explained the theory of OpenGL Transformation. Most important is that the demo app is very beautiful.
    Added x,z axis, looks better than last screenshot.
    I have to use the GLU library, the previous implementation of drawSphere and drawCylinder looks not good, and take too much time to debug.

    B-Mesh data struct
    I created the test nodes's geometry information from Blender. Here is the render result of data/bmesh_test_1.h

    Generate Inbetween Nodes

    Generate Mesh

    When I am implementing the B-Mesh algorithm, I am also think in the future, how to create a library of bunch of initial base models. There is a paper the Skeleton of a Closed 3D Shape described how to generate skeleton from mesh, this is the reverse progress of what I am doing, I think it can resolve the problem of insufficient initial base models, I can generate from tons of existed models.
    Convex Hull
    After finish the rotation at the two connected bones, I need implement 3D Convex Hull algorithm at the joint ball, there are so many methods to get the convex hull, I found the Gift wrapping is the most strait-forward one, though is not the most efficient one.
    There is a good implementation of Gift Wrapping algorithm written in lua language. When I was implementing, I first translated this version to C language, but maybe there are some bugs on my own translation, there are lots of repeated faces, so changed a little, the code now is not just the translation of the original lua version.

    Stitching
    I follow the B-Mesh paper, made another test module inside Blender, and created a correspond data/bmesh_test_2.h manually.

    Catmull-Clark Subdivision

    There is a implementation of Catmull-Clark Subdivision algorithm on rosettacode, the code is very simple and beautiful, just lack of some memory alloc fail check. I translated the algorithm to use my own array implementation.
    Now, the render result looks not bad after 2 times of subdivisions. I would like to mark this todo as done, though there are more polish steps on the original paper, I just leave it as to be done in the future.
  • Export Wavefront .obj
  • Render B-Mesh result
    This todo already done in the B-Mesh algorithm implementation.
  • Design UI for monster parts configuration
  • Test B-Mesh realtime generation with UI
  • Render rigid animation
  • png exporter for isometric 2.5D game
  • Version 0.01 release
  • Materials merge of different parts
  • Implement the Skeleton of a Closed 3D Shape