constructor(parameters) {
			super();
			this.defines = {
				'STANDARD': '',
				'PHYSICAL': ''
			};
			this.type = 'MeshPhysicalMaterial';
			this.clearcoat = 0.0;
			this.clearcoatMap = null;
			this.clearcoatRoughness = 0.0;
			this.clearcoatRoughnessMap = null;
			this.clearcoatNormalScale = new Vector2(1, 1);
			this.clearcoatNormalMap = null;
			this.reflectivity = 0.5; // maps to F0 = 0.04

			Object.defineProperty(this, 'ior', {
				get: function () {
					return (1 + 0.4 * this.reflectivity) / (1 - 0.4 * this.reflectivity);
				},
				set: function (ior) {
					this.reflectivity = clamp(2.5 * (ior - 1) / (ior + 1), 0, 1);
				}
			});
			this.sheen = null; // null will disable sheen bsdf

			this.transmission = 0.0;
			this.transmissionMap = null;
			this.thickness = 0.01;
			this.thicknessMap = null;
			this.attenuationDistance = 0.0;
			this.attenuationColor = new Color(1, 1, 1);
			this.setValues(parameters);
		}
parameters = {
	clearcoat: <float>,
	clearcoatMap: new THREE.Texture( <Image> ),
	clearcoatRoughness: <float>,
	clearcoatRoughnessMap: new THREE.Texture( <Image> ),
	clearcoatNormalScale: <Vector2>,
	clearcoatNormalMap: new THREE.Texture( <Image> ),

	reflectivity: <float>,
	ior: <float>,

	sheen: <Color>,

	transmission: <float>,
	transmissionMap: new THREE.Texture( <Image> ),

	thickness: <float>,
	thicknessMap: new THREE.Texture( <Image> ),
	attenuationDistance: <float>,
	attenuationColor: <Color>
}