chrysaora 🎐
@chrysaoravioli.bsky.social
61 followers 15 following 220 posts
Making whatever, whenever. 📺 YT • • • https://www.youtube.com/@chrysaoravioli
Posts Media Videos Starter Packs
Hey, actually not too hard!

Converted the entirety of the wall normalization code from the material graph into Niagara using a single HLSL node.

Now, I've got perfectly packed Floor depth values and Wall normals in the alpha channel of my position map. On to depth masking experimentation!
[ Niagara Depth Masking ]

Porting over my material graph code into Niagara, piece by piece.

Not too much time tonight. Focused only on code that determines which parts of the paint map are considered floors vs. walls. These outputs will be used later in the script for compositing purposes.
It might take me a while though...

Day job is starting to lighten up but Ninja Gaiden 4 is also coming out. I'll definitely get sucked up into that since it's a big new Platinum game.

Hopefully by end of the year, I can finally have an acceptable painting solution that I can play around with.
Next, I'll recreate the math seen here in Niagara and then hopefully, can finally begin creating a masking solution.

In this image, I only want the splatter to apply to the wall but it's showing on some undesired locations (wall side & floor). The masking solution should be able to remedy this. 3/🧵
When paint hits a floor, I allow it to be shown in a certain range like Splatoon.

Allowed range is (-65504 <= z < -1) & (1 < z <= 65504). For simplicity, my paintable floors are placed within a range of (100 < z < 65504).

In this example, I'm only showing all floors that are located at 800cm.

2/🧵
Packing RGB Normal Map into a single channel so I can potentially halve the compute time for paint splatters.

When a paint splatter hits a wall, the hit angle is from 0 to 360 degrees, which can be normalized to a value from -1 to 1 (think unit circle).

1/🧵
Still trying to figure out the exact math to get it to work but the Z-depth works so far. As usual, it's the wall math that's annoying.

As always, the downside of these Sunday night epiphanies is that I have work tomorrow and I really want to just spend all of my time working on this problem.
The plan is to store normalized wall angles to a range of -1 to 1, while the floor z-height can be a range of 100 to 65504.

So depending on what sort of splatter you have (floor vs. wall), I can just use this single channel for masking and save on both memory (bye extra 64mb RT) and compute time.
Had a Sunday night epiphany.

Before, I was doing two texture samples to mask a paint splatter but this doubles the compute time. It'd be nice if I could just use a single texture, so I'm trying to cram the normal map info into the unused alpha channel of my World Position texture.
Reposted by chrysaora 🎐
🇫🇷 Culture shock upon visiting France: damn, so many people still smoke here, don’t they realize how addictive and harmful cigarettes are

🇺🇸 Culture shock upon returning to the US: holy shit why are children walking around drinking 20oz bottles of soda with 65g of sugar per serving
This was my first time playing a UE5 game, I'm pretty split on the visuals.

Loved the variety of areas just for studying Lumen, since there's a good mix of shadow and non-shadow casting lights.

But, these sorts of visuals are difficult to parse for navigation. I'm too used to lower fidelity games.
Completed my first playthrough of Ninja Gaiden 2 Black.

Much more enjoyable than Razor's Edge. I was absolutely miserable throughout RE so this was nice to play.

That said, one of the benefits of RE being difficult on Normal was that it made NG2B an absolute cakewalk.
Last night, I had a wack dream where Bayonetta showed up with a drill like this but the drill tip was made by arranging a bunch of gun barrels together.

It was like a weird gatling gun thing but she could also ride it backwards like a broom while it shot out a bunch bullets.
So, I guess something like this?

Singular point light, does not cast shadows. Using Light Channel 2 though I'm still not certain how NG2B's method only affects the player and not any other NPC that also responds to Light Channel 2.

Maybe they did some other method, idk.
Putting aside that this is not a weatherproof outfit..

Rachel's hero lighting is the most obvious thanks to whoever cranked the roughness to max. Her forehead's reflection indicates that they use a singular point light.

Disabling Lumen makes it more apparent. No idea how they isolated it though.
Something that I'm trying to figure out is how NG2B handles "hero lighting". PC seems to be consistently lit, when no lights are nearby while environmental lights seem to contribute to them.

Images contain ALT text that just have a few observations... no concrete conclusions just yet.
Kinda neat that Momiji's level clearly has two new alternate paths that did not exist in Ryu's level.

Doesn't make too much sense why the first image's area is suddenly connected to some sewers but it's still really neat how they remixed an existing level.
Trying out Ninja Gaiden 2 Black. Mostly picking it up because...

A. Does not have Buddha boss. Did not care for it on Switch.

B. For studying Lumen

Look at that invisible point light that only appears in the specular reflection. I've had the same "issue" so it's funny to see it show up.
Paint Actors -> Paint Application -> Paint Detection -> Paint Evaluation

These four stages of the "Splatoon plugin" are working fairly nicely for a POC. Individual parts still need to polished but I've gotten pretty far for 4 months of off/on work. Learned a whole lot too, especially with Niagara.
The Material code that was later recreated in Niagara.

Huge hurdle was understanding how to use the math of RotateVector and RotateAboutAxis together to rotate the box mask in 3D space as well as the UVs of the splat texture.
Pretty big upgrade that now uses textures instead of basic sphere masks. Still some quirks to solve but it's 90% of the way there.

Holy crap was the math difficult to figure out. A huge hurdle was figuring out how to rotate a texture in 2D space while masking it with a rotated box mask.
Yesterday, Epic released an official free course about the Gameplay Ability System (GAS). I'll be checking it out over the next few weeks (crunch time at work 😭) but it's a good to finally have something official rather than reverse engineering something like Lyra.

dev.epicgames.com/community/le...
Building an RPG with Gameplay Ability System | Course
Dive into the powerful Gameplay Ability System (GAS) and explore how its core components connect together to build a core gameplay loop. We'll also prev...
dev.epicgames.com
Currently, the method to create custom zones is primitive, relying on dragging cube or sphere markers to create the "splat zone".

One of the neat things is that I can assign a "Group ID" to the markers, allowing for a single "detection atlas" while ID # is used to enable desired evaluation zones.
Some experiments with a slightly more advanced paint detection system, attempting to recreate Splatoon's Splat Zone feature.

I decided to inverse my sphere/box mask code to filter out pixels in a specified volume and send it back to BP for further processing to occur.

#UnrealEngine #UE5
Replaying Slitterhead on Nightmare difficulty since I have a long weekend. Still love how stylish the level complete screen is.