SlideShare a Scribd company logo
Amethyst:
Past, Present, & Future
Eyal Kalderon @ebkalderon
Rust Toronto Meetup 2017
Preview

What is Amethyst?

Brief History

Current State

Future Plans
Rust Toronto Meetup 2017
2
What is
Amethyst?
An Intuitive
Game Engine

Data-oriented

Data-driven

Free and open source (MIT/Apache)

Written in Rust with ♥
Rust Toronto Meetup 2017
Rust Toronto Meetup 2017
Data-oriented

Programming paradigm

Storing data compactly and
exploiting modern hardware
to process it efficiently

Lends itself well to pipelining,
modularity, and massive
parallelism (task or data)
Data-driven

Software design style

Critical logic defined in data
rather than in compiled code

Hot-reloading, instant
feedback

Orthogonal concept to data-
orientation
5
Rust Toronto Meetup 2017
Features

Easy game state management

Pushdown automaton (FSM with memory)

Transition between screens or gameplay modes

Entity-component-system (ECS) model

Specs provides a scalable parallel framework

Extensible 3D rendering system

Supports custom graphical passes

Direct3D 11 and OpenGL backends via gfx-rs

Presented as cohesive unit, subcrates are also usable
6
Rust Toronto Meetup 2017
Pushdown Automata 7
Source: Game Programming Patterns
Rust Toronto Meetup 2017
Pushdown Automata 8
Intro Menu Playing
Cutscene
PausedOptions
YouLost
YouWon
Brief
History
10
Rust Toronto Meetup 2017
History

Born 13th
Jan 2016

First commit 20th
Dec 2015

Personal toy project

Practice Rust 1.0

Used Dark GDK, Unity, Unreal

Inspired by Bitsquid (Stingray)

Catching steam around Feb 2016

GitHub organization Mar 2016
11
Rust Toronto Meetup 2017

Initially intense discussion and design

Renderer prototyped 4th
Apr 2016

Specs parallel ECS

Born 5th
Apr 2016

Separate project

Co-evolved alongside Amethyst

iter_mut(), iter_mut(), iter_mut()
History
State of
the Engine
Rust Toronto Meetup 2017
Current State
13

Growing rapidly, high code churn

Core features present:

State machine, ECS, rendering, configuration (YAML)

Notably missing:

Audio, GUI, physics, tooling, entity definition (YAML)

Proof of concept Pong clone

Documentation available, but sorely out of date

Greater test coverage and benchmarks would be nice
Rust Toronto Meetup 2017
API
Example
pub struct HelloWorld;
impl State for HelloWorld {
fn on_start(&mut self, eng: &mut Engine) {
println!("Starting up...");
}
fn update(&mut self, eng: &mut Engine) -> Trans {
println!("Playing!");
Trans::Quit
}
fn on_stop(&mut self, eng: &mut Engine) {
println!("Shutting down...");
}
}
14
Future
Plans
Rust Toronto Meetup 2017
More Parallelism
16

