[In a game artist-specific Gamasutra feature, former Valve and current Bungie art veteran Steve Theodore examines the state of artist-friendly shader tools, in an article originally printed in sister publication Game Developer magazine.]
Have artist-friendly shader tools finally arrived?
Shaders can drive you crazy. Every new generation of hardware or slick new rendering technology tantalizes us with untold possibilities. Yet just when we fall in love with some new look, it's snatched away by engineers who tell us it's killing the frame rate or hogging memory.
Working as an artist in a shader-driven medium can be like supporting the Chicago Cubs. It's a slow-motion torture in which hope and excitement inevitably decay into disappointment and frustration.
We're entering a new round in this endless tango of technological enticement and frustration. The creative promise of shader tech has hovered just out of reach for artists for quite some time.
We know many tactics for managing a complex visual appearance. It's not as if we've never heard of texture maps or compositing or multiplying pixel colors together.
But actually putting together a working shader has always required unpleasantness like syntax-highlighting text editors and compilers. Many artists who are fully capable of imagining and even designing great shaders have been put off from actually building them by all these programmer-ish accoutrements.
It looks as though things are changing for the better. The latest crop of modern shader creation systems tries to lure artists with UI and workflows that seem to come straight from the familiar Maya HyperShade playbook.
The material editor that ships with the Unreal Engine toolset, the Max plugin ShaderFX from Lumonix, and the combination of NVidia's FX composer and Mental Mill all provide graphic interfaces for creating shaders using well understood, artist-approved node graphs instead of the horrors of typing code for yourself.
If you know your way around Maya HyperShade or DarkTree, for example, you can now find a shader authoring tool that looks pretty similar and will let you spit out fiendishly complex effects files that you would have never had the fortitude to type in manually. (Sigh.)
Unfortunately, despite this new convergence in tools, offline and online rendering remain very, very different. To achieve the millions of computations they must do every second, graphics chips evolved into the idiot savants of computing: amazingly powerful, but weird and off-putting.
It is absolutely true that the new generation of shader tools lets you create sophisticated effects with (relative) ease. What has not changed, though, is the awful truth that achieving reliable, sustained performance in the harsh world of online rendering still demands specialists.
Despite the cool new GUIs, the intricacies of graphics hardware and the esoteric, special-purpose shading languages that drive the hardware are still the province of engineers.
Turning shaders into just another form of "content," like a bitmap or a model, is an appealing idea. Unfortunately, that dream remains a long way off. Many teams have learned the hard way that giving artists the whole responsibility for shader creation is dangerous for at least three reasons.
First, even with the "friendly" face of a modern shader editor, many artists are still intimidated by shaders. Open-ended systems are very powerful in the hands of technically-inclined artists with a lot of patience and the will to learn. For many production line folks with deadlines to worry about, though, they seem like a waste of time.
If all you want really is a standard bumpy-shiny-Phong clone, creating it for yourself out of nuts and bolts isn't a plus—it's a drag. If you're going to reuse the same pieces over and over, wouldn't it be better if they were custom tailored and optimized by a professional graphics engineer instead of cobbled together by a harried artist?
Second, the artists who do embrace the tech and run with it are still going to run head-on into performance issues. It's torture to give an artist a tool that invites—even demands!—artsy experimentation and neat little extra touches, only to swoop in at the end of the project and rip them all out because some combination of graphics calls is causing the game to stutter like a 1978 AMC Pacer.
Even if all the shader artists are fairly good at performance programming (a big "if"), a library of hand-built shaders is still very difficult to rationalize when the project nears its ship date, so last-minute performance tweaks will be haphazard and risky.
Finally, and most damning, letting every artist build his or her own shaders can mess with your art direction. If, by some miracle, your artists manage to traverse the minefield of performance without blowing up the game, they'll reach the end of production with hundreds of materials created in very personal ways.
It's possible that my shiny metal and your shiny metal will look similar in the shader editor and yet behave altogether differently when dynamic lights, moving characters, or HDR lighting kick in.
Artist-built shaders offer no common way to herd these divergent shaders into the same dynamic range. If artist A's shaders are always much hotter than artist B's under the same lighting, how can you make them look like they come from the same physical universe without editing dozens or hundreds of complex node graphs?