/3d-cellular-automata

An open-source, 3D cellular automata created in Rust for my final year project at university.

Primary LanguageRustApache License 2.0Apache-2.0

3d-cellular-automata

An open-source 3D cellular automata created in Rust for my Honours Project at university. I am hoping to port this to Web Assembly (WASM) to be hosted on my website.


MIT/Apache 2.0 GitHub commit activity GitHub last commit (branch) GitHub repo size GitHub Workflow Status (with branch)

Why Rust?

  • Fast and optimised
    • Up to twenty-six calculations per cell, per frame...a lot

Learning Goals

  • GUIs
    • Familiarise myself with creating a GUI
  • Learn/ Apply good UI/UX design concepts and practices
    • Applying practices such as KISS (Keep-It-Simple-and-Stupid)
  • Familiarise myself with the Rust language
  • Manage a self-directed project

Aims and objectives

Core

  • Implement as a single-threaded application
  • Tests using pre-calculated starting states
  • Create a platform which is able to host different types of cells
    • Model of competition
    • These "competing" cells would not be counted as valid neighbours
  • Implement both Moore and Von Neumann neighbourhood algorithms

Desirable

  • Command line menu to allow user to change settings
  • Creation of certain presets
  • Implement as a multithreaded application
  • Some basic commands
    • e.g. a help command with an explanation of each setting

Aspirational

  • Port to WASM
  • Implement a settings GUI
    • Should allow user to:
      • Change bounding box size
      • Toggle neighbourhood algorithm
      • Change cycles before cell death
      • Change number of cells to sustain
      • Change various other settings/ rules
  • Addition of some special rules
    • Custom neighbourhood algorithm
  • Change the colour palette
  • Run parallel calculations on GPU
    • This is a long-term goal

Packages used

  • See Cargo.toml for a list of dependencies

  • bevy

    • Crates.io
  • bevy_egui

    • Crates.io
  • bytemuck

    • Crates.io

License

Licensed under either of:

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.