Jump to content
dna_uk

DirecxtX 12 for ArmA 3?

Recommended Posts

Previous Direct X releases brought new graphic features with them and upped the hardware requirements. with DX12 they are doing a different thing, focusing on improving the overall performance rather than new effects. New graphic libraries like DX12 and Vulkan will bring to PC what consoles had for quite some time now, a more 'to the metal' type coding where the programmer will be able write his own effects and utilize the hardware better. So the same hardware should perform better under DX12 but there won't be any 'revolutionary' new features (here's hope for hardware accelerated ray-tracing, voxels or nurbs :p ). If the performance will really benefit a lot and implementation turns out to be easy, it would be nice if not only ArmA 3 would get DX12 support but the older entries in the series too. For once, the biggest issue of ArmA would be ironed out with such a move.

Share this post


Link to post
Share on other sites

...

Arma 3 (DX11) foliage is better or looks better? Not even close, it looks really bad when compared with the foliage that could be available if was with DX9.

...

To me the foliage looks better in A3, do you have any picture to show what you mean?

/KC

Share this post


Link to post
Share on other sites
The issue is at your end, mine works just fine, with vRAM going as far as 3,2-3,3GB.

Also, I'd say the foliage can look quite good in DX11 and it looks ok în ArmA (of course, not as good as it does in Cry Engine or Crysis games):

I do not have such.

1080p with game settings at high, AA 4x MSAA and view distance 3000, which are the settings that I generally use in game. FPS limited at 60 with inspector, this is what I have.

https://youtu.be/2zml33C_0IA

I have 16 GB Ram and 3Gb Vram. The hardware is having about 50% usage (cpu basically 1 core), Ram about 3 GB loaded and Vram about 1 GB.

Share this post


Link to post
Share on other sites
The problem is at your end it seems.

Maybe that or maybe because I have shaders cached.

Anyway, to me DX12 is a marketing campaign for Microsoft and is being used as holy grail by those who have their own flaws (ie. AMD) and never were able to deal with DX11 properly.

The game engines developed for DX11 do not have these huge wall texts related with multicore/multithread, neither they are anxiously waiting for DX12.

Take a look at Frostbite (BF4), they managed to reduce CPU dependency (in matters of graphics) to a level where the CPU has little influence in game performance and the fact is that a i3 and an i7 have the same performance with BF4.

Share this post


Link to post
Share on other sites

Don't look at single player, corridor missions. The difference between Mantle and DX11.1 is HUGE in multiplayer.

Also, funny to say that about Frost Byte and BF - http://www.tweaktown.com/news/44506/frostbite-technical-director-dx12-windows-10-next-gen/index.html

Johan Andersson has said that he wants to see the minimum specification for Frostbite-powered games in 2016 to be Windows 10, DirectX 12 and WDDM 2.0. He said that this would "a bit aggressive" but we would see "major benefits". He said in a reply to EVGA's Product Manager, Jacob Freeman, "get rid of the Windows legacy and reap the benefits of a modern graphics API & memory management (WDDM 2.0)".

Read more at http://www.tweaktown.com/news/44506/frostbite-technical-director-dx12-windows-10-next-gen/index.html

Share this post


Link to post
Share on other sites

Take a look at Frostbite (BF4), they managed to reduce CPU dependency (in matters of graphics) to a level where the CPU has little influence in game performance and the fact is that a i3 and an i7 have the same performance with BF4.

But BF is a GPU centric game and runs well on the consoles too, which have rather slow CPUs. ArmA is the opposite as it's a CPU centric game so the extra CPU speed comes into play. Problem is just it's not multi-threaded in such a way to make great use of multiple cores.

Share this post


Link to post
Share on other sites

Recently got myself a 290X and coincidentally, Origin offered to try BF4 free for a limited time. Of course, I tried Mantle, and it really does make a difference. With DX I could get some drops under 60fps now and then. With Mantle, it stayed rock solid above 60fps. It was a subjectively better experience with Mantle, and it allowed me to use V-sync (sorry, my monitor is not compatible with adaptive sync/freesync) without too much unwanted side effects. With V-sync off, it ran more than 130fps on ultra graphics including proper anti aliasing. Hurray for Mantle :)

Share this post


Link to post
Share on other sites
But BF is a GPU centric game and runs well on the consoles too, which have rather slow CPUs. ArmA is the opposite as it's a CPU centric game so the extra CPU speed comes into play. Problem is just it's not multi-threaded in such a way to make great use of multiple cores.

