Kingfisher Quilling

Here a rendered of 3d geometry replicating work from Entagma “PROCEDURAL MODELING: QUILLING 06.11.2017 by Moritz”

  • Primary image of Kingfisher from
  • Points for Voronoi diagram are generated using Kangaroo Circle Packing based on Image from Daniel Piker
  • Voronoi cells are then smoothened and spiral are done like in Houdini Video
  • Paper is thickened via a script I did in order to go fast, it thicken a polyline and extrude it to a mesh.
  • Render in Rhino 6 via Cycle using Grasshopper to color mesh

Here is the script. (821.0 KB)

  1. First find an image. Here the kingfisher is from
    In order to generate the intended circle packing the image is transformed in grey scale. Play with contrast luminosity … For example I used this one and also another.

    In order to work you must find the good number of circles, the good size. Don’t forget to put the toggle to true and click on Button. I add problem with the assemby in the C# script. I add to put the last KangarooSolver.dll link (right click on component and manage assemblies) in order to make it work in Rhino 6. At the end of the script I capture the polygons, here Voronoi in a curve component and I internalize the data.

  2. Now use the color image in order to suppress polygon which have a color near the white. Beware when color is transformed to a point in GH it ranges goes from -1 to 1, not 0 to 254.

  1. The polygons are then smothened

  2. The max circle inscribed in rectangle is searched, it outputs the radius and the center.

  3. Spirals are now made, you can choose the paper thickness and the percentage in length you want for the spiral.

  4. Spiral are then thickened via a script I made in order to limit the number of faces and fasten the script. Offset, loft curves are too slow and too heavy :frowning: You can make paper thinner. You can play with Perlin noise parameters, see examples below with low noise, no noise, low scale and high noise.


Very nice. Great to see the kingfisher implemented like that, and rendered with Raytraced. What was the render time for this, and on what hardware?

I like this one so much, it is now the wallpaper on my phone (:

Wow! :grinning:

Raytraced without baking is cool, it tooks one hour. It seems a bit long, but I am not able to compare with Vray3 as it is not working yet on Rhino 6. It seems also that Cycles didn’t use all the machine power (on purpose of usability I imagine). I saved rimage file but I don’t know if it contains extra informations.
I have that PC

I think it is cool to have a good renderer in Rhino. I am happy with vray but the simple interaction between Cycles/Rhino and Grasshopper is a plus. Good job Nathan.

Render view with -ViewCaptureToClipboard is also good and very fast. Here 2000 passes with 2 types of paper thickness.

1 Like

Ah yes, if you used Cycles for Rhino (CfR) then the Cycles engine won’t be as fast. There is a severe loss of speed using the RenderWindow, but since CfR won’t be in Rhino 6 I won’t just yet look into why.

That said, the Raytraced display mode is the exact same engine, and indeed ViewCaptureToClipboard (and -File), will give about all the power Cycles.can give.

Anyway, awesome work on both the GH definition and the renders. Keep 'em coming! (:

For the first image I used the bue icon _Render. “cycles for Rhino”.
I am not sure to understand everything of your reply. So ViewCaptureToClipboard is also working with the raytraced mode ? I never tested that ! Is there some documentation that gives the pros and cons of different ways of rendering an image in Rhino ?

The blue _Render button that starts CfR uses the exact same Cycles render engine as the view mode Raytraced. With regards to render quality there is no difference between CfR and Raytraced - the exact same engine, the exact same features.

There shouldn’t be a difference between the different ways to render, but CfR is just not working as well as it could. For Rhino 6 you’ll be using the ViewCapture* commands on the Raytraced view you wish to capture. You can specify larger resolution and more samples than the active viewport has, so you can do fast look-dev, then capture at resolution and sample count of your liking.

Hey nathanletwory,

I think I missed something… Rendered view uses Rhino render, Raytraced uses Cycles for Rhino, but CfR won’t be in Rhino? Aaaaand… CfR / Raytraced uses GPU for rendering?

Thank you…

As far as I understand:


No, Raytraced uses the Cycles render engine.
And CfR also uses the Cycles render engine.

Not in Rhino 6, no. But it will continue to be in WIPs - for Rhino 7.

It can. But you can also set it to use the CPU. See Rhino Options > Cycles > Device Settings.

1 Like

Hi @laurent_delrieu Thanks for sharing. Is it possible to have a rhino 5 version to share?

no it is not possible, some rework necessary with Kangaroo. Perphas Kangaroo 2 work on Rhino 5.
Here a big image of the definition.

The definition, I suppressed relay (all ??). For the multiplication you will have to search. (820.6 KB)


Hi @laurent_delrieu Thanks for sharing. I am trying to work with it on rh5.

but the import image component that converts color image to meshes causes the whole program collapsing, once which the image path has been synchronized. I wonder if this causes by the limitation of rh5, or I need to do some settings with the import image component. (817.4 KB)

By default this component is making a mesh with a number of vertices same as the number of pixels. So if you input a big image it could lead to big mesh. Put Xand y at 200 or 300 for example.

Hi @laurent_delrieu Thanks for your reply. It seem more likely the crash coming from the Mesh Eval component. Is there any other way the similar thing by using different component? (1.0 MB)

There was a bug with mesh eval when there are no normals on mesh. So you have put normals on mesh.
I thought this was updated. Do you have the last version ?

I am using rh 5 RS 13 and grasshopper I don’t have rh 6.

Hi @laurent_delrieu Thanks for your suggestion. The Mesh Eval basically works now by adding deconstructing and constructing mesh component before it. But how to separate the spirals inside the Kingfisher. (998.9 KB)

The suppress “Suppress white polygons” is doing that but you must put an image with white parts. You will see {1,1,1} it is the white in 3d space. Grasshopper converts color to {-1,-1,-1} {1,1,1} cube. So I just filter colors by distance here.
You must link your Voronoi to the curve input

Depending on you color of backgroung, you will have to play with the color (not white here but grey) and distance

It still works,

You have to learn how to navigate in a definition and look what is working or not, if all geometry is at the good place …
Use that

Hi @laurent_delrieu

Thanks for your suggestion and tutorial. It really seems that the mesh eval does not work properly, which can not give the color value. I am just trying to solve this with converting to xyz - coordinate and extract the meshes manually. But in terms of the color, how can I get an average color value amount those colored vertexes in the poly mesh? (1002.1 KB)
the images I use
kingfisher_690x459 kingfisher_690x459Color

1 Like

In order to palliate the mesh eval bug in Rh5, you could use that to have a color on a mesh.

The trick is to use the index of closest point, index is used to access the mesh vertex color.
color on (5.3 KB)