{"id":808,"date":"2024-01-30T08:05:46","date_gmt":"2024-01-30T15:05:46","guid":{"rendered":"https:\/\/gibby3d.com\/blog\/?page_id=808"},"modified":"2026-09-07T11:56:53","modified_gmt":"2026-09-07T17:56:53","slug":"technical-art","status":"publish","type":"page","link":"https:\/\/gibby3d.com\/blog\/technical-art\/","title":{"rendered":"Technical Art"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>Figma<\/strong><\/h2>\n\n\n\n<hr class=\"is-style-wide wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Figma2Godot<\/strong>: A custom plugin to automate export from Figma to Godot.  Design prorotypes are rebuilt using an Animation Library to share clips across UI elements.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Figma2Godot Plugin\" src=\"https:\/\/player.vimeo.com\/video\/1219963442?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>GenerateDesignTokens<\/strong>: A custom plugin to create and manage variables inside Figma. Easily assign tokens across your design and share to your team&#8217;s library.  Export tokens to a theme in Godot.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"GenerateDesignTokens Plugin\" src=\"https:\/\/player.vimeo.com\/video\/1219976405?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Sync design tokens between Figma and Godot.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"GenerateDesignTokens Plugin - Sync Tokens\" src=\"https:\/\/player.vimeo.com\/video\/1220000570?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Blender<\/strong><\/h2>\n\n\n\n<hr class=\"is-style-wide wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Toggle Material<\/strong>: A custom Blender add-on written in Python to toggle materials on unselected objects.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Blender Toggle Material Add-on\" src=\"https:\/\/player.vimeo.com\/video\/1124531588?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Isolate Selected<\/strong>: A custom Blender add-on written in Python to isolate selected and hidden objects.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Blender Isolation Add-on\" src=\"https:\/\/player.vimeo.com\/video\/1091999759?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Maya<\/strong><\/h2>\n\n\n\n<hr class=\"is-style-wide wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><br><strong>Custom pose tool<\/strong> &#8211; scripted with python for storing per-rig animation poses. Mirror pose, flip pose, update selection, set keyframes.<br><br><strong>Custom pose tool<\/strong> &#8211; mirror pose.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Pose Tool - Mirror Pose\" src=\"https:\/\/player.vimeo.com\/video\/1223546716?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Mirror pose.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Custom rigging tool<\/strong> &#8211; 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.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Custom rigging tool<\/strong> &#8211; IK bend.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Rigging Tool - IK Chain Bending\" src=\"https:\/\/player.vimeo.com\/video\/1223502017?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">IK bend.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Custom rigging tool <\/strong>&#8211; Dynamic wave chains.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Rigging Tool - Dynamic Chain\" src=\"https:\/\/player.vimeo.com\/video\/1223509382?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Dynamic chains<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Rigging Tool - Wave Chain\" src=\"https:\/\/player.vimeo.com\/video\/1223509341?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Wave chain.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Custom rigging tool<\/strong> &#8211; FK\/IK blending and matching. IK bend and IK stretching included in setup.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Rigging Tool - FK\/IK Blending and Matching\" src=\"https:\/\/player.vimeo.com\/video\/1223498419?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">FK\/IK blending and matching.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Custom rigging tool<\/strong> &#8211; Blending used on custom character.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-18-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Monster Rig\" src=\"https:\/\/player.vimeo.com\/video\/338160594?dnt=1&amp;app_id=122963\" width=\"584\" height=\"282\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Custom character rig.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Custom rigging tool <\/strong>&#8211; squash and stretch.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Rigging Tool - Squash and Stretch\" src=\"https:\/\/player.vimeo.com\/video\/1223508342?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Squash and stretch.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Custom rigging tool<\/strong> &#8211; non-linear CV controls.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Rigging Tool - CV Controls\" src=\"https:\/\/player.vimeo.com\/video\/1223508877?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Non-linear CV control editing.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Custom rigging tool<\/strong> &#8211; direct blending.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Rigging Tool - Direct Blend\" src=\"https:\/\/player.vimeo.com\/video\/1223545350?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Rotation only blending.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>SH Edit Shapes:<\/strong> Maya tool to assist character artists with making quick changes to blendshapes. Scripted in Python.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Edit Blendshapes\" src=\"https:\/\/player.vimeo.com\/video\/906851105?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Quickly edit blendshapes.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Copy Animation:<\/strong> Maya tool to assist animators with quickly copying animation between skeletons. Scripted in Python.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Copy Animation\" src=\"https:\/\/player.vimeo.com\/video\/906850451?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Copy animation between skeletons.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Pipeline Improvements<\/strong><\/h2>\n\n\n\n<hr class=\"is-style-wide wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Startup Scripts:<\/strong> 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.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/SHStudioTools.jpg\"><img decoding=\"async\" src=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/SHStudioTools.jpg\" alt=\"\"\/><\/a><figcaption class=\"wp-element-caption\">Custom menu and shelf for production tools.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>OpenMaya API:<\/strong> Implementation of layer contents selection with the OpenMaya module per team request. Scripted in Python.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/LayerSelection01.gif\"><img decoding=\"async\" src=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/LayerSelection01.gif\" alt=\"\"\/><\/a><figcaption class=\"wp-element-caption\">Layer contents selection.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PySide2 and Qt Designer:<\/strong> Pipeline integration for quick UI development, .ui files easily loaded in Maya, Motionbuilder, and Substance Painter. Scripted in Python.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/Designer.png\"><img decoding=\"async\" src=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/Designer.png\" alt=\"\"\/><\/a><figcaption class=\"wp-element-caption\">Qt Designer.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/PySide.png\"><img decoding=\"async\" src=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/PySide.png\" alt=\"\"\/><\/a><figcaption class=\"wp-element-caption\">PySide2 for UI creation.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Gather Textures:<\/strong> 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&#8217;s temp folder so they could be reloaded if necessary. Scripted in Python.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Gather Textures\" src=\"https:\/\/player.vimeo.com\/video\/906851997?dnt=1&amp;app_id=122963\" width=\"584\" height=\"328\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Gather dispersed textures for processing.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Motion Builder<\/strong><\/h2>\n\n\n\n<hr class=\"is-style-wide wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>SH Keys:<\/strong> MotionBuilder tool to cleanup motion capture data and operate on keys. Scripted in Python.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"SHKeys\" src=\"https:\/\/player.vimeo.com\/video\/907901860?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Key operations<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>SH Mirror Animation: <\/strong>MotionBuilder tool to rotate and mirror animation takes. Scripted in Python.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"MirrorAnimation\" src=\"https:\/\/player.vimeo.com\/video\/907864617?dnt=1&amp;app_id=122963\" width=\"584\" height=\"330\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Rotate and mirror animation takes.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Substance Painter<\/strong><\/h2>\n\n\n\n<hr class=\"is-style-wide wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>SH Substance Directory:<\/strong> Substance Painter tool to assist with browsing and bookmarking the Substance python API. Scripted in Python.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Substance Directory\" src=\"https:\/\/player.vimeo.com\/video\/906856424?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Substance API browsing.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Unity<\/strong><\/h2>\n\n\n\n<hr class=\"is-style-wide wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Editor Extension:<\/strong> Expanding on engine UI to give more detailed information to the user, including adding supplemental directories for visual reference. Scripted in C#.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/ProjectWindowDetails.jpg\"><img decoding=\"async\" src=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/ProjectWindowDetails.jpg\" alt=\"\"\/><\/a><figcaption class=\"wp-element-caption\">Project tab details.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Prefab Clipboard:<\/strong> 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.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Prefab Clipboard 01\" src=\"https:\/\/player.vimeo.com\/video\/906852606?dnt=1&amp;app_id=122963\" width=\"584\" height=\"338\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Bookmarking objects.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Prefab Clipboard 02\" src=\"https:\/\/player.vimeo.com\/video\/906853481?dnt=1&amp;app_id=122963\" width=\"584\" height=\"338\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Traverse hierarchy. <\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Animation Preview:<\/strong> Unity tool to assist animators with quickly previewing animation. Scripted in C# using UI Toolkit.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Animation Preview\" src=\"https:\/\/player.vimeo.com\/video\/906847951?dnt=1&amp;app_id=122963\" width=\"584\" height=\"338\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Quickly preview animations.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Rename Selected:<\/strong> 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.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Rename Selected\" src=\"https:\/\/player.vimeo.com\/video\/906855963?dnt=1&amp;app_id=122963\" width=\"584\" height=\"338\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Rename selected objects.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Bounding Box Wizard:<\/strong> Unity tool to quickly set bouding box values. Scripted in C# using UI Toolkit.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Bounding Box Wizard\" src=\"https:\/\/player.vimeo.com\/video\/906849024?dnt=1&amp;app_id=122963\" width=\"584\" height=\"338\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Automate bounding boxes for selected meshes.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Prefab Layout:<\/strong> Unity tool to assist users with visualizing prefabs in the project. Scripted in C# using UI Toolkit.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Prefab Layout\" src=\"https:\/\/player.vimeo.com\/video\/906854720?dnt=1&amp;app_id=122963\" width=\"584\" height=\"338\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Layout prefabs by name and type.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Shaders<\/strong><\/h2>\n\n\n\n<hr class=\"is-style-wide wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sticker Shader:<\/strong> Scripted in Shaderlab.<\/p>\n\n\n\n<figure class=\"wp-embed-aspect-16-9 wp-has-aspect-ratio wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Sticker Shader\" src=\"https:\/\/player.vimeo.com\/video\/1224681708?dnt=1&amp;app_id=122963\" width=\"584\" height=\"329\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Wrinkle Map Shader:<\/strong> 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.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/WrinkleSkinShader.jpg\"><img decoding=\"async\" src=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/WrinkleSkinShader.jpg\" alt=\"\"\/><\/a><figcaption class=\"wp-element-caption\">Wrinkle map shader graph.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/JamesWrinkleMaps01.gif\"><img decoding=\"async\" src=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/JamesWrinkleMaps01.gif\" alt=\"\"\/><\/a><figcaption class=\"wp-element-caption\">Normal map details.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/RGBWrinkleMap.jpg\"><img decoding=\"async\" src=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/RGBWrinkleMap.jpg\" alt=\"\"\/><\/a><figcaption class=\"wp-element-caption\">RGB masking. <\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Technical R&amp;D<\/strong><\/h2>\n\n\n\n<hr class=\"is-style-wide wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>AI Integration:<\/strong> Research for new methodologies, including AI generation of internal concept and design materials.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/AICharacterAssets.jpg\"><img decoding=\"async\" src=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/AICharacterAssets.jpg\" alt=\"\"\/><\/a><figcaption class=\"wp-element-caption\">Generated concept assets.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Technical Presentations<\/strong><\/h2>\n\n\n\n<hr class=\"is-style-wide wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Team Presentations:<\/strong> Concepts and workflows presented to the art team to expand technical knowledge and improve production adherence to platform standards.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/NormalMapPresentation.jpg\"><img decoding=\"async\" src=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/NormalMapPresentation.jpg\" alt=\"\"\/><\/a><figcaption class=\"wp-element-caption\">Normal map presentation slide.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/PropPresentation.jpg\"><img decoding=\"async\" src=\"https:\/\/gibby3d.com\/blog\/wp-content\/gallery\/shadow-health\/PropPresentation.jpg\" alt=\"\"\/><\/a><figcaption class=\"wp-element-caption\">Unity prop presentation slide.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:55px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Figma 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 &hellip; <a href=\"https:\/\/gibby3d.com\/blog\/technical-art\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"nf_dc_page":"","ngg_post_thumbnail":0,"footnotes":""},"class_list":["post-808","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/gibby3d.com\/blog\/wp-json\/wp\/v2\/pages\/808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gibby3d.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gibby3d.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gibby3d.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gibby3d.com\/blog\/wp-json\/wp\/v2\/comments?post=808"}],"version-history":[{"count":5,"href":"https:\/\/gibby3d.com\/blog\/wp-json\/wp\/v2\/pages\/808\/revisions"}],"predecessor-version":[{"id":1038,"href":"https:\/\/gibby3d.com\/blog\/wp-json\/wp\/v2\/pages\/808\/revisions\/1038"}],"wp:attachment":[{"href":"https:\/\/gibby3d.com\/blog\/wp-json\/wp\/v2\/media?parent=808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}