This final sprint was the last push for the project. My goal was optimizing the rock wall even more, making the rocks bigger, and rigging the dragon character. I made the rig for the dragon do what it needed to: be posed. Nothing too complicated, just a basic IK setup so he can be posed. For the rock wall, I optimized the code a bit so rocks don't spawn on top of each other any more. After talking with Nick, we decided that the small and big rocks looks better than the medium and big rocks together. So we kept it that way.
Monday, July 28, 2025
Wednesday, July 16, 2025
Gods of War Check-In 5: The PCG Overhaul
This sprint was all about polish. My main two goals were to implement the feedback given to me about the rock wall and create a more diverse forest with things other than trees and ferns. I believe I was successful in both of those goals and then some.
Firstly, learning PCG for this project has been amazing and I won't be putting it down any time soon.
With that out of the way, let me explain what the main feedback of the wall was. Basically, the wall was too noisy and didn't leave any room to rest the eye, which made it painful to look at. I decided to go for a "in-between" rock approach that treated smaller rocks as a type of grout that connects bigger rocks together. For the small rocks, I made a system similar to how I have the grass spawning, creating circular point grids that vary in size. Overall, it came out very nice in my opinion.
For the environment PCG, I was tasked with adding more to the environment. With the help of Nick Galan and Beryl Van Ness, we gathered about 15 different assets from the FAB marketplace to scatter around the environment. Myself and Nick created a "priority" list for spawning that put trees and branches/stumps at the top and rocks near the bottom. Mushrooms were also added and spawn near stumps in a similar pattern to the grass.
The most important thing I changed was making the PCGs now run on the GPU! I found a way to convert certain nodes (like sampler and mesh spawner) into GPU nodes without having to completely rewrite them in HLSL. That improved the framerate in editor from 10fps to a steady 30fps. I will definitely be using that trick from now on to not bog down the CPU.
Included in the images are some examples of how the branches and grass spawn.
![]() |
The ENTIRE Environment PCG |
Branch Spawning
![]() |
Check to see if spawning branches is turned on. |
![]() |
Get rid of any points in the "No Spawning" spline and set a max and min height to spawn. |
![]() |
Apply random noise to the points and take in User defined parameter to keep a percentage of them. Then, set their density based on their normal value. |
![]() |
Only keep points that are on flat surfaces (normals between 0.9-1), remove the points if intersecting with other meshes or stumps, and spawn. |
![]() |
Check to see if grass is allowed to spawn, and create a point grid based on user defined size. Copy the point grid to the points determined by the surface sampler. |
![]() |
Apply random noise to the grass and get rid of points by user input. Then, calculate the distance between every initial point (before the point grid is applied) |
![]() |
Scale the center point the largest going out and project it onto the landscape. |
![]() |
Check the grass' normals and filter based on how flat it is. Then exclude it from other meshes and predefined anti-spawn area. |
![]() |
All the rock wall parameters. |
![]() |
Rock wall with little rocks in between |
![]() |
All new meshes spawning, with trees and branches having priority |
Wednesday, July 2, 2025
Gods of War Check-In 4: This Stuff Rocks!
This week I was tasked with making another PCG system. This time it was for rock walls in order to help raise the temple to a higher elevation. The wall was to block the landscape from just raising up and instead provide visual interest. I used Houdini in order to generate 11 different rocks and then put them into Unreal. The parameters for this wall include density, height, minimum size, and maximum size.
![]() |
Full PCG Blueprint |
![]() |
Example of Houdini Rock |
![]() |
Rock Wall in Context |
Wednesday, June 18, 2025
Gods of War Check-In 3: Grass, grass, and more grass
This sprint was focused on improving the PCG system to make the spawning of the ferns more natural. Also this is the sprint where I added the ability for grass to spawn as well.
The grass was my nightmare. Because of the number of points that need to be calculated each time, I have spent well over 6 hours in total waiting for debug cubes to generate. Eventually, it did all come together though. The grass is using a point grid and a distance node to create a radial effect of being smaller the farther away from the center it is.
The large and small ferns are now combined into a single spawner, and have a cluster applied to them to make them spawn closer together. It's not much, but it's honest work.
There was no update to the tree spawning other than the mesh that was replaced after I took my renders.
Also, I have learned the amazing power of the Named Reroute Node. It allows you to be super clean with your PCG code and not have wires everywhere. Editor parameters have been added for quick iterations.
![]() |
Radial Grid Grass Spawning |
![]() |
Grass Spawning Based on Normal |
![]() |
Grass-Only Render |
![]() |
Fern New Clumping Locations |
![]() |
Fern + Grass Render |
![]() |
Close-up shot of environment spawning |
![]() |
Editable Parameters in Editor |
![]() |
Clean Blueprint (No wires) |
Wednesday, June 4, 2025
Gods of War Check-In 2: The PCG Era
I took a step back from doing the asset manager because it was repetitive, and instead moved towards a more procedural direction. Using Unreal's PCG system, I have been working on creating a procedural environment for our scene. I used multiple different techniques to achieve the environment including self-pruning, spline sampling, normal to density conversions, spatial noise, and a lot of difference calculations.
For the meshes I used a single conifer tree mesh, three large fern meshes, and three small fern meshes.
![]() |
This is the base I was working with. |
![]() |
Surface Sample (for Trees) |
![]() |
Post-filter and upper/lower bounds (for Trees) |
![]() |
Normal-to-density calculations (keep only flat surface) |
![]() |
Trees rendered (from above) |
![]() |
Large Fern Density Sample |
![]() |
Fern + Tree Difference Calculation |
![]() |
Large Fern Render |
![]() |
Small Fern Density Sample |
![]() |
Small Fern Render |
![]() |
Tree, Large Fern, and Small Fern Render Combined (from above) |
![]() |
Tree, Large Fern, and Small Fern Debug Combined |
![]() |
Spline added to create non-spawnable section |
![]() |
Render + Spline |
![]() |
Main Spawning Blueprint for Foliage |
![]() |
Applying Spline Data for non-spawnable area |
Wednesday, May 21, 2025
Gods of War Sprint 1 - Project Setup
For the summer Common Art project, my team will be creating a Japanese mythology scene with 3 characters and 1 creature. For this project, I am responsible for being the asset wrangler for outsourcing and creating tools for the project.
This first sprint, I setup the initial project, setup the .p4ignore, setup a way for our undergrads to give us their assets, and created a mockup UI for an asset manager. I was also responsible for making sure all assets got into engine seamlessly and in the correct file structure.
The asset manager will use JSON to store information about owner, path, version, etc.
Tuesday, February 18, 2025
About Me
I hate tedium. Nothing
kills creativity faster than getting stuck doing the same repetitive tasks over
and over. As a tech artist, my goal is to build tools that cut out the busywork
so artists can focus on what really matters—making cool shit. If I can make a
workflow faster, smoother, or just less of a headache, then I’m doing my job
right.
I’m all about efficiency and problem-solving.
Whether it’s automating a tedious process, fixing a frustrating pipeline issue,
or making a one-click tool that saves hours of work, I love finding ways to
speed things up. There’s nothing better than hearing an artist say, “Wait,
that’s it? That was so much faster!”
For me, tech art is about making things feel
effortless. I don’t just want to build tools—I want to make them intuitive,
seamless, and actually enjoyable to use. The best tools are the ones you don’t
even think about because they just work. If I can take something that used to be
frustrating and turn it into something artists barely notice, then I know I’ve
done my job right.
At the end of the day, I just want to help people
create without tech getting in the way. No more clunky workflows, no more
wasted time—just smoother, faster, better ways to bring ideas to life. Let’s
make cool shit, and let’s make it fast.
Gods of War Check-In 6: The Final Push
This final sprint was the last push for the project. My goal was optimizing the rock wall even more, making the rocks bigger, and rigging t...

-
This week I was tasked with making another PCG system. This time it was for rock walls in order to help raise the temple to a higher elevat...
-
This sprint was all about polish. My main two goals were to implement the feedback given to me about the rock wall and create a more divers...
-
The first Cohort 21 assignment of the fall. The goal was to create either a 2D or 3D sprite using both Unreal and Maya. Professor Nick ...