volume noisysmoke param float density 60 param float integstart 0 param float integend 100 param float stepsize 0.1 param float debug 0 param float use_lighting 1 param float use_noise 1 param color scatter 1 1 1 param float octaves 3 param float freq 1 param float smokevary 1 param float lightscale 15 local string $_str_0 "shader" local string $_str_1 "current" local string $_str_2 "nsteps = %f, t1 = %f, end = %f\n" local string $_str_3 " Cv = %c, Ov = %c\n" local point Worigin 0 0 0 local vector incident 0 0 0 local point origin 0 0 0 local vector IN 0 0 0 local vector WIN 0 0 0 local float d 0 local float tau 0 local color Cv 0 0 0 local color Ov 0 0 0 local color dC 0 0 0 local color dO 0 0 0 local float ss 0 local float dtau 0 local float last_dtau 0 local float end 0 local float nsteps 0 local color li 0 0 0 local color last_li 0 0 0 local color lighttau 0 0 0 local point PP 0 0 0 local point PW 0 0 0 local point Psmoke 0 0 0 local color scat 0 0 0 local float f 0 local float smoke 0 local float i 0 initcode 11 return code return_area pushv I subV P popv Worigin pushv I pushs $_str_0 vtransforms popv incident pushv Worigin pushs $_str_0 transforms popv origin pushif 0 cset Cv pushif 0 cset Ov pushif 0 popf nsteps pushif 0.0001 pushf integend pushv incident length fmin subff popf end pushf stepsize random mulff addF integstart popf d pushf end pushf d lt ifz 0 pushv incident normalize popv IN pushv IN pushs $_str_1 pushs $_str_0 vtransform2s popv WIN pushv IN mulFv d addV origin popv PP pushv WIN mulFv d addV Worigin popv PW pushif 0 pushf use_lighting gt ifz 2 pushif 0 cset li pushv PW illuminance_start label 4 illuminance1 5 pushc Cl addC li popc li jump 4 label 5 jump 3 label 2 pushif 1 cset li label 3 pushif 0 pushf use_noise fnef ifz 6 pushf freq pushv PP mulvf popv Psmoke pushif 1 pushv Psmoke noisev pushif 2 mulff subff popf smoke pushif 0.01 pushif 2 pushc li comp pushif 1 pushc li comp pushif 0 pushc li comp addff addff gt ifz 8 pushif 1 popf f pushif 1 popf i label 10 pushf octaves pushf i lt ifz 12 pushif 0.5 mulF f popf f pushif 2 pushv Psmoke mulvf popv Psmoke pushif 1 pushv Psmoke noisev pushif 2 mulff subff mulF f addF smoke popf smoke label 11 pushif 1 addF i popf i jump 10 label 12 label 8 label 9 pushf smoke mulF smokevary pushif 1 pushif -1 smoothstep mulF density popf dtau jump 7 label 6 cpFF density dtau label 7 pushf d subF end pushf stepsize fmin popf ss pushf ss addF d popf d pushif 1 addF nsteps popf nsteps label 13 pushf end pushf d le ifz 15 cpFF dtau last_dtau cpCC li last_li pushv IN mulFv d addV origin popv PP pushv WIN mulFv d addV Worigin popv PW pushif 0 pushf use_lighting gt ifz 16 pushif 0 cset li pushv PW illuminance_start label 18 illuminance1 19 pushc Cl addC li popc li jump 18 label 19 jump 17 label 16 pushif 1 cset li label 17 pushif 0 pushf use_noise fnef ifz 20 pushf freq pushv PP mulvf popv Psmoke pushif 1 pushv Psmoke noisev pushif 2 mulff subff popf smoke pushif 0.01 pushif 2 pushc li comp pushif 1 pushc li comp pushif 0 pushc li comp addff addff gt ifz 22 pushif 1 popf f pushif 1 popf i label 24 pushf octaves pushf i lt ifz 26 pushif 0.5 mulF f popf f pushif 2 pushv Psmoke mulvf popv Psmoke pushif 1 pushv Psmoke noisev pushif 2 mulff subff mulF f addF smoke popf smoke label 25 pushif 1 addF i popf i jump 24 label 26 label 22 label 23 pushf smoke mulF smokevary pushif 1 pushif -1 smoothstep mulF density popf dtau jump 21 label 20 cpFF density dtau label 21 pushf last_dtau addF dtau pushf ss pushif 0.5 mulff mulff popf tau pushf last_dtau pushc last_li mulcf pushf dtau pushc li mulcf addcc pushf ss pushif 0.5 mulff mulfc popc lighttau pushc scatter pushf tau negf mulfc popc scat pushif 2 pushc scat comp exp pushif 1 pushc scat comp exp pushif 0 pushc scat comp exp pushif 1 ftoc subcc popc dO pushc dO mulC lighttau popc dC pushc dC pushc Ov pushif 1 ftoc subcc mulcc addC Cv popc Cv pushc dO pushc Ov pushif 1 ftoc subcc mulcc addC Ov popc Ov pushif 0.005 pushf d subF end pushf ss fmin fmax popf ss pushf ss addF d popf d pushif 1 addF nsteps popf nsteps label 14 jump 13 label 15 label 0 label 1 pushc Ci pushc Ov pushif 1 ftoc subcc mulcc pushc Cv mulFv lightscale addcc popc Ci pushc Oi pushc Ov pushif 1 ftoc subcc mulcc addC Ov popc Oi pushif 0 pushf debug gt ifz 27 pushf end pushf integstart pushf nsteps pushs $_str_2 printf pushc Ov pushc Cv pushs $_str_3 printf label 27 label 28 return