POV-Ray : Newsgroups : povray.general : 24 bit heightfields Server Time
30 Jul 2024 18:16:22 EDT (-0400)
  24 bit heightfields (Message 11 to 20 of 35)  
<<< Previous 10 Messages Goto Latest 10 Messages Next 10 Messages >>>
From: SharkD
Subject: Re: 24 bit heightfields
Date: 11 Dec 2008 17:55:00
Message: <web.49419947869f689fe63ea9550@news.povray.org>
Nicolas Alvarez <nic### [at] gmailcom> wrote:
> SharkD wrote:
> > "clipka" <nomail@nomail> wrote:
> >> it's not very easy to tell, given the low resolution - but it is quite
> >> obvious that the red channel is most significant. So I'd guess that the
> >> height is coded as:
> >>
> >>     height = red + (green/256.0) + (blue/65536.0)
> >>
> >> with red, green, blue and height all ranging from 0.0 to 1.0.
> >
> > I don't quite understand your math. If red, green and blue all range from
> > 0 to 1, then the maximum possible height is 3. The maximum height of
> > heightfields is 1.
>
> Those maths assume red, green and blue go from 0 to 255, and height would be
> from 0 to 16777216.

OK, but 255 + 255/256 + 255/65536 still don't add up to 16777216!

-Mike


Post a reply to this message

From: Nicolas Alvarez
Subject: Re: 24 bit heightfields
Date: 11 Dec 2008 17:55:12
Message: <49419a50@news.povray.org>
SharkD wrote:
> Nicolas Alvarez <nic### [at] gmailcom> wrote:
>> You want POV-Ray to output an image like this, for another application to
>> use?
> 
> No, I want to reuse the images in POV.

I put the image directly into a heightfield, and I think I got the correct
height, but only at 16 bits. I can't see any way (without hacking the code)
to get 24 bits of precision in a heightfield.

The only way to put data in a heightfield without passing a filename is
using bitmap functions (function 200,200 { ... }), and those also support
only 16-bit.


Post a reply to this message

From: Dan Connelly
Subject: Re: 24 bit heightfields
Date: 11 Dec 2008 18:44:56
Message: <4941a5f8$1@news.povray.org>
SharkD wrote:
> Nicolas Alvarez <nic### [at] gmailcom> wrote:
>> SharkD wrote:
>>> "clipka" <nomail@nomail> wrote:
>>>> it's not very easy to tell, given the low resolution - but it is quite
>>>> obvious that the red channel is most significant. So I'd guess that the
>>>> height is coded as:
>>>>
>>>>     height = red + (green/256.0) + (blue/65536.0)
>>>>
>>>> with red, green, blue and height all ranging from 0.0 to 1.0.
>>> I don't quite understand your math. If red, green and blue all range from
>>> 0 to 1, then the maximum possible height is 3. The maximum height of
>>> heightfields is 1.
>> Those maths assume red, green and blue go from 0 to 255, and height would be
>> from 0 to 16777216.
> 
> OK, but 255 + 255/256 + 255/65536 still don't add up to 16777216!
> 

No -- the values go from 0 to 255, so the sum can go from 0 to (256 - 1 / 256^2)

Dan


Post a reply to this message

From: SharkD
Subject: Re: 24 bit heightfields
Date: 11 Dec 2008 19:00:00
Message: <web.4941a917869f689fe70991d60@news.povray.org>
Dan Connelly <djc### [at] yahoocom> wrote:
> No -- the values go from 0 to 255, so the sum can go from 0 to (256 - 1 / 256^2)
>
> Dan

Ah, I see now! Thanks.

-Mike


Post a reply to this message

From: Nicolas Alvarez
Subject: Re: 24 bit heightfields
Date: 11 Dec 2008 19:25:20
Message: <4941af6f@news.povray.org>
Nicolas Alvarez wrote:
> I put the image directly into a heightfield, and I think I got the correct
> height, but only at 16 bits. I can't see any way (without hacking the
> code) to get 24 bits of precision in a heightfield.
> 
> The only way to put data in a heightfield without passing a filename is
> using bitmap functions (function 200,200 { ... }), and those also support
> only 16-bit.

But using some creative coding, I can get an isosurface out of a
heightfield. I lose almost all interpolation though; it looks like a
heightfield without the "smooth" parameter.

Isosurface function:

function(x,y,z) {
  y -
  Map(x,y,z).red +
  Map(x,y,z).green / 256.0 +
  Map(x,y,z).blue / 65536.0
}


Post a reply to this message

From: Nicolas Alvarez
Subject: Re: 24 bit heightfields
Date: 11 Dec 2008 19:52:34
Message: <4941b5d1@news.povray.org>
Nicolas Alvarez wrote:
> But using some creative coding, I can get an isosurface out of a
> heightfield. I lose almost all interpolation though; it looks like a
> heightfield without the "smooth" parameter.

