POV-Ray : Newsgroups : povray.binaries.images : Scattering media with a color_map - how to do? Server Time
23 Jun 2024 15:27:42 EDT (-0400)
  Scattering media with a color_map - how to do? (Message 3 to 12 of 12)  
<<< Previous 2 Messages Goto Initial 10 Messages
From: Jörg 'Yadgar' Bleimann
Subject: Re: Scattering media with a color_map - how to do?
Date: 22 Nov 2009 18:40:59
Message: <4b09cc0b@news.povray.org>
High!

BitViper wrote:

> I'll have a look at your code later, but I built the following a while 
> back then got distracted by real life. I had a similar issue with the 
> rings. I have bitmaps representing a slice of the rings from inside to 
> outside, one for color, and one for alpha. However I never figured out 
> how to apply them to the rings. Perhaps we can help each other, or find 
> a common solution that will work for both of us.

I originally started with a 1500-part color and transparency map (inside 

(http://www.mmedia.is/~bjj/)... to make them work, I had to read out the 
  color and transparency values with eval_pigment() (contained in 
"functions.inc"), and, as a color_map cannot have more than 255 entries, 
  to divide the whole color and transparency maps into six color_maps, 
which then were used in a texture_map:

#declare Saturn_Rings_Colors =
pigment
{
   image_map
   {
     png "solarsys/sat_ring_color_bjoernjonsson.png"
   }
}

#declare Saturn_Rings_Transparency =
pigment
{
   image_map
   {
     png "solarsys/transparency_bjoernjonsson.png"
   }
}

#declare Saturn_Rings_UnlitSide =
pigment
{
   image_map
   {
     png "solarsys/unlitside_bjoernjonsson.png"
   }
}


#declare Ring_Color_Map_1_to_255 =
texture
{
   pigment
   {
     cylindrical
     color_map
     {
       #declare a=0;
       #while (a<255)
         #declare c=eval_pigment(Saturn_Rings_Colors, <2999/3000-a/1500, 
0.5, 0>);
         #declare f=eval_pigment(Saturn_Rings_Transparency, 
<2999/3000-a/1500, 0.5, 0>);
         [a*(((140390-74510)/140390)/1500) rgb c filter f.gray]
         #declare a=a+1;
       #end
     }
   }
   finish { F_Saturn_Rings }
}

#declare Ring_Color_Map_256_to_510 =
texture
{
   pigment
   {
     cylindrical
     color_map
     {
       #declare a=255;
       #while (a<510)
         #declare c=eval_pigment(Saturn_Rings_Colors, <2999/3000-a/1500, 
0.5, 0>);
         #declare f=eval_pigment(Saturn_Rings_Transparency, 
<2999/3000-a/1500, 0.5, 0>);
         [a*(((140390-74510)/140390)/1500) rgb c filter f.gray]
         #declare a=a+1;
       #end
     }
   }
   finish { F_Saturn_Rings }
}

#declare Ring_Color_Map_511_to_765 =
texture
{
   pigment
   {
     cylindrical
     color_map
     {
       #declare a=510;
       #while (a<765)
         #declare c=eval_pigment(Saturn_Rings_Colors, <2999/3000-a/1500, 
0.5, 0>);
         #declare f=eval_pigment(Saturn_Rings_Transparency, 
<2999/3000-a/1500, 0.5, 0>);
         [a*(((140390-74510)/140390)/1500) rgb c filter f.gray]
         #declare a=a+1;
       #end
     }
   }
   finish { F_Saturn_Rings }
}

#declare Ring_Color_Map_766_to_1020 =
texture
{
   pigment
   {
     cylindrical
     color_map
     {
       #declare a=765;
       #while (a<1020)
         #declare c=eval_pigment(Saturn_Rings_Colors, <2999/3000-a/1500, 
0.5, 0>);
         #declare f=eval_pigment(Saturn_Rings_Transparency, 
<2999/3000-a/1500, 0.5, 0>);
         [a*(((140390-74510)/140390)/1500) rgb c filter f.gray]
         #declare a=a+1;
       #end
     }
   }
   finish { F_Saturn_Rings }
}

