Hi all, I am calling all experts to form in a huge line and say loud and proud what makes a DX11 game!!!!
In the context of the Crysis 2, unpleasant for some, surprise of course, but also as a general question. There seems to be a bit of controversy/ignorance/discussion about what kind of WORK has to be done in order to transform a DX9/DX10 game into a DX11 game:
- new textures (this implies basically downloading many GIGABYTES of game), or
- new engine that 'reads' differently, or
- new shaders, new filters, new tessalation instructions, whatever
Of course it could be all of these or part, or something completely different.
Some of the above would involve nearly rewriting a game, or maybe it is just adding some lines of code, here and there, a very streamlined job?
Thanks!
The renderer needs to be rewritten. Depending on how you've abstracted this out in your engine this could mean a bunch of things... lots which could spell trouble. maybe your engine implements some sort of batching system where you cache states, etc, which doesn't necessarily lend itself nicely to how DX10+ does things. If you're just redoing the actual drawing part but not restructuring other shit that further helps manage it to account for other differences that may crop up then you might get sub par performance.
Textures and art assets has nothing to do with DX11 at all. You could have a 1:1 remake of Mario 1 and it can be a DX11 title. I don't know why people think this, but bigger DX version does not mean it needs to have 19023821 fancy / gimmicky effects that massacre framerate for no reason because they're implemented like shit. There's no reason it needs to look any different at all besides marketing. If it runs off the DX11 API, then it's a DX11 title. If it actually makes use of new features and uses them well, then it's a job well done on top of that.
Stuff like tessellation doesn't need to tank performance, rather it's more than capable of increasing it. Of course if you tessellate something to the point where you have so many fucking triangles that you're drawing zillions that are smaller than a pixel on the screen, you will damage performance. It might not even be a problem triangle count wise. Maybe your hardware is more than capable of nomming on millions upon millions (and modern hardware is) but the actual rasterization, pixel wise, is done on small batches of pixels. If your triangles are smaller than the number of pixels your hardware tries to do at once then you're simply damaging rasterization efficiency. As such, there's ways exposed for the developer to try and keep triangles within a certain screen space size to avoid this problem. On top of this, when you have Nvidia trying to flex nuts about how they can add half a million triangles to some dudes crotch bulge or something stupid, it's easy to see how marketing can have a negative impact on results. Smoothing something out is one thing, adding 50x more detail past the point where it's literally impossible to notice a difference is another.
All the drawing is done with shaders since DX10... fixed function stuff in DX9 was depreciated and was simply emulated (via shaders) if you used it. Shader assembly is also gone since DX10, it's up to the driver to compile it.
If Crysis 2 used DX11 and literally looked exactly the same save for performance (hopefully for the better, like BF3 uses the DX11 compute shader for lighting, which is apparently the absolute fastest way on modern hardware) would you be disapointed because it didn't bring about miracle visuals?
DirectX is a group of DLLs (Dynamic Link Libraries) which are full of APIs (Application Programming Interfaces) which allow a developer to access the underlying hardware easier than if they had to write all of their own routines.
Each revision of DirectX is a superset of the previous one (backward compatilbility).
Some of the API calls require a specific hardware implementation in order to function. This is what separates the DirectX?? graphics cards from one another.
DX10 was a clean break, all the legacy shit is gone. It's not a superset of DX9.