Skip to content
Lucas Damian Johnson edited this page Jul 26, 2023 · 22 revisions

To-Do List for the project. This contains some far-off goals for the project as well. But mostly bug fixes and features that need to be implemented.

General

  • Create a way to load textures, voxels, and maybe more from JSON data.
  • Create a way to save a section of chunks in an optimal way.
  • Create a way to re-initialize the engine with different settings, voxels, and or textures.
  • Make a proper distribution version.

Shaders, Materials, & Meshes

  • Create a way to turn on and off shader effects.
  • Re-write fluid and magma shaders to ignore AO.
  • Re-write flora shaders to account for RGB light and sunlight.
  • Re-write fluid shaders to account for RGB light and sunlight.
  • Fix lighting problems with the fluid substance. Including smooth shading and light updating.
  • Re-write solid, flora, magma, fluid shaders to account for colors.
  • Create a way to ignore AO, colors, RGB light, and sunlight.
  • Implement Babylon's dynamic light to create sunlight that uses the Shadow Generator to create shadows.

Fluid And Magma Substance

  • Create flow algorithm. Could be like sunlight propagation with additional constraints.
  • Create different voxel shapes for each level.
  • Create auto-update on voxel add o remove.

Voxel

  • Change voxel palettes to map to a string key of a voxel state.
  • Implement hooks.
  • Implement colored voxels.
  • Add a material property to voxels.
  • Implement rich vovels.
    • Rich voxels contain data. Think of a chest in Minecraft with items.

Voxel Shapes

  • Add normal calculation for lighting.
  • Implement shape state template.
  • Create more voxels shapes.
    • Half Box [slab]
      • Top State
      • Bottom State
      • West State
      • East State
      • North State
      • South State
    • Quarter Box [pillar middle]
    • Stairs
      • Top West State
      • Top East State
      • Top North State
      • Top South State
      • Bottom West State
      • Bottom East State
      • Bottom North State
      • Bottom South State
    • Wall/Hanging Flat Face [Used for a vine, ladder, or a hanging plant.]
      • West State
      • East State
      • North State
      • South State

Regions

  • Create a region system to store collections of chunks.
  • Create a per-region voxel palette.

Chunk

  • Change the way voxels are stored. Instead of 4D array use a 3D array of numbers. Encode the light values in the first 16 bits and the voxel id in the last 16 bits.
  • Change the way voxels are stored again. Instead of a 3d use a 1d array and derive the x,y,z from the index. May not affect chunk process time too much but will for easier transport of the data between threads.
  • Create a way to process a specific type of voxel substance for a chunk instead of all of it all the time.
  • Create per-chunk voxel palettes.
  • Add data property for data linked to rich voxels
  • Implement the proto property for chunks to store what stage in their generation they are at.
    • Stage 0 indicates that has never been built or its light values added.
    • Stage 1 indicates that its RGB light values have been propagated.
    • Stage 2 indicates that its sunlight values have been propagated.
    • Stage 3 indicates that all fluid updates have been propagated.
    • Stage 4 indicates that all magma updates have been propagated.
    • Stage 5 may be used for structure generation completion.

World Data & Chunk Processing

  • Create a chunk update, Que, when doing light updates, adding, removing, and so on.
  • Create a way to run the chunk update, Que.
  • When adding/removing a voxel update the heightmap.
  • Create an easy way to add voxels into the world. The user won't have to worry about creating chunks, height maps, or voxel palettes.

Lighting

  • Create a way to ignore AO, colors, RGB light, and sunlight calculations and processing.
  • Create an easy way to update light up a world and do updates.
  • Create auto-updating of light on voxel light source add and remove.
  • Create auto-updating of light on normal voxel add and remove.
  • Update sunlight propagation for going through the fluid substance.
  • When running a light update or remove create a list of chunks that need to be re-built and have a function to re-build them automatically.
  • When creating a chunk for the first time create a list of light values and positions that need to be propagated.
  • Update sunlight propagation to start at the highest solid or light holding voxel and fill with full sunlight. Then add only the air or light holding voxels that are at or one higher than the generated height map voxels.

Math & Physics

  • Create a helper class that can do collision detection in the world thread.
  • Create a helper class that does pathfinding.
  • Create a function to get what voxel is closest given a position, direction, and distance.

Multi-Threading

  • Create an active chunk system. Active chunks will be loaded into a shared array buffer that can be accessed by multiple threads.
    • Note: This was redefined as "Matrix Loaded". A chunk is "Active" if it is loaded into the Matrix and synced between threads.
  • Crete a chunk cache system that will store the un-active chunks.
  • Create a way to sync voxel data between threads by passing the shared array buffer to each thread and mapping it to its location hash.
  • Create a way to interpret the voxel data for each thread that may need to.

Clone this wiki locally