Nanite Performance is Not Better than Overdraw Focused LODs [TEST RESULTS]. Epic's Documentation is Dangering Optimization.

Yes, he deletes any comments that disagree with him, and he’s been doing this since his very first video. He erases and bans anyone who challenges his narrative.

It’s just another YouTube channel with no value, like so many others out there.

7 Likes

We know that ‘Threat Interactive,’ which you reference, is actually you.

The quality is rather mediocre, and it’s clear you don’t even understand most of what you’re talking about.

Furthermore, there’s a lot of empty talk with little substance, except for the goal of raising $900k for a supposed magical in-house solution.

This really smells like a scam.

6 Likes

Why did you tag me with this

That was hardly toxic, though. You randomly spoke in 3rd person which is weird, even more so - deleting comments that don’t follow your narrative is just cringe and removes any and all of your credibility.

If people are being rude, sure. But you or “your PR” has been removing comments willy nilly.

I initially started following this thread because I was genuinely curious about the various test results, but some of your tests do seem, like many others have pointed out, to be quite unrealistic.

3D modeling takes time, making good LODs takes time, optimizing takes time. Time is money and Nanite does a good enough job eliminating that issue to an extent. It’s not by any means perfect, it definitely has its issues and limitations - but I would expect nothing less from a feature that is arguably still very experimental.

All that said, I think the main reason this thread is going off topic is partly because of you and your utter inability to accept the fact your tests may not be the “damning proof” you think it is.

Frankly, I found the views of the various other thread contributors to be more insightful than your various videos. But from a reader’s perspective it’s as if they’re trying to talk to a brick wall.

This thread started out intriguing but now it’s just silly.

10 Likes

We both wasted our time apparently.
You created and moderated a giant thread AND a youtube channel, dedicated to rage baiting about Nanite, while lacking even the most fundamental understanding on it’s usage.
You wasted hours of time, doing benchmarks on unrealistic scenarios, and faking data to prove your point.

Nanite is by far an incompetent solution. It’s a tool, that has different requirements than traditional rendering. If one does not understand those requirements (as you, apparently) it will lead to worse performance.

About your thoughts on Marvel: The video is 4k, not 1080p. We only see cutscenes not gameplay in this trailer. As a video game developer you should know, cutscenes with 30FPS is Standart in “Quality” Mode, because they ramp up the post processing to make them look better.
Horizon does that, The Last of us does that, everyone does that.
The characters are much higher quality than PS4. Would love to see an example for your claim.
The detail of the environment is on a different level than any other game. (Due to nanite)
And “Bad TAA” is just your preference. Which does not matter in this discussion.

So to summarize, again, half of your claims are lies or lack understanding of development and practices. Looking forward to play a game of “Thread Interactive”. ^^

6 Likes

I might release my quality settings… but ive made myself some low medium and high settings for nanite, lumen and virtual shadow maps… and im shocked that i got my detailed city with lots of detailed nanite meshes running at 90 fps even with my RVT in the scene. highest settings i never get below 60 fps … even with tesselation enabled.

The trick to using nanite, lumen, virtual shadow maps, and Run Time Virtual textures is the CVARS console commands and the best way to test them is device profiles.

And im nto even done yet… i feel like i can get this up to 100 fps. Its currently 4k rendered at 1920x1080 with TSAA upscaling.

World Position offset materials need to be handled with care… disabling them at a distance or telling them not to modify the virtual shadow map all together with realtime updates.

3 Likes

Do you mind sharing the console commands you are using? :slight_smile: This will probably help a lot of people!
@kurylo3d

Personally i can recommend:

r.Shadow.Virtual.ResolutionLodBiasDirectional = -0.5
Every time you increase the number by 1.0 it will half the shadow resolution for VSM.
Default is -1.5, but that is a 16k shadow map. If you don’t need pixel perfect shadows, this is the best way to increase performance.
There are also variances for different light types:
r.Shadow.Virtual.ResolutionLodBiasDirectionalMoving
r.Shadow.Virtual.ResolutionLodBiasLocal
r.Shadow.Virtual.ResolutionLodBiasLocalMoving

