babylon.fireMaterial.min.js 11 KB

1
  1. var __decorate=this&&this.__decorate||function(e,i,t,n){if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)return Reflect.decorate(e,i,t,n);switch(arguments.length){case 2:return e.reduceRight(function(e,i){return i&&i(e)||e},i);case 3:return e.reduceRight(function(e,n){return void(n&&n(i,t))},void 0);case 4:return e.reduceRight(function(e,n){return n&&n(i,t,e)||e},n)}},BABYLON;!function(e){var i=function(e){function i(){e.call(this),this.DIFFUSE=!1,this.CLIPPLANE=!1,this.ALPHATEST=!1,this.POINTSIZE=!1,this.FOG=!1,this.UV1=!1,this.VERTEXCOLOR=!1,this.VERTEXALPHA=!1,this.BonesPerMesh=0,this.NUM_BONE_INFLUENCERS=0,this.INSTANCES=!1,this._keys=Object.keys(this)}return __extends(i,e),i}(e.MaterialDefines),t=function(t){function n(n,o){t.call(this,n,o),this.diffuseColor=new e.Color3(1,1,1),this.speed=1,this._scaledDiffuse=new e.Color3,this._defines=new i,this._cachedDefines=new i,this._lastTime=0,this._cachedDefines.BonesPerMesh=-1}return __extends(n,t),n.prototype.needAlphaBlending=function(){return this.alpha<1},n.prototype.needAlphaTesting=function(){return!1},n.prototype.getAlphaTestTexture=function(){return null},n.prototype._checkCache=function(e,i,t){return i?this._defines.INSTANCES!==t?!1:i._materialDefines&&i._materialDefines.isEqual(this._defines)?!0:!1:!0},n.prototype.isReady=function(t,n){if(this.checkReadyOnlyOnce&&this._wasPreviouslyReady)return!0;var o=this.getScene();if(!this.checkReadyOnEveryCall&&this._renderId===o.getRenderId()&&this._checkCache(o,t,n))return!0;var r=(o.getEngine(),!1);if(this._defines.reset(),o.texturesEnabled&&this.diffuseTexture&&e.StandardMaterial.DiffuseTextureEnabled){if(!this.diffuseTexture.isReady())return!1;r=!0,this._defines.DIFFUSE=!0}if(o.clipPlane&&(this._defines.CLIPPLANE=!0),this._defines.ALPHATEST=!0,(this.pointsCloud||o.forcePointsCloud)&&(this._defines.POINTSIZE=!0),o.fogEnabled&&t&&t.applyFog&&o.fogMode!==e.Scene.FOGMODE_NONE&&this.fogEnabled&&(this._defines.FOG=!0),t&&(r&&t.isVerticesDataPresent(e.VertexBuffer.UVKind)&&(this._defines.UV1=!0),t.useVertexColors&&t.isVerticesDataPresent(e.VertexBuffer.ColorKind)&&(this._defines.VERTEXCOLOR=!0,t.hasVertexAlpha&&(this._defines.VERTEXALPHA=!0)),t.useBones&&t.computeBonesUsingShaders&&(this._defines.NUM_BONE_INFLUENCERS=t.numBoneInfluencers,this._defines.BonesPerMesh=t.skeleton.bones.length+1),n&&(this._defines.INSTANCES=!0)),!this._defines.isEqual(this._cachedDefines)){this._defines.cloneTo(this._cachedDefines),o.resetCachedMaterial();var s=new e.EffectFallbacks;this._defines.FOG&&s.addFallback(1,"FOG"),this._defines.NUM_BONE_INFLUENCERS>0&&s.addCPUSkinningFallback(0,t);var a=[e.VertexBuffer.PositionKind];this._defines.UV1&&a.push(e.VertexBuffer.UVKind),this._defines.VERTEXCOLOR&&a.push(e.VertexBuffer.ColorKind),e.MaterialHelper.PrepareAttributesForBones(a,t,this._defines,s),e.MaterialHelper.PrepareAttributesForInstances(a,this._defines);var f="fire",d=this._defines.toString();this._effect=o.getEngine().createEffect(f,a,["world","view","viewProjection","vEyePosition","vFogInfos","vFogColor","pointSize","vDiffuseInfos","mBones","vClipPlane","diffuseMatrix","time","speed"],["diffuseSampler","distortionSampler","opacitySampler"],d,s,this.onCompiled,this.onError)}return this._effect.isReady()?(this._renderId=o.getRenderId(),this._wasPreviouslyReady=!0,t&&(t._materialDefines||(t._materialDefines=new i),this._defines.cloneTo(t._materialDefines)),!0):!1},n.prototype.bindOnlyWorldMatrix=function(e){this._effect.setMatrix("world",e)},n.prototype.bind=function(i,n){var o=this.getScene();if(this.bindOnlyWorldMatrix(i),this._effect.setMatrix("viewProjection",o.getTransformMatrix()),e.MaterialHelper.BindBonesParameters(n,this._effect),o.getCachedMaterial()!==this){if(this.diffuseTexture&&e.StandardMaterial.DiffuseTextureEnabled&&(this._effect.setTexture("diffuseSampler",this.diffuseTexture),this._effect.setFloat2("vDiffuseInfos",this.diffuseTexture.coordinatesIndex,this.diffuseTexture.level),this._effect.setMatrix("diffuseMatrix",this.diffuseTexture.getTextureMatrix()),this._effect.setTexture("distortionSampler",this.distortionTexture),this._effect.setTexture("opacitySampler",this.opacityTexture)),o.clipPlane){var r=o.clipPlane;this._effect.setFloat4("vClipPlane",r.normal.x,r.normal.y,r.normal.z,r.d)}this.pointsCloud&&this._effect.setFloat("pointSize",this.pointSize),this._effect.setVector3("vEyePosition",o._mirroredCameraPosition?o._mirroredCameraPosition:o.activeCamera.position)}this._effect.setColor4("vDiffuseColor",this._scaledDiffuse,this.alpha*n.visibility),o.fogEnabled&&n.applyFog&&o.fogMode!==e.Scene.FOGMODE_NONE&&this._effect.setMatrix("view",o.getViewMatrix()),e.MaterialHelper.BindFogParameters(o,n,this._effect),this._lastTime+=o.getEngine().getDeltaTime(),this._effect.setFloat("time",this._lastTime),this._effect.setFloat("speed",this.speed),t.prototype.bind.call(this,i,n)},n.prototype.getAnimatables=function(){var e=[];return this.diffuseTexture&&this.diffuseTexture.animations&&this.diffuseTexture.animations.length>0&&e.push(this.diffuseTexture),this.distortionTexture&&this.distortionTexture.animations&&this.distortionTexture.animations.length>0&&e.push(this.distortionTexture),this.opacityTexture&&this.opacityTexture.animations&&this.opacityTexture.animations.length>0&&e.push(this.opacityTexture),e},n.prototype.dispose=function(e){this.diffuseTexture&&this.diffuseTexture.dispose(),this.distortionTexture&&this.distortionTexture.dispose(),t.prototype.dispose.call(this,e)},n.prototype.clone=function(i){var t=this;return e.SerializationHelper.Clone(function(){return new n(i,t.getScene())},this)},n.prototype.serialize=function(){var e=t.prototype.serialize.call(this);return e.customType="BABYLON.FireMaterial",e.diffuseColor=this.diffuseColor.asArray(),e.speed=this.speed,this.diffuseTexture&&(e.diffuseTexture=this.diffuseTexture.serialize()),this.distortionTexture&&(e.distortionTexture=this.distortionTexture.serialize()),this.opacityTexture&&(e.opacityTexture=this.opacityTexture.serialize()),e},n.Parse=function(i,t,o){var r=new n(i.name,t);return r.diffuseColor=e.Color3.FromArray(i.diffuseColor),r.speed=i.speed,r.alpha=i.alpha,r.id=i.id,e.Tags.AddTagsTo(r,i.tags),r.backFaceCulling=i.backFaceCulling,r.wireframe=i.wireframe,i.diffuseTexture&&(r.diffuseTexture=e.Texture.Parse(i.diffuseTexture,t,o)),i.distortionTexture&&(r.distortionTexture=e.Texture.Parse(i.distortionTexture,t,o)),i.opacityTexture&&(r.opacityTexture=e.Texture.Parse(i.opacityTexture,t,o)),i.checkReadyOnlyOnce&&(r.checkReadyOnlyOnce=i.checkReadyOnlyOnce),r},__decorate([e.serializeAsTexture()],n.prototype,"diffuseTexture"),__decorate([e.serializeAsTexture()],n.prototype,"distortionTexture"),__decorate([e.serializeAsTexture()],n.prototype,"opacityTexture"),__decorate([e.serialize("diffuseColor")],n.prototype,"diffuseColor"),__decorate([e.serialize()],n.prototype,"speed"),n}(e.Material);e.FireMaterial=t}(BABYLON||(BABYLON={})),BABYLON.Effect.ShadersStore.fireVertexShader="precision highp float;\n\n// Attributes\nattribute vec3 position;\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#ifdef VERTEXCOLOR\nattribute vec4 color;\n#endif\n\n#include<bonesDeclaration>\n\n// Uniforms\n#include<instancesDeclaration>\n\nuniform mat4 view;\nuniform mat4 viewProjection;\n\n#ifdef DIFFUSE\nvarying vec2 vDiffuseUV;\n#endif\n\n#ifdef POINTSIZE\nuniform float pointSize;\n#endif\n\n// Output\nvarying vec3 vPositionW;\n\n#ifdef VERTEXCOLOR\nvarying vec4 vColor;\n#endif\n\n#include<clipPlaneVertexDeclaration>\n\n#include<fogVertexDeclaration>\n#include<shadowsVertexDeclaration>\n\n// Fire\nuniform float time;\nuniform float speed;\n\nvarying vec2 vDistortionCoords1;\nvarying vec2 vDistortionCoords2;\nvarying vec2 vDistortionCoords3;\n\nvoid main(void) {\n\n#include<instancesVertex>\n#include<bonesVertex>\n\n gl_Position = viewProjection * finalWorld * vec4(position, 1.0);\n\n vec4 worldPos = finalWorld * vec4(position, 1.0);\n vPositionW = vec3(worldPos);\n\n // Texture coordinates\n#ifdef DIFFUSE\n vDiffuseUV = uv;\n vDiffuseUV.y -= 0.2;\n#endif\n\n // Clip plane\n#include<clipPlaneVertex>\n\n // Fog\n#include<fogVertex>\n\n // Vertex color\n#ifdef VERTEXCOLOR\n vColor = color;\n#endif\n\n // Point size\n#ifdef POINTSIZE\n gl_PointSize = pointSize;\n#endif\n\n // Fire\n vec3 layerSpeed = vec3(-0.2, -0.52, -0.1) * speed;\n \n vDistortionCoords1.x = uv.x;\n vDistortionCoords1.y = uv.y + layerSpeed.x * time / 1000.0;\n \n vDistortionCoords2.x = uv.x;\n vDistortionCoords2.y = uv.y + layerSpeed.y * time / 1000.0;\n \n vDistortionCoords3.x = uv.x;\n vDistortionCoords3.y = uv.y + layerSpeed.z * time / 1000.0;\n}\n",BABYLON.Effect.ShadersStore.firePixelShader="precision highp float;\n\n// Constants\nuniform vec3 vEyePosition;\n\n// Input\nvarying vec3 vPositionW;\n\n#ifdef VERTEXCOLOR\nvarying vec4 vColor;\n#endif\n\n// Samplers\n#ifdef DIFFUSE\nvarying vec2 vDiffuseUV;\nuniform sampler2D diffuseSampler;\nuniform vec2 vDiffuseInfos;\n#endif\n\n// Fire\nuniform sampler2D distortionSampler;\nuniform sampler2D opacitySampler;\n\nvarying vec2 vDistortionCoords1;\nvarying vec2 vDistortionCoords2;\nvarying vec2 vDistortionCoords3;\n\n#include<clipPlaneFragmentDeclaration>\n\n// Fog\n#include<fogFragmentDeclaration>\n\nvec4 bx2(vec4 x)\n{\n return vec4(2.0) * x - vec4(1.0);\n}\n\nvoid main(void) {\n // Clip plane\n#include<clipPlaneFragment>\n\n vec3 viewDirectionW = normalize(vEyePosition - vPositionW);\n\n // Base color\n vec4 baseColor = vec4(1., 1., 1., 1.);\n\n // Alpha\n float alpha = 1.0;\n\n#ifdef DIFFUSE\n // Fire\n const float distortionAmount0 = 0.092;\n const float distortionAmount1 = 0.092;\n const float distortionAmount2 = 0.092;\n \n vec2 heightAttenuation = vec2(0.3, 0.39);\n \n vec4 noise0 = texture2D(distortionSampler, vDistortionCoords1);\n vec4 noise1 = texture2D(distortionSampler, vDistortionCoords2);\n vec4 noise2 = texture2D(distortionSampler, vDistortionCoords3);\n \n vec4 noiseSum = bx2(noise0) * distortionAmount0 + bx2(noise1) * distortionAmount1 + bx2(noise2) * distortionAmount2;\n \n vec4 perturbedBaseCoords = vec4(vDiffuseUV, 0.0, 1.0) + noiseSum * (vDiffuseUV.y * heightAttenuation.x + heightAttenuation.y);\n \n vec4 opacityColor = texture2D(opacitySampler, perturbedBaseCoords.xy);\n \n#ifdef ALPHATEST\n if (opacityColor.r < 0.1)\n discard;\n#endif\n \n baseColor = texture2D(diffuseSampler, perturbedBaseCoords.xy) * 2.0;\n baseColor *= opacityColor;\n\n baseColor.rgb *= vDiffuseInfos.y;\n#endif\n\n#ifdef VERTEXCOLOR\n baseColor.rgb *= vColor.rgb;\n#endif\n\n // Lighting\n vec3 diffuseBase = vec3(1.0, 1.0, 1.0);\n\n#ifdef VERTEXALPHA\n alpha *= vColor.a;\n#endif\n\n // Composition\n vec4 color = vec4(baseColor.rgb, alpha);\n\n#include<fogFragment>\n\n gl_FragColor = color;\n}";