POV-Ray : Newsgroups : povray.newusers : more isosurface woes Server Time
27 Nov 2024 15:38:00 EST (-0500)
  more isosurface woes (Message 1 to 7 of 7)  
From: Justin Smith
Subject: more isosurface woes
Date: 2 Oct 2002 23:05:02
Message: <web.3d9bb34c33fc79509a66a6680@news.povray.org>
I've been experimenting a lot with creating mountains using isosurfaces, but
I can't seem to quite get it right.

I've been using a paraboloid function as the basic shape (x^2+y+z^2). I have
been trying to use pattern noise to carve out parts to make it look more
like a real mountain. I've mainly been using crackle and agate, since they
seem the closest to what I want.

The problem is that when I make the noise large enough (either by scaling
the #declared pigment function in the declaration, or by increasing the
multiplier at the end of subtracting it from the base function, or both),
it always leaves "floaters"... pieces of terrain that are not actually
connected or are connected by very thin sections to the main object. If I
make the noise small enough to prevent this from being noticeable, the
general silhouette of the mountain is still a perfect paraboloid and looks
very unnatural.

The bottom of the mountain doesn't matter at all because I have a fog layer
acting as low-flying clouds that completely obscure the lower elevations.

I think the problem is finding a good medium between the scaling of the
whole isosurface and the scaling of the noise. Right now I am using the
following measurements:

the base function: (x*x)/5000 + y/90 + (z*z)/5000
the pigment function: there are two, actually. One is crackle scale 50 and
the other is agate scale 5. Both are subtractive (meaning I use "+") from
the base shape.
contained_by: a box, with -500,500 as measurements.

Now, I have seen some great isosurface work before (particularly I remember
an entry in the Asia IRTC that had photorealistic terrain entirely made
with isosurfaces)... Anyone have an suggestions on what I could do? Thanks.

-Justin Smith


Post a reply to this message

From: hughes, b 
Subject: Re: more isosurface woes
Date: 3 Oct 2002 01:59:46
Message: <3d9bdcd2@news.povray.org>
This is something I'd like to do somehow too. I think it needs to be kind of
fractalized, iterations from large to small perturbations. Unfortunately,
people were discussing function-made fractals elsewhere here at the
newsgroups and seemed this isn't possible because recursive calls into a
function aren't allowed. Or I hadn't noticed if anyone said there was a way.

Obviously you realize what needs to be done and just have not found a
suitable answer. Hope you do.

I worked a bit from your description and got a lumpy mountain that looks
like some sort of  Baked Alaska desert. It's goofy but thought it was
interesting, isosurfaces usually are.
See script below your quote if you'd like...
--
Farewell,
Bob

"Justin Smith" <t74### [at] yahoocom> wrote in message
news:web.3d9bb34c33fc79509a66a6680@news.povray.org...
>
> The problem is that when I make the noise large enough (either by scaling
> the #declared pigment function in the declaration, or by increasing the
> multiplier at the end of subtracting it from the base function, or both),
> it always leaves "floaters"... pieces of terrain that are not actually
> connected or are connected by very thin sections to the main object. If I
> make the noise small enough to prevent this from being noticeable, the
> general silhouette of the mountain is still a perfect paraboloid and looks
> very unnatural.

// needs AA or there are terrible lines
light_source {
 -10000*z, 1
 rotate <45,45,0>
}

camera {
 location -150*z
 look_at -10*y
 angle 40
 rotate <15,0,0>
}

#declare F_Paraboloid=
function {
 (x*x+y+z*z)
}

#declare F_Crackle=
function {
 pigment  {
  crackle
  turbulence 0.125
  scale 10
 }
}

#declare F_Agate=
function {
 pigment  {
  agate
  agate_turb 0.125
  scale 10
 }
}

#declare F_GradientY=
function {
 pigment  {
  gradient y
  scallop_wave
  turbulence 0.125
  scale 0.5
 }
}

#include "functions.inc"