Using WPO will lead to a lot of cache invalidations and therefore worse performance.
You can set the “Shadow Cache Invalidation Behavior” for each individual mesh under Lightning->Advances->Shadow Cache Invalidation Behavior set it to Rigid. This will disable invalidations from WPO.

In addition you can use r.Shadow.Virtual.Cache.MaxMaterialPositionInvalidationRange, which will set a max range in cm, after which the WPO will not affect VSM Invalidations.

Then i do recommend
r.Nanite.ViewMeshLODBias.Offset = 2
This might reintroduce mesh popping AND will lead to more overdraw, as the clusters will be bigger.
BUT as multiple people already pointed out, nanite is not perfect, and if you have a lot of sub pixel triangles, you can increase your performance quite a bit.
Ofc this depends on your project and mesh density, play around with the value and see if it has any effect.

Had a few more, that i used for my latest project but can’t remember. Will put them here when i get to it.

4 Likes

ill put some of the settings up when i finsih all my testing… But i will say Run Time Virtual textures… man… i dont know why and i cant explain why… but setting r.vt.FeedbackFactor=250 instead of the default 16… upped me by about 20 fps… im not even joking. And its steady… at 16 it flops around between 55 and 70 at 250 it sticks around 83-85…

and if u try to set r.vt.FeedbackFactor=1 … and try to lower the quality. for some reason your fps gets worse… down to like 40 fps… with blurry textures… Its very interesting and i guess i need to test it on lower end machiens to see what thats all about.

Also i can really recommend this talk:

Please keep in mind, people, in Unreal Engine the graphics are 150% from the start, and you need to scale them down to make a game. Nobody needs pixel perfect shadows, or completely seemless LODs.
People don’t care about stuff like that, as long as your game runs smoothly and is well done!

4 Likes

Alright here are some benchmarks from my side. This is Nanite-Only, as i have no time manually optimizing 300 Meshes.

The scene is rather small, compared to an open world, as this was a VR escape room puzzle we did for fun a while ago.
It is using full photogrammetry assets, 8k Textures and a lot of foliage.
The full scene has nanite enabled, except the skybox. Real Time VSM. No Lumen.


The detail you can achieve with nanite is beautifull. Especially for a VR Game, peoples jaw dropped when they first played the demo, as you can literally go right up to the meshes, and they still look detailed. We are using super dense foliage meshes and tessellated landscapes. We also have WPO animated leafs and particles. So not the ideal use cases for Nanite.

The foliage and leafs also introduce quite a bit of overdraw, which is not ideal and could be optimized.


On the other hand, you can look at earch individual leaf, as it has geometry!

Okay, now after i apply all optimizations (including TAA, DLSS, console commands to adjust quality settings) we get the following profiler stats:

The Nanite VisBuffer is the biggest chunk and sits around 1.8ms.
This is consistent across hardware. We barely noticed an increase when switching to lower end systems. What does change is the Shadow Depths and the rendering.
So OFC there will be less FPS on lower end systems.

Right now, we are getting 180-200 FPS with a frame time of 5ms.
On my Laptop (3050, 8 core, 3.8GHz) the frame time is ~8ms, so ~120FPS.

This is about the same when running the game in a standalone build.
Running on my Quest 2 with PC link i get ~6.5ms frametime with a VisBuffer of ~2.5ms.

For a VR Game, that requires 90FPS, this is absolutely playable and in Budget.
And while next gen graphics are absolutely demanding, the leap you can achieve with Nanite is incomparable to manual LODs.

Also it is important to notice, we did this project in one week with 3 people. This includes everything! The Programming, downloading the assets (which took a day), building the level, optimization. The quality we achieved in such a short amount of time would be impossible without nanite.

6 Likes

Now first I would like to state a few things.

  • You’re not using Lumen, which is mostly likely due to gameplay design advantage. Good for you, doesn’t help the majority of game designs. That’s nobody’s fault, it just needs to be recognized.

  • Second, I’m not sure if you have a dynamic time of day/ position of lights according to geo which can have a considerable impact (positive) on your shadow timings.

While it might be true you created a scenario that can balance the usually cost of Nanite, you also said this:

