BEER uses shader layer system to stack NPR shader primitives. Unlike material primitives in Blender Internal (Phong, Lambert etc), BEER shader primitives is broken into more fundamental pieces.
- Shadeless (shader that gives you the basic color of the object)
- Light dependent (shader that gives you the illuminated color, diffuse)
- View and light dependent (shader that gives you highlights, specular)
- View dependent also known as view space Normal controlled (shader that is controlled by normal, back lighting)
- Screen space (Halftone, hatching, glow/glare, color grading, SSAO etc)
- Custom (depth, view depth, keyed, height, etc)
Each shader primitive will have their own modifiers, the reason will be mentioned later.
Shader primitives minimize the amount of data needed. For example, with current BI nodes, to add 2 different specular reflections, one has to add 2 materials but not use their diffuse & normal parts of the materials. Those parts are the “unseen, unrendered & often not needed” data that BI has to carry. With BEER shader primitives the data always “only available when needed.” The result: BEER shader is lighter than BI for the same output.
Shader primitives introduce a slim shader building mechanism in which when stacked and blended, will mimic the way shaders algorithm are written in code. The stacking mechanism provides ways to modify the primitives without getting them overly complicated as nodes tend to behave.
A stacked shader primitives are more readable than a noodling nodes when revisiting them after a while.
Another reason that layer system with more fundamental shader parts is better than nodes…
A shader layer with 30 lines of code that can be versioned and commented is WAY better than 30 nodes
Shaders need to be compiled before executed.
Material - the outer shell of the shading system.
Layer system - a shader stacking system that blends shaders
Blend - algorithms to mix 2 or more shaders
Shader - (NPR shader primitives) the primitive that is stack-able to form more complex color behavior.
Shader modifier - also known as a shader primitive modifier, is the parameter to pre-condition a primitives before it is usable.