Asset management is being reworked (#244)

Cleaner API

Asynchronous and parallel loading using futures

Renderer is undergoing rewrite (#233)

More data-driven

Parallel rendering

Build pipeline state objects at runtime

Collaborating more closely with gfx-rs

Specs, asset manager, and renderer all share threadpool
Rust Toronto Meetup 2017
User Experience
17

Embedded scripting language support

Possibilities: mruby, Lua, Dyon, Javascript, others

Hot-reloading of Rust code, scripts, and assets

Improve tooling situation

Traditional “mega-editor” split into several small
command-line tools, scriptable

Editor is merely a frontend to these utilities

Compile shaders, generate mipmaps, and compress
assets when building in release mode
Rust Toronto Meetup 2017
Determinism
18

Many cool improvements to be made here!

Recording and playback of in-engine demos

Think Quake-style demos, compact text files

Store RNG seeds, initial world state, player inputs

Frame-by-frame rewind and fast-forward

Multiplayer becomes a networked extension of demos

Tool slaving, network transparency

Simulate on development PC, preview and profile
game on mobile/consoles, etc. over USB or network
Join us!
amethyst.rs
Rust Toronto Meetup 2017
Links

Getting involved

https://www.amethyst.rs

https://github.com/amethyst/amethyst

https://gitter.com/amethyst/rooms

Further reading

https://bitsquid.blogspot.com/

http://gamedevs.org/uploads/benefits-of-a-data-driven-renderer.pdf

http://gamedevs.org/uploads/flexible-rendering-multiple-platforms.pdf

https://torkleyy.github.io/blog/amethyst-assets/
20
Thank You!
Questions?
Rust Toronto Meetup 2017
References 22
Design Patterns Revisited – State Pattern. (2009). [Drawing of pushdown
automaton]. Game Programming Patterns. Retrieved from
http://gameprogrammingpatterns.com/images/state-pushdown.png
Wikimedia Commons. (2015). [Wyoming Night Sky]. Retrieved from
https://commons.wikimedia.org/wiki/File:February_-conservationlands
15_Social_Media_Takeover-_Top_15_Places_on_National_Conservation_La
nds_for_Night_Sky_Viewing_(16358792937).jpg

More Related Content

PDF
Fluent Bit: Log Forwarding at Scale
PDF
Log forwarding at Scale
PDF
PDF
FleetDB
PPTX
From monolith to microservice with containers.
PDF
Cloud Native Logging / Fluentd Summit Tokyo
PDF
Fluentd Intro for OpenShift Commons Briefing
PDF
Writing Redis Module with Rust
Fluent Bit: Log Forwarding at Scale
Log forwarding at Scale
FleetDB
From monolith to microservice with containers.
Cloud Native Logging / Fluentd Summit Tokyo
Fluentd Intro for OpenShift Commons Briefing
Writing Redis Module with Rust

What's hot (19)

PDF
Logging for Containers
PDF
PostgreSQL and Compressed Documents (pgconf.ru 2018)
PDF
Containers and Logging
PDF
Fluent-bit
PDF
Fluentd and Docker - running fluentd within a docker container
PDF
From Zero to Hero @ PyGrunn 2014
PDF
Ingress controller present, past and future
PPTX
Your data isn't that big @ Big Things Meetup 2016-05-16
PDF
Taking Your Database Global with Kubernetes
PDF
Writing NetBSD Sound Drivers in Haskell
PPTX
Roslyn: el futuro de C#
PDF
gVisor, Kata Containers, Firecracker, Docker: Who is Who in the Container Space?
PDF
Meet the Experts: Visualize Your Time-Stamped Data Using the React-Based Gira...
PDF
Python and trending_data_ops
PPTX
TDC2018SP | Trilha NoSQL - Git muito alem do controle de versao, uma alternat...
PDF
Fluentd Project Intro at Kubecon 2019 EU
PDF
8 Ways Network Engineers use Snabb (RIPE 77)
PDF
Fluentd and Distributed Logging at Kubecon
PDF
Introduction to RethinkDB and Horizon.js
Logging for Containers
PostgreSQL and Compressed Documents (pgconf.ru 2018)
Containers and Logging
Fluent-bit
Fluentd and Docker - running fluentd within a docker container
From Zero to Hero @ PyGrunn 2014
Ingress controller present, past and future
Your data isn't that big @ Big Things Meetup 2016-05-16
Taking Your Database Global with Kubernetes
Writing NetBSD Sound Drivers in Haskell
Roslyn: el futuro de C#
gVisor, Kata Containers, Firecracker, Docker: Who is Who in the Container Space?
Meet the Experts: Visualize Your Time-Stamped Data Using the React-Based Gira...
Python and trending_data_ops
TDC2018SP | Trilha NoSQL - Git muito alem do controle de versao, uma alternat...
Fluentd Project Intro at Kubecon 2019 EU
8 Ways Network Engineers use Snabb (RIPE 77)
Fluentd and Distributed Logging at Kubecon
Introduction to RethinkDB and Horizon.js
Ad

Similar to Amethyst: Past, Present, Future (7)

PDF
Amethyst: The Gem in the Rust
PDF
Make A Shoot ‘Em Up Game with Amethyst Framework
PPTX
Rust 101 (2017 edition)
PDF
Mozilla + Rust at PCU Manila 02 DEC 2016
PDF
A small introduction to rust language
PDF
Open stack swift_essex_meetup_2012_06_21_judd_maltin
PDF
Developing AR and VR Experiences with Unity
Amethyst: The Gem in the Rust
Make A Shoot ‘Em Up Game with Amethyst Framework
Rust 101 (2017 edition)
Mozilla + Rust at PCU Manila 02 DEC 2016
A small introduction to rust language
Open stack swift_essex_meetup_2012_06_21_judd_maltin
Developing AR and VR Experiences with Unity
Ad

Recently uploaded (20)

PPTX
How a Careem Clone App Allows You to Compete with Large Mobility Brands
PDF
Comprehensive Salesforce Implementation Services.pdf
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PPT
JAVA ppt tutorial basics to learn java programming
PDF
ShowUs: Pharo Stream Deck (ESUG 2025, Gdansk)
PDF
Jenkins: An open-source automation server powering CI/CD Automation
PDF
Teaching Reproducibility and Embracing Variability: From Floating-Point Exper...
PDF
AI in Product Development-omnex systems
PPTX
Presentation of Computer CLASS 2 .pptx
PDF
Digital Strategies for Manufacturing Companies
PDF
top salesforce developer skills in 2025.pdf
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PPTX
Materi_Pemrograman_Komputer-Looping.pptx
PDF
PTS Company Brochure 2025 (1).pdf.......
PDF
Understanding NFT Marketplace Development_ Trends and Innovations.pdf
PPTX
AIRLINE PRICE API | FLIGHT API COST |
PDF
The Role of Automation and AI in EHS Management for Data Centers.pdf
PDF
Forouzan Book Information Security Chaper - 1
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PDF
QAware_Mario-Leander_Reimer_Architecting and Building a K8s-based AI Platform...
How a Careem Clone App Allows You to Compete with Large Mobility Brands
Comprehensive Salesforce Implementation Services.pdf
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
JAVA ppt tutorial basics to learn java programming
ShowUs: Pharo Stream Deck (ESUG 2025, Gdansk)
Jenkins: An open-source automation server powering CI/CD Automation
Teaching Reproducibility and Embracing Variability: From Floating-Point Exper...
AI in Product Development-omnex systems
Presentation of Computer CLASS 2 .pptx
Digital Strategies for Manufacturing Companies
top salesforce developer skills in 2025.pdf
2025 Textile ERP Trends: SAP, Odoo & Oracle
Materi_Pemrograman_Komputer-Looping.pptx
PTS Company Brochure 2025 (1).pdf.......
Understanding NFT Marketplace Development_ Trends and Innovations.pdf
AIRLINE PRICE API | FLIGHT API COST |
The Role of Automation and AI in EHS Management for Data Centers.pdf
Forouzan Book Information Security Chaper - 1
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
QAware_Mario-Leander_Reimer_Architecting and Building a K8s-based AI Platform...

Amethyst: Past, Present, Future

  • 1. Amethyst: Past, Present, & Future Eyal Kalderon @ebkalderon Rust Toronto Meetup 2017
  • 2. Preview  What is Amethyst?  Brief History  Current State  Future Plans Rust Toronto Meetup 2017 2
  • 4. An Intuitive Game Engine  Data-oriented  Data-driven  Free and open source (MIT/Apache)  Written in Rust with ♥ Rust Toronto Meetup 2017
  • 5. Rust Toronto Meetup 2017 Data-oriented  Programming paradigm  Storing data compactly and exploiting modern hardware to process it efficiently  Lends itself well to pipelining, modularity, and massive parallelism (task or data) Data-driven  Software design style  Critical logic defined in data rather than in compiled code  Hot-reloading, instant feedback  Orthogonal concept to data- orientation 5
  • 6. Rust Toronto Meetup 2017 Features  Easy game state management  Pushdown automaton (FSM with memory)  Transition between screens or gameplay modes  Entity-component-system (ECS) model  Specs provides a scalable parallel framework  Extensible 3D rendering system  Supports custom graphical passes  Direct3D 11 and OpenGL backends via gfx-rs  Presented as cohesive unit, subcrates are also usable 6
  • 7. Rust Toronto Meetup 2017 Pushdown Automata 7 Source: Game Programming Patterns
  • 8. Rust Toronto Meetup 2017 Pushdown Automata 8 Intro Menu Playing Cutscene PausedOptions YouLost YouWon
  • 10. 10 Rust Toronto Meetup 2017 History  Born 13th Jan 2016  First commit 20th Dec 2015  Personal toy project  Practice Rust 1.0  Used Dark GDK, Unity, Unreal  Inspired by Bitsquid (Stingray)  Catching steam around Feb 2016  GitHub organization Mar 2016
  • 11. 11 Rust Toronto Meetup 2017  Initially intense discussion and design  Renderer prototyped 4th Apr 2016  Specs parallel ECS  Born 5th Apr 2016  Separate project  Co-evolved alongside Amethyst  iter_mut(), iter_mut(), iter_mut() History
  • 13. Rust Toronto Meetup 2017 Current State 13  Growing rapidly, high code churn  Core features present:  State machine, ECS, rendering, configuration (YAML)  Notably missing:  Audio, GUI, physics, tooling, entity definition (YAML)  Proof of concept Pong clone  Documentation available, but sorely out of date  Greater test coverage and benchmarks would be nice
  • 14. Rust Toronto Meetup 2017 API Example pub struct HelloWorld; impl State for HelloWorld { fn on_start(&mut self, eng: &mut Engine) { println!("Starting up..."); } fn update(&mut self, eng: &mut Engine) -> Trans { println!("Playing!"); Trans::Quit } fn on_stop(&mut self, eng: &mut Engine) { println!("Shutting down..."); } } 14
  • 16. Rust Toronto Meetup 2017 More Parallelism 16  Asset management is being reworked (#244)  Cleaner API  Asynchronous and parallel loading using futures  Renderer is undergoing rewrite (#233)  More data-driven  Parallel rendering  Build pipeline state objects at runtime  Collaborating more closely with gfx-rs  Specs, asset manager, and renderer all share threadpool
  • 17. Rust Toronto Meetup 2017 User Experience 17  Embedded scripting language support  Possibilities: mruby, Lua, Dyon, Javascript, others  Hot-reloading of Rust code, scripts, and assets  Improve tooling situation  Traditional “mega-editor” split into several small command-line tools, scriptable  Editor is merely a frontend to these utilities  Compile shaders, generate mipmaps, and compress assets when building in release mode
  • 18. Rust Toronto Meetup 2017 Determinism 18  Many cool improvements to be made here!  Recording and playback of in-engine demos  Think Quake-style demos, compact text files  Store RNG seeds, initial world state, player inputs  Frame-by-frame rewind and fast-forward  Multiplayer becomes a networked extension of demos  Tool slaving, network transparency  Simulate on development PC, preview and profile game on mobile/consoles, etc. over USB or network
  • 20. Rust Toronto Meetup 2017 Links  Getting involved  https://www.amethyst.rs  https://github.com/amethyst/amethyst  https://gitter.com/amethyst/rooms  Further reading  https://bitsquid.blogspot.com/  http://gamedevs.org/uploads/benefits-of-a-data-driven-renderer.pdf  http://gamedevs.org/uploads/flexible-rendering-multiple-platforms.pdf  https://torkleyy.github.io/blog/amethyst-assets/ 20
  • 22. Rust Toronto Meetup 2017 References 22 Design Patterns Revisited – State Pattern. (2009). [Drawing of pushdown automaton]. Game Programming Patterns. Retrieved from http://gameprogrammingpatterns.com/images/state-pushdown.png Wikimedia Commons. (2015). [Wyoming Night Sky]. Retrieved from https://commons.wikimedia.org/wiki/File:February_-conservationlands 15_Social_Media_Takeover-_Top_15_Places_on_National_Conservation_La nds_for_Night_Sky_Viewing_(16358792937).jpg