Check out how we've achieved seamless integration of an entire factory from CAD to game engine, maintaining smooth frame rates despite numerous drawcalls.
Case: seamlessly integrate a multitude of detailed, interactive objects from CAD into a game engine for an immersive factory worker training simulator.
Process description:
Optimization done on PC Our main goal for optimization in the game is to create a detailed environment where a worker in a factory can simulate specific exercises for practice. We are focusing on transferring millions of objects from CAD solutions to the game engine accurately, including mechanisms, engines, machines, pipelines, buildings, and more. Interactivity with all these objects is crucial for creating an immersive and realistic experience for the player. During the development and optimization of the game, we have encountered technical constraints and challenges. One major issue we faced was the need for a powerful automated system to partition a large number of objects with various variations into sub-objects. This was necessary for their further processing in HISM/ISM in order to minimize rendering and memory calls. We use Houdini and self-descriptive tools for splitting objects into elements for editing. In the game engine, we utilize tools like stat/unrealinsight/Renderdoc for tracking different calls. In terms of game architecture and engine optimizations, our team automates the preparation of incoming geometry with self-written tools in Houdini for seamless assembly in the game engine. One specific technical case where optimization led to a significant improvement in the gaming experience for players was in a game where there were a large number of objects in the scene, leading to a high number of drawcalls and impacting the game's performance. By implementing the partitioning of objects into sub-objects and utilizing HISM/ISM for efficient assembly, we were able to reduce the number of drawcalls from tens of thousands to only a few thousand. This not only improved CPU and GPU performance but also saved a significant amount of memory, resulting in a smoother and more immersive gameplay experience for players. The performance metrics used to evaluate the success of this optimization included FPS stability, reduced loading times, and overall improvement in game performance. We conduct testing and debugging during the optimization process using internal tools in Houdini to track the success of the object instancing process and directly in the game engine. The result of our work is the ability to transfer the entire factory with all its elements from a CAD solution to a game engine without losing fps due to drawcalls. Other tools transfer objects from CAD to the game engine, but without optimization, resulting in unplayable outcomes that require extensive manual revisions. Our process allows for skipping many stages for further work.