History: TindalosNotes
Preview of version: 58
- «
- »
Welcome to the ChangeLog and porting notes for OGRE 2.0.0 "Tindalos" - work in progress
Table of contents
ChangeLog
- Not started
Porting notes
- None yet
Annotated roadmap
- SceneManager redesign
- Very large world support (deal with precision issues at large coordinates)
- Support for rendering a single scene using multiple SceneManagers
- Significant decoupling of SM roles & responsibilities
- SceneNode optional, can integrate objects directly with external state system (Ogre == View in MVC)
- Asynchronous updates, support multithreading where Model is updated at different rate to View
- Construct Camera & Light via MovableObjectFactory instances
dark_sylinc notes:
After much consideration, it appears that it would be best to follow Blender's strategy towards their redesign, where they released several alpha/unstable versions with official numbering (the 2.5x branch) until around 2.53 it became stable enough & with enough features to become production ready.
Their redesign was done rather in incremental steps than complete write from scratch.
Each version down below will lack some features (since they'll become incompatible) but it should be significally faster/stabler/with more features than 1.x
Missing stuff that needs to be designed for 2.x:
- Design idiom (material syntax & code interface) for binding shaders using constant buffers for GL & D3D11 instead of constant registers
- Design Compute Shaders interface (must work within Compositor manager for integrationg with rendering pipeline, and outside of it for regular GPGPU)
- Resource System replacement. Should be scalable, load in background, easier to work with; and can "define itself" so that exporters and other DCC tools can read the Resource config and ease the importing process of assets into Ogre content.
2.0 - Cache misses and ground base
Scene Manager
| Task | Status |
|---|---|
| Create all SoA counterparts (SoA_Vector3; SoA_Matrix4) | DONE |
| Create small unit tests for SoA math | DONE |
| Implement fsel (conditional move) | DONE |
| Replace Node::mChildren from ChildNodeMap to a sorted vector and use std::lower_bound for search. | DONE (1) |
| No mutables in Node (makes a lot harder to detect race conditions when accessing supposedly read-only data at the same time) | DONE |
| Remove Node::mNeedParentUpdate, Node::mNeedChildUpdate, Node::mCachedTransformOutOfDate except for debug asserts & implement Node::_getDerivedPosition + Node::_getDerivedPositionUpdated | DONE |
| Refactor Node::mInitialPosition, Node::mInitialOrientation, Node::mInitialScale: They're only used on keyframed Nodes (i.e. barely used) | DONE |
| Create flexibility levels (virtual_l0, virtual_l1, virtual_l2). Set Node::get & setPosition to the levels specified in the slides | DONE |
| Disable (temporarily) OctreeSceneManager & co. Create a null HighLevelCull that will keep all nodes in one Chunk (grouped per render queue ID, grouped by hierarchy depth for breath first) | DONE |
| ** Must handle growing of the Chunks. | DONE |
| ** Create MemoryManager that will control how memory is assigned to SoA_Vector3 AND to Nodes (so that Nodes are also contiguous, but not SoA) | DONE |
| ** Until CompositorManager is refactored, all nodes will be grouped on the same render queue ID. | DONE |
| ** Modify Node::_update to be used only on demand's Node::_getDerivedPositionUpdated | DONE |
| ** Replace Node::_update with a function called UpdateAllTransforms() that interates on all nodes chunks. Shouldn't be virtual. Will be called by SceneManager for the moment. | DONE |
| *** Write UpdateAllTransforms() code with parallelization in mind! | DONE |
| Thread Manager (can be delayed to 2.1) | DONE |
| Tool to split submeshes into multiple Entities (useful when a submesh must go in a different render queue) | 0% |
| Render queues go from [0; user defined), no gaps. In order to be more flexible & array friendly. (Remove currently fixed "[10; 108)" range) | 0% |
| Adapt Aabb according to LightType and update if position changes | DONE |
| All entities are unique by ID, not by name. An incrementing counter (i.e. mId = ++mIdCount) is recomended | DONE |
| Entity names may be allowed, but use fixed strings. Not variable-length (2) | DONE |
| Implement compositor manager | DONE |
| Each compositor has multiple input textures (superior method than "input previous"; just defined "texture input 0" avoids duplicating resources as a bonus) as well as global texture names | DONE |
| Each compositor has multiple (named) output targets | DONE |
| Make Frustum::isVisible SoA and parallel | DONE |
| Null LowLevelCuller for the moment | DONE |
| Implement UpdateAllAnimations() | DONE |
| Group all bones by hierarchy for breath first. | DONE |
| Do SoA in all Bones | DONE |
| Integrate OgreAnimation into OgreCore | DONE |
| Integrate OgreAnimation into HW VTF instancing | DONE |
| Integrate OgreAnimation into Entity & SubEntity | 0% |
| Restore LOD and allow switching between LOD techniques | DONE |
(1) Not using sorting, but a better approach.
- See http://yosoygames.com.ar/wp/2013/06/ogre-2-0-o1-insertion-removal-and-contiguous-memory-iteration/ Blog post
(2) Interesting reads:
- http://home.comcast.net/~tom_forsyth/blog.wiki.html#[[A%20sprintf%20that%20isn%27t%20as%20ugly]] Fixed length strings
- http://bitsquid.blogspot.com.ar/2011/06/strings-redux.html Hashed strings
Update: Hashed strings ended up being used for unique names. But where names are optional (ie. Entity) an Id is used; the names are variable-length, but empty by default.
RenderSystem
- Replace "create read only -> lock" pattern for "initialize on creation" pattern in order to ease D3D11 development.
Missing broken stuff
Ray Scene queries
NodeAnimationTrack
Samples:
- Character: Not compiling because uses textured shadows (which were permanently removed). Should we update the shaders to use depth shadows (hard) or just disable shadows for that sample? (1)
- DeferredShading: Needs to be ported to the new compositor.
- Grass: Crashing. StaticGeometry has a few bugs.
- Instancing: Old instancing is deprecated and should be removed.
- Lighting: Works, but one of the two flares isn't moving. Most likely a bug in NodeAnimationTrack.
- Shadows: Most of its techniques were deprecated. Should be rewritten to only showcase depth texture shadows.
- SkeletalAnimation: Not compiling because uses stencil shadows (which were permanently removed). Should we update the shaders to use depth shadows (hard) or just disable shadows for that sample? (1)
- SSAO: Compositor scripts need to be ported.
- Water: Not compiling because NodeAnimationTrack hasn't been ported yet (animates the head).
(1) Supporting depth shadows should be much easier (plug and play) when the high level material system is done (which won't be ready for 2.0). Otherwise adding depth shadows is exactly as hard as it used to in 1.9
In short, most samples aren't working because NodeAnimationTrack hasn't been ported yet or because they are using stencil shadows (we should probably disable them)
The only "hard" sample to port could be DeferredShading.
The only one where OgreCore is at fault is Grass.
2.1a
Phase One: Setting up base infrastructure
- Implement UpdateAllAnimations()
- Modify the Mesh format to store bones in the same way (but store 1 float only "XYZXYZ" for cross platform and easy parsing. Do the swizzle conversion when loading if needed)
- Write update code with parallelization in mind!
- TagPoints are now SceneNodes. (TagPoints have lots of issues)
2.1b - Features back
Phase Two: Restoring advanced culling & compositing abilities
- Implement HighLevelCull grid as in the slides.
- Can merge all RenderQueueIDs that can be ever be requested by current compositor chain, so HighLevelCull can know which ones it should send
- Can workout compositor dependencies (i.e. Stream Out & shadow passes) DONE
- Keyword hint on cull list reuse (so Compo Mgr decides whether to create two identical lists of culled objects in 2 different threads for each compositor pass, or process them sequentially in one thread and reuse the list).
- Define compositor syntax to work with Stream Out.
- Add MetaData to Mesh format
- Metadata: Support bounding geometry for sw occlusion culling
- Metadata: Number ID system for keyframed animation, to allow embedding sound cue information, particle effects trigger, etc.
- Implement low level depth-only sw rasterizer for occlusion culling
- Get rid of "debug visualizers/debug renderables" in Frustum and Nodes (which are adding unnecessary dependencies and don't belong there)
-- At this point Ogre 2.1b is similar to 1.x, however it should be much faster & efficient. --
2.3 - Rendering features
RenderSystem
- Removal of all fixed function state managing out of Scene Manager & RenderSystem
- Put all state changing code into one or multiple state blocks.
- Add support for Depth textures (including HW PCF)
- GL, DX9 (through INTZ fourcc), and DX11
- Add HW Gamma keyword toggle on the material (in 1.x if the texture name is not defined, gamma can't be turned on through scripts)
- Add ".texture" files where textures may be defined for certain particularities (i.e. change of format, load for gamma correction) before all materials are parsed.
- Add normal compression.
- Interface to pass data through texture registers (VTF for DX9)
- HW Skinning through texture registers
- Morph Targets through through texture registers
- Replacement of "camera relative rendering" hack in favour of true working in camera space matrices.
- Binding to pass HW Skinning matrices in local space rather than world space.
- Add Compute Shaders (GPGPU) to system. May be managed from CompositorManager (i.e. for rendering) or manually (for pure GPGPU)
- Implement bokeh demo using atomic counters
- Implement Light Indexed Deferred demo.
- Implement Real Time Global Ilumination demo.
2.4 - Flexibility, tools and integration
- Remove manually setting VertexElement::mOffset as it induces to commong mistakes (may remove the variable itself if caching proves to be unnecessary), because this value can be deduced from declaration order.
- Vertex format enhancements (custom flexible vlayout files)
2.5-2.9
TODO
- Add next gen demos.
3.0
First stable release
Talks about it
- http://www.ogre3d.org/forums/viewtopic.php?t=30250|"Tindalos" (Ogre v2.0) SceneManager redesign forum thread
- http://www.ogre3d.org/forums/viewtopic.php?f=25&t=75459 |Ogre 2.x engine