isosurface {
 function {

  F_Paraboloid((x*x)/999,y/9*f_noise3d(x/9,y/33,z/9), (z*z)/999)
  -((F_Crackle(x,y,z).gray*2

+F_Agate(x,y,z).gray*2))*f_noise3d(x/3,y/9,z/3)*F_GradientY(x,y,z).gray*0.3
 }
 contained_by {
  box { -50,50 }
 }
 threshold 1
 accuracy 1 // yes, very low accuracy
 max_gradient 1 // again, not much here
 // evaluate 2,1,0.95
scale <1,0.25,1>
 pigment {
  rgb <1,1,1>
 }
}


Post a reply to this message

From: Mike Williams
Subject: Re: more isosurface woes
Date: 3 Oct 2002 02:22:21
Message: <xvq3WPA0+9m9Ewpf@econym.demon.co.uk>
Wasn't it Justin Smith who wrote:
>I've been experimenting a lot with creating mountains using isosurfaces, but
>I can't seem to quite get it right.
>
>I've been using a paraboloid function as the basic shape (x^2+y+z^2). I have
>been trying to use pattern noise to carve out parts to make it look more
>like a real mountain. I've mainly been using crackle and agate, since they
>seem the closest to what I want.
>
>The problem is that when I make the noise large enough (either by scaling
>the #declared pigment function in the declaration, or by increasing the
>multiplier at the end of subtracting it from the base function, or both),
>it always leaves "floaters"... pieces of terrain that are not actually
>connected or are connected by very thin sections to the main object. If I
>make the noise small enough to prevent this from being noticeable, the
>general silhouette of the mountain is still a perfect paraboloid and looks
>very unnatural.

Instead of using    Pigment_Function(x,y,z) 
try using           Pigment_Function(x,0,z)

This returns a value that only depends on the x and z co-ordinates of
the point, and will prevent bits floating off in the y direction.

-- 
Mike Williams
Gentleman of Leisure


Post a reply to this message

From: Tom Melly
Subject: Re: more isosurface woes
Date: 3 Oct 2002 05:09:22
Message: <3d9c0942$1@news.povray.org>
"Justin Smith" <t74### [at] yahoocom> wrote in message
news:web.3d9bb34c33fc79509a66a6680@news.povray.org...

<snip>

It's a fairly common problem - one way to guarantee that your surface will be
contigineous is to deform a plane. Basically, if all you are doing is raising
bits of a plane up or down, then you will never get bits of the surface breaking
away. This does impose the same limitation as a height-field - namely that you
will never get any recesses in the surface or overhangs.

For mountains, I'd strongly recommend taking a look at ridged multi-fractals,
which are specifically designed for this.

Try something like:

#version 3.5;

#include "colors.inc"
#include "functions.inc"
global_settings { assumed_gamma 1.0}
camera {  location  <0.0, 5, -10.0>  look_at   <0.0, 0.0,  0.0>}
sky_sphere {  pigment {    wrinkles    color_map {      [0.0 rgb <0.6,0.7,1.0>]
[0.7 rgb <0.0,0.1,0.8>]    }  }}
light_source {  <0, 0, 0>   color rgb <1, 1, 1>   translate <-30, 30, -30>}

#declare MountFunc = function(x,y,z){f_ridged_mf(x,y,z,0.9, 5, 10, 0.75, 1, 0)}
#declare Mountains =
isosurface{
  function{ y - MountFunc(x,0,z)}
  contained_by{box{-5,5}}
  accuracy 0.001
  max_gradient 20
}

object{Mountains pigment{Gray50}}


Post a reply to this message

From: Christoph Hormann
Subject: Re: more isosurface woes
Date: 3 Oct 2002 06:39:48
Message: <3D9C1E74.FF94BFC7@gmx.de>
Justin Smith wrote:
> 
> [...]
> 
> The problem is that when I make the noise large enough (either by scaling
> the #declared pigment function in the declaration, or by increasing the
> multiplier at the end of subtracting it from the base function, or both),
> it always leaves "floaters"... pieces of terrain that are not actually
> connected or are connected by very thin sections to the main object. If I
> make the noise small enough to prevent this from being noticeable, the
> general silhouette of the mountain is still a perfect paraboloid and looks
> very unnatural.

