7 ms·
I'm seeing Godot mentioned a lot: one major distinction between O3DE and Godot is that O3DE is "ECS-based" while Godot is "OOP-based" [1][2]. This makes little
by pphysch 5y ago
I'm seeing Godot mentioned a lot: one major distinction between O3DE and Godot is that O3DE is "ECS-based" while Godot is "OOP-based" [1][2].
This makes little difference for the hobbyist gamedev, but it has ramifications for large projects with many interacting systems. Proper ECS architecture better supports the latter case [3].
[1] - https://docs.o3de.org/docs/welcome-guide/key-concepts/#the-component-entity-system https://docs.o3de.org/docs/welcome-guide/key-concepts/#the-c...
[2] - https://godotengine.org/article/why-isnt-godot-ecs-based-game-engine https://godotengine.org/article/why-isnt-godot-ecs-based-gam...
[3] - https://www.youtube.com/watch?v=W3aieHjyNvw https://www.youtube.com/watch?v=W3aieHjyNvw
- criddell 5y agoWould either Godot or O3DE be a good choice for a CAD-type application? It looks like Godot deals well with a scene graph which seems like a good way to organize data for that kind of application.
- esens 5y agoNeither is designed for a CAD engine. CAD uses generally NURBS and a scene graph based around constraints. Game engines are not constraint based but rather about independent behaviour agents interacting using triangle meshes. Quite different.
- worldsayshi 5y agoInteresting! Is there any game engine or open source engine or library that would support those kinds of code styles?
- TaylorAlexander 5y agoI desperately want open source CAD to be a thing. I would suppose that Freecad is probably a very good starting point. I don't think the lack of good open source CAD is due to a lack of a decent codebase so much as the fact that good CAD software is a very large project and we have just not directed enough efforts towards it. I am speculating however and may be wrong.
- worldsayshi 5y agoRather than "just" Open source CAD I would like to see Open Source CAD-like applications. Well, at least in my mind CAD is something kind of specific and carries a lot of design assumptions with it. I feel there is a lot of cool stuff you can build in the space of building shapes using constraints. Like visual programming languages made to visualize mathematical relationships using geometry.
- TaylorAlexander 5y agoInteresting. In my case I am specifically talking about mechanical design CAD for engineering. We have a huge need for that in my opinion. Freecad might be the closest thing but I suspect it needs more investment. However what you’re talking about sounds important as well.
- criddell 5y ago> I don't think the lack of good open source CAD is due to a lack of a decent codebase I think the problem is exactly that. A good constructive solid geometry (CSG) is a difficult thing to make and there are no open source alternatives to the ones powering the mainstream CAD packages.
- CamperBob2 5y agoClosest thing would be a level editor, which is very much a CSG-based CAD program with roots going back to the Quake 1 generation. It's just not geared towards typical production applications where real objects are being machined.
- criddell 5y agoDid it have boolean operations like add, subtract, and cut?
- CamperBob2 5y agoYes, along with the usual extrusion and (I believe) lofting along a desired path.
- porphyra 5y agoFor NURBS modelling there is OpenNURBS [1], made by the guys who made Rhinoceros 3D, an excellent NURBS 3D modelling program. However, although Rhino is available on Windows and macOS, it is not available on Linux and the authors seem pretty against making a Linux version. OpenNURBS is only available on Windows. [1] https://www.rhino3d.com/opennurbs/ https://www.rhino3d.com/opennurbs/
- animal531 5y agoI personally use MoI3d (http://moi3d.com/ http://moi3d.com/). It is basically Rhino but cheaper (albeit with less tools and features). But as an Indie dev it gets the job done for me.
- deleted 5y ago[deleted]
- lqr 5y agoGraphics-wise, the assumptions are quite different. Game scenes are a large collection of low-detail objects that are constantly moving and not all visible at once. CAD scenes are a small collection of high-detail objects that don't move except in response to input events. If the CAD project is big and serious, I would be afraid of eventually hitting some limitation of the game engine that is hard to work around due to such different assumptions.
- criddell 5y agoBoth game engines and CAD applications have some type of level of detail node in their scene graph so that zoomed in items are high fidelity and items further are simplified.
- pjmlp 5y agoYou would want something like OpenInventor instead. https://www.openinventor.com/ https://www.openinventor.com/
- criddell 5y agoIs that related to Autodesk's Inventor at all? I work on an application that uses the geometry kernel from PTC (GRANITE) for modeling and OpenSceneGraph for display. I'm a little worried about OpenSceneGraph because it's 100% OpenGL which feels like it's at the end of it's life and we need to find something built on Vulkan or Direct3D for the future.
- pjmlp 5y agoNope, it was born as IRIS Inventor, the actual crown jewel for SGI, when they let IRIS GL turn into OpenGL, they kept it for themselves. https://web.archive.org/web/20041120092542/http://oss.sgi.com/projects/inventor/ https://web.archive.org/web/20041120092542/http://oss.sgi.co...
- EamonnMR 5y agoGodot is sort of its own thing, not a strict "object hierarchy everything" so much as "favor composition; everything is a node in the scene tree."
- pphysch 5y agoGodot's head developer admits that if you want to do anything performance-intensive (e.g. thousands of interacting entities, AAA stuff) with Godot, you will likely end up hacking the low-level engine code or even using a separate ECS/DoD implementation. At that point, why not use a proper ECS engine? https://godotengine.org/article/why-isnt-godot-ecs-based-game-engine https://godotengine.org/article/why-isnt-godot-ecs-based-gam... (see "Optimization" section and below)
- flohofwoe 5y agoHardly any game needs "thousands of interacting entities" though (outside of special subsystems like particle systems). Arguably, (DOTS-style) ECS makes it harder to incrementally build a game by adding features, because you need to put more effort into designing the data layout upfront. And if there's just a few dozen instances of each thing that's definitely overkill, moving to ECS won't make a noticeable performance difference in that case.
- pphysch 5y ago> Hardly any game needs "thousands of interacting entities" though (outside of special subsystems like particle systems). This is an example of survivorship bias. How many ambitious game concepts have collapsed under performance/architecture issues that lead to productivity-killing refactoring? Impossible to say, but no doubt many. > Arguably, ECS makes it harder to incrementally build a game by adding features, because you need to put more effort into designing the data layout upfront. OOP bakes these decisions into the inheritance hierarchy, which ends up being more thorny than adding a component, or migrating an existing component's schema. ECS will make it straightforward to determine which Systems will be affected when a particular Component's schema is altered.
- worldsayshi 5y agoAfter working too long with stateless API:s on the backend and one state container to rule them all react-redux kind of architectures on the front end the OOP code style kind of makes my skin crawl. When I try to learn Unity I find it so hard not to turn my code into spaghetti. Hearing about ECS gives me hope.
- flohofwoe 5y agoUnity has always been more "ECS" than "OOP" though (traditional Unity has Entities and Components for composition instead of inheritance, modern Unity moves Component data and logic into Systems for performance).
- worldsayshi 5y agoHmm, I thought the ECS parts of Unity is part of the Unity DOTS system, which still seems in an early stage, at least in regards to ecosystem?
- flohofwoe 5y agoYeah, kinda. But the term ECS definitely already existed before the "data-oriented revolution" for engines that used components attached to game entities to achieve "feature composition". Not sure what the "S" stood for at the time, probably not "Entities/Components/Systems" (because "Systems" is the new thing that actually matters), maybe simply "Entity-Component System" as in "this is an Entity-Component system".
- Jare 5y agoI like the suggestion elsewhere in this discussion, to call them "Entity Component architecture" and "Entity Component Systems architecture". It's just replacing one word with a similar one but makes a world of difference in clarity.
- ratww 5y agoThe only major difference (in regards to code organisation) between Unity's old classes and ECS is that in Unity the logic ("Systems") is coupled with the data ("Components") in the same class. Entities in Unity are already not concrete implementations (probably just a "handler" ID) as far as the user is concerned. This is pretty much like ECS.
- chmod775 5y agoOOP with an inheritance tree is nice until you have a houseboat.
- garmaine 5y agoThat’s object inheritance that trips you up. Interface inheritance (a la Rust) handles this fine. Edit: that’s a great witticism though.
- fenomas 5y agoDynamically though? The attraction of ECS is that your house can start and stop being a boat as needed.
- garmaine 5y agoI don't see a theoretical reason why not, although I don't know of any language that does this. Isn't really my area though.
- bmn__ 5y agoEven languages with heavy-weight MOPs do not offer a programming interface to unapply/uncompose, the reverse of: https://metacpan.org/dist/Moose/source/lib/Moose/Meta/Role/Application/ToInstance.pm#L22 https://metacpan.org/dist/Moose/source/lib/Moose/Meta/Role/A... https://github.com/rakudo/rakudo/blob/master/src/Perl6/Metamodel/ClassHOW.nqp#L96 https://github.com/rakudo/rakudo/blob/master/src/Perl6/Metam... Reading the source codes, I think this is due to no one yet having requested the ability to do so. To me it feels like implementing this is possible, but tedious. The simple work-around for the problem would be to rebless the instance. Example: class Structure {} role Floatable {} role Inhabitable {} class Houseboat extends Structure with Floatable with Inhabitable {} $hb = Houseboat new $s = Structure new $s apply Floatable, Inhabitable # houseboat at run-time # stop swimming ### NYI ### $s unapply Floatable # make a new house that cannot swim $s1 = Structure new $s1 apply Inhabitable $s1 = $s rebless_into $s1
- mkishi 5y agoThat link says O3DE uses EC, not ECS. These are terribly named and often cause confusion, but they are different. In "Entity Component" systems (think Unity), entities own components that give them data and behavior. In "Entity Component System" systems (think Unity DOTS), components are just data, and behavior is driven by systems that live outside entities. They are similar in some aspects and both are radically different than a deep OOP hierarchy, but ECS is quite more hardcore on decoupling. It's been a few years and it's still not unanimous whether adopting Unity DOTS over regular Unity is easy or even worth it, for instance. Still, Godot isn't very OOP either, working mostly with composition of behaviors.
- Andrex 5y ago> In "Entity Component" systems... > In "Entity Component System" systems... Something something Douglas Adams.
- djur 5y agoIt's less confusing when written "Entity−Component−System architecture". That is, it's a list of the three concepts -- Entities, Components, and Systems -- that predominate in the architecture.
- mcphage 5y agoHow old and how widespread is the “EC” vs “ECS” naming distinction? Both of those used to be called ECS (at least as far as I understand).
- badsectoracula 5y agoEC predates ECS and goes back to at least 2008 or so.
- bmn__ 5y agohttps://news.ycombinator.com/item?id=26292671 https://news.ycombinator.com/item?id=26292671 ECS was popularised with http://enwp.org/Dark_Engine http://enwp.org/Dark_Engine in 1998. The architectural style probably existed already earlier, but I have no evidence I can point to.
- seba_dos1 5y agoFWIW there is also a ECS implementation for Godot available: https://github.com/GodotECS/godex https://github.com/GodotECS/godex