Meet Isopod!
A new set of tools for implicit surfaces.
Available now through the package manager for Grasshopper in Rhino 8.
Example files and more details to follow…
Meet Isopod!
A new set of tools for implicit surfaces.
Available now through the package manager for Grasshopper in Rhino 8.
Example files and more details to follow…
A few initial notes:
Most of the components should show up under their own ‘Isopod’ tab in Grasshopper, but it will also add one component under Kangaroo2 - an OnIsosurf goal. This lets you pull points onto any Isopod defined isosurface without having to mesh it first.
There are 2 meshing components. For most general use I recommend using IsoMesh2, with the green bug icon. This should always produce valid closed meshes (provided the isosurface falls within the given box volume - if it extends outside it you will get open edges).
The method in IsoMesh1 can be faster and gives nice triangle quality (and also has an Octree option to cut down on evaluations of empty space), but currently lacks the guarantee of manifold output. Both are dual based methods of my own invention, multi-threaded and with root finding for exact placement of the vertices.
The resolution input value you set determines the number of grid divisions along the shortest side of the given box. Increase this cautiously - if you set it to a high value with a complex input field you could be stuck waiting a while.
There is also a separate RootFind component which, if given a line with one end inside the volume and the other outside, will find where along the line the intersection with the isosurface lies. This can be useful for directly wrapping the points of a mesh(and potentially even SubD or surface) of predetermined topology onto the isosurface, which will be much faster than evaluating on the full volumetric grid, but of course this only works if you already know the topology.
Many of the field components have inputs which accept an input that can be either a number or another field. For example, here the radius of each torus on the top row has a simple number as radius input, while for those on the bottom row the radius is determined by a sphere field
As well as the scalar field type, this plugin also includes some tools for complex valued(with a real and imaginary part) fields, and fields which return an array of doubles (useful for weightings). More on all this to come…
Looks awesome. Are there any example files to help new users get started?
I’m still putting together a full collection of examples, but here are a few very basic ones for starters:
(Install Isopod from the Rhino PackageManager command before trying these definitions)
primitives_and_booleans.gh (29.9 KB)
offset.gh (83.2 KB)
shelling.gh (92.2 KB)
TPMS.gh (20.4 KB)
field_display.gh (31.1 KB)
cut_mesh_with_field.gh (18.2 KB)
kangaroo_pull_to_isosurf.gh (20.3 KB)
root_find_wrap.gh (14.3 KB)
Here something a little more involved showing how we can create paraboloids with given curvatures, then use inverse distance weighting to blend them into an interpolating surface:
and here computing a solid angle surface for a knot:
solid_angle.gh (19.5 KB)
Thanks Daniel! Awesome stuff as always!
Here showing how you can create your own fields with the script component:
(in this example the field is the Clebsch diagonal cubic)
Also note that you can see the code inside nearly all of the included field components by simply double clicking them. Hopefully these are helpful as starting points for writing your own.
Using the difference between two groups of point potentials to make a smooth separating surface between a pair of curve networks:
point_potentials.gh (28.7 KB)
This looks AWESOME!!!
Can I ask… a lot of the components are C# scripts. Why not just make them components that can be selected from a menu?
Thanks,
Yes, most of the fields are currently UserObjects containing scripts. This isn’t a fixed decision going forward though - I may switch them to compiled components instead. I’m interested to hear people’s preferences.
One advantage of user objects is that you can very quickly look inside and modify the code (though of course I can still share a repository of code examples if I make them all compiled, like with Kangaroo Goals).
Are there any particular disadvantages you find to user objects? They should all be showing up with icons in the Isopod tab, and be searchable via the usual canvas double-click.
My Isopod tab looks like this…
I opened one of the example files and used the package manager to install missing plugins. Was this the wrong way to do it?
Ah, can you try opening PackageManager from the Rhino command, then Uninstall and Reinstall Isopod?
Nooo way, what’s this???
New amazing stuff to learn!!!
Thanks Daniel for pushing the boundaries further every time.
Hi Daniel,
VERY keen to get started on this today - looks like an amazing set of tools!
Have downloaded using the package manager, but I get this error when opening the first example:
Anything I can do to fix this?
Cheers
DK
Thanks for reporting this. Can I ask which platform and version you are on?
It looks like the components are all loading, so I’m guessing it’s maybe not finding the assembly reference correctly (this should all be automatic now and you shouldn’t have to set assembly locations yourself any more, but maybe something’s going wrong here).
Hi Daniel,
Rhino 8/Windows 10.
The Isopod.gha is in the correct folder:
C:\Users\David Kay\AppData\Roaming\McNeel\Rhinoceros\packages\8.0\Isopod\1.0.4.1
And is not blocked - can I manually add the gha/dll reference somewhere to get started?
Cheers
DK
Which exact version? (in Rhino type SystemInfo and paste just the first line of the result here)
If it isn’t just a matter of installing the latest service release, let’s try this:
Double click one of the Field components
Right at the top expand the >#region usings
section and delete line 3 where it says:
#r "Isopod.dll"
and replace it with:
#r "C:\Users\David Kay\AppData\Roaming\McNeel\Rhinoceros\packages\8.0\1.0.4.1\Isopod.dll"
That worked, thanks!