Maya CGFX Shader : Inspired by Guilty Gear Xrd GDC Presentation

Junya C Motomura's gave an amazing GDC presentation of how Guilty Gear Xrd achieved it's incredible 2D look.  And I was inspired to write a variant of what Junya presented as a Maya Cgfx Shader.  Check it out, it's available on Github:

Notable differences :

  * Team Red appears to be straight up using a dot product.  This shader uses a dot product to do a uv lookup on a 1D ramp texture.  Affords more flexibility with changing light-to-shadow palette via texture edit.  Tradeoff is lower perf

  * Team Red actually altered the normals, I'm using vertex color (red channel) to alter the uv lookup.

Future improvements could include other 2D effects such as ziptone and crosshatch shading.

Halo 4 Custom Shader

Digging through my old archive, I found this old documentation for a matcap shader I wrote for Halo 4 a few years back.  Our pipeline was entirely proprietary, and didn't feature any kind of node based editor such as Unity's ShaderForge or UDK's shader editor.  

Luckily my previous experience working on the hardware side at Nintendo Technology Development and interfacing with OpenGL at a low level helped me find my way around our engine.  

Much of my work nowadays doesn't require the level of linear algebra as it used to, but I still find concepts derived from that foundation useful for debugging collision and raycasting logic in my character/camera controllers.  Like anatomy knowledge, linear algebra has a very low decay, and I'm very glad to have invested in adding that to the tool belt.

Data Visualization : Memory Report

Learning to filter and chart tables, csv files, xml/JSON docs has been one of the more interesting problems I encountered working on Halo 4.  It's pure data shepherding.  And when I was doing manually it would take nearly half a day; so I wrote scripts to automate that :

Data once it's filtered for relevancy and visualized as information becomes highly valuable in understanding trends and detecting spikes. Properties that are highly desirable for tracking and reporting memory usage.

Photoshop Tool : stripToLayers.jsx

This tool complements my layersToStrip.jsx.  StripToLayers.jsx takes an existing strip and copy shifts each frame into a single series of layers.  The default number of frames is estimated by dividing width/height.  This works perfectly for frames with uniform aspect ratio.  But will need to be adjusted manually if frame aspect are non-uniform.

Code is available at :

Mindmap : Elephant

The game development paths winds through the unknown on a continous basis.  And a core component for effectively handling the unknown requires updating one's mental model and pushing the edge of understanding. 

An old Indian parable describes how 3 blind men, holding each part of an elephant are convinced that they have 3 different animals. 

Mindmaps, in my experience, offer a holisitic and methodical approach for mapping out what's at the edge of one's understanding: They capture what you know, and perhaps more importantly, reveal the empty space of what you yet don't know.  

Below is an index to the current mental maps that guide me about the elephant:


Shaders : The dark side of lighting

IMHO, well crafted shaders address both how light reacts to the surface (diffuse and specular), as well as how the surface behaves absent of lighting (ambient).  Generally what happens when the ambient aspect is neglected, is that lighting flattens out to black.  

This can certainly be used as a great artistic effect, but more often than not it's unintentional.  As a result the spatial aspect of play spaces/environment becomes greatly diminished.  Players have to work harder to discern the play space, leading to visual fatigue.

WebGL Scratchpad : TriForce

Been checking out WebGL as part of my more recent Saturday Morning Project.  And as far as I can surmise, WebGL seems to be an interface that exposes GPU hardware buffers to the browser. And javascript in this context, is basically utilized to push floating-point values to vertex buffers, and shuttling them through the C(?) foreign-function interface into the GL library.

Here's the current code state of my fiddling  with a simple, bare bones WebGL context:

Here's a mindmap of my current understanding OpenGL functions and hardware registers:

There's a lot to love about the how graphics development on the web is trending.  It feels like a reset/re-invention of the industry ~10 years ago.

Tool Development : Interfaces are high mileage

I've written a large number of tools that end up deprecated.  Often times the content creation app will offer a more elegant native solution in an update, or more commonly, the pipeline needs itself changes.

Interfaces however, are much more resilient and surprisingly high mileage.  

I've built many one off animations rigs that languish, while the keyframe tool that drives it continues to find usage.  The animation UI pictured for simple commands such as zeroing out, mirroring and keying poses have been adapted to numerous foreign rigs on a number of various contracts and small side projects.

Unreal : Shader Development

Collaborating with the principle players from art and tech to deliver solutions are my favorite project highlights.  Here's a slice from my time working on Unreal Shader Development for an older Sony Online Project:

  • Initial Standard : The project's character clothing used the standard normal, specular, diffuse uber shader.  There was an interesting tweak to the specular to 'pop' more detail with front facing normals.  And that worked great on surfaces such as leather and velvet.  But not so much on on cloth and materials where specular was minimal.
  • Hue Shift Pivot : Adding a complementary hue shift to the tangent facing normals of the material colors on the character's cloth pumped up the palette.  I utilized calculations already being processed to add minimal perf cost to the process.
  • Art Direction : The art director liked the expanded palette, but felt my shaders defaults were too heavy handed with color usage.  I worked with him to dial down many of the settings(it's easier to rein a shader artist back to push him for more:).  The Lead Tech Artist also exposed a custom sample of the dominant scene light.  Changing the shader to sample the complementary color from scene lighting as opposed to local material colors.  The final look something more along the lines of the palette brilliantly achieved in Unchartered 2.