Skip to main content
added 445 characters in body
Source Link
Rich Sedman
  • 45.2k
  • 2
  • 109
  • 233

Here's my take on this - for what it's worth. This solution is quite similar to Robin Betts' answer but making more use of the other Veronoi properties (the additional 2nd, 3rd, 4th closest cell distances and colours, available at Blender 2.8) in order to avoid having to 'layer' multiple textures and to use the Cell color to hide some of the 'points'.

The nodes used for this are as follows :

material nodes

Note how there are 4 pairs of Voronoi Texture nodes. Each pair has one set to Intensity (to get the distance to the centre of that cell) and the other set to Cell to get its color. Each pair is set to a different cell centre (Closest, 2nd Closest, 3rd Closest, 4th Closest) so as to get the properties of the closest cell (the one the sample point is within) and the three adjacent cells. By combining the Intensities (distances) we can get the minimum distance to any of those cells, and this allows us to effectively have "overlapping" cells since the 'circles' are no longer limited to the edges of the individual cells. The 'Color' of each cell is combined with the 'Distance' so as to be able to randomly offset each cell - so that when we use the Less Than to determine if we're within one of the 'stipples', we effectively "delay" some of the cells from appearing, allowing the density to be adjusted (by changing the input to the Multiply nodes).

The Less Than nodes compares the point from the image with that of the distance to the closest cell (after the random variation based on the cell color has been applied) to grow each cell based on that part of the image.

This can produce the following result :

result

(the band at the top shows the progressive increase in intensity from left to right and how it affects the stippling)

The node tree provides three inputs - the Scale (leftmost 'Value' node) to scale the 'dots'), the "brightness" (centre 'Value' node) to change the brightness of the image (varying the overall dot sizes) and the 'stipple delay' (changing how much the cell 'random' color affects the 'delay' before that particular stipple becomes visible). Vary those three inputs to get the desired effect.

The source image in this case was the followng skull image found from a quick Google search - but you could use any rendered image or use a technique to sample directly from the shader as described in Robin's answer.

source image

Blend file included

For completeness, here's the effect on a rendered Suzanne :

suzanne stippled


EDIT: Here's an example using ShaderToRGB to produce a 'live' shading (rather than from an image). I've also added in a Modulo function to cut the shading into distinct 'bands' similar to your original sample image.

suzanne stippled2

Here's my take on this - for what it's worth. This solution is quite similar to Robin Betts' answer but making more use of the other Veronoi properties (the additional 2nd, 3rd, 4th closest cell distances and colours, available at Blender 2.8) in order to avoid having to 'layer' multiple textures and to use the Cell color to hide some of the 'points'.

The nodes used for this are as follows :

material nodes

Note how there are 4 pairs of Voronoi Texture nodes. Each pair has one set to Intensity (to get the distance to the centre of that cell) and the other set to Cell to get its color. Each pair is set to a different cell centre (Closest, 2nd Closest, 3rd Closest, 4th Closest) so as to get the properties of the closest cell (the one the sample point is within) and the three adjacent cells. By combining the Intensities (distances) we can get the minimum distance to any of those cells, and this allows us to effectively have "overlapping" cells since the 'circles' are no longer limited to the edges of the individual cells. The 'Color' of each cell is combined with the 'Distance' so as to be able to randomly offset each cell - so that when we use the Less Than to determine if we're within one of the 'stipples', we effectively "delay" some of the cells from appearing, allowing the density to be adjusted (by changing the input to the Multiply nodes).

The Less Than nodes compares the point from the image with that of the distance to the closest cell (after the random variation based on the cell color has been applied) to grow each cell based on that part of the image.

This can produce the following result :

result

(the band at the top shows the progressive increase in intensity from left to right and how it affects the stippling)

The node tree provides three inputs - the Scale (leftmost 'Value' node) to scale the 'dots'), the "brightness" (centre 'Value' node) to change the brightness of the image (varying the overall dot sizes) and the 'stipple delay' (changing how much the cell 'random' color affects the 'delay' before that particular stipple becomes visible). Vary those three inputs to get the desired effect.

The source image in this case was the followng skull image found from a quick Google search - but you could use any rendered image or use a technique to sample directly from the shader as described in Robin's answer.

source image

Blend file included

For completeness, here's the effect on a rendered Suzanne :

suzanne stippled

Here's my take on this - for what it's worth. This solution is quite similar to Robin Betts' answer but making more use of the other Veronoi properties (the additional 2nd, 3rd, 4th closest cell distances and colours, available at Blender 2.8) in order to avoid having to 'layer' multiple textures and to use the Cell color to hide some of the 'points'.

The nodes used for this are as follows :

material nodes

