constructor( params = {} ) {

			this.meshes = [];
			this.camera = null;
			this.cameraTarget = new THREE.Object3D();
			this.cameraTarget.name = 'target';
			this.audio = null;
			this.audioManager = null;
			this.objects = new WeakMap();
			this.configuration = {
				sync: params.sync !== undefined ? params.sync : true,
				afterglow: params.afterglow !== undefined ? params.afterglow : 0.0,
				resetPhysicsOnLoop: params.resetPhysicsOnLoop !== undefined ? params.resetPhysicsOnLoop : true,
				pmxAnimation: params.pmxAnimation !== undefined ? params.pmxAnimation : false
			};
			this.enabled = {
				animation: true,
				ik: true,
				grant: true,
				physics: true,
				cameraAnimation: true
			};

			this.onBeforePhysics = function ( ) {}; // experimental


			this.sharedPhysics = false;
			this.masterPhysics = null;

		}
@param {Object} params - (optional)
@param {boolean} params.sync - Whether animation durations of added objects are synched. Default is true.
@param {Number} params.afterglow - Default is 0.0.
@param {boolean} params.resetPhysicsOnLoop - Default is true.