Wednesday, July 14, 2010

procedural feather

the beginnings of a procedural feather generator

stuff I've though about so far:
proxy / hi res toggle - currently the 'fronds'can be turned off but ideally it'd be nice to have a few polygons with the render UVmapped on automagically

the user can adjust :
  • the position along the stem where the fronds start
  • the sweep thickness of the stem via ramp
  • the poly detail of the stem
  • the overall shape of the fronds via a ramp
  • the angle fronds grow out and down toward the base of the feather
    vs how perpendicular from the stem they are
  • the number of fronds and the detail of the curves 
  • the render width of the fronds / curves.
  • the thickness of the individual fronds via a ramp
  • the noise on the fronds
  • the overall  bend and twist of the feather
Further stuff i want to have a crack at:

a procedural colouring system based on real feathers
subtle randomisation tests on most parameters
irridescent shading
a texture generation system for low res geometry.


Akabane Jazz. said...

Hi man, this is actually quite cool.
I wanted to give a try on a procedural feather genereation system too, but i'm still in the thinking phase.
For the strands, how do you control the shape of those based on a ramp? Cannot get it. It's the "how" you consider those as a "whole" to apply the ramp to that i find difficult to understand...if you could throw some tips it would really be appreciated. Cheers

daniel.phillis said...

ok - i edited the interface ( the gear icon) and added a float ramp.

NB you can also alternatively add a vector ramp.

the ramp is controlled with a channel expression - take a look at the chramp() function in the docs. Dont forget the Houdini example files as well - they are GOLD !

it's something like chramp("ramp_parm", float, value to read in) ?

where float is a representation of the horizontal axis of the ramp. The Vertical axis of the ramp represents the values that will ultimately be used.

eg if you had a ramp that sloped from top left (a value of 1) to bottom right ( a value of 0) and you applied this to a particles alpha value, you could imagine the particle fading in alpha / opacity from opaque to transparent.

the horizontal axis of the ramp in this case would be best linked to the particle's life. So 'float' in my above example would be replaced with $AGE/$LIFE which should evaluate from 0 when the particle is born, to 1 when the particle dies.

'parm' is the default parm name
for a new float paramater.

so you'd get chramp("parm",$AGE/$LIFE,0)

In the case of my feather - i modified the length of the fronds based on their height in Y, making my ramp like a visual representation of the fronds - but turned 90 degrees on its side which i found very handy for visual shaping and adjusting.
Ramps are geat for this !

hope this helps ! :)

and check out the Houdini example files - you'll learn much quicker than my blog :P !

Follow by Email