Page 4 of 33

Re: Share a Shader!

Posted: Mon Oct 24, 2011 10:02 pm
by GijsB
aaaaah thank you :D

Re: Share a Shader!

Posted: Wed Oct 26, 2011 1:49 pm
by vrld
RGB to HSL and back utility function:

Code: Select all

// helper function, please ignore
number _hue(number s, number t, number h)
{
	h = mod(h, 1.);
	number six_h = 6.0 * h;
	if (six_h < 1.) return (t-s) * six_h + s;
	if (six_h < 3.) return t;
	if (six_h < 4.) return (t-s) * (4.-six_h) + s;
	return s;
}

// input: vec4(h,s,l,a), with h,s,l,a = 0..1
// output: vec4(r,g,b,a), with r,g,b,a = 0..1
vec4 hsl_to_rgb(vec4 c)
{
	if (c.y == 0)
		return vec4(vec3(c.z), c.a);

	number t = (c.z < .5) ? c.y*c.z + c.z : -c.y*c.z + (c.y+c.z);
	number s = 2.0 * c.z - t;
	return vec4(_hue(s,t,c.x + 1./3.), _hue(s,t,c.x), _hue(s,t,c.x - 1./3.), c.w);
}

// input: vec4(r,g,b,a), with r,g,b,a = 0..1
// output: vec4(h,s,l,a), with h,s,l,a = 0..1
vec4 rgb_to_hsl(vec4 c)
{
	number low = min(c.r, min(c.g, c.b));
	number high = max(c.r, max(c.g, c.b));
	number delta = high - low;
	number sum = high+low;

	vec4 hsl = vec4(.0, .0, .5 * sum, c.a);
	if (delta == .0)
		return hsl;

	hsl.y = (hsl.z < .5) ? delta / sum : delta / (2.0 - sum);

	if (high == c.r)
		hsl.x = (c.g - c.b) / delta;
	else if (high == c.g)
		hsl.x = (c.b - c.r) / delta + 2.0;
	else
		hsl.x = (c.r - c.g) / delta + 4.0;

	hsl.x = mod(hsl.x / 6., 1.);
	return hsl;
}
Can be used to shift the color or desaturate like this:

Code: Select all

function love.load()
	effect = love.graphics.newPixelEffect [[
(...)

extern vec2 color_shift;
vec4 effect(vec4 color, Image tex, vec2 tc, vec2 pc)
{
	color = rgb_to_hsl(Texel(tex, tc));
	color.x += color_shift.x;
	color.y = color_shift.y;
	return hsl_to_rgb(color);
}]]
	effect:send('color_shift', {0,0})
end

function love.update(dt)
	local x = love.mouse.getX() / love.graphics.getWidth()
	local y = love.mouse.getY() / love.graphics.getHeight()
	effect:send('color_shift', {x,y})
end

function love.draw()
	love.graphics.setPixelEffect(effect)
	love.graphics.draw(some_image, 0,0)
end
You can also use it for nice color transitions as the one in the attached .love.

Re: Share a Shader!

Posted: Fri Nov 18, 2011 12:59 pm
by vrld
So there is this gallery of webgl shader experiments, including simple games, and some pretty amazing ray casting thingies.

As it turns out, those demos are pretty easy to port to PixelEffects, so I ported a more simple looking (code wise) demo. I annotated some of the code to make it more understandable.

Re: Share a Shader!

Posted: Fri Nov 18, 2011 1:05 pm
by GijsB
vrld wrote:So there is this gallery of webgl shader experiments, including simple games, and some pretty amazing ray casting thingies.

As it turns out, those demos are pretty easy to port to PixelEffects, so I ported a more simple looking (code wise) demo. I annotated some of the code to make it more understandable.
Oh my god :ultrashocked: thar freaking awesome :neko:

Re: Share a Shader!

Posted: Fri Nov 18, 2011 1:22 pm
by miko
vrld wrote:So there is this gallery of webgl shader experiments, including simple games, and some pretty amazing ray casting thingies.

As it turns out, those demos are pretty easy to port to PixelEffects, so I ported a more simple looking (code wise) demo. I annotated some of the code to make it more understandable.
Intel i810 (GM45), linux, Mesa 7.11, GLX 1.4, GLSL 1.2.
After getting black screen and high CPU usage for some time i get this error:

Code: Select all

Error: [string "graphics.lua"]:1370: Cannot compile shader:
FS compile failed: no register to spill


stack traceback:
	[C]: in function 'newPixelEffect'
	[string "graphics.lua"]:1370: in function 'newPixelEffect'
	main.lua:61: in function 'load'
	[string "boot.lua"]:350: in function <[string "boot.lua"]:348>
	[C]: in function 'xpcall'
Based on this http://lists.freedesktop.org/archives/m ... 29800.html I suppose it is a Mesa/Intel problem :( Anyways, there is more output when run with INTEL_DEBUG=wm:

Code: Select all

