Outerra forum
Outerra Engine => Development screen shots and videos => Topic started by: angrypig on May 08, 2012, 09:00:07 am
-
Hi guys!
As you know we are working on a new import tool that will be available for custom model imports. However new import tool alone is not enough, because our existing object rendering pipeline was less efficient for objects and even a few objects could cause performance issues. This was caused by multiple bugs (in the old import and renderer) and a couple of bad decision in renderer design made by my younger me. :) So I decided to redesign and rewrite some parts of the object renderer to cleanup the old inefficient stuff and to make a few improvements. That is why it is taking longer than expected.
New stuff:
- frustum culling on all objects (static and dynamic)
- level of detail, MAX 4 LODs (do we need more?)
- normal maps (automatically generated tangent frames in importer)
- skinning, still need some work: like automatic bone generation from node name and hierarchy which means no need to create skinned geometry in Max/Blender/Maya for simple node movements like wheels and plane controls)
- mesh indices optimization (Forsyth algorithm automatically done in importer)
- mesh pre-transform vertex data optimization for linear access (automatically done in importer)
- emulated double float precision for static objects position (eliminates CPU->GPU instance data transfer) which means less CPU processing for static objects (culling and LOD only) because all required stuff is on GPU memory
- faster atmospheric scattering for objects (using transform feedback, it is more than 10x faster now, 0.5ms -> 0.04ms
- easier material modding (multiple material library support for one object)
- optimized vertex format (less memory means faster) and support for two UV channels
LOD meshes for OT Guy (by Lukasz Grabny alias Mahnoor) model were automatically generated in Blender, so the LOD switching is not perfect at the moment (I gave it only 5 minutes)
Stuff that has to be done before the release:
- deferred shadowmap which will also allow shadows on grass and better filtering etc.
- currently working on static object pipeline so all static objects like hangars or buildings should work tomorrow
- dynamic objects skinning (wheels, plane controls, animations etc.)
- configuration files like material definitions and vehicle/planes configurations (this also allow modify existing objects and derive new ones)
There are several byproducts of this new obj redererer that can be reused in tree renderer like new atmosphere scattering and mesh optimizations. I will start to work on it after we release the import tool. That new grass stuff causes that forests needs 3D tree more than ever. I also have a lot of ideas in my head that should improve the quality of trees and the rendering performance, simplifying the rendering pipeline. I am quite eager to start on it as soon as possible.
here are two videos with classical music showing the current state (frustum culling issue in first video has been already fixed)
Outerra: obj renderer stress test 1 (http://www.youtube.com/watch?v=9HOlNCuWmiw#ws)
Outerra: obj renderer stress test 2 (http://www.youtube.com/watch?v=Ueqt-k7Ey0M#ws)
-
This is super awesome for static objects, and if the LODs are done correctly mesh popping (such as can be seen in the faces) shouldn't be too much of an issue.
I'm curious what your plans are for animated or deforming meshes, too. Do you have a pipeline for bones and skinning, or anim trees or something like that? I'm sorry if this has been answered before, I'm quite new to the board and extremely excited about the potential of this engine.
-
Yes the pipeline for bone skinning/animation is there but is not completed yet, i have to reactivate old functionality first.
-
Really great news! I think 4 LOD's are enough, even for larger and detailed objects (especially like ships, planes etc).
Is there a limit for the texture size? And nice to hear about the automatic bone generation for the basic animated parts. But if it is possible to import custom animations?
Marko
-
Awesome. :D Will be interesting to see how many ms per skeletal anim are required. Depending on how many cycles are devoted to anims, if AI is applied to large groups rather than individual agents (ala Total War series) it might be possible to field huge groups of animated characters. Pretty excited about the prospect!
-
Very nice, but emissive textures will be supported? They are useful for car/plane gauges in my opinion.
Also dynamic textures will be too? To use for example in digital speedometer/digital gauge.
And about LODs: theoretically 4 should be enough, but I will rather ask if changing max number of LODs in the future will be quite easy or not?
-
i don't see any reason why not to support them. But what it needs is to make some interface into a scripting language to allow modders draw into such textures...
It is not big deal to support more LODs in future, i am just too lazy do it now :), to have max 4 LODs for every package just simplifies some pointer arithmetic...
-
Great work. It looks like things are progressing well.
Is the LOD set to 4 levels for optimisation reasons? I'm just thinking it might be worth a few more additional levels. Will you also be looking at generating impostors for some of the objects? Depending on the geometry these could potentially be blended in/out with lower LOD geometry.
EDIT: Just read about the 4-LOD's for ptr arithmetic simplification.
-
How many people are in that marching band? is it 30x200?
It is insane btw.
-
20 x 150 = 3000 :)
-
Your rendering seems pretty efficient already if it can handle rendering that many objects without even a minor hiccup. Kudos to you guys. Can't wait to see the further improvements.
-
Aw, no more shiny Guy? :'(
-
I know 0 about graphics programming or what you have done here, but can I be the first to say J*s*s T*tty F*ck*n* C*r*s*! As a layman (which isn't worth much I know) I'm impressed!
-
about LODs, is one OT's world/planet already the "child" of a bigger structure/model ?
Let's push the limits and consider we would like to build the Solar system (or another one), located in our Galaxy, and so on...
Can you already manage to do that with your LOD Hierarchy ? or you would do different ?
or it is crazy to imagine that larger space models can be managed by the engine ?
But maybe I am off-topic as you are talking about LODs per imported Object... :(
-
Are there some guidelines for the tris-limits at the several LoD-levels?
On the project i was working for before, they existed.
On the low detailed level it was around 10 - 100, on max detail it was 10000. So you have 4 levels (5 are also ok, because you have one normal level and two lower/higher detail levels)
My proposal would be
LoD 1) - 10..100
LoD 2) - 100..1000
LoD 3) - 1000 .. 3000
LoD 4) - 3000 .. 10000
Of course that doesnt make sense for all of the objects. But its useful as guideline i think.
-
Are there some guidelines for the tris-limits at the several LoD-levels?
On the project i was working for before, they existed.
On the low detailed level it was around 10 - 100, on max detail it was 10000. So you have 4 levels (5 are also ok, because you have one normal level and two lower/higher detail levels)
My proposal would be
LoD 1) - 10..100
LoD 2) - 100..1000
LoD 3) - 1000 .. 3000
LoD 4) - 3000 .. 10000
Of course that doesnt make sense for all of the objects. But its useful as guideline i think.
I'd make LoD 4 a billboard/flat or VERY VERY basic shape of an object (for example cars would be a simple 18 triangle block (20 if you include the bottom), and keep LoD's 1 through 3 as standard LOD's. Don't forget that objects will be seen from much greater distances than in most games/real time 3d apps
-
It doesnt matter if LoD 1 or 4 is the lowest one. I suggested 10 tris, what would be a billboard model of course. Why do you tell me the distance depending visibilities of game models? Did i wrote something differing? I'm confused o.O But i'm sure i understand the idea of level of details (some years ago) ;) correct me, if i'm wrong.
-
I don't think billboards should come into it with only 4 levels of detail.. Six or eight.. I am all for it. But even 10-12 pixel high items should probably pop out of cardboard mode.