babylon.cloudProceduralTexture.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /// <reference path="../../../dist/preview release/babylon.d.ts"/>
  2. var BABYLON;
  3. (function (BABYLON) {
  4. var CloudProceduralTexture = (function (_super) {
  5. __extends(CloudProceduralTexture, _super);
  6. function CloudProceduralTexture(name, size, scene, fallbackTexture, generateMipMaps) {
  7. _super.call(this, name, size, "cloudProceduralTexture", scene, fallbackTexture, generateMipMaps);
  8. this._skyColor = new BABYLON.Color4(0.15, 0.68, 1.0, 1.0);
  9. this._cloudColor = new BABYLON.Color4(1, 1, 1, 1.0);
  10. this.updateShaderUniforms();
  11. }
  12. CloudProceduralTexture.prototype.updateShaderUniforms = function () {
  13. this.setColor4("skyColor", this._skyColor);
  14. this.setColor4("cloudColor", this._cloudColor);
  15. };
  16. Object.defineProperty(CloudProceduralTexture.prototype, "skyColor", {
  17. get: function () {
  18. return this._skyColor;
  19. },
  20. set: function (value) {
  21. this._skyColor = value;
  22. this.updateShaderUniforms();
  23. },
  24. enumerable: true,
  25. configurable: true
  26. });
  27. Object.defineProperty(CloudProceduralTexture.prototype, "cloudColor", {
  28. get: function () {
  29. return this._cloudColor;
  30. },
  31. set: function (value) {
  32. this._cloudColor = value;
  33. this.updateShaderUniforms();
  34. },
  35. enumerable: true,
  36. configurable: true
  37. });
  38. return CloudProceduralTexture;
  39. })(BABYLON.ProceduralTexture);
  40. BABYLON.CloudProceduralTexture = CloudProceduralTexture;
  41. })(BABYLON || (BABYLON = {}));
  42. BABYLON.Effect.ShadersStore['cloudProceduralTexturePixelShader'] = "precision highp float;\r\n\r\nvarying vec2 vUV;\r\n\r\nuniform vec4 skyColor;\r\nuniform vec4 cloudColor;\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() {\r\n\r\n\tvec2 p = vUV * 12.0;\r\n\tvec4 c = mix(skyColor, cloudColor, fbm(p));\r\n\tgl_FragColor = c;\r\n\r\n}\r\n\r\n";