Rigging and Pose Tools

Custom pose tool – scripted with python for storing per-rig animation poses. Mirror pose, flip pose, update selection, set keyframes.

Custom pose tool – mirror pose

Custom rigging tool – scripted with python for creating custom animation rigs. Supports FK/IK blending and matching, IK chain bending, squash and stretch, automatic hierarchy creation and mirroring, helper tools, dynamic and wave chains, multi-rig scene management, automatic selection with non-linear CV control editing, and presets.

Custom rigging tool – IK bend.

Custom rigging tool – dynamic wave chains.

Custom rigging tool – FK/IK blending and matching.

Custom rigging tool – squash and stretch.

Custom rigging tool – non-linear CV controls.

Custom rigging tool – direct blending.

Figma Plugins

Figma2Godot: A custom plugin to automate export from Figma to Godot. Design prorotypes are rebuilt using an Animation Library to share clips across UI elements.

GenerateDesignTokens: A custom plugin to create and manage variables inside Figma. Easily assign tokens across your design and share to your team’s library. Export tokens to a theme in Godot.

Sync design tokens between Figma and Godot.

Shadow Health

Professional 3D Generalist and Tech Art work from 2021-2024.

Medical Simulations


SIADH: Modeled in Maya, animated and rendered in Unity. Responsible for modeling, texturing, shading, lighting, and animation. I created a custom fresnel shader for the cells and animated them by scripting random rotation in C#. I sourced existing project textures for the background vessel materials and reused the red blood cell model from a previous simulation.

Medical simulation depicting syndrome of inappropriate antidiuretic hormone secretion.

Cellular Mitosis: Modeled in Maya, animated and rendered in Unity. Responsible for modeling, shading, lighting, and animation. I created the wavey effect on the cell membranes with a custom shader graph and animated the cell division in Unity. The DNA helix model and nucleus texture were sourced from existing assets.

Medical simulation depicting nuclear division in eukaryotic cells (mitosis).

Cellular Nondisjunction: Modeled in Maya and animated in Unity. Responsible for modeling, lighting, animation, and simplified shading for WebGL. The DNA helix model, addition, and arrow elements were sourced from existing assets.

Medical simulation depicting cellular nondisjunction.

Glucose Molecule: Modeled in Maya, animated and rendered in Unity. Responsible for modeling, lighting, shading, and animation. I implemented the wireframe shader from Chase Pettit’s unity-wireframe repository on GitHub.

Medical simulation depicting a glucose molecule.

Glomerulus Mechanism: Modeled in Maya, animated and rendered in Unity. Responsible for modeling, lighting, shading, particle systems, and animation. I sourced existing project textures for the filtered particle boards and reused the red blood cell model from a previous simulation.

Medical simulation depicting capillary filtration within the glomerulus of the Bowman’s capsule.
Particle effects guided with the Spline Particles addon from the Unity Asset Store.

Art Assets


Frozen Plasma: Modeled in Maya, textured in Subtance Painter. Responsible for modeling, UV mapping, texturing, and shading.

Frozen plasma bag prop.
Maya mesh wireframe – 1800 triangles.

Packaged Oxygen Masks: Modeled in Maya, textured in Substance Painter. Responsible for modeling, UV mapping, texturing, and shading. I modeled the sealed bag, oxygen tube, non-rebreather oxygen bag, connector, filter, and nasal strip. The bag valve mask and non-rebreather mask were sourced from existing assets. I used Maya nucleus cloth simulation to flatten the bag valve mask resevoir.

Sealed bag valve mask and non-rebreather mask.
Maya mesh wireframe, non-rebreather – 4170 triangles, bag valve mask – 5344 triangles.
VR prop setup with collision and interactable components.

CSCC Tumor: Sculpted and textured in Zbrush, rendered in Unity. Responsible for modeling, sculpting, texturing, and shading.

CSCC Tumor.

Pipeline Improvements


Startup Scripts: Art and animation pipeline organization and maintenance, custom main menu and shared shelf for tools and snippets. Initialization of required preferences and scene settings on startup. Scripted in Python.

Custom menu and shelf for production tools.

OpenMaya API: Implementation of layer contents selection with the OpenMaya module per team request. Scripted in Python.

Layer contents selection.

PySide2 and Qt Designer: Pipeline integration for quick UI development, .ui files easily loaded in Maya, Motionbuilder, and Substance Painter. Scripted in Python.

Qt Designer.
PySide2 for UI creation.

Maya Tools


SH Edit Shapes: Maya tool to assist character artists with making quick changes to blendshapes. Scripted in Python.

Quickly edit blendshapes.

Copy Animation: Maya tool to assist animators with quickly copying animation between skeletons. Scripted in Python.

Copy animation between skeletons.

MotionBuilder Tools


SH Keys: MotionBuilder tool to cleanup motion capture data and operate on keys. Scripted in Python.

Key operations

SH Mirror Animation: MotionBuilder tool to rotate and mirror animation takes. Scripted in Python.

Rotate and mirror animation takes.

Substance Painter Tools


SH Substance Directory: Substance Painter tool to assist with browsing and bookmarking the Substance python API. Scripted in Python.

Substance API browsing.

Unity Tools


Editor Extension: Expanding on engine UI to give more detailed information to the user, including adding supplemental directories for visual reference. Scripted in C#.

Project tab details.

Prefab Clipboard: Unity tool to assist users with object organization and bookmarking. Instantiate and move objects across large hierarchies more easily. Scripted in C# using UI Toolkit.

Bookmarking objects.
Traverse hierarchy.

Animation Preview: Unity tool to assist animators with quickly previewing animation. Scripted in C# using UI Toolkit.

Quickly preview animations.

Rename Selected: Unity tool to assist users with naming objects, adding prefix, suffix, numbering, and auto-suffix by type. I designated the asterisk (*) as a special character to allow replacement of multiple unique substrings. Scripted in C# using UI Toolkit.

Rename selected objects.

Bounding Box Wizard: Unity tool to quickly set bouding box values. Scripted in C# using UI Toolkit.

Automate bounding boxes for selected meshes.

Prefab Layout: Unity tool to assist users with visualizing prefabs in the project. Scripted in C# using UI Toolkit.

Layout prefabs by name and type.

Desktop Tools


Gather Textures: Desktop application to search recursively for image files by format. Images could be moved to a target directory for processing with Photoshop batch actions, and then moved back to their original locations. These locations were backed up via JSON to the user’s temp folder so they could be reloaded if necessary. Scripted in Python.

Gather dispersed textures for processing.

Shaders


Wrinkle Map Shader: Utilizing RGB masking for isolated blending of detail normal maps. A placeholder scar was created to test the blending on top of required secondary normal maps.

Wrinkle map shader graph.
Normal map details.
RGB masking.

Simulation


Baked Simulation: Proof of concept. Responsible for toy rigging and simulation in Maya with nucleus hair follicles.

Stuffed toy lion simulation test for pediatric patients.
The simulation was baked onto the skeleton and imported to Unity.
Testing with character collision.

Technical R&D


AI Integration: Research for new methodologies, including AI generation of internal concept and design materials.

Generated concept assets.

Technical Presentations


Team Presentations: Concepts and workflows presented to the art team to expand technical knowledge and improve production adherence to platform standards.

Normal map presentation slide.
Unity prop presentation slide.