Rail Grinding Spline Tool & Boss Animation
Project Summary
I took a finished boss for an ARPG, moved it into unreal engine and remade it into a zelda-style boss.
Using sequencer i cut up the longer animations and reused them for different boss attacks.
I made a modular floating hand using animation retargeting for attacks.
I also made a tool to procedurally generate the rails in the arena for the players rail grinding mechanic.
Assets used
Blockout Tools Plugin
Close Combat Animset
Skeletal Mesh w/ animations from a school project
Breakdown
-
Focus: Editor Tools, Technical Design
-
3 weeks half time
-
Created a spline tool to procedurally generate the rails in the arena
-
Made modular floating hands for boss attacks
-
Repurposed animations using retargeting and sequencer
Procedurally Generated Rail-Grinding Spline
Tool Features
-
Select a cylinder or tube for inner or outer walls
-
The spline adjusts the spiral based on radius and height
-
Set spline point count
-
Generate Collision and Meshes
Tool Development
Making it Modular
The first challenge was getting the radius and height from the static meshes.
I realized that the plugin blockout tools have these variables already exposed and adjustable, so i decided to use that as my base mesh.
This made it easy to set up the tool to work with meshes of different sizes.
Rail Spline Mesh
The second challenge was the rail mesh.
Making a spline mesh was already in place with the collider generation; but i needed to add an offset that followed the wall.
I tried the following:
-
Add offset relative to the root of the cylinder:
This gave the mesh knots every 180°. -
Scale the vector:
This only worked in one direction. -
Make a second spline:
No.
While doing some QA in the group project, fixing assets in blender, I thought of a potential solution: why don't I just make the offset in blender?
This almost worked.
After some experimentation I also realized that the forward axis in the mesh is important when calculating spline meshes, so I didn't overwrite it when importing.
If unreal didn't overwrite the forward axis during import, the spline mesh worked as intended, and i lined up the offset i set in blender with the initial offset i set on the spline.
The Rail mesh in Blender.
The Boss
In order for the bossfight to work the way I wanted, I decided to make the spline tool.
I not only used it to procedurally generate the arena, but I also made a variant with a custom offset that I attached to the floor that the boss uses for it's movement.
With the increased scope of making the tool, it's not a full bossfight, but I got far with adding the mechanics I wanted.
Animation Retargeting
I used animation retargeting to retarget all the previously existing animations to a separate hand.
I then used sequencer to cut up the longer animations into shorter animations that i could use for individual attacks.
Modular Hands
Due to the original boss design having floating hands, and the gems making great weak spots, I asked the original boss creator for a hand deattached from the main skeleton and the gems material separated from the rest.
With the gem color separated, i set up a dynamic material that changes base color.
When the hand tries to attack you, the color indicates when you can knock it away.
Boss Fight
The concept of the fight is that you're trying to capture the sun(ball) from the boss.
Reflections
Things that went well:
-
The Tool
I didn't plan on making it, but i feel like that's in the spirit of tools. I'm glad i did.
If i put some more work into it, i could see it have much broader usage. -
The Boss
Even if unfinished it feels like a solid base to work from,
I have almost too many concepts i want to try out.
Things that went less well and what I learned from it
-
The initial idea was too ambitious.
If someone gave me 3 weeks half time to make a boss, this was overscoping a lot.
Pivoting to making the tool was a good call, but I shouldve went for a more basic boss concept in the first place. -
A lot of the more interesting issues that came up developing the tool never got documented.
I'm excited to keep working on this as a side project!
Thank you for reading!