Ian Ooi

Computer Science · Game Design


About Me

I am a game designer, computer scientist, and game developer, with a fondness for both the realistic and abstract visuals that can be produced by computers. I recently completed my Master's thesis in Computer Science at Rensselaer Polytechnic Institute as part of the co-terminal program, a 4+1 bachelors and masters program. My undergraduate degree is in Computer Science with a dual major in Games and Simulation Arts and Sciences. My research focused on physics-based animation of a humanoid character, as described in more detail here. Other areas of interest include non-photorealistic rendering, realistic lighting techniques, landscape and city generation, participating media, and hardware acceleration of graphics techniques.

Game Design

My game design interests are varied, but I tend to create games with short storylines that incorporate an interesting visual effect, usually with puzzle-based or competitive games with very little story. I enjoy incorporating non-photorealistic techniques into games, such as the watercolor effect used in Mar. In past situations, given a game project to be completed, I have found a way to make the project something I enjoy and will be proud of, whether the genre, style, or type of game is something I normally play or not. One of my ambitions is to create an MMORPG, though I also aspire to work on a competitive game and short story based titles.

Outside of Work

Outside of work I am an avid martial artist and have practiced Tae Kwon Do, Eskrima, and most recently Capeoira. Additionally I amuse myself with origami, playing music on flute and piano, and fiddling with various code projects. I am also a gamer, playing League of Legends consistently, though I have in the past played numerous MMORPGs such as FlyFF, Cabal, Rappelz, Megaten, Lord of the Rings Online, and Guild Wars 2. I have also played a fair share of Team Fortress 2 and Terraria, and made my way through a number of single player games, my favorites of which include Spyro the Dragon, Jak and Daxter, Mirror's Edge, Antichamber, Limbo, Borderlands, Thomas Was Alone, and Dishonored. The list of games I like and have played is constantly growing and changing.
  • Education
    • Rensselaer Polytechnic Institute (expected graduation date Spring 2016)
      • Computer Science M.S.
      • Computer Science B.S.
      • Games and Simulation Arts and Sciences B.S.
    • Honeoye Falls-Lima HS (graduated June 2010)
  • Work Experience
    • FactSet Charting Team Intern (charting infrastructure for desktop applications)
    • Nvidia Corporation Software Engineering Intern (CUDA Tools)
    • Rensselaer Center for Open Source: Open source application development
    • Junior Engineer at Deadmans Productions: Web application and game development
  • Programming Languages
    • C++
    • C#
    • C
    • Python
    • JavaScript
    • GLSL
    • Cg
    • PHP
    • Tcl
    • Haskell
    • Matlab
    • Java
  • Libraries/Technologies/APIs/SDKs
    • OpenGL (Most familiar with 3, inexperienced with compute/tesselation shaders)
    • Direct 3D (DirectX 11)
    • OpenFrameworks
    • WebGL
    • CUDA
    • GLFW
    • pygame
    • Android SDK
    • LaTeX
    • HTML
  • Software
    • Unity 3D
    • LaTeX
    • Maya
    • GIMP
    • Blender
    • Audacity
    • Vim
    • git
    • Perforce
    • gcc/g++
    • clang/clang++
    • gdb, cuda-gdb
    • valgrind
    • nvcc
    • Linux (I have previously used Ubuntu, Linux Mint, OpenSUSE, Fedora, and ArchLinux systems)
    • Windows
    • Visual Studio
  • Computer Science and Programming Experience
    • Physics-based character animation
    • Cloth simulations
    • Fluid simulations
    • Ray tracing
    • Photon mapping
    • Real-Time Hatching (Hoppe et al)
    • Example-based texture synthesis
    • Watercolor rendering
    • Front-end web development
    • Web application development
    • Machine learning techniques including the perceptron, order transforms, data normalization, and neural networks
    • Computer vision techniques including feature detection, matching and object detection, color correction
    • Matting
    • Match moving
    • Web game development
    • Android game development
    • OpenGL and Direct3D drawing
    • Polygon triangulation
  • Game Development Experience
    • 2D/3D physics
    • 2D/3D rendering
    • Lighting and shading
    • Image/Screen-space effects
    • Level design
    • Mechanic design
    • Particle systems
    • UI/Overlays
    • Narrative/Writing
    • Basic environment and terrain modelling
    • Basic character modelling and rigging
    • Basic initial concept art
Note: All games produced with a group unless otherwise noted.

hmm. apparently that was NOT actually the efi partition. how exciting.

on the bright side I am now more familiar with how efi and dual booting with newer windows versions works.

