babylon.gridMaterial.min.js 6.1 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.USERIGHTHANDEDSYSTEM=!1,n.rebuild(),n}return __extends(n,i),n})(i.MaterialDefines),o=(function(o){function t(n,t){var e=o.call(this,n,t)||this;return e.mainColor=i.Color3.White(),e.lineColor=i.Color3.Black(),e.gridRatio=1,e.majorUnitFrequency=10,e.minorUnitVisibility=.33,e.opacity=1,e._gridControl=new i.Vector4(e.gridRatio,e.majorUnitFrequency,e.minorUnitVisibility,e.opacity),e}return __extends(t,o),t.prototype.needAlphaBlending=function(){return this.opacity<1},t.prototype.isReadyForSubMesh=function(o,t,e){if(this.isFrozen&&this._wasPreviouslyReady&&t.effect)return!0;t._materialDefines||(t._materialDefines=new n);var r=t._materialDefines,a=this.getScene();if(!this.checkReadyOnEveryCall&&t.effect&&this._renderId===a.getRenderId())return!0;a.getEngine();if(this.opacity<1&&!r.TRANSPARENT&&(r.TRANSPARENT=!0,r.markAsUnprocessed()),i.MaterialHelper.PrepareDefinesForMisc(o,a,!1,!1,this.fogEnabled,r),r.isDirty){r.markAsProcessed(),a.resetCachedMaterial();var l=[i.VertexBuffer.PositionKind,i.VertexBuffer.NormalKind],s=a.getEngine().getCaps().standardDerivatives?"grid":"legacygrid",f=r.toString();t.setEffect(a.getEngine().createEffect(s,l,["worldViewProjection","mainColor","lineColor","gridControl","vFogInfos","vFogColor","world","view"],[],f,null,this.onCompiled,this.onError),r)}return!!t.effect.isReady()&&(this._renderId=a.getRenderId(),this._wasPreviouslyReady=!0,!0)},t.prototype.bindForSubMesh=function(n,o,t){var e=this.getScene();if(t._materialDefines){var r=t.effect;this._activeEffect=r,this.bindOnlyWorldMatrix(n),this._activeEffect.setMatrix("worldViewProjection",n.multiply(e.getTransformMatrix())),this._activeEffect.setMatrix("view",e.getViewMatrix()),this._mustRebind(e,r)&&(this._activeEffect.setColor3("mainColor",this.mainColor),this._activeEffect.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._activeEffect.setVector4("gridControl",this._gridControl)),i.MaterialHelper.BindFogParameters(e,o,this._activeEffect),this._afterBind(o,this._activeEffect)}},t.prototype.dispose=function(i){o.prototype.dispose.call(this,i)},t.prototype.clone=function(n){var o=this;return i.SerializationHelper.Clone((function(){return new t(n,o.getScene())}),this)},t.prototype.serialize=function(){var n=i.SerializationHelper.Serialize(this);return n.customType="BABYLON.GridMaterial",n},t.Parse=function(n,o,e){return i.SerializationHelper.Parse((function(){return new t(n.name,o)}),n,o,e)},t})(i.PushMaterial);__decorate([i.serializeAsColor3()],o.prototype,"mainColor",void 0),__decorate([i.serializeAsColor3()],o.prototype,"lineColor",void 0),__decorate([i.serialize()],o.prototype,"gridRatio",void 0),__decorate([i.serialize()],o.prototype,"majorUnitFrequency",void 0),__decorate([i.serialize()],o.prototype,"minorUnitVisibility",void 0),__decorate([i.serialize()],o.prototype,"opacity",void 0),i.GridMaterial=o})(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}";