Gerard's Blagoblag Projects/Articles Shaders Github Shadertoy OpenProcessing Resume

(Fragment) Shaders

Here you'll find links to several fragment shaders I've written. Click an image to run one in full screen, or the source link to view on Shadertoy with source. Note: these are all tested working on a GTX660 with a first-gen i3 CPU, but some tax it to the limit. Others run just fine on a Lenovo x200. Click with care.

An island with a rock. The first raymarcher of mine to feature independent shading models per material. I'm really glad with how the sand and water turned out. [with source]

This was my very first raymarched shader. It's not very efficient... [with source]

The big thing I learned from this one was how to ID each object in the distance function so I could texture them independently. [with source]

All art in this one is stored within the shader source as calls to a function that serves as a binary search of its parameters. [with source]

This is the camera system I used in Parking Garage, The Skies Are Boxes, and Round Rock Island. It's just Bezier curves. [with source] [camera article]

One day I found that I really wanted to make something with floating cubes. This uses a bespoke global illumination system that really only works because everything is either one voxel away, or not close at all. [with source] [gi article] [ao article]

This was the original direction I was going with what eventually became Round Rock Island. I just didn't like how the beach was very, very, linear. [with source]

A rough-hewn metaball shader. [with source]

I went to the dark side one day, and learned a lot about ray-tracing (not -marching). [with source]

Bitmap text! Encoded in GLSL floats! [with source] [bitmap text article]

Shadertoy recently implemented a multi-framebuffer system, where each framebuffer isn't glClear()'d each frame. That means one can store stuff in 'em between frames! The source is definitely the cool part to this shader. [with source]

A simple application of being able to store stuff in framebuffers. WASD to aim, space to fire. [with source]

Another application of storing state in framebuffers. WASD to move, mouse to look around. [with source]

What if you modulated the distance function along its surface normal based on a noise function? [with source]

Floor() is an excellent function. It gives you cohesive values within a region to feed a random function. Here's an illustration. [with source]

The beach was going to be far more ambitious, with a fence! [with source]

The beach was also going to have a bench too. [with source]

I'm an alumni of Computer Science House at RIT. I made this while I was there to get a handle on fixed step marching and transparent objects in raymarching. [with source]

I grew bored in linear algebra one day and made a per-pixel implementation of Wu's Antialiased line algorithm. [with source]