top of page
No Collections Here
Sort your projects into collections. Click on "Manage Collections" to get started
Tech Art
A collection of various tech art assets.


Crowd for IronBlood Arena
For my submission for the 2025 California Clash game jam, one of the things I was pretty pleased with was my solution for the crowd in the arena.
I started by making a simple material that was a medium gray color, but adjusted the lightness/darkness by using the PerInstanceRandom node to give some randomness to the color. I then used the value from the PerInstanceRandom to modify the intensity of a sine node that would move the mesh up and down. This resulted in each mesh instance moving up and down different amounts at different speeds.
Initially, I made a blueprint that allowed me to enter the number of rows and columns for a section of crowd, and the ConstructionScript would spawn spheres as InstancedStaticMeshes accordingly. This worked exactly as I intended it to, but it caused a problem; since I was spawning so many ISM's across multiple sections of crowds, there was quite a bit of load time moving from the MainMenu to the GameLevel. I didn't like it.
I decided to try something else! I deleted all of the crowd sections except for one. I then converted one of the crowd sections to a PackedLevelActor, and lo-and-behold it worked! I duplicated that PLA a few times to replace the previously deleted crowd sections.
I then went back to the MainMenu and attempted to start a new game. I found that the load time was almost instantaneous! I was very pleased with the result and it is something I thought was worth sharing. I will definitely be using this technique for things in the future.
I started by making a simple material that was a medium gray color, but adjusted the lightness/darkness by using the PerInstanceRandom node to give some randomness to the color. I then used the value from the PerInstanceRandom to modify the intensity of a sine node that would move the mesh up and down. This resulted in each mesh instance moving up and down different amounts at different speeds.
Initially, I made a blueprint that allowed me to enter the number of rows and columns for a section of crowd, and the ConstructionScript would spawn spheres as InstancedStaticMeshes accordingly. This worked exactly as I intended it to, but it caused a problem; since I was spawning so many ISM's across multiple sections of crowds, there was quite a bit of load time moving from the MainMenu to the GameLevel. I didn't like it.
I decided to try something else! I deleted all of the crowd sections except for one. I then converted one of the crowd sections to a PackedLevelActor, and lo-and-behold it worked! I duplicated that PLA a few times to replace the previously deleted crowd sections.
I then went back to the MainMenu and attempted to start a new game. I found that the load time was almost instantaneous! I was very pleased with the result and it is something I thought was worth sharing. I will definitely be using this technique for things in the future.


Item Rarity system
Dynamic, data-driven item rarity system.


Arcade Machine shaders
During a group project for school, we needed some assets to populate the background of an arcade scene in order to give the arcade a little bit more life. I decided to make a few arcade cabinets with screens that weren't just static, emissive images.


PBR Materials
Various PBR materials made in Substance Designer.


Shader and FX practice
A few shaders, particle effects and 3D models, I made as practice.


Jargon Assets
I made these assets and materials for a group project for school.
bottom of page