Its not just a game being CPU bottlenecked its also why its CPU bottlenecked. If the issue is that the game is trying to make 20,000 draw calls then DX12 will help. If its because the games simulation is very complicated and 100% single threaded it wont. Its just not as simple as the average gamer that spurts this usual rubbish thinks it is. Arma is simulation time driven and its own code interacting with DX11 is what is slow. Thus the end result of moving to DX12 will be minimal without substantial changes to the code and architecture, changes which would benefit DX11 just as much.

Can we please stop spreading this rubbish about this game, I swear every page people forget the answer to Arma 3's performance problems have been found, the developers have been caught lying about the cause and as they try and hype us on DX12 we should know better since we have solid data showing its not going to help much.

Share this post


Link to post
Share on other sites

Did some testing. When you hit escape, the simulation pauses, but the render still works, so we can do some testing and guesstimate where DX12 may help. System is 2500k@4,5GHz, R290@1000MHz/1300MHz, 16GB RAM, standard HDD. Game running on Combine Arms scenario, vanilla (no mods).

Pic. 1 (above). It's the FPS while in game, with the simulation working (mostly AI, no shooting involved).

Pic. 2 Game paused (ergo, also the simulation, but the render working). Shows the settings for the test, also worth mentioning no form of AA was used, but the others where active (AO, AF, water caustics, but no rotational blur).

32FPS were lost to simulation, which means about 56% (89fps vs. 57fps). DX12 cannot help much here, perhaps give a little bit more resources from the render to simulation by distributing the workload more efficiently for rendering and leaving free time on the thread for sim.

Pic. 3. Shows what happens when you up the settings on quality for objects and view distance for them and the land (this should increase the draw calls). As it can easily be seen, GPU usage drops, from 67 to 49. Also the frequency of the GPU drops, so probably if it were to keep full speed, GPU usage will go under 49%.

