POV-Ray : Newsgroups : povray.newusers : color_map Server Time
27 Jun 2024 17:21:52 EDT (-0400)
  color_map (Message 6 to 15 of 15)  
<<< Previous 5 Messages Goto Initial 10 Messages
From: ltong
Subject: Re: color_map
Date: 21 Aug 2012 23:00:00
Message: <web.50344a32f6ca84721cd19dea0@news.povray.org>
clipka <ano### [at] anonymousorg> wrote:
> Am 17.08.2012 17:04, schrieb Warp:
>
> > What happens when you apply it to an object is that the surface of the
> > object gets colored by this universe-filling pigment at the places where
> > this surface is located. (It's a bit like the object's surface "intersects"
> > with the pigment, and you see the color of the pigment at those places.)
>
> Or, to take an analogy, POV-Ray's standard way of handling pigments is
> like carving an object out of a given solid material, such as a piece of
> wood.
>
> This is very much unlike UV-mapping (as frequently used by other 3D
> renderers), which is more akin to wrapping the object in patterned paper.

Thanks, Warp and clipka!

What I'm trying now is to get some light beams, for example, a focused Gaussian
laser beam. I first create an object of the shape of a Gaussian beam using
difference {box, torus} or sth like that. Then I try to create the light effect
using a color_map inside pigment_interior_media_density, which I learned from
web. However, i couldn't find any build-in patterns for a Gaussian beam, in
which the intensity is the highest in the center and attenuates gradually to the
edges, it has a gradient along the axis as well. Any suggestions for such a
pattern? Or maybe alternative way to achieve it?

Also, I still do not understand it quite well. According to what Warp says, it
is surface of an object that gets colored, so only those x,y,z on the surface
would be useful to create the color map? Then is it possible to use color_map
create colors inside a "hollowed" object?


Post a reply to this message

From: clipka
Subject: Re: color_map
Date: 22 Aug 2012 07:11:22
Message: <5034be5a$1@news.povray.org>
Am 22.08.2012 04:55, schrieb ltong:

> What I'm trying now is to get some light beams, for example, a focused Gaussian
> laser beam. I first create an object of the shape of a Gaussian beam using
> difference {box, torus} or sth like that. Then I try to create the light effect
> using a color_map inside pigment_interior_media_density, which I learned from
> web. However, i couldn't find any build-in patterns for a Gaussian beam, in
> which the intensity is the highest in the center and attenuates gradually to the
> edges, it has a gradient along the axis as well. Any suggestions for such a
> pattern? Or maybe alternative way to achieve it?

I would suggest trying the function pattern, which (as the name 
suggests) allows you to plug in arbitrary functions.

I guess for a Gaussian beam, the function will be based on the Gauss 
function in some way (don't ask me about details there, I'm not familiar 
with laser beams :-) Wikipedia might know something helpful). The 
gradient along the axis is most likely an exponential falloff:

   // the basic functions for the beam brightness
   #declare FALLOFF  = 0.99; // just an example, toy with it
   #declare FnRadial = function(r) { /* ask Wikipedia */ }
   #declare FnAxial  = function(z) { pow(FALLOFF,z) }

   // helper function to compute radius from x,y
   #declare FnR = function(x,y) { sqrt(x*x+y*y) }

   // the resulting 3D function
   #declare Fn = function(x,y,z) { FnRadial(FnR(x,y)) * FnAxial(z) }


> Also, I still do not understand it quite well. According to what Warp says, it
> is surface of an object that gets colored, so only those x,y,z on the surface
> would be useful to create the color map? Then is it possible to use color_map
> create colors inside a "hollowed" object?

What Warp said applies to the pigment of opqaue objects, but you're 
working with media now, where you'll get the full 3D structure.


Post a reply to this message

From: ltong
Subject: Re: color_map
Date: 22 Aug 2012 23:25:00
Message: <web.5035a239f6ca84721cd19dea0@news.povray.org>
Great, now I can get something pretty close :)

It is Fn(x,z,y) that I used for color_map, btw.

