Wolfgang F. Engel
Shader X5 Advanced Rendering Techniques is the newest volume in this cutting-edge, indispensable series for game and graphics programmers. This all new volume is packed with articles covering state-of-the-art shader techniques and tools written by programming professionals from around the world. These authors have a wealth of knowledge and experience in the field, and each section is edited by an industry expert to ensure the highest quality and usefulness! The collection is broken into nine comprehensive sections. The geometry section covers improved N-Patches, how to generate dynamic wrinkles on animated meshes and much more. In the rendering section youï'll discover how to generate a tangent space ordinate system in the pixel shader, how to setup an area light for games, and a variety of other techniques. Practical and useful multi-frustum shadow maps like Cascaded Shadow Maps and Queried Virtual Shadow maps are covered in the shadow section. The environmental techniques section features the beautiful volume particle approaches: Rain and Godrays under water. The global illumination section covers techniques that should work in next-gen games. The new mobile section lays out the basics of shader driven next-gen mobile development and some advanced effects tailored to the devices. Many shader-relevant engine design decisions are covered in the 3D Engine Design section. It also deals with post-processing effects, how to design shader plugins, and how to bind shader data. The Beyond Pixels and Triangles section covers a printf for the pixel shader, random number generator on the GPU, and many more.
I want to get started doing some game development using Microsoft's XNA. Part of that is Shader development, but I have no idea how to get started. I know that nVidia's FX Composer is a great tool to develop shaders, but I did not find much useful and updated content on how to actually get started.
What tutorials would you recommend?
SAMS's XNA Unleashed by Chad Carter is a great starting point for XNA and assumes little knowledge of game development practices or hard maths before you start. It has two chapters on basic and advanced shaders.
As a sidenote, keep an eye out on Google for WPF Shader tutorials, it now uses the same technology to allow customer shaders in WPF applications and tutorials for that I believe are largely compatible with XNA.
Development of shaders in XNA (which obviously uses DirectX) requires knowledge of HLSL or shader assembly. I'd recommend getting familiar with the former before diving into the latter.
Before writing any shaders, it's a good idea to get solid understanding of the shader pipeline, and attempt to get your mind around what is possible when using programmable shaders. When you're familiar with the life of a pixel (from source data all the way through to the screen) then understanding examples of shaders becomes a lot easier.
Next make an attempt to write your own HLSL which does what the Fixed T&L pipeline used to do, just to get you hands dirty. This is the equivalent of a "hello world" program in vertex/pixel shader world. When you're able to do that and you understand what you've written you're ready to go onto the more fun stuff.
As a next step you might want to simulate basic sepcular lighting in one of your shaders from a single light source. You can then adapt this down the track to use multiple lights. Play with colours, and movement of lights. This will help get familiar with the use of shader constants as well.
When you have a couple of basic shaders together, you should attempt to make it so that your game/engine uses multiple/different shaders on different objects. Start adding some other bits like basic bump or normal maps.
When you get to this stage, the world is your oyster. You can start diving into some funky effectcs, and even consider using the GPU for more than it was originally intended.
Good luck. If you get some shaders going, I'd love to see them :)