babylon.woodProceduralTexture.min.js 1.6 KB

1
  1. var BABYLON;!function(o){var e=function(e){function n(n,t,r,a,i){e.call(this,n,t,"woodProceduralTexture",r,a,i),this._ampScale=100,this._woodColor=new o.Color3(.32,.17,.09),this.updateShaderUniforms(),this.refreshRate=0}return __extends(n,e),n.prototype.updateShaderUniforms=function(){this.setFloat("ampScale",this._ampScale),this.setColor3("woodColor",this._woodColor)},Object.defineProperty(n.prototype,"ampScale",{get:function(){return this._ampScale},set:function(o){this._ampScale=o,this.updateShaderUniforms()},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"woodColor",{get:function(){return this._woodColor},set:function(o){this._woodColor=o,this.updateShaderUniforms()},enumerable:!0,configurable:!0}),n}(o.ProceduralTexture);o.WoodProceduralTexture=e}(BABYLON||(BABYLON={})),BABYLON.Effect.ShadersStore.woodProceduralTexturePixelShader="precision highp float;\n\nvarying vec2 vPosition;\nvarying vec2 vUV;\n\nuniform float ampScale;\nuniform vec3 woodColor;\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 float ratioy = mod(vUV.x * ampScale, 2.0 + fbm(vUV * 0.8));\n vec3 wood = woodColor * ratioy;\n gl_FragColor = vec4(wood, 1.0);\n}";