DXSAS

DXSAS

One of the interesting problems that hasn’t been solved very well in 3D Graphics is connecting shaders that run on the GPU to runtime CPU parameters to control them. To correctly use a graphics shader, you need to build geometry data in the format the shader expects, and have some way of adjusting the shader parameters that makes sense to an artist or game engine. This can be difficult if the shader compiler and runtime don’t provide enough information about the shader composition:was.

DXSAS was one such attempt to fix this. Microsoft wrote a specification and the D3DXEffects API, and at NVIDIA I worked on a series of tools to use it - FXComposer being one of them.

DirectX no longer has an effect system shipping as standard. There is, however, an open source project from Microsoft that shows you how to build an effect system on top of DX 11. I’m also hopeful that the new Vulkan API and runtime will make some of this easier to do, but I haven’t tried yet, and I haven’t investigated what is available in DX12 either. Most game engines these days role their own system, consisting of meta data embedded in the shader, or as side-car files. It’s a shame that everyone has to re-invent the wheel, but there are obviously technical considerations in finding a system that everyone can use. You can get some of the way with existing API’s, but it is not simple, or well documented. Engines like Unity and Unreal obviously remove this pain, so it is less of an issue than it used to be.

Back around DX9 timeframe, as an attempt to get more developers to use our effect files I built a simple C# implementation of DXSAS, which shipped with many useful object and full screen effects. You can download it from NVIDIA. It is a DX9 app and mostly still works, though there seem to be some shaders that don’t work well now - probably due to changes or fixes in the runtime. The application lets you pick shaders to apply to the object and post-process shaders to apply to the scene. The MEDIA directory has many great examples of how to build shaders - mostly written by our in-house technical artist. They are a showcase in how to build clean, well annotated shaders - and even though they are quite old, there is a lot to learn.

The above image shows the ‘rocket’ model that was created by an artist at SoftImage when they still had offices in London, and were camped next to the Microsoft Direct3D team at the time. The base effect is ‘gooch’, a two-tone lighting shader. The post process effect adds a fire corona to the scene.

You can see the specification for DXSAS here: DXSAS Specification