Jump to content

Large World Support


photo

Recommended Posts

Found an interesting blog with articles on large world coordinate precision and resource streaming. Maybe this has some relevance for upcomming UNIGINE large world/coordinate support implementation.

 

world coordinate precision

 

]"]A Matter Of Precision.

 

Instead of double data type usage of 32-/64-bit fixed-precision-integers for position handling is recommended. Might still give opportunity to use SS2 instructions for high-performance arithmetics.

 

world streaming strategies

 

] "]Streaming Resource Overview.

]"]Visibility and Priority Tests for Streaming Assets

]"]Texture Streaming Systems with Two Levels of Cache

 

Core ideas are fine-grained resource pre-fetching based on camera distance/speed without view frustum limitation to avoid frame drops/popping, loading only required resource LOD's (e.g. texture mipmaps), usage of different resource priorities (including memory lock) and grouping/link related resources (e.g. undamaged/damaged model and explosion effect) to avoid missing resources on effect sequences...and many more

Link to comment
  • 3 weeks later...
  • 4 weeks later...
  • 2 months later...
  • 1 month later...

Good news. Based on last SDK update news there came another design issue to my mind which I haven't mentioned in the email:

Once loaded, material/property libraries are not unloaded from the set of world libraries (huge loading speed-up for worlds with shared resources)

Above approach might be problematic if zone-based streaming of general node files with embedded zone-specific material/property library references would always keep all libraries in memory.

 

Maybe it would be a much better solution to do some kind of library reference counting for unloading libraries when no more references exist. Global or shared libraries referenced in the top-level world file then would always be kept in memory while additional zone-specific libraries only referenced in one or more zone node file could also be unloaded when all referencing zones have been unloaded.

 

In general all kinds of resources including meshes, textures, images, animations, libraries and node files should be streamable, ref-counted and optionally be lockable in memory as mentioned in Streaming Resource Overview.

Link to comment

do we really need a double precision for unlimited scale world?

 

currently, double precision has no streaming support, this means you can not pack world files, then this double precision makes no sense.

Link to comment
do we really need a double precision for unlimited scale world? currently, double precision has no streaming support, this means you can not pack world files, then this double precision makes no sense.

 

For really large-size worlds (e.g > 10000 units) double-precision support is mandatory to avoid all kind of precision issues (e.g jittering). Therefore UNIGINE has implemented this feature as a first step for support of unlimited worlds. Next step will be to split these large worlds into smaller streamable world zones, so only player surrounding world zones are kept in memory. That's exactly what the upcomming zone-based node streaming support shall provide.

 

BTW even for small-size, but very complex worlds (e.g. Urban Environments like in Crysis 2) requiring only single precision engine builds streaming support is a must have feature.

Link to comment
  • 1 year later...
  • 11 months later...
×
×
  • Create New...