Maybe the last question: in a user-defined pattern, does the output variable (Fn
in this example) give value_n [0,1] for color_map? I experimented with it a bit,
got somewhat unexpected results...

   // the basic functions for the beam brightness
   #declare FALLOFF  = 1; // just an example, toy with it
   #declare a = 0.35;
   #declare b = 0;
   #declare c = 1;
   #declare FnRadial = function(r) {a*exp(-(r-b)*(r-b)/2/c/c)}
   #declare FnAxial  = function(z) { pow(FALLOFF,z) }

   // helper function to compute radius from x,y
   #declare FnR = function(x,y) { sqrt(x*x+y*y) }

   // the resulting 3D function
   #declare Fn = function(x,y,z) { FnRadial(FnR(x,y)) * FnAxial(z) }


object {gauss
  hollow
  pigment { color rgbf<1, 1, 1, 1> }
  interior {
    media {
      emission    color rgb < 1.0, 0.0, 0.0>*5
      density{ function {Fn(x,z,y)}
                color_map {
                  [0 color rgb <0.0, 0.0, 0.0>]
                  [0.15 color rgb <0.1, 0.05, 0.0>]
                  [0.32 color rgb <0.3, 0.05, 0.0>]
                  [0.42 color rgb <0.5, 0.05, 0.0>]
                  [0.52 color rgb <0.7, 0.05, 0.0>]
                  [0.67 color rgb <0.9, 0.05, 0.0>]
                  [1.0 color rgb <1.0, 0.05, 0.0>]
                         }
             } // end density
     }//end media
    } //end interior
   scale <1,1.5,1>*0.5
   translate<0,2.0,0.0>
}


clipka <ano### [at] anonymousorg> wrote:
> Am 22.08.2012 04:55, schrieb ltong:
>
> > What I'm trying now is to get some light beams, for example, a focused Gaussian
> > laser beam. I first create an object of the shape of a Gaussian beam using
> > difference {box, torus} or sth like that. Then I try to create the light effect
> > using a color_map inside pigment_interior_media_density, which I learned from
> > web. However, i couldn't find any build-in patterns for a Gaussian beam, in
> > which the intensity is the highest in the center and attenuates gradually to the
> > edges, it has a gradient along the axis as well. Any suggestions for such a
> > pattern? Or maybe alternative way to achieve it?
>
> I would suggest trying the function pattern, which (as the name
> suggests) allows you to plug in arbitrary functions.
>
> I guess for a Gaussian beam, the function will be based on the Gauss
> function in some way (don't ask me about details there, I'm not familiar
> with laser beams :-) Wikipedia might know something helpful). The
> gradient along the axis is most likely an exponential falloff:
>
>    // the basic functions for the beam brightness
>    #declare FALLOFF  = 0.99; // just an example, toy with it
>    #declare FnRadial = function(r) { /* ask Wikipedia */ }
>    #declare FnAxial  = function(z) { pow(FALLOFF,z) }
>
>    // helper function to compute radius from x,y
>    #declare FnR = function(x,y) { sqrt(x*x+y*y) }
>
>    // the resulting 3D function
>    #declare Fn = function(x,y,z) { FnRadial(FnR(x,y)) * FnAxial(z) }
>
>
> > Also, I still do not understand it quite well. According to what Warp says, it
> > is surface of an object that gets colored, so only those x,y,z on the surface
> > would be useful to create the color map? Then is it possible to use color_map
> > create colors inside a "hollowed" object?
>
> What Warp said applies to the pigment of opqaue objects, but you're
> working with media now, where you'll get the full 3D structure.


Post a reply to this message

From: Alain
Subject: Re: color_map
Date: 23 Aug 2012 21:03:07
Message: <5036d2cb$1@news.povray.org>

