Tools Portfolio

Quick Assets Actions Demo

Quick Assets Actions UI Overview

Quick Assets Actions Menu Option

Quick Asset Actions - Unreal Engine 5 Plugin

Unreal Engine 5
C++

Problem: At Deadlift Studios, we were in the process of migrating our Unreal Engine 4 project to Unreal Engine 5. During this process, we realized a lot of assets were not being utilized in the game and were leftover from work done when we were developing our playable demo. This was causing unneccessary bloat and wasted storage space. However, since our assets spanned across multiple folder structures, the process of identifying and removing assets that were not being used in the level would have required a lot of manual, tedious work.

Solution: The Quick Asset Actions plugin streamlines the process of finding and performing different actions on assets in the content browser. The plugin displays a list of assets under a user-selected folder and provides several options for the user to filter the displayed assets on search critera such as unused assets, assets with duplicate names, and more. The plugin also provides users the ability to perform common actions on one or more assets selected from the list such as delete, duplicate, rename, etc. In addition to the common actions included in Unreal Engine, the plugin features extended actions that allow users to replace an unwanted string in a list of asset names and automatically add prefixes according to standard naming conventions.

Features include:

  • List all assets under a selected folder and sort by information such as asset class, name, parent folder, and number of referencers
  • Double-click an asset row to navigate to the selected asset in the content browser
  • Filter asset list by Unused Assets, Duplicated Name Assets, and Assets with No Prefix (or incorrect prefixes)
  • Select assets to perform bulk actions such as delete, duplicate, and add prefixes
  • Quickly rename a single asset without needing to navigate to its location in the content browser
  • Replace an unawanted string or phrase in asset names with a new string

This plugin solved our initial issue of identifying and removing unused assets and contains additional features that will help us organize our project going forward in the development process. It will also help us avoid this situation in the future and minimizes tech debt associated with cleaning up assets.

Read More on GitHub

Material ID Tool Demo

Example of Material IDs Applied in Maya

Example of In-Game Textures Applied in Unreal Engine 5

Material ID Tool

Python
PyQt5/Pyside2
MEL
Maya

Problem: Artists had textures in Unreal Engine 5 for their assets but were creating models in Maya. In order to visualize and know which parts of their model were going to be textured with each material in UE, the artist had to recreate the materials that were in Unreal in their Maya scenes. This became quite repetitive and wasted time as the materials created in Maya were eventually replaced with the in-game textures in Unreal Engine 5.

Solution: The Material ID Tool allows a user to apply autogenerated materials from predefined IDs to objects in Maya for visualization and texture assignment. It is primarily used for identification of object materials and parts when moving assets to other DCCs.

Features include:

  • Read, add, and delete predefined material IDs from a .txt file
  • Automatically generate materials and shading groups with random colors for each ID
  • Apply materials to objects with a single button click
  • Buttons are labeled with color and ID for easy identification
  • Button section in scrollable area so window can be resized to desired fit
  • Reset object materials to default 'lambert1' if mistakes are made
  • Select all objects with a specific material by right clicking the button
  • Change the number of columns in the button grid to user preference which is automatically saved and remembered for future use

The tool was originally created for asset migration to Unreal Engine 5 but is not restricted. For this project, I focused on developing several user-centered features and consistently surveyed the artists throughout the development process to gain an understanding of their needs and priorities. These requests included changing the button from a solid color to the classic shader ball artists were used to, adding custom settings so the artist could save and manipulate the window size and column count, and importing material ids from user-specified list (which could vary for each artist depending on their speciality).

Read More on GitHub

Procedural Rock Generator Demo

Example of High and Low Poly Assets in Unreal Engine 5

(Materials and ground/sky assets from Valley of the Ancient sample project)

High vs Low Poly Comparison in Unreal Engine 5

(Materials and ground/sky assets from Valley of the Ancient sample project)

Procedural Asset Generator: Canyon Rocks

Houdini
VEX
Unreal Engine 5
xNormal

Problem: The Kyber Initiative project lacks a dedicated environmental artist for background assets. This has led to a large blocker in being able to complete level designs and maps. We needed a resource that could create environmental assets for our first level in a relatively short amount of time. In addition, it was important for us to avoid repetitive and boring scenes by surrounding the player with diverse assets.

Solution: The Procedural Rock Generator allows a user to input a base shape to create procedural rock structures. Artists can edit multiple properties including target polygon counts, number of pieces created, and several noise settings. The tool creates both a high poly and a low poly version of the assets. The details of the high poly asset are exported as a normal map and can be applied to the low poly asset which has autogenerated UVs. The HDA can also be linked to a TOPS network for easy export.

Features include:

  • Create a rock model from any input base shape
  • Edit rock properties including target polycount, number of pieces, piece height ramp, and more
  • Edit noise settings such as frequency, amplitude, and offset to get the perfect look
  • Autogenerate uv maps for low poly assets and normal maps for high poly assets
  • Export options auto center pivot and rotate for easier import into Unreal Engine 5

For use in the Kyber Initiative project, I overcame several limitations that arose when using the noncommercial verison of Houdini, including restricted normal map exports and file formats. I consistently collaborated with artists to work through several iterations of the tool, revising methods based on feedback.

Read More on GitHub

Version Control Tool Demo

User Prompt if the Tool Detects a Version Already Exists

Version Control Tool - Houdini Shelf Tool

Python
PyQt5/Pyside2
Houdini

Problem: While Houdini automatically saves backups of your file, there is no easy built-in way to control, save, and access different file versions.

Solution: The Houdini Version Control Tool allows a user to increment and save a Houdini file with a version suffix automatically. It also shows a list of all versions of the current file for seamless switching between versions.

Features include:

  • Auto-increment and save versions with _v### suffix (also works with _V### if that is existing format)
  • Add default _v001 if file does not have version
  • Add a hotkey to the "Save New Version" menu action at any time through the Houdini hotkey settings
  • Choose to either overwrite or save as latest version if incremented version already exists
  • View a list of all versions of the current file via the shelf tool
  • Switch seamlessly between versions by double-clicking to open desired version from the list
Read More on GitHub

Rubik's Cube Demo

Manual Rotation Selection Example

Rubik's Cube Tool - Maya

Python
PyQt5/Pyside2
MEL
Maya

Problem: Modeling a Rubik's Cube can be tedious and rigging each child cube to move with each face can be very complicated due to having to constantly reparent when the face is rotated.

Solution: The Rubik's Cube python script allows a user to model and manipulate a Rubik's cube in any Maya scene. It automatically creates all child cubes and reparents them on every rotation. All rotations are recorded as an animation which can be watched as a playback video or rendered.

Features include:

  • Create a fully-textured Rubik's Cube model
  • Manually rotate any face with a combination of face and direction options
  • Randomize the Rubik's cube with a single button
  • Solve the Rubik's cube with a single button
  • Reset the Rubik's cube at any time with a single button
  • Automatically keyframe each rotation for playback as an animation or render

The user can manually rotate the Rubik's cube by selecting an option from the list (Front, Back, etc.) and choosing the "Face" radio button. The "Vertical Middle" and "Horizontal Middle" radio buttons will always correspond with the sections in the middle of the Rubik's cube as seen to the left.

Read More on GitHub