#declare Ring_Color_Map_1021_to_1275 =
texture
{
   pigment
   {
     cylindrical
     color_map
     {
       #declare a=1020;
       #while (a<1275)
         #declare c=eval_pigment(Saturn_Rings_Colors, <2999/3000-a/1500, 
0.5, 0>);
         #declare f=eval_pigment(Saturn_Rings_Transparency, 
<2999/3000-a/1500, 0.5, 0>);
         [a*(((140390-74510)/140390)/1500) rgb c filter f.gray]
         #declare a=a+1;
       #end
     }
   }
   finish { F_Saturn_Rings }
}

#declare Ring_Color_Map_1276_to_1500 =
texture
{
   pigment
   {
     cylindrical
     color_map
     {
       #declare a=1275;
       #while (a<1500)
         #declare c=eval_pigment(Saturn_Rings_Colors, <2999/3000-a/1500, 
0.5, 0>);
         #declare f=eval_pigment(Saturn_Rings_Transparency, 
<2999/3000-a/1500, 0.5, 0>);
         [a*(((140390-74510)/140390)/1500) rgb c filter f.gray]
         #declare a=a+1;
       #end
     }
   }
   finish { F_Saturn_Rings }
}


#declare Ring_UnlitSide_Map_1_to_255 =
texture
{
   pigment
   {
     cylindrical
     color_map
     {
       #declare a=0;
       #while (a<255)
         #declare c=eval_pigment(Saturn_Rings_UnlitSide, 
<2999/3000-a/1500, 0.5, 0>);
         #declare f=eval_pigment(Saturn_Rings_Transparency, 
<2999/3000-a/1500, 0.5, 0>);
         [a*(((140390-74510)/140390)/1500) rgb c filter f.gray]
         #declare a=a+1;
       #end
     }
   }
   finish { F_Saturn_Rings_UnlitSide }
}

#declare Ring_UnlitSide_Map_256_to_510 =
texture
{
   pigment
   {
     cylindrical
     color_map
     {
       #declare a=255;
       #while (a<510)
         #declare c=eval_pigment(Saturn_Rings_UnlitSide, 
<2999/3000-a/1500, 0.5, 0>);
         #declare f=eval_pigment(Saturn_Rings_Transparency, 
<2999/3000-a/1500, 0.5, 0>);
         [a*(((140390-74510)/140390)/1500) rgb c filter f.gray]
         #declare a=a+1;
       #end
     }
   }
   finish { F_Saturn_Rings_UnlitSide }
}

#declare Ring_UnlitSide_Map_511_to_765 =
texture
{
   pigment
   {
     cylindrical
     color_map
     {
       #declare a=510;
       #while (a<765)
         #declare c=eval_pigment(Saturn_Rings_UnlitSide, 
<2999/3000-a/1500, 0.5, 0>);
         #declare f=eval_pigment(Saturn_Rings_Transparency, 
<2999/3000-a/1500, 0.5, 0>);
         [a*(((140390-74510)/140390)/1500) rgb c filter f.gray]
         #declare a=a+1;
       #end
     }
   }
   finish { F_Saturn_Rings_UnlitSide }
}

#declare Ring_UnlitSide_Map_766_to_1020 =
texture
{
   pigment
   {
     cylindrical
     color_map
     {
       #declare a=765;
       #while (a<1020)
         #declare c=eval_pigment(Saturn_Rings_UnlitSide, 
<2999/3000-a/1500, 0.5, 0>);
         #declare f=eval_pigment(Saturn_Rings_Transparency, 
<2999/3000-a/1500, 0.5, 0>);
         [a*(((140390-74510)/140390)/1500) rgb c filter f.gray]
         #declare a=a+1;
       #end
     }
   }
   finish { F_Saturn_Rings_UnlitSide }
}

#declare Ring_UnlitSide_Map_1021_to_1275 =
texture
{
   pigment
   {
     cylindrical
     color_map
     {
       #declare a=1020;
       #while (a<1275)
         #declare c=eval_pigment(Saturn_Rings_UnlitSide, 
<2999/3000-a/1500, 0.5, 0>);
         #declare f=eval_pigment(Saturn_Rings_Transparency, 
<2999/3000-a/1500, 0.5, 0>);
         [a*(((140390-74510)/140390)/1500) rgb c filter f.gray]
         #declare a=a+1;
       #end
     }
   }
   finish { F_Saturn_Rings_UnlitSide }
}

