Mkay, so I've just watched Helder's vid
on exporting stuff to CE3 and It got me thinking again on a subject I've let go for a while.The backstory:
A couple of years ago I made a paper summarizing all the technical knowledge I managed to gather(most of which came from polycount and especially the "Too Much Optimization Thread"). I remember that It was very long-winded and I apologize for that once again. But here's an excerpt from that found no objections as far as I remember.
Exactly the way your engine draws your object triangle by triangle, it draws the whole scene object by object. In order for your object to be rendered – a draw call must be sent. Since hardware is created by humans it’s pretty much bureaucrtical.) You can’t just go ahead and render everything you want. First you’ve got to have some preparation done. CPU(central processing unit) and GPU(graphics processing unit) share the duties somewhat like this: While GPU goes ahead and just renders stuff, CPU gathers information and prepares next batches to be sent to GPU. What’s important for us here, is that, if CPU is unable to supply GPU with the next batch by the time it’s finished with the current, the GPU has nothing to do. From this we can conclude that rendering an object with a small amount of tris isn’t all that efficient. You’ll spend more time preparing for the render, then on the render itself and waste the precious milliseconds your graphics card could be crunching some sweet stuff.A frame from NVidias 2005(?) GDC presentation
The number of tris GPU can render until the next batch is ready to be submitted significantly varies, but here are some examples. For UE3, UDN says, between a 1000 and 2000 triangles. While working with BigWorld engine we’ve set the barrier at 800 even though some of the programmers said that it could be around a 1000.
So the thing is - making objects objects that are unreasonably low poly is inefficient and technically unbeneficial.From personal Experience:
At the studio I used to work at I actually approached programmers with that stuff and said that if this is correct, then why do we do LoDs for objects that are around 500-700 hundred tris? And they said that I was totally correct and sworn on the first episode of stars wars to our graphics director. And then the whole studio dropped doing LoDs for a lot of stuff saving tonns of time and money on LoDing and Rigging and as far as I know the project is alive and well and they didn't have to go back and redo stuff. Though I could be wrong since I left about 6 month after that. The project is World of Tanks
, btw, so you know it's not a little indie game that doesn't need to worry about resources.
So after mentioning this in the paper someone said that it's incorrect since overdraw still exists. Ok, I mean I realize that that if a pixel on screen is represented by multiple triangles then every triangle will be rendered and sampled together for this one pixel. But, if in this particular drawcall for this particular object rendering All it's triangles still isn't longer then the time until the next drawcall is submitted then what the fuck do we care it all goes sampled into one pixel?
Or am I getting this thing completely wrong? 'Cause I was pretty much staggered by the try count of the prop in the video.TLDR;
Does Cry Engine really care if the bench is 202 tris, 102, 502 or 1002? And does it really makes sense to LoD an asset of 200 tris?
Also,If some of you, guys, have questionable programmers in your studious it would be really nice to hear some more opinions "from the other side". Thanks in advance.
and just in case here's the original paper
- pretty old by now,polycount thread
and the Too Much Optimization Thread