Continuing the discussion from Archetypal vs Grouped ECS Architectures, my take:
Amethyst’s current direction has been to move from Specs to Legion for the ECS. I believe reasonable evidence was provided to show that a move from Specs to Legion would be a benefit to the project. The reason being not most powerfully because of its performance but due to its flexibility compared to Specs ( a reference ).
The discussion thus far in the post “Archetypal vs Grouped ECS Architectures, my take” has been about the ECS models specifically and the way that they work and perform. We need to figure out practically, though, how this discussion is going to apply to Amethyst.
As far as I’ve seen, Amethyst’s decision making model is somewhat free-form. We discuss and work on stuff when we can, and the direction tends to go a certain way based on the general consensus of those involved and those willing to put in the work to go in a certain direction.
Anyway, what I’m wanting to distill here, is what we need to do to make further discussion on the ECS productive to the Amethyst project and community.
If there was a decision to be made, is it really “do we use Shipyard or Legion for Amethyst?”, or is this just a philosophical discussion about ECS design? If it is just philosophical, then that’s fine and there is nothing that needs to be done about it, but there is an extent to which the ECS that we build on now will be the foundation on which we build everything later and that makes this unfortunately difficult topic an unfortunately import one.
That said, does anybody have any thoughts for what this means for Amethyst? @kabergstrom @azriel91 @erlend_sh @jaynus @fletcher @distransient ( sorry for the pings, I don’t know who’s best to involve in this ).
From what I’ve gathered from the discussion, it seems like Legion will likely provide decent performance for the general case . While a different model ECS could provide more performance tailoring for the more experience developer . All engine designs have to make trade-offs and I think that this is the design decision that we have to make for Amethyst: easier general case performance without requiring user customization or more tuneable performance that requires more experience.
Obviously that simplifies the difference between the two models drastically, but that is my best attempt at the practical, direction-affecting difference between them for the Amethyst project.
This brings up an even more general and more important aspect of Amethyst that I’ve wanted to discuss: what is the vision of Amethyst? This question of the vision of a project is maybe the single most important question of any project. The vision is the overarching goal of the project that every other endeavor and interaction that it participates in should reflect.
The Why are you here? topic offers some interesting and valuable insight. What you will notice is that everybody is here for different reasons . Amethyst is an intriguing community. Like I mentioned earlier, decision making here seems to be somewhat free-form. That isn’t at all bad. This community has organically grown from people who share interests around gaming and Rust and it is a cool thing to be a part of. The way that we move forward is driven by the combined efforts and visions of the contributors.
Still, I think that it is important to truly define what the goal and driving motivation for the Amethyst project is. We need to know what we are working for. When decisions come up we can then bounce the decision off of our vision and work to determine what is going to best accomplish our goal for Amethyst.
For example, ( taking from the Why are you here? ):
- @erlend_sh ( link ) is working on Amethyst because he wants to bring certain kinds of games such as procedural, simulation, and eSports to the community. Amethyst is a tool to help him do that. He doesn’t specifically want to beat Unity, Godot, etc.
- @azriel91 ( link ) is here because Amethyst is providing tools for Rust game development and because he can’t afford to write everything Amethyst has already written.
- @kabergstrom ( link ) is here to help create an Open Source alternative to commercial or in-house game engines and to help increase the amount of sharing that happens in Commercial game development.
We all have things we want to accomplish with Amethyst, but there are going to be times where we have to make directional decisions that will effect the future of Amethyst and we have to have something to base those decisions off of.
To illustrate, if @erlend_sh wants to make games that are, in general, simpler and not as performance dependent as a commercial “Star Wars® Battlefront II®” game or something like that, he might prefer that we use an ECS that is easier for beginners more than an ECS that is more performant. On the other hand, @kabergstrom who wants to make an engine suitable for mid-to-large commercial games might prefer an ECS that is more performant over one that is easier. What we have to distill is what Amethyst as an organization wants. This is something that we will have to decide upon as a community.
At this point I would like to get thoughts on that. Do you think that we need a defined vision, and, if so, what do you think it should be?
My vision for a game engine comes from the Arsenal project vision and my use of Amethyst is mostly a way to help make Arsenal a reality. I want to make a game engine that is approachable to anybody, but that is suitable for a game of any size or complexity. That said, to a certain extent I’m not super tied to Amethyst. If it had a different goal that didn’t facilitate Arsenal, then I would be fine building on something else, not that I don’t like this project or enjoy being in this community!