This is the activation animation of an OXEO System. The spline animations might appear simple at first, but it combines four distinct animation systems, all working together to achieve the final effect. It takes a lot to accomplish this animation in an efficient and appealing manner. I will give a brief overview of these systems below.
Spline Path V2
The Spline Path V2 blueprint is the first line of defense for spline animation in Virtual Viking. It is highly versatile, having the capacity to grow, shrink, and trigger interactions via collision or event dispatchers. They can be chained together to create complex animations like those in the VXR. The speed, size, and color are all customizable. There are several quality-of-life features, such as the ability to reverse the direction of the animation if a spline was created in the wrong order or the ability to input the length of time a spline animation should take. These can be combined to create almost any desired flow animation. The only downside is that one actor is required for every spline animated. This inefficiency means it is too expensive for animations with multiple simultaneous activations, such as the sprinkler system or the OXEO activation. Despite this, the mesh created during the growth animation is contiguously optimized throughout the animation, as can be seen on the wire frame.
Straight Scale En Masse
The Straight-Scale En Masse addresses the inefficiency of the Spline Path V2. It is capable of running multiple straight spline animations at once, and because it is limited to animating straight sections, the animation can be performed as efficiently as possible. It uses a structure to track state information without creating additional actor objects. Each straight section can trigger subsequent sections, as well as other spline animation actors, via collision. The primary use case for this system is in the sprinkler system branch lines.
Curvey En Masse
The Curvy En Masse is the counterpart to the Straight-Scale En Masse system. When I created the Curvy En Masse system, I extracted the animation logic from the Spline Path V2 blueprint to a function library. This means that the Curvey En Masse system can perform the same growth animation performed by the Spline Path V2. Similar to the Straight Scale En Masse, it then uses a struct to track the animation data of these splines. This construction allows multiple simultaneous animations referencing curved splines to be run by a single actor. Without this efficiency, complex animations, such as the activation of the OXEO System, would not be possible.
Dash Anim
When I started creating the OXEO system, I wanted an electrical effect that followed our wiring. Before, we had a ribbon particle effect stretched between points to convey signal transmission, and this portrayal left something to be desired. I could have achieved the relevant effect with a particle system, but I wanted to have a physical presence and imitate the style of our water spline animations. So, I developed the Dash Anim. This animation pushes a group of three spline meshes (two caps and a middle section) along the spline until they reach the end. It will activate for a certain period and run at a given speed. Interestingly, because this animation moves so many spline meshes, it is one of the least efficient. It can only be used for short periods of time or over short distances.
Per Segment Animation
I don't yet have a demo for the per-segment animation, but it can be observed in the manifold (at the top) of the OXEO activation. The Per Segment animation is the most comprehensive and complex of all the spline animation systems. If implemented correctly, it could mimic the water flow for an entire system with one actor. It can do this because instead of tracking a single spline, it tracks a "segment," which can be any two points on a spline. This segment is defined as such because water (or whatever is being animated) can "flow" from either segment point. The water could then meet at any point between them and continue flowing into another segment, etc. This means we can set up a dynamic system that can handle all flow internally. I will have to write a full page on this at some point to explain in more detail why this is special.