Teningur (halted)

Concepts
Login

Matrical simulation

This concept has a specific meaning to me in general and in the context of this project.

The word matrical means there is a matrix, or grid, or multi-dimensional array. The word simulation means that the state of the matrix is evolving over time.

Quantization

The choice of the resolution for spatial, temporal and state data is probably a huge factor for the performance and scale of the simulation.

Notes:

(I like the idea of a regular, low resolution, semantically loaded1 piece of data like Pixel Art; the project reflects that way of thinking.)

Partial vs. Full

In the idea of a full simulation, everything would be simulated at every cycle and it would have the scale and optimizations suited for that.

This project aims for partial simulation, where there is a huge world and only a fraction of it is simulated. To me, it puts more emphasis on exploration and less on having a complex living world2.

Hybrid

The simulation is not purely matrical, other data structures can be simulated on top of it (e.g. a graph for an electric network). Things simulated outside of the matrix can also interact with it (e.g. objects of a physic engine).

However, the matrical aspect is still fundamental.

Simulation

The aimed method for computation is as follow:

It is very similar (or the same) to cellular automata.

This avoids issues with the order of effects/computations:

Framework

DAG / LoD

One key aspect of the framework is to work with levels of details or LoDs.

The goal is to use a directed acyclic graph (DAG) as the main data structure to manipulate a matrix of the simulation. This allows compression and aggregation of the matrix's data at different levels of details and to ideally exploit those properties at every step (storage, memory, generation, simulation/logic, networking and rendering).

Updating the matrix as a DAG might be less efficient than with a chunk oriented design, but this matches the idea of a partial simulation with a huge world and seldom updates.

Some algorithms might benefit from that structure, others might suffer in terms of performance or complexity. Consequently, the framework will probably expose different interfaces to the same data. But, working with a DAG is a core concept and not just an implementation detail.

Abstraction

The framework aims to provide a useful abstraction for building those huge partial matrical simulations.

Examples are:


  1. ^ If we were to compute the ratio of the amount of semantic to the amount of data.
  2. ^ It's not that full simulations are not interesting, but I'm not interested in making a framework for that use case.