This is the exact difference where DX12 could come in handy, keeping the FPS closer to that original 89fps (or above, since the GPU isn't fully used while the simulation is stopped also in that situation - 2nd pic.).

Pic. 4. The performance while using higher graphical settings applied above, that I'd say relay on CPU bottlenecks in rendering. This is "live", with simulation active (AI). Compared to lower settings in pic. 1 under the same conditions, we lose about (57fps vs 36fps) 21 fps or 36% if we look at the initial performance (57fps) as a baseline. This is because of render and perhaps some due to AI if their "scan" range for enemies extends with the settings.

To see where the GPU actually becomes the limiting factor, lets up the settings.

Pic. 5 5280x1050, simulation active with AI engaged in a firefight, but this time around also with AA (MSAAx4 or x8, don't remember exactly), SMAA standard and ATOC all trees + grass, object detail and draw distance reduce greatly as seen in bellow pic, to around 1,5km for land and just above 1km for objects (like the 1st pic.).

Pic. 6 Same as above, but with simulation paused. A great penalty in performance, and like in the first two pictures, what DX12 can do is perhaps leave some more resources to simulation by better distributing the workload for render.

Bottom line, a big hit is given by the simulation while in combat, this needs as well to be redone (either be done on the GPU, either greatly mutlithreaded and still done on the CPU). DX12 won't be magical for all of ArmA 3 problems.

Also worth mentioning, like BrightCandle put in some posts back, the draw call may be small, but handled very inefficiently not due to DX11, but thanks to bad/old codding. Who knows, perhaps Bohemia will actually improve on that as well since is working at the render with the goal of improving. At least DX12 pushed them to act in a way.

Edited by calin_banc

Share this post


Link to post
Share on other sites
Its not just a game being CPU bottlenecked its also why its CPU bottlenecked. If the issue is that the game is trying to make 20,000 draw calls then DX12 will help. If its because the games simulation is very complicated and 100% single threaded it wont. Its just not as simple as the average gamer that spurts this usual rubbish thinks it is. Arma is simulation time driven and its own code interacting with DX11 is what is slow. Thus the end result of moving to DX12 will be minimal without substantial changes to the code and architecture, changes which would benefit DX11 just as much.

Can we please stop spreading this rubbish about this game, I swear every page people forget the answer to Arma 3's performance problems have been found, the developers have been caught lying about the cause and as they try and hype us on DX12 we should know better since we have solid data showing its not going to help much.

Bottom line for us is that they don't care enough to fix it until it hurts their bottom line. There's always some scapegoat or magical fix to be had in the future but it never really gets better. I realize that there's a lot to do and it's going to be a lot of work to fix, but whats the alternative? Keep tossing in API after API and cheap fix after cheap fix in to legacy code till it just ceases to work properly anymore?

---------- Post added at 02:19 ---------- Previous post was at 02:14 ----------

...

Also worth mentioning, like BrightCandle put in some posts back, the draw call may be small, but handled very inefficiently not due to DX11, but thanks to bad/old codding. Who knows, perhaps Bohemia will actually improve on that as well since is working at the render with the goal of improving. At least DX12 pushed them to act in a way.

It really has little to do with the renderer honestly as a good portion of frame time is spent on nothing but simulation and waiting for simulation to finish. In a perfect world, there would be no pauses or breaks in execution of threads during the frame time. Since the engine is so monolithic in nature, from my understanding, the fact that a good 40-50% of the frame time the simulation thread is stalled means that everything else is waiting for it to finish and hence the low performance. It's really down to the fact that the simulation code is the primary bottleneck.

Share this post


Link to post
Share on other sites

Agree with Brightcandle and Windies.

There's just too much for one of my CPU threads to handle and the game can't spread the load over the cores and sync it up so it craps out and fps tanks when a lot of AI go into "combat" or I turn round and look into the heart of a city or lots of particles with "BounceOnSurface" parameter set to true are onscreen.

DX12 will be minor improvement at best (and most likely placebo in my opinion). If you go back in time on this forum, there are similar threads about Arma 3 and how DX11 would sort out the framerate and yet here we are today because the problems and solutions clearly lie elsewhere.

Share this post


Link to post
Share on other sites

isnt dx12 supposed to spread workload on all cores? why cant the simulation distribute evenly on all cores?

Share this post


Link to post
Share on other sites
isnt dx12 supposed to spread workload on all cores? why cant the simulation distribute evenly on all cores?

It's a graphics API and has nothing to do with the internal simulation within the engine. It might be able to spread the draw calls across multiple cores, that would be the workload it could spread, but since draw calls really aren't the issue with RV it's not going to change anything.

Share this post


Link to post
Share on other sites

It really has little to do with the renderer honestly as a good portion of frame time is spent on nothing but simulation and waiting for simulation to finish. In a perfect world, there would be no pauses or breaks in execution of threads during the frame time. Since the engine is so monolithic in nature, from my understanding, the fact that a good 40-50% of the frame time the simulation thread is stalled means that everything else is waiting for it to finish and hence the low performance. It's really down to the fact that the simulation code is the primary bottleneck.

As per above:

57fps lower graphical settings - http://i.imgur.com/4vi41aK.png

36fps higher graphical settings - http://i.imgur.com/aBAhHgI.png

I didn't say that it will fix all instances and all "all problems begone!", but at least it will allow to play on higher settings, add more clutter around the islands (including furniture), proper lighting with multiple shadow sources, etc.

I'll repeat myself, the engine needs a serious overhaul, but at least this is a step in the right direction.

Share this post


Link to post
Share on other sites
As per above:

57fps lower graphical settings - http://i.imgur.com/4vi41aK.png

36fps higher graphical settings - http://i.imgur.com/aBAhHgI.png

I didn't say that it will fix all instances and all "all problems begone!", but at least it will allow to play on higher settings, add more clutter around the islands (including furniture), proper lighting with multiple shadow sources, etc.

I'll repeat myself, the engine needs a serious overhaul, but at least this is a step in the right direction.

How is it going to do that? What in your screenshots points to DX12 having any impact on performance whatsoever? I'm lost on the rational behind your argument TBH. Moving to DX12 isn't like some flip the performance switch, in fact in truth the benefits of DX12 really are of no benefit to RV for the most part. We aren't seeing massive amounts of draw calls or any performance issue's from the API side of things. What we see are bottlenecks in BI's engine code, DX12 isn't going to do anything for that just like DX11 did practically nothing for ArmA 3.

It's not a step in the right direction honestly. A step in the right direction would be addressing the biggest issue's with the engine, finding a plan to fix them that both works for the community and works for BI and then implementing that plan. What it is is a step in the same direction, the same direction we've been going for the past umpteenth years whereby BI say's "some things are too hard" or some other generic argument about why things can't be fixed or it's too time consuming or the benefit wouldn't be worth it and then try to hype up a magic bullet the next time a new title comes up for sale.

Edited by Windies

Share this post


Link to post
Share on other sites

The difference there is in the draw distance (land and objects) plus object quality, which should be depended of the GPU. Of course there is the possibility of the render part of the engine to be complete fubar at the moment and take more time than a modern, more efficient engine requires to do certain tasks, but I'm hopping they'll improve that as well when doing the upgrade. And yes, it IS fubar especially when it comes to occlusion. Nevertheless, if the render needs on the main thread 30ms on settings X, by distributing the workload on all available threads, you may end up with only 10ms, gaining extra 20ms in performance for either raw FPS or for more complex task for the sim.

Anyway, I'm not going to buy anything from Bohemia from now on until they actually act on all the flaws of the engine and fix them. Like you've said, it's a state of affairs that is in place for a very long time.

Share this post


Link to post
Share on other sites

Even if the rendering time was literally zero milliseconds the game still couldn't run at 60 fps. Rendering time is somewhat important in the game but really the big issue is the massive amount of time doing the simulation, something that likely has little to no dependency on the API, its probably mostly script run time which is why its all serial, because scripts assume they run in a serial world. That is a much bigger problem to fix, that is the reason why BI says they can't fix it. But eliminating the time to render (impossible by the way) wont fix the problem.

Share this post


Link to post
Share on other sites
The difference there is in the draw distance (land and objects) plus object quality, which should be depended of the GPU. Of course there is the possibility of the render part of the engine to be complete fubar at the moment and take more time than a modern, more efficient engine requires to do certain tasks, but I'm hopping they'll improve that as well when doing the upgrade. And yes, it IS fubar especially when it comes to occlusion. Nevertheless, if the render needs on the main thread 30ms on settings X, by distributing the workload on all available threads, you may end up with only 10ms, gaining extra 20ms in performance for either raw FPS or for more complex task for the sim.

Anyway, I'm not going to buy anything from Bohemia from now on until they actually act on all the flaws of the engine and fix them. Like you've said, it's a state of affairs that is in place for a very long time.

If you want to check the game engine in matters of rendering you need to do it without AI. Or at least you need to place AI on a dedicated server. When you run the game with AI on same machine where you are running the game you have no accurate results in matters of any rendering stats.

AI largely affects the game engine performance and rendering is included and I only see 2 reasons for this.

1. Game Engine is capped to avoid a excessive hardware usage.

2. Game Engine cant handle with AI.

Share this post


Link to post
Share on other sites
The difference there is in the draw distance (land and objects) plus object quality, which should be depended of the GPU. Of course there is the possibility of the render part of the engine to be complete fubar at the moment and take more time than a modern, more efficient engine requires to do certain tasks, but I'm hopping they'll improve that as well when doing the upgrade. And yes, it IS fubar especially when it comes to occlusion. Nevertheless, if the render needs on the main thread 30ms on settings X, by distributing the workload on all available threads, you may end up with only 10ms, gaining extra 20ms in performance for either raw FPS or for more complex task for the sim.

Anyway, I'm not going to buy anything from Bohemia from now on until they actually act on all the flaws of the engine and fix them. Like you've said, it's a state of affairs that is in place for a very long time.

For one, if it could have been improved wouldn't it have been when DX11 was implemented? Why would DX12 be the magic bullet?

Secondly, the actual problems and the reason why we have performance problems has nothing to do with graphics settings or graphics API's. It's because the simulation threads stall the entire process.

You also seem to think that DX12 magically multi-threads the entire engine or even the rendering portion of the engine. It doesn't. An API is not an integral part of an engine, in fact saying your adding DX12 to an engine is kind of misleading as what you are doing is upgrading or rewriting your engine to interface with the API. If the engine still performs bad on the previous API, barring API specific issue's like draw calls for instance, it's probably going to perform bad using the next API just as much.

Share this post


Link to post
Share on other sites

I never said Windies that DX12 will multithread the engine entirely. What I'm hoping for, is Bohemia to rewrite the render in a proper multithreaded way, to actually fix the silly illumination system so that light doesn't go through solid objects, to have "infinite" number of shadows casting light sources, proper soft shadows, the ability to have a greater draw distance and object quality, more clutter, grass drawn all the way you can see. etc. Simplified: a better, more immersive world.

For the million time: this will not fix the sim. problem! At best, will cut some ms from the render and allow for extra performance for the sim in the same scenario, but nothing much if the big bottleneck comes from that!

What would also help, is for them to see if the integration of Umbra is possible. It's ridiculous to look at a house and have under 20fps just because the game renders a lot more than you can see, just for the kicks. :p

In terms of DX11, at least for me, ArmA 3 runs much better than ArmA 2 or Day Z.

If you want to check the game engine in matters of rendering you need to do it without AI. Or at least you need to place AI on a dedicated server. When you run the game with AI on same machine where you are running the game you have no accurate results in matters of any rendering stats.

AI largely affects the game engine performance and rendering is included and I only see 2 reasons for this.

1. Game Engine is capped to avoid a excessive hardware usage.

2. Game Engine cant handle with AI.

Of course, it's easy to do in the editor as well. 2500k@4,5GHz, 16GB RAM, R290 1000/1300MHz. All seetings max, except terrain quality which is to very high, no AA, no rotational blur, 1080p.

I went a little bit further and tested for a simulated 3 core and 2 core system as well. In all quotes, what settings are changed:

1st. pick 1,5km for terrain and about 1,08km for objects, object quality low.

2nd pic. 6km for both terrain and objects, object quality ultra.

3rd pic. 12km for both terrain and objects, object quality ultra.

4cores

3cores

2cores

Edited by calin_banc

Share this post


Link to post
Share on other sites

Exactly and that is the weird part and more weird is that the AI is included.

Spawning 200 AI units on my dedicated server in Stratis with a view distance of 3000. I cant see the AI because they are far than 3000 and still turning my sight to the place where AI is, I have a performance drop (in my local machine, not in server), turning my back is like there is no AI at all.

Also about with AI (and here multicore support is definitely required), the only way to have a proper gameplay is to spawn ALL the AI at mission start, otherwise if we make AI spawning through activation triggers (like distance) we always know where AI is or when it is coming due to horrendous lag spike caused by AI when spawn (even small units). This DX12 will not fix.

In matters of graphics I feel that the game is already way to heavy and demanding and there are some situations that do not help.

For instance shadows, there are different levels in game that are being rendered no matter the distance chosen for it.

Or objects quality, why this setting is linked to distance? Should not be, we should have the object quality at view distance chosen, this is a cause for huge constraints in rendering, while moving, due to massive LOD transition levels.

Or PIP, what is the reason for such massive impact in performance? With some other DX11 games this do not happen. Is because in Arma every small piece is rendered and since its a huge open world PIP is being rendering without distance limits?

These are situations that DX12 will not fix, I think.

Edited by Bratwurste

Share this post


Link to post
Share on other sites

I don't think it's that graphically heavy when I "need" to put 8xMSAA and some donwscalling for the GPU to actually be fully used in 1080p -R290. Bohemia should look at GTA 5, they've learned their lesson and came out with an outstanding game! ;)

Share this post


Link to post
Share on other sites

If Arma had the graphics "weight" of GTA V, would be unplayable. :)

Share this post


Link to post
Share on other sites
I never said Windies that DX12 will multithread the engine entirely. What I'm hoping for, is Bohemia to rewrite the render in a proper multithreaded way, to actually fix the silly illumination system so that light doesn't go through solid objects, to have "infinite" number of shadows casting light sources, proper soft shadows, the ability to have a greater draw distance and object quality, more clutter, grass drawn all the way you can see. etc. Simplified: a better, more immersive world.

For the million time: this will not fix the sim. problem! At best, will cut some ms from the render and allow for extra performance for the sim in the same scenario, but nothing much if the big bottleneck comes from that!

What would also help, is for them to see if the integration of Umbra is possible. It's ridiculous to look at a house and have under 20fps just because the game renders a lot more than you can see, just for the kicks. :p

In terms of DX11, at least for me, ArmA 3 runs much better than ArmA 2 or Day Z.

The light doesn't go through the objects because it is broken, but because deferred lighting is not implemented. There is no engine out there that can handle an infinite number of shadow casting light sources.

Again, i find that it is unrealistic to expect more out of this engine without real impacts on FPS. DX12 does not solve the draw calls limitations.

Understand that the engine's main issue is how it handles 2 things:

1. AI cpu cycles

2. Data access - models but more especially textures (directly, without buffering those correctly).

edit - yes, arma has object spaced culling

Edited by PuFu

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×