POV-Ray : Newsgroups : povray.binaries.images : Rounding out sharp CSG edges (94kb total, 3 jpegs) Server Time
17 Nov 2024 14:16:59 EST (-0500)
  Rounding out sharp CSG edges (94kb total, 3 jpegs) (Message 1 to 10 of 12)  
Goto Latest 10 Messages Next 2 Messages >>>
From: Samuel Benge
Subject: Rounding out sharp CSG edges (94kb total, 3 jpegs)
Date: 23 Oct 2004 19:28:31
Message: <417AE8E0.4050504@hotmail.com>
Here's something I began developing recently. It takes any old CSG 
object and attempts to round its edges. It's based on the object pigment 
pattern and works by exploiting the 'accuracy' of a surface normal.

It doesn't work too well if objects have preexisting round edges (eg. 
spheres, cylinders), and doesn't leave the surface normals of the object 
pointing in the original directions... which means it won't give you 
100% accurate reflections and shading.

It looks nice enough, and is a good way to round the edges of complex 
CSG without coding all kinds of cylinders and spheres into your object 
definition.

This code will produce all three states as shown in the attached images:

#declare round_edges=on;
#declare edge_amount=1;
#declare edge_samples=20;

#declare obj=
union{
  #local frame=
   difference{
    #local r=0.2;
    box{-1,1}
    box{-1+(x+y-z)*r,1-(x+y-z)*r}
    box{-1+(x-y+z)*r,1-(x-y+z)*r}
    box{-1+(-x+y+z)*r,1-(-x+y+z)*r}
   }
  object{frame rotate y*45}
  object{frame rotate x*45}
  object{frame rotate z*45}
}

object{obj
  pigment{rgb<.2 .5 1>}
  finish{
   brilliance 2 diffuse .4
   specular 1 roughness .1
  }
  #if(round_edges=on)
  normal{
   average
   normal_map{
    #local V=0;
    #while(V<=1)
     [1
      object{obj } 1-V*1
      accuracy (.01+V/10)*edge_amount
      translate<
       rand(R)-rand(R),
       rand(R)-rand(R),
       rand(R)-rand(R)
      >*.00001
     ]
     #local V=V+1/edge_samples;
    #end
    // uncomment to add bumpy surface normal
    //[5 granite -1 accuracy .001
    //poly_wave 2 scale .3]
   }
  }
  #end
  // uncomment to add corresponding pigment
  //pigment{granite poly_wave 2 scale .3
  //color_map{[0 rgb 1][1 rgb .5]}}
}

Is this helpful to anyone? Questions and comments, appreciated as always!

-Sam


Post a reply to this message


Attachments:
Download 're1.jpg' (28 KB) Download 're2.jpg' (28 KB) Download 're3.jpg' (38 KB)

Preview of image 're1.jpg'
re1.jpg

Preview of image 're2.jpg'
re2.jpg

Preview of image 're3.jpg'
re3.jpg


 

From: Anthony D  Baye
Subject: Re: Rounding out sharp CSG edges (94kb total, 3 jpegs)
Date: 23 Oct 2004 19:34:39
Message: <417AEA8E.4F6F3687@gold.sdsmt.edu>
Ineteresting, that could save a lot of work in some places.

ADB

Samuel Benge wrote:

> Here's something I began developing recently. It takes any old CSG
> object and attempts to round its edges. It's based on the object pigment
> pattern and works by exploiting the 'accuracy' of a surface normal.
>
> It doesn't work too well if objects have preexisting round edges (eg.
> spheres, cylinders), and doesn't leave the surface normals of the object
> pointing in the original directions... which means it won't give you
> 100% accurate reflections and shading.
>
> It looks nice enough, and is a good way to round the edges of complex
> CSG without coding all kinds of cylinders and spheres into your object
> definition.
>
> This code will produce all three states as shown in the attached images:
>
> #declare round_edges=on;
> #declare edge_amount=1;
> #declare edge_samples=20;
>
> #declare obj=
> union{
>   #local frame=
>    difference{
>     #local r=0.2;
>     box{-1,1}
>     box{-1+(x+y-z)*r,1-(x+y-z)*r}
>     box{-1+(x-y+z)*r,1-(x-y+z)*r}
>     box{-1+(-x+y+z)*r,1-(-x+y+z)*r}
>    }
>   object{frame rotate y*45}
>   object{frame rotate x*45}
>   object{frame rotate z*45}
> }
>
> object{obj
>   pigment{rgb<.2 .5 1>}
>   finish{
>    brilliance 2 diffuse .4
>    specular 1 roughness .1
>   }
>   #if(round_edges=on)
>   normal{
>    average
>    normal_map{
>     #local V=0;
>     #while(V<=1)
>      [1
>       object{obj } 1-V*1
>       accuracy (.01+V/10)*edge_amount
>       translate<
>        rand(R)-rand(R),
>        rand(R)-rand(R),
>        rand(R)-rand(R)
>       >*.00001
>      ]
>      #local V=V+1/edge_samples;
>     #end
>     // uncomment to add bumpy surface normal
>     //[5 granite -1 accuracy .001
>     //poly_wave 2 scale .3]
>    }
>   }
>   #end
>   // uncomment to add corresponding pigment
>   //pigment{granite poly_wave 2 scale .3
>   //color_map{[0 rgb 1][1 rgb .5]}}
> }
>
> Is this helpful to anyone? Questions and comments, appreciated as always!
>
> -Sam
>
>   ------------------------------------------------------------------------
>  [Image]  [Image]  [Image]

