minosoft/doc/rendering/world_renderer.md

1.6 KiB

World Renderer

  • Frustum culling

    • 2 algorithms
      • Fast one (old one): Only tell if it could be in the frustum
      • -> If yes (or no; depends on algo) use complex one to check
    • extreme chunk section values (most east[…] block; highest block; lowest block)
    • "Cave algorithm" (Occlusion culling)
  • 3 Meshes per section (opaque; transparent; translucent)

  • Preparing in nearer to further away order

    • unload meshes if block changed and not in frustum
    • only prepare if chunk is in frustum
    • don't prepare empty chunks
  • Light

    • Client side light engine
    • Lightmap
  • Transparency

    • Sort faces
    • 2 render modes: Fast/Default
      • No block translucency
  • water logged & FluidFillable properties

  • Force interrupt preparing if needed (e.g. new block change; light change; more important task in thread pool)

  • "Resolving" of block models

  • Chunk cache clearing (default F3 + A)

    • Respawn
  • texture animations

  • require neighbour chunks loaded

    • Also don't load if block changes in chunk (e.g. when movement is disabled and walking to chunk border and destroying block)
  • View distance

    • Server side
    • Client side
  • Rewrite renderers

  • Check neighbour positions

  • Cache biomes

  • "Fast biome" in 19w36a+

  • Improved biome blending

  • Performance optimizations

    • Don't render bedrock on y == dimension::minHeight
  • Meshing

    • Greedy meshing
  • Model deciding (for pre flattening versions)

  • Assets manager: Create file from jar with all models inside and load models from there (make them moddable)

  • ToDo:

    • Update neighbour chunks if needed
    • Biomes: Check if chunk is single biome