> Great, now I can get something pretty close :)
>
> It is Fn(x,z,y) that I used for color_map, btw.
>
> Maybe the last question: in a user-defined pattern, does the output variable (Fn
> in this example) give value_n [0,1] for color_map? I experimented with it a bit,
> got somewhat unexpected results...
>
>     // the basic functions for the beam brightness
>     #declare FALLOFF  = 1; // just an example, toy with it
>     #declare a = 0.35;
>     #declare b = 0;
>     #declare c = 1;
>     #declare FnRadial = function(r) {a*exp(-(r-b)*(r-b)/2/c/c)}
>     #declare FnAxial  = function(z) { pow(FALLOFF,z) }
>
>     // helper function to compute radius from x,y
>     #declare FnR = function(x,y) { sqrt(x*x+y*y) }
>
>     // the resulting 3D function
>     #declare Fn = function(x,y,z) { FnRadial(FnR(x,y)) * FnAxial(z) }
>
>
> object {gauss
>    hollow
>    pigment { color rgbf<1, 1, 1, 1> }
>    interior {
>      media {
>        emission    color rgb < 1.0, 0.0, 0.0>*5
>        density{ function {Fn(x,z,y)}
>                  color_map {
>                    [0 color rgb <0.0, 0.0, 0.0>]
>                    [0.15 color rgb <0.1, 0.05, 0.0>]
>                    [0.32 color rgb <0.3, 0.05, 0.0>]
>                    [0.42 color rgb <0.5, 0.05, 0.0>]
>                    [0.52 color rgb <0.7, 0.05, 0.0>]
>                    [0.67 color rgb <0.9, 0.05, 0.0>]
>                    [1.0 color rgb <1.0, 0.05, 0.0>]
>                           }
>               } // end density
>       }//end media
>      } //end interior
>     scale <1,1.5,1>*0.5
>     translate<0,2.0,0.0>
> }
>
>

Your FnAxial function have a value of zero along the Z axis that climb 
to 1 at a radius of 1. It's similar to the wood pattern.
Make sure that your Gauss object extend along the Z axis.

As your map stand now, it's black on the axis and return rgb<1,0.05,0> 
on the edge.
To get a bright spot in the center fading to black at the edge, you 
should invert the colours of your map.

As your emission colour is pure red, the green component of your map 
have absolutely no effect. Mabe it would be beter to use emission rgb 5.
The final colour is the product of the value of emission and the entry 
of the color_map.


Another alternative don't use media nor any function. You can use a 
plain light_source with the cylindrical attribute.
You now control the bright spot using "radius", the overall width with 
"falloff" and the curve with "tightness"
radius and falloff are expressed in degree.

This would give you a nice smooth illumination:

light_source{10*y rgb<5,0,0> cylindrical
	point_at 0
	radius 0 //no notable "hot spot"
	falloff 1 // total width angle
	tightness 4 // gives a nice curve
// range from 1 to 100
}

The actual diameter og the beam is dictated by falloff and the lenght of 
the location to point_at vector.

Now, you can use some scattering media to make the beam visible if you 
want or need.


Alain


Post a reply to this message

From: ltong
Subject: Re: color_map
Date: 24 Aug 2012 02:00:11
Message: <web.50371771f6ca84721cd19dea0@news.povray.org>
Alain <kua### [at] videotronca> wrote:

> > Great, now I can get something pretty close :)
> >
> > It is Fn(x,z,y) that I used for color_map, btw.
> >
> > Maybe the last question: in a user-defined pattern, does the output variable (Fn
> > in this example) give value_n [0,1] for color_map? I experimented with it a bit,
> > got somewhat unexpected results...
> >
> >     // the basic functions for the beam brightness
> >     #declare FALLOFF  = 1; // just an example, toy with it
> >     #declare a = 0.35;
> >     #declare b = 0;
> >     #declare c = 1;
> >     #declare FnRadial = function(r) {a*exp(-(r-b)*(r-b)/2/c/c)}
> >     #declare FnAxial  = function(z) { pow(FALLOFF,z) }
> >
> >     // helper function to compute radius from x,y
> >     #declare FnR = function(x,y) { sqrt(x*x+y*y) }
> >
> >     // the resulting 3D function
> >     #declare Fn = function(x,y,z) { FnRadial(FnR(x,y)) * FnAxial(z) }
> >
> >
> > object {gauss
> >    hollow
> >    pigment { color rgbf<1, 1, 1, 1> }
> >    interior {
> >      media {
> >        emission    color rgb < 1.0, 0.0, 0.0>*5
> >        density{ function {Fn(x,z,y)}
> >                  color_map {
> >                    [0 color rgb <0.0, 0.0, 0.0>]
> >                    [0.15 color rgb <0.1, 0.05, 0.0>]
> >                    [0.32 color rgb <0.3, 0.05, 0.0>]
> >                    [0.42 color rgb <0.5, 0.05, 0.0>]
> >                    [0.52 color rgb <0.7, 0.05, 0.0>]
> >                    [0.67 color rgb <0.9, 0.05, 0.0>]
> >                    [1.0 color rgb <1.0, 0.05, 0.0>]
> >                           }
> >               } // end density
> >       }//end media
> >      } //end interior
> >     scale <1,1.5,1>*0.5
> >     translate<0,2.0,0.0>
> > }
> >
> >
>
> Your FnAxial function have a value of zero along the Z axis that climb
> to 1 at a radius of 1. It's similar to the wood pattern.
> Make sure that your Gauss object extend along the Z axis.
>
> As your map stand now, it's black on the axis and return rgb<1,0.05,0>
> on the edge.
> To get a bright spot in the center fading to black at the edge, you
> should invert the colours of your map.

