function IrradianceCache( o )
{
	this.enabled = true;
	this.size = vec3.fromValues(10,10,10); //grid size
	this.subdivisions = new Uint8Array([4,1,4]);
	this.layers = 0xFF; //layers that can contribute to the irradiance
	this.force_two_sided = false;

	this.near = 0.1;
	this.far = 1000;
	this.sampling_distance = 0.0;
	this.debug = 0.0;
	this.background_color = vec4.create();
	this.intensity_color = vec3.fromValues(1,1,1);

	this.mode = IrradianceCache.VERTEX_MODE;

	this._irradiance_cubemaps = [];
	this._irradiance_shs = [];
	this._irradiance_matrix = mat4.create();
	this._irradiance_subdivisions = vec3.clone( this.subdivisions );
	this._sh_texture = null;

	this._uniforms = {
		irradiance_texture: LS.Renderer.IRRADIANCE_TEXTURE_SLOT,
		u_irradiance_subdivisions: this._irradiance_subdivisions,
		u_irradiance_color: this.intensity_color,
		u_irradiance_imatrix: mat4.create(),
		u_irradiance_distance: 0
		//u_irradiance_debug: 0
	};
	this._samplers = [];

	//callback
	this.onRecomputingIrradiance = null; //called when recomputing
	this.onPreprocessCubemap = null; //called before generating SHs
	this.onComputedSphericalHarmonics = null; //called after generating SHs
	this.onRecomputingFinished = null; //called when recomputing

	this.cache_filename = "";
	this._cache_resource = null;

	if(o)
	{
		this.configure(o);
		if(o.uid && !this.cache_filename)
			this.cache_filename = "IR_cache_" + o.uid.substr(1) + ".bin";
	}
}
Precomputed Irradiance probes
@class IrradianceCache
@namespace LS.Components
@constructor
@param {Object} object to configure from