3 ms·
I can't even imagine game dev without ECS. There's more performant architectures but it's such a useful mental model for the type of rapid iteration games need
by BoorishBears 5y ago
I can't even imagine game dev without ECS. There's more performant architectures but it's such a useful mental model for the type of rapid iteration games need that so many people are willing to put up with the drawbacks
- verdagon 5y agoWhat are some of the more performant architectures?
- BoorishBears 5y agoData oriented instead of object oriented: https://gamedevelopment.tutsplus.com/articles/what-is-data-oriented-game-engine-design--cms-21052 https://gamedevelopment.tutsplus.com/articles/what-is-data-o... Instead of treating each object as a collection of components, you can operate on bags of components So say in you're modeling space invaders: every frame: for enemy in enemies enemy.transform.y += 10 The CPU is hopping to a random memory address where your "transform" component is located before modifying it, over and over. Data oriented would be something like: each frame: for transform in transforms if transform is enemy transform.y += 10 if transform is player transform += input So you get cache locality as you're running through your transforms. Now imagine if instead of space invaders we're trying to model say blades of grass. Suddenly we go from a very cache unfriendly method to something that's cache friendly, branch prediction friendly, and easy to parallelize. If you want to experiment with it Unity has some great examples under their new DOTS system https://github.com/Unity-Technologies/EntityComponentSystemSamples/tree/master/ECSSamples/Assets/HelloCube/1.%20ForEach https://github.com/Unity-Technologies/EntityComponentSystemS... APIs can make data oriented more ergonomic than my contrived example implies, but it's still not nearly as intuitive as ECS imo. To me data oriented subsystems are fine, but not as a core concept for your game's architecture.