#declare Ring_UnlitSide_Map_1276_to_1500 =
texture
{
   pigment
   {
     cylindrical
     color_map
     {
       #declare a=1275;
       #while (a<1500)
         #declare c=eval_pigment(Saturn_Rings_UnlitSide, 
<2999/3000-a/1500, 0.5, 0>);
         #declare f=eval_pigment(Saturn_Rings_Transparency, 
<2999/3000-a/1500, 0.5, 0>);
         [a*(((140390-74510)/140390)/1500) rgb c filter f.gray]
         #declare a=a+1;
       #end
     }
   }
   finish { F_Saturn_Rings_UnlitSide }
}

union // Saturn with rings
{
   sphere // Saturn
   {
     0, 1
     texture
     {
       pigment
       {
         image_map
         {
           jpeg "solarsys/saturn_bjoernjonsson.jpg"
           map_type 1
           interpolate 2
         }
       }
       finish { F_Standard_Planetary_Surface }
     }
     scale <bodies[72][1], bodies[72][2], bodies[72][3]>/sc
   }
   difference
   {
     cylinder
     {
       <0, -0.11, 0>/sc, <0, 0.1, 0>/sc, 140390/sc
     }
     cylinder
     {
       <0, -0.12, 0>/sc, <0, 0.11, 0>/sc, 74510/sc
     }
     cylinder // unlit side!
     {
       <0, -0.15, 0>/sc, <0, -0.1, 0>/sc, 150000/sc
       texture
       {
         cylindrical
         texture_map
         {
           [0 
Ring_UnlitSide_Map_1_to_255 ]
           [255*(((140390-74510)/140390)/1500) 
Ring_UnlitSide_Map_256_to_510]
           [510*(((140390-74510)/140390)/1500) 
Ring_UnlitSide_Map_511_to_765]
           [765*(((140390-74510)/140390)/1500) 
Ring_UnlitSide_Map_766_to_1020]
           [1020*(((140390-74510)/140390)/1500) 
Ring_UnlitSide_Map_1021_to_1275]
           [1275*(((140390-74510)/140390)/1500) 
Ring_UnlitSide_Map_1276_to_1500]
         }
         scale 140390/sc
       }
     }
       texture
       {
         cylindrical
         texture_map
         {
           [0                                   Ring_Color_Map_1_to_255]
           [255*(((140390-74510)/140390)/1500)  Ring_Color_Map_256_to_510]
           [510*(((140390-74510)/140390)/1500) 
Ring_Color_Map_511_to_765]
           [765*(((140390-74510)/140390)/1500) 
Ring_Color_Map_766_to_1020]
           [1020*(((140390-74510)/140390)/1500) Ring_Color_Map_1021_to_1275]
           [1275*(((140390-74510)/140390)/1500) Ring_Color_Map_1276_to_1500]
         }
         scale 140390/sc
       }
   }
   SetAxis(bodies[72][10], bodies[72][11])
   translate Pos_Saturn/sc
}

Attached below are two views of Saturn: one showing the sunlit side of 
the rings, the other showing the unlit side - but with a conventionally 
texture rather than media, I can't get Saturn's shadow becoming visible 
on the unlit side. With the real thing, some sunlight instead would be 
scattered through to the unlit side, so I started trying scattering media...

See you in Khyberspace!

Yadgar


Post a reply to this message


Attachments:
Download '2009-11-10 saturn, take 6.jpg' (52 KB) Download '2009-11-10 saturn, take 8.jpg' (27 KB)

Preview of image '2009-11-10 saturn, take 6.jpg'
2009-11-10 saturn, take 6.jpg

Preview of image '2009-11-10 saturn, take 8.jpg'
2009-11-10 saturn, take 8.jpg


 

From: clipka
Subject: Re: Scattering media with a color_map - how to do?
Date: 22 Nov 2009 23:00:01
Message: <4b0a08c1$1@news.povray.org>


> Whatever I tried, the cylindrical pattern never showed up - instead I 
> got a uniformly white ring! What's my mistake?

You simply underestimated the effect of scale on media. Scaling does 
increase the volume, but leaves the density unaffected, so there's more 
matter to emit / absorb / scatter the light.

