Shadertoy is an online community and tool for creating and sharing shaders through WebGL, used for both learning and teaching 3D computer graphics in a web browser.

Shadertoy
Original author(s)Inigo Quilez & Pol Jeremias
Initial releaseFebruary 14, 2013 (2013-02-14)
Stable release
Release 0.8.3 / March 3, 2016
Written inGLSL, JavaScript, PHP
Type3D computer graphics tool community
Websitewww.shadertoy.com

Overview

edit
 
A procedural image made in Shadertoy with distance fields, modeled, shaded, lit and rendered in realtime

Shadertoy is an online community and platform for computer graphics professionals, academics[1] and enthusiasts who share, learn and experiment with rendering techniques and procedural art through GLSL code. There are more than 52 thousand public contributions as of mid-2021 coming from thousands of users. WebGL[2] allows Shadertoy to access the compute power of the GPU to generate procedural art, animation, models, lighting, state based logic and sound.

History

edit

Shadertoy was created by Pol Jeremias and Inigo Quilez in January 2013 and came online in February the same year.

The roots of the effort are in Inigo's "Shadertoy" section [3] in his computer graphics educational website.[4] With the arrival of the initial WebGL implementation by Mozilla's Firefox in 2009, Quilez created the first online live coding environment and curated repository of procedural shaders. This content was donated by 18 authors from the Demoscene and showcased advanced real-time and interactive animations never seen in the Web before, such as raymarched metaballs, fractals and tunnel effects.

After having worked together in several real-time rendering projects together for years, in December 2012 Quilez and Pol decided to create a new Shadertoy site that would follow the tradition of the original Shadertoy page with its demoscene flavored resource and size constrained real-time graphics content, but would add social and community features and embrace an open-source attitude.

The page came out with the live editor, real-time playback, browsing and searching capabilities, tagging and commenting features. Content wise, Shadertoy provided a fixed and limited set of textures for its users to utilize in creative ways. Over the years Shadertoy added extra features, such as webcam and microphone input support, video, music, Virtual Reality rendering and multi-pass rendering.

There are over 31 thousand contributions in total from thousands of users, several of which are referenced in academic papers. Shadertoy also hosts annual competitions and events for its community to enjoy, such as the Siggraph 2015 Shadertoy Competition[5]

Features

edit
  • Editing: syntax highlighted editor with immediate visual feedback
  • Social: commenting on shadertoys, voting (liking)
  • Sharing: permanent URLs, embedded in other websites, private shader sharing
  • Rendering: floating point buffer based multipass and history
  • Media inputs: microphone, webcam, keyboard, mouse, VR HMDs, soundcloud, video, textures

Usage

edit

‹The template Manual is being considered for merging.› 

An example of a procedural animation created in Shadertoy could be the following square tunnel:

void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
    // input: pixel coordinates
    vec2 p = (-iResolution.xy + 2.0 * fragCoord) / iResolution.y;

    // angle of each pixel to the center of the screen
    float a = atan(p.y, p.x);
    
    // modified distance metric
    float r = pow(pow(p.x * p.x, 4.0) + pow(p.y * p.y, 4.0), 1.0/8.0);
    
    // index texture by (animated inverse) radius and angle
    vec2 uv = vec2(1.0 / r + 0.2 * iTime, a);

    // pattern: cosines
    float f = cos(12.0 * uv.x) * cos(6.0 * uv.y);

    // color fetch: palette
    vec3 col = 0.5 + 0.5 * sin(3.1416 * f + vec3(0.0, 0.5, 1.0));
    
    // lighting: darken at the center    
    col = col * r;
    
    // output: pixel color
    fragColor = vec4(col, 1.0);
}

The code above generates the following image:

 

Mentions

edit

Shadertoy is referenced in several sources:

  • NVidia developer blog, Jun 2016, Shadertoy Contest 2016 Announced.[6]
  • Siggraph Real-Time Live!, 2015, an interactive sound visualizing project.[7]
  • Hacker News, 2014, Shadertoy adds procedural GPU-generated music in the browser.[8]
  • Numerical Methods for Ray Tracing Implicitly Defined Surfaces,[9]
  • CS 371 Course at Williams College, 2014, Inspiration for CS 371[10]
  • Real-Time Rendering, Aug 2015, Seven Things for August 20, 2015.[11]

References

edit
  1. ^ McGuire, Morgan. "Midterm Inspiration" (PDF). CS371: Computational Graphics [Fall 2014]. Archived (PDF) from the original on 2020-11-15. Retrieved 29 June 2024.
  2. ^ "Khronos Releases Final WebGL 1.0 Specification". Khronos Group. March 3, 2011. Retrieved 2 June 2012.
  3. ^ "Shader Toy". www.iquilezles.org. Archived from the original on 2019-06-30. Retrieved 2016-08-07.
  4. ^ "Inigo Quilez".
  5. ^ "Siggraph 2015 Shadertoy Competition". Archived from the original on 2016-09-10. Retrieved 2016-08-07.
  6. ^ "NVidia developer blog". 2016. Retrieved 2 June 2016.
  7. ^ "Shadertoy Competition at Siggraph 2015 . Real-Time Live!". Archived from the original on 2016-09-10. Retrieved 2015-08-13.
  8. ^ "Hacker News". ycombinator. Retrieved 2020-08-31.
  9. ^ "Numerical Methods for Ray Tracing Implicitly Defined Surfaces" (PDF). Williams College. Archived from the original (PDF) on 2015-09-06. Retrieved 2014-09-25.
  10. ^ "CS 371" (PDF). Williams College.[dead link]
  11. ^ "Real-Time Rendering - Seven Things for August 20, 2015". realtimerendering.com. 2015. Retrieved 20 August 2015.
edit