babylon.digitalRainPostProcess.min.js 5.5 KB

1
  1. var __extends=this&&this.__extends||(function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}})(),__decorate=this&&this.__decorate||function(t,e,n,i){var o,r=arguments.length,a=r<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,n,i);else for(var l=t.length-1;l>=0;l--)(o=t[l])&&(a=(r<3?o(a):r>3?o(e,n,a):o(e,n))||a);return r>3&&a&&Object.defineProperty(e,n,a),a},BABYLON;!(function(t){var e=(function(e){function n(n,i,o,r){void 0===r&&(r=null);var a=e.call(this,r)||this;if(!(r=a.getScene()))return a;a.name=n,a._text,a._font,a.wrapU=t.Texture.CLAMP_ADDRESSMODE,a.wrapV=t.Texture.CLAMP_ADDRESSMODE;var l=a.getFontHeight(i),c=a.getFontWidth(i);a._charSize=Math.max(l.height,c);var f=a._charSize,g=Math.ceil(a._charSize*o.length);a._texture=r.getEngine().createDynamicTexture(f,g,!1,t.Texture.NEAREST_SAMPLINGMODE);var d=a.getSize(),s=document.createElement("canvas");s.width=d.width,s.height=d.height;var u=s.getContext("2d");u.textBaseline="top",u.font=i,u.fillStyle="white",u.imageSmoothingEnabled=!1;for(var h=0;h<o.length;h++)u.fillText(o[h],0,h*a._charSize-l.offset);return r.getEngine().updateDynamicTexture(a._texture,s,!1,!0),a}return __extends(n,e),Object.defineProperty(n.prototype,"charSize",{get:function(){return this._charSize},enumerable:!0,configurable:!0}),n.prototype.getFontWidth=function(t){var e=document.createElement("canvas"),n=e.getContext("2d");return n.fillStyle="white",n.font=t,n.measureText("W").width},n.prototype.getFontHeight=function(t){var e=document.createElement("canvas"),n=e.getContext("2d");n.fillRect(0,0,e.width,e.height),n.textBaseline="top",n.fillStyle="white",n.font=t,n.fillText("jH|",0,0);for(var i=n.getImageData(0,0,e.width,e.height).data,o=-1,r=-1,a=0;a<e.height;a++)for(var l=0;l<e.width;l++){var c=4*(a*e.width+l);{if(0!==i[c]){-1===o&&(o=a);break}if(l===e.width-1&&-1!==o){r=a,a=e.height;break}}}return{height:r-o+1,offset:o-1}},n.prototype.clone=function(){return new n(this.name,this._font,this._text,this.getScene())},n.Parse=function(e,i){return t.SerializationHelper.Parse((function(){return new n(e.name,e.font,e.text,i)}),e,i,null)},__decorate([t.serialize("font")],n.prototype,"_font",void 0),__decorate([t.serialize("text")],n.prototype,"_text",void 0),n})(t.BaseTexture);t.DigitalRainFontTexture=e;var n=(function(n){function i(i,o,r){var a=n.call(this,i,"digitalrain",["digitalRainFontInfos","digitalRainOptions","cosTimeZeroOne","matrixSpeed"],["digitalRainFont"],{width:o.getEngine().getRenderWidth(),height:o.getEngine().getRenderHeight()},o,t.Texture.TRILINEAR_SAMPLINGMODE,o.getEngine(),!0)||this;a.mixToTile=0,a.mixToNormal=0;var l="15px Monospace",c="古池や蛙飛び込む水の音ふるいけやかわずとびこむみずのおと初しぐれ猿も小蓑をほしげ也はつしぐれさるもこみのをほしげなり江戸の雨何石呑んだ時鳥えどのあめなんごくのんだほととぎす";r&&("string"==typeof r?l=r:(l=r.font||l,a.mixToTile=r.mixToTile||a.mixToTile,a.mixToNormal=r.mixToNormal||a.mixToNormal)),a._digitalRainFontTexture=new e(i,l,c,o.getScene());for(var f=a._digitalRainFontTexture.getSize(),g=0,d=0,s=new t.Matrix,u=0;u<16;u++)s.m[u]=Math.random();return a.onApply=function(t){t.setTexture("digitalRainFont",a._digitalRainFontTexture),t.setFloat4("digitalRainFontInfos",a._digitalRainFontTexture.charSize,c.length,f.width,f.height),t.setFloat4("digitalRainOptions",a.width,a.height,a.mixToNormal,a.mixToTile),t.setMatrix("matrixSpeed",s),g+=.003,d=g,t.setFloat("cosTimeZeroOne",d)},a}return __extends(i,n),i})(t.PostProcess);t.DigitalRainPostProcess=n})(BABYLON||(BABYLON={})),BABYLON.Effect.ShadersStore.digitalrainPixelShader="\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\nuniform sampler2D digitalRainFont;\n\nuniform vec4 digitalRainFontInfos;\nuniform vec4 digitalRainOptions;\nuniform mat4 matrixSpeed;\nuniform float cosTimeZeroOne;\n\nfloat getLuminance(vec3 color)\n{\nreturn clamp(dot(color,vec3(0.2126,0.7152,0.0722)),0.,1.);\n}\n\nvoid main(void) \n{\nfloat caracterSize=digitalRainFontInfos.x;\nfloat numChar=digitalRainFontInfos.y-1.0;\nfloat fontx=digitalRainFontInfos.z;\nfloat fonty=digitalRainFontInfos.w;\nfloat screenx=digitalRainOptions.x;\nfloat screeny=digitalRainOptions.y;\nfloat ratio=screeny/fonty;\nfloat columnx=float(floor((gl_FragCoord.x)/caracterSize));\nfloat tileX=float(floor((gl_FragCoord.x)/caracterSize))*caracterSize/screenx;\nfloat tileY=float(floor((gl_FragCoord.y)/caracterSize))*caracterSize/screeny;\nvec2 tileUV=vec2(tileX,tileY);\nvec4 tileColor=texture2D(textureSampler,tileUV);\nvec4 baseColor=texture2D(textureSampler,vUV);\nfloat tileLuminance=getLuminance(tileColor.rgb);\nint st=int(mod(columnx,4.0));\nfloat speed=cosTimeZeroOne*(sin(tileX*314.5)*0.5+0.6); \nfloat x=float(mod(gl_FragCoord.x,caracterSize))/fontx;\nfloat y=float(mod(speed+gl_FragCoord.y/screeny,1.0));\ny*=ratio;\nvec4 finalColor=texture2D(digitalRainFont,vec2(x,1.0-y));\nvec3 high=finalColor.rgb*(vec3(1.2,1.2,1.2)*pow(1.0-y,30.0));\nfinalColor.rgb*=vec3(pow(tileLuminance,5.0),pow(tileLuminance,1.5),pow(tileLuminance,3.0));\nfinalColor.rgb+=high;\nfinalColor.rgb=clamp(finalColor.rgb,0.,1.);\nfinalColor.a=1.0;\nfinalColor=mix(finalColor,tileColor,digitalRainOptions.w);\nfinalColor=mix(finalColor,baseColor,digitalRainOptions.z);\ngl_FragColor=finalColor;\n}";