Skip to main content

KEIS Sprint 3

  This sprint, I worked on some improvements to the enemy wave and damage system, some status conditions for the enemies, as well as some exciting VFX!


When I started working on the blood VFX, I knew I wanted to do something similar to ULTRAKILL’s rendition. I started with Unreal Engine 5’s directional burst niagara template, because it featured ribbon-like trails behind the particles that I knew I wanted. However, these ribbons were square on each end, and I wanted mine to taper off instead of just end abruptly. To this end, I duplicated the built in ribbon material so I could make some modifications. I found that by plugging a sphere mask into the opacity of the material, and then multiplying the radius by the particle’s relative age (a 0-1 value representing the percentage of the particle’s lifetime that has already passed). This worked pretty well, and gave my ribbons a more rounded, tapering look!


The second major problem I had to solve was getting the particles to leave bloodstains on the environment. After doing some research on different approaches to this, I settled on having my particles spawn decals when they collided with static objects. I began by creating a simple, 16x16 bloodstain alpha texture that I could use for the decal. After this, I set my ribbon particles to generate collision events. Then, I created a new emitter that would respond to collision events by spawning itself at the collision location, and attached a decal component onto it. This allowed my particles to create decals where they collided!


After fixing some of the stretching that occurs when a decal is projected onto a surface that’s not directly facing the decal, I wanted my particles to slowly “dry up” so that they wouldn’t just suddenly vanish into thin air. Thankfully, Unreal’s materials give you access to a node called Particle Fade Out Opacity, which is a float ranging from 0-1 that’s manipulated by the particle emitter itself. 0 represents fully faded out, and 1 represents not faded at all. I started by plugging this value into a 1-x node and multiplying it by the alpha of the base texture to get the opacity, but this approach made the entire decal slowly average out in opacity, then fade out all together, which I wasn’t satisfied with. After numerous alternative iterations, I settled on the simple approach of subtracting the fade-out value from the texture’s alpha, meaning that the more transparent parts of the texture would completely fade out before the more opaque areas. This gave my decal a nice “shrinking” effect that I thought passed pretty well for drying up!



There were some other things that I had wanted to try, like randomizing the texture of the particle, or adding a normal map to the material, but I didn’t get to a satisfactory point with either of those endeavors, so I decided to leave it on the back burner for now.


The next VFX system I worked on this week was a muzzle flash effect for our guns!



This one was very fun to make. It consists of two different animations. One shorter, triangular spike that starts fading out from the bottom center, and a longer blast effect that also fades out from the origin. By centering the long blast effect, and creating a ring of the smaller spikes around the side, I was able to create this effect. Finally, I added some sparks, because I thought that it looked more fun that way! Finally, I parameterized the color that fades in over the particle’s lifetime, and I want to go back and add parameters for the scale of the effect so that we can easily reuse this for other weapons. Note: pictures were used because I could not get the animated gifs from google docs to work


Comments

Popular posts from this blog

CAGD 373 Blog Post 4

This sprint I was assigned a modular set to create the basic interior rooms out of, with three different textures for the walls. (a Square Brick Texture, a Cement Texture, and a Metal Wall Texture) The actual modeling itself was as basic as it gets, I just made a few different shapes and sizes of wall along with a doorframe, with a couple floors and ceilings to complete the set. The interesting stuff this week was the textures, all of which I made in designer! The brick texture was probably the most complicated, and the one I’m most proud of. Starting with a brick generator, I used some gaussian spots to add some variance to the shape of bricks (using the spots to “cut out” chunks of the perfectly square bricks) and that worked pretty well! After that, I used a grainy looking noise map to fill in the black part of this mask to add in the noisy texture of mortar between bricks Next, to add some color variation to the bricks, I used a flood fill node, which was able to identify all the...

Idle WitchCraft Sprint 4

  This sprint, I started by implementing alternate success conditions for certain scenarios. This means that for some scenarios, there will be multiple different stat checks that can lead to different outcomes, and potentially different scenarios down the line. Two different outcomes of the scholar’s exam scenario. One for high intelligence, and one for high charm! This was an interesting programming challenge, as I had to figure out how to associate these alternate conditions with the data table that is currently holding all the scenario information. The interesting thing about these alternative outcomes is that they function as almost half a scenario. They have no intro dialogue, but they do have a unique stat check, outcome dialogue, and list of scenarios to unlock on success. Because of this, I decided that I would copy the current scenario into a new struct. That way, I could “swap out” certain pieces of data at runtime without having to fill my data table with duplicate inf...

CAGD 370 Blog Post 5 - Final Sprint and Postmortem

  The Final Prototype is officially done! And this final sprint has definitely been the most intense yet. While not perfect, I’m very happy with the game that me and my team have made, and I feel a lot of motivation to start a brand new project! But before I get ahead of myself, it’s a great time to reflect on the last two weeks and this project as a whole. To start off our final sprint, I once again made adjustments to the pole vaulting. I made the impulse of the vault scale with how close you got to the pole, which meant that not only could the player not get an immense movement boost from a standstill, but also that there was now a “sweet spot” to aim for to get the most vertical height out of the vault. To help players seek out this sweet spot, I also took the time to create a charge-indicating progress bar next to the player that would fill up the closer they got to the sweet spot. The bar progressively fills as the player approaches the sweet spot After this, my lead de...