PORTFOLIO
Technical Artist / VFX | IGT
Money Mania: Fortune Coin
CONTRIBUTION
This was one of many games in a series I worked on that used 3 monitors, one of which had a horizontal strip of symbols that continued across a bank of slot machines. I wrote the initial script for the horizontal symbol strip, then the engineer polished it. I formatted and imported graphics, and authored particle systems. I also authored animations for message boxes, transitions, and sheens. I wrote all shaders for any effect seen in the game.
DEMONSTRATED CORE TECHNICAL SKILLS
-
Asset integration and optimization.
-
Shader development.
-
Particle systems and effects.
-
Animators.
-
Scripting.
BIGGEST HURDLES
-
By far the biggest hurdle was the iterative updates after we were on game 4 since it meant updating art and effects for 4 games.
-
The second hurdle was the multi monitors themselves. We had to be smart about the number of GameObjects being drawn.
Jurassic Park: Wild Excursion
CONTRIBUTION
This game featured a 3D background and 2D foreground. I set up dynamic lighting, post process raindrop effects on the monitor, and lightning. You can't see it in this video, but I created a water ripple post effect on the player panel that would leave a wake behind your finger when dragging it on the screen.
DEMONSTRATED CORE TECHNICAL SKILLS
-
Asset integration and optimization.
-
Shader development.
-
Particle systems and effects.
-
Mixing 2D and 3D cameras.
-
Post effects: blur, refraction, bloom.
-
Animations.
BIGGEST HURDLES
-
We had some issues with "perspective" cameras that made it difficult to get one of the bonuses to look just right.
Avatar: Treasures of Pandora
CONTRIBUTION
This was the very first Unity game I worked on. We went all out on this one since we were all trying to make a splash. I enabled bloom, created a refraction shader, and enabled shadows. I imported all the assets into the game, created animations, and optimized where I could.
DEMONSTRATED CORE TECHNICAL SKILLS
-
Asset integration and optimization.
-
Shader development.
-
Particle systems and effects.
-
Mixing 2D and 3D cameras.
-
Post effects: blur, refraction, bloom.
-
Animations.
-
Scripting.
BIGGEST HURDLES
-
Frame rate was the biggest hurdle for this one since we were on old hardware and we had bloom and shadows turned on. However, we still met the target FPS.
Technical Artist / Programmer | Little Dreamer Games
GOB 'n' GOB
GOAL
Push myself to the limit and create a VR game from scratch and apply all my programming and technical art knowledge in the process.
PROBLEM
VR hardware is slow, so the game will have to look simple in nature.
SOLUTION
Use an art style that is basic, yet attractive (which is subjective :)). The game MUST have bloom, so everything else has to be trimmed back to accommodate for that.
DEMONSTRATED CORE TECHNICAL SKILLS
-
Shader development.
-
Particle Systems.
-
Post effects (I used built-in)
-
Vector math for cutting notes / collision detection.
-
Using a 3rd party API for the leaderboard.
-
Audio syncing with MIDI events.
-
Undo/Redo command pattern for the editor.
-
Efficient data storage for editing hundreds of notes.
-
State machine.
-
Object pooling.
-
Dynamic mesh generation (trail effect).
-
Scripting
BIGGEST HURDLES
-
Getting audio to sync with the game. I had it in my mind that the delay would be the same for the PC and the headset. Long story short, it had me questioning my collision detection timing. Eventually I had to create a setting that allowed the user to set the delay.
-
The second hurdle was an issue with updating the trail effect attached to the sword. A gap would show when moving really fast. It turned out the controller script setting was set to "after" frame instead of "before", or something like that.
-
The third was an issue with stuttering. At the time I had no idea that shaders were compiled at run time, so the game would stutter the first time the shader was used (it was a shader attached to an effect). Fixing it was as easy as applying the shader to a dummy object in view and scaled to zero.
Technical Artist | Demo Reel
Digital Rain
GOAL
Demonstrate how a Technical Artist would reproduce the famous digital rain effect, but in real-time.
PROBLEM
There are a lot of characters being manipulated all at once on the screen and handling them all individually is a no go.
SOLUTION
Do as much work as possible in a custom shader. Leverage Unity's Particle System as much as possible.
DEMONSTRATED CORE TECHNICAL SKILLS
-
Understanding spaces like world, object, and screen, and converting between them.
-
Shader development.
-
Particle Systems and vertex streams.
-
Post effects (I used built in)
-
Playable Director
-
Scripting
BIGGEST HURDLES
-
I was getting some weird texture artifacts for the glyphs. It turned out I needed to use tex2Dgrad so I could supply my own ddx/ddy. That way the right mip would get used.
Technical Artist / Programmer | Little Dreamer Games
Layered
GOAL
Import PSD file directly into Unity. Support Photoshop layers, groups, vectors, and text. On the Unity side, support mesh/material and sprite.
PROBLEM
There are no solutions out there that support vectors and text.
SOLUTION
Write an importer from the ground up that imports layers, groups, vectors, and text as GameObjects.
DEMONSTRATED CORE TECHNICAL SKILLS
-
File I/O and file structures.
-
32 bit images and RLE compression.
-
Image manipulation such as cropping and positioning.
-
Math for interpolating Cubic Bezier Curves.
-
Ability to parse formatted text.
-
GameObject and Component handling.
-
Basic math and some linear algebra.
-
Polygon triangulation (LibTessDotNet)
-
Scripting
BIGGEST HURDLES
-
Triangulating polygons is no small feat, so I imported LibTessDotNet.
-
The PSD file was more difficult to parse than I had anticipated. It's a bit of a Frankenstein's monster since it prioritizes backwards compatibility, which meant data is stored in different ways depending on the Photoshop version. I was able to pull through, though.
Sound Reactor
GOAL
Sync property values with audio so you can make rhythm games and stunning visuals for music.
PROBLEM
There's a million ways to present audio, so how do you make Unity flexible enough to handle nearly everything?
SOLUTION
Break audio attributes up into logical components that can be used to build up different audio effects. Include a builder that will arrange visuals in familiar ways, such as circles and lines. In a nutshell: audio frequency ->property driver, and the builder assigns each driver the appropriate frequency.
DEMONSTRATED CORE TECHNICAL SKILLS
-
Logarithms.
-
GameObject and Component handling.
-
Event systems.
-
Audio frequency ranges and octaves.
-
Cubic splines
-
Vector math
-
Mesh manipulation.
-
Scripting
BIGGEST HURDLES
-
Having to learn logarithms.
-
Getting the magnitude of every frequency to scale to the same max value. I had no idea going into this that high frequencies didn't max out at the same magnitude as low frequencies.
Fragment Visualizer
GOAL
Make it possible to visualize fragment properties. Properties can be: mip map level, world scale, object scale, lightmaps, continuity (reflections), view space/object/world/tangent normals, and more.
PROBLEM
I needed a way to tell if textures were too small or too big for the scale of the world it was being used in. I also needed to see the actual scale of the geometry.
SOLUTION
Create a visualizer for vertices and fragments.
DEMONSTRATED CORE TECHNICAL SKILLS
-
Application for ddx and ddy.
-
Understanding different spaces, i.e. world, object, tangent and view.
-
Scripting
BIGGEST HURDLES
-
Creating the sample shader ball. I didn't know at the time that normal maps don't like triangles very much. Also, mikkt was not an industry standard at the time so tangents weren't translating from Modo into Unity correctly.
Programmer | Little Dreamer Games
Height Lab
GOAL
Create a tool that can generate tileable height and normal maps from expressions. Make it possible to layer expressions so that it's easy to combine them. Create a preview area that can navigate around the height map. Include a way to shade the height map with Matcaps.
PROBLEM
All the tools I found were either too expensive and or all node based. It's easier for me to write out the expressions than create huge node trees.
SOLUTION
Create a tool that takes expressions and converts them to height values. Since height values can be converted to normals, also support normal maps.
DEMONSTRATED CORE TECHNICAL SKILLS
-
Scripting
-
Async programming.
-
Event systems.
-
File I/O.
-
Linear and gamma corrected image spaces.
-
UI Toolkit
-
Command pattern for Undo/Redo.
-
Quaternions for viewport rotations.
BIGGEST HURDLES
-
The command pattern used for Undo/Redo. This was my first attempt at doing something like that.
-
I struggled a lot with UI Toolkit. When I created this there wasn't much documentation on the subject.




