Show HN: Visual diff for 3D printable models
cubehero.com
cubehero.com
Right now, it's a pre-populated demo of a robokitty (because the internet needs more cats). But soon, you'll be able to push to your own repos using git.
Let me know if you have some feedback. Thanks!
Being able to continue inspecting the model in the same position it was before loading another version would be nice as well.
While git does calculate textual diffs, it does not calculate visual diffs of 3D models, which is what I've managed to do here.
- You actually have at least four diff states you need to visualize, it's like a matrix. One axis is boolean operations (add, sub etc) the other axis is difference between revisions. For example it's hard to see form the diff if material was added or removed between revisions. You can naturally just highlight where things changed but it's a trade off you need to consider carefully and probably sketch out the most common use cases.
- I thought for a long while that transparency is an easy way to solve problems like showing diffs. My more graphics savvy co-founder managed to convince me that transparency is usually not a good solution. When you have a transparent surface on top of another surface it feels like you can suddenly get more information on the screen. However, this is obviously not true, you still have 24 bits of color information on the screen however you slice it. What is happening is that you have divided your bits between the front surface and anything behind it. Our experience is that users have a very hard to grasping even basic 3D shapes on a 2D monitor, making it harder using transparency is usually not beneficial.
- If you want to do transparency right you need to do something about the render order, I noticed you are rendering the transparent surfaces in a fixed order.
If you haven't checked it out already take a look at our project Tinkercad at http://tinkercad.com. Even if the UI uses a direct manipulation paradigm the underlying operations tree is isomorphic with OpenSCAD.
I checked out your snow globe and the augmented reality stuff you're doing in open hardware. Pretty neat!
Maybe that's in there, but I didn't spot it.
Signed up!
In addition, someone else mentioned that I can probably just send the diffs, rather than the whole model.
this has the advantage of requiring little processing on the server and, on the client, you can use a generic renderer. i imagine calculating actual 3d diffs is quite complex (and so cpu expensive).
the diffs that are being suggested to reduce file size are, i think, just textual diffs on the source. they won't have valid syntax as graphical deltas in their own right.
someone please correct if wrong, just guessing here...
Or were you thinking of something else wrt to semantic diffs?
The message conveyed by the second is not entirely the same as the message conveyed by the first. The second might complement the first, but if it's really about complementing then the committer would ideally craft the second's message to communicate meaning just as he crafts the message in the first..
I had started off doing the diff on the client, and then I realized that in order to support the various different types of file formats, I'd have to implement parsers for every one in javascript. So I moved things to the server, and just send the results to the client to render.
Side question: what I'm seeing appears to be a wire frame model with flat shading of a model with very few vertices. I know nothing of the STL format. The only time I've dealt with it in the past was having an ME send me models of parts when doing circuit board design work. To get to the point, why on earth is it so large? 10MB is a lot of data for what I would assume would be some polygon vertex coordinates and some texture instructions(which should be minimal given this is flat shaded).
The reason why I didn't futz around with it too much is that I'm still working out whether HNers and 3D modelers would find it useful to version control 3d printable models.
I could spend a long time optimizing transfer times of models, but it'd be a pity if no one wanted to use it in the first place.
Looking forward to seeing OpenSCAD and STL diffs together on the same page - that'd be a powerful OpenSCAD learning tool as well as a good change-management / collaboration tool.
Definitely cool to see where this goes - I've been wanting "GitHub + Thingiverse" for a while.
However, just a GitHub-style +/- diff view on the OpenSCAD files next to the STL diff view would be awesome (basically like the GitHub commit-range/pull-request "files" view, but with STL support).
Well, there's always openjscad. I don't think it was a direct port, though.
Unfortunately, OpenJsCad doesn't seem to have a high rate of adoption among 3D printing modelers...at least not yet.
Also there's a few suggestions to just send the diffs after the initial model which is a really good idea.