top of page
Mobile Refraction

Project:  Animal Cove (and subsequent projects)

 

Challenge:  Create a mobile-friendly distortion effect for VFX, transparent meshes, and full-screen transitions.

 

Solution:  Use a render texture of the current rendered frame. Apply, in screenspace, as a post effect or directly to translucent geometry/particles using a second camera. The overlaid rendertexture is warped using normals and/or normal maps. The main camera tracks the distortable objects in the scene and will create or destroy the distortion camera as needed.


Notes:  Non-distorted LODs assets were used on a small subset of blacklisted hardware with insufficient specs.

Mobile Refraction

Project:  The Last Station (game jam)

 

Challenge:  Create a mirror effect for a reflective tiled floor.

 

Solution:  Use a render texture from a camera with transforms inverted from the ground plane. Apply the planar ground reflection to specified surface(s) in screen-space. Applied reflection can warp based on normal maps.


Notes:  The Last Station was a solo game jam RPG which also used refraction, combined post FX, and fur shaders with motion smearing.

Mirror Reflection

Mirror Reflection
Color Restoration

Project:  Gloombusters (soft-launched)

 

Challenge:  The game is based around restoring color to a dreary environment in multiple steps. Create a stylized gloom treatment and a transition effect for re-colorization.

 

Solution:  Color restoration effect repurposes point lights to create a radial transition from a sketch-style toon treatment to full color, including a glowing intersection to simulatelighting. Due to selective re-coloring, there were several states each object could be in, which were controlled via code.

Color Restoration Effect

Fur Shaders

Project:  Gloombusters (soft-launched)

 

Challenge:  Create a customizable fur shader for characters.

 

Solution:  A multi-pass fur shell shader with additional features. Blended root and tip RGBA parameters are multiplied with the texture color to control the fading and alpha-tested tapering of the fur. Vertex colors were used to  control the relative length (distance) of the fur shells for tighter and fluffier areas, as well as the density of the fur to allow for thinning and non-fur areas. Static constants were used to reduce duplicate instructions per pass.


Notes: An optimized, single-pass 'furallax' shader was created for environments using  multiple layered texture lookups each progressively more offset using parallaxing. The layers are still colored and use smoothstep to taper the fur layers.

Fur Shaders

GloomLogo.png
Toon Rendering

Project:  Hero Card (unreleased)

 

Challenge:  Cutscenes require a motion-comic style which differs from the standard game art, but must re-use all assets.

 

Solution:  Semi-orthogonal rendering of toon-lit characters for motion comic sequences. Luminance of the diffuse texture affects lighting similar to a normal map. Multiple pass outlined allow for thicker outer outlines. Vertex alpha controls line weight, limiting the distance of the outline puish. A fixed blend between perspective and orthogonal vertex positions allows for a flattened look to better layer the characters during motion comic sequences, making it look more hand-drawn.


Notes:  Toon ramp blends from light color to ambient color, rather than adding the ambient in order to keep a vivid comic-style look. Scenes also used edge-detecting post-effects to more easily ‘toonify’ the complex environments.

Motion Comic Toon Rendering

ToonCharacters.png

Combined Mobile Post FX

Projects:  Everclicker, Heroes of Whitestone

Challenge:  Support multiple post FX on all mobile hardware (bloom, blur, and other image effects).

 

Solution:  Create a custom shader and C# script for a modular post-effect done in a single pass to reduce overhead. Includes bloom, blur, DoF, tilt shift, full screen warping, chromatic aberration, edge detection, and standard image controls like brightness, contrast, and saturation. Using one of multiple shader passes with conditional functionality, each combination of effects is fully optimized to reduce instructions and texture samples. All parameters are exposed in the inspector and are animatable via the camera object and can be tied to impacts, transitions, etc, as well as having defaults set per-level.


Notes:  Due to a lack of HDR on mobile hardware, there was the option of scaling the output range of rendered shaders which was scaled back up in the post effect, allowing for a limited pseudo-HDR bloom range for VFX.

PostFX_Dice.png
PostFX_Everclicker.png
Combined PostFX
Motion Smearing

Project:  Multiple unreleased projects

 

Challenge:  Add a cartoony motion blur effect to characters and weapons.

 

Solution:  created a smearing effect using the motion of a reference node to drive trailing vertex offsets which respect vertex alpha masking. The relative non-normalized direction of the reference node is applied to shader parameters which are used to drive the effect. The C# script also controls acceleration and deceleration of the parameters, allowing for sharp or flowy motion. Additional versions included cloth support which used a wind node to determine direction and strength, in addition to ambient turbulence.


Notes:  While vertex rotation wasn’t specifically supported, offsetting the reference node would create circular motion which simulated rotation. This effect was also applied to multiple fur shells to create real-time inertia-based squash and stretch effects for The Last Station (game jam project).

Motion Smearing  & Cloth

Instanced Crowd

Project:  Fantasy Fighter Arena (soft-launched)

 

Challenge:  Fill a stadium with hundreds of randomly animating 3D characters using very few draw calls and no animation overhead.

 

Solution:  Started by researching existing tools and plugins and found a tool that applies motion based on a generated texture defining motion over time per vertex. Generated several motion textures based on different looping animations. Created an animation controller which would swap these textures based on state, including an offset baked into each character for completely randomized motion. GPU instancing allowed for large groups to be rendered in a single static draw call.


Notes:  This task also involved spawning these randomized characters at specific nodes which also defined additional properties. Appearances are randomized within defined parameters, also using material property blocks.

Instanced Crowd

Project:  Everclicker

 

Challenge:  Allow for re-use of characters and environments to add variety for the sake of progression.

 

