mkeeter / fidget

blazing fast implicit surface evaluation
Mozilla Public License 2.0
123 stars 9 forks source link

Meshing when? :D #5

Closed lf94 closed 1 year ago

lf94 commented 1 year ago

I would love to also create node bindings for fidget. Especially since the JIT render time is incredible! I do need meshing though to incentivize me for my 3D printing shenanigans...!

What's cool is I'll be able to easily re-use my libfive wrapper and should be able to swap between either very easily...

mkeeter commented 1 year ago

We'll see!

I soured on meshing algorithms because nothing in the literature was quite good enough, but now have a rough sketch of something that may meet my high standards; no promises on when it will be implemented, though.

lf94 commented 1 year ago

Nice. Do you have a recommendation on what can be done in the interim? Could fidget output something to be meshed by another program? (for what it's worth I find it crazy that there's not some general mesher-for-shaders as a standalone program!) Could be an opportunity for me to familiarize myself with dual contouring.

mkeeter commented 1 year ago

Doing a very cursory search, you may be able to stitch Fidget's evaluator types into isosurface's meshing algorithms, via the Source and HermiteSource traits.

This probably isn't something that I'd want in the Fidget crate itself, since I'm picky enough about meshing to implement it myself, but could get you meshes in the interim.

Alternatively, there's a transvoxel crate with a similar ScalarField trait.

(no idea about the quality of these options, this was just what I found when searching for "Rust marching cubes")

lf94 commented 1 year ago

Added initial meshing support in the fidget::mesh module, gated by the mesh feature (enabled by default).

angel choir

mkeeter commented 1 year ago

A first pass meshing implementation is now done and released in 0.1.4.

It's far from complete, but it should generate topologically manifold meshes with decent-ish sharp feature behavior.

It always runs on the [-1, +1] box, so transform your models beforehand!

lf94 commented 1 year ago

Excellent :sunglasses: Amazing and incredible work as always. I'll work on fidget bindings in the coming weeks and I can do mesh -> stl in JS land. I sort of wish now I didn't do bindings to libfive-stdlib, because fidget doesn't have the same stdlib :'). I should've re-implemented the stdlib using libfive op codes in JS. Anyway, I digress. Onward!