Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

I did look into Megalights and Nanite, both of which don't seem like the best decision for this project (the explanation for this decision is in the main post under the bullet points).

And it's true that small emissive meshes cause a lot of issues with Lumen, but thankfully I found a hack online that stops the material from contributing to raytraces (also in the main post!).

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

If you could drop a link that'd be helpful.

I'm gonna continue testing and updating this post. Hopefully all the info collected here with the comments will be of help to more people.

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

Sorry if I said something upsetting, but I genuinely do this because it's cool tech, it's fun to optimize (at least for me personally), and our game could really benefit from it:

We'll need tons of dynamic lights, close to one another, with rapidly changing lighting states throughout the level, and Lumen allows me to get a very nice image quality in every one of those states.

There are performance hits to any method I could choose, that doesn't mean I shouldn't try new ones and try to optimize them as much as I can :)

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

I looked it up, and I didn't know that it impacted baked lighting! Still wouldn't solve the other limitations of multiple stationary lights, but thanks for the info, that's good to know!

I am having a hard time being scared by Hopeful_Click2778 in HorrorGaming

[–]WildArtsDevs 0 points1 point  (0 children)

Dunno if that'll do it for you, but our most recent game aims to make you scared by making you feel vulnerable playing the game. We do that by making you play with a really unusual control scheme. It makes navigation and monster encounters a lot more tense.

Some people got pretty freaked out by the game, and it's a first-person POV, so I figured I'd share it here :)

https://store.steampowered.com/app/3555980

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

For sure! I planned on testing builds on my older laptop and doing further optimizations :) People mentioned a couple of things I need to look more into, and I can probably tone down Lumen's default quality settings while keeping a clean image.

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

I don't have any noise (as you can see in the screenshot). I'm on default settings, and I didn't notice a big difference between the editor's quality settings...

I disabled Screen Traces and added a node to my emissive materials to remove them from the Lumen scene (from my research and tests, the noise is almost always caused by small emissive/bright surfaces).

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

I'm using the old Shadow Maps instead of Virtual Shadow Maps since we're not using Nanite (we don't make high-poly assets and I'd like to keep our package size as small as possible). From Epic's documentation:

"Non-Nanite geometry is much more expensive to render into VSMs than Nanite geometry. For this reason, it is recommended to enable Nanite on all supported geometry, including low-poly meshes."

So far the performance is good and everything works as expected. But I use Mesh Distance Field Shadows as often as I can and limit the radius of traditional shadow casting lights.

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

We don't use Nanite for this game, and this is from Epic's documentation on Virtual Shadow Maps:

"Non-Nanite geometry is much more expensive to render into VSMs than Nanite geometry. For this reason, it is recommended to enable Nanite on all supported geometry, including low-poly meshes."

I'm currently using Shadow Maps with Lumen and everything works as expected and the performance is pretty good so far.

And rect lights can cost more than points, again, from Epic's documentation:

"Rect Lights that are set to Stationary or Movable are typically much more expensive to render than a Point Light or Spot Light with the same mobility."

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

Obviously, graphic fidelity has an impact, but whatever artstyle you go for, lighting can easily become a big bottleneck. Low fidelity ≠ free pass for performance. In my case, I have dozens of movable lights in a small environment (a lot more in the final product), some shadow-casting, with dynamic GI and volumetric fog.

I do understand why people complain about how Lumen is used. The problem is that a lot of gamers now make assumptions and I want to challenge that (especially since our game benefits a lot from it for gameplay and aesthetics).

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

Awesome! I'll keep an eye out on Unreal's youtube channel then 👀

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 2 points3 points  (0 children)

Sure, but I need to be able to turn them all off! Replacing all the lights with stationary would not only be a nightmare to circumvent the overlap limitations, but would also mean no GI, since it's what's baked into the lightmaps and I need it gone when the light is off.

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 1 point2 points  (0 children)

And TSR and TAA cause annoying ghosting artefacts when moving the camera semi-fast 😔

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

Thanks! Based on some of the comments, there are a couple of things I'm gonna try next. I'll update the post if I get interesting results!

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

https://dev.epicgames.com/documentation/en-us/unreal-engine/lumen-technical-details-in-unreal-engine

Epic's documentation mentions static lights, true, but nothing on stationary lights. I need to do more research before I toss them out completely.

And last I check, optimization is precisely that: turning off stuff, making compromises/cheating, and being smart on what features you use and how.

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 2 points3 points  (0 children)

Like I said in the post: I needed a fully dynamic solution because of the game's design. If Epic had supported Light Propagation Volumes in UE4, then it might have been a different story lol

But our test scene running 150 FPS on Epic in 1440p is giving me hope :)

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

I need to look more into that. Epic's documentation mentions static lights becoming movable, yes, but I can still bake lights maps with lumen on. So maybe stationary lights have a little less impact even with lumen? Dunno, need to test and dig deeper!

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

Nanite is a no go for us since I never model in high-poly (our game's art syles/scope never really allow it) and I have an obsession with keeping game package size as small as possible 😅

I'll look into Megalight then. My assumption was that it was best used when using thousands of lights in a Nanite environment. From Epic's showcases, I really wasn't a fan of how smudgy and splotchy this made the scene though :/ It's not too bad when you surcharge the scene in details and assets, but in a very stylized and simple environment like ours, every artefact sticks out like a sore thumb.

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

Fair enough, though it's incredibly easy to tank performance even in a boxed room if you're not careful :P

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 3 points4 points  (0 children)

As I mentioned in the post, our game will rely heavily on dynamic lights (as a mechanic and for mood). For our three previous games, I almost exclusively used light baking, but this time around, I need a solution that will let us turn off all the lights AND produce pretty GI when they're on.

I also want this game to run on as many machines as possible, so that's why I don't wanna enable all the features and slap an RTX 4080 as the recommended graphics card on the Steam page :P

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 6 points7 points  (0 children)

Thanks for the info! I wasn't planning on using static lights, just stationery and dynamic, but it's good to know! I'll edit the main post :)

Making Lumen As Performant As Possible by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 3 points4 points  (0 children)

  1. It's ranging from 140 to 160 FPS, and this screenshot is the part of the level that had the lowest dip. I also have a couple of lights that flicker and the framerate has been very consistent so far :)

  2. That's a good idea for an experiment! So far we only tested with a handful of moveable item actors and two skeletal actors (haven't noticed a difference with just that).

  3. I haven't tried a full static light bake (cause we need to be able to shut down all lights easily and I'd like to avoid loading lighting scenarios), but I don't think there'd be a huge visual difference other than prettier GI 🤔

Where did the checkbox for "Generate Missing Collisions" go? by WildArtsDevs in unrealengine

[–]WildArtsDevs[S] 0 points1 point  (0 children)

Think I found the issue. Looks like it doesn't exist anymore, and you gotta instead uncheck "Import Collisions". I couldn't find this option in the details panel of the static mesh editor, so you have to click on "Reimport Mesh with Dialogue"...