babylon.roadProceduralTexture.js 2.1 KB

12345678910111213141516171819202122232425262728293031
  1. /// <reference path="../../../dist/preview release/babylon.d.ts"/>
  2. var BABYLON;
  3. (function (BABYLON) {
  4. var RoadProceduralTexture = (function (_super) {
  5. __extends(RoadProceduralTexture, _super);
  6. function RoadProceduralTexture(name, size, scene, fallbackTexture, generateMipMaps) {
  7. _super.call(this, name, size, "roadProceduralTexture", scene, fallbackTexture, generateMipMaps);
  8. this._roadColor = new BABYLON.Color3(0.53, 0.53, 0.53);
  9. this.updateShaderUniforms();
  10. }
  11. RoadProceduralTexture.prototype.updateShaderUniforms = function () {
  12. this.setColor3("roadColor", this._roadColor);
  13. };
  14. Object.defineProperty(RoadProceduralTexture.prototype, "roadColor", {
  15. get: function () {
  16. return this._roadColor;
  17. },
  18. set: function (value) {
  19. this._roadColor = value;
  20. this.updateShaderUniforms();
  21. },
  22. enumerable: true,
  23. configurable: true
  24. });
  25. return RoadProceduralTexture;
  26. })(BABYLON.ProceduralTexture);
  27. BABYLON.RoadProceduralTexture = RoadProceduralTexture;
  28. })(BABYLON || (BABYLON = {}));
  29. BABYLON.Effect.ShadersStore['roadProceduralTexturePixelShader'] = "precision highp float;\r\n\r\nvarying vec2 vUV; \r\nuniform vec3 roadColor;\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(gl_FragCoord.y * 100.0 , fbm(vUV * 2.0));\r\n\tvec3 color = roadColor * ratioy;\r\n\tgl_FragColor = vec4(color, 1.0);\r\n}";