function makeTextureSetter(key) {
        return function (texture) {
            material.setUniform(key, texture);
            matConfig.textureLoaded && matConfig.textureLoaded(key, texture);
            return texture;
        };
    }
Create a material.
@param {Object|StandardMaterialMRConfig} materialConfig. materialConfig contains `shader`, `transparent` and uniforms that used in corresponding uniforms.
                                Uniforms can be `color`, `alpha` `diffuseMap` etc.
@param {string|clay.Shader} [shader='clay.standardMR'] Default to be standard shader with metalness and roughness workflow.
@param {boolean} [transparent=false] If material is transparent.
@param {boolean} [textureConvertToPOT=false] Force convert None Power of Two texture to Power of two so it can be tiled.
@param {boolean} [textureFlipY=true] If flip y of texture.
@param {Function} [textureLoaded] Callback when single texture loaded.
@param {Function} [texturesReady] Callback when all texture loaded.
@return {clay.Material}