Better Graphics with high Frame Rate ? Possibilities

Hello all

I’ve got an assignment at the moment about 3d Engines and I’ve used Unity the most so I’m going to reference this. The question more or less is… In this day and age people want visually better looking games but they also want frame rate to be decent enough to enjoy the experience. What techniques and methods can i use in 3d Engines in order to achieve this ??

I know in 3ds Max when texturing an assets I’m able to place the texture in two different slots… I think one is opacity and the other i can’t remember… it basically makes the asset look like it has layers. Bump i think the other slot is called. secondly i know instead of allowing Unity to create shadows of… say a tree… I can make my own shadow of a tree which keeps frame rate higher. Lastly I’ve found out recently about LOD in Unity which allows you reduce the polygons in assets from a distance… which you won’t see… to making them detailed once really close by.

Does anyone know any other techniques which i can speak about ??? Thank You

In my opinion a texture atlas is one of the most important things to have to increase proformance.
It makes a huge difference in draw calls.

As well as occlusion culling

1 Like

Well, I probably wouldn’t got to effort of painting a terrain’s shadows for every tree. If you don’t use time of day, you can bake shadows dependant on the size of the terrain. At some point lightmaps will become too large and take up most of your game space on disk, let’s not get into texture streaming etc. for now.

Cascade shadow maps are heavy, they do take up a lot of rendering power so baking is always good when you can do it. Ok next bit is occlusion culling / frustrum (view), which essentially means if you can’t see it don’t render it…

Next is how complex your materials are and how many of them you have. So use less of them and try to use shaders that aren’t heavy (if you don’t know what a shader is, look it up ;))

We have a lot more power on CPU’s / GPU’s, for CPU’s applications and systems are generally multi-threaded, meaning essentially we split them across multiple CPU cores instead of having everything run on one. We may also try to offload as much as possible to the GPU (graphics card).

Then we can use things like Geometry and Material instancing, instanced materials do not cost re-compliation penalties. Instanced meshes in short as simply as I can put it we have one mesh sent with a list of transforms (position), these offload work on both the GPU / CPU…

We have more advanced concepts like texture streaming and geometry streaming, either compressed / distributed based upon distance “vector” boundaries etc. for large terrain chunks.

Finally, a lot of it is “smart” design. Making sure you take advantage of the systems you have, making sure your artwork isn’t 20 instances of 5 million poly’s or 10,000 DC’s… Splitting things up, making sure occlusion culling is effective and potentially lowering impact of heavy shaders… Water always comes to mind when saying heavy shaders, reflection / refraction etc. and making sure you only use small volumes (e.g. don’t just cover the whole scene in water)…

So good level design etc.

There’s plenty more, but something to chew on for a while.

4 Likes

Always be willing to fake something in order to give the user the experience without sacrificing the frame rate. Too many new developers get stuck with the idea of trying to simulate everything perfectly. The key to delivering high frame rates is simply letting go of that tendency.

That is the basic idea. The details vary depending on the type of game being designed.

4 Likes

I don’t know if this will help, but, if you’re a super duper good artist, you could go the
Metroid Prime 1 Gamecube route.
Where they just hand painted and detailed certain boss character textures to a point, that they didn’t need a bump map etc.
And, as one member of Retro Studios replied, when asked about Bump map details on creatures etc,
he replied something like:
What Bump map?:roll_eyes: Everything was hand painted. Even down to the shadows on the creatures.
Lol!:smile:
You wouldn’t believe the amount of cheats they did, to get Metroid Prime 1, to look the way it did on Gamecube.:stuck_out_tongue:

If you use the method I wrote above:
I suggest making sure, that the game camera is sort of restricted and made in such a way, that it doesn’t fully zoom into the characters/boss characters/objects/ground etc.
Otherwise, it’ll break the illusion, and people will realise, that even though it looks super detailed on the outside,
its actually a flat, well detailed hand painted super texture, on a low/high poly,
non detailed/semi detailed 3d model object.:stuck_out_tongue:
Enjoy!:sunglasses:

Do less while appearing to do more. That is all.

4 Likes

As John Carmack once tweeted: “math the shit out of it”

Whaaa, these forums have a swear filter?!?!

…meaning that I don’t need to waste time contemplating which words should be replaced with asterisks?

1 Like

Increasing frame rates is best done by reducing the number of run time calculations. Reducing run time calculations is best done by pre-calculating and saving the results. This process is often called baking.

So bake everything. Bake textures into models. Bake models and lighting and shadows into the environment. Bake in user input and AI and dialogue. Don’t stop there, bake the entire game into a series of flat textures.

Do all of this and you won’t have to do any calculations in real time. You will have better graphics with a high frame rate. You will also have created a movie, but its worth making some game play sacrifices in the name of better graphics.

4 Likes

@Gaveeebruce The question is way too broad. Narrow it down a bit.

Reduction of GPU load: potentially visible surface removal algorithms, baking, precaching, precomputing, lods, lowres distant scenes, impostor objects, etc.
Increasing GPU utilization: minimization of state switching, texture atlases, etc.

Not necessarily.

For example, in DX9 there was a trick with particle system. See, particle system needs a buffer (because drawing it from system memory is slow). The buffer needs to be locked, data must be sent to it, then it must be unlocked. Now, the trick was that with specific combination of flags, you could be writing next batch of primitives WHILE previous one - that used the same buffer - was still rendering. That gave performance increase, but did not reduce number of runtime calculations. Instead it parallelized cpu calculations with gpu calculations, so while GPU was busy, cpu was doing the some other job.

2 Likes

But could that trick out perform a pre rendered movie? :stuck_out_tongue:

You are of course right. My last post was a little tongue in cheek.

Even though it was obviously a joking statement… :slight_smile:

Yeah, absolutely, it could. Pre-rendered movie most likely will require more data to be sent to the GPU than a particle system. 1080p frame - ~6 megabytes of data. 2000 particles … 10000…48000 bytes, depending on how you do it. Of course, you can also choke the GPU with just 200 particles (fillrate + VERY big particles), if you wanted.

2 Likes

layer-based camera culling. It made a HUGE difference for me to put my terrain assets into different layers depending on their size, and then setting up the camera with layer-based culling.

But the real secret is to know enough to read the profiler and knowing what is causing the bottle-neck. Focus on optimizing the bottle-neck which will be unique to every game. There is no right answer. If item 10 is the one that is my bottleneck, optimizing the 9 best things mentioned here will do nothing to improve my FPS.

Use a non-photorealistic visual style for your game. Here are some examples:

Wowzer I’ve never had so much of a response from one of my questions… Thank You. I’ll probably have more than enough material to speak about now :slight_smile: If i have any more questions I’ll message some of you directly.