Okay, now after i apply all optimizations including TAA, DLSS,
On my Laptop (3050, 8 core, 3.8GHz) the frame time is ~8ms, so ~120FPS.

You just admitted motion is going to appear slop-like to thousands of potential players and all your detail is not going to be visible in motion/gameplay(unless gameplay mostly consist of the player simply turning their head). You almost convinced me, but what is price image quality on the 3050?

Also, you can’t argue with other studios opinions where the belief is realistic lighting is going to have a bigger impact on realism vs high res models. Just like I’m not going to argue with your opposite view.

Give me the the exact and resolution, full frame and in-motion screenshots. Then I can add input as you have given yours to my test. The issues with TAA are far from irrelevant.

@kurylo3d

Give me the same, no context of how motion looks at 60fps. You need to measure motion at 60 since it affects temporal image quality(nobody is mentioning this…) and don’t expect most consumers to play with vsync off when most are limited to 60hz.

TSAA upscaling.

TAAU or TSR. Big difference in quality and cost.

with the temporal thing… certain Materials that are animated need a specific check box to look good with temporal. “Has Pixel Animation” works wonders… like night and day. Ihad animated rain drop puddles that looked like crap with temporal but then i enabled the checkbox for it… I think its for shaders and moving things… and it makes the temporal look awesome on those things. Like it needs to know there is motion in the shader and a way to account for it. Where as temporal has ways to know if things are moving by default but not with shaders unless you enable it in the shader.

I am curious about exploring other AA methods to see what performance bumps i can get instead of using tsaa… though TSAA also has a whole bunch of cvars to tweak for quality and performance that i havent touched yet either.

For now im using TSAA

1 Like

tsr then… if u have anything better that i can use unreal for upscaling and all that good stuff. please let me know what you think. Think i saw a youtube video a while back about a plugin for a different upscaling method possibly from amd that works a little different but is much faster but not as high quality.

Okay thats a very fair response, so i will try to provide as much data as possible.

But first, we need to be on the same page on what we are discussing here.
This thread is about Nanite Performance. But in your response you shifted very much towards TAA and Lumen. So let’s do a quick detour there.

Lumen is absolutely not production ready as it is geared towards 60 FPS performance. That is not even close to enough FPS imo. We disabled lumen because we could not get it to work within our 90FPS Budget.

Lumens main selling point is, that it does not require Raytracing Hardware to achieve photorealistic lighting. But at the same time it takes so much performance, that old hardware can barely run it.

As you can see in the Steam Hardware Charts, most users nowadays have a RTX Graphics card, as these become affordable. The RTX 3050 sits at around 200$ right now. You can also see if you sort by “changed since last month”, that the number of users with a RTX card is increasing rapidly.
So as a developer, creating a game in the next 2 years, i would just go for hardware raytracing.

Now for TAA. In our case it was actually a design choice. We liked the smooth look it created. It gave the environment a “dreamy” look.
Also, our game being a VR game we barely had any movement, so the temporal effects were not visible.

The point of TAA, or AA in general, is to smooth jaggered edges. If you use any kind of upscaler (which i would recommend anyway, free performance) you don’t need AA, because edges will be smoothed in the upscaled image. So in our case it was totally unnecessary.
Upscalers also have the advantage that they increase Nanite performance drastically, as nanite scales with screen resolution.
Rendering an image in 2k (Native VR), nanite takes around 2.5ms for culling and rasterization. For us it only took 1.8ms because we upscaled from 75%.

If you want, you can give your take on upscalers, would be interested in a good discussion there.
But IMO TAA, or any AA is unnecessary because of upscaling.

2 Likes

Alright back to the topic :smiley:

The resolution of the quest is 1832 x 1900 for each eye.
So 3654 x 1900 in total. BUT VR has a few rendering quirks, that lower the resolution cost.

For example Foveated rendering allows to only render at full resolution in the center of the screen and blurry in the peripheral vision.


Using round robin queries, you can have nanite culling for only one eye at a time, and it will always switch between left and right eye. With this you are saving culling costs for the second camera.

