function Material(name, chunk, inputs, options) {
    options = options || {};

    this.name = name;
    this.chunk = chunk;
    this.inputs = inputs ? (Array.isArray(inputs) ? inputs : [inputs]): [];
    this.uniforms = options.uniforms || {};
    this.varyings = options.varyings;
    this.attributes = options.attributes;

    this.meshes = [];

    if (options.texture) {
        this.texture = options.texture.__isATexture__ ? options.texture : TextureRegistry.register(null, options.texture);
    }

    this._id = Material.id++;

    this.invalidations = [];
    this.__isAMaterial__ = true;
}
Material is a public class that composes a material-graph out of expressions


@class Material
@constructor

@param {Object} definiton of nascent expression with shader code, inputs and uniforms
@param {Array} list of Material expressions, images, or constant
@param {Object} map of uniform data of float, vec2, vec3, vec4