IE Point Cloud For Substance Designer

This is my take on bringing points arrays to SD. It's clumsy and extremely hacky but it's here and it can be useful.
Download: https://github.com/igor-elovikov/sd-ie-lib

Currently the main use case is generating a non-overlapping distributions. However this framework can be used in more general approach and in future there will be ability to create custom operators.

There are currently 20 nodes to create and modify point clouds.

There are currently 20 nodes to create and modify point clouds.

Point Cloud is just a C32F texture where point occupies 2 pixels to store position and 4 custom attributes.
Last pixel in texture is reserved so total texture capacity is width * height / 2 - 1 (eg 127 points for 32x32 texture or 131,071 for 512x512)

Point Cloud is just a C32F texture where point occupies 2 pixels to store position and 4 custom attributes.
Last pixel in texture is reserved so total texture capacity is width * height / 2 - 1 (eg 127 points for 32x32 texture or 131,071 for 512x512)

Working with points as data sets has many advantages (Houdini users know that very well).
It's just a much modular approach and actually can be much faster if you utilize Pixel Processor to modify points (though it's not possible for every case)

Working with points as data sets has many advantages (Houdini users know that very well).
It's just a much modular approach and actually can be much faster if you utilize Pixel Processor to modify points (though it's not possible for every case)

The biggest advantage is ability to use comparison-based operations. For example you can calculate distance to closest neighbor for every point. If you use this value as a size you have non-overlapped points for any given distribution.

The biggest advantage is ability to use comparison-based operations. For example you can calculate distance to closest neighbor for every point. If you use this value as a size you have non-overlapped points for any given distribution.

However pure randomness is not very natural. Luckily with these nodes we can easily create poisson distribution using PixelPie approach (https://www.cs.umd.edu/gvil/projects/pixelpie.shtml))

Above is the implementation for one iteration of algorithm.

However pure randomness is not very natural. Luckily with these nodes we can easily create poisson distribution using PixelPie approach (https://www.cs.umd.edu/gvil/projects/pixelpie.shtml))

Above is the implementation for one iteration of algorithm.

Just two iterations can produce very dense poisson distribution.

Just two iterations can produce very dense poisson distribution.

There is more. The most powerful tool is "Relax" node. With this you basically scatter bunch of points not thinking much about overlapping and then resolve all collisions.

There is more. The most powerful tool is "Relax" node. With this you basically scatter bunch of points not thinking much about overlapping and then resolve all collisions.

Unfortunately this thing is where implementation overhead hits really hard. This one is not cheap but it's manageable if amount of point is not crazy.

Unfortunately this thing is where implementation overhead hits really hard. This one is not cheap but it's manageable if amount of point is not crazy.

You can work on several sets and then combine it with logic you want to produce non-overlapping result.

You can work on several sets and then combine it with logic you want to produce non-overlapping result.

And finally, of course you have a node to place stuff on points positions. It's just like a simplified Tile Sampler with some additional functionality to extract attributes and apply them to parameters.

And finally, of course you have a node to place stuff on points positions. It's just like a simplified Tile Sampler with some additional functionality to extract attributes and apply them to parameters.