All in all our tests showed that rendering on the quest has about the same performance implication as rendering a 2k Monitor screen. So let’s go with that.

Based on the stats provided by epic, rendering nanite at 2k costs about 2.5ms. Nanite scales with screen resolution.

Using 75% upscaling, we can save ~0.7ms, so we are left with ~1.8ms of nanite rendering.
This is changing between 1-2ms based on where you are at the scene and overdraw.

For the virtual shadow maps, we do not have a dynamic day night cycle, so most Shadows can be cached.
That is also why the shadow costs are so low for us, even though we have multiple real time point lights and a directional light in the scene.
Shadow Depths is around 0.6ms and Lights is at 0.4ms, so for all VSM calculations we have ~1ms.

We also lowered the shadow resolution using
r.Shadow.Virtual.ResolutionLodBiasLocal = 0
r.Shadow.Virtual.ResolutionLodBiasDirectional = 0.
In our tests, a value of 0 is perfect in VR. Shadow glitches are barely noticable but it gives significant performance gains.

Out if interest i disabled caching using
r.Shadow.Virtual.Cache.ForceInvalidateDirectional = 1
and got the following stats:


Now the total VSM costs are at 2.2ms. But keep in mind, the whole scene shadow is rerendered every frame, which is not happening in a normal/optimized game.

For a day night cycle there are multiple options.

  • Moving the light on a lower frame rate (1/sec)
  • Having a mostly static light and moving it over a short timeframe

Also keep in mind, you can always increase and decrease these stats based on hardware.
In a “low quality” setting, users expect low resolution shadows, so even a value of
r.Shadow.Virtual.ResolutionLodBiasDirectional = 2 might be viable.
Our stats are based on the maximum quality settings of our game.

Hope that clarifies it. With these stats, nanite and VSM are absolutely production ready in my opinion.
And don’t forget the advantages you can get! Super high resolution meshes, automatic and seamless LODs, Infinite Objects in your scenes and a renderer that does not scale with complexity but screen resolution. Also exponential stronger effects on upscalers.

If you have any further questions feel free to ask. I did not include the motion and still screenshots for now, because TAA is not necessary if you use upscalers. So that discussion is unnecessary IMO :slight_smile:

3 Likes

As well as this newest talk from UE Fest Prague might be helpful:

1 Like

It’s a joke and a complete backtrack on concepts already spoken about.

1 Like

For what it is worth, Epic has directional shadow caching disabled for Fortnite. To maintain performance they dropped the effective shadow resolution instead.

The tradeoffs involved in this decision will differ for other games. There is certainly a visual impact from giving up on shadow map caching and dropping the shadow resolution that may not be an optimal choice for other games. That said, we are reasonably happy with the level of quality we are able to achieve in Fortnite even with no directional light shadow caching at 60 fps, as it is still a noticeable improvement over previous solutions.

1 Like

Indeed. It always depends on the amount of moving elements in the scene.
We had WPO animated leafs on the trees, but disabled WPO for Virtual Shadow Maps, so there were barely any Cache invalidations.

Fortnite wanted to have animated shadows AND a day Night cycle, so they had to do it this way.

But even when disabling caching in my example project, the total render time is 5.8-6.5ms.

So an average of 150 FPS. That is more than enough for any VR Game with that Level of quality.

their LOD algorithm is still broken, logicless, slow, and VERY limited.

In the time you’ve spent here complaining, you could have written your own. So why are you still here? Nobody is forcing you to use it.

The majority of gamers hate unreal and the few that do like it have no idea what they are talking about.

Citation needed.

Brian Karis said the reason he wanted to make Nanite is becuase “what’s the point in making a technically limited scene if that’s not even how the artist envisioned it”.

I can’t enjoy your art when it’s blurry and unperformant

Nanite provides you the opposite of blurry. It allows you to view your meshes in nearly infinite detail.

Look, you are just a kid, you aren’t a rendering engineer, you aren’t an engine developer, you aren’t a professional with decades of industry experience. You DON’T know what you are talking about.

This entire thread is filled with garbage, misinformation and whining. Its probably the worst thread created on this otherwise very helpful community forum. You should delete it.

5 Likes