Kristian Sons, Felix Klein, Jan Sutter, Philipp Slusallek
* Sharable and portable between different platforms * Assignable to different 3D assets
* All material related logic in a single place * Independent from the application * Material description only * Avoid mixing with other concerns (e.g. animation)
* No explicit types and computation rates * Should work with multiple types * More like a template
* Need to adapt the control flow * Specialized shader languages (GLSL, HLSL, OSL): * Can not query the execution environment * Dynamic branching is not desired
* Need to specialize materials * Shader Permutations * Based on adaptation logic (Ubershader) * Must not be 'baked' into application!
* Control over assets and platform * Game engine specific shader is part of the asset * Specialization within platform * Use Shader Compositing or Preprocessor * No general or portable materials!
* Artist involved * Connects execution environment with shader tree manually * Full control over asset * Typically no way to adapt control flow
1. Make adaptation logic part of the material description 2. Do not declare types or computation frequencies

* Subset of JavaScript * No explicit type declarations and computation rates * Immutable objects: Vec3, Vec4 ... * Subset: Only homogeneous arrays with fixed size, no prototyping, ... * Integrates well into WebGL frameworks (xml3d.js)



* Based on radiance closures * Similar to OSL * Predefined closures: * Oren-Nayar, Phong, Cook Torrance, Ward ...
* Inject platform-specific light integrator * Specializes material based on specific execution environment * Compute types: Type Inference * Eliminate non-applicable branches * Constant Propagation * Dead Code Elimination
* Optimizations: * Extract uniform expressions * Extract (linear) coordinate space transformations
* Specialization * Same instruction count compared to preprocessor specialization * Despite the much higher level of abstraction * Uniform Extraction * Instruction Count: Up to 71% of instructions mapped to CPU * Desktop / Nvidia GeForce GTX 660 Ti: 1.3 - 1.6x * Laptop / Nvidia NVS 5400M: 1.3 - 1.9x * Tablet / Qualcomm Adreno 330: 1.3 - 2.4x





* Adaptive and more general material description language * All material-related logic in one place * Sharable and portable to different platforms * Compiler to specialize material and map computations * Higher abstraction level without sacrificing performance * System fully integrated into the web (OSS)
* Limitations * Full specialization: Combinatorial increase in number of shaders * Future Work * Extend to procedural displacement, lights, etc. * Multi-pass concepts (e.g. post-processing)
* Supported by * [Intel Visual Computing Institute](http://www.intel-vci.uni-saarland.de/) * [FI-CONTENT2](http://www.fi-ppp.eu/projects/fi-content-2/) (EU-FP7) * [FI-CORE](http://www.fi-ppp.eu/projects/fi-ware/) (EU-FP7) * [DREAMSPACE](http://www.dreamspaceproject.eu/) (EU-FP7) * [CIMPLEX](https://www.cimplex-project.eu/) (EU-H2020)