babylon.gridMaterial.min.js 6.4 KB

1
  1. var BABYLON;!(function(i){var n=(function(i){function n(){var n=i.call(this)||this;return n.TRANSPARENT=!1,n.FOG=!1,n._keys=Object.keys(n),n}return __extends(n,i),n})(i.MaterialDefines),e=(function(e){function t(t,o){var r=e.call(this,t,o)||this;return r.mainColor=i.Color3.White(),r.lineColor=i.Color3.Black(),r.gridRatio=1,r.majorUnitFrequency=10,r.minorUnitVisibility=.33,r.opacity=1,r._gridControl=new i.Vector4(r.gridRatio,r.majorUnitFrequency,r.minorUnitVisibility,r.opacity),r._defines=new n,r._cachedDefines=new n,r}return __extends(t,e),t.prototype.needAlphaBlending=function(){return this.opacity<1},t.prototype._checkCache=function(i,n,e){return!n||!(!n._materialDefines||!n._materialDefines.isEqual(this._defines))},t.prototype.isReady=function(n,e){if(this.checkReadyOnlyOnce&&this._wasPreviouslyReady)return!0;var t=this.getScene();if(!this.checkReadyOnEveryCall&&this._renderId===t.getRenderId()&&this._checkCache(t,n,e))return!0;t.getEngine();if(this._defines.reset(),this.opacity<1&&(this._defines.TRANSPARENT=!0),t.fogEnabled&&n&&n.applyFog&&t.fogMode!==i.Scene.FOGMODE_NONE&&this.fogEnabled&&(this._defines.FOG=!0),!this._effect||!this._defines.isEqual(this._cachedDefines)){this._defines.cloneTo(this._cachedDefines),t.resetCachedMaterial();var o=[i.VertexBuffer.PositionKind,i.VertexBuffer.NormalKind],r=t.getEngine().getCaps().standardDerivatives?"grid":"legacygrid",a=this._defines.toString();this._effect=t.getEngine().createEffect(r,o,["worldViewProjection","mainColor","lineColor","gridControl","vFogInfos","vFogColor","world","view"],[],a,null,this.onCompiled,this.onError)}return!!this._effect.isReady()&&(this._renderId=t.getRenderId(),this._wasPreviouslyReady=!0,!0)},t.prototype.bindOnlyWorldMatrix=function(i){var n=this.getScene();this._effect.setMatrix("worldViewProjection",i.multiply(n.getTransformMatrix())),this._effect.setMatrix("world",i),this._effect.setMatrix("view",n.getViewMatrix())},t.prototype.bind=function(n,t){var o=this.getScene();this.bindOnlyWorldMatrix(n),o.getCachedMaterial()!==this&&(this._effect.setColor3("mainColor",this.mainColor),this._effect.setColor3("lineColor",this.lineColor),this._gridControl.x=this.gridRatio,this._gridControl.y=Math.round(this.majorUnitFrequency),this._gridControl.z=this.minorUnitVisibility,this._gridControl.w=this.opacity,this._effect.setVector4("gridControl",this._gridControl)),o.fogEnabled&&t.applyFog&&o.fogMode!==i.Scene.FOGMODE_NONE&&this._effect.setMatrix("view",o.getViewMatrix()),i.MaterialHelper.BindFogParameters(o,t,this._effect),e.prototype.bind.call(this,n,t)},t.prototype.dispose=function(i){e.prototype.dispose.call(this,i)},t.prototype.clone=function(n){var e=this;return i.SerializationHelper.Clone((function(){return new t(n,e.getScene())}),this)},t.prototype.serialize=function(){var n=i.SerializationHelper.Serialize(this);return n.customType="BABYLON.GridMaterial",n},t.Parse=function(n,e,o){return i.SerializationHelper.Parse((function(){return new t(n.name,e)}),n,e,o)},t})(i.Material);__decorate([i.serializeAsColor3()],e.prototype,"mainColor",void 0),__decorate([i.serializeAsColor3()],e.prototype,"lineColor",void 0),__decorate([i.serialize()],e.prototype,"gridRatio",void 0),__decorate([i.serialize()],e.prototype,"majorUnitFrequency",void 0),__decorate([i.serialize()],e.prototype,"minorUnitVisibility",void 0),__decorate([i.serialize()],e.prototype,"opacity",void 0),i.GridMaterial=e})(BABYLON||(BABYLON={})),BABYLON.Effect.ShadersStore.gridVertexShader="precision highp float;\n\nattribute vec3 position;\nattribute vec3 normal;\n\nuniform mat4 worldViewProjection;\nuniform mat4 world;\nuniform mat4 view;\n\nvarying vec3 vPosition;\nvarying vec3 vNormal;\n#include<fogVertexDeclaration>\nvoid main(void) {\n#ifdef FOG\nvec4 worldPos=world*vec4(position,1.0);\n#endif\n#include<fogVertex>\ngl_Position=worldViewProjection*vec4(position,1.0);\nvPosition=position;\nvNormal=normal;\n}",BABYLON.Effect.ShadersStore.gridPixelShader="#extension GL_OES_standard_derivatives : enable\n#define SQRT2 1.41421356\n#define PI 3.14159\nprecision highp float;\nuniform vec3 mainColor;\nuniform vec3 lineColor;\nuniform vec4 gridControl;\n\nvarying vec3 vPosition;\nvarying vec3 vNormal;\n#include<fogFragmentDeclaration>\nfloat getVisibility(float position) {\n\nfloat majorGridFrequency=gridControl.y;\nif (floor(position+0.5) == floor(position/majorGridFrequency+0.5)*majorGridFrequency)\n{\nreturn 1.0;\n} \nreturn gridControl.z;\n}\nfloat getAnisotropicAttenuation(float differentialLength) {\nconst float maxNumberOfLines=10.0;\nreturn clamp(1.0/(differentialLength+1.0)-1.0/maxNumberOfLines,0.0,1.0);\n}\nfloat isPointOnLine(float position,float differentialLength) {\nfloat fractionPartOfPosition=position-floor(position+0.5); \nfractionPartOfPosition/=differentialLength; \nfractionPartOfPosition=clamp(fractionPartOfPosition,-1.,1.);\nfloat result=0.5+0.5*cos(fractionPartOfPosition*PI); \nreturn result; \n}\nfloat contributionOnAxis(float position) {\nfloat differentialLength=length(vec2(dFdx(position),dFdy(position)));\ndifferentialLength*=SQRT2; \n\nfloat result=isPointOnLine(position,differentialLength);\n\nfloat visibility=getVisibility(position);\nresult*=visibility;\n\nfloat anisotropicAttenuation=getAnisotropicAttenuation(differentialLength);\nresult*=anisotropicAttenuation;\nreturn result;\n}\nfloat normalImpactOnAxis(float x) {\nfloat normalImpact=clamp(1.0-2.8*abs(x*x*x),0.0,1.0);\nreturn normalImpact;\n}\nvoid main(void) {\n\nfloat gridRatio=gridControl.x;\nvec3 gridPos=vPosition/gridRatio;\n\nfloat x=contributionOnAxis(gridPos.x);\nfloat y=contributionOnAxis(gridPos.y);\nfloat z=contributionOnAxis(gridPos.z); \n\nvec3 normal=normalize(vNormal);\nx*=normalImpactOnAxis(normal.x);\ny*=normalImpactOnAxis(normal.y);\nz*=normalImpactOnAxis(normal.z);\n\nfloat grid=clamp(x+y+z,0.,1.);\n\nvec3 color=mix(mainColor,lineColor,grid);\n#ifdef FOG\n#include<fogFragment>\n#endif\n#ifdef TRANSPARENT\nfloat opacity=clamp(grid,0.08,gridControl.w);\ngl_FragColor=vec4(color.rgb,opacity);\n#else\n\ngl_FragColor=vec4(color.rgb,1.0);\n#endif\n}",BABYLON.Effect.ShadersStore.legacygridVertexShader="precision highp float;\n\nattribute vec3 position;\n\nuniform mat4 worldViewProjection;\nvoid main(void) {\ngl_Position=worldViewProjection*vec4(position,1.0);\n}",BABYLON.Effect.ShadersStore.legacygridPixelShader="uniform vec3 mainColor;\nuniform vec4 gridControl;\nvoid main(void) {\ngl_FragColor=vec4(1,1,1,0.1);\n#ifdef TRANSPARENT\n\ngl_FragColor=vec4(mainColor.rgb,0.08);\n#else\n\ngl_FragColor=vec4(mainColor.rgb,1.0);\n#endif\n}";