ESC API vs Other DOD API

Ive never used DOD before but really like it. My question is what is unique to the Unity API , for example is chunk iteration only found in the Unity ECS api and what about the query api? . Will an engineer used to say Entitias be able to transition between the APIs knowing the concept of DOD, what would they find is unique to Unity ?

Unity’s ECS is a tuple-based ECS (Components and Systems are only loosely coupled) with an asynchronous job system. This is the most advanced type of ECS I have come across, although I have seen this in a couple other instances (none with as clean of an API though). I defining characteristic of this kind of ECS is the presence of ECBs.

Unity’s ECS is the first I have seen to use chunks instead of dynamic arrays per archetype. So chunk iteration, shared components, chunk change filters, and dynamic buffers are all pretty special. There’s probably some commercial studios that have some of these features, but they were new to me.

Another unique aspect is Unity uses blobs instead of asset tables. It is very very fast, but also very easy for naive users to create memory leaks.

Non-Tupled ECS architectures will typically store the component data within the system, and the entity’s “components” end up just being indices. Such architectures also have an event system for communicating between different component types and consequently are found implemented in languages with automatic memory management.

Then there’s SOA object-systems. It is like an ECS, but the archetype is hard-coded and a system can only iterate over one archetype at a time. This is one of the easiest architectures to get up and running and also one of the easiest to multi-thread. It also beats any ECS for simple (complexity-wise, data-wise you can still have massive simulations) games. I used this a lot in the past.

Lastly, there’s another DOD architecture built on in-memory tables. You can read Richard Fabian’s DOD book to get an idea how it works. I use this architecture sometimes when building libraries that may be used in a larger context. I would never use it for a full game architecture though. It is just too difficult to debug at that scale.

8 Likes

Think you this is great info.