GLSL IR for native fragment shader 1:
(
(declare (uniform ) float time)
(declare (out ) vec4 gl_FragColor)
(declare (in ) (array vec4 1) gl_TexCoord)
(function main
  (signature void
    (parameters
    )
    (
      (declare () int i)
      (declare () float t)
      (declare () vec4 c)
      (declare (temporary ) float d_x)
      (declare (temporary ) float d_y)
      (declare (temporary ) float o_x)
      (declare (temporary ) float o_y)
      (declare () float threshold)
      (assign  (x) (var_ref threshold)  (expression float + (expression float * (expression float sin (var_ref time) ) (constant float (0.300000)) ) (constant float (0.500000)) ) ) 
      (declare (temporary ) vec2 channel_expressions)
      (assign  (xy) (var_ref channel_expressions)  (swiz xy (array_ref (var_ref gl_TexCoord) (constant int (0)) ) )) 
      (declare (temporary ) float flattening_tmp_x)
      (declare (temporary ) float flattening_tmp_y)
      (assign  (x) (var_ref flattening_tmp_x)  (expression float + (expression float * (constant float (2.000000)) (swiz x (var_ref channel_expressions) )) (constant float (-1.000000)) ) ) 
      (assign  (x) (var_ref flattening_tmp_y)  (expression float + (expression float * (constant float (2.000000)) (swiz y (var_ref channel_expressions) )) (constant float (-1.000000)) ) ) 
      (assign  (x) (var_ref o_x)  (var_ref flattening_tmp_x) ) 
      (assign  (x) (var_ref o_y)  (expression float + (expression float * (var_ref flattening_tmp_y) (constant float (1.250000)) ) (constant float (-0.300000)) ) ) 
      (assign  (x) (var_ref d_x)  (expression float * (expression float + (var_ref flattening_tmp_x) (expression float * (expression float cos (var_ref time) ) (constant float (0.300000)) ) ) (constant float (0.015625)) ) ) 
      (assign  (x) (var_ref d_y)  (expression float * (var_ref flattening_tmp_y) (constant float (0.015625)) ) ) 
      (assign  (xyzw) (var_ref c)  (constant vec4 (0.000000 0.000000 0.000000 0.000000)) ) 
      (assign  (x) (var_ref t)  (constant float (0.000000)) ) 
      (assign  (x) (var_ref i)  (constant int (0)) ) 
      (loop ((declare () int i@2)) ((constant int (0)) ) ((constant int (75)) ) ((constant int (1)) ) (
        (declare (temporary ) float flattening_tmp_x@3)
        (declare (temporary ) float flattening_tmp_y@4)
        (declare (temporary ) float flattening_tmp_z)
        (assign  (x) (var_ref flattening_tmp_x@3)  (expression float + (var_ref o_x) (expression float * (var_ref d_x) (var_ref t) ) ) ) 
        (assign  (x) (var_ref flattening_tmp_y@4)  (expression float + (var_ref o_y) (expression float * (var_ref d_y) (var_ref t) ) ) ) 
        (assign  (x) (var_ref flattening_tmp_z)  (expression float * (constant float (0.015625)) (var_ref t) ) ) 
        (declare () float f)
        (declare (temporary ) float flattening_tmp_x@5)
        (declare (temporary ) float flattening_tmp_y@6)
        (declare (temporary ) float flattening_tmp_z@7)
        (assign  (x) (var_ref flattening_tmp_x@5)  (expression float + (var_ref flattening_tmp_x@3) (expression float neg (expression float + (expression float cos (var_ref time) ) (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) ) ) ) 
        (assign  (x) (var_ref flattening_tmp_y@6)  (expression float + (var_ref flattening_tmp_y@4) (constant float (-0.300000)) ) ) 
        (assign  (x) (var_ref flattening_tmp_z@7)  (expression float + (var_ref flattening_tmp_z) (expression float neg (expression float + (constant float (2.000000)) (expression float * (expression float cos (expression float * (var_ref time) (constant float (0.500000)) ) ) (constant float (0.500000)) ) ) ) ) ) 
        (declare (temporary ) float flattening_tmp_x@8)
        (declare (temporary ) float flattening_tmp_y@9)
        (declare (temporary ) float flattening_tmp_z@10)
        (assign  (x) (var_ref flattening_tmp_x@8)  (expression float + (var_ref flattening_tmp_x@3) (expression float neg (expression float neg (expression float cos (expression float * (var_ref time) (constant float (0.700000)) ) ) ) ) ) ) 
        (assign  (x) (var_ref flattening_tmp_y@9)  (expression float + (var_ref flattening_tmp_y@4) (constant float (-0.300000)) ) ) 
        (assign  (x) (var_ref flattening_tmp_z@10)  (expression float + (var_ref flattening_tmp_z) (expression float neg (expression float + (constant float (2.000000)) (expression float sin (expression float * (var_ref time) (constant float (0.500000)) ) ) ) ) ) ) 
        (assign  (x) (var_ref f)  (expression float * (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@7) (var_ref flattening_tmp_z@7) ) (expression float + (expression float * (var_ref flattening_tmp_y@6) (var_ref flattening_tmp_y@6) ) (expression float * (var_ref flattening_tmp_x@5) (var_ref flattening_tmp_x@5) ) ) ) ) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@10) (var_ref flattening_tmp_z@10) ) (expression float + (expression float * (var_ref flattening_tmp_y@9) (var_ref flattening_tmp_y@9) ) (expression float * (var_ref flattening_tmp_x@8) (var_ref flattening_tmp_x@8) ) ) ) ) ) ) 
        (declare (temporary ) float flattening_tmp_x@11)
        (declare (temporary ) float flattening_tmp_y@12)
        (declare (temporary ) float flattening_tmp_z@13)
        (assign  (x) (var_ref flattening_tmp_x@11)  (expression float + (var_ref flattening_tmp_x@3) (expression float neg (expression float * (expression float neg (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) (constant float (0.500000)) ) ) ) ) 
        (assign  (x) (var_ref flattening_tmp_y@12)  (expression float + (var_ref flattening_tmp_y@4) (expression float neg (expression float sin (var_ref time) ) ) ) ) 
        (assign  (x) (var_ref flattening_tmp_z@13)  (expression float + (var_ref flattening_tmp_z) (constant float (-2.000000)) ) ) 
        (assign  (x) (var_ref f)  (expression float * (var_ref f) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@13) (var_ref flattening_tmp_z@13) ) (expression float + (expression float * (var_ref flattening_tmp_y@12) (var_ref flattening_tmp_y@12) ) (expression float * (var_ref flattening_tmp_x@11) (var_ref flattening_tmp_x@11) ) ) ) ) ) ) 
        (declare (temporary ) float assignment_tmp)
        (assign  (x) (var_ref assignment_tmp)  (expression float * (var_ref f) (expression float + (expression float + (expression float * (expression float cos (var_ref flattening_tmp_y@4) ) (expression float cos (var_ref flattening_tmp_x@3) ) ) (constant float (-0.100000)) ) (expression float neg (expression float * (expression float * (expression float * (expression float cos (expression float + (expression float * (var_ref flattening_tmp_z) (constant float (7.000000)) ) (expression float * (var_ref time) (constant float (7.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_x@3) (constant float (3.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_y@4) (constant float (4.000000)) ) ) ) (constant float (0.100000)) ) ) ) ) ) 
        (assign  (x) (var_ref f)  (var_ref assignment_tmp) ) 
        (if (expression bool < (var_ref assignment_tmp) (var_ref threshold) ) (
          (declare () vec3 n)
          (declare () int j)
          (assign  (x) (var_ref t)  (expression float + (var_ref t) (constant float (-5.000000)) ) ) 
          (assign  (x) (var_ref j)  (constant int (0)) ) 
          (loop () () () () (
            (if (expression bool >= (var_ref j) (constant int (5)) ) (
              break
            )
            ())

            (declare (temporary ) float flattening_tmp_x@14)
            (declare (temporary ) float flattening_tmp_y@15)
            (declare (temporary ) float flattening_tmp_z@16)
            (assign  (x) (var_ref flattening_tmp_x@14)  (expression float + (var_ref o_x) (expression float * (var_ref d_x) (var_ref t) ) ) ) 
            (assign  (x) (var_ref flattening_tmp_y@15)  (expression float + (var_ref o_y) (expression float * (var_ref d_y) (var_ref t) ) ) ) 
            (assign  (x) (var_ref flattening_tmp_z@16)  (expression float * (constant float (0.015625)) (var_ref t) ) ) 
            (declare () float f@17)
            (declare (temporary ) float flattening_tmp_x@18)
            (declare (temporary ) float flattening_tmp_y@19)
            (declare (temporary ) float flattening_tmp_z@20)
            (assign  (x) (var_ref flattening_tmp_x@18)  (expression float + (var_ref flattening_tmp_x@14) (expression float neg (expression float + (expression float cos (var_ref time) ) (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) ) ) ) 
            (assign  (x) (var_ref flattening_tmp_y@19)  (expression float + (var_ref flattening_tmp_y@15) (constant float (-0.300000)) ) ) 
            (assign  (x) (var_ref flattening_tmp_z@20)  (expression float + (var_ref flattening_tmp_z@16) (expression float neg (expression float + (constant float (2.000000)) (expression float * (expression float cos (expression float * (var_ref time) (constant float (0.500000)) ) ) (constant float (0.500000)) ) ) ) ) ) 
            (declare (temporary ) float flattening_tmp_x@21)
            (declare (temporary ) float flattening_tmp_y@22)
            (declare (temporary ) float flattening_tmp_z@23)
            (assign  (x) (var_ref flattening_tmp_x@21)  (expression float + (var_ref flattening_tmp_x@14) (expression float neg (expression float neg (expression float cos (expression float * (var_ref time) (constant float (0.700000)) ) ) ) ) ) ) 
            (assign  (x) (var_ref flattening_tmp_y@22)  (expression float + (var_ref flattening_tmp_y@15) (constant float (-0.300000)) ) ) 
            (assign  (x) (var_ref flattening_tmp_z@23)  (expression float + (var_ref flattening_tmp_z@16) (expression float neg (expression float + (constant float (2.000000)) (expression float sin (expression float * (var_ref time) (constant float (0.500000)) ) ) ) ) ) ) 
            (assign  (x) (var_ref f@17)  (expression float * (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@20) (var_ref flattening_tmp_z@20) ) (expression float + (expression float * (var_ref flattening_tmp_y@19) (var_ref flattening_tmp_y@19) ) (expression float * (var_ref flattening_tmp_x@18) (var_ref flattening_tmp_x@18) ) ) ) ) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@23) (var_ref flattening_tmp_z@23) ) (expression float + (expression float * (var_ref flattening_tmp_y@22) (var_ref flattening_tmp_y@22) ) (expression float * (var_ref flattening_tmp_x@21) (var_ref flattening_tmp_x@21) ) ) ) ) ) ) 
            (declare (temporary ) float flattening_tmp_x@24)
            (declare (temporary ) float flattening_tmp_y@25)
            (declare (temporary ) float flattening_tmp_z@26)
            (assign  (x) (var_ref flattening_tmp_x@24)  (expression float + (var_ref flattening_tmp_x@14) (expression float neg (expression float * (expression float neg (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) (constant float (0.500000)) ) ) ) ) 
            (assign  (x) (var_ref flattening_tmp_y@25)  (expression float + (var_ref flattening_tmp_y@15) (expression float neg (expression float sin (var_ref time) ) ) ) ) 
            (assign  (x) (var_ref flattening_tmp_z@26)  (expression float + (var_ref flattening_tmp_z@16) (constant float (-2.000000)) ) ) 
            (assign  (x) (var_ref f@17)  (expression float * (var_ref f@17) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@26) (var_ref flattening_tmp_z@26) ) (expression float + (expression float * (var_ref flattening_tmp_y@25) (var_ref flattening_tmp_y@25) ) (expression float * (var_ref flattening_tmp_x@24) (var_ref flattening_tmp_x@24) ) ) ) ) ) ) 
            (declare (temporary ) float assignment_tmp@27)
            (assign  (x) (var_ref assignment_tmp@27)  (expression float * (var_ref f@17) (expression float + (expression float + (expression float * (expression float cos (var_ref flattening_tmp_y@15) ) (expression float cos (var_ref flattening_tmp_x@14) ) ) (constant float (-0.100000)) ) (expression float neg (expression float * (expression float * (expression float * (expression float cos (expression float + (expression float * (var_ref flattening_tmp_z@16) (constant float (7.000000)) ) (expression float * (var_ref time) (constant float (7.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_x@14) (constant float (3.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_y@15) (constant float (4.000000)) ) ) ) (constant float (0.100000)) ) ) ) ) ) 
            (assign  (x) (var_ref f@17)  (var_ref assignment_tmp@27) ) 
            (if (expression bool < (var_ref assignment_tmp@27) (var_ref threshold) ) (
              break
            )
            ())

            (assign  (x) (var_ref t)  (expression float + (var_ref t) (constant float (1.000000)) ) ) 
            (assign  (x) (var_ref j)  (expression int + (var_ref j) (constant int (1)) ) ) 
          ))

          (assign  (xyz) (var_ref n)  (constant vec3 (0.000000 0.000000 0.000000)) ) 
          (declare (temporary ) float flattening_tmp_x@28)
          (declare (temporary ) float flattening_tmp_y@29)
          (declare (temporary ) float flattening_tmp_z@30)
          (assign  (x) (var_ref flattening_tmp_x@28)  (expression float + (var_ref o_x) (expression float * (var_ref d_x) (var_ref t) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@29)  (expression float + (var_ref o_y) (expression float * (var_ref d_y) (var_ref t) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@30)  (expression float * (constant float (0.015625)) (var_ref t) ) ) 
          (declare () float f@31)
          (declare (temporary ) float flattening_tmp_x@32)
          (declare (temporary ) float flattening_tmp_y@33)
          (declare (temporary ) float flattening_tmp_z@34)
          (assign  (x) (var_ref flattening_tmp_x@32)  (expression float + (var_ref flattening_tmp_x@28) (expression float neg (expression float + (expression float cos (var_ref time) ) (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@33)  (expression float + (var_ref flattening_tmp_y@29) (constant float (-0.300000)) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@34)  (expression float + (var_ref flattening_tmp_z@30) (expression float neg (expression float + (constant float (2.000000)) (expression float * (expression float cos (expression float * (var_ref time) (constant float (0.500000)) ) ) (constant float (0.500000)) ) ) ) ) ) 
          (declare (temporary ) float flattening_tmp_x@35)
          (declare (temporary ) float flattening_tmp_y@36)
          (declare (temporary ) float flattening_tmp_z@37)
          (assign  (x) (var_ref flattening_tmp_x@35)  (expression float + (var_ref flattening_tmp_x@28) (expression float neg (expression float neg (expression float cos (expression float * (var_ref time) (constant float (0.700000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@36)  (expression float + (var_ref flattening_tmp_y@29) (constant float (-0.300000)) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@37)  (expression float + (var_ref flattening_tmp_z@30) (expression float neg (expression float + (constant float (2.000000)) (expression float sin (expression float * (var_ref time) (constant float (0.500000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref f@31)  (expression float * (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@34) (var_ref flattening_tmp_z@34) ) (expression float + (expression float * (var_ref flattening_tmp_y@33) (var_ref flattening_tmp_y@33) ) (expression float * (var_ref flattening_tmp_x@32) (var_ref flattening_tmp_x@32) ) ) ) ) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@37) (var_ref flattening_tmp_z@37) ) (expression float + (expression float * (var_ref flattening_tmp_y@36) (var_ref flattening_tmp_y@36) ) (expression float * (var_ref flattening_tmp_x@35) (var_ref flattening_tmp_x@35) ) ) ) ) ) ) 
          (declare (temporary ) float flattening_tmp_x@38)
          (declare (temporary ) float flattening_tmp_y@39)
          (declare (temporary ) float flattening_tmp_z@40)
          (assign  (x) (var_ref flattening_tmp_x@38)  (expression float + (var_ref flattening_tmp_x@28) (expression float neg (expression float * (expression float neg (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) (constant float (0.500000)) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@39)  (expression float + (var_ref flattening_tmp_y@29) (expression float neg (expression float sin (var_ref time) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@40)  (expression float + (var_ref flattening_tmp_z@30) (constant float (-2.000000)) ) ) 
          (assign  (x) (var_ref f@31)  (expression float * (var_ref f@31) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@40) (var_ref flattening_tmp_z@40) ) (expression float + (expression float * (var_ref flattening_tmp_y@39) (var_ref flattening_tmp_y@39) ) (expression float * (var_ref flattening_tmp_x@38) (var_ref flattening_tmp_x@38) ) ) ) ) ) ) 
          (declare (temporary ) float assignment_tmp@41)
          (assign  (x) (var_ref assignment_tmp@41)  (expression float * (var_ref f@31) (expression float + (expression float + (expression float * (expression float cos (var_ref flattening_tmp_y@29) ) (expression float cos (var_ref flattening_tmp_x@28) ) ) (constant float (-0.100000)) ) (expression float neg (expression float * (expression float * (expression float * (expression float cos (expression float + (expression float * (var_ref flattening_tmp_z@30) (constant float (7.000000)) ) (expression float * (var_ref time) (constant float (7.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_x@28) (constant float (3.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_y@29) (constant float (4.000000)) ) ) ) (constant float (0.100000)) ) ) ) ) ) 
          (assign  (x) (var_ref f@31)  (var_ref assignment_tmp@41) ) 
          (declare (temporary ) float flattening_tmp_x@42)
          (declare (temporary ) float flattening_tmp_y@43)
          (declare (temporary ) float flattening_tmp_z@44)
          (assign  (x) (var_ref flattening_tmp_x@42)  (expression float + (expression float + (var_ref o_x) (expression float * (var_ref d_x) (var_ref t) ) ) (constant float (0.010000)) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@43)  (expression float + (var_ref o_y) (expression float * (var_ref d_y) (var_ref t) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@44)  (expression float * (constant float (0.015625)) (var_ref t) ) ) 
          (declare () float f@45)
          (declare (temporary ) float flattening_tmp_x@46)
          (declare (temporary ) float flattening_tmp_y@47)
          (declare (temporary ) float flattening_tmp_z@48)
          (assign  (x) (var_ref flattening_tmp_x@46)  (expression float + (var_ref flattening_tmp_x@42) (expression float neg (expression float + (expression float cos (var_ref time) ) (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@47)  (expression float + (var_ref flattening_tmp_y@43) (constant float (-0.300000)) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@48)  (expression float + (var_ref flattening_tmp_z@44) (expression float neg (expression float + (constant float (2.000000)) (expression float * (expression float cos (expression float * (var_ref time) (constant float (0.500000)) ) ) (constant float (0.500000)) ) ) ) ) ) 
          (declare (temporary ) float flattening_tmp_x@49)
          (declare (temporary ) float flattening_tmp_y@50)
          (declare (temporary ) float flattening_tmp_z@51)
          (assign  (x) (var_ref flattening_tmp_x@49)  (expression float + (var_ref flattening_tmp_x@42) (expression float neg (expression float neg (expression float cos (expression float * (var_ref time) (constant float (0.700000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@50)  (expression float + (var_ref flattening_tmp_y@43) (constant float (-0.300000)) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@51)  (expression float + (var_ref flattening_tmp_z@44) (expression float neg (expression float + (constant float (2.000000)) (expression float sin (expression float * (var_ref time) (constant float (0.500000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref f@45)  (expression float * (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@48) (var_ref flattening_tmp_z@48) ) (expression float + (expression float * (var_ref flattening_tmp_y@47) (var_ref flattening_tmp_y@47) ) (expression float * (var_ref flattening_tmp_x@46) (var_ref flattening_tmp_x@46) ) ) ) ) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@51) (var_ref flattening_tmp_z@51) ) (expression float + (expression float * (var_ref flattening_tmp_y@50) (var_ref flattening_tmp_y@50) ) (expression float * (var_ref flattening_tmp_x@49) (var_ref flattening_tmp_x@49) ) ) ) ) ) ) 
          (declare (temporary ) float flattening_tmp_x@52)
          (declare (temporary ) float flattening_tmp_y@53)
          (declare (temporary ) float flattening_tmp_z@54)
          (assign  (x) (var_ref flattening_tmp_x@52)  (expression float + (var_ref flattening_tmp_x@42) (expression float neg (expression float * (expression float neg (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) (constant float (0.500000)) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@53)  (expression float + (var_ref flattening_tmp_y@43) (expression float neg (expression float sin (var_ref time) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@54)  (expression float + (var_ref flattening_tmp_z@44) (constant float (-2.000000)) ) ) 
          (assign  (x) (var_ref f@45)  (expression float * (var_ref f@45) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@54) (var_ref flattening_tmp_z@54) ) (expression float + (expression float * (var_ref flattening_tmp_y@53) (var_ref flattening_tmp_y@53) ) (expression float * (var_ref flattening_tmp_x@52) (var_ref flattening_tmp_x@52) ) ) ) ) ) ) 
          (declare (temporary ) float assignment_tmp@55)
          (assign  (x) (var_ref assignment_tmp@55)  (expression float * (var_ref f@45) (expression float + (expression float + (expression float * (expression float cos (var_ref flattening_tmp_y@43) ) (expression float cos (var_ref flattening_tmp_x@42) ) ) (constant float (-0.100000)) ) (expression float neg (expression float * (expression float * (expression float * (expression float cos (expression float + (expression float * (var_ref flattening_tmp_z@44) (constant float (7.000000)) ) (expression float * (var_ref time) (constant float (7.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_x@42) (constant float (3.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_y@43) (constant float (4.000000)) ) ) ) (constant float (0.100000)) ) ) ) ) ) 
          (assign  (x) (var_ref f@45)  (var_ref assignment_tmp@55) ) 
          (assign  (x) (var_ref n)  (expression float + (var_ref assignment_tmp@41) (expression float neg (var_ref assignment_tmp@55) ) ) ) 
          (declare (temporary ) float flattening_tmp_x@56)
          (declare (temporary ) float flattening_tmp_y@57)
          (declare (temporary ) float flattening_tmp_z@58)
          (assign  (x) (var_ref flattening_tmp_x@56)  (expression float + (var_ref o_x) (expression float * (var_ref d_x) (var_ref t) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@57)  (expression float + (var_ref o_y) (expression float * (var_ref d_y) (var_ref t) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@58)  (expression float * (constant float (0.015625)) (var_ref t) ) ) 
          (declare () float f@59)
          (declare (temporary ) float flattening_tmp_x@60)
          (declare (temporary ) float flattening_tmp_y@61)
          (declare (temporary ) float flattening_tmp_z@62)
          (assign  (x) (var_ref flattening_tmp_x@60)  (expression float + (var_ref flattening_tmp_x@56) (expression float neg (expression float + (expression float cos (var_ref time) ) (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@61)  (expression float + (var_ref flattening_tmp_y@57) (constant float (-0.300000)) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@62)  (expression float + (var_ref flattening_tmp_z@58) (expression float neg (expression float + (constant float (2.000000)) (expression float * (expression float cos (expression float * (var_ref time) (constant float (0.500000)) ) ) (constant float (0.500000)) ) ) ) ) ) 
          (declare (temporary ) float flattening_tmp_x@63)
          (declare (temporary ) float flattening_tmp_y@64)
          (declare (temporary ) float flattening_tmp_z@65)
          (assign  (x) (var_ref flattening_tmp_x@63)  (expression float + (var_ref flattening_tmp_x@56) (expression float neg (expression float neg (expression float cos (expression float * (var_ref time) (constant float (0.700000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@64)  (expression float + (var_ref flattening_tmp_y@57) (constant float (-0.300000)) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@65)  (expression float + (var_ref flattening_tmp_z@58) (expression float neg (expression float + (constant float (2.000000)) (expression float sin (expression float * (var_ref time) (constant float (0.500000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref f@59)  (expression float * (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@62) (var_ref flattening_tmp_z@62) ) (expression float + (expression float * (var_ref flattening_tmp_y@61) (var_ref flattening_tmp_y@61) ) (expression float * (var_ref flattening_tmp_x@60) (var_ref flattening_tmp_x@60) ) ) ) ) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@65) (var_ref flattening_tmp_z@65) ) (expression float + (expression float * (var_ref flattening_tmp_y@64) (var_ref flattening_tmp_y@64) ) (expression float * (var_ref flattening_tmp_x@63) (var_ref flattening_tmp_x@63) ) ) ) ) ) ) 
          (declare (temporary ) float flattening_tmp_x@66)
          (declare (temporary ) float flattening_tmp_y@67)
          (declare (temporary ) float flattening_tmp_z@68)
          (assign  (x) (var_ref flattening_tmp_x@66)  (expression float + (var_ref flattening_tmp_x@56) (expression float neg (expression float * (expression float neg (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) (constant float (0.500000)) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@67)  (expression float + (var_ref flattening_tmp_y@57) (expression float neg (expression float sin (var_ref time) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@68)  (expression float + (var_ref flattening_tmp_z@58) (constant float (-2.000000)) ) ) 
          (assign  (x) (var_ref f@59)  (expression float * (var_ref f@59) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@68) (var_ref flattening_tmp_z@68) ) (expression float + (expression float * (var_ref flattening_tmp_y@67) (var_ref flattening_tmp_y@67) ) (expression float * (var_ref flattening_tmp_x@66) (var_ref flattening_tmp_x@66) ) ) ) ) ) ) 
          (declare (temporary ) float assignment_tmp@69)
          (assign  (x) (var_ref assignment_tmp@69)  (expression float * (var_ref f@59) (expression float + (expression float + (expression float * (expression float cos (var_ref flattening_tmp_y@57) ) (expression float cos (var_ref flattening_tmp_x@56) ) ) (constant float (-0.100000)) ) (expression float neg (expression float * (expression float * (expression float * (expression float cos (expression float + (expression float * (var_ref flattening_tmp_z@58) (constant float (7.000000)) ) (expression float * (var_ref time) (constant float (7.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_x@56) (constant float (3.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_y@57) (constant float (4.000000)) ) ) ) (constant float (0.100000)) ) ) ) ) ) 
          (assign  (x) (var_ref f@59)  (var_ref assignment_tmp@69) ) 
          (declare (temporary ) float flattening_tmp_x@70)
          (declare (temporary ) float flattening_tmp_y@71)
          (declare (temporary ) float flattening_tmp_z@72)
          (assign  (x) (var_ref flattening_tmp_x@70)  (expression float + (var_ref o_x) (expression float * (var_ref d_x) (var_ref t) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@71)  (expression float + (expression float + (var_ref o_y) (expression float * (var_ref d_y) (var_ref t) ) ) (constant float (0.010000)) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@72)  (expression float * (constant float (0.015625)) (var_ref t) ) ) 
          (declare () float f@73)
          (declare (temporary ) float flattening_tmp_x@74)
          (declare (temporary ) float flattening_tmp_y@75)
          (declare (temporary ) float flattening_tmp_z@76)
          (assign  (x) (var_ref flattening_tmp_x@74)  (expression float + (var_ref flattening_tmp_x@70) (expression float neg (expression float + (expression float cos (var_ref time) ) (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@75)  (expression float + (var_ref flattening_tmp_y@71) (constant float (-0.300000)) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@76)  (expression float + (var_ref flattening_tmp_z@72) (expression float neg (expression float + (constant float (2.000000)) (expression float * (expression float cos (expression float * (var_ref time) (constant float (0.500000)) ) ) (constant float (0.500000)) ) ) ) ) ) 
          (declare (temporary ) float flattening_tmp_x@77)
          (declare (temporary ) float flattening_tmp_y@78)
          (declare (temporary ) float flattening_tmp_z@79)
          (assign  (x) (var_ref flattening_tmp_x@77)  (expression float + (var_ref flattening_tmp_x@70) (expression float neg (expression float neg (expression float cos (expression float * (var_ref time) (constant float (0.700000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@78)  (expression float + (var_ref flattening_tmp_y@71) (constant float (-0.300000)) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@79)  (expression float + (var_ref flattening_tmp_z@72) (expression float neg (expression float + (constant float (2.000000)) (expression float sin (expression float * (var_ref time) (constant float (0.500000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref f@73)  (expression float * (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@76) (var_ref flattening_tmp_z@76) ) (expression float + (expression float * (var_ref flattening_tmp_y@75) (var_ref flattening_tmp_y@75) ) (expression float * (var_ref flattening_tmp_x@74) (var_ref flattening_tmp_x@74) ) ) ) ) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@79) (var_ref flattening_tmp_z@79) ) (expression float + (expression float * (var_ref flattening_tmp_y@78) (var_ref flattening_tmp_y@78) ) (expression float * (var_ref flattening_tmp_x@77) (var_ref flattening_tmp_x@77) ) ) ) ) ) ) 
          (declare (temporary ) float flattening_tmp_x@80)
          (declare (temporary ) float flattening_tmp_y@81)
          (declare (temporary ) float flattening_tmp_z@82)
          (assign  (x) (var_ref flattening_tmp_x@80)  (expression float + (var_ref flattening_tmp_x@70) (expression float neg (expression float * (expression float neg (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) (constant float (0.500000)) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@81)  (expression float + (var_ref flattening_tmp_y@71) (expression float neg (expression float sin (var_ref time) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@82)  (expression float + (var_ref flattening_tmp_z@72) (constant float (-2.000000)) ) ) 
          (assign  (x) (var_ref f@73)  (expression float * (var_ref f@73) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@82) (var_ref flattening_tmp_z@82) ) (expression float + (expression float * (var_ref flattening_tmp_y@81) (var_ref flattening_tmp_y@81) ) (expression float * (var_ref flattening_tmp_x@80) (var_ref flattening_tmp_x@80) ) ) ) ) ) ) 
          (declare (temporary ) float assignment_tmp@83)
          (assign  (x) (var_ref assignment_tmp@83)  (expression float * (var_ref f@73) (expression float + (expression float + (expression float * (expression float cos (var_ref flattening_tmp_y@71) ) (expression float cos (var_ref flattening_tmp_x@70) ) ) (constant float (-0.100000)) ) (expression float neg (expression float * (expression float * (expression float * (expression float cos (expression float + (expression float * (var_ref flattening_tmp_z@72) (constant float (7.000000)) ) (expression float * (var_ref time) (constant float (7.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_x@70) (constant float (3.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_y@71) (constant float (4.000000)) ) ) ) (constant float (0.100000)) ) ) ) ) ) 
          (assign  (x) (var_ref f@73)  (var_ref assignment_tmp@83) ) 
          (assign  (y) (var_ref n)  (expression float + (var_ref assignment_tmp@69) (expression float neg (var_ref assignment_tmp@83) ) ) ) 
          (declare (temporary ) float flattening_tmp_x@84)
          (declare (temporary ) float flattening_tmp_y@85)
          (declare (temporary ) float flattening_tmp_z@86)
          (assign  (x) (var_ref flattening_tmp_x@84)  (expression float + (var_ref o_x) (expression float * (var_ref d_x) (var_ref t) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@85)  (expression float + (var_ref o_y) (expression float * (var_ref d_y) (var_ref t) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@86)  (expression float * (constant float (0.015625)) (var_ref t) ) ) 
          (declare () float f@87)
          (declare (temporary ) float flattening_tmp_x@88)
          (declare (temporary ) float flattening_tmp_y@89)
          (declare (temporary ) float flattening_tmp_z@90)
          (assign  (x) (var_ref flattening_tmp_x@88)  (expression float + (var_ref flattening_tmp_x@84) (expression float neg (expression float + (expression float cos (var_ref time) ) (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@89)  (expression float + (var_ref flattening_tmp_y@85) (constant float (-0.300000)) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@90)  (expression float + (var_ref flattening_tmp_z@86) (expression float neg (expression float + (constant float (2.000000)) (expression float * (expression float cos (expression float * (var_ref time) (constant float (0.500000)) ) ) (constant float (0.500000)) ) ) ) ) ) 
          (declare (temporary ) float flattening_tmp_x@91)
          (declare (temporary ) float flattening_tmp_y@92)
          (declare (temporary ) float flattening_tmp_z@93)
          (assign  (x) (var_ref flattening_tmp_x@91)  (expression float + (var_ref flattening_tmp_x@84) (expression float neg (expression float neg (expression float cos (expression float * (var_ref time) (constant float (0.700000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@92)  (expression float + (var_ref flattening_tmp_y@85) (constant float (-0.300000)) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@93)  (expression float + (var_ref flattening_tmp_z@86) (expression float neg (expression float + (constant float (2.000000)) (expression float sin (expression float * (var_ref time) (constant float (0.500000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref f@87)  (expression float * (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@90) (var_ref flattening_tmp_z@90) ) (expression float + (expression float * (var_ref flattening_tmp_y@89) (var_ref flattening_tmp_y@89) ) (expression float * (var_ref flattening_tmp_x@88) (var_ref flattening_tmp_x@88) ) ) ) ) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@93) (var_ref flattening_tmp_z@93) ) (expression float + (expression float * (var_ref flattening_tmp_y@92) (var_ref flattening_tmp_y@92) ) (expression float * (var_ref flattening_tmp_x@91) (var_ref flattening_tmp_x@91) ) ) ) ) ) ) 
          (declare (temporary ) float flattening_tmp_x@94)
          (declare (temporary ) float flattening_tmp_y@95)
          (declare (temporary ) float flattening_tmp_z@96)
          (assign  (x) (var_ref flattening_tmp_x@94)  (expression float + (var_ref flattening_tmp_x@84) (expression float neg (expression float * (expression float neg (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) (constant float (0.500000)) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@95)  (expression float + (var_ref flattening_tmp_y@85) (expression float neg (expression float sin (var_ref time) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@96)  (expression float + (var_ref flattening_tmp_z@86) (constant float (-2.000000)) ) ) 
          (assign  (x) (var_ref f@87)  (expression float * (var_ref f@87) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@96) (var_ref flattening_tmp_z@96) ) (expression float + (expression float * (var_ref flattening_tmp_y@95) (var_ref flattening_tmp_y@95) ) (expression float * (var_ref flattening_tmp_x@94) (var_ref flattening_tmp_x@94) ) ) ) ) ) ) 
          (declare (temporary ) float assignment_tmp@97)
          (assign  (x) (var_ref assignment_tmp@97)  (expression float * (var_ref f@87) (expression float + (expression float + (expression float * (expression float cos (var_ref flattening_tmp_y@85) ) (expression float cos (var_ref flattening_tmp_x@84) ) ) (constant float (-0.100000)) ) (expression float neg (expression float * (expression float * (expression float * (expression float cos (expression float + (expression float * (var_ref flattening_tmp_z@86) (constant float (7.000000)) ) (expression float * (var_ref time) (constant float (7.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_x@84) (constant float (3.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_y@85) (constant float (4.000000)) ) ) ) (constant float (0.100000)) ) ) ) ) ) 
          (assign  (x) (var_ref f@87)  (var_ref assignment_tmp@97) ) 
          (declare (temporary ) float flattening_tmp_x@98)
          (declare (temporary ) float flattening_tmp_y@99)
          (declare (temporary ) float flattening_tmp_z@100)
          (assign  (x) (var_ref flattening_tmp_x@98)  (expression float + (var_ref o_x) (expression float * (var_ref d_x) (var_ref t) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@99)  (expression float + (var_ref o_y) (expression float * (var_ref d_y) (var_ref t) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@100)  (expression float + (expression float * (constant float (0.015625)) (var_ref t) ) (constant float (0.010000)) ) ) 
          (declare () float f@101)
          (declare (temporary ) float flattening_tmp_x@102)
          (declare (temporary ) float flattening_tmp_y@103)
          (declare (temporary ) float flattening_tmp_z@104)
          (assign  (x) (var_ref flattening_tmp_x@102)  (expression float + (var_ref flattening_tmp_x@98) (expression float neg (expression float + (expression float cos (var_ref time) ) (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@103)  (expression float + (var_ref flattening_tmp_y@99) (constant float (-0.300000)) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@104)  (expression float + (var_ref flattening_tmp_z@100) (expression float neg (expression float + (constant float (2.000000)) (expression float * (expression float cos (expression float * (var_ref time) (constant float (0.500000)) ) ) (constant float (0.500000)) ) ) ) ) ) 
          (declare (temporary ) float flattening_tmp_x@105)
          (declare (temporary ) float flattening_tmp_y@106)
          (declare (temporary ) float flattening_tmp_z@107)
          (assign  (x) (var_ref flattening_tmp_x@105)  (expression float + (var_ref flattening_tmp_x@98) (expression float neg (expression float neg (expression float cos (expression float * (var_ref time) (constant float (0.700000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@106)  (expression float + (var_ref flattening_tmp_y@99) (constant float (-0.300000)) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@107)  (expression float + (var_ref flattening_tmp_z@100) (expression float neg (expression float + (constant float (2.000000)) (expression float sin (expression float * (var_ref time) (constant float (0.500000)) ) ) ) ) ) ) 
          (assign  (x) (var_ref f@101)  (expression float * (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@104) (var_ref flattening_tmp_z@104) ) (expression float + (expression float * (var_ref flattening_tmp_y@103) (var_ref flattening_tmp_y@103) ) (expression float * (var_ref flattening_tmp_x@102) (var_ref flattening_tmp_x@102) ) ) ) ) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@107) (var_ref flattening_tmp_z@107) ) (expression float + (expression float * (var_ref flattening_tmp_y@106) (var_ref flattening_tmp_y@106) ) (expression float * (var_ref flattening_tmp_x@105) (var_ref flattening_tmp_x@105) ) ) ) ) ) ) 
          (declare (temporary ) float flattening_tmp_x@108)
          (declare (temporary ) float flattening_tmp_y@109)
          (declare (temporary ) float flattening_tmp_z@110)
          (assign  (x) (var_ref flattening_tmp_x@108)  (expression float + (var_ref flattening_tmp_x@98) (expression float neg (expression float * (expression float neg (expression float sin (expression float * (var_ref time) (constant float (0.200000)) ) ) ) (constant float (0.500000)) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@109)  (expression float + (var_ref flattening_tmp_y@99) (expression float neg (expression float sin (var_ref time) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@110)  (expression float + (var_ref flattening_tmp_z@100) (constant float (-2.000000)) ) ) 
          (assign  (x) (var_ref f@101)  (expression float * (var_ref f@101) (expression float sqrt (expression float + (expression float * (var_ref flattening_tmp_z@110) (var_ref flattening_tmp_z@110) ) (expression float + (expression float * (var_ref flattening_tmp_y@109) (var_ref flattening_tmp_y@109) ) (expression float * (var_ref flattening_tmp_x@108) (var_ref flattening_tmp_x@108) ) ) ) ) ) ) 
          (declare (temporary ) float assignment_tmp@111)
          (assign  (x) (var_ref assignment_tmp@111)  (expression float * (var_ref f@101) (expression float + (expression float + (expression float * (expression float cos (var_ref flattening_tmp_y@99) ) (expression float cos (var_ref flattening_tmp_x@98) ) ) (constant float (-0.100000)) ) (expression float neg (expression float * (expression float * (expression float * (expression float cos (expression float + (expression float * (var_ref flattening_tmp_z@100) (constant float (7.000000)) ) (expression float * (var_ref time) (constant float (7.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_x@98) (constant float (3.000000)) ) ) ) (expression float cos (expression float * (var_ref flattening_tmp_y@99) (constant float (4.000000)) ) ) ) (constant float (0.100000)) ) ) ) ) ) 
          (assign  (x) (var_ref f@101)  (var_ref assignment_tmp@111) ) 
          (assign  (z) (var_ref n)  (expression float + (var_ref assignment_tmp@97) (expression float neg (var_ref assignment_tmp@111) ) ) ) 
          (declare (temporary ) float flattening_tmp_y@112)
          (declare (temporary ) float flattening_tmp_z@113)
          (declare (temporary ) float channel_expressions@114)
          (assign  (x) (var_ref channel_expressions@114)  (expression float rsq (expression float + (expression float * (swiz z (var_ref n) )(swiz z (var_ref n) )) (expression float + (expression float * (swiz y (var_ref n) )(swiz y (var_ref n) )) (expression float * (swiz x (var_ref n) )(swiz x (var_ref n) )) ) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@112)  (expression float * (swiz y (var_ref n) )(var_ref channel_expressions@114) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@113)  (expression float * (swiz z (var_ref n) )(var_ref channel_expressions@114) ) ) 
          (assign  (x) (var_ref n)  (expression float * (swiz x (var_ref n) )(var_ref channel_expressions@114) ) ) 
          (assign  (y) (var_ref n)  (var_ref flattening_tmp_y@112) ) 
          (assign  (z) (var_ref n)  (var_ref flattening_tmp_z@113) ) 
          (declare (temporary ) float flattening_tmp_y@115)
          (declare (temporary ) float flattening_tmp_z@116)
          (declare (temporary ) float flattening_tmp_w)
          (declare (temporary ) float channel_expressions@117)
          (assign  (x) (var_ref channel_expressions@117)  (expression float + (expression float max (expression float * (constant float (-0.500000)) (var_ref flattening_tmp_z@113) ) (constant float (0.000000)) ) (expression float * (expression float max (expression float + (expression float * (constant float (0.500000)) (var_ref flattening_tmp_z@113) ) (expression float * (constant float (-0.500000)) (var_ref flattening_tmp_y@112) ) ) (constant float (0.000000)) ) (constant float (0.500000)) ) ) ) 
          (assign  (x) (var_ref flattening_tmp_y@115)  (expression float + (swiz y (var_ref c) )(var_ref channel_expressions@117) ) ) 
          (assign  (x) (var_ref flattening_tmp_z@116)  (expression float + (swiz z (var_ref c) )(var_ref channel_expressions@117) ) ) 
          (assign  (x) (var_ref flattening_tmp_w)  (expression float + (swiz w (var_ref c) )(var_ref channel_expressions@117) ) ) 
          (assign  (x) (var_ref c)  (expression float + (swiz x (var_ref c) )(var_ref channel_expressions@117) ) ) 
          (assign  (y) (var_ref c)  (var_ref flattening_tmp_y@115) ) 
          (assign  (z) (var_ref c)  (var_ref flattening_tmp_z@116) ) 
          (assign  (w) (var_ref c)  (var_ref flattening_tmp_w) ) 
          break
        )
        ())

        (assign  (x) (var_ref t)  (expression float + (var_ref t) (constant float (5.000000)) ) ) 
        (assign  (x) (var_ref i)  (expression int + (var_ref i) (constant int (1)) ) ) 
      ))

      (assign  (x) (var_ref gl_FragColor)  (expression float + (swiz x (var_ref c) )(expression float * (var_ref t) (constant float (0.002500)) ) ) ) 
      (assign  (y) (var_ref gl_FragColor)  (expression float + (swiz y (var_ref c) )(expression float * (var_ref t) (constant float (0.005000)) ) ) ) 
      (assign  (z) (var_ref gl_FragColor)  (expression float + (swiz z (var_ref c) )(expression float * (var_ref t) (constant float (0.012500)) ) ) ) 
      (assign  (w) (var_ref gl_FragColor)  (expression float + (swiz w (var_ref c) )(expression float * (var_ref t) (constant float (0.025000)) ) ) ) 
    ))

)


)

FS compile failed: no register to spill

Error: [string "graphics.lua"]:1370: Cannot compile shader:
FS compile failed: no register to spill


stack traceback:
	[C]: in function 'newPixelEffect'
	[string "graphics.lua"]:1370: in function 'newPixelEffect'
	main.lua:61: in function 'load'
	[string "boot.lua"]:350: in function <[string "boot.lua"]:348>
	[C]: in function 'xpcall'
pre-fp:
# Fragment Program/Shader 0
  0: TXP TEMP[0], INPUT[4], texture[0], 2D;
  1: MUL OUTPUT[2], TEMP[0], STATE[0];
  2: END

pass_fp:
  0: PIXELXY TEMP[97].xy, FILE15[30], UNDEFINED[0], UNDEFINED[0];
  1: DELTAXY TEMP[96].xy, TEMP[97], FILE15[30], UNDEFINED[0];
  2: PIXELW TEMP[98].w, FILE15[0], TEMP[96], UNDEFINED[0];
  3: PINTERP INPUT[4], FILE15[4], TEMP[96], TEMP[98];
  4: TEX TEMP[0], INPUT[4], texture[0], 2D;
  5: MUL OUTPUT[2], TEMP[0], STATE[0];
  6: FB_WRITE  ???, OUTPUT[2], FILE15[30], OUTPUT[0];

pass0:
[r0,r1,#,#].xy = PIXELXY
[r2,r3,#,#].xy = DELTAXY [r0,r1,undef,undef]
[#,#,#,r4].w = PIXELW [i0,undef,undef,undef] [r2,r3,undef,undef]
[r5,r6,r7,r8] = PINTERP [i4,undef,undef,undef] [r2,r3,undef,undef] [undef,undef,undef,r4]
[r9,r10,r11,r12] = TEX [r5,r6,r7,r8]
[r13,r14,r15,r16] = MUL [r9,r10,r11,r12] [c0,c0->0.4,c0->0.8,c0->0.12]
[#,#,#,#]. = FB_WRITE [r13,r14,r15,r16] [d0,d0,d0,d0] [undef,undef,undef,undef]

pass1:
[r0,r1,#,#].xy = PIXELXY
[r2,r3,#,#].xy = DELTAXY [r0,r1,%,%]
[#,#,#,r4].w = PIXELW [i0,%,%,%] [r2,r3,%,%]
[r5,r6,#,#].xy = PINTERP [i4,%,%,%] [r2,r3,%,%] [%,%,%,r4]
[r9,r10,r11,r12] = TEX [r5,r6,%,%]
[r13,r14,r15,r16] = MUL [r9,r10,r11,r12] [c0,c0->0.4,c0->0.8,c0->0.12]
[#,#,#,#]. = FB_WRITE [r13,r14,r15,r16] [d0,d0,d0,d0] [%,%,%,%]

pass2:
[r0,r1,#,#].xy = PIXELXY
[r2,r3,#,#].xy = DELTAXY [r0,r1,%,%]
[#,#,#,r4].w = PIXELW [i0,%,%,%] [r2,r3,%,%]
[r5,r6,#,#].xy = PINTERP [i4,%,%,%] [r2,r3,%,%] [%,%,%,r4]
[r9,r10,r11,r12] = TEX [r5,r6,%,%]
[r13,r14,r15,r16] = MUL [r9,r10,r11,r12] [c0,c0->0.4,c0->0.8,c0->0.12]
[#,#,#,#]. = FB_WRITE [r13,r14,r15,r16] [d0,d0,d0,d0] [%,%,%,%]

pass2/done:
[vec8,vec10,#,#].xy = PIXELXY
[vec12,vec14,#,#].xy = DELTAXY [vec8,vec10,%,%]
[#,#,#,vec8].w = PIXELW [vec4,%,%,%] [vec12,vec14,%,%]
[vec4,vec10,#,#].xy = PINTERP [vec6,%,%,%] [vec12,vec14,%,%] [%,%,%,vec8]
[vec12,vec14,vec16,vec18] = TEX [vec4,vec10,%,%]
[vec4,vec6,vec8,vec10] = MUL [vec12,vec14,vec16,vec18] [scl2.0,scl2.1,scl2.2,scl2.3]
[#,#,#,#]. = FB_WRITE [vec4,vec6,vec8,vec10] [vec0,vec0,vec0,vec0] [%,%,%,%]

wm-native:
add(16)         g8<1>UW         g1.4<2,4,0>UW   0x10101010V     { align1 };
add(16)         g10<1>UW        g1.5<2,4,0>UW   0x11001100V     { align1 };
add(16)         g12<1>F         g8<8,8,1>UW     -g1<0,1,0>F     { align1 compr };
add(16)         g14<1>F         g10<8,8,1>UW    -g1.1<0,1,0>F   { align1 compr };
line(16)        null            g5.4<0,1,0>F    g12<8,8,1>F     { align1 compr };
mac(16)         m2<1>F          g5.5<0,1,0>F    g14<8,8,1>F     { align1 compr };
send(8) 2       g8<1>F          null
                math inv mlen 1 rlen 1                          { align1 };
send(8) 3       g9<1>F          null
                math inv mlen 1 rlen 1                          { align1 sechalf };
line(16)        null            g6<0,1,0>F      g12<8,8,1>F     { align1 compr };
mac(16)         g4<1>F          g6.1<0,1,0>F    g14<8,8,1>F     { align1 compr };
line(16)        null            g6.4<0,1,0>F    g12<8,8,1>F     { align1 compr };
mac(16)         g10<1>F         g6.5<0,1,0>F    g14<8,8,1>F     { align1 compr };
mul(16)         g4<1>F          g4<8,8,1>F      g8<8,8,1>F      { align1 compr };
mul(16)         g10<1>F         g10<8,8,1>F     g8<8,8,1>F      { align1 compr };
mov(16)         m2<1>F          g4<8,8,1>F                      { align1 compr };
mov(16)         m4<1>F          g10<8,8,1>F                     { align1 compr };
send(16) 1      g12<1>UW        g0<8,8,1>UW
                sampler (9, 0, F) mlen 5 rlen 8                 { align1 };
mul(16)         g4<1>F          g12<8,8,1>F     g2<0,1,0>F      { align1 compr };
mul(16)         g6<1>F          g14<8,8,1>F     g2.1<0,1,0>F    { align1 compr };
mul(16)         g8<1>F          g16<8,8,1>F     g2.2<0,1,0>F    { align1 compr };
mul(16)         g10<1>F         g18<8,8,1>F     g2.3<0,1,0>F    { align1 compr };
mov.sat(16)     m2<1>F          g4<8,8,1>F                      { align1 compr4 };
mov.sat(16)     m3<1>F          g6<8,8,1>F                      { align1 compr4 };
mov.sat(16)     m4<1>F          g8<8,8,1>F                      { align1 compr4 };
mov.sat(16)     m5<1>F          g10<8,8,1>F                     { align1 compr4 };
mov(8)          m1<1>F          g1<8,8,1>F                      { align1 nomask };
send(16) 0      null            g0<8,8,1>UW
                write (0, 8, 4, 0) mlen 10 rlen 0               { align1 EOT };

Re: Share a Shader!

Posted: Fri Nov 18, 2011 6:29 pm
by RPG
vrld wrote:So there is this gallery of webgl shader experiments, including simple games, and some pretty amazing ray casting thingies.

As it turns out, those demos are pretty easy to port to PixelEffects, so I ported a more simple looking (code wise) demo. I annotated some of the code to make it more understandable.
Maybe, ray tracing?
Ray cast - from light to camera.
Ray trace - from camera to light.

See also "shader toy"

Re: Share a Shader!

Posted: Fri Nov 18, 2011 6:44 pm
by GijsB
RPG wrote:
vrld wrote:So there is this gallery of webgl shader experiments, including simple games, and some pretty amazing ray casting thingies.

As it turns out, those demos are pretty easy to port to PixelEffects, so I ported a more simple looking (code wise) demo. I annotated some of the code to make it more understandable.
Maybe, ray tracing?
Ray cast - from light to camera.
Ray trace - from camera to light.

See also "shader toy"
someone should really explain the real diffrence to me ._.

Re: Share a Shader!

Posted: Fri Nov 18, 2011 6:46 pm
by slime
You would pick the metaball one. :P
I put one of the tunnel ones in LÖVE a while ago, but it was a straight port (overwriting the EffectCodeToGLSL function).

Re: Share a Shader!

Posted: Fri Nov 18, 2011 10:31 pm
by vrld
RPG wrote:Maybe, ray tracing?
Ray cast - from light to camera.
Ray trace - from camera to light.
"Ray casting" is the general term for algorithms involving rays that intersect surfaces.
Because the use of a distance field/isosurface, it's not really ray tracing either. It's impossible (or at least very difficult) to analytically calculate the intersection of an isosurface with a ray, so they sample some points on the ray (the outer loop) and test if the point lies on or behind the surface (h(o + d*t) < threshold). This method is known as ray marching.
The thing I don't quite understand is how one conceives the formula of the distance field:

Code: Select all

number h(vec3 q)
{
	number f = distance(q, vec3(cos(time)+sin(time*.2), .3, 2.+cos(time*.5)*.5) );
	f *= distance( q, vec3(-cos(time*.7), .3,2. + sin(time*.5)) );
	f *= distance( q, vec3(-sin(time*.2) * .5, sin(time), 2.));
	f *= cos(q.y)*cos(q.x) - .1 - cos(q.z*7. + time*7.) * cos(q.x*3.) * cos(q.y*4.) * .1; // in particular this line
	return f;
}

Re: Share a Shader!

Posted: Sat Nov 19, 2011 12:00 am
by RPG
vrld wrote: The thing I don't quite understand is how one conceives the formula of the distance field:

Code: Select all

number h(vec3 q)
{
	number f = distance(q, vec3(cos(time)+sin(time*.2), .3, 2.+cos(time*.5)*.5) );
	f *= distance( q, vec3(-cos(time*.7), .3,2. + sin(time*.5)) );
	f *= distance( q, vec3(-sin(time*.2) * .5, sin(time), 2.));
	f *= cos(q.y)*cos(q.x) - .1 - cos(q.z*7. + time*7.) * cos(q.x*3.) * cos(q.y*4.) * .1; // in particular this line
	return f;
}
I think this code represents geometric primitives, that can be calculated mathematically (and intersection with the ray is solvable).
But ray tracing absolutely useless in games:)