Note how there are 4 pairs of Voronoi Texture nodes. Each pair has one set to Intensity (to get the distance to the centre of that cell) and the other set to Cell to get its color. Each pair is set to a different cell centre (Closest, 2nd Closest, 3rd Closest, 4th Closest) so as to get the properties of the closest cell (the one the sample point is within) and the three adjacent cells. By combining the Intensities (distances) we can get the minimum distance to any of those cells, and this allows us to effectively have "overlapping" cells since the 'circles' are no longer limited to the edges of the individual cells. The 'Color' of each cell is combined with the 'Distance' so as to be able to randomly offset each cell - so that when we use the Less Than to determine if we're within one of the 'stipples', we effectively "delay" some of the cells from appearing, allowing the density to be adjusted (by changing the input to the Multiply nodes).

The Less Than nodes compares the point from the image with that of the distance to the closest cell (after the random variation based on the cell color has been applied) to grow each cell based on that part of the image.

This can produce the following result :

result

(the band at the top shows the progressive increase in intensity from left to right and how it affects the stippling)

The node tree provides three inputs - the Scale (leftmost 'Value' node) to scale the 'dots'), the "brightness" (centre 'Value' node) to change the brightness of the image (varying the overall dot sizes) and the 'stipple delay' (changing how much the cell 'random' color affects the 'delay' before that particular stipple becomes visible). Vary those three inputs to get the desired effect.

The source image in this case was the followng skull image found from a quick Google search - but you could use any rendered image or use a technique to sample directly from the shader as described in Robin's answer.

source image

Blend file included

For completeness, here's the effect on a rendered Suzanne :

suzanne stippled


EDIT: Here's an example using ShaderToRGB to produce a 'live' shading (rather than from an image). I've also added in a Modulo function to cut the shading into distinct 'bands' similar to your original sample image.

suzanne stippled2

added 140 characters in body
Source Link
Rich Sedman
  • 45.2k
  • 2
  • 109
  • 233

Here's my take on this - for what it's worth. This solution is quite similar to Robin Betts' answer but making more use of the other Veronoi properties (the additional 2nd, 3rd, 4th closest cell distances and colours, available at Blender 2.8) in order to avoid having to 'layer' multiple textures and to use the Cell color to hide some of the 'points'.

The nodes used for this are as follows :

material nodes

Note how there are 4 pairs of Voronoi Texture nodes. Each pair has one set to Intensity (to get the distance to the centre of that cell) and the other set to Cell to get its color. Each pair is set to a different cell centre (Closest, 2nd Closest, 3rd Closest, 4th Closest) so as to get the properties of the closest cell (the one the sample point is within) and the three adjacent cells. By combining the Intensities (distances) we can get the minimum distance to any of those cells, and this allows us to effectively have "overlapping" cells since the 'circles' are no longer limited to the edges of the individual cells. The 'Color' of each cell is combined with the 'Distance' so as to be able to randomly offset each cell - so that when we use the Less Than to determine if we're within one of the 'stipples', we effectively "delay" some of the cells from appearing, allowing the density to be adjusted (by changing the input to the Multiply nodes).

The Less Than nodes compares the point from the image with that of the distance to the closest cell (after the random variation based on the cell color has been applied) to grow each cell based on that part of the image.

This can produce the following result :

result

(the band at the top shows the progressive increase in intensity from left to right and how it affects the stippling)

The node tree provides three inputs - the Scale (leftmost 'Value' node) to scale the 'dots'), the "brightness" (centre 'Value' node) to change the brightness of the image (varying the overall dot sizes) and the 'stipple delay' (changing how much the cell 'random' color affects the 'delay' before that particular stipple becomes visible). Vary those three inputs to get the desired effect.

The source image in this case was the followng skull image found from a quick Google search - but you could use any rendered image or use a technique to sample directly from the shader as described in Robin's answer.

source image

Blend file included

For completeness, here's the effect on a rendered Suzanne :

suzanne stippled

Here's my take on this - for what it's worth. This solution is quite similar to Robin Betts' answer but making more use of the other Veronoi properties (the additional 2nd, 3rd, 4th closest cell distances and colours, available at Blender 2.8) in order to avoid having to 'layer' multiple textures and to use the Cell color to hide some of the 'points'.

The nodes used for this are as follows :

material nodes

Note how there are 4 pairs of Voronoi Texture nodes. Each pair has one set to Intensity (to get the distance to the centre of that cell) and the other set to Cell to get its color. Each pair is set to a different cell centre (Closest, 2nd Closest, 3rd Closest, 4th Closest) so as to get the properties of the closest cell (the one the sample point is within) and the three adjacent cells. By combining the Intensities (distances) we can get the minimum distance to any of those cells, and this allows us to effectively have "overlapping" cells since the 'circles' are no longer limited to the edges of the individual cells. The 'Color' of each cell is combined with the 'Distance' so as to be able to randomly offset each cell - so that when we use the Less Than to determine if we're within one of the 'stipples', we effectively "delay" some of the cells from appearing, allowing the density to be adjusted (by changing the input to the Multiply nodes).

