babylon.grassProceduralTexture.min.js 2.1 KB

1
  1. var BABYLON;!function(o){var r=function(r){function n(n,e,t,l,s){r.call(this,n,e,"grassProceduralTexture",t,l,s),this._herb1=new o.Color3(.29,.38,.02),this._herb2=new o.Color3(.36,.49,.09),this._herb3=new o.Color3(.51,.6,.28),this._groundColor=new o.Color3(1,1,1),this._grassColors=[new o.Color3(.29,.38,.02),new o.Color3(.36,.49,.09),new o.Color3(.51,.6,.28)],this.updateShaderUniforms(),this.refreshRate=0}return __extends(n,r),n.prototype.updateShaderUniforms=function(){this.setColor3("herb1Color",this._grassColors[0]),this.setColor3("herb2Color",this._grassColors[1]),this.setColor3("herb3Color",this._grassColors[2]),this.setColor3("groundColor",this._groundColor)},Object.defineProperty(n.prototype,"grassColors",{get:function(){return this._grassColors},set:function(o){this._grassColors=o,this.updateShaderUniforms()},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"groundColor",{get:function(){return this._groundColor},set:function(o){this.groundColor=o,this.updateShaderUniforms()},enumerable:!0,configurable:!0}),n}(o.ProceduralTexture);o.GrassProceduralTexture=r}(BABYLON||(BABYLON={})),BABYLON.Effect.ShadersStore.grassProceduralTexturePixelShader="precision highp float;\n\nvarying vec2 vPosition;\nvarying vec2 vUV;\n\nuniform vec3 herb1Color;\nuniform vec3 herb2Color;\nuniform vec3 herb3Color;\nuniform vec3 groundColor;\n\nfloat rand(vec2 n) {\n return fract(cos(dot(n, vec2(12.9898, 4.1414))) * 43758.5453);\n}\n\nfloat noise(vec2 n) {\n const vec2 d = vec2(0.0, 1.0);\n vec2 b = floor(n), f = smoothstep(vec2(0.0), vec2(1.0), fract(n));\n return mix(mix(rand(b), rand(b + d.yx), f.x), mix(rand(b + d.xy), rand(b + d.yy), f.x), f.y);\n}\n\nfloat fbm(vec2 n) {\n float total = 0.0, amplitude = 1.0;\n for (int i = 0; i < 4; i++) {\n total += noise(n) * amplitude;\n n += n;\n amplitude *= 0.5;\n }\n return total;\n}\n\nvoid main(void) {\n vec3 color = mix(groundColor, herb1Color, rand(gl_FragCoord.xy * 4.0));\n color = mix(color, herb2Color, rand(gl_FragCoord.xy * 8.0));\n color = mix(color, herb3Color, rand(gl_FragCoord.xy));\n color = mix(color, herb1Color, fbm(gl_FragCoord.xy * 16.0));\n gl_FragColor = vec4(color, 1.0);\n}";