Greetings from a 3D printing newcomer

Discussion in 'Newcomers Lounge' started by pendarestan, May 13, 2015.

  1. pendarestan
    pendarestan Well-Known Member
    Hello everyone!

    I like to create models seeking beautiful, captivating, fascinating forms. Sometimes. Other times it's kind of just because. How successful I am is, of course, up to beholders like you.

    3D printing lets me make real objects for the enjoyment of others. My interests lie both in traditional designs and in computed structures.

    For the past month or so, I've been adding pieces to my shop. Here are a few examples. In the inspired by traditional aesthetics department, this is my 3D arabesque lattice:

    [​IMG]

    And in the computational department, these are a novel minimal surface and a wave function from two particles colliding:

    [​IMG]
    [​IMG]

    I use Blender and some of my own tools for computation.

    So far I've printed several models with no failures. Shapeways' 3D tools are great for ensuring printability.

    Please do check back at my shop, I'll continue adding to it. Nice to meet you all!
     
  2. shawn_halayka
    shawn_halayka Well-Known Member
    Looking good. What's your programming language of choice?
     
    Last edited: May 13, 2015
  3. pendarestan
    pendarestan Well-Known Member
    Thanks. :) I prefer Python with the occasional C/C++ when necessary.

    Like you, I could really use a better isosurface algorithm.
     
  4. shawn_halayka
    shawn_halayka Well-Known Member
    Last edited: May 14, 2015
  5. shawn_halayka
    shawn_halayka Well-Known Member
    I attached some isosurface finding algorithm papers. All look pretty cool, but hard to implement. Which ones have you been looking at?
     

    Attached Files:

    Last edited: May 14, 2015
  6. pendarestan
    pendarestan Well-Known Member
    I just use skimage's implementation of Marching Cubes.

    Thanks for the papers. Dual Marching Cubes' output in Figure 1 makes me think that the algorithm will use larger polygons where possible, but Figure 6 suggests otherwise. Maybe it only works well with axis-aligned geometry because of the octree. I've looked at that and some others I don't remember. I've never implemented them for the same reason.

    You might know this already, but a Surface Nets implementation in JavaScript is available at https://github.com/mikolalysenko/surface-nets and it looks surprisingly simple. It could be worth translating into Python.
     
  7. shawn_halayka
    shawn_halayka Well-Known Member
    I forgot to mention that if you don't want to use a custom vertex interpolation method you can always do super sampling to get the 3D equivalent of anti-aliasing. It generates better looking meshes with roughly the same number of triangles. For the example below, I used the 3D version of the quincunx pattern (ninecunx?) to do the sampling, so it's not the best -- using many more than nine sample points should produce even better results.

    No anti-aliasing:
    no-antialiasing.png

    Ninecunx anti-aliasing:
    antialiasing.png
     
    Last edited: May 19, 2015
  8. pendarestan
    pendarestan Well-Known Member
    That does look a lot better. I'm afraid I'm not familiar enough with Marching Cubes to know where one would change interpolation or supersample, but thanks for kindly offering your expertise. Maybe I'll get into it more in the future.

    You've probably already thought of this, but if you find that you're taking too much time trying to convince your isosurface method to produce acceptable output or it takes too much compute time, you might try the various smoothing methods in MeshLab. Your models already look quite detailed. :)
     
  9. shawn_halayka
    shawn_halayka Well-Known Member
    If you upload one of your Python programs that uses the skimage Marching Cubes I can see if I can add in the antialiasing.

    I have implemented some mesh smoothing algorithms (Laplacian, and Taubin which is two Lapacian passes, both with several different weighting schemes -- I found them in Geometric Signal Processing on Polygonal Meshes by G. Taubin) myself, but the main goal for me is to get as close to the shape of the fractals as possible, and smoothing does away with that. Don't get me wrong, the smoothing methods do produce nice results, but there's a lack of fidelity that comes automatically with those algorithms.

    One thing I noticed about the many different Marching Cubes implementations is that the resulting mesh is full of cracks that become holes after a smoothing operation is performed on them. Do the meshes generated by skimage suffer from this problem? I worked around this problem by sorting the two vertices (by overloading the less than operator) that go into the linear interpolation function before I perform the linear interpolation calculation.

    Generally I don't worry about execution length in my app -- both the iterative function and the vertex interpolation are running off of the GPU, which is easily one or two orders of magnitude faster than the CPU-only version.
     
    Last edited: May 20, 2015
  10. pendarestan
    pendarestan Well-Known Member
    Yes, skimage's implementation produces meshes with holes. MeshLab has functionality for finding non-manifold geometry and filling holes (try "Filters > Cleaning and Repairing > Select non Manifold Vertices," delete, and "Filters > Remeshing, Simplification and Reconstruction > Close Holes"). Then do smoothing (I think both methods you mention are available in MeshLab as well if you like GUIs).

    I understand the desire to have a sharp mesh. Noise and smoothing both reduce resolution. On the bright side, less problematic editing for printability.
     
  11. shawn_halayka
    shawn_halayka Well-Known Member
    Thanks for the tip re: MeshLab and hole fixing. I'll have to fiddle around with it a bit more. :)