Distribute many objects to a surface?



I am playing around with the new octane plugin for rhino, right now I try to generate grass covered surfaces.

Is there a way to distribute a large quantity of objects (->placeholder for grass leaves) over a user defined surface? I tried simple grasshopper script but the computer does not seem to handle this amount of data ( I need approximately 6400 Elements / 1sm for an area of 300 sm)

has anyone an Idea how such a thing could be archived ?

  • the ultimate goals would be the possibility to directly process a csv file, which could then be used in the octane plugin…

see also here:

thank you for any feedback


(Brian James) #2

Cool… I didn’t know the Octane plugin supported proxies! Do you have an obj and the scatter csv you’re using that you can post here? @andy has been helping the Octane plugin developer Paul K. with integration stuff in Rhino 5 too. There may be something Andy can add here too but if you can post the exact files you’re using I can try and help more. Otherwise, I’ll have to figure out how to make a csv scatter file first :wink:


Hello Brian,

yes octane can assign an .obj file to a rhino block, which can then be used as a proxy object. I have successfully used this method in conjunction with a 1mX1m grass plane consisting of 6400 grass elements (3 leaves polar arrayed). The objects were arrayed and then modified randomly with the harmonize script written by Thomas Anagnostou, to create a natural diversity.


Once generated the grass plane was saved as obj file and then reassigned to a simple rhino block like a 1x1 plane. This plane was copied as desired.

While i generated some nice test pictures, this method is not working very good for real projects…

  1. due to the fixed size of 1mX1m it is not possible to work out smaller structures.
  2. even though the results were better than expected some tiling and related optical artefacts still occur
  3. right now the results appear too “perfect” especially when looking from far distances, so ideally the “new” method would have the possibility to generate variations not only on an object level (scale, rotate, displace) but also the possibility to generate variances on a bigger level. This could be archived by distributing e.g. 4 different colored blocks which could be used with different procentual numbers for different “zones” inside the area to be covered. The zones could be defined by certain mathematical algorithms to form different shaped appearances.

here is a link to a little grass set to play with:

The challenge: distribute the single grass element over the testarea.3dm file with a density of 6400 elements / sm… :wink:

another very interesting script by cam newnham:


this script has already a high potential, however the csv output does not work in conjunction with octane4rhino, the user defined area is not filled 100% precisely and it seems to be too slow to generate these huge amounts of data.

best regards



Here are some pictures I made with the 1mX1m plane approach.

While the grass looks quite OK in the first picture, it looks quite flat and to “perfect” in the second one, this is due to the tiling of the planes and the absence of wide scale variance.


best regards




Some info that may help. 2 of the other Octane plugins I have developed contained “scatter/transform generators” which generated a user specified number of random transforms (up to 100,000) onto a user specified geometry item. There is also an option for the transform to follow the normal of the geometry (essential for a 1x grass obj if it is on a hill). The scatter generator is pretty basic and was not included in OctaneRender for Rhino because Rhino should be able to do this function vastly better. There is also the PhantomScatter solution which will take an OBJ and generate Octane compatible transforms on it, which can then be imported into OctaneRender for Rhino.

So for your grass object, perhaps try more instances of a smaller grass prop. And include a small amount of scale, rotation and position randomness in the scale X/Y/Z axes. If you are a python coder, I’d be happy to send you the code (for anther host app) which could be modified to do this (it contains all the maths to rotation the transform by the surface normal).



This script is excellent, although it is scattering inside Rhino to Rhino block instances, which has the overhead of creating the Rhino block instance for each transform. IMO a more effective way of doing this would be to modify the script so instead of create a block instance for each transform, it simply exports the transform to CSV. Then you can load that CSV file into the plugin.

EDIT: I see there is an option to print the transforms. Would be great if these were in CSV format, not displayed to the Rhino commmand window, and instead written to a file, and the Rhino block instances were not created.