1 |
- var __decorate=this&&this.__decorate||function(i,t,n,e){if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)return Reflect.decorate(i,t,n,e);switch(arguments.length){case 2:return i.reduceRight(function(i,t){return t&&t(i)||i},t);case 3:return i.reduceRight(function(i,e){return void(e&&e(t,n))},void 0);case 4:return i.reduceRight(function(i,e){return e&&e(t,n,i)||i},e)}},BABYLON;!function(i){var t=function(i){function t(){i.call(this),this.TRANSPARENT=!1,this._keys=Object.keys(this)}return __extends(t,i),t}(i.MaterialDefines),n=function(n){function e(e,o){n.call(this,e,o),this.mainColor=i.Color3.White(),this.lineColor=i.Color3.Black(),this.gridRatio=1,this.majorUnitFrequency=10,this.minorUnitVisibility=.33,this.opacity=1,this._gridControl=new i.Vector4(this.gridRatio,this.majorUnitFrequency,this.minorUnitVisibility,this.opacity),this._defines=new t,this._cachedDefines=new t}return __extends(e,n),e.prototype.needAlphaBlending=function(){return this.opacity<1},e.prototype._checkCache=function(i,t,n){return t?t._materialDefines&&t._materialDefines.isEqual(this._defines)?!0:!1:!0},e.prototype.isReady=function(t,n){if(this.checkReadyOnlyOnce&&this._wasPreviouslyReady)return!0;var e=this.getScene();if(!this.checkReadyOnEveryCall&&this._renderId===e.getRenderId()&&this._checkCache(e,t,n))return!0;e.getEngine();if(this._defines.reset(),this.opacity<1&&(this._defines.TRANSPARENT=!0),!this._effect||!this._defines.isEqual(this._cachedDefines)){this._defines.cloneTo(this._cachedDefines),e.resetCachedMaterial();var o=[i.VertexBuffer.PositionKind,i.VertexBuffer.NormalKind],r=e.getEngine().getCaps().standardDerivatives?"grid":"legacygrid",a=this._defines.toString();this._effect=e.getEngine().createEffect(r,o,["worldViewProjection","mainColor","lineColor","gridControl"],[],a,null,this.onCompiled,this.onError)}return this._effect.isReady()?(this._renderId=e.getRenderId(),this._wasPreviouslyReady=!0,!0):!1},e.prototype.bindOnlyWorldMatrix=function(i){var t=this.getScene();this._effect.setMatrix("worldViewProjection",i.multiply(t.getTransformMatrix()))},e.prototype.bind=function(i,t){var e=this.getScene();this.bindOnlyWorldMatrix(i),e.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)),n.prototype.bind.call(this,i,t)},e.prototype.dispose=function(i){n.prototype.dispose.call(this,i)},e.prototype.clone=function(t){var n=this;return i.SerializationHelper.Clone(function(){return new e(t,n.getScene())},this)},e.prototype.serialize=function(){var t=i.SerializationHelper.Serialize(this);return t.customType="BABYLON.GridMaterial",t},e.Parse=function(t,n,o){return i.SerializationHelper.Parse(function(){return new e(t.name,n)},t,n,o)},__decorate([i.serializeAsColor3()],e.prototype,"mainColor"),__decorate([i.serializeAsColor3()],e.prototype,"lineColor"),__decorate([i.serialize()],e.prototype,"gridRatio"),__decorate([i.serialize()],e.prototype,"majorUnitFrequency"),__decorate([i.serialize()],e.prototype,"minorUnitVisibility"),__decorate([i.serialize()],e.prototype,"opacity"),e}(i.Material);i.GridMaterial=n}(BABYLON||(BABYLON={})),BABYLON.Effect.ShadersStore.gridVertexShader="precision highp float;\n\nattribute vec3 position;\nattribute vec3 normal;\n\nuniform mat4 worldViewProjection;\n\nvarying vec3 vPosition;\nvarying vec3 vNormal;\nvoid main(void) {\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;\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 gridColor=mix(mainColor,lineColor,grid);\n#ifdef TRANSPARENT\nfloat opacity=clamp(grid,0.08,gridControl.w);\ngl_FragColor=vec4(gridColor.rgb,opacity);\n#else\n\ngl_FragColor=vec4(gridColor.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}";
|