BabylonJS - effects

by kolar

HTML

<script src="https://dl.dropboxusercontent.com/u/12395133/babylon.1.11.js"></script>
<div id="rootDiv">
  <button id="btn">Run</button>
  <canvas id="canvas"></canvas>
</div>

CSS

html, body, div, canvas {
    width: 100%;
    height: 100%;
    padding: 0;
    margin: 0;
    overflow: hidden;
}
#btn {
    position:fixed;
    color:#555;
    font-size:11px;
    font-family:courier;
    width:100px;
    height:30px;
}

JavaScript

var canvas = document.getElementById("canvas");
var engine = new BABYLON.Engine(canvas, false);
var scene = new BABYLON.Scene(engine);
var camera = new BABYLON.ArcRotateCamera("Camera", 1, 0.8, 10, new BABYLON.Vector3(0, 0, 0), scene);
camera.setPosition(new BABYLON.Vector3(0, 5, -5));
var light0 = new BABYLON.HemisphericLight("Omni", new BABYLON.Vector3(0, 0, 10), scene);
scene.activeCamera.attachControl(canvas);
engine.runRenderLoop(function () {
    scene.render();
});
var imgSrc = "https://dl.dropboxusercontent.com/u/12395133/babylon/cloud_dot.png";


var randomNumber = function(min, max) {
    if (min == max) {
        return (min);
    }
    var random = Math.random();
    return ((random * (max - min)) + min);
};
function randomSpherePoint(x0,y0,z0,radius){
   var u = Math.random();
   var v = Math.random();
   var theta = 2 * Math.PI * u;
   var phi = Math.acos(2 * v - 1);
   var x = x0 + (radius * Math.sin(phi) * Math.cos(theta));
   var y = y0 + (radius * Math.sin(phi) * Math.sin(theta));
   var z = z0 + (radius * Math.cos(phi));
   return [x,y,z];
}
BABYLON.ParticleSystem.prototype._update = function(newParticles) {
    this._alive = this.particles.length > 0;
    for (var index = 0; index < this.particles.length; index++) {
        var particle = this.particles[index];
        particle.age += this._scaledUpdateSpeed;
        if (particle.age >= particle.lifeTime) {
            this._stockParticles.push(this.particles.splice(index, 1)[0]);
            index--;
            continue;
        } else {
            particle.colorStep.scaleToRef(this._scaledUpdateSpeed, this._scaledColorStep);
            particle.color.addInPlace(this._scaledColorStep);
            if (particle.color.a < 0)
                particle.color.a = 0;
            particle.direction.scaleToRef(this._scaledUpdateSpeed, this._scaledDirection);
            particle.position.addInPlace(this._scaledDirection);
            particle.angle += particle.angularSpeed *...