3 ms·
I am not sure what you laid out is unfeasible, but perhaps the way they approached it was unfeasible and left them with no time to iterate or pivot.
by ehnto 5y ago
I am not sure what you laid out is unfeasible, but perhaps the way they approached it was unfeasible and left them with no time to iterate or pivot.
- s3tz 5y agoCDPR doesn't iterate and test their code in the optimal way. Most of the time they just go at it full on and patch things up at the end. This was (un)fortunately for them a project where the complexity rose so high that their approach couldn't handle it (also covid didn't help), and they were left with intertwined systems that were causing severe performance bottlenecks everywhere (think polynomial or even exponential). AI the way they planned it meant spawning hundreds of NPCs, all interacting with one another and the player, with badly designed systems for that interaction (because why spend upfront time on this if you can floor it), and almost no consideration on how that would impact the graphics and physics sides of the game. The whole development of this game is a case study of how to fail at keeping your externalities in check.
- moksly 5y agoThat doesn’t make a lot of sense though. In my country first year CS students build game of life versions with thousands of not millions of individual entities all going about their business and interacting with each other in some shitty math based programming language, using math they typically get from Google because it comes from biology. How can that be a thing of what you say is true?
- Gene_Parmesan 5y agoI would say first, that's the power of exponential complexity. Second, AI in games tends to consist of somewhat complicated goal-based & fuzzy logic behaviors. Third, game AI agents have interactions that take place within a 3d world that has to be modeled accurately. That means lots of expensive computations for things like line of sight, pathfinding, and so on. Finally, given that games are soft real-time and include remarkably expensive 3D rendering, the compute budget available for AI functions I would guess would be somewhere around the order of 2ms per frame (on a 16.7 ms frame, for 60fps). Though, two through four can usually be handled without issue, provided the devs know what they're doing & architect the engine correctly. (edit: And keep the scope in check, which ultimately is the responsibility of the leadership.) Unfortunately, this appears to be where #1 messed things up for them.
- KptMarchewa 5y agoYou don't really need to rerun your AI logic every frame though. It's more than enough if you do it every ~second, and can compute it on a separate thread.
- hutzlibu 5y agoThat depends on the type of game. The game I am working on would not work with a AI update every second.
- leetcrew 5y agoare we talking about the same game of life? in conway's, the update logic for a cell depends only on the immediate neighbors of that cell. so the time to update an entire frame is O(m*n), which is not hard for any matrix size that would reasonably fit on a laptop screen.
- bobthepanda 5y agoI am pretty sure that given the constraints (must operate reasonably well on last generation consoles and minimum specs with decent graphics) the problem space is pretty much impossible.
- pas 5y agowhy? SimCity-like games do this already to a degree. definitely not trivially easy, but impossible!? nah.
- bobthepanda 5y agoSimCity games do not simulate individuals. Even when they do, the indivduals are not very complex.
- ehnto 5y agoCities Skylines seems to, but just like for the vast majority of systemic gameplay, it's going to be an approximation of some kind and that's fine. CDPR needed to find that compromise between full simulation and believable approximation, but it seems like they ran out of time to get it working. Star Citizen's "Subsumption" and Quanta system is very similar in goal, and if it goes to plan will be one of the most engaging "AI population" simulations to date. It does't individually simulate every person in real time, but instead simulates a set of tasks and demands to be done, all the resource nodes, and an approximate population of simple entities carrying out those tasks, and when you spawn near said tasks, it spins up a "meta NPC" to represent in full 3D space, an agent of one of those simplified population entities. So for example, you fly to a mine site, the system knows there are currently 40 miners here mining aluminium to take to the factory, it knows at what point they are at with their tasks, and so it generates 40 NPCs to represent those miners. At that point you can interact with them and influence the simulation, say steal their ship and minerals. That updates the simulation but the simulation need not care about the specifics of the NPC. Just that he has no minerals and he is no longer capable of mining. You fly away with their ship, and all the other NPCs return back to simplified entities in the graph.