The Less Than nodes compares the point from the image with that of the distance to the closest cell (after the random variation based on the cell color has been applied) to grow each cell based on that part of the image.

This can produce the following result :

result

(the band at the top shows the progressive increase in intensity from left to right and how it affects the stippling)

The node tree provides three inputs - the Scale (leftmost 'Value' node) to scale the 'dots'), the "brightness" (centre 'Value' node) to change the brightness of the image (varying the overall dot sizes) and the 'stipple delay' (changing how much the cell 'random' color affects the 'delay' before that particular stipple becomes visible). Vary those three inputs to get the desired effect.

The source image in this case was the followng skull image found from a quick Google search - but you could use any rendered image or use a technique to sample directly from the shader as described in Robin's answer.

source image

Blend file included

Here's my take on this - for what it's worth. This solution is quite similar to Robin Betts' answer but making more use of the other Veronoi properties (the additional 2nd, 3rd, 4th closest cell distances and colours, available at Blender 2.8) in order to avoid having to 'layer' multiple textures and to use the Cell color to hide some of the 'points'.

The nodes used for this are as follows :

material nodes

Note how there are 4 pairs of Voronoi Texture nodes. Each pair has one set to Intensity (to get the distance to the centre of that cell) and the other set to Cell to get its color. Each pair is set to a different cell centre (Closest, 2nd Closest, 3rd Closest, 4th Closest) so as to get the properties of the closest cell (the one the sample point is within) and the three adjacent cells. By combining the Intensities (distances) we can get the minimum distance to any of those cells, and this allows us to effectively have "overlapping" cells since the 'circles' are no longer limited to the edges of the individual cells. The 'Color' of each cell is combined with the 'Distance' so as to be able to randomly offset each cell - so that when we use the Less Than to determine if we're within one of the 'stipples', we effectively "delay" some of the cells from appearing, allowing the density to be adjusted (by changing the input to the Multiply nodes).

The Less Than nodes compares the point from the image with that of the distance to the closest cell (after the random variation based on the cell color has been applied) to grow each cell based on that part of the image.

This can produce the following result :

result

(the band at the top shows the progressive increase in intensity from left to right and how it affects the stippling)

The node tree provides three inputs - the Scale (leftmost 'Value' node) to scale the 'dots'), the "brightness" (centre 'Value' node) to change the brightness of the image (varying the overall dot sizes) and the 'stipple delay' (changing how much the cell 'random' color affects the 'delay' before that particular stipple becomes visible). Vary those three inputs to get the desired effect.

The source image in this case was the followng skull image found from a quick Google search - but you could use any rendered image or use a technique to sample directly from the shader as described in Robin's answer.

source image

Blend file included

For completeness, here's the effect on a rendered Suzanne :

suzanne stippled

Source Link
Rich Sedman
  • 45.2k
  • 2
  • 109
  • 233

Here's my take on this - for what it's worth. This solution is quite similar to Robin Betts' answer but making more use of the other Veronoi properties (the additional 2nd, 3rd, 4th closest cell distances and colours, available at Blender 2.8) in order to avoid having to 'layer' multiple textures and to use the Cell color to hide some of the 'points'.

The nodes used for this are as follows :

material nodes

Note how there are 4 pairs of Voronoi Texture nodes. Each pair has one set to Intensity (to get the distance to the centre of that cell) and the other set to Cell to get its color. Each pair is set to a different cell centre (Closest, 2nd Closest, 3rd Closest, 4th Closest) so as to get the properties of the closest cell (the one the sample point is within) and the three adjacent cells. By combining the Intensities (distances) we can get the minimum distance to any of those cells, and this allows us to effectively have "overlapping" cells since the 'circles' are no longer limited to the edges of the individual cells. The 'Color' of each cell is combined with the 'Distance' so as to be able to randomly offset each cell - so that when we use the Less Than to determine if we're within one of the 'stipples', we effectively "delay" some of the cells from appearing, allowing the density to be adjusted (by changing the input to the Multiply nodes).

The Less Than nodes compares the point from the image with that of the distance to the closest cell (after the random variation based on the cell color has been applied) to grow each cell based on that part of the image.

This can produce the following result :

result

(the band at the top shows the progressive increase in intensity from left to right and how it affects the stippling)

The node tree provides three inputs - the Scale (leftmost 'Value' node) to scale the 'dots'), the "brightness" (centre 'Value' node) to change the brightness of the image (varying the overall dot sizes) and the 'stipple delay' (changing how much the cell 'random' color affects the 'delay' before that particular stipple becomes visible). Vary those three inputs to get the desired effect.

The source image in this case was the followng skull image found from a quick Google search - but you could use any rendered image or use a technique to sample directly from the shader as described in Robin's answer.

source image

Blend file included