#include "colors.inc" global_settings { assumed_gamma 1.0 } // ---------------------------------------- camera { location <0.0, 0.5, -5.0> look_at <0.0, 0.0, 0.0> } plane { y, -10 pigment {color rgb <0.7,0.5,0.3>} normal{bumps scale 10} } plane { y, 0 pigment {bozo color_map { [0.0 color rgbt <0,0,0,1>] [1.0 color rgbt <0.11, 0.3, 0.4, 0>] } scale 10 } normal{bumps scale <1,1,10>} rotate x*180 translate y*10 } fog { distance 50 color rgb 0 } #declare R1 = seed(3); #declare StrengthVal = 1.0 ; #declare RadiusVal = 1 ; #declare Scale = 0.06 ; #declare LightnStartX = -1 ; #declare LightnStartY = 3 ; #declare LightnStartZ = 5 ; #declare LightnStart = < LightnStartX, LightnStartY, LightnStartZ > ; #declare LightnEndX = 2 ; #declare LightnEndY = -5 ; #declare LightnEndZ = 6 ; #declare LightnEnd = < LightnEndX, LightnEndY, LightnEndZ > ; #declare BlobPosition = LightnStart ; #declare Amp = 0.04 ; // Amplitude of 'waves' #declare AmpBr = 5 ; // how far the branches branch out from the 'stem' //////////////////////////// #declare RB1 = rand(R1) * (LightnStart - LightnEnd)/3 ; #declare RB2 = rand(R1) * (LightnStart - LightnEnd)/3 ; #declare RB3 = rand(R1) * (LightnStart - LightnEnd)/3 ; #declare LightnStart1 = LightnStart - RB1 ; #declare LightnStart2 = LightnStart -((LightnStart - LightnEnd)/3) - RB2 ; #declare LightnStart3 = LightnStart - ((LightnStart - LightnEnd)/3*2)- RB3 ; #declare LightnEnd1 = LightnStart2 ; #declare LightnEnd2 = LightnStart3 ; #declare LightnEnd3 = LightnEnd ; #declare RB1 = rand(R1) * (LightnStart1 - LightnEnd)/3 ; #declare RB2 = rand(R1) * (LightnStart1 - LightnEnd)/3 ; #declare RB3 = rand(R1) * (LightnStart1 - LightnEnd)/3 #declare BranchEnd1 = LightnStart1 -((LightnStart1 - LightnEnd)/3) - RB2 + <((rand(R1)-.5)*AmpBr), 0, ((rand(R1)-.5)*AmpBr) > ; #declare BranchEnd2 = LightnStart2 - ((LightnStart2 - LightnEnd)/3)- RB3 + <((rand(R1)-.5)*AmpBr), 0, ((rand(R1)-.5)*AmpBr) > ; #declare BranchEnd3 = LightnEnd + <((rand(R1)-.5)*AmpBr), 0, ((rand(R1)-.5)*AmpBr) > ; #declare Scale1 = Scale/4 + (2*Scale/4 * rand(R1)) ; #declare Scale2 = Scale/4 + (2*Scale/4 * rand(R1)) ; #declare Scale3 = Scale/4 + (2*Scale/4 * rand(R1)) ; ////////////////////////// #declare Lightning = light_source { 0*x color rgb <0.3,0.5,0.5> looks_like { blob { threshold 0.6 sphere { <0,0,0>, StrengthVal, RadiusVal scale Scale translate LightnStart } ///// Add random blob closer to lightnStart1 ////////////////////////////////////////////////////////////////////////////////// #while (vlength(BlobPosition - LightnStart1) > 0.05) #declare Rx=rand(R1); #declare Ry=rand(R1); #declare Rz=rand(R1); #declare BlobPosition = ( BlobPosition + (<0.5-Rx, 0.5-Ry, 0.5-Rz> * < Amp, Amp, Amp > ) ) ; #if ( ( vlength(BlobPosition - LightnStart1) > vlength (LightnStart - LightnStart1) )) #declare BlobPosition = (BlobPosition - ( 2*(BlobPosition - LightnStart) )) ; #end #declare LightnStart = BlobPosition ; /* Main blobsphere #1 */ sphere { <0,0,0>, StrengthVal, RadiusVal scale Scale translate LightnStart } #end ///// ///// Add random blob closer to lightnEnd1 //////////////////////////////////////////////////////////////////////////// #while (vlength(BlobPosition - LightnEnd1) > 0.05) #declare Rx=rand(R1); #declare Ry=rand(R1); #declare Rz=rand(R1); #declare BlobPosition = ( BlobPosition + (<0.5-Rx, 0.5-Ry, 0.5-Rz> * < Amp, Amp, Amp > ) ) ; #if ( ( vlength(BlobPosition - LightnEnd1) > vlength (LightnStart - LightnEnd1) )) #declare BlobPosition = (BlobPosition - ( 2*(BlobPosition - LightnStart) )) ; #end #declare LightnStart = BlobPosition ; /* Main blobsphere #2 */ sphere { <0,0,0>, StrengthVal, RadiusVal scale Scale translate LightnStart } #declare Scale = Scale*0.9999 ; #end ///// ///// Add random blob closer to lightnEnd2 /////////////////////////////////////////////////////////////////////// #while (vlength(BlobPosition - LightnEnd2) > 0.05) #declare Rx=rand(R1); #declare Ry=rand(R1); #declare Rz=rand(R1); #declare BlobPosition = ( BlobPosition + (<0.5-Rx, 0.5-Ry, 0.5-Rz> * < Amp, Amp, Amp > ) ) ; #if ( ( vlength(BlobPosition - LightnEnd2) > vlength (LightnStart - LightnEnd2) )) #declare BlobPosition = (BlobPosition - ( 2*(BlobPosition - LightnStart) )) ; #end #declare LightnStart = BlobPosition ; /* Main blobsphere #3 */ sphere { <0,0,0>, StrengthVal, RadiusVal scale Scale translate LightnStart } #declare Scale = Scale*0.9999 ; #end ///// ///// Add random blob closer to lightnEnd3 ////////////////////////////////////////////////////////////////////////////// #while (vlength(BlobPosition - LightnEnd3) > 0.05) #declare Rx=rand(R1); #declare Ry=rand(R1); #declare Rz=rand(R1); #declare BlobPosition = ( BlobPosition + (<0.5-Rx, 0.5-Ry, 0.5-Rz> * < Amp, Amp, Amp > ) ) ; #if ( ( vlength(BlobPosition - LightnEnd3) > vlength (LightnStart - LightnEnd3) )) #declare BlobPosition = (BlobPosition - ( 2*(BlobPosition - LightnStart) )) ; #end #declare LightnStart = BlobPosition ; /* Main blobsphere #3 */ sphere { <0,0,0>, StrengthVal, RadiusVal scale Scale translate LightnStart } #declare Scale = Scale*0.9999 ; #end ///// ///////////branches //////////////////////// ///// Add random blob branch # 1 //////////////////////////////////////////////////////////////////////////// #declare BlobPosition = LightnStart1 ; #declare LightnStart = LightnStart1 ; #while (vlength(BlobPosition - BranchEnd1) > 0.05) #declare Rx=rand(R1); #declare Ry=rand(R1); #declare Rz=rand(R1); #declare BlobPosition = ( BlobPosition + (<0.5-Rx, 0.5-Ry, 0.5-Rz> * < Amp, Amp, Amp > ) ) ; #if ( ( vlength(BlobPosition - BranchEnd1) > vlength (LightnStart - BranchEnd1) )) #declare BlobPosition = (BlobPosition - ( 2*(BlobPosition - LightnStart) )) ; #end #declare LightnStart = BlobPosition ; /* Branch blobsphere #1 */ sphere { <0,0,0>, StrengthVal, RadiusVal scale Scale1 translate LightnStart } #declare Scale1 = Scale1*0.999 ; #end ///// ///// Add random blob branch # 2 //////////////////////////////////////////////////////////////////////////// #declare BlobPosition = LightnStart2 ; #declare LightnStart = LightnStart2 ; #while (vlength(BlobPosition - BranchEnd2) > 0.05) #declare Rx=rand(R1); #declare Ry=rand(R1); #declare Rz=rand(R1); #declare BlobPosition = ( BlobPosition + (<0.5-Rx, 0.5-Ry, 0.5-Rz> * < Amp, Amp, Amp > ) ) ; #if ( ( vlength(BlobPosition - BranchEnd2) > vlength (LightnStart - BranchEnd2) )) #declare BlobPosition = (BlobPosition - ( 2*(BlobPosition - LightnStart) )) ; #end #declare LightnStart = BlobPosition ; // Branch blobsphere #2 // sphere { <0,0,0>, StrengthVal, RadiusVal scale Scale2 translate LightnStart } #declare Scale2 = Scale2*0.999 ; #end ///// ///// Add random blob branch # 3 //////////////////////////////////////////////////////////////////////////// #declare BlobPosition = LightnStart3 ; #declare LightnStart = LightnStart3 ; #while (vlength(BlobPosition - BranchEnd3) > 0.05) #declare Rx=rand(R1); #declare Ry=rand(R1); #declare Rz=rand(R1); #declare BlobPosition = ( BlobPosition + (<0.5-Rx, 0.5-Ry, 0.5-Rz> * < Amp, Amp, Amp > ) ) ; #if ( ( vlength(BlobPosition - BranchEnd3) > vlength (LightnStart - BranchEnd3) )) #declare BlobPosition = (BlobPosition - ( 2*(BlobPosition - LightnStart) )) ; #end #declare LightnStart = BlobPosition ; // Branch blobsphere #3 // sphere { <0,0,0>, StrengthVal, RadiusVal scale Scale3 translate LightnStart } #declare Scale3 = Scale3*0.999 ; #end ///// sphere { <0,0,0>, StrengthVal, RadiusVal scale Scale translate LightnEnd } pigment{rgbt 1}interior{media {emission<1,5,5>*10 } }hollow } } } object { Lightning }