Thanks! Seems I misunderstood the function pow. Anyway, it produces somehow
acceptable results. I reversed the colormap, but do not see a dramatic change,
so still wondering how value_n is computed here... Guess it's FnRadial*FnAxial?

>
> As your emission colour is pure red, the green component of your map
> have absolutely no effect. Mabe it would be beter to use emission rgb 5.
> The final colour is the product of the value of emission and the entry
> of the color_map.
>
>
> Another alternative don't use media nor any function. You can use a
> plain light_source with the cylindrical attribute.
> You now control the bright spot using "radius", the overall width with
> "falloff" and the curve with "tightness"
> radius and falloff are expressed in degree.

Thanks! A cylindrical light_source is a good idea, but it doesn't have a
"focused" effect - the smallest in the beam waist and expands along z.

>
> This would give you a nice smooth illumination:
>
> light_source{10*y rgb<5,0,0> cylindrical
>  point_at 0
>  radius 0 //no notable "hot spot"
>  falloff 1 // total width angle
>  tightness 4 // gives a nice curve
> // range from 1 to 100
> }
>
> The actual diameter og the beam is dictated by falloff and the lenght of
> the location to point_at vector.
>
> Now, you can use some scattering media to make the beam visible if you
> want or need.
>
>
> Alain


Post a reply to this message

From: ltong
Subject: Re: color_map
Date: 28 Aug 2012 01:35:07
Message: <web.503c57dff6ca84721cd19dea0@news.povray.org>
ok, after some experimentation, the result looks much better. seems value_n is
defined as 1-min(1,Fn). Don't know how to attach a pic here, below follows the
code.

   #declare FALLOFF  = 1.3; // just an example, toy with it
   #declare a = 0.7;
   #declare b = 0;
   #declare c = 0.44;
   #declare FnRadial = function(r) {a*exp(-(r-b)*(r-b)/2/c/c)}
   #declare FnAxial  = function(z) {1/(1+(FALLOFF*z*FALLOFF*z))}

   // helper function to compute radius from x,y
   #declare FnR = function(x,y) { sqrt(x*x+y*y) }

   // the resulting 3D function
   #declare Fn = function(x,y,z) { FnRadial(FnR(x,y)) * FnAxial(z) }

object {gauss
  hollow
  pigment { color rgbt<1, 1, 1, 1> }
  interior {
    media {
      emission color rgb < 1.0, 0.0, 0.0>
      density{ function {Fn(x,z,y)}
               color_map {
                  [0 color rgb <0.0, 0.0, 0.0>]
                  [1.0 color rgb <1.0, 0.0, 0.0>*1.2]
                         }
             } // end density
     }//end of media
    } //end interior
   scale <1,1,1>*1.5
   translate<0,2.0,0.0>
} //end object


Post a reply to this message

From: cvanvlack
Subject: Re: color_map
Date: 12 Sep 2012 11:35:00
Message: <web.5050ab67f6ca84724538451a0@news.povray.org>
"ltong" <nomail@nomail> wrote:
> ok, after some experimentation, the result looks much better. seems value_n is
> defined as 1-min(1,Fn). Don't know how to attach a pic here, below follows the
> code.
>
>    #declare FALLOFF  = 1.3; // just an example, toy with it
>    #declare a = 0.7;
>    #declare b = 0;
>    #declare c = 0.44;
>    #declare FnRadial = function(r) {a*exp(-(r-b)*(r-b)/2/c/c)}
>    #declare FnAxial  = function(z) {1/(1+(FALLOFF*z*FALLOFF*z))}
>
>    // helper function to compute radius from x,y
>    #declare FnR = function(x,y) { sqrt(x*x+y*y) }
>
>    // the resulting 3D function
>    #declare Fn = function(x,y,z) { FnRadial(FnR(x,y)) * FnAxial(z) }
>
> object {gauss
>   hollow
>   pigment { color rgbt<1, 1, 1, 1> }
>   interior {
>     media {
>       emission color rgb < 1.0, 0.0, 0.0>
>       density{ function {Fn(x,z,y)}
>                color_map {
>                   [0 color rgb <0.0, 0.0, 0.0>]
>                   [1.0 color rgb <1.0, 0.0, 0.0>*1.2]
>                          }
>              } // end density
>      }//end of media
>     } //end interior
>    scale <1,1,1>*1.5
>    translate<0,2.0,0.0>
> } //end object

