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.
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
Avye the Gatekeeper of the Void

Primary Role: Mage

Secondary Role: Support


Trapped in the darkness Avye fought to survive, accepting the Void into herself while trying to maintain some sense of self. Part of her now lives in the Void, as much as the Void lives in her. Like her father Kassadin, she now walks the Void, opening doorways for herself to travel through. She too holds a hatred for many of the horrors that live in the dark, but whether through the influence of the Void on her mind or through some camaraderie shared with them, she has some respect and even affection for a chosen few of the monsters. Now she acts as a gatekeeper, passing those she chooses between the realms while shutting out the rest, and inflicting the black exile she suffered on anything that stands in her way.


Angry due to her long imprisonment, she hates most Voidborn, but seems to like smaller voidborn like voidlings and more animalistic ones like the Xer'Sai. She blames Malzahar for his direct involvement in her imprisonment in the void as well as her father for failing to use his power and knowledge of the void to help free her. Unlike her father, she isn’t as driven to stop all of the voidborn, but instead seeks only to do as she pleases and to keep those voidborn she dislikes out, while allowing those she likes passage to and from their realm. She is sure of her capability to control passage between the realms, but it isn’t entirely within her control.


  • Passive - Void Traveller: Avye can enter her portals (choose one, then the other, draw in a line towards the one you want), becoming untargetable for a brief period (switches aggro with the entry portal).
  • Q - Devouring Portal: Activate a portal, drawing enemies towards it slowly and dealing damage.  After a short time the portal explodes dealing damage to all nearby enemies.
    • Applies to all portals in the network, with each additional portal affected dealing 30%(?) additional damage (additively applied) to the normal distributed damage over the network
    • Enemies can run away from the portals but are slowed.  If they stop they are drawn towards the center slowly.
  • W - Gateway: Spawns a portal with 3 health points (ward style). Portals regenerate health.  Using an ability on the portal distributes the damage to all nearby networked portals. Deals 1 damage to the portal targeted.
    • Enemies can kill portals using abilities or auto attacks.
    • Portals deal a maximum percentage of the damage used on one distributed over the entire network (80/90/100/110/120% combined)(?)
    • Portals become networked within 500(?) units of each other
    • Portal damage reduced if distributing an area of effect ability (you can’t multiply the Anivia ult by 2)
    • Portals are only affected by a single ability once (can’t get double distribution of an area of effect spell)
  • E - Displace: After a brief channel, open a passage between two void portals, swapping the units on one with the units on the other
    • Can combine with Q to pull enemies onto a portal (or keep them there) then displace them to another location
    • Swapping two portals can change which is the primary portal affected by Devouring Portal
    • Applies as a blink
  • R - Enter the Void: Block an area off and pull it into the void.  Placing a portal on one side of the region results in a portal on the other side of the region as well.
    • Portals placed automatically spawn around the edge of the region, just inside or just outside the blocked off area in a ring, choosing the closest location to the portal you place.
    • Enemy and ally abilities (excluding Avye’s portals), basic attacks, actives etc. cannot cross the boundary.
    • trying to create a similar style to the poppy ultimate in a bard-like skillshot (but shorter range), separate a fight into two smaller skirmishes, try to position it to work in your favor
    • recast to dissolve it early
    • Holds similar utility to a Jarvan ultimate but can’t be escaped after it hits and has a travel time before the projectile hits and actually makes the unescapable area. Also does not apply aoe damage like a Jarvan ultimate

The idea here is that she has very high utility, enabling strong aoe damage, but only if she’s allowed to entrench herself in an area and build up a sort of “lair,” sort of like Heimerdinger but harder to catch.  Very much a zone control mage, owning an area, thriving in lane and siege settings, but struggling somewhat with quick rotations, similar to Caitlyn with her traps.

There’s definitely still some questions I have to answer here still, for example what happens with a bouncing ability (e.g. Fiddlesticks E, Brand R), and what happens with a trap (e.g. Teemo R).  For the first question I think that it doesn’t bounce to a portal, you can only hit a portal by targeting it and then it won’t bounce to portals.  It could be a cool strategy though to bounce an ability between portals to hit the entire enemy team with the bounces though.  For the second question I think the answer is it distributes the damage like any ground targeted AOE ability, so if Jhin and Avye stack the portals and traps, the trap damage goes off through the network.  Single target traps like Caitlyn W don’t trigger the portals however, and a Shaco W couldn’t deal damage through the network at all.  There’s definitely issues but I’ll work them out as I think of them.  Feel free to contact me with feedback, I’m always looking to improve.

league of legendschampion designspersonal projectsi made this before but it was terrible but i think i've fixed most of the issues i had before nowthe numbers are pretty arbitrarypaper kitthere's definitely still some issues herei really think the portals distributing damage is probably super opalso the distribution of damage will be extremely difficult with some things
Jun 16, 2016
View on Tumblr
Current Ian:This seems like a problem for future Ian.
Future Ian:I hate myself.
I know it's going to happenbut oh well i'm doing it anywayin this case it is leaving any forward lighting up to the user to handle on my little graphics librarywhen i make the deferred shading pipeline i can make some auto-handle optionsand i think i'll make utility functions to make handling lights a little more straightforward for the userbut i don't think i'm going to go as far as say unity and just have lights handle themselves magically
Jun 16, 2016
View on Tumblr