i have sinnedand i have since had to reinstall my os several timesthrilling
Sep 25, 2016
View on Tumblr

I’m playing with GameMaker because it was cheap in the HumbleBundle and there’s no user defined functions? Why you do this? I mean I get that it keeps the language complexity etc. down and you can sort of do it by calling a script from another script but still…

gamemakergame development
Sep 11, 2016
View on Tumblr
Aug 08, 2016
View on Tumblr

Gah, I still can’t get solid testing for safari. Oh well, I’ll just have to keep searching. I thought I had more friends with iphones but I guess not. Maybe the apple store will let me test drive.

Aug 08, 2016
View on Tumblr

There’s some sort of compatibility issue that I don’t know about for iPhone Safari and Chrome and I think desktop Safari that’s preventing my webgl code from drawing. Hmm, I’ll have to find a friend who’s willing to be my tester for a few hours or something.

webglcompatibilitywebdevweb developmentjavascripti thought it was array.from because that was a problem before but i think i fixed thatso apparently i have more errors or non-cross-browser functions that i'm using
Jul 14, 2016
View on Tumblr

So I fixed one problem, but it still squishes.  It just squishes slower now.  Aaaaggggggghhhh.

The problem was that I wasn’t normalizing my input vector for axis/angle rotations.  Well, a problem.

Jul 02, 2016
View on Tumblr

I’m not sure why but if I use my code to rotate a cube for over an hour, 10 degrees at a time around the axis [1, 1, 1] then it eventually becomes a flat hexagon.  I thought that my basis vectors were becoming un-normalized in one of my operations over time due to float error but it still seems to happen.  Grumble.

Jun 29, 2016
View on Tumblr

Posting tons of things today.  Tests for my current implementation of a simple scene graph, mesh object, material object (minus textures), transforms, and simple rendering working so far.  Todo list:

  • Textures (with mipmaps, specifically custom mipmapping and default mipmap generation available)
  • Lights (object storing values with utility functions to set appropriate uniforms on a particular material)
  • Camera class
  • [Future, i.e. it’ll happen someday as a reach goal] Deferred shading pipeline
  • [Future] port projects to webgl for live demos
  • [Future] Game engine features (some basics like adding scripts to objects, a default method of handling updates, time, and of course some physics interaction libraries. hope to eventually have ray tracing/photon mapping/general simulation methods in a separate library)
  • [Future] Create namespace to avoid conflicts with other libraries
  • [Future] Javascript performance tests and optimization (doesn’t seem to be a big deal right now but should test with large numbers of things in the scene. I don’t really know javascript well enough to know about optimizing it, I might be doing some dumb things)
javascriptdemowebglpersonal projects
Jun 16, 2016
View on Tumblr

And now I realize that my stylesheets on my personal site completely mess up lists in embedded tumblr posts. Darn it.  I guess I’m playing with CSS today.

csshardshiplife is hardship
Jun 16, 2016
View on Tumblr
Warwick Rework Idea


You are the alpha wolf, you’re leading your team around the map, howling and charging after enemies, while scenting out prey to catch.


  • Passive - Blood Hunt: When Warwick damages a target, he takes their scent debuffing them with Hunted. Warwick heals for every auto attack against a Hunted target, gaining red-trinket vision of Hunted targets, and dealing bonus damage.
    • You don’t gain full vision, you gain red trinket vision (can see location, but not targetable by allies)
    • WW can target enemies who are affected by Hunted, allies cannot
  • Q - Maul: Dash a short distance to an enemy, slashing all nearby enemies on arrival and healing for a percentage of the damage dealt
    • distance is somewhat like a bear stance on udyr
    • targeted but can be dodged similar to a Fizz Q
    • slash all enemies nearby on arrival
  • W - Leader of the Pack: You and allied champions attack speed relative to the number of hunted enemies in a range.
  • E - Scent of Prey: Passive: Gain movement speed when following a Hunted target.  Allied damage on a target marks them with Injured for a few seconds.  Active: Take the scent of nearby Injured champions in a medium-large range, gaining Blood Hunt and giving nearby allies the benefit of the passive (movement speed towards Hunted targets).
    • Injured champions are champions which have recently taken damage from you or an ally (similar to the Jhin W)
    • Possibly have a limitation similar to Stormraiders, only marks as injured if you deal 20% of their health in under 2s.
  • R - Infinite Duress: Blink to a target enemy, suppressing them and knocking nearby enemies down.
league of legendschampion reworkwarwick
Jun 16, 2016
View on Tumblr