Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Reviving the Dream of the 90s with WebGL

Billy Roh
October 04, 2019

Reviving the Dream of the 90s with WebGL

See demos on billyroh.com/screensavers.

The 90s were an exuberant time for technology. This is an attempt to bring back some of that energy by recreating 90s screensavers with WebGL and other modern web technologies.

Billy Roh

October 04, 2019
Tweet

More Decks by Billy Roh

Other Decks in Technology

Transcript

  1. Washington University Computer Science 2012 Facebook Product designer 2013 –

    2014 Opendoor Senior product designer 2014 – 2019
  2. $40,000 raised for non-profits through WaffleJS I helped start a

    creative coding monthly meetup called WaffleJS. We just had our 4-year anniversary!
  3. The transition between this and the thesis is a bit

    rough Beginning of modern computing (Windows)… 90s -> Windows => screensavers Pipes and maze Windows 95 screensavers
  4. 1. Generate matrix 2. Seed starting position and mark 3.

    Choose unoccupied position and mark 4. Repeat visitedMatrix pipePath 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  5. 1. Generate matrix 2. Seed starting position and mark 3.

    Choose unoccupied position and mark 4. Repeat pipeMatrix pipePath 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
  6. 1. Generate matrix 2. Seed starting position and mark 3.

    Choose unoccupied position and mark 4. Repeat pipeMatrix pipePath 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
  7. 1. Generate matrix 2. Seed starting position and mark 3.

    Choose unoccupied position and mark 4. Repeat pipeMatrix pipePath 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0
  8. 1. Generate matrix 2. Seed starting position and mark 3.

    Choose unoccupied position and mark 4. Repeat pipeMatrix pipePath 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1
  9. 1. Generate matrix 2. Seed starting position and mark 3.

    Choose unoccupied position and mark 4. Repeat pipeMatrix pipePath 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1
  10. 1. Generate matrix 2. Seed starting position and mark 3.

    Choose unoccupied position and mark 4. Repeat pipeMatrix pipePath 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1
  11. 1. Generate matrix 2. Seed starting position and mark 3.

    Choose unoccupied position and mark 4. Repeat pipeMatrix pipePath 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1
  12. 1. Generate matrix 2. Seed starting position and mark 3.

    Choose unoccupied position and mark 4. Repeat pipeMatrix pipePath 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  13. Wait between each drawPipe() Iterate through pipePath and wait until

    drawPath is complete in between each iteration
  14. Wait between each drawSegment() Iterate through pipePath and wait until

    drawPath is complete in between each iteration
  15. 1. Create grid from viewport 2. Randomly divide up grid

    into groups 3. Render each group as an SVG
  16. 1. Create grid from viewport 2. Randomly divide up grid

    into groups 3. Render each group as an SVG 2 1 3 4 1 1 2 1 3 3 4 2 1 2 1 2 1 4 4 1 3 1 2 3
  17. 1. Create grid from viewport 2. Randomly divide up grid

    into groups 3. Render each group as an SVG 2 1 3 4 1 1 2 1 3 3 4 2 1 2 1 2 1 4 4 1 3 1 2 3
  18. Render 1,000s of squares individually Cumbersome, slow to render <svg>

    <rect/> <rect/> <rect/> <!— and so on --> </svg>
  19. Render 100s of squares at once with <path> Easier to

    manage, faster to render <svg> <path/> </svg>
  20. Generate the maze Depth-first search Traverse the maze Depth-first search

    Dynamic entities A-frame look-at Dissolve and reset Animation params
  21. Generate the maze Depth-first search Traverse the maze Depth-first search

    Dynamic entities A-frame look-at Dissolve and reset Animation params
  22. Generate the maze Depth-first search Traverse the maze Depth-first search

    Dynamic entities A-frame look-at Dissolve and reset Animation params
  23. Generate the maze Depth-first search Traverse the maze Depth-first search

    Dynamic entities A-frame look-at Dissolve and reset Animation params
  24. Smiley face Stationary Resets maze Rat Traverses maze Has no

    effect Start button Spawns near camera Has no effect
  25. Generate the maze Depth-first search Traverse the maze Depth-first search

    Dynamic entities A-frame look-at Dissolve and reset Animation params
  26. Property to animate e.g. position, scale, rotation Value to animate

    to Easing e.g. easeInOutQuad, easeInOutElastic Animation attribute Can add arbitrary characters after “animation”
  27. The Metropolitan Transportation Authority ran a six- month, $1 million

    trial of the “fertility management bait” in subways in 2013, and said in 2017 that it would expand to additional stations following “promising results.”