| 
  | 
Hi
I'm currently working on a scene using the Nuke from Tekno Frannansa.
Since I want to have multiple explosions in the scene at the same time, I have
encapsulated this in a macro to call this with a timestamp to generate multiple
explosions one after the other in time.
But somehow this doesn't work as soon as I have more than one explosion in the
scene. For test purposes, I want to see two explosions, with about a 2 sec
offset. As long as only the first explosion is visible, I don't see anything.
Only when the second explosion is visible, the first one is also visible.
Render with "-k350" for an incorrect image (one explosion), with "-k400" for a
correct image (two explosions).
What is wrong there to display the first explosion correctly?
At the moment not even clear to me where exactly the problem is (bug in
Pov-ray)?
----------Scene-------------------------
//NUKE!!!  By Tekno Frannansa
///#include "misctools.inc"
///ScalOut("************ START *******************",0)
//declare some things
// #local C=clock-.2; //blast occurs at C=0
#local arG = array[100];
#local F=function{pattern{granite}}
//scenery
sphere {
 0,9
 pigment { rgb<1,2,3>/3 }
 hollow
}
height_field {
 function 999,999 {
  pow( F(y,1,x), 9 )
 }
 translate .14*y-.5
 scale 10-y*7
 pigment { rgb<3,2,1>/3 }
}
camera {
  location y-2
  look_at 0
}
//THE NUKE!
// #if ( C>0 )
#macro NUKE(Start)
union {
  // Explosion ab Timestamp Start (clock), dauer 2 sek
  #local C = (clock/240)-Start;
  #local fadeoff = 1;
  #if (C>1.0)
    #local fadeoff = 2*(1.5-C);
  #end
  #if (C>1.5)
    #local fadeoff = 0;
  #end
  ///ScalOut("C=",C)
  ///ScalOut("fadeoff=",fadeoff)
  #if (C > 0 & C < 1.5)
    ///ScalOut("*** sphere *** ",C)
    //sphere  { 0,1 pigment { Red } }
    sphere { 0, 1.5
  pigment { rgbt 0.9 } // finally set to 1.0
  interior {
   media {
    scattering { 1,60 }
    absorption 60 //scattering gives white smoke, add absorption to get grey.
    density {
     //#declare arG[Idx] =
     #ifdef(G)
       #undef G;
     #end
     #local G =
      function {
       F(x,y+C/6,z-C/3)
       +(1-sqrt(x*x+y*y+z*z))*2
      }
     function {
      max(0,
       G(x,y-cos(y*2)*(1+C)*.6,z)// * fadeoff // * 0.005
       /3
      )
     }
    }
   }
  }
  hollow
 }
 //light from the blast
 light_source {
  -y*.7
  color <3,2,1>/99/4/C/C
 }
  #else
    sphere { 1E-10, 1E10 } // dummy
  #end // if "sichtbar"
  }
#end
object { NUKE(0.5) }
object { NUKE(1.5) translate 2*x }
light_source {
 y*9-5
 color 1
}
 Post a reply to this message 
 
Attachments: 
Download 'nuke_prob.jpg' (17 KB)
 
  
Preview of image 'nuke_prob.jpg'
   
   
 | 
  | 
 | 
  | 
On 4/6/22 12:11, Juergen wrote:
> What is wrong there to display the first explosion correctly?
My guess is that the first explosion is inside the non-hollow dummy sphere:
   #else
     sphere { 1E-10, 1E10 } // dummy
   #end // if "sichtbar"
of the second - until the second explosion goes off.
Aside: I don't think there is any reason that dummy sphere to be what it 
is. As another guess something like:
   #else
     sphere { -1E10, 1E-6 } // dummy
   #end // if "sichtbar"
would server better. It's likely there just to prevent parse errors from 
an empty union.
Bill P.
 Post a reply to this message 
 | 
  | 
 | 
  | 
Le 2022-04-06 à 12:42, William F Pokorny a écrit :
> On 4/6/22 12:11, Juergen wrote:
>> What is wrong there to display the first explosion correctly?
> 
> My guess is that the first explosion is inside the non-hollow dummy sphere:
> 
>    #else
>      sphere { 1E-10, 1E10 } // dummy
>    #end // if "sichtbar"
> 
> of the second - until the second explosion goes off.
> 
> Aside: I don't think there is any reason that dummy sphere to be what it 
> is. As another guess something like:
> 
> 
>    #else
>      sphere { -1E10, 1E-6 } // dummy
>    #end // if "sichtbar"
> 
> would server better. It's likely there just to prevent parse errors from 
> an empty union.
> 
> Bill P.
Normally, a dummy object is made unobtrusive, so, located far away and tiny.
Even sphere{0, 0} or box{0, 0} can work.
Here, the original dummy object is extremely large.
Normally used to prevent warnings about unions with single objects and 
errors from empty unions.
 Post a reply to this message 
 | 
  | 
 | 
  | 
"Juergen" <nomail@nomail> wrote:
> For test purposes, I want to see two explosions... As long as only the
> first explosion is visible, I don't see anything.
> Only when the second explosion is visible, the first one is also visible.
> Render with "-k350" for an incorrect image (one explosion), with "-k400" for a
> correct image (two explosions).
>
I am still trying to understand how your macro works with the two different -k
clock values-- but if I add an additional 'hollow' keyword at the end of the
union, inside the macro, like this...
....
#else
    sphere { 1E-10, 1E10 }
hollow
#end
} // [end of union]
#end // [end of macro]
.... the first explosion(?) does appear at -k350, and both explosions appear at
-k400
Is this the visual result that you are trying to produce?
 Post a reply to this message 
 | 
  | 
 | 
  | 
"Kenneth" <kdw### [at] gmail com> wrote:
>
> ..if I add an additional 'hollow' keyword at the end of the
> union, inside the macro...the first explosion(?) does appear at -k350, and
> both explosions appear at -k400
>
By the way, I think that this extra hollow requirement is related to the problem
mentioned in a recent thread by Cousin Ricky:
"union disables hollowness"
https://news.povray.org/povray.bugreports/thread/%3C624485e2%241%40news.povray.org%3E/
 
 Post a reply to this message 
 | 
  |