Solution - Characters:  Character tinting with a single grayscale mask using 16 specific shades of gray to allow for complex tinting. Luminance diffuse texture allows blending along gradients for light and dark variance. All colors are tinted, there is no RGB diffuse texture for any characters, only the grayscale mask, the luminance texture, and the gradient palette texture.

Tinting Systems

TintCharacters.png
TintTextures.png

Solution - Environments:  Environment tinting using an RGBA texture to identify and tint specific areas of the textures using similar techniques to those describbed above. Rather than a luminance texture, an RGB diffuse texture was authored, allowing for tinting of selective areas while keeping portions unchanged. This was due to the reduced number of tint regions and the need to nuanced color.


Notes:  Environments would use the diffuse texture, converted to grayscale to apply the two-color blends of the tinted areas.

EnvTint1.png
EnvTint2.png
EnvTintTextures.png
Tinting Systems
Lit Parallax Sprites

Project:  Animal Cove

 

Challenge:  Create tech to allow for 2D sprites to appear 3D.

 

Solution:  Applying a spherical parallax effect to sprites allowing for faked tilt rotation. Point lights affect the rotations, causing them to turn away and warp, in addition to lighting the normal mapped sprites. Tilting effect is also controlled via animation for gameplay purposes (e.g. rolling slightly when moving to suggest moves).


Notes:  Parallax effect uses UVs versus a texture.

Lit Parallax Sprites

Sprite-Based Water

Project:  Animal Cove

 

Challenge:  Create an organic ocean effect for a static orthogonal tile-based environment.

 

Solution:  Layering and procedurally animating textures and reflections on static tiled sprites which have a soft, blended alpha. Procedurally animating alpha and smoothstep parameters allows for the waves to move in and out. Taking into account worldspace allows for less synchronized motion.


Notes:  Due to a lack of 3D perspective, reflection is applied in screenspace, similar to a matcap, but is warped by the normal maps of the water to create a dancing effect.

Sprite-Based Water

3DS Max Tools

Export Utility

An all-in-one export tool that automated the process of getting error-free assets into our games.

  • Based on user-defined paths, the exported assets would automatically be saved into the correct location. Based on the type of file and project, export settings were adjusted. Naming was matched or generated from existing patterns.

  • A series of validation checks were run upon export, and detected platform-specific issues which were optionally fixed, removing nearly all user error.

  • Any other processes could be run during the export process, such as converting a complex rig to a simple FK bone rig.

  • Settings and expected directory structures could be adjusted per-project.

Constraint Utility

A tool to set up and maintain complex constraints.

  • Allowed constraining to multiple target objects.

  • Custom attributes and sliders were added to the modify panel for the constrained node, always totaling 100%.

  • Additional nodes and controllers were added as needed to preserve expected behavior of various rigs.

  • Constraints could be updated without needing to first remove them.

Simulator

A tool to automate the setup and execution of Havok (and later Mass FX)  physics simulations, primarily for cape animations.

  • Simulated bones and colliders could be defined and adjusted for the simulation

  • Preset physics settings were selectable via a drop-down.

  • Advanced settings allowed for generating settings on chains and for overriding global physics settings.

  • Iterative simulations allowed for looping animations.

3DS Max Tools

ExportUtil.png
ConstraintUtil.png
Simulator.png

Animation Transfer Tool

A versatile tool for copying, pasting, and transferring animations and poses.

  • Animations and poses could be saved to disk or copied, allowing for transfers between files.

  • Time ranges were adjustable for both saving and loading animations.

  • Specific transform types could be transferred.

  • Option to load animations relative to a common parent.

  • Option to bake keyframes during save or load.

  • Custom implementation for PuppetShop rigs.

 

Sequence Namer

Used to define animation sequences for Gamebryo.

  • Sequences for Gamebryo were defined via note tracks and were difficult for animators to manage.

  • Preset naming options per asset type and per-project were selectable from a dropdown menu.

  • Players and mounts in the same file could be set up simultaneously.

  • Multiple sequences could be set up within a single file.

  • Looping and compression settings could be adjusted per sequence.

  • Sound tags could also be added and modified, allowing for the audio department to make use of this tool.

Select Controls

A tool originally created by an animator to select hidden controllers in a rig which was expanded upon.

  • Selection buttons could be remapped to any node or group of nodes.

  • Multiple objects could be selected together or cycled through.

  • Custom mapping could be saved, loaded and merged.

  • Optional setting to change the transform tool to move or rotate, as needed.

  • Supported rigs with differing prefixes.

  • Could specify target for files with multiple characters.

  • Additional commonly-used animation tools were integrated for ease of use.

IK Relax

A tool used to prevent locked IK after transferring animations between dissimilar rigs via Puppetshop.

  • Locked IK was detected and keyframes were updated or added as needed.

  • Option to adjust either the foot or the pelvis, depending on which would provide the desired result.

  • Iteratively adjusted keys nearest the midpoint of locked time ranges to minimize adjustments.

Normal Utility

A tool used to prevent seams for modular character parts.

  • Multiple objects would temporarily be duplicated, attached and smoothed. The resulting object would be used as a source for transferring normals for open edges of character parts.

  • Normals could also be transferred from a specified object using a distance tolerance.

Face and Eye Setup Scripts

For multiple projects (including Gloombusters) faces were animated via textures.

  • Texture swapping (via stepped UV offsets in an atlas) could independently be set to specific presets for each eye and the mouth to create an Animal Crossing-like result.

  • Texture offset animation for eyes could be hooked up to look-at targets. The data would be written to dummy nodes which were interpreted in Unity via a C# script.

  • All tools were wysiwyg, allowing animators to evaluate their animations in Max.

bottom of page