POV-Ray : Newsgroups : povray.newusers : color modulation in textures : Re: color modulation in textures Server Time
29 Jul 2024 18:28:07 EDT (-0400)
  Re: color modulation in textures  
From: tahoma
Date: 11 May 2005 14:13:32
Message: <opsqmh8wctx5erxw@leningrad>
On Wed, 11 May 2005 18:59:41 +0100, Mike Williams  

<nos### [at] econymdemoncouk> wrote:

> Wasn't it tahoma who wrote:
>> Mike Williams <nos### [at] econymdemoncouk> wrote:
>>> Wasn't it tahoma who wrote:
>>> >I started with povray some days ago to convert some realtime scenes
 to
>>> >povray files. After reading the documentation again and again i  

>>> wondered if
>>> >it would be possible to define materials or textures just like in  

>>> OpenGL,
>>> >3dsMax and so on.
>>> >
>>> >E.g. the modulation of an image_map color with a constant color:
>>> >pigment = <image_map[u,v].red * color.red, image_map[u,v].green *

>>> >color.green, image_map[u,v].blue * color.blue>
>>>
>>> This can be achieved with pigment functions, but it's a bit tricky.
>>>
>>> Let there be a colour "C".
>>>
>>> We first have to split the colour into its components, because the  

>>> parser
>>> doesn't like the syntax "C.red" in the next stage.
>>>
>>> #declare Cr = C.red;
>>> #declare Cg = C.green;
>>> #declare Cb = C.blue;
>>>
>>> Now define a pigment function from the image_map.
>>>
>>> #declare IM = function {pigment {image_map {jpeg "tex.jpg" interpo
late  

>>> 2}}}
>>>
>>> Then calculate three pigments that will be the components of the  

>>> modulated
>>> pigment. In this case the calculation is IM.red * C.red, which gives
  

>>> you the
>>> pattern of the pigment. The pattern is then colour_mapped to the ran
ge  

>>> black-
>>> to-red (otherwise it ends up greyscale).
>>>
>>> #declare R = pigment {function {IM(x,y,z).red * Cr}
>>>    colour_map {[0 rgb 0][1 rgb <1,0,0>]}}
>>> #declare G = pigment {function {IM(x,y,z).green * Cg}
>>>    colour_map {[0 rgb 0][1 rgb <0,1,0>]}}
>>> #declare B = pigment {function {IM(x,y,z).blue * Cb}
>>>    colour_map {[0 rgb 0][1 rgb <0,0,1>]}}
>>>
>>> Then assemble the three components using an average pigment_map
>>>
>>> sphere {0,1
>>>   pigment {average
>>>     pigment_map {
>>>       [1 R]
>>>       [1 G]
>>>       [1 B]
>>>     }
>>>   }
>>> }
>>
>> Whoa, pretty nice :)
>>
>> I tried it and it works great but only with non uv mapped image_maps.
  

>> When
>> using "uv_mapping" povray complains with "The 'uv_mapping' pattern  

>> cannot
>> be used as part of a pigment function!". Nevertheless, I never was so
  

>> close
>> to the solution, thank you so far.
>
> You're probably just putting the "uv_mapping" keyword in the wrong
> place. Don't do the uv_mapping when you define the pigment functions, 
do
> it when you apply the complete texture to the object.
>
> sphere {0,1
>   texture {uv_mapping
>     pigment {average
>       pigment_map {
>         [1 R]
>         [1 G]
>         [1 B]
>       }
>     }
>   }
> }

That did the trick. Thanks.


Post a reply to this message

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