As GPU-powered special effects become more sophisticated, it becomes
harder to create and manage effect interaction using the fairly
primitive shading languages. This difficulty also introduces a
workflow problem: artists design effects but only programmers can
implement them, making it impossible for them to work
asynchronously.
To address these problems we present abstract shade trees and
heuristic algorithms that operate over them. The trees allow
designers to easily create effects by connecting primitives such as
cube mapping and modulation. These primitives publish semantically
rich types that encapsulate notions like vector basis and
normalization. The algorithms employ these published types to
automatically infer atomic and compound connectors between the
primitives, and generate code for the tree. We also describe a visual
editing environment for specifying the trees.
Our data structure and algorithms spare designers from having to
specify low-level programming details, enabling them to experiment
without depending on programmers. The algorithms ensure that the
generated code will be free of type-mismatches, a problem in previous
shade trees. The abstract shade tree can also naturally express
high-level features like shadows and reflections whose implementations
overlap; that cross-cutting has made them difficult to modularize in
more traditional ways.
In experiments, the generated shaders are as efficient as hand-written code.