babylon.woodProceduralTexture.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /// <reference path="../../../dist/preview release/babylon.d.ts"/>
  2. var BABYLON;
  3. (function (BABYLON) {
  4. var WoodProceduralTexture = (function (_super) {
  5. __extends(WoodProceduralTexture, _super);
  6. function WoodProceduralTexture(name, size, scene, fallbackTexture, generateMipMaps) {
  7. _super.call(this, name, size, "woodProceduralTexture", scene, fallbackTexture, generateMipMaps);
  8. this._ampScale = 100.0;
  9. this._woodColor = new BABYLON.Color3(0.32, 0.17, 0.09);
  10. this.updateShaderUniforms();
  11. this.refreshRate = 0;
  12. }
  13. WoodProceduralTexture.prototype.updateShaderUniforms = function () {
  14. this.setFloat("ampScale", this._ampScale);
  15. this.setColor3("woodColor", this._woodColor);
  16. };
  17. Object.defineProperty(WoodProceduralTexture.prototype, "ampScale", {
  18. get: function () {
  19. return this._ampScale;
  20. },
  21. set: function (value) {
  22. this._ampScale = value;
  23. this.updateShaderUniforms();
  24. },
  25. enumerable: true,
  26. configurable: true
  27. });
  28. Object.defineProperty(WoodProceduralTexture.prototype, "woodColor", {
  29. get: function () {
  30. return this._woodColor;
  31. },
  32. set: function (value) {
  33. this._woodColor = value;
  34. this.updateShaderUniforms();
  35. },
  36. enumerable: true,
  37. configurable: true
  38. });
  39. return WoodProceduralTexture;
  40. })(BABYLON.ProceduralTexture);
  41. BABYLON.WoodProceduralTexture = WoodProceduralTexture;
  42. })(BABYLON || (BABYLON = {}));
  43. BABYLON.Effect.ShadersStore['woodProceduralTexturePixelShader'] = "precision highp float;\r\n\r\nvarying vec2 vPosition;\r\nvarying vec2 vUV;\r\n\r\nuniform float ampScale;\r\nuniform vec3 woodColor;\r\n\r\nfloat rand(vec2 n) {\r\n\treturn fract(cos(dot(n, vec2(12.9898, 4.1414))) * 43758.5453);\r\n}\r\n\r\nfloat noise(vec2 n) {\r\n\tconst vec2 d = vec2(0.0, 1.0);\r\n\tvec2 b = floor(n), f = smoothstep(vec2(0.0), vec2(1.0), fract(n));\r\n\treturn mix(mix(rand(b), rand(b + d.yx), f.x), mix(rand(b + d.xy), rand(b + d.yy), f.x), f.y);\r\n}\r\n\r\nfloat fbm(vec2 n) {\r\n\tfloat total = 0.0, amplitude = 1.0;\r\n\tfor (int i = 0; i < 4; i++) {\r\n\t\ttotal += noise(n) * amplitude;\r\n\t\tn += n;\r\n\t\tamplitude *= 0.5;\r\n\t}\r\n\treturn total;\r\n}\r\n\r\nvoid main(void) {\r\n\tfloat ratioy = mod(vUV.x * ampScale, 2.0 + fbm(vUV * 0.8));\r\n\tvec3 wood = woodColor * ratioy;\r\n\tgl_FragColor = vec4(wood, 1.0);\r\n}";