![]() Visual differences in this new incarnation of the monster as compared to its classic counterpart can be observed in the picture to the right. Fortunately, there are plenty of imps and maggots emerging from the Hell Hole which can be killed to recharge the Soul Cube. Four shots from the ancient artifact are required to kill the monster. The Soul Cube initially states that it is the only way to defeat the cyberdemon, and this proves true in combat. It is also completely impervious to all forms of conventional firepower. If approached at close range, it can stomp on the player with its massive legs, killing him instantly. The Doom 3 cyberdemon has several tactical differences from its classic counterpart. It stands roughly 20 feet tall, more than three times as tall as a human soldier. It is the most powerful monster in the game, like its original counterpart, attacking by firing a salvo of three consecutive rockets from its arm-mounted rocket launcher. In the meantime, I will continue to develop my job schedular approach, but this could be a feature design improvement.Īny insights or discussion would be greatly appreciated.The cyberdemon, also referred to as "Hell's mightiest warrior" by the Soul Cube, is found guarding the Primary Excavation Site's massive Hell Hole portal as the fourth and final boss of Doom 3. I'd rather not build a complete rendering pipeline around a flawed and outdated idea, only to discover that it is over engineered and slow. Not to mention, there are a whole lot of other variables as well. Unfortunately, neither my implementation of the technique I described, nor the method without it, is mature enough, to do any meaningful profiling. I also realize, profiling would be able to answer my question. Sorry for the long-winded and multi-faceted question. Did the engine originally rely on a fixed pipeline? This might explain this design choice.ĭo any modern game engines use something like this? I guess moving away from the CPU is the obvious future path of progression for graphics performance.Īs elegant as the Doom 3 BFG engine is, the architecture is probably a bit dated, and probably misses out on some new innovations. Newer, closer to the silicon graphics APIs like METAL, only further exaggerate my point. This complexity certainly must impact cache coherence and branch prediction. ![]() (At the moment this is an obstacle, because I am using SDL2, and I don't want SDL API related functionality, like input, running on the renderer backend thread.Īren't OpenGL calls suppose to occur asynchronously, given that we are somewhat successful at minimizing GPU / CPU synchronization? Is all the added architectural complexity worth it from a performance perspective? With more modern rendering techniques like vertex buffer streaming, it seems as if more and more work is done to transfer load from the CPU to the GPU, and to make drawing asynchronous.Īdding the command buffer queue also adds a relatively heavy layer of abstraction between the originating draw service call and the underlying driver call. The backend creates and manages the OpenGL context lifecycle. The backend consumes commands of the command buffer queue, and turns them into OpenGL calls. I implemented it using this awesome single-producer / single-consumer non-locking queue on GitHub at cameron314/readerwriterqueue. ![]() ![]() The front end talks to the back end via a non-blocking command buffer. Upon startup it launches the backend on a separate thread. The renderer front end lives on the same thread as the program entry point main(), where my Service Provider and Subsystem Singletons also live. I will probably make the repo public and link to it here at some point, in the future. I played around with trying to build something similar in my own game engine. In addition to the job pool, the renderer front end and back also each have their own thread. The engine is multithreaded in two ways, first there is a job pool whose task items are consumed by worker threads without relying on mutexes (this is awesome). įabian's site offers this architectural diagram of the renderer.įrom the source code, and from the review, you can see that the renderer consists of a frontend and a backend. In particular, I am interested in id Software's implementation of the renderer, which is explained here. (It makes for a great code read.)įabian Sanglard has an easy to follow code review of the engine. The whole code base is of exceptional code quality. The architecture is both clean and elegant. The whole codebase is on GitHub at id-Software/DOOM-3-BFG. I have been reading through the source code of id Software's Doom 3 BFG engine.
0 Comments
Leave a Reply. |