http://imagebin.ca/view/5lUU-ge.html

Source attached.

"interpolate 2" in the image_map is absolutely necessary. Without
interpolation, it like a bunch of square blocks, one for each pixel; the
function gradient and the render times go through the roof, and it looks
ugly. With it, the isosurface looks like a non-smoothed heightfield.


Post a reply to this message


Attachments:
Download 'us-ascii' (1 KB)

From: SharkD
Subject: Re: 24 bit heightfields
Date: 11 Dec 2008 20:05:00
Message: <web.4941b861869f689fb47ee9210@news.povray.org>
Nicolas Alvarez <nic### [at] gmailcom> wrote:
> I put the image directly into a heightfield, and I think I got the correct
> height, but only at 16 bits. I can't see any way (without hacking the code)
> to get 24 bits of precision in a heightfield.

How did you check whether it was only using 16 bits?

-Mike


Post a reply to this message

From: SharkD
Subject: Re: 24 bit heightfields
Date: 11 Dec 2008 20:10:00
Message: <web.4941b8ef869f689fb47ee9210@news.povray.org>
"SharkD" <nomail@nomail> wrote:
> Nicolas Alvarez <nic### [at] gmailcom> wrote:
> > SharkD wrote:
> > > I generated the following heightfield in some program or other. It uses
> > > all 24 bits for elevation information. My question is, how are the
> > > colors/height data organized? I would like to create a pigment that
> > > produces similar maps.
> >
> > Seems similar to the POV-Ray TGA heightfields, except using all three
> > channels instead of two.
> >
> > Basically, red*256*256 + green*256 + blue = 24-bit grayscale value.
>
> How would I create this type of pigment? Thanks.
>
> -Mike

OK, here's the pigment:

#local hf_pigment_function_pow = function {y * pow(256,3)}
#local hf_pigment_function_b = function {mod(hf_pigment_function_pow(x,y,z),
pow(256,1))}
#local hf_pigment_function_g = function {mod(hf_pigment_function_pow(x,y,z) -
hf_pigment_function_b(x,y,z), pow(256,2))}
#local hf_pigment_function_r = function {mod(hf_pigment_function_pow(x,y,z) -
hf_pigment_function_b(x,y,z) - hf_pigment_function_g(x,y,z), pow(256,3))}

#local hf_pigment_b = pigment
{
 function {hf_pigment_function_b(x,y,z) / pow(256,1)}
 color_map {[0 rgb 0][1 rgb z]}
}
#local hf_pigment_g = pigment
{
 function {hf_pigment_function_g(x,y,z) / pow(256,2)}
 color_map {[0 rgb 0][1 rgb y]}
}
#local hf_pigment_r = pigment
{
 function {hf_pigment_function_r(x,y,z) / pow(256,3)}
 color_map {[0 rgb 0][1 rgb x]}
}

// This is the one you want
#local hf_pigment_rgb = pigment
{
 average
 pigment_map {[3 hf_pigment_b][3 hf_pigment_g][3 hf_pigment_r]}
}


Post a reply to this message

From: SharkD
Subject: Re: 24 bit heightfields
Date: 11 Dec 2008 20:20:00
Message: <web.4941bbe5869f689f7befdcf10@news.povray.org>
"Reactor" <rea### [at] hotmailcom> wrote:
> I am intrigued by this idea.  I have been using hf_gray_16 in the past, and it
> usually creates enough levels, but an hf_gray_24 might be pretty cool too.

Well, an hf_gray_24 function would require a new image format: one in which each
channel stores 24 bits of color information, for a total of 72 bits for the
entire image. AFAIK, povray only supports a maximum of 16 bits-per-color in a
handful of formats (PNG is one of them).

The pigment I created will generate 24 bits of heightfield data in 8
bits-per-color images (the most common format), and 48 bits of heightfield data
in 16 bits-per-color images.

-Mike


Post a reply to this message

From: Nicolas Alvarez
Subject: Re: 24 bit heightfields
Date: 11 Dec 2008 20:22:40
Message: <4941bce0@news.povray.org>
SharkD wrote:
> Nicolas Alvarez <nic### [at] gmailcom> wrote:
>> I put the image directly into a heightfield, and I think I got the
>> correct height, but only at 16 bits. I can't see any way (without hacking
>> the code) to get 24 bits of precision in a heightfield.
> 
> How did you check whether it was only using 16 bits?

The documentation says so.


Post a reply to this message

<<< Previous 10 Messages Goto Latest 10 Messages Next 10 Messages >>>

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