To some extend that's a general problem of isosurfaces, Mike's suggestion
avoids it, but it will have some problems and restrictions as known from
heightfields then.  To avoid the regular appearance when using not so
strong displacement you can deform the paraboloid object with a low
frequency noise function.

function { (x*x)/5000 + (y + f_noise3d(x/30, 0, z/30)*90)/90 + (z*z)/5000
}

will deform in y-direction (like what Mike suggested) so if you now apply
a displacement it will look less regular.

> [...]
> 
> Now, I have seen some great isosurface work before (particularly I remember
> an entry in the Asia IRTC that had photorealistic terrain entirely made
> with isosurfaces)...

Thanks ;-)

Christoph

-- 
POV-Ray tutorials, IsoWood include,                 
TransSkin and more: http://www.tu-bs.de/~y0013390/  
Last updated 13 Aug. 2002 _____./\/^>_*_<^\/\.______


Post a reply to this message

From: Christopher James Huff
Subject: Re: more isosurface woes
Date: 3 Oct 2002 17:01:06
Message: <chrishuff-19F8D1.16580403102002@netplex.aussie.org>
In article <3d9bdcd2@news.povray.org>,
 "hughes, b." <omn### [at] charternet> wrote:

> This is something I'd like to do somehow too. I think it needs to be kind of
> fractalized, iterations from large to small perturbations. Unfortunately,
> people were discussing function-made fractals elsewhere here at the
> newsgroups and seemed this isn't possible because recursive calls into a
> function aren't allowed. Or I hadn't noticed if anyone said there was a way.

Recursion isn't allowed, that doesn't mean you can't hard-code the 
different levels of a fractal. This kind of function is actually pretty 
common, there are a couple built-in functions for doing it.

-- 
Christopher James Huff <cja### [at] earthlinknet>
http://home.earthlink.net/~cjameshuff/
POV-Ray TAG: chr### [at] tagpovrayorg
http://tag.povray.org/


Post a reply to this message

From: Justin Smith
Subject: Re: more isosurface woes
Date: 3 Oct 2002 21:25:07
Message: <web.3d9cec8ea2d72d4fe07c96340@news.povray.org>
Christoph Hormann wrote:
>
>Justin Smith wrote:
>>
>> [...]
>>
>> The problem is that when I make the noise large enough (either by scaling
>> the #declared pigment function in the declaration, or by increasing the
>> multiplier at the end of subtracting it from the base function, or both),
>> it always leaves "floaters"... pieces of terrain that are not actually
>> connected or are connected by very thin sections to the main object. If I
>> make the noise small enough to prevent this from being noticeable, the
>> general silhouette of the mountain is still a perfect paraboloid and looks
>> very unnatural.
>
>To some extend that's a general problem of isosurfaces, Mike's suggestion
>avoids it, but it will have some problems and restrictions as known from
>heightfields then.  To avoid the regular appearance when using not so
>strong displacement you can deform the paraboloid object with a low
>frequency noise function.
>
>function { (x*x)/5000 + (y + f_noise3d(x/30, 0, z/30)*90)/90 + (z*z)/5000
>}
>
>will deform in y-direction (like what Mike suggested) so if you now apply
>a displacement it will look less regular.
>
>> [...]
>>
>> Now, I have seen some great isosurface work before (particularly I remember
>> an entry in the Asia IRTC that had photorealistic terrain entirely made
>> with isosurfaces)...
>
>Thanks ;-)
>
>Christoph
>
>POV-Ray tutorials, IsoWood include,
>TransSkin and more: http://www.tu-bs.de/~y0013390/
>Last updated 13 Aug. 2002 _____./\/^>_*_<^\/\.______
>

Oh, was that yours? Yes, I was thoroughly impressed.

Thanks for all the help (from everyone)... I went with Mike's suggestion,
since the mountain is far away enough that you wouldn't be able to see any
overhangs anyways. I'll try the other method as well to see what it looks
like, though. Much appreciated.

-Justin


Post a reply to this message

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