Supplice
Fabmaster2000 14 ABR 2023 a las 1:47
Low FPS during gameplay
While I'm playing the game it runs between 30 and 40 FPS. I'm really confused because this is a lower end game and I don't know why i'm getting performance issues. Does it have to do something with GZDoom? I'm not really familiar with that.
< >
Mostrando 1-14 de 14 comentarios
El autor de este hilo ha indicado que este mensaje responde al tema original.
DuckHead  [desarrollador] 14 ABR 2023 a las 2:11 
Hi! Have you tried switching graphics to Vulcan?
Sputum80 14 ABR 2023 a las 3:35 
I mean you could just restart the game just to be sure, wont take long i swear.
TMAC Blade 15 ABR 2023 a las 7:57 
Publicado originalmente por DuckHead:
Hi! Have you tried switching graphics to Vulcan?
I can confirm I'm having the same problem. I switched to vulcan as well and it did nothing. maybe it improved a bit but the moment I run into any significant number of enemies the game tanks.

Specs:
RTX 2060 6 gb
I5 8600
16 GB of RAM
2 SSD's (one is a sata and the other is m.2 which is what the game is installed on)
Windows 11.
Última edición por TMAC Blade; 15 ABR 2023 a las 7:58
Zaxx 15 ABR 2023 a las 8:02 
Publicado originalmente por TMAC Blade:
Publicado originalmente por DuckHead:
Hi! Have you tried switching graphics to Vulcan?
I can confirm I'm having the same problem. I switched to vulcan as well and it did nothing. maybe it improved a bit but the moment I run into any significant number of enemies the game tanks.