Reduce the "emission" value (something like 0.005 should get you 
started), and you should be fine.

But didn't you want to use scattering media anyway?


Post a reply to this message

From: Alain
Subject: Re: Scattering media with a color_map - how to do?
Date: 22 Nov 2009 23:13:18
Message: <4b0a0bde@news.povray.org>

> High!
> 
> Still trying to get believable Saturnian rings... so I worked through 
> the media section of the manual to finally get scattering media which 
> shows cylindrical banding - but my attempts failed so far.
> 
> Here is the code for the test scene attached below:
> 
> union
> {
>   sphere
>   {
>     0, 1
>     texture
>     {
>       pigment { color rgb <0.6, 0.4, 0> }
>       finish { ambient 0.02 diffuse 1 brilliance 0.8 }
>     }
>   }
>   difference
>   {
>     cylinder
>     {
>       <0, -0.001, 0>, <0, 0.001, 0>, 3.68
>     }
>     cylinder
>     {
>       <0, -0.0011, 0>, <0, 0.0011, 0>, 1.75
>     }
>     hollow
>     pigment { rgbt 1 }
>     interior
>     {
>       media
>       {
>         emission 0.75
Considering the final thickness and the view point, that's huge...
>         scattering
>         {
>           1, 0.1
>           extinction 1
>         }
>         density
>         {
>           cylindrical
>           color_map
>           {
>             [0 rgbf <1, 0.8, 0.7, 0.1> ]
>             [0.3 rgbf <1, 0.8, 0.7, 0.1> ]
>             [0.3 rgbf <0.1, 0.3, 0.1, 0.95>]
>             [0.35 rgbf <0.1, 0.3, 0.1, 0.95>]
>             [0.35 rgbf <0.9, 0.83, 0.3, 0.2>]
>           }
>           scale 3.68
>         }
>       }
>     }
>   }
>   rotate <-4, 7, 0>
>   scale 10000
>   translate z*50000
> }
> 
> // end of code
> 
> Whatever I tried, the cylindrical pattern never showed up - instead I 
> got a uniformly white ring! What's my mistake?
> 
> See you in Khyberspace!
> 
> Yadgar
> 
> ------------------------------------------------------------------------
> 

Personaly, I'd start by removing the emissive media, or tone it down a 
lot. No more than emission 0.001.

Next, use scattering type 5 with a negative exentricity for the outer 
rings: most of the incoming light is scattered back. Use a second media 
with type 2 or 3 for the inner ring, also, with a much lower density.

Not sure about your use of a filtering component in your color_map.

You scale the rings by 10 000. That means that there is 10 000 times 
more media. The thickness of the ring goes from 0.002 to 20. Then, with 
your very oblique view, you probably travel at least 5 times longer 
through the media. This may explain, toggether with your emissive media, 
why you get that saturated white ring.



Alain


Post a reply to this message

From: Agustin Britait Molina
Subject: Re: Scattering media with a color_map - how to do?
Date: 23 Nov 2009 00:30:00
Message: <web.4b0a1d9aff4a7d13312e3e870@news.povray.org>
Some off-topic: The ring's shadow over the planet surface show other shape in
the real Saturn, you can see this in some real photos of the planet.

http://www.jpl.nasa.gov/images/saturn/saturn1208-browse.jpg

Maybe if you scale all the scene 10.000 in size and put the light source very
very far, the shadow appear more real.


Post a reply to this message

From: Thomas de Groot
Subject: Re: Scattering media with a color_map - how to do?
Date: 23 Nov 2009 03:18:17
Message: <4b0a4549@news.povray.org>
"Alain" <aze### [at] qwertyorg> schreef in bericht 
news:4b0a0bde@news.povray.org...
> You scale the rings by 10 000. That means that there is 10 000 times more 
> media. The thickness of the ring goes from 0.002 to 20. Then, with your 
> very oblique view, you probably travel at least 5 times longer through the 
> media. This may explain, toggether with your emissive media, why you get 
> that saturated white ring.

In other words, and as a general rule of thumb, always divide your 
scattering media by the *same amount* (or the same vector) with which you 
scaled the object containing the media. You can fine tune around that of 
course.

Thomas


Post a reply to this message

