1 |
- var BABYLON,__extends=this&&this.__extends||(function(){var i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};return function(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}})(),__decorate=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,r,i);else for(var l=e.length-1;0<=l;l--)(n=e[l])&&(a=(o<3?n(a):3<o?n(t,r,a):n(t,r))||a);return 3<o&&a&&Object.defineProperty(t,r,a),a};!(function(u){var v=(function(t){function e(){var e=t.call(this)||this;return e.BUMP=!1,e.REFLECTION=!1,e.CLIPPLANE=!1,e.CLIPPLANE2=!1,e.CLIPPLANE3=!1,e.CLIPPLANE4=!1,e.ALPHATEST=!1,e.DEPTHPREPASS=!1,e.POINTSIZE=!1,e.FOG=!1,e.NORMAL=!1,e.UV1=!1,e.UV2=!1,e.VERTEXCOLOR=!1,e.VERTEXALPHA=!1,e.NUM_BONE_INFLUENCERS=0,e.BonesPerMesh=0,e.INSTANCES=!1,e.SPECULARTERM=!1,e.LOGARITHMICDEPTH=!1,e.FRESNELSEPARATE=!1,e.BUMPSUPERIMPOSE=!1,e.BUMPAFFECTSREFLECTION=!1,e.rebuild(),e}return __extends(e,t),e})(u.MaterialDefines),e=(function(n){function o(e,t,r){void 0===r&&(r=new u.Vector2(512,512));var i=n.call(this,e,t)||this;return i.renderTargetSize=r,i.diffuseColor=new u.Color3(1,1,1),i.specularColor=new u.Color3(0,0,0),i.specularPower=64,i._disableLighting=!1,i._maxSimultaneousLights=4,i.windForce=6,i.windDirection=new u.Vector2(0,1),i.waveHeight=.4,i.bumpHeight=.4,i._bumpSuperimpose=!1,i._fresnelSeparate=!1,i._bumpAffectsReflection=!1,i.waterColor=new u.Color3(.1,.1,.6),i.colorBlendFactor=.2,i.waterColor2=new u.Color3(.1,.1,.6),i.colorBlendFactor2=.2,i.waveLength=.1,i.waveSpeed=1,i._renderTargets=new u.SmartArray(16),i._mesh=null,i._reflectionTransform=u.Matrix.Zero(),i._lastTime=0,i._lastDeltaTime=0,i._createRenderTargets(t,r),i.getRenderTargetTextures=function(){return i._renderTargets.reset(),i._renderTargets.push(i._reflectionRTT),i._renderTargets.push(i._refractionRTT),i._renderTargets},i}return __extends(o,n),Object.defineProperty(o.prototype,"hasRenderTargetTextures",{get:function(){return!0},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,"useLogarithmicDepth",{get:function(){return this._useLogarithmicDepth},set:function(e){this._useLogarithmicDepth=e&&this.getScene().getEngine().getCaps().fragmentDepthSupported,this._markAllSubMeshesAsMiscDirty()},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,"refractionTexture",{get:function(){return this._refractionRTT},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,"reflectionTexture",{get:function(){return this._reflectionRTT},enumerable:!0,configurable:!0}),o.prototype.addToRenderList=function(e){this._refractionRTT&&this._refractionRTT.renderList&&this._refractionRTT.renderList.push(e),this._reflectionRTT&&this._reflectionRTT.renderList&&this._reflectionRTT.renderList.push(e)},o.prototype.enableRenderTargets=function(e){var t=e?1:0;this._refractionRTT&&(this._refractionRTT.refreshRate=t),this._reflectionRTT&&(this._reflectionRTT.refreshRate=t)},o.prototype.getRenderList=function(){return this._refractionRTT?this._refractionRTT.renderList:[]},Object.defineProperty(o.prototype,"renderTargetsEnabled",{get:function(){return!(this._refractionRTT&&0===this._refractionRTT.refreshRate)},enumerable:!0,configurable:!0}),o.prototype.needAlphaBlending=function(){return this.alpha<1},o.prototype.needAlphaTesting=function(){return!1},o.prototype.getAlphaTestTexture=function(){return null},o.prototype.isReadyForSubMesh=function(e,t,r){if(this.isFrozen&&this._wasPreviouslyReady&&t.effect)return!0;t._materialDefines||(t._materialDefines=new v);var i=t._materialDefines,n=this.getScene();if(!this.checkReadyOnEveryCall&&t.effect&&this._renderId===n.getRenderId())return!0;var o=n.getEngine();if(i._areTexturesDirty&&(i._needUVs=!1,n.texturesEnabled)){if(this.bumpTexture&&u.StandardMaterial.BumpTextureEnabled){if(!this.bumpTexture.isReady())return!1;i._needUVs=!0,i.BUMP=!0}u.StandardMaterial.ReflectionTextureEnabled&&(i.REFLECTION=!0)}if(u.MaterialHelper.PrepareDefinesForFrameBoundValues(n,o,i,!!r),u.MaterialHelper.PrepareDefinesForMisc(e,n,this._useLogarithmicDepth,this.pointsCloud,this.fogEnabled,this._shouldTurnAlphaTestOn(e),i),i._areMiscDirty&&(this._fresnelSeparate&&(i.FRESNELSEPARATE=!0),this._bumpSuperimpose&&(i.BUMPSUPERIMPOSE=!0),this._bumpAffectsReflection&&(i.BUMPAFFECTSREFLECTION=!0)),i._needNormals=u.MaterialHelper.PrepareDefinesForLights(n,e,i,!0,this._maxSimultaneousLights,this._disableLighting),u.MaterialHelper.PrepareDefinesForAttributes(e,i,!0,!0),this._mesh=e,this._waitingRenderList){for(var a=0;a<this._waitingRenderList.length;a++)this.addToRenderList(n.getNodeByID(this._waitingRenderList[a]));this._waitingRenderList=null}if(i.isDirty){i.markAsProcessed(),n.resetCachedMaterial();var l=new u.EffectFallbacks;i.FOG&&l.addFallback(1,"FOG"),i.LOGARITHMICDEPTH&&l.addFallback(0,"LOGARITHMICDEPTH"),u.MaterialHelper.HandleFallbacksForShadows(i,l,this.maxSimultaneousLights),0<i.NUM_BONE_INFLUENCERS&&l.addCPUSkinningFallback(0,e);var s=[u.VertexBuffer.PositionKind];i.NORMAL&&s.push(u.VertexBuffer.NormalKind),i.UV1&&s.push(u.VertexBuffer.UVKind),i.UV2&&s.push(u.VertexBuffer.UV2Kind),i.VERTEXCOLOR&&s.push(u.VertexBuffer.ColorKind),u.MaterialHelper.PrepareAttributesForBones(s,e,i,l),u.MaterialHelper.PrepareAttributesForInstances(s,i);var c=i.toString(),f=["world","view","viewProjection","vEyePosition","vLightsType","vDiffuseColor","vSpecularColor","vFogInfos","vFogColor","pointSize","vNormalInfos","mBones","vClipPlane","vClipPlane2","vClipPlane3","vClipPlane4","normalMatrix","logarithmicDepthConstant","worldReflectionViewProjection","windDirection","waveLength","time","windForce","cameraPosition","bumpHeight","waveHeight","waterColor","waterColor2","colorBlendFactor","colorBlendFactor2","waveSpeed"],d=["normalSampler","refractionSampler","reflectionSampler"],p=new Array;u.MaterialHelper.PrepareUniformsAndSamplersList({uniformsNames:f,uniformBuffersNames:p,samplers:d,defines:i,maxSimultaneousLights:this.maxSimultaneousLights}),t.setEffect(n.getEngine().createEffect("water",{attributes:s,uniformsNames:f,uniformBuffersNames:p,samplers:d,defines:c,fallbacks:l,onCompiled:this.onCompiled,onError:this.onError,indexParameters:{maxSimultaneousLights:this._maxSimultaneousLights}},o),i)}return!(!t.effect||!t.effect.isReady())&&(this._renderId=n.getRenderId(),this._wasPreviouslyReady=!0)},o.prototype.bindForSubMesh=function(e,t,r){var i=this.getScene(),n=r._materialDefines;if(n){var o=r.effect;if(o&&this._mesh){this._activeEffect=o,this.bindOnlyWorldMatrix(e),this._activeEffect.setMatrix("viewProjection",i.getTransformMatrix()),u.MaterialHelper.BindBonesParameters(t,this._activeEffect),this._mustRebind(i,o)&&(this.bumpTexture&&u.StandardMaterial.BumpTextureEnabled&&(this._activeEffect.setTexture("normalSampler",this.bumpTexture),this._activeEffect.setFloat2("vNormalInfos",this.bumpTexture.coordinatesIndex,this.bumpTexture.level),this._activeEffect.setMatrix("normalMatrix",this.bumpTexture.getTextureMatrix())),u.MaterialHelper.BindClipPlane(this._activeEffect,i),this.pointsCloud&&this._activeEffect.setFloat("pointSize",this.pointSize),u.MaterialHelper.BindEyePosition(o,i)),this._activeEffect.setColor4("vDiffuseColor",this.diffuseColor,this.alpha*t.visibility),n.SPECULARTERM&&this._activeEffect.setColor4("vSpecularColor",this.specularColor,this.specularPower),i.lightsEnabled&&!this.disableLighting&&u.MaterialHelper.BindLights(i,t,this._activeEffect,n,this.maxSimultaneousLights),i.fogEnabled&&t.applyFog&&i.fogMode!==u.Scene.FOGMODE_NONE&&this._activeEffect.setMatrix("view",i.getViewMatrix()),u.MaterialHelper.BindFogParameters(i,t,this._activeEffect),u.MaterialHelper.BindLogDepth(n,this._activeEffect,i),u.StandardMaterial.ReflectionTextureEnabled&&(this._activeEffect.setTexture("refractionSampler",this._refractionRTT),this._activeEffect.setTexture("reflectionSampler",this._reflectionRTT));var a=this._mesh.getWorldMatrix().multiply(this._reflectionTransform).multiply(i.getProjectionMatrix()),l=i.getEngine().getDeltaTime();l!==this._lastDeltaTime&&(this._lastDeltaTime=l,this._lastTime+=this._lastDeltaTime),this._activeEffect.setMatrix("worldReflectionViewProjection",a),this._activeEffect.setVector2("windDirection",this.windDirection),this._activeEffect.setFloat("waveLength",this.waveLength),this._activeEffect.setFloat("time",this._lastTime/1e5),this._activeEffect.setFloat("windForce",this.windForce),this._activeEffect.setFloat("waveHeight",this.waveHeight),this._activeEffect.setFloat("bumpHeight",this.bumpHeight),this._activeEffect.setColor4("waterColor",this.waterColor,1),this._activeEffect.setFloat("colorBlendFactor",this.colorBlendFactor),this._activeEffect.setColor4("waterColor2",this.waterColor2,1),this._activeEffect.setFloat("colorBlendFactor2",this.colorBlendFactor2),this._activeEffect.setFloat("waveSpeed",this.waveSpeed),this._afterBind(t,this._activeEffect)}}},o.prototype._createRenderTargets=function(t,e){var r,i=this;this._refractionRTT=new u.RenderTargetTexture(name+"_refraction",{width:e.x,height:e.y},t,!1,!0),this._refractionRTT.wrapU=u.Texture.MIRROR_ADDRESSMODE,this._refractionRTT.wrapV=u.Texture.MIRROR_ADDRESSMODE,this._refractionRTT.ignoreCameraViewport=!0,this._reflectionRTT=new u.RenderTargetTexture(name+"_reflection",{width:e.x,height:e.y},t,!1,!0),this._reflectionRTT.wrapU=u.Texture.MIRROR_ADDRESSMODE,this._reflectionRTT.wrapV=u.Texture.MIRROR_ADDRESSMODE,this._reflectionRTT.ignoreCameraViewport=!0;var n,o=null,a=u.Matrix.Zero();this._refractionRTT.onBeforeRender=function(){i._mesh&&(r=i._mesh.isVisible,i._mesh.isVisible=!1)},this._refractionRTT.onAfterRender=function(){i._mesh&&(i._mesh.isVisible=r)},this._reflectionRTT.onBeforeRender=function(){i._mesh&&(r=i._mesh.isVisible,i._mesh.isVisible=!1),o=t.clipPlane;var e=i._mesh?i._mesh.position.y:0;t.clipPlane=u.Plane.FromPositionAndNormal(new u.Vector3(0,e-.05,0),new u.Vector3(0,-1,0)),u.Matrix.ReflectionToRef(t.clipPlane,a),n=t.getViewMatrix(),a.multiplyToRef(n,i._reflectionTransform),t.setTransformMatrix(i._reflectionTransform,t.getProjectionMatrix()),t.getEngine().cullBackFaces=!1,t._mirroredCameraPosition=u.Vector3.TransformCoordinates(t.activeCamera.position,a)},this._reflectionRTT.onAfterRender=function(){i._mesh&&(i._mesh.isVisible=r),t.clipPlane=o,t.setTransformMatrix(n,t.getProjectionMatrix()),t.getEngine().cullBackFaces=!0,t._mirroredCameraPosition=null}},o.prototype.getAnimatables=function(){var e=[];return this.bumpTexture&&this.bumpTexture.animations&&0<this.bumpTexture.animations.length&&e.push(this.bumpTexture),this._reflectionRTT&&this._reflectionRTT.animations&&0<this._reflectionRTT.animations.length&&e.push(this._reflectionRTT),this._refractionRTT&&this._refractionRTT.animations&&0<this._refractionRTT.animations.length&&e.push(this._refractionRTT),e},o.prototype.getActiveTextures=function(){var e=n.prototype.getActiveTextures.call(this);return this._bumpTexture&&e.push(this._bumpTexture),e},o.prototype.hasTexture=function(e){return!!n.prototype.hasTexture.call(this,e)||this._bumpTexture===e},o.prototype.dispose=function(e){this.bumpTexture&&this.bumpTexture.dispose();var t=this.getScene().customRenderTargets.indexOf(this._refractionRTT);-1!=t&&this.getScene().customRenderTargets.splice(t,1),(t=-1)!=(t=this.getScene().customRenderTargets.indexOf(this._reflectionRTT))&&this.getScene().customRenderTargets.splice(t,1),this._reflectionRTT&&this._reflectionRTT.dispose(),this._refractionRTT&&this._refractionRTT.dispose(),n.prototype.dispose.call(this,e)},o.prototype.clone=function(e){var t=this;return u.SerializationHelper.Clone((function(){return new o(e,t.getScene())}),this)},o.prototype.serialize=function(){var e=u.SerializationHelper.Serialize(this);if(e.customType="BABYLON.WaterMaterial",e.renderList=[],this._refractionRTT&&this._refractionRTT.renderList)for(var t=0;t<this._refractionRTT.renderList.length;t++)e.renderList.push(this._refractionRTT.renderList[t].id);return e},o.prototype.getClassName=function(){return"WaterMaterial"},o.Parse=function(e,t,r){var i=u.SerializationHelper.Parse((function(){return new o(e.name,t)}),e,t,r);return i._waitingRenderList=e.renderList,i},o.CreateDefaultMesh=function(e,t){return u.Mesh.CreateGround(e,512,512,32,t,!1)},__decorate([u.serializeAsTexture("bumpTexture")],o.prototype,"_bumpTexture",void 0),__decorate([u.expandToProperty("_markAllSubMeshesAsTexturesDirty")],o.prototype,"bumpTexture",void 0),__decorate([u.serializeAsColor3()],o.prototype,"diffuseColor",void 0),__decorate([u.serializeAsColor3()],o.prototype,"specularColor",void 0),__decorate([u.serialize()],o.prototype,"specularPower",void 0),__decorate([u.serialize("disableLighting")],o.prototype,"_disableLighting",void 0),__decorate([u.expandToProperty("_markAllSubMeshesAsLightsDirty")],o.prototype,"disableLighting",void 0),__decorate([u.serialize("maxSimultaneousLights")],o.prototype,"_maxSimultaneousLights",void 0),__decorate([u.expandToProperty("_markAllSubMeshesAsLightsDirty")],o.prototype,"maxSimultaneousLights",void 0),__decorate([u.serialize()],o.prototype,"windForce",void 0),__decorate([u.serializeAsVector2()],o.prototype,"windDirection",void 0),__decorate([u.serialize()],o.prototype,"waveHeight",void 0),__decorate([u.serialize()],o.prototype,"bumpHeight",void 0),__decorate([u.serialize("bumpSuperimpose")],o.prototype,"_bumpSuperimpose",void 0),__decorate([u.expandToProperty("_markAllSubMeshesAsMiscDirty")],o.prototype,"bumpSuperimpose",void 0),__decorate([u.serialize("fresnelSeparate")],o.prototype,"_fresnelSeparate",void 0),__decorate([u.expandToProperty("_markAllSubMeshesAsMiscDirty")],o.prototype,"fresnelSeparate",void 0),__decorate([u.serialize("bumpAffectsReflection")],o.prototype,"_bumpAffectsReflection",void 0),__decorate([u.expandToProperty("_markAllSubMeshesAsMiscDirty")],o.prototype,"bumpAffectsReflection",void 0),__decorate([u.serializeAsColor3()],o.prototype,"waterColor",void 0),__decorate([u.serialize()],o.prototype,"colorBlendFactor",void 0),__decorate([u.serializeAsColor3()],o.prototype,"waterColor2",void 0),__decorate([u.serialize()],o.prototype,"colorBlendFactor2",void 0),__decorate([u.serialize()],o.prototype,"waveLength",void 0),__decorate([u.serialize()],o.prototype,"waveSpeed",void 0),__decorate([u.serialize()],o.prototype,"useLogarithmicDepth",null),o})(u.PushMaterial);u.WaterMaterial=e})(BABYLON||(BABYLON={})),BABYLON.Effect.ShadersStore.waterVertexShader="precision highp float;\n\nattribute vec3 position;\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#ifdef VERTEXCOLOR\nattribute vec4 color;\n#endif\n#include<bonesDeclaration>\n\n#include<instancesDeclaration>\nuniform mat4 view;\nuniform mat4 viewProjection;\n#ifdef BUMP\nvarying vec2 vNormalUV;\n#ifdef BUMPSUPERIMPOSE\nvarying vec2 vNormalUV2;\n#endif\nuniform mat4 normalMatrix;\nuniform vec2 vNormalInfos;\n#endif\n#ifdef POINTSIZE\nuniform float pointSize;\n#endif\n\nvarying vec3 vPositionW;\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#endif\n#ifdef VERTEXCOLOR\nvarying vec4 vColor;\n#endif\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\n#include<__decl__lightFragment>[0..maxSimultaneousLights]\n#include<logDepthDeclaration>\n\nuniform mat4 worldReflectionViewProjection;\nuniform vec2 windDirection;\nuniform float waveLength;\nuniform float time;\nuniform float windForce;\nuniform float waveHeight;\nuniform float waveSpeed;\n\nvarying vec3 vPosition;\nvarying vec3 vRefractionMapTexCoord;\nvarying vec3 vReflectionMapTexCoord;\nvoid main(void) {\n#include<instancesVertex>\n#include<bonesVertex>\nvec4 worldPos=finalWorld*vec4(position,1.0);\nvPositionW=vec3(worldPos);\n#ifdef NORMAL\nvNormalW=normalize(vec3(finalWorld*vec4(normal,0.0)));\n#endif\n\n#ifndef UV1\nvec2 uv=vec2(0.,0.);\n#endif\n#ifndef UV2\nvec2 uv2=vec2(0.,0.);\n#endif\n#ifdef BUMP\nif (vNormalInfos.x == 0.)\n{\nvNormalUV=vec2(normalMatrix*vec4((uv*1.0)/waveLength+time*windForce*windDirection,1.0,0.0));\n#ifdef BUMPSUPERIMPOSE\nvNormalUV2=vec2(normalMatrix*vec4((uv*0.721)/waveLength+time*1.2*windForce*windDirection,1.0,0.0));\n#endif\n}\nelse\n{\nvNormalUV=vec2(normalMatrix*vec4((uv2*1.0)/waveLength+time*windForce*windDirection ,1.0,0.0));\n#ifdef BUMPSUPERIMPOSE\nvNormalUV2=vec2(normalMatrix*vec4((uv2*0.721)/waveLength+time*1.2*windForce*windDirection ,1.0,0.0));\n#endif\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\nvec3 p=position;\nfloat newY=(sin(((p.x/0.05)+time*waveSpeed))*waveHeight*windDirection.x*5.0)\n+(cos(((p.z/0.05)+time*waveSpeed))*waveHeight*windDirection.y*5.0);\np.y+=abs(newY);\ngl_Position=viewProjection*finalWorld*vec4(p,1.0);\n#ifdef REFLECTION\nworldPos=viewProjection*finalWorld*vec4(p,1.0);\n\nvPosition=position;\nvRefractionMapTexCoord.x=0.5*(worldPos.w+worldPos.x);\nvRefractionMapTexCoord.y=0.5*(worldPos.w+worldPos.y);\nvRefractionMapTexCoord.z=worldPos.w;\nworldPos=worldReflectionViewProjection*vec4(position,1.0);\nvReflectionMapTexCoord.x=0.5*(worldPos.w+worldPos.x);\nvReflectionMapTexCoord.y=0.5*(worldPos.w+worldPos.y);\nvReflectionMapTexCoord.z=worldPos.w;\n#endif\n#include<logDepthVertex>\n}\n",BABYLON.Effect.ShadersStore.waterPixelShader="#ifdef LOGARITHMICDEPTH\n#extension GL_EXT_frag_depth : enable\n#endif\nprecision highp float;\n\nuniform vec3 vEyePosition;\nuniform vec4 vDiffuseColor;\n#ifdef SPECULARTERM\nuniform vec4 vSpecularColor;\n#endif\n\nvarying vec3 vPositionW;\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#endif\n#ifdef VERTEXCOLOR\nvarying vec4 vColor;\n#endif\n\n#include<helperFunctions>\n\n#include<__decl__lightFragment>[0..maxSimultaneousLights]\n#include<lightsFragmentFunctions>\n#include<shadowsFragmentFunctions>\n\n#ifdef BUMP\nvarying vec2 vNormalUV;\nvarying vec2 vNormalUV2;\nuniform sampler2D normalSampler;\nuniform vec2 vNormalInfos;\n#endif\nuniform sampler2D refractionSampler;\nuniform sampler2D reflectionSampler;\n\nconst float LOG2=1.442695;\nuniform vec3 cameraPosition;\nuniform vec4 waterColor;\nuniform float colorBlendFactor;\nuniform vec4 waterColor2;\nuniform float colorBlendFactor2;\nuniform float bumpHeight;\nuniform float time;\n\nvarying vec3 vRefractionMapTexCoord;\nvarying vec3 vReflectionMapTexCoord;\nvarying vec3 vPosition;\n#include<clipPlaneFragmentDeclaration>\n#include<logDepthDeclaration>\n\n#include<fogFragmentDeclaration>\nvoid main(void) {\n\n#include<clipPlaneFragment>\nvec3 viewDirectionW=normalize(vEyePosition-vPositionW);\n\nvec4 baseColor=vec4(1.,1.,1.,1.);\nvec3 diffuseColor=vDiffuseColor.rgb;\n\nfloat alpha=vDiffuseColor.a;\n#ifdef BUMP\n#ifdef BUMPSUPERIMPOSE\nbaseColor=0.6*texture2D(normalSampler,vNormalUV)+0.4*texture2D(normalSampler,vec2(vNormalUV2.x,vNormalUV2.y));\n#else\nbaseColor=texture2D(normalSampler,vNormalUV);\n#endif\nvec3 bumpColor=baseColor.rgb;\n#ifdef ALPHATEST\nif (baseColor.a<0.4)\ndiscard;\n#endif\nbaseColor.rgb*=vNormalInfos.y;\n#else\nvec3 bumpColor=vec3(1.0);\n#endif\n#ifdef VERTEXCOLOR\nbaseColor.rgb*=vColor.rgb;\n#endif\n\n#ifdef NORMAL\nvec2 perturbation=bumpHeight*(baseColor.rg-0.5);\n#ifdef BUMPAFFECTSREFLECTION\nvec3 normalW=normalize(vNormalW+vec3(perturbation.x*8.0,0.0,perturbation.y*8.0));\nif (normalW.y<0.0) {\nnormalW.y=-normalW.y;\n}\n#else\nvec3 normalW=normalize(vNormalW);\n#endif\n#else\nvec3 normalW=vec3(1.0,1.0,1.0);\nvec2 perturbation=bumpHeight*(vec2(1.0,1.0)-0.5);\n#endif\n#ifdef FRESNELSEPARATE\n#ifdef REFLECTION\n\nvec3 eyeVector=normalize(vEyePosition-vPosition);\nvec2 projectedRefractionTexCoords=clamp(vRefractionMapTexCoord.xy/vRefractionMapTexCoord.z+perturbation*0.5,0.0,1.0);\nvec4 refractiveColor=texture2D(refractionSampler,projectedRefractionTexCoords);\nvec2 projectedReflectionTexCoords=clamp(vec2(\nvReflectionMapTexCoord.x/vReflectionMapTexCoord.z+perturbation.x*0.3,\nvReflectionMapTexCoord.y/vReflectionMapTexCoord.z+perturbation.y\n),0.0,1.0);\nvec4 reflectiveColor=texture2D(reflectionSampler,projectedReflectionTexCoords);\nvec3 upVector=vec3(0.0,1.0,0.0);\nfloat fresnelTerm=clamp(abs(pow(dot(eyeVector,upVector),3.0)),0.05,0.65);\nfloat IfresnelTerm=1.0-fresnelTerm;\nrefractiveColor=colorBlendFactor*waterColor+(1.0-colorBlendFactor)*refractiveColor;\nreflectiveColor=IfresnelTerm*colorBlendFactor2*waterColor+(1.0-colorBlendFactor2*IfresnelTerm)*reflectiveColor;\nvec4 combinedColor=refractiveColor*fresnelTerm+reflectiveColor*IfresnelTerm;\nbaseColor=combinedColor;\n#endif\n\nvec3 diffuseBase=vec3(0.,0.,0.);\nlightingInfo info;\nfloat shadow=1.;\n#ifdef SPECULARTERM\nfloat glossiness=vSpecularColor.a;\nvec3 specularBase=vec3(0.,0.,0.);\nvec3 specularColor=vSpecularColor.rgb;\n#else\nfloat glossiness=0.;\n#endif\n#include<lightFragment>[0..maxSimultaneousLights]\nvec3 finalDiffuse=clamp(baseColor.rgb,0.0,1.0);\n#ifdef VERTEXALPHA\nalpha*=vColor.a;\n#endif\n#ifdef SPECULARTERM\nvec3 finalSpecular=specularBase*specularColor;\n#else\nvec3 finalSpecular=vec3(0.0);\n#endif\n#else \n#ifdef REFLECTION\n\nvec3 eyeVector=normalize(vEyePosition-vPosition);\nvec2 projectedRefractionTexCoords=clamp(vRefractionMapTexCoord.xy/vRefractionMapTexCoord.z+perturbation,0.0,1.0);\nvec4 refractiveColor=texture2D(refractionSampler,projectedRefractionTexCoords);\nvec2 projectedReflectionTexCoords=clamp(vReflectionMapTexCoord.xy/vReflectionMapTexCoord.z+perturbation,0.0,1.0);\nvec4 reflectiveColor=texture2D(reflectionSampler,projectedReflectionTexCoords);\nvec3 upVector=vec3(0.0,1.0,0.0);\nfloat fresnelTerm=max(dot(eyeVector,upVector),0.0);\nvec4 combinedColor=refractiveColor*fresnelTerm+reflectiveColor*(1.0-fresnelTerm);\nbaseColor=colorBlendFactor*waterColor+(1.0-colorBlendFactor)*combinedColor;\n#endif\n\nvec3 diffuseBase=vec3(0.,0.,0.);\nlightingInfo info;\nfloat shadow=1.;\n#ifdef SPECULARTERM\nfloat glossiness=vSpecularColor.a;\nvec3 specularBase=vec3(0.,0.,0.);\nvec3 specularColor=vSpecularColor.rgb;\n#else\nfloat glossiness=0.;\n#endif\n#include<lightFragment>[0..maxSimultaneousLights]\nvec3 finalDiffuse=clamp(baseColor.rgb,0.0,1.0);\n#ifdef VERTEXALPHA\nalpha*=vColor.a;\n#endif\n#ifdef SPECULARTERM\nvec3 finalSpecular=specularBase*specularColor;\n#else\nvec3 finalSpecular=vec3(0.0);\n#endif\n#endif\n\nvec4 color=vec4(finalDiffuse+finalSpecular,alpha);\n#include<logDepthFragment>\n#include<fogFragment>\ngl_FragColor=color;\n}\n";
|