POV-Ray : Newsgroups : povray.animations : can't make static starfield, it keeps shifting : Re: can't make static starfield, it keeps shifting Server Time
25 Apr 2024 04:05:04 EDT (-0400)
  Re: can't make static starfield, it keeps shifting  
From: John VanSickle
Date: 19 Oct 2010 21:02:32
Message: <4cbe3fa8@news.povray.org>
On 10/15/2010 8:48 PM, Florin Andrei wrote:
> I am trying to render an astronomy object, with stars as a background. This is
> fine as a static image, but I'm having tremendous issues when doing an
> animation. Basically, I can't find a solution to the simple problem of having
> the exact same image (starfield) for all frames, when the camera is moving.
> Looks like, no matter what, the starfield background is randomly built anew for
> each frame. This is not good. I want the starry background to be exactly the
> same in each frame, fully static relative to the moving camera.
>
> I tried to paint Starfield1 on a box (or plane) and have the box move with the
> exact same speed as the camera:
>
> http://pastebin.com/raw.php?i=4KZL7jcG
>
> povray from_mars.pov +W1920 +H1080 -visual DirectColor +A0.1 +AM2
>
> Well, no, each frame the stars are painted again, randomly. :(
>
> How do I make the starfield completely static for all frames when the camera is
> moving?

    When I need a starry background in POV-Ray, I use an assortment of 
randomly-placed triangles. There are other approaches, but I prefer this 
because I like to use objects that model the simulated objects as 
closely as possible. Stars, from the sightseeing viewpoint, are just 
ultra-bright objects that are just close enough to appear as points of 
light.
    The trick is to place the stars so that at least one pixel but no 
more than four pixels overlap the star's silhouette on the computer 
screen. This will give a point of light, especially when anti-aliasing 
is used.

     Use the following code:

#local sB=sqrt(3)/min(image_height,image_width)/sCamZ;
#local pA=< 0,          sB*2/3,1>*100000;
#local pB=< sB/sqrt(3),-sB/3,  1>*100000;
#local pC=<-sB/sqrt(3),-sB/3,  1>*100000;

#local S0=seed(4);
#local cC=16;
#local sC=.5/cC;#while(sC<=1)
mesh {
#local iI=0; #while (iI<1600/cC*sCamZ*sCamZ)
   #local vAng=<rand(S0),rand(S0),rand(S0)>*360;
   #if 
(vdot(vrotate(z,vAng),vCamD)>sCamZ/vlength(<sCamR/2,sCamU/2,sCamZ>) | 
AllStars)
     triangle { vrotate(pA,vAng), vrotate(pB,vAng), vrotate(pC,vAng) }
   #end
#local iI=iI+1; #end
   no_shadow
pigment { rgb 
<max(0,-(sC-1)*2),min(sC*4,-(sC-1)*4),max(0,(sC-.25)*4)>*.2+.8 }
finish { ambient 1 diffuse 0 }

//  scale Beyond
   translate pCamL
}
#local sC=sC+1/cC;#end

A number of parameters are used here that you'll need to define first:

* AllStars: If true, forces all stars to be made. When false prevents 
creation of off-camera stars
* Beyond: This is commented out because you may not need it. If any of 
the stars appear in front of other objects in your scene, take out the 
slashes and set Beyond to some value that puts the stars beyond all of 
the other scene objects.
* cC: This sets the number of shades of color the stars will have. Stars 
will range in color from reddish to bluish.
* pCamL: The location setting of your camera.
* sCamR: The length of the right parameter of the camera. If you didn't 
specify a right vector in the camera, use a value of 4/3 here.
* sCamU: The length of the up parameter of the camera. If you didn't 
specify this parameter in the camera statement, use 1 here.
* sCamZ: The length of the direction vector in your camera. If you 
specify the angle in your camera, then set this value equal to 
cot(radians(angle)/2)*4/3. If you didn't specify either direction or 
angle, use 1 here.
* vCamD: The normalized value of the direction vector in your camera

Hope this helps,
John


Post a reply to this message

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