--
//Anthony D. Baye, Student - Comp.Sci.
#default{pigment{rgb<0,.4,1>}finish{reflection 0.3 specular 0.6}}#macro
m(a,g,e)#local A=0;
#while(A<360)#local
am=a*.75;cylinder{vrotate(a*x,A*g*z),vrotate(am*x,(A+135)*g*z)e}
#local A=A+90;#end #local B=0;#while(B<360)sphere{a*x,e rotate B/2*g*z}#local
B=B+1;
#end #end m(2,1,.03)m(2,-1,.03)light_source{<-3,10,-15>,rgb
1}camera{location-7*z look_at 0}


Post a reply to this message

From: Tim Nikias
Subject: Re: Rounding out sharp CSG edges (94kb total, 3 jpegs)
Date: 24 Oct 2004 05:52:02
Message: <417b7b42$1@news.povray.org>
Neat code! Would it be okay if I'd put that up in my POV-Code section? Won't
be there for a few days though, as I'm rehauling the website, but
nontheless...

Regards,
Tim

-- 
"Tim Nikias v2.0"
Homepage: <http://www.nolights.de>


Post a reply to this message

From: LightBeam
Subject: Re: Rounding out sharp CSG edges (94kb total, 3 jpegs)
Date: 24 Oct 2004 08:20:44
Message: <417b9e1c$1@news.povray.org>
Ouch ! :-O
Are your a magician or someone else ?
;-))


Post a reply to this message

From: Renderdog
Subject: Re: Rounding out sharp CSG edges (94kb total, 3 jpegs)
Date: 24 Oct 2004 10:55:00
Message: <web.417bc14d92d53637ad28617a0@news.povray.org>
Samuel Benge <stb### [at] hotmailcom> wrote:
> Is this helpful to anyone? Questions and comments, appreciated as always!

Very helpful indeed; thanks for posting it, a valuable piece of code!

Beginners might not know R is a random number seed, so add:

#declare R = seed(0);

-Mark Slone


Post a reply to this message

From: Samuel Benge
Subject: Re: Rounding out sharp CSG edges (94kb total, 3 jpegs)
Date: 24 Oct 2004 11:37:03
Message: <417BCC08.1010907@hotmail.com>
Anthony D. Baye wrote:

> Ineteresting, that could save a lot of work in some places.

Thanks!

-Sam


Post a reply to this message

From: Samuel Benge
Subject: Re: Rounding out sharp CSG edges (94kb total, 3 jpegs)
Date: 24 Oct 2004 11:42:11
Message: <417BCD3C.5080204@hotmail.com>
Tim Nikias wrote:

> Neat code! Would it be okay if I'd put that up in my POV-Code section? Won't
> be there for a few days though, as I'm rehauling the website, but
> nontheless...
> 
> Regards,
> Tim


Tim, I wouldn't have posted it here if I was snooty about it being 
redistributed. Go ahead!

-Sam


Post a reply to this message

From: Samuel Benge
Subject: Re: Rounding out sharp CSG edges (94kb total, 3 jpegs)
Date: 24 Oct 2004 11:44:39
Message: <417BCDD0.5020802@hotmail.com>
LightBeam wrote:

> Ouch ! :-O

> Are your a magician or someone else ?
> ;-))

No, magician wear funny capes :) Reminds me of a hilarous episode of 
Seinfeld....

-Sam


Post a reply to this message

From: Samuel Benge
Subject: Re: Rounding out sharp CSG edges (94kb total, 3 jpegs)
Date: 24 Oct 2004 11:47:25
Message: <417BCE76.4030307@hotmail.com>
Renderdog wrote:

> Samuel Benge <stb### [at] hotmailcom> wrote:
> 
>>Is this helpful to anyone? Questions and comments, appreciated as always!
>>
> 
> Very helpful indeed; thanks for posting it, a valuable piece of code!
> 
> Beginners might not know R is a random number seed, so add:
> 
> #declare R = seed(0);
> 
> -Mark Slone

Yikes! I always put that near the top of my scene code, so I totally 
missed it. For the record, I used

#declare R = seed(0009);

because out of the twenty seeds I tried, that one had less surface 
normal inaccuracies. Maybe I should post the complete code somewhere....

Thanks for catching that, Renderdog!

-Sam


Post a reply to this message

From: Shay
Subject: Re: Rounding out sharp CSG edges (94kb total, 3 jpegs)
Date: 24 Oct 2004 12:57:38
Message: <417bdf02$1@news.povray.org>
Samuel Benge wrote:

That really is very cool. This *and* the fake scattering. Amazing 
innovation.

  -Shay


Post a reply to this message

Goto Latest 10 Messages Next 2 Messages >>>

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