| 1 |
- var __decorate=this&&this.__decorate||function(e,t,n,i){if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)return Reflect.decorate(e,t,n,i);switch(arguments.length){case 2:return e.reduceRight(function(e,t){return t&&t(e)||e},t);case 3:return e.reduceRight(function(e,i){return void(i&&i(t,n))},void 0);case 4:return e.reduceRight(function(e,i){return i&&i(t,n,e)||e},i)}},BABYLON;!function(e){var t=function(e){function t(){e.call(this),this.CLIPPLANE=!1,this.POINTSIZE=!1,this.FOG=!1,this.VERTEXCOLOR=!1,this.VERTEXALPHA=!1,this._keys=Object.keys(this)}return __extends(t,e),t}(e.MaterialDefines),n=function(n){function i(i,o){n.call(this,i,o),this.luminance=1,this.turbidity=10,this.rayleigh=2,this.mieCoefficient=.005,this.mieDirectionalG=.8,this.distance=500,this.inclination=.49,this.azimuth=.25,this._sunPosition=e.Vector3.Zero(),this._defines=new t,this._cachedDefines=new t}return __extends(i,n),i.prototype.needAlphaBlending=function(){return this.alpha<1},i.prototype.needAlphaTesting=function(){return!1},i.prototype.getAlphaTestTexture=function(){return null},i.prototype._checkCache=function(e,t,n){return t?t._materialDefines&&t._materialDefines.isEqual(this._defines)?!0:!1:!0},i.prototype.isReady=function(n,i){if(this.checkReadyOnlyOnce&&this._wasPreviouslyReady)return!0;var o=this.getScene();if(!this.checkReadyOnEveryCall&&this._renderId===o.getRenderId()&&this._checkCache(o,n,i))return!0;o.getEngine();if(this._defines.reset(),o.clipPlane&&(this._defines.CLIPPLANE=!0),(this.pointsCloud||o.forcePointsCloud)&&(this._defines.POINTSIZE=!0),o.fogEnabled&&n&&n.applyFog&&o.fogMode!==e.Scene.FOGMODE_NONE&&this.fogEnabled&&(this._defines.FOG=!0),n&&n.useVertexColors&&n.isVerticesDataPresent(e.VertexBuffer.ColorKind)&&(this._defines.VERTEXCOLOR=!0,n.hasVertexAlpha&&(this._defines.VERTEXALPHA=!0)),!this._defines.isEqual(this._cachedDefines)||!this._effect){this._defines.cloneTo(this._cachedDefines),o.resetCachedMaterial();var a=new e.EffectFallbacks;this._defines.FOG&&a.addFallback(1,"FOG");var r=[e.VertexBuffer.PositionKind];this._defines.VERTEXCOLOR&&r.push(e.VertexBuffer.ColorKind);var s="sky",c=this._defines.toString();this._effect=o.getEngine().createEffect(s,r,["world","viewProjection","view","vFogInfos","vFogColor","pointSize","vClipPlane","luminance","turbidity","rayleigh","mieCoefficient","mieDirectionalG","sunPosition"],[],c,a,this.onCompiled,this.onError)}return this._effect.isReady()?(this._renderId=o.getRenderId(),this._wasPreviouslyReady=!0,n&&(n._materialDefines||(n._materialDefines=new t),this._defines.cloneTo(n._materialDefines)),!0):!1},i.prototype.bindOnlyWorldMatrix=function(e){this._effect.setMatrix("world",e)},i.prototype.bind=function(t,i){var o=this.getScene();if(this.bindOnlyWorldMatrix(t),this._effect.setMatrix("viewProjection",o.getTransformMatrix()),o.getCachedMaterial()!==this){if(o.clipPlane){var a=o.clipPlane;this._effect.setFloat4("vClipPlane",a.normal.x,a.normal.y,a.normal.z,a.d)}this.pointsCloud&&this._effect.setFloat("pointSize",this.pointSize)}o.fogEnabled&&i.applyFog&&o.fogMode!==e.Scene.FOGMODE_NONE&&this._effect.setMatrix("view",o.getViewMatrix()),e.MaterialHelper.BindFogParameters(o,i,this._effect),this._effect.setFloat("luminance",this.luminance),this._effect.setFloat("turbidity",this.turbidity),this._effect.setFloat("rayleigh",this.rayleigh),this._effect.setFloat("mieCoefficient",this.mieCoefficient),this._effect.setFloat("mieDirectionalG",this.mieDirectionalG);var r=Math.PI*(this.inclination-.5),s=2*Math.PI*(this.azimuth-.5);this._sunPosition.x=this.distance*Math.cos(s),this._sunPosition.y=this.distance*Math.sin(s)*Math.sin(r),this._sunPosition.z=this.distance*Math.sin(s)*Math.cos(r),this._effect.setVector3("sunPosition",this._sunPosition),n.prototype.bind.call(this,t,i)},i.prototype.getAnimatables=function(){return[]},i.prototype.dispose=function(e){n.prototype.dispose.call(this,e)},i.prototype.clone=function(t){var n=this;return e.SerializationHelper.Clone(function(){return new i(t,n.getScene())},this)},i.prototype.serialize=function(){var t=e.SerializationHelper.Serialize(this);return t.customType="BABYLON.SkyMaterial",t},i.Parse=function(t,n,o){return e.SerializationHelper.Parse(function(){return new i(t.name,n)},t,n,o)},__decorate([e.serialize()],i.prototype,"luminance"),__decorate([e.serialize()],i.prototype,"turbidity"),__decorate([e.serialize()],i.prototype,"rayleigh"),__decorate([e.serialize()],i.prototype,"mieCoefficient"),__decorate([e.serialize()],i.prototype,"mieDirectionalG"),__decorate([e.serialize()],i.prototype,"distance"),__decorate([e.serialize()],i.prototype,"inclination"),__decorate([e.serialize()],i.prototype,"azimuth"),i}(e.Material);e.SkyMaterial=n}(BABYLON||(BABYLON={})),BABYLON.Effect.ShadersStore.skyVertexShader="precision highp float;\n\nattribute vec3 position;\n#ifdef VERTEXCOLOR\nattribute vec4 color;\n#endif\n\nuniform mat4 world;\nuniform mat4 view;\nuniform mat4 viewProjection;\n#ifdef POINTSIZE\nuniform float pointSize;\n#endif\n\nvarying vec3 vPositionW;\n#ifdef VERTEXCOLOR\nvarying vec4 vColor;\n#endif\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\nvoid main(void) {\n gl_Position = viewProjection * world * vec4(position, 1.0);\n vec4 worldPos = world * vec4(position, 1.0);\n vPositionW = vec3(worldPos);\n \n#include<clipPlaneVertex>\n \n#include<fogVertex>\n \n#ifdef VERTEXCOLOR\n vColor = color;\n#endif\n \n#ifdef POINTSIZE\n gl_PointSize = pointSize;\n#endif\n}\n",BABYLON.Effect.ShadersStore.skyPixelShader="precision highp float;\n\nvarying vec3 vPositionW;\n#ifdef VERTEXCOLOR\nvarying vec4 vColor;\n#endif\n#include<clipPlaneFragmentDeclaration>\n\nuniform float luminance;\nuniform float turbidity;\nuniform float rayleigh;\nuniform float mieCoefficient;\nuniform float mieDirectionalG;\nuniform vec3 sunPosition;\n\n#include<fogFragmentDeclaration>\n\nconst float e = 2.71828182845904523536028747135266249775724709369995957;\nconst float pi = 3.141592653589793238462643383279502884197169;\nconst float n = 1.0003;\nconst float N = 2.545E25;\nconst float pn = 0.035;\nconst vec3 lambda = vec3(680E-9, 550E-9, 450E-9);\nconst vec3 K = vec3(0.686, 0.678, 0.666);\nconst float v = 4.0;\nconst float rayleighZenithLength = 8.4E3;\nconst float mieZenithLength = 1.25E3;\nconst vec3 up = vec3(0.0, 1.0, 0.0);\nconst float EE = 1000.0;\nconst float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;\nconst float cutoffAngle = pi/1.95;\nconst float steepness = 1.5;\nvec3 totalRayleigh(vec3 lambda)\n{\n return (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn));\n}\nvec3 simplifiedRayleigh()\n{\n return 0.0005 / vec3(94, 40, 18);\n}\nfloat rayleighPhase(float cosTheta)\n{ \n return (3.0 / (16.0*pi)) * (1.0 + pow(cosTheta, 2.0));\n}\nvec3 totalMie(vec3 lambda, vec3 K, float T)\n{\n float c = (0.2 * T ) * 10E-18;\n return 0.434 * c * pi * pow((2.0 * pi) / lambda, vec3(v - 2.0)) * K;\n}\nfloat hgPhase(float cosTheta, float g)\n{\n return (1.0 / (4.0*pi)) * ((1.0 - pow(g, 2.0)) / pow(1.0 - 2.0*g*cosTheta + pow(g, 2.0), 1.5));\n}\nfloat sunIntensity(float zenithAngleCos)\n{\n return EE * max(0.0, 1.0 - exp(-((cutoffAngle - acos(zenithAngleCos))/steepness)));\n}\nfloat A = 0.15;\nfloat B = 0.50;\nfloat C = 0.10;\nfloat D = 0.20;\nfloat EEE = 0.02;\nfloat F = 0.30;\nfloat W = 1000.0;\nvec3 Uncharted2Tonemap(vec3 x)\n{\n return ((x*(A*x+C*B)+D*EEE)/(x*(A*x+B)+D*F))-EEE/F;\n}\nvoid main(void) {\n \n#include<clipPlaneFragment>\n \n const vec3 cameraPos = vec3(0.0, 0.0, 0.0);\n float sunfade = 1.0 - clamp(1.0 - exp((sunPosition.y / 450000.0)), 0.0, 1.0);\n float rayleighCoefficient = rayleigh - (1.0 * (1.0 - sunfade));\n vec3 sunDirection = normalize(sunPosition);\n float sunE = sunIntensity(dot(sunDirection, up));\n vec3 betaR = simplifiedRayleigh() * rayleighCoefficient;\n vec3 betaM = totalMie(lambda, K, turbidity) * mieCoefficient;\n float zenithAngle = acos(max(0.0, dot(up, normalize(vPositionW - cameraPos))));\n float sR = rayleighZenithLength / (cos(zenithAngle) + 0.15 * pow(93.885 - ((zenithAngle * 180.0) / pi), -1.253));\n float sM = mieZenithLength / (cos(zenithAngle) + 0.15 * pow(93.885 - ((zenithAngle * 180.0) / pi), -1.253));\n vec3 Fex = exp(-(betaR * sR + betaM * sM));\n float cosTheta = dot(normalize(vPositionW - cameraPos), sunDirection);\n float rPhase = rayleighPhase(cosTheta*0.5+0.5);\n vec3 betaRTheta = betaR * rPhase;\n float mPhase = hgPhase(cosTheta, mieDirectionalG);\n vec3 betaMTheta = betaM * mPhase;\n vec3 Lin = pow(sunE * ((betaRTheta + betaMTheta) / (betaR + betaM)) * (1.0 - Fex),vec3(1.5));\n Lin *= mix(vec3(1.0), pow(sunE * ((betaRTheta + betaMTheta) / (betaR + betaM)) * Fex, vec3(1.0 / 2.0)), clamp(pow(1.0-dot(up, sunDirection), 5.0), 0.0, 1.0));\n vec3 direction = normalize(vPositionW - cameraPos);\n float theta = acos(direction.y);\n float phi = atan(direction.z, direction.x);\n vec2 uv = vec2(phi, theta) / vec2(2.0 * pi, pi) + vec2(0.5, 0.0);\n vec3 L0 = vec3(0.1) * Fex;\n float sundisk = smoothstep(sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta);\n L0 += (sunE * 19000.0 * Fex) * sundisk;\n vec3 whiteScale = 1.0/Uncharted2Tonemap(vec3(W));\n vec3 texColor = (Lin+L0); \n texColor *= 0.04 ;\n texColor += vec3(0.0,0.001,0.0025)*0.3;\n float g_fMaxLuminance = 1.0;\n float fLumScaled = 0.1 / luminance; \n float fLumCompressed = (fLumScaled * (1.0 + (fLumScaled / (g_fMaxLuminance * g_fMaxLuminance)))) / (1.0 + fLumScaled); \n float ExposureBias = fLumCompressed;\n vec3 curr = Uncharted2Tonemap((log2(2.0/pow(luminance,4.0)))*texColor);\n vec3 skyColor = curr * whiteScale;\n vec3 retColor = pow(skyColor,vec3(1.0/(1.2+(1.2*sunfade))));\n vec4 baseColor = vec4(retColor, 1.0);\n \n \n float alpha = 1.0;\n#ifdef VERTEXCOLOR\n baseColor.rgb *= vColor.rgb;\n#endif\n \n vec3 diffuseBase = vec3(1.0, 1.0, 1.0);\n#ifdef VERTEXALPHA\n alpha *= vColor.a;\n#endif\n \n vec4 color = vec4(baseColor.rgb, alpha);\n \n#include<fogFragment>\n gl_FragColor = color;\n}";
|