captain carot said: percent calculation my friend. It's 23% less than 30fps. So 23fps is a 23% decrease over 30fps. At the same time 30fps is 30/23*100%=130.43% 130.43%-100%=30.43% increase. Or 7/23*100%=30.43%, again. It's like Xbox One having 29% shader power less than PS4 but PS4 having 43% more than Xbox One. No offense, but i've seen a load of poeple with problems in percent calculation. Now for the other stuff. Pretty much every major title uses some kind of culling today. That was an issue in pre-DX8 days when routines for such things wheren't supported in hardware usually and had to be written by hand. ST Kyro (Power VR based) was well kbnown back then for very efficient hidden surface removal because of it's then new tile based renderer. Without hardware T&L it could be faster in many games than a Geforce with higher fillrate and hardware T&L. Draw call batching is commonly used by game engines, often by default. It's optional in Unity though. There is no perfect batching. Seems like batching for Anvil was changed multiple times which is one of the reasons why later entries had less issues where AC1 and to a lesser degree AC2 had framerate drops. CryEngine uses batching by default. AFAIR all the planes in the Unity scenario would be rendered in one batch automatically because they use the same materials. Now for Anti Aliasing: pCARS (PC) uses selectable FXAA, SMAA, MSAA and downsampling. Console versions use EQAA, but with the slightly older Wii U GPU and less power i am pretty sure they went for either FXAA or SMAA only already. You are making the guess that they don't use draw call batching at all because of Unity. That is without reading documentation of other game engines i'd guess. Same for culling. I'd recommend you to at least read the CryEngine and Unreal engine docs. |
Well, since 7 fps is what they are missing to reach the 30fps, just ask yourself, how many times can you fit 7fps in 30fps?
30/7=4.2857
so, if 30fps=100% and 7fps can fit 4.2857 in 30fps then 100%/4.2857 is?
x=23.33%, this is what they are missing, 23fps is what they already got wich is 76.66% out of 30fps
No offense but i have also met people with problems for calculations as well
Use this logic for 30fps and 60 fps, ho many times you can fit 30fps in 60fps?
60/30=2
meaning that if 60fps is 100%, then 100%/2 and you get 50%
As for the antialaising, yea is probably that they have already either disabled AA or implemented the SMAA, they may have been using batching as well and maybe frustrum culling but doubt that they have used occlussion culling since its more tricky than the first one and requires more effort and time to implement and seeing how amny games have been released these generation with so many perfromance issues i doubt Slighly mad studios hasnt followed the same path as ubisoft,cd project, capcom, etc
Frsutrum culling may be almost automatic since its description of what it does makes it look easy, but if you read the occlussion culling documentations you can conclude that is not that automatic and requires programmer to think over how to implement it, even if the engine can implement it automatically is never gonna give the same performance as manual, not to mention that the technique is a double edge sword and if not used correctly its gonna give less performance than if you handt implemented it since there are situations when occlussion culling is not necessary as it takes more effort from the cpu than not using it
here is an example
http://http.developer.nvidia.com/GPUGems/gpugems_ch29.html
"
29.3 Beginning to Use Occlusion Queries
The real problem is the GPU pipeline flush. Normally the CPU and GPU work in parallel: When the CPU issues a command to the GPU (for example, "render some triangles"), it doesn't wait for the GPU to finish. Instead, the CPU's driver feeds the commands and triangles to the GPU command queue, which lets the CPU continue with other tasks. When the GPU is ready to process the stored commands, the triangles are rendered on screen.
However, the rendering process differs for occlusion queries. The GPU needs to tell the CPU how many pixels were drawn on-screen, which means it must render them first. The problem? The CPU must wait until the GPU finishes rendering triangles used for the occlusion query—and not only those triangles, but all triangles given to the GPU before the occlusion test.
This is not good. Trying to "save" the GPU from rendering the occluded object doesn't speed up the rendering process. The truth is that even when most tested objects are occluded, rendering is much slower because the CPU and GPU no longer work in parallel.
It's clear that the naive approach isn't going to work very well. So, the real question is. . .
29.3.1 How to Use Occlusion Queries Properly
29.6.1 CPU Overhead Too High
We need to account for the CPU overhead incurred when we send rendering requests to the GPU. If an object is easy to render, then it may be cheaper to simply render it than to draw the bounding box and perform the occlusion test. For example, rendering 12 triangles (a bounding box) and rendering around 200 triangles (or more!) takes almost the same time on today's GPUs. The CPU is the one that takes most of the time just by preparing the objects for rendering.
However, testing the object's bounding box is sometimes a must, no matter how many polygons the actual object has. What if the rendered object has a very complex pixel shader and occupies a notable portion of the screen? In such a case, even though the bounding box has more pixels to be drawn, the pixels can be rendered much faster (especially because they are rendered only to the depth buffer!) than an object itself, which would tax the GPU with many operations per pixel.
29.7 A Little Reminder
Keep in mind that occlusion culling works best when objects have lots of polygons. An occlusion query won't accomplish much for objects of, say, 300 triangles, even if there are hundreds of them on-screen. Speed might improve moderately, but it depends on the CPU load and the speed ratio between the CPU and the GPU. A fast GPU, coupled with a slow CPU, makes an application CPU-bound, and occlusion testing won't help much.
On the other hand, if there are a lot of polygons per model (more than 1,000 is a good start), occlusion culling shows all its glory. Speed-ups can be more than double (depending on the scene, of course), plus it's almost free. And rendering is not noticeably slower—even if all the tested objects end up visible!
29.9 Conclusion
At first sight, occlusion query looks like a really powerful tool—and it definitely is. However, like any other tool, it requires a certain degree of skill and knowledge to use effectively. You need to be able to recognize the situations in which it can be helpful.
In this chapter, we gave just two examples of how to use this technique efficiently. Of course, you don't have to stop here: there are many more things you can do with it. For example, occlusion query can be used for determining geometric level of detail based on the number of pixels occupied by an object. Or you can even use it in a visible-surface-determination algorithm.
Like any other technique, occlusion query will evolve. In the beginning, it will be used for rather simple tasks. But over time, we expect programmers to find amazing new applications for it as various obstacles are removed. With a little luck, this chapter has helped you to get started. Now the real exploration is up to you.
"
You see?
No engine is gonna solve that automatically, the programmer must make sure that occlussion culling is used properly if not then you get more performance drops than gain
Then again, the easiest option is variable resolution like in Wipe Out HD if they dont want to do this