babylon.backgroundMaterial.min.js 23 KB

1
  1. var __extends=this&&this.__extends||(function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,n){e.__proto__=n}||function(e,n){for(var r in n)n.hasOwnProperty(r)&&(e[r]=n[r])};return function(n,r){function i(){this.constructor=n}e(n,r),n.prototype=null===r?Object.create(r):(i.prototype=r.prototype,new i)}})(),__decorate=this&&this.__decorate||function(e,n,r,i){var o,t=arguments.length,a=t<3?n:null===i?i=Object.getOwnPropertyDescriptor(n,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,n,r,i);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(t<3?o(a):t>3?o(n,r,a):o(n,r))||a);return t>3&&a&&Object.defineProperty(n,r,a),a},BABYLON;!(function(e){var n=(function(e){function n(){var n=e.call(this)||this;return n.OPACITY=!1,n.OPACITYDIRECTUV=0,n.OPACITYRGB=!1,n.ENVIRONMENT=!1,n.GAMMAENVIRONMENT=!1,n.RGBENVIRONMENT=!1,n.ENVIRONMENTBLUR=!1,n.TEXTURELODSUPPORT=!1,n.OPACITYFRESNEL=!1,n.SHADOWFROMLIGHTCOLOR=!1,n.IMAGEPROCESSING=!1,n.VIGNETTE=!1,n.VIGNETTEBLENDMODEMULTIPLY=!1,n.VIGNETTEBLENDMODEOPAQUE=!1,n.TONEMAPPING=!1,n.CONTRAST=!1,n.COLORCURVES=!1,n.COLORGRADING=!1,n.COLORGRADING3D=!1,n.SAMPLER3DGREENDEPTH=!1,n.SAMPLER3DBGRMAP=!1,n.IMAGEPROCESSINGPOSTPROCESS=!1,n.EXPOSURE=!1,n.MAINUV1=!1,n.MAINUV2=!1,n.UV1=!1,n.UV2=!1,n.CLIPPLANE=!1,n.POINTSIZE=!1,n.FOG=!1,n.NORMAL=!1,n.NUM_BONE_INFLUENCERS=0,n.BonesPerMesh=0,n.INSTANCES=!1,n.SHADOWFLOAT=!1,n.rebuild(),n}return __extends(n,e),n})(e.MaterialDefines),r=(function(r){function i(n,i){var o=r.call(this,n,i)||this;return o.primaryColor=e.Color3.White(),o.primaryLevel=1,o.secondaryColor=e.Color3.Gray(),o.secondaryLevel=1,o.thirdColor=e.Color3.Black(),o.thirdLevel=1,o.environmentTexture=null,o.opacityTexture=null,o.environmentBlur=0,o.lightChannelsInTexture=!1,o._shadowLights=null,o.shadowLights=null,o.shadowBlurScale=1,o.shadowLevel=0,o.opacityFresnel=!0,o._imageProcessingObserver=null,o._maxSimultaneousLights=4,o._renderTargets=new e.SmartArray(16),o._attachImageProcessingConfiguration(null),o.getRenderTargetTextures=function(){return o._renderTargets.reset(),o._opacityTexture&&o._opacityTexture.isRenderTarget&&o._renderTargets.push(o._opacityTexture),o._environmentTexture&&o._environmentTexture.isRenderTarget&&o._renderTargets.push(o._environmentTexture),o._renderTargets},o}return __extends(i,r),i.prototype._attachImageProcessingConfiguration=function(e){var n=this;e!==this._imageProcessingConfiguration&&(this._imageProcessingConfiguration&&this._imageProcessingObserver&&this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver),this._imageProcessingConfiguration=e||this.getScene().imageProcessingConfiguration,this._imageProcessingObserver=this._imageProcessingConfiguration.onUpdateParameters.add((function(e){n._markAllSubMeshesAsImageProcessingDirty()})))},Object.defineProperty(i.prototype,"imageProcessingConfiguration",{get:function(){return this._imageProcessingConfiguration},set:function(e){this._attachImageProcessingConfiguration(e),this._markAllSubMeshesAsTexturesDirty()},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"cameraColorCurvesEnabled",{get:function(){return this.imageProcessingConfiguration.colorCurvesEnabled},set:function(e){this.imageProcessingConfiguration.colorCurvesEnabled=e},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"cameraColorGradingEnabled",{get:function(){return this.imageProcessingConfiguration.colorGradingEnabled},set:function(e){this.imageProcessingConfiguration.colorGradingEnabled=e},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"cameraToneMappingEnabled",{get:function(){return this._imageProcessingConfiguration.toneMappingEnabled},set:function(e){this._imageProcessingConfiguration.toneMappingEnabled=e},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"cameraExposure",{get:function(){return this._imageProcessingConfiguration.exposure},set:function(e){this._imageProcessingConfiguration.exposure=e},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"cameraContrast",{get:function(){return this._imageProcessingConfiguration.contrast},set:function(e){this._imageProcessingConfiguration.contrast=e},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"cameraColorGradingTexture",{get:function(){return this._imageProcessingConfiguration.colorGradingTexture},set:function(e){this._imageProcessingConfiguration.colorGradingTexture=e},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"cameraColorCurves",{get:function(){return this._imageProcessingConfiguration.colorCurves},set:function(e){this._imageProcessingConfiguration.colorCurves=e},enumerable:!0,configurable:!0}),i.prototype.needAlphaTesting=function(){return!1},i.prototype.needAlphaBlending=function(){return!1},i.prototype._getEnvironmentTexture=function(){return this._environmentTexture?this._environmentTexture:this.getScene().environmentTexture},i.prototype.isReadyForSubMesh=function(r,i,o){var t=this;if(void 0===o&&(o=!1),i.effect&&this.isFrozen&&this._wasPreviouslyReady)return!0;i._materialDefines||(i._materialDefines=new n);var a=this.getScene(),s=i._materialDefines;if(!this.checkReadyOnEveryCall&&i.effect&&s._renderId===a.getRenderId())return!0;var l=a.getEngine();if(e.MaterialHelper.PrepareDefinesForLights(a,r,s,!1,this._maxSimultaneousLights),s._needNormals=!0,s._areTexturesDirty&&(s._needUVs=!1,a.texturesEnabled)){if(a.getEngine().getCaps().textureLOD&&(s.TEXTURELODSUPPORT=!0),this._opacityTexture&&e.StandardMaterial.OpacityTextureEnabled){if(!this._opacityTexture.isReadyOrNotBlocking())return!1;e.MaterialHelper.PrepareDefinesForMergedUV(this._opacityTexture,s,"OPACITY"),s.OPACITYRGB=this._opacityTexture.getAlphaFromRGB,s.OPACITYFRESNEL=this._opacityFresnel}else s.OPACITY=!1,s.OPACITYRGB=!1,s.OPACITYFRESNEL=!1;var f=this._getEnvironmentTexture();if(f&&e.StandardMaterial.ReflectionTextureEnabled){if(!f.isReadyOrNotBlocking())return!1;e.MaterialHelper.PrepareDefinesForMergedUV(f,s,"ENVIRONMENT"),s.GAMMAENVIRONMENT=f.gammaSpace,s.ENVIRONMENTBLUR=this._environmentBlur>0,s.RGBENVIRONMENT=!this.lightChannelsInTexture}else s.ENVIRONMENT=!1,s.GAMMAENVIRONMENT=!1,s.RGBENVIRONMENT=!1}if(s._areImageProcessingDirty){if(!this._imageProcessingConfiguration.isReady())return!1;this._imageProcessingConfiguration.prepareDefines(s)}if(e.MaterialHelper.PrepareDefinesForMisc(r,a,!1,this.pointsCloud,this.fogEnabled,s),e.MaterialHelper.PrepareDefinesForFrameBoundValues(a,l,s,o,!1),e.MaterialHelper.PrepareDefinesForAttributes(r,s,!1,!0,!1)&&r&&(a.getEngine().getCaps().standardDerivatives||r.isVerticesDataPresent(e.VertexBuffer.NormalKind)||(r.createNormals(!0),e.Tools.Warn("BackgroundMaterial: Normals have been created for the mesh: "+r.name))),s.isDirty){s.markAsProcessed(),a.resetCachedMaterial();var d=new e.EffectFallbacks;s.FOG&&d.addFallback(0,"FOG"),s.POINTSIZE&&d.addFallback(1,"POINTSIZE"),e.MaterialHelper.HandleFallbacksForShadows(s,d,this._maxSimultaneousLights),s.NUM_BONE_INFLUENCERS>0&&d.addCPUSkinningFallback(0,r);var c=[e.VertexBuffer.PositionKind];s.NORMAL&&c.push(e.VertexBuffer.NormalKind),s.UV1&&c.push(e.VertexBuffer.UVKind),s.UV2&&c.push(e.VertexBuffer.UV2Kind),e.MaterialHelper.PrepareAttributesForBones(c,r,s,d),e.MaterialHelper.PrepareAttributesForInstances(c,s);var u=["world","view","viewProjection","vEyePosition","vLightsType","vFogInfos","vFogColor","pointSize","vClipPlane","mBones","vPrimaryColor","vSecondaryColor","vThirdColor","vEnvironmentInfo","environmentMatrix","vEnvironmentMicrosurfaceInfos","shadowLevel","vOpacityInfo","opacityMatrix"],m=["opacitySampler","environmentSampler","environmentSamplerLow","environmentSamplerHigh"],v=["Material","Scene"];e.ImageProcessingConfiguration.PrepareUniforms(u,s),e.ImageProcessingConfiguration.PrepareSamplers(m,s),e.MaterialHelper.PrepareUniformsAndSamplersList({uniformsNames:u,uniformBuffersNames:v,samplers:m,defines:s,maxSimultaneousLights:this._maxSimultaneousLights});var p=function(e){t.onCompiled&&t.onCompiled(e),t.bindSceneUniformBuffer(e,a.getSceneUniformBuffer())},g=s.toString();i.setEffect(a.getEngine().createEffect("background",{attributes:c,uniformsNames:u,uniformBuffersNames:v,samplers:m,defines:g,fallbacks:d,onCompiled:p,onError:this.onError,indexParameters:{maxSimultaneousLights:this._maxSimultaneousLights}},l),s),this.buildUniformLayout()}return!!i.effect.isReady()&&(s._renderId=a.getRenderId(),this._wasPreviouslyReady=!0,!0)},i.prototype.buildUniformLayout=function(){this._uniformBuffer.addUniform("vPrimaryColor",4),this._uniformBuffer.addUniform("vSecondaryColor",4),this._uniformBuffer.addUniform("vThirdColor",4),this._uniformBuffer.addUniform("vOpacityInfo",2),this._uniformBuffer.addUniform("vEnvironmentInfo",2),this._uniformBuffer.addUniform("opacityMatrix",16),this._uniformBuffer.addUniform("environmentMatrix",16),this._uniformBuffer.addUniform("vEnvironmentMicrosurfaceInfos",3),this._uniformBuffer.addUniform("pointSize",1),this._uniformBuffer.addUniform("shadowLevel",1),this._uniformBuffer.create()},i.prototype.unbind=function(){this._opacityTexture&&this._opacityTexture.isRenderTarget&&this._uniformBuffer.setTexture("opacitySampler",null),this._environmentTexture&&this._environmentTexture.isRenderTarget&&this._uniformBuffer.setTexture("environmentSampler",null),r.prototype.unbind.call(this)},i.prototype.bindOnlyWorldMatrix=function(e){this._activeEffect.setMatrix("world",e)},i.prototype.bindForSubMesh=function(n,r,i){var o=this.getScene(),t=i._materialDefines;if(t){var a=i.effect;this._activeEffect=a,this.bindOnlyWorldMatrix(n),e.MaterialHelper.BindBonesParameters(r,this._activeEffect);var s=this._mustRebind(o,a,r.visibility);if(s){this._uniformBuffer.bindToEffect(a,"Material"),this.bindViewProjection(a);var l=this._getEnvironmentTexture();this._uniformBuffer.useUbo&&this.isFrozen&&this._uniformBuffer.isSync||(o.texturesEnabled&&(this._opacityTexture&&e.StandardMaterial.OpacityTextureEnabled&&(this._uniformBuffer.updateFloat2("vOpacityInfo",this._opacityTexture.coordinatesIndex,this._opacityTexture.level),e.MaterialHelper.BindTextureMatrix(this._opacityTexture,this._uniformBuffer,"opacity")),l&&e.StandardMaterial.ReflectionTextureEnabled&&(this._uniformBuffer.updateMatrix("environmentMatrix",l.getReflectionTextureMatrix()),this._uniformBuffer.updateFloat2("vEnvironmentInfo",l.level,this._environmentBlur),this._uniformBuffer.updateFloat3("vEnvironmentMicrosurfaceInfos",l.getSize().width,l.lodGenerationScale,l.lodGenerationOffset))),this.shadowLevel>0&&this._uniformBuffer.updateFloat("shadowLevel",this.shadowLevel),this.pointsCloud&&this._uniformBuffer.updateFloat("pointSize",this.pointSize),this._uniformBuffer.updateColor4("vPrimaryColor",this._primaryColor,this._primaryLevel),this._uniformBuffer.updateColor4("vSecondaryColor",this._secondaryColor,this._secondaryLevel),this._uniformBuffer.updateColor4("vThirdColor",this._thirdColor,this._thirdLevel)),o.texturesEnabled&&(this._opacityTexture&&e.StandardMaterial.OpacityTextureEnabled&&this._uniformBuffer.setTexture("opacitySampler",this._opacityTexture),l&&e.StandardMaterial.ReflectionTextureEnabled&&(t.ENVIRONMENTBLUR&&t.TEXTURELODSUPPORT?this._uniformBuffer.setTexture("environmentSampler",l):t.ENVIRONMENTBLUR?(this._uniformBuffer.setTexture("environmentSampler",l._lodTextureMid||l),this._uniformBuffer.setTexture("environmentSamplerLow",l._lodTextureLow||l),this._uniformBuffer.setTexture("environmentSamplerHigh",l._lodTextureHigh||l)):this._uniformBuffer.setTexture("environmentSampler",l))),e.MaterialHelper.BindClipPlane(this._activeEffect,o);var f=o._mirroredCameraPosition?o._mirroredCameraPosition:o.activeCamera.globalPosition;a.setFloat3("vEyePosition",f.x,f.y,f.z)}!s&&this.isFrozen||(o.lightsEnabled&&e.MaterialHelper.BindLights(o,r,this._activeEffect,t,this._maxSimultaneousLights,!1),this.bindView(a),e.MaterialHelper.BindFogParameters(o,r,this._activeEffect),this._imageProcessingConfiguration.bind(this._activeEffect)),this._uniformBuffer.update(),this._afterBind(r),o=null}},i.prototype.dispose=function(e,n){void 0===e&&(e=!1),void 0===n&&(n=!1),n&&(this.opacityTexture&&this.opacityTexture.dispose(),this.environmentTexture&&this.environmentTexture.dispose()),this._renderTargets.dispose(),this._imageProcessingConfiguration&&this._imageProcessingObserver&&this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver),r.prototype.dispose.call(this,e)},i.prototype.clone=function(n){var r=this;return e.SerializationHelper.Clone((function(){return new i(n,r.getScene())}),this)},i.prototype.serialize=function(){var n=e.SerializationHelper.Serialize(this);return n.customType="BABYLON.GridMaterial",n},i.prototype.getClassName=function(){return"BackgroundMaterial"},i.Parse=function(n,r,o){return e.SerializationHelper.Parse((function(){return new i(n.name,r)}),n,r,o)},__decorate([e.serializeAsColor3()],i.prototype,"_primaryColor",void 0),__decorate([e.expandToProperty("_markAllSubMeshesAsLightsDirty")],i.prototype,"primaryColor",void 0),__decorate([e.serialize()],i.prototype,"_primaryLevel",void 0),__decorate([e.expandToProperty("_markAllSubMeshesAsLightsDirty")],i.prototype,"primaryLevel",void 0),__decorate([e.serializeAsColor3()],i.prototype,"_secondaryColor",void 0),__decorate([e.expandToProperty("_markAllSubMeshesAsLightsDirty")],i.prototype,"secondaryColor",void 0),__decorate([e.serialize()],i.prototype,"_secondaryLevel",void 0),__decorate([e.expandToProperty("_markAllSubMeshesAsLightsDirty")],i.prototype,"secondaryLevel",void 0),__decorate([e.serializeAsColor3()],i.prototype,"_thirdColor",void 0),__decorate([e.expandToProperty("_markAllSubMeshesAsLightsDirty")],i.prototype,"thirdColor",void 0),__decorate([e.serialize()],i.prototype,"_thirdLevel",void 0),__decorate([e.expandToProperty("_markAllSubMeshesAsLightsDirty")],i.prototype,"thirdLevel",void 0),__decorate([e.serializeAsTexture()],i.prototype,"_environmentTexture",void 0),__decorate([e.expandToProperty("_markAllSubMeshesAsTexturesDirty")],i.prototype,"environmentTexture",void 0),__decorate([e.serializeAsTexture()],i.prototype,"_opacityTexture",void 0),__decorate([e.expandToProperty("_markAllSubMeshesAsTexturesDirty")],i.prototype,"opacityTexture",void 0),__decorate([e.serialize()],i.prototype,"_environmentBlur",void 0),__decorate([e.expandToProperty("_markAllSubMeshesAsTexturesDirty")],i.prototype,"environmentBlur",void 0),__decorate([e.serialize()],i.prototype,"_lightChannelsInTexture",void 0),__decorate([e.expandToProperty("_markAllSubMeshesAsTexturesDirty")],i.prototype,"lightChannelsInTexture",void 0),__decorate([e.expandToProperty("_markAllSubMeshesAsTexturesDirty")],i.prototype,"shadowLights",void 0),__decorate([e.serialize()],i.prototype,"_shadowBlurScale",void 0),__decorate([e.expandToProperty("_markAllSubMeshesAsTexturesDirty")],i.prototype,"shadowBlurScale",void 0),__decorate([e.serialize()],i.prototype,"_shadowLevel",void 0),__decorate([e.expandToProperty("_markAllSubMeshesAsTexturesDirty")],i.prototype,"shadowLevel",void 0),__decorate([e.serialize()],i.prototype,"_opacityFresnel",void 0),__decorate([e.expandToProperty("_markAllSubMeshesAsTexturesDirty")],i.prototype,"opacityFresnel",void 0),__decorate([e.serializeAsImageProcessingConfiguration()],i.prototype,"_imageProcessingConfiguration",void 0),i})(e.PushMaterial);e.BackgroundMaterial=r})(BABYLON||(BABYLON={})),BABYLON.Effect.ShadersStore.backgroundVertexShader="precision highp float;\n#include<__decl__backgroundVertex>\n\nattribute vec3 position;\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\n#include<bonesDeclaration>\n\n#include<instancesDeclaration>\n#ifdef POINTSIZE\nuniform float pointSize;\n#endif\n\nvarying vec3 vPositionW;\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#endif\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#ifdef MAINUV1\nvarying vec2 vMainUV1;\n#endif\n#ifdef MAINUV2\nvarying vec2 vMainUV2; \n#endif\n#if defined(OPACITY) && OPACITYDIRECTUV == 0\nvarying vec2 vOpacityUV;\n#endif\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\n#include<__decl__lightFragment>[0..maxSimultaneousLights]\nvoid main(void) {\n#include<instancesVertex>\n#include<bonesVertex>\ngl_Position=viewProjection*finalWorld*vec4(position,1.0);\nvec4 worldPos=finalWorld*vec4(position,1.0);\nvPositionW=vec3(worldPos);\n#ifdef NORMAL\nmat3 normalWorld=mat3(finalWorld);\n#ifdef NONUNIFORMSCALING\nnormalWorld=transposeMat3(inverseMat3(normalWorld));\n#endif\nvNormalW=normalize(normalWorld*normal);\n#endif\n#ifndef UV1\nvec2 uv=vec2(0.,0.);\n#endif\n#ifndef UV2\nvec2 uv2=vec2(0.,0.);\n#endif\n#ifdef MAINUV1\nvMainUV1=uv;\n#endif \n#ifdef MAINUV2\nvMainUV2=uv2;\n#endif\n#if defined(OPACITY) && OPACITYDIRECTUV == 0 \nif (vOpacityInfo.x == 0.)\n{\nvOpacityUV=vec2(opacityMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvOpacityUV=vec2(opacityMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n\n#include<clipPlaneVertex>\n\n#include<fogVertex>\n\n#include<shadowsVertex>[0..maxSimultaneousLights]\n\n#ifdef VERTEXCOLOR\nvColor=color;\n#endif\n\n#ifdef POINTSIZE\ngl_PointSize=pointSize;\n#endif\n}\n",BABYLON.Effect.ShadersStore.backgroundPixelShader="#ifdef TEXTURELODSUPPORT\n#extension GL_EXT_shader_texture_lod : enable\n#endif\nprecision highp float;\n#include<__decl__backgroundFragment>\n\nuniform vec3 vEyePosition;\n\nvarying vec3 vPositionW;\n#ifdef MAINUV1\nvarying vec2 vMainUV1;\n#endif \n#ifdef MAINUV2 \nvarying vec2 vMainUV2; \n#endif \n#ifdef NORMAL\nvarying vec3 vNormalW;\n#endif\n#ifdef OPACITY\n#if OPACITYDIRECTUV == 1\n#define vOpacityUV vMainUV1\n#elif OPACITYDIRECTUV == 2\n#define vOpacityUV vMainUV2\n#else\nvarying vec2 vOpacityUV;\n#endif\nuniform sampler2D opacitySampler;\n#endif\n\n#ifdef ENVIRONMENT\n#define sampleEnvironment(s,c) textureCube(s,c)\nuniform samplerCube environmentSampler;\n#ifdef ENVIRONMENTBLUR\n#ifdef TEXTURELODSUPPORT\n#define sampleEnvironmentLod(s,c,l) textureCubeLodEXT(s,c,l)\n#else\nuniform samplerCube environmentSamplerLow;\nuniform samplerCube environmentSamplerHigh;\n#endif\n#endif\n#endif\n\n#ifndef FROMLINEARSPACE\n#define FROMLINEARSPACE;\n#endif\n\n#ifndef SHADOWONLY\n#define SHADOWONLY;\n#endif\n#include<imageProcessingDeclaration>\n\n#include<__decl__lightFragment>[0..maxSimultaneousLights]\n#include<helperFunctions>\n#include<lightsFragmentFunctions>\n#include<shadowsFragmentFunctions>\n#include<imageProcessingFunctions>\n#include<clipPlaneFragmentDeclaration>\n\n#include<fogFragmentDeclaration>\nvoid main(void) {\n#include<clipPlaneFragment>\nvec3 viewDirectionW=normalize(vEyePosition-vPositionW);\n\n#ifdef NORMAL\nvec3 normalW=normalize(vNormalW);\n#else\nvec3 normalW=vec3(0.0,1.0,0.0);\n#endif\n\nfloat shadow=1.;\n#include<lightFragment>[0..maxSimultaneousLights]\n\n#ifdef ENVIRONMENT\nvec3 environmentColor=vec3(0.,0.,0.);\n\nvec3 environmentCoords=(vPositionW.xyz-vEyePosition.xyz);\n#ifdef INVERTCUBICMAP\nenvironmentCoords.y=1.0-environmentCoords.y;\n#endif\n\nenvironmentCoords=vec3(environmentMatrix*vec4(environmentCoords,0));\n#ifdef ENVIRONMENTBLUR\nfloat environmentLOD=vEnvironmentInfo.y;\n#ifdef TEXTURELODSUPPORT\n\nenvironmentLOD=environmentLOD*log2(vEnvironmentMicrosurfaceInfos.x)*vEnvironmentMicrosurfaceInfos.y+vEnvironmentMicrosurfaceInfos.z;\nenvironmentColor=sampleEnvironmentLod(environmentSampler,environmentCoords,environmentLOD).rgb;\n#else\nfloat lodEnvironmentNormalized=clamp(environmentLOD,0.,1.);\nfloat lodEnvironmentNormalizedDoubled=lodEnvironmentNormalized*2.0;\nvec3 environmentSpecularMid=sampleEnvironment(environmentSampler,environmentCoords).rgb;\nif(lodEnvironmentNormalizedDoubled<1.0){\nenvironmentColor=mix(\nsampleEnvironment(environmentSamplerHigh,environmentCoords).rgb,\nenvironmentSpecularMid,\nlodEnvironmentNormalizedDoubled\n);\n} else {\nenvironmentColor=mix(\nenvironmentSpecularMid,\nsampleEnvironment(environmentSamplerLow,environmentCoords).rgb,\nlodEnvironmentNormalizedDoubled-1.0\n);\n}\n#endif\n#else\nenvironmentColor=sampleEnvironment(environmentSampler,environmentCoords).rgb;\n#endif\n#ifdef GAMMAENVIRONMENT\nenvironmentColor=toLinearSpace(environmentColor.rgb);\n#endif\n\nenvironmentColor*=vEnvironmentInfo.x;\n\n#ifdef OPACITY\nvec3 reflectEnvironmentColor=vec3(0.,0.,0.);\nvec4 opacityMap=texture2D(opacitySampler,vOpacityUV);\n#ifdef OPACITYRGB\nfloat environmentMix=getLuminance(opacityMap.rgb);\n#else\nfloat environmentMix=opacityMap.a;\n#endif\nenvironmentMix*=vOpacityInfo.y;\n#ifdef OPACITYFRESNEL\n\nfloat viewAngleToFloor=dot(normalW,normalize(vEyePosition));\n\nconst float startAngle=0.1;\nfloat fadeFactor=clamp(viewAngleToFloor/startAngle,0.0,1.0);\nenvironmentMix*=fadeFactor*fadeFactor;\nshadow=mix(1.,shadow,environmentMix);\n#endif\n\nvec3 viewDir=vPositionW.xyz-vEyePosition.xyz;\nvec3 reflectEnvironmentCoords=reflect(viewDir,normalW);\n#ifdef INVERTCUBICMAP\nreflectEnvironmentCoords.y=1.0-reflectEnvironmentCoords.y;\n#endif\n\nreflectEnvironmentCoords=vec3(environmentMatrix*vec4(reflectEnvironmentCoords,0));\n#ifdef ENVIRONMENTBLUR\n#ifdef TEXTURELODSUPPORT\n\nreflectEnvironmentColor=sampleEnvironmentLod(environmentSampler,reflectEnvironmentCoords,environmentLOD).rgb;\n#else\nvec3 reflectEnvironmentSpecularMid=sampleEnvironment(environmentSampler,reflectEnvironmentCoords).rgb;\nif(lodEnvironmentNormalizedDoubled<1.0){\nreflectEnvironmentColor=mix(\nsampleEnvironment(environmentSamplerHigh,reflectEnvironmentCoords).rgb,\nenvironmentSpecularMid,\nlodEnvironmentNormalizedDoubled\n);\n} else {\nreflectEnvironmentColor=mix(\nenvironmentSpecularMid,\nsampleEnvironment(environmentSamplerLow,reflectEnvironmentCoords).rgb,\nlodEnvironmentNormalizedDoubled-1.0\n);\n}\n#endif\n#else\nreflectEnvironmentColor=sampleEnvironment(environmentSampler,reflectEnvironmentCoords).rgb;\n#endif\n#ifdef GAMMAENVIRONMENT\nreflectEnvironmentColor=toLinearSpace(reflectEnvironmentColor.rgb);\n#endif\n\nreflectEnvironmentColor*=vEnvironmentInfo.x;\n\nenvironmentColor=mix(environmentColor,reflectEnvironmentColor,environmentMix);\n#endif\n#else\nvec3 environmentColor=vec3(1.,1.,1.);\n#endif\n\n#ifdef RGBENVIRONMENT\nenvironmentColor=vec3(1.,1.,1.)*getLuminance(environmentColor);\n#endif\n\nvec3 colorBase=environmentColor.r*vPrimaryColor.rgb*vPrimaryColor.a;\ncolorBase+=environmentColor.g*vSecondaryColor.rgb*vSecondaryColor.a;\ncolorBase+=environmentColor.b*vThirdColor.rgb*vThirdColor.a;\ncolorBase=mix(colorBase*shadowLevel,colorBase,shadow);\nvec4 color=vec4(colorBase,1.0);\n#include<fogFragment>\n#ifdef IMAGEPROCESSINGPOSTPROCESS\n\n\ncolor.rgb=clamp(color.rgb,0.,30.0);\n#else\n\ncolor=applyImageProcessing(color);\n#endif\ngl_FragColor=color;\n}",BABYLON.Effect.IncludesShadersStore.backgroundFragmentDeclaration=" uniform vec4 vPrimaryColor;\nuniform vec4 vSecondaryColor;\nuniform vec4 vThirdColor;\nuniform float shadowLevel;\n#ifdef OPACITY\nuniform vec2 vOpacityInfo;\n#endif\n#ifdef ENVIRONMENT\nuniform vec2 vEnvironmentInfo;\nuniform mat4 environmentMatrix;\nuniform vec3 vEnvironmentMicrosurfaceInfos;\n#endif",BABYLON.Effect.IncludesShadersStore.backgroundUboDeclaration="layout(std140,column_major) uniform;\nuniform Material\n{\nuniform vec4 vPrimaryColor;\nuniform vec4 vSecondaryColor;\nuniform vec4 vThirdColor;\nuniform vec2 vOpacityInfo;\nuniform vec2 vEnvironmentInfo;\nuniform mat4 opacityMatrix;\nuniform mat4 environmentMatrix;\nuniform vec3 vEnvironmentMicrosurfaceInfos;\nuniform float pointSize;\nuniform float shadowLevel;\n};\nuniform Scene {\nmat4 viewProjection;\nmat4 view;\n};",BABYLON.Effect.IncludesShadersStore.backgroundVertexDeclaration="uniform mat4 view;\nuniform mat4 viewProjection;\nuniform float shadowLevel;\n#ifdef OPACITY\nuniform mat4 opacityMatrix;\nuniform vec2 vOpacityInfo;\n#endif\n#ifdef ENVIRONMENT\nuniform vec2 vEnvironmentInfo;\nuniform mat4 environmentMatrix;\nuniform vec3 vEnvionmentMicrosurfaceInfos;\n#endif\n#ifdef POINTSIZE\nuniform float pointSize;\n#endif";