Hey, this is a great example! I have been trying to do this with Pov-Ray for a
while. I tried a direct copy and paste of this code into Pov-Ray but got (on
line "object {gauss"

---
Parse Error: Expected 'object', undeclared identifier 'gauss' found instead
---

I did a quick search for gauss and it doesn't seem to be an internal function.
Was this just a helper file or was there more to this example that I am missing?
I am relatively inexperienced...

Thanks in advance!!!!


Post a reply to this message

From: Alain
Subject: Re: color_map
Date: 12 Sep 2012 16:25:34
Message: <5050efbe$1@news.povray.org>

> "ltong" <nomail@nomail> wrote:
>> ok, after some experimentation, the result looks much better. seems value_n is
>> defined as 1-min(1,Fn). Don't know how to attach a pic here, below follows the
>> code.
>>
>>     #declare FALLOFF  = 1.3; // just an example, toy with it
>>     #declare a = 0.7;
>>     #declare b = 0;
>>     #declare c = 0.44;
>>     #declare FnRadial = function(r) {a*exp(-(r-b)*(r-b)/2/c/c)}
>>     #declare FnAxial  = function(z) {1/(1+(FALLOFF*z*FALLOFF*z))}
>>
>>     // helper function to compute radius from x,y
>>     #declare FnR = function(x,y) { sqrt(x*x+y*y) }
>>
>>     // the resulting 3D function
>>     #declare Fn = function(x,y,z) { FnRadial(FnR(x,y)) * FnAxial(z) }
>>
>> object {gauss
>>    hollow
>>    pigment { color rgbt<1, 1, 1, 1> }
>>    interior {
>>      media {
>>        emission color rgb < 1.0, 0.0, 0.0>
>>        density{ function {Fn(x,z,y)}
>>                 color_map {
>>                    [0 color rgb <0.0, 0.0, 0.0>]
>>                    [1.0 color rgb <1.0, 0.0, 0.0>*1.2]
>>                           }
>>               } // end density
>>       }//end of media
>>      } //end interior
>>     scale <1,1,1>*1.5
>>     translate<0,2.0,0.0>
>> } //end object
>
> Hey, this is a great example! I have been trying to do this with Pov-Ray for a
> while. I tried a direct copy and paste of this code into Pov-Ray but got (on
> line "object {gauss"
>
> ---
> Parse Error: Expected 'object', undeclared identifier 'gauss' found instead
> ---
>
> I did a quick search for gauss and it doesn't seem to be an internal function.
> Was this just a helper file or was there more to this example that I am missing?
> I am relatively inexperienced...
>
> Thanks in advance!!!!
>
>
>

This is a snippet from a larger scene.

Here, "gauss" is an object previously defined by the author in a 
#declare directive.
It /could/ look like:
#declare gauss= cylinder{<0,0,10><0,0,-10>,2}
Beter writing:
#declare Gauss= cylinder{<0,0,10><0,0,-10>,2}

The primitive used can be any ot the available ones, but should be built 
around the origin. In this case, it also should be longer along the Z axis.

Anyway, it's always beter to always use at least one UPER case leter in 
any user defined identifier, and leave all lower case ones for the 
reserved words.
There have been cases where scenes got broken by not following that 
guide line and used some variable that got used as key word in a later 
version.


Alain


Post a reply to this message

From: cvanvlack
Subject: Re: color_map
Date: 14 Sep 2012 10:10:00
Message: <web.50533a32f6ca84724538451a0@news.povray.org>
"ltong" <nomail@nomail> wrote:
> ok, after some experimentation, the result looks much better. seems value_n is
> defined as 1-min(1,Fn). Don't know how to attach a pic here, below follows the
> code.
>
>    #declare FALLOFF  = 1.3; // just an example, toy with it
>    #declare a = 0.7;
>    #declare b = 0;
>    #declare c = 0.44;
>    #declare FnRadial = function(r) {a*exp(-(r-b)*(r-b)/2/c/c)}
>    #declare FnAxial  = function(z) {1/(1+(FALLOFF*z*FALLOFF*z))}
>
>    // helper function to compute radius from x,y
>    #declare FnR = function(x,y) { sqrt(x*x+y*y) }
>
>    // the resulting 3D function
>    #declare Fn = function(x,y,z) { FnRadial(FnR(x,y)) * FnAxial(z) }
>
> object {gauss
>   hollow
>   pigment { color rgbt<1, 1, 1, 1> }
>   interior {
>     media {
>       emission color rgb < 1.0, 0.0, 0.0>
>       density{ function {Fn(x,z,y)}
>                color_map {
>                   [0 color rgb <0.0, 0.0, 0.0>]
>                   [1.0 color rgb <1.0, 0.0, 0.0>*1.2]
>                          }
>              } // end density
>      }//end of media
>     } //end interior
>    scale <1,1,1>*1.5
>    translate<0,2.0,0.0>
> } //end object


This is a really great example! I tried just a simple copy-paste into POV-Ray
and I keep getting the error

----
Parse Error: Expected 'object', undeclared identifier 'gauss' found instead
---
 on the "object {gauss" line. I did a quick search to see if 'gauss' was an
internal POV-Ray command but it appears that it isn't. Is this the full example?
Are there additional dependencies missing? I'm a little new at POV-Ray so please
excuse my inability to troubleshoot this for myself.

Thanks for your time!


Post a reply to this message

From: cvanvlack
Subject: Re: color_map
Date: 14 Sep 2012 10:15:01
Message: <web.50533b6af6ca84724538451a0@news.povray.org>
"cvanvlack" <nomail@nomail> wrote:
> "ltong" <nomail@nomail> wrote:
> > ok, after some experimentation, the result looks much better. seems value_n is
> > defined as 1-min(1,Fn). Don't know how to attach a pic here, below follows the
> > code.
> >
> >    #declare FALLOFF  = 1.3; // just an example, toy with it
> >    #declare a = 0.7;
> >    #declare b = 0;
> >    #declare c = 0.44;
> >    #declare FnRadial = function(r) {a*exp(-(r-b)*(r-b)/2/c/c)}
> >    #declare FnAxial  = function(z) {1/(1+(FALLOFF*z*FALLOFF*z))}
> >
> >    // helper function to compute radius from x,y
> >    #declare FnR = function(x,y) { sqrt(x*x+y*y) }
> >
> >    // the resulting 3D function
> >    #declare Fn = function(x,y,z) { FnRadial(FnR(x,y)) * FnAxial(z) }
> >
> > object {gauss
> >   hollow
> >   pigment { color rgbt<1, 1, 1, 1> }
> >   interior {
> >     media {
> >       emission color rgb < 1.0, 0.0, 0.0>
> >       density{ function {Fn(x,z,y)}
> >                color_map {
> >                   [0 color rgb <0.0, 0.0, 0.0>]
> >                   [1.0 color rgb <1.0, 0.0, 0.0>*1.2]
> >                          }
> >              } // end density
> >      }//end of media
> >     } //end interior
> >    scale <1,1,1>*1.5
> >    translate<0,2.0,0.0>
> > } //end object
>
>
> This is a really great example! I tried just a simple copy-paste into POV-Ray
> and I keep getting the error
>
> ----
> Parse Error: Expected 'object', undeclared identifier 'gauss' found instead
> ---
>  on the "object {gauss" line. I did a quick search to see if 'gauss' was an
> internal POV-Ray command but it appears that it isn't. Is this the full example?
> Are there additional dependencies missing? I'm a little new at POV-Ray so please
> excuse my inability to troubleshoot this for myself.
>
> Thanks for your time!

Sorry for the double post. Thank you for answering Alain, that worked perfectly.


Post a reply to this message

<<< Previous 5 Messages Goto Initial 10 Messages

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