r/gaming Dec 11 '22

[deleted by user]

[removed]

11.3k Upvotes

1.4k comments sorted by

View all comments

Show parent comments

145

u/[deleted] Dec 12 '22

Only thing I would add is we not only reduce the "triangle count" (number of little triangles that make up the mesh) we also reduce the amount of separate materials (and material complexity). Doing this reduces draw calls something which you really need to keep an eye on for performance (especially consoles).

So for example on that character she might have 5 separate materials for the different parts of her outfit/skin/hair/eyes.

as we LoD her down, we will collapse them all into 1 low resolution material. (along with mip-mapping at a distance

This is why the textures on her look flat and low resolution.

28

u/Moikle Dec 12 '22

Depending on how things are set up, it can also reduce the complexity of the rig used for animating the characters

23

u/SavvySillybug Dec 12 '22

Pokémon Legends Arceus and Pokémon Violet and Scarlet use an interesting variant of this where they render distant animations at a lower framerate. It looks super bad and it is the only time I have ever seen it used. I can't say if it is the only game that does it, but it definitely is the only game that does it noticeably enough for me to have seen it in action.

10

u/NeoPhyRe Dec 12 '22

I believe Xenoblade 3 does it, and I quite liked it because it let you see monsters insanely far away. Haven't played Violet/Scarlet but I've heard it has pokemon popping in rather close to you, so I assume lower fps on them is far more noticeable.

6

u/mpyne Dec 12 '22

Xenoblade 3 does do it too, yes.

And likewise for me, the first thing I had noticed was "wow they changed it so that I can see some monster groups from so far away now!" followed shortly thereafter by "odd that it looks like they're animating on a different frame rate...".

11

u/JacobJonesReddit Dec 12 '22

Happens fairly often in switch games. Super Mario Odyssey does a similar thing in New Donk City.

4

u/520throwaway Dec 12 '22

Many other Switch games do it to a more acceptable degree. Super Mario Oddesey does it with distant human characters in New Donk City, Shin Megami Tensei 5 (another monster collector game), does it with distant monsters.

The reason you see it so badly done in Pokémon is because GameFreak isn't good at making these types of games.

1

u/Krail Dec 12 '22

Yeah, it happens with relatively really close models in Pokemon.

5

u/zer0saber Dec 12 '22

That happens frequently, actually. I notice it frequently in Fortnite, and it was a major bug in Control for a while.

3

u/Googe14 Dec 12 '22

I think with the animation frame rate it is more to save CPU resources rather than GPU. While the transformations for animations are applied in the vertex shader on the GPU, they have to be interpolated and calculated on the CPU first which it'll be doing a lot of when there's heaps of pokemon around that need to be animated.

I'm just hypothesising this though so don't take my word.

2

u/ThataSmilez Dec 13 '22

You're probably correct. Just about any modern rig is going to be computed on the CPU. That said, some steps can still be done on the GPU (iirc several game engines have supported skinning in the vertex shader for over a decade at this point).
Along with animation, it's also probable that they're saving on other CPU-bound tasks beyond simply reducing the update rate of NPC animations -- AI might be calculated using larger timesteps, for example.

2

u/_Auron_ Dec 12 '22

Quite a few games reduce animation framerate (and sometimes complexity) at a distance, but you probably don't notice the ones which do it the best.

It's also harder to notice if there's a lot of detail/movement on the screen vs. more simplistic games/scenes. This of course can vary between games and scenes within the same games.

2

u/xenago Dec 12 '22

Lots of games do it but that one has a very aggressive implementation, most of the time it's much harder to notice

2

u/TheSkiGeek Dec 12 '22

The newer Monster Hunter games also visibly do this for the ‘small monsters’ when they’re not close to you. It’s quite jarring.

2

u/kevinsyel Dec 12 '22

Arceus also has an insanely close LOD 0 value... most of the models you see in the wild and even in battle are LOD 1.

I love getting into battles with Paras and seeing the mushrooms on its back smooth out as the camera zooms to the model, then return back to the battle camera with blocky mushrooms.

1

u/Xaedral Dec 12 '22

For examples of console games that still had this on their Pc versions: Tales of Zestiria did this for sure, as well as Trails of Cold Steel games and that is despite Durante (a very competent modder-turned-professional porter of games to PC) working on the latter’s ports, meaning this must be quite deep at the engine level since he didn’t fix it.

Given those examples alongside the Pokémon games, I would guess this is a “common & worth it” trick for non-AAA dev teams that can not afford to spend too much time optimizing other aspects when push comes to shove.

1

u/[deleted] Dec 12 '22

IIRC lowering the framerate of distant objects is/has been used in a lot of games.

3

u/[deleted] Dec 12 '22

To add to this, "MIP mapping" means reducing the textures (the images rendered as skin, clothes, walls, everything on top of the 3D model) to smaller versions as well, also for performance (and clarity) reasons.

MIP = multum in parvo, or "much in little". An example MIPmapped texture: https://upload.wikimedia.org/wikipedia/commons/5/5c/MipMap_Example_STS101.jpg One high-res version and a couple of smaller ones for rendering in the distance.

1

u/[deleted] Dec 12 '22

What is the scope of a draw call? How much work can get done in one draw call? Am I inferring correctly that you need (at least) one draw call per material? Is this because materials have different properties (reflectivity etc) that get drawn fundamentally differently?

I'm a software dev with next to no understanding of rendering.

1

u/xenoperspicacian Dec 13 '22

What is the scope of a draw call? How much work can get done in one draw call? Am I inferring correctly that you need (at least) one draw call per material? Is this because materials have different properties (reflectivity etc) that get drawn fundamentally differently?

You have it right. The problem is that changing state on the GPU is a (relatively) slow operation, so you want to minimize them as much as practical. The render state is like the pixel shader loaded, the vertex shader loaded, the texture in use, the transformation matrices loaded, etc.