function SolidParticleSystem(name, scene, options) {
            // public members
            /**
            *  The SPS array of Solid Particle objects. Just access each particle as with any classic array.
            *  Example : var p = SPS.particles[i];
            */
            this.particles = new Array();
            /**
            * The SPS total number of particles. Read only. Use SPS.counter instead if you need to set your own value.
            */
            this.nbParticles = 0;
            /**
            * If the particles must ever face the camera (default false). Useful for planar particles.
            */
            this.billboard = false;
            /**
             * Recompute normals when adding a shape
             */
            this.recomputeNormals = true;
            /**
            * This a counter ofr your own usage. It's not set by any SPS functions.
            */
            this.counter = 0;
            /**
            * This empty object is intended to store some SPS specific or temporary values in order to lower the Garbage Collector activity.
            * Please read : http://doc.babylonjs.com/overviews/Solid_Particle_System#garbage-collector-concerns
            */
            this.vars = {};
            this._positions = new Array();
            this._indices = new Array();
            this._normals = new Array();
            this._colors = new Array();
            this._uvs = new Array();
            this._index = 0; // indices index
            this._updatable = true;
            this._pickable = false;
            this._isVisibilityBoxLocked = false;
            this._alwaysVisible = false;
            this._depthSort = false;
            this._shapeCounter = 0;
            this._copy = new BABYLON.SolidParticle(0, 0, 0, null, 0, 0, this);
            this._color = new BABYLON.Color4(0, 0, 0, 0);
            this._computeParticleColor = true;
            this._computeParticleTexture = true;
            this._computeParticleRotation = true;
            this._computeParticleVertex = false;
            this._computeBoundingBox = false;
            this._depthSortParticles = true;
            this._cam_axisZ = BABYLON.Vector3.Zero();
            this._cam_axisY = BABYLON.Vector3.Zero();
            this._cam_axisX = BABYLON.Vector3.Zero();
            this._axisZ = BABYLON.Axis.Z;
            this._camDir = BABYLON.Vector3.Zero();
            this._camInvertedPosition = BABYLON.Vector3.Zero();
            this._rotMatrix = new BABYLON.Matrix();
            this._invertMatrix = new BABYLON.Matrix();
            this._rotated = BABYLON.Vector3.Zero();
            this._quaternion = new BABYLON.Quaternion();
            this._vertex = BABYLON.Vector3.Zero();
            this._normal = BABYLON.Vector3.Zero();
            this._yaw = 0.0;
            this._pitch = 0.0;
            this._roll = 0.0;
            this._halfroll = 0.0;
            this._halfpitch = 0.0;
            this._halfyaw = 0.0;
            this._sinRoll = 0.0;
            this._cosRoll = 0.0;
            this._sinPitch = 0.0;
            this._cosPitch = 0.0;
            this._sinYaw = 0.0;
            this._cosYaw = 0.0;
            this._mustUnrotateFixedNormals = false;
            this._minimum = BABYLON.Tmp.Vector3[0];
            this._maximum = BABYLON.Tmp.Vector3[1];
            this._minBbox = BABYLON.Tmp.Vector3[4];
            this._maxBbox = BABYLON.Tmp.Vector3[5];
            this._particlesIntersect = false;
            this._depthSortFunction = function (p1, p2) {
                return (p2.sqDistance - p1.sqDistance);
            };
            this._needs32Bits = false;
            this._bSphereOnly = false;
            this._bSphereRadiusFactor = 1.0;
            this.name = name;
            this._scene = scene || BABYLON.Engine.LastCreatedScene;
            this._camera = scene.activeCamera;
            this._pickable = options ? options.isPickable : false;
            this._depthSort = options ? options.enableDepthSort : false;
            this._particlesIntersect = options ? options.particleIntersection : false;
            this._bSphereOnly = options ? options.boundingSphereOnly : false;
            this._bSphereRadiusFactor = (options && options.bSphereRadiusFactor) ? options.bSphereRadiusFactor : 1.0;
            if (options && options.updatable) {
                this._updatable = options.updatable;
            }
            else {
                this._updatable = true;
            }
            if (this._pickable) {
                this.pickedParticles = [];
            }
            if (this._depthSort) {
                this.depthSortedParticles = [];
            }
        }
Creates a SPS (Solid Particle System) object.
`name` (String) is the SPS name, this will be the underlying mesh name.
`scene` (Scene) is the scene in which the SPS is added.
`updatable` (optional boolean, default true) : if the SPS must be updatable or immutable.
`isPickable` (optional boolean, default false) : if the solid particles must be pickable.
`enableDepthSort` (optional boolean, default false) : if the solid particles must be sorted in the geometry according to their distance to the camera.
`particleIntersection` (optional boolean, default false) : if the solid particle intersections must be computed.
`boundingSphereOnly` (optional boolean, default false) : if the particle intersection must be computed only with the bounding sphere (no bounding box computation, so faster).
`bSphereRadiusFactor` (optional float, default 1.0) : a number to multiply the boundind sphere radius by in order to reduce it for instance.
 Example : bSphereRadiusFactor = 1.0 / Math.sqrt(3.0) => the bounding sphere exactly matches a spherical mesh.