Specs:
RTX 2060 6 gb
I5 8600
16 GB of RAM
2 SSD's (one is a sata and the other is m.2 which is what the game is installed on)
Windows 11.
I have a comparable system (my GPU is way worse with a 970 while my CPU is slightly better with a 9600... with a vastly better OS as I'm on Win 10 /jk) and I had exactly one section on the 4th map where the game dipped close to going below 60 fps. That's not great of course and I'm suspecting a bug there but I wouldn't describe it as the game "tanking" and my fps was usually around 150-200 during action while playing in 1440p.

So what do you mean by the game tanking? What fps?
Última edición por Zaxx; 15 ABR 2023 a las 8:03
DefectiveByDesign 15 ABR 2023 a las 19:26 
Publicado originalmente por Fabmaster2000:
While I'm playing the game it runs between 30 and 40 FPS. I'm really confused because this is a lower end game and I don't know why i'm getting performance issues. Does it have to do something with GZDoom? I'm not really familiar with that.
Yes. This is a known GZDoom issue. It stems from map geometry being too complex and simultaneously large, which is fully computed and there is no background culling like Quake. The engine is mostly single threaded, and the complexity is too much. I think there might be some hacky workarounds, but nobody optimizes for the engine limitations. It likely requires heavy research and programming skill, and it seems that most modders instead "tune" map design for a CPU baseline.

The only way to fix this would be to recode the engine's way maps are rendered in a modern method. Which could cause compatibility issues? Maybe not if it was converted on the fly, but that would increase loading times. IDK why it's never been attempted, but clearly there are legit reasons which would require a complete engine rewrite.

Multithreading would help if it was possible to multithread the engine. It's just not coded for it. That said, perhaps it's possible to Temple OS style optimize, where you use multi cores to compute a single task. But most programmers aren't Terry Davis, and that's what it would require.

If you use a port like LZDoom, it has forced culling distance options, but this literally removes map distance in a circle. You know how Turok on N64 had "fog", which was really distance culling? That's what this does without having the "fog". This ruins the viewing distance in large maps, maybe even the monster AI. LZDoom also isn't compatible with new GZDoom scripting, being based on older code. It's not always better, just for certain use cases. GZDoom is generally better and faster aside from the cases LZ can "fix".

Mods like Brutal Doom have features like "garbage collection" that delete bodies and debris from the map, which can boost FPS at the expense of visuals, because it's deleting things that need calculating. This is one of the performance hacks I've seen, but it's not a default supported option for most mods.

Large maps like Elementalism also play bad due to the same limitations. I've seen some videos of popular doom content creators getting similar low FPS in their play throughs. You can also bottleneck the engine with monsters, like with the NUTS map.

There is no "fix" anyone experiencing issues can do, aside from overclocking, CPU upgrade, and Vulkan, because vulkan eliminates the CPU overhead of OpenGL.

Maybe if you're a doom mod programmer, you could find all the different performance hacks and mod them into the game, but nobody's gonna do that, and there are visual / gameplay side effects.
Nexxtic 15 ABR 2023 a las 20:58 
Publicado originalmente por DefectiveByDesign:
Publicado originalmente por Fabmaster2000:
While I'm playing the game it runs between 30 and 40 FPS. I'm really confused because this is a lower end game and I don't know why i'm getting performance issues. Does it have to do something with GZDoom? I'm not really familiar with that.
Yes. This is a known GZDoom issue. It stems from map geometry being too complex and simultaneously large, which is fully computed and there is no background culling like Quake. The engine is mostly single threaded, and the complexity is too much. I think there might be some hacky workarounds, but nobody optimizes for the engine limitations. It likely requires heavy research and programming skill, and it seems that most modders instead "tune" map design for a CPU baseline.

The only way to fix this would be to recode the engine's way maps are rendered in a modern method. Which could cause compatibility issues? Maybe not if it was converted on the fly, but that would increase loading times. IDK why it's never been attempted, but clearly there are legit reasons which would require a complete engine rewrite.

Multithreading would help if it was possible to multithread the engine. It's just not coded for it. That said, perhaps it's possible to Temple OS style optimize, where you use multi cores to compute a single task. But most programmers aren't Terry Davis, and that's what it would require.

If you use a port like LZDoom, it has forced culling distance options, but this literally removes map distance in a circle. You know how Turok on N64 had "fog", which was really distance culling? That's what this does without having the "fog". This ruins the viewing distance in large maps, maybe even the monster AI. LZDoom also isn't compatible with new GZDoom scripting, being based on older code. It's not always better, just for certain use cases. GZDoom is generally better and faster aside from the cases LZ can "fix".

Mods like Brutal Doom have features like "garbage collection" that delete bodies and debris from the map, which can boost FPS at the expense of visuals, because it's deleting things that need calculating. This is one of the performance hacks I've seen, but it's not a default supported option for most mods.

Large maps like Elementalism also play bad due to the same limitations. I've seen some videos of popular doom content creators getting similar low FPS in their play throughs. You can also bottleneck the engine with monsters, like with the NUTS map.

There is no "fix" anyone experiencing issues can do, aside from overclocking, CPU upgrade, and Vulkan, because vulkan eliminates the CPU overhead of OpenGL.

Maybe if you're a doom mod programmer, you could find all the different performance hacks and mod them into the game, but nobody's gonna do that, and there are visual / gameplay side effects.

Not everything here is entirely correct. Another project I am involved with has a number of GZDoom engine tweaks to aid with performance.

One approached that gave us a lot of additional mileage out of the engine, was to introduce a "sleep" function for actors. This basically means that all actors are completely ignored from the games Tick system if the player is a few units away from an actor. This nearly doubled our performance and basically allows ridiculous amounts of actors to be spawned in a level without too much of a hit. We hope this change will eventually find it's way to stock GZDoom. IIRC, someone is working on it right now. But I cannot confirm.

Multi-threaded asset loading has also been implemented which allows different threads to load assets, removing a lot of stress from the main thread that handles the engine logic. This eliminates the stuttering. Or well, most of them! This will also find it's way into base GZDoom in the future.

There's a lot to optimize in GZDoom. Especially once you learn how to abuse Zscript (something the aforementioned Brutal Doom unfortunatly does not use).

The engine has flaws. A lot of them. But I think the future is bright as far as optimizations are concerned. We're doing our best at least.
Última edición por Nexxtic; 15 ABR 2023 a las 21:05
Zaxx 15 ABR 2023 a las 21:37 
Publicado originalmente por Nexxtic:
IIRC, someone is working on it right now.
I have vague memories of hearing a few arguments against the sleep function because apparently it has a tendency to alter gameplay in some cases. Let's say you're playing some large map that has a bit of backtracking in it and a previous area is repopulated by spawning in an archvile. Wouldn't the sleep function break that archie?
Nexxtic 16 ABR 2023 a las 2:00 
Publicado originalmente por Zaxx:
Publicado originalmente por Nexxtic:
IIRC, someone is working on it right now.
I have vague memories of hearing a few arguments against the sleep function because apparently it has a tendency to alter gameplay in some cases. Let's say you're playing some large map that has a bit of backtracking in it and a previous area is repopulated by spawning in an archvile. Wouldn't the sleep function break that archie?

No, you can choose to never sleep monsters. If you use the function for decorations, pickups, corpses and such you can save a ton of juice in medium-large levels. Actors usually always do stuff in the background, even if their only reason of existing is to just sit there and do nothing, it's a waste of precious resources!
DefectiveByDesign 16 ABR 2023 a las 18:46 
Publicado originalmente por Nexxtic:
Not everything here is entirely correct. Another project I am involved with has a number of GZDoom engine tweaks to aid with performance.

One approached that gave us a lot of additional mileage out of the engine, was to introduce a "sleep" function for actors. This basically means that all actors are completely ignored from the games Tick system if the player is a few units away from an actor. This nearly doubled our performance and basically allows ridiculous amounts of actors to be spawned in a level without too much of a hit. We hope this change will eventually find it's way to stock GZDoom. IIRC, someone is working on it right now. But I cannot confirm.

Multi-threaded asset loading has also been implemented which allows different threads to load assets, removing a lot of stress from the main thread that handles the engine logic. This eliminates the stuttering. Or well, most of them! This will also find it's way into base GZDoom in the future.

There's a lot to optimize in GZDoom. Especially once you learn how to abuse Zscript (something the aforementioned Brutal Doom unfortunatly does not use).

The engine has flaws. A lot of them. But I think the future is bright as far as optimizations are concerned. We're doing our best at least.
It's accurate for mods that don't optimize, as there's no standard across the board default always on optimization, since mods have to manually script them into the game.

The sleep function you mention is one of these manual optimization techniques. It's not something default in GZDoom. There's also a LOD (level of Detail) hack that can turn complex decorations into simple decorations at a distance. This is almost a complete necessity for Voxel graphics in big mods, but nobody does this afaik, and adding voxels with no LOD to modern big maps will crawl the engine to single digit performance. Preloading assets is a common enough optimization, and is occasionally used in mods with heavy animation, but definitely not very many. Preloading does not help FPS, it helps reduce stuttering. I am glad to hear this may become part of base GZDoom, as it should have been a default years ago. GZDoom has not always been optimization friendly, as they even REMOVED texture compression support that existed in older builds. There could have been issues with it, but that feature helps low VRAM hardware run HD graphics. Someone needs to tell them to bring it back, especially for Nvidia cards. Maybe they're secretly using a global method now with no indicator, but afaik it's been uncompressed since the removal. Probably the switch from OpenGL to Vulkan.

The Voxel issue is especially bad with CPU use, as I was playing a big map with horrible performance and didn't initially know why. It didn't help that the videocard went into powersaving mode and downclocked itself to like 500Mhz, so I thought it was a graphics driver bug. No, the videocard was just saving power because it had literally no work to do from an Engine CPU bottleneck, and disabling voxels fixed the performance.

You can hack a lot of different things to save CPU cycles, but ultimately it's not capable of fully utilizing even 4 cores for performance, especially with Map/Level Geometry. The doom engine was not designed for high geometry, room over room, curved surfaces, swimmable water, surface marks, etc. GZDoom just hacks graphics over top the old engine with zero render optimizations like geometry culling / hidden surface removal. You're computing the full map 100% of the time. Modders pick a base performance level, and everyone under it is screwed. Sleeping the AI only helps compute the AI, which provides some headroom, but it doesn't fix map computation.

IDK if people remember the Nvidia Tessellation controversy, where sponsored games would tessellate flat objects and water under the map surface to ruin AMD performance, but this is sort of how GZDoom computes big maps, and there is no magic driver hack to fix it, because it's engine limited from the old render method. It's not addressable at the modder/user level, only GZDoom source itself.

So far the only modder hack afaik is making less detailed maps or smaller maps that load in chunks / hub system. It's not sustainable long term, so I hope public pressure motivates the developers to address it. it's mostly been a mindset of "you're doing it wrong", but literally everyone is "doing it wrong" at this point now, which isn't going to change, so the only way GZDoom can sustain the modding community is to fix map performance. Otherwise, it's going to be a non-stop complaint festival from everyone who doesn't understand why the mods run so bad. Perhaps it'll get bad enough that someone will fork the engine or join the existing team to do it directly. All I know is that it's a complex issue that would require changing how the existing engine fundamentally works, so this is why it hasn't been done so far.
Zaxx 16 ABR 2023 a las 19:11 
Publicado originalmente por DefectiveByDesign:
So far the only modder hack afaik is making less detailed maps or smaller maps that load in chunks / hub system.
Yep, in the case of Supplice map detail seems to be the "optimization compromise", compared to a lot of GZDoom projects the game has a remarkably clean look to it with not much in terms of enrionmental objects, sprites and whatnot. That's kind of necessary too since even the last map of the first episode manages to scale up to around 800 enemies.

It would be great to see progress in GZD's optimization because it can be annoying when a wad chugs. Like I was replaying Skillsaw's Ancient Aliens a while back and it was weird to see how some maps can dip the fps. AA is a good looking wad but it's not exactly this crazy detailed thing so it's weird how handling even that can be a bit of a problem for the engine sometimes.

On the other hand I like Supplice's clean and somewhat sterile looking maps, they remind me of Back to Saturn X and that's always a plus. I just hope there won't be an enemy with the archvile's mechanics because Back to Saturn X sure as hell had some archvile placements that were just cruel. :D I'm like 90% sure that there will be an archvile type enemy though... god have mercy on our souls.
Última edición por Zaxx; 16 ABR 2023 a las 19:15
Agent Burgers 13 ENE a las 18:23 
Publicado originalmente por DefectiveByDesign:
Publicado originalmente por Fabmaster2000:
While I'm playing the game it runs between 30 and 40 FPS. I'm really confused because this is a lower end game and I don't know why i'm getting performance issues. Does it have to do something with GZDoom? I'm not really familiar with that.
Yes. This is a known GZDoom issue. It stems from map geometry being too complex and simultaneously large, which is fully computed and there is no background culling like Quake. The engine is mostly single threaded, and the complexity is too much. I think there might be some hacky workarounds, but nobody optimizes for the engine limitations. It likely requires heavy research and programming skill, and it seems that most modders instead "tune" map design for a CPU baseline.

The only way to fix this would be to recode the engine's way maps are rendered in a modern method. Which could cause compatibility issues? Maybe not if it was converted on the fly, but that would increase loading times. IDK why it's never been attempted, but clearly there are legit reasons which would require a complete engine rewrite.

Multithreading would help if it was possible to multithread the engine. It's just not coded for it. That said, perhaps it's possible to Temple OS style optimize, where you use multi cores to compute a single task. But most programmers aren't Terry Davis, and that's what it would require.

If you use a port like LZDoom, it has forced culling distance options, but this literally removes map distance in a circle. You know how Turok on N64 had "fog", which was really distance culling? That's what this does without having the "fog". This ruins the viewing distance in large maps, maybe even the monster AI. LZDoom also isn't compatible with new GZDoom scripting, being based on older code. It's not always better, just for certain use cases. GZDoom is generally better and faster aside from the cases LZ can "fix".

Mods like Brutal Doom have features like "garbage collection" that delete bodies and debris from the map, which can boost FPS at the expense of visuals, because it's deleting things that need calculating. This is one of the performance hacks I've seen, but it's not a default supported option for most mods.

Large maps like Elementalism also play bad due to the same limitations. I've seen some videos of popular doom content creators getting similar low FPS in their play throughs. You can also bottleneck the engine with monsters, like with the NUTS map.

There is no "fix" anyone experiencing issues can do, aside from overclocking, CPU upgrade, and Vulkan, because vulkan eliminates the CPU overhead of OpenGL.

Maybe if you're a doom mod programmer, you could find all the different performance hacks and mod them into the game, but nobody's gonna do that, and there are visual / gameplay side effects.

I remember Selaco went under some engine enhancements and is now multithreaded. I'm currently playing the demo. Is the full game any better? I'm still gonna buy anyways. I just simply like it
soliddew 15 ENE a las 0:55 
Selaco is 1000% worth it and had a ton of effort put into optimization. That being said, the type of work done for Selaco doesn't seem to resolve what Supplice stresses. I threw together a barebones version of Supplice that ran in the Selaco engine but didn't notice any significant differences on big scenes.

The biggest thing that affects gzdoom performance is getting an AMD X3D CPU, the extra cache does wonders for FPS. My test spot on E2M3 went from 75~ on a 13600k to 130 on a 9800x3d.
Última edición por soliddew; 15 ENE a las 0:56
Nexxtic 15 ENE a las 2:21 
Publicado originalmente por soliddew:
l I threw together a barebones version of Supplice that ran in the Selaco engine but didn't notice any significant differences on big scenes.

That's not how it works! You can't load it barebones in a different engine and expect to see results right away. That is not the kind of changes we've made.

In our version, actors are practically free. Benefitting from any of these would require migrating every single actor to our approach, and that process will take long when it's not done from the start of development. We added it late, and it took weeks until we converted everything lol

If a Supplice level is heavy on actors (pickups, enemies, decorations etc), the benefits would be very noticeable after the migration.
Última edición por Nexxtic; 15 ENE a las 2:32
soliddew 15 ENE a las 22:06 
That's kinda my point, it's not the actor count that causes Supplice levels to lag (in my testing), it's the massive exteriors with high detail (and probably portal ♥♥♥♥♥♥♥). From vanilla to Supplaco with almost every (if not all) Supplice actors removed the FPS went from 133-140, so a modest improvement but like I said not significant. I'm sure there's more that could be done or I don't understand but there isn't a known magic spell that will de-curse something like Vertigone besides work on the actual map. Then again technomancers do exist so maybe it could be done.

Unfortunately Supplice modding (which is another person and I) is put into a kind of awkward spot because of a performance regression introduced in 4.12.2 to 4.13. Some sort of culling viewport stuff that I dont understand, but the result being that FPS that used to recover when not looking at these sort of scenes does not when looking away.

I'm extrapolating here but if I was the Supplice dev team, and I had to pick between versions of GZDoom that had security vulnerabilities and ones that can have 100-800% better performance in certain scenes, my answer would be learn to read Zscript if you want to run a mod and trust it.

My point being is I can see why having your own fork for a commercial project is very valuable. I hope I'm not being obtuse and I always appreciate the information Nexxtic :datadisk:
Última edición por soliddew; 15 ENE a las 22:22
< >
Mostrando 1-14 de 14 comentarios
Por página: 1530 50