POV-Ray : Newsgroups : povray.pov4.discussion.general : Ideas. Updated f_wood(). povr branch. : Re: Ideas. Updated f_wood(). povr branch. Server Time
23 Apr 2024 17:29:13 EDT (-0400)
  Re: Ideas. Updated f_wood(). povr branch.  
From: Alain Martel
Date: 13 Sep 2021 11:48:00
Message: <613f72b0$1@news.povray.org>
Le 2021-09-12 à 15:42, William F Pokorny a écrit :
> Roughly a year ago I re-worked the wood pattern and implemented an 
> inbuilt function called f_wood() which could mimic it using the same 
> basic approach long used for wood. I wasn't very satisfied with the 
> result. My thinking was what we really needed was functionality which 
> could create growth rings in a more realistic way.
> 
> One of the distribution types recently added to f_distribtion() was a 
> normal/gaussian. With this in hand, I took another run at an f_wood() 
> supporting more realistic growth rings. I left all turbulence and 
> displacement to outside actors.
> 
> Attached is an image where in the top row the variation is accomplished 
> with a random number stream adjusting a nominal ring width for each 
> ring. In the second row the random values conform to a normal 
> distribution - less often are extreme values seen. The columns represent 
> the three return types.
> 
> Of note, the color_map for middle and right columns use the blend_mode 3 
> feature of v3.8 to get the ring 'steps' to better show.
> 
> Bill P.
> 
> 
> The documentation text from functions.inc:
> 
> Returns 0-1 ramp value within a ring and ring number. Optionally, the 
> float portion of the ring number can represent the what fraction of the 
> total rings in the tree a particular ring represents.
> 
> Values are returned as two 32 bit values encoded in the double space 
> where the individual values are accessed via the f_dec2x_f32() function. 
> The first 32 bit float is the 0-1 pattern value within the particular 
> ring.  The second value is a 32 bit float representing this ring's count 
> from the core by the integer portion of the float and optionally a 
> [0..1) value representing thisRingCnt/treeRingsCount via the decimal 
> portion.
> 
> The aim with f_wood is not to mimic the wood pattern, but rather provide 
> a function returning growth rings which vary in width, a definable wood 
> core and the ring number and fractional position in the wood log. The 
> hope is upon this base, more natural algorithmic-ally generated 'wood 
> patterns' can be created.
> 
> TODO. There are only 6-7 digits of accuracy in that second float! For 
> typical ring counts OK, but maybe the user should be able to select the 
> second return type?
> 
> Example:
> 
> #declare Core  = 0.02;
> #declare Width = Core/2.0;
> #declare Rings = int(((1.0-Core)/Width)+10);
> #declare Seed  = 9871.123456;
> #declare Mean  = 0.0;  // Used only if type is 1
> #declare Sigma = 1/3;  // ditto
> 
> #declare Pigm00 = pigment {
>      function {
>          f_dec2x_f32(
>              f_wood(1,f_hypot(x,y),Core,Width,Rings,Seed,Mean,Sigma),
>          0)
>      }
>      color_map {...}
> }
> 
> Though aimed at creating wood patterns, the function can be used with 
> any gradient of values.
> 
> Eight parameters required:
> 
> 1. Type. If 0, a random value stream is used to vary each ring width. If 
> 1, the random value stream conforms to a more nature like normal 
> distribution. Option 1 is slower.
> 
> 2. Input value. Usually a distance from a center, but any gradient works.
> 
> 3. The core / starting radius. If positioning wood shapes in the pattern 
> away from the core, this can be used to improve performance by skipping 
> the ring calculations prior to those needed.
> 
> 4. The nominal width of each ring in the 'tree log.'
> 
> 5. The count of the rings in the tree. Used to calculated a stepped 
> gradient of each ring from the core to the bark.
> 
> 6. Seed for random number stream(s). It should be a float other than 0.
> 
> 7. Mean value of the normal distribution. Used only if the type is 1.
> 
> 8. Sigma value for the normal distribution. Used only if the type is 1.

Very interesting. Mostly useful for wooden objects that are viewed from 
a relatively short distance.

Is there any way to have undisturbed rings in the centre with the 
disturbance increasing as you get farther ?


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.