From: Jörg 'Yadgar' Bleimann
Subject: Re: Scattering media with a color_map - how to do?
Date: 23 Nov 2009 03:26:12
Message: <4b0a4724$1@news.povray.org>
High!

Agustin Britait Molina wrote:
> Some off-topic: The ring's shadow over the planet surface show other shape in
> the real Saturn, you can see this in some real photos of the planet.
> 
> http://www.jpl.nasa.gov/images/saturn/saturn1208-browse.jpg
> 
> Maybe if you scale all the scene 10.000 in size and put the light source very
> very far, the shadow appear more real.
> 

Thank you, but this is only a small test scene, not intended to be 
realistic!

See you in Khyberspace!

Yadgar


Post a reply to this message

From: Jörg 'Yadgar' Bleimann
Subject: Re: Scattering media with a color_map - how to do?
Date: 23 Nov 2009 03:36:53
Message: <4b0a49a5$1@news.povray.org>
High!


> Personaly, I'd start by removing the emissive media, or tone it down a 
> lot. No more than emission 0.001.
> 
> Next, use scattering type 5 with a negative exentricity for the outer 
> rings: most of the incoming light is scattered back. Use a second media 
> with type 2 or 3 for the inner ring, also, with a much lower density.
> 
> Not sure about your use of a filtering component in your color_map.
> 
> You scale the rings by 10 000. That means that there is 10 000 times 
> more media. The thickness of the ring goes from 0.002 to 20. Then, with 
> your very oblique view, you probably travel at least 5 times longer 
> through the media. This may explain, toggether with your emissive media, 
> why you get that saturated white ring.

Meanwhile, I tried this with my original Saturn scene (see my second 
posting in this thread)... but then, a new problem occurs: as the 
original color and transparency maps consist of 1500 values each, I had 
to compose the original color_map from six single color_map put together 
in one texture_map (a color_map can only contain up to 255 entries).

As I now reworked the whole thing as a media statement, I got the error 
message "Keyword 'texture_map' can only be used in a texture statement."
How can I still build multi-partite color_maps? Or do I have to reduce 
the entries to 255?

See you in Khyberspace!

Yadgar


Post a reply to this message

From: clipka
Subject: Re: Scattering media with a color_map - how to do?
Date: 23 Nov 2009 08:50:50
Message: <4b0a933a$1@news.povray.org>

> As I now reworked the whole thing as a media statement, I got the error 
> message "Keyword 'texture_map' can only be used in a texture statement."
> How can I still build multi-partite color_maps? Or do I have to reduce 
> the entries to 255?

"There may be from 2 to 256 entries in the map.

Density maps may be nested to any level of complexity you desire. The 
densities in a map may have color maps or density maps or any type of 
density you want."


Post a reply to this message

From: Jörg 'Yadgar' Bleimann
Subject: Re: Scattering media with a color_map - how to do?
Date: 23 Nov 2009 09:13:25
Message: <4b0a9885$1@news.povray.org>
High!

clipka wrote:

> "There may be from 2 to 256 entries in the map.
> 
> Density maps may be nested to any level of complexity you desire. The 
> densities in a map may have color maps or density maps or any type of 
> density you want."

Do they? I tried a density_map composed of six entries, which in turn 
are color_maps, and got this:

"Expected ']', colour map identifier found instead"

How do I have to define the six color maps to avoid such errors?

See you in Khyberspace!

Yadgar


Post a reply to this message

From: Alain
Subject: Re: Scattering media with a color_map - how to do?
Date: 23 Nov 2009 12:27:10
Message: <4b0ac5ee$1@news.povray.org>

> Some off-topic: The ring's shadow over the planet surface show other shape in
> the real Saturn, you can see this in some real photos of the planet.
> 
> http://www.jpl.nasa.gov/images/saturn/saturn1208-browse.jpg
> 
> Maybe if you scale all the scene 10.000 in size and put the light source very
> very far, the shadow appear more real.
> 

You don't need to put the light_source "very very far", you just need to 
use a parallel light_source and place it much closer, but outside the 
rings/satellites system.

Don't forget that Saturn is not solid, but a gas giant. You can simulate 
that using SSLT in the beta version or very dense scattering media with 
NO emissive media.


Alain


Post a reply to this message

<<< Previous 2 Messages Goto Initial 10 Messages

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