Code golfing a tiny demo using maths and a pinch of insanity

(blog.pkh.me)

18 points | by ux 12 hours ago ago

7 comments

  • recursive 2 hours ago

    I don't know much about 3d stuff or shaders or this language, but I know golf, and I think I found a byte to save.

        w = g-g*exp(-mix(h*3e2,d*2.5,a=h<.001?0.:1.))
        w = g-g/exp(mix(h*3e2,d*2.5,a=h<.001?0.:1.))
    • ux 2 hours ago

      Hey, thank you, that's a nice one. I added the change to the Shadertoy version with your credit. I will add a note/update on the blog and demo page later. Thanks again :)

      • zahlman 2 hours ago

        Is it actually necessary to specify `a` as a floating-point literal? Will it not be implicitly converted?

        • ux an hour ago

          Yeah. If you want implicit conversion, you need to specify a constructor like float(cond), but that would be longer than the ternary form. I thought about using a vec3() but vec3(...).x is still too long and using the vec3 directly doesn't look viable. Declaring a bool adds more characters as well. There is also step() giving the same number of chars: a=step(.001,h), but it's not more optimal: https://iquilezles.org/articles/gpuconditionals/

          If you see a way to make it shorter, feel free to share :)

  • bangaladore 2 hours ago

    The top demo doesn't function on Edge or Chrome on Windows due to too many webgl contexts.

    > WARNING: Too many active WebGL contexts. Oldest context will be lost.

    • ux 2 hours ago

      Ah, someone reported this to me today, but I must admit I have no idea how to address the issue. Currently the canvas animations are stopped when out of context, but yeah they have to be loaded.

      The code on the blog is pretty simple and naive (I'm not a webdev): https://github.com/ubitux/scripts/blob/main/share/blog/shade...

      Any suggestion on how to address the issue is welcome.

      Note: I don't have any Windows machine to test with

      • timojaask an hour ago

        Similar issue on iOS Safari: all examples work except for the very first one.