babylonjs.proceduralTextures.js 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773
  1. var __decorate=this&&this.__decorate||function(e,t,r,c){var o,f=arguments.length,n=f<3?t:null===c?c=Object.getOwnPropertyDescriptor(t,r):c;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,r,c);else for(var l=e.length-1;l>=0;l--)(o=e[l])&&(n=(f<3?o(n):f>3?o(t,r,n):o(t,r))||n);return f>3&&n&&Object.defineProperty(t,r,n),n};
  2. var __extends=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,o){t.__proto__=o}||function(t,o){for(var n in o)o.hasOwnProperty(n)&&(t[n]=o[n])};return function(o,n){function r(){this.constructor=o}t(o,n),o.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();
  3. (function universalModuleDefinition(root, factory) {
  4. var amdDependencies = [];
  5. var BABYLON = root. BABYLON;
  6. if(!BABYLON) {
  7. if(typeof exports === 'object') {
  8. BABYLON = require("babylonjs");
  9. } else if(typeof define === 'function' && define.amd) {
  10. amdDependencies.push("babylonjs");
  11. }
  12. } else {
  13. if(typeof define === 'function' && define.amd) {
  14. if(!(require.specified && require.specified("' + dep.module + '"))) {
  15. try { define("babylonjs", [], function () { return BABYLON; }); } catch(e) { }
  16. }
  17. amdDependencies.push("babylonjs");
  18. }
  19. }
  20. if(typeof exports === 'object' && typeof module === 'object')
  21. module.exports = factory(BABYLON);
  22. else if(typeof define === 'function' && define.amd)
  23. define("babylonjs-procedural-textures", amdDependencies, factory);
  24. else if(typeof exports === 'object')
  25. exports["babylonjs-procedural-textures"] = factory(BABYLON);
  26. else {
  27. root["BABYLON"] = factory(BABYLON);
  28. }
  29. })(this, function(BABYLON) {
  30. "use strict";
  31. var BABYLON;
  32. (function (BABYLON) {
  33. var WoodProceduralTexture = /** @class */ (function (_super) {
  34. __extends(WoodProceduralTexture, _super);
  35. function WoodProceduralTexture(name, size, scene, fallbackTexture, generateMipMaps) {
  36. var _this = _super.call(this, name, size, "woodProceduralTexture", scene, fallbackTexture, generateMipMaps) || this;
  37. _this._ampScale = 100.0;
  38. _this._woodColor = new BABYLON.Color3(0.32, 0.17, 0.09);
  39. _this.updateShaderUniforms();
  40. return _this;
  41. }
  42. WoodProceduralTexture.prototype.updateShaderUniforms = function () {
  43. this.setFloat("ampScale", this._ampScale);
  44. this.setColor3("woodColor", this._woodColor);
  45. };
  46. Object.defineProperty(WoodProceduralTexture.prototype, "ampScale", {
  47. get: function () {
  48. return this._ampScale;
  49. },
  50. set: function (value) {
  51. this._ampScale = value;
  52. this.updateShaderUniforms();
  53. },
  54. enumerable: true,
  55. configurable: true
  56. });
  57. Object.defineProperty(WoodProceduralTexture.prototype, "woodColor", {
  58. get: function () {
  59. return this._woodColor;
  60. },
  61. set: function (value) {
  62. this._woodColor = value;
  63. this.updateShaderUniforms();
  64. },
  65. enumerable: true,
  66. configurable: true
  67. });
  68. return WoodProceduralTexture;
  69. }(BABYLON.ProceduralTexture));
  70. BABYLON.WoodProceduralTexture = WoodProceduralTexture;
  71. })(BABYLON || (BABYLON = {}));
  72. //# sourceMappingURL=babylon.woodProceduralTexture.js.map
  73. BABYLON.Effect.ShadersStore['woodProceduralTexturePixelShader'] = "precision highp float;\nvarying vec2 vPosition;\nvarying vec2 vUV;\nuniform float ampScale;\nuniform vec3 woodColor;\nfloat rand(vec2 n) {\nreturn fract(cos(dot(n,vec2(12.9898,4.1414)))*43758.5453);\n}\nfloat noise(vec2 n) {\nconst vec2 d=vec2(0.0,1.0);\nvec2 b=floor(n),f=smoothstep(vec2(0.0),vec2(1.0),fract(n));\nreturn mix(mix(rand(b),rand(b+d.yx),f.x),mix(rand(b+d.xy),rand(b+d.yy),f.x),f.y);\n}\nfloat fbm(vec2 n) {\nfloat total=0.0,amplitude=1.0;\nfor (int i=0; i<4; i++) {\ntotal+=noise(n)*amplitude;\nn+=n;\namplitude*=0.5;\n}\nreturn total;\n}\nvoid main(void) {\nfloat ratioy=mod(vUV.x*ampScale,2.0+fbm(vUV*0.8));\nvec3 wood=woodColor*ratioy;\ngl_FragColor=vec4(wood,1.0);\n}";
  74. "use strict";
  75. var BABYLON;
  76. (function (BABYLON) {
  77. var FireProceduralTexture = /** @class */ (function (_super) {
  78. __extends(FireProceduralTexture, _super);
  79. function FireProceduralTexture(name, size, scene, fallbackTexture, generateMipMaps) {
  80. var _this = _super.call(this, name, size, "fireProceduralTexture", scene, fallbackTexture, generateMipMaps) || this;
  81. _this._time = 0.0;
  82. _this._speed = new BABYLON.Vector2(0.5, 0.3);
  83. _this._autoGenerateTime = true;
  84. _this._alphaThreshold = 0.5;
  85. _this._fireColors = FireProceduralTexture.RedFireColors;
  86. _this.updateShaderUniforms();
  87. return _this;
  88. }
  89. FireProceduralTexture.prototype.updateShaderUniforms = function () {
  90. this.setFloat("time", this._time);
  91. this.setVector2("speed", this._speed);
  92. this.setColor3("c1", this._fireColors[0]);
  93. this.setColor3("c2", this._fireColors[1]);
  94. this.setColor3("c3", this._fireColors[2]);
  95. this.setColor3("c4", this._fireColors[3]);
  96. this.setColor3("c5", this._fireColors[4]);
  97. this.setColor3("c6", this._fireColors[5]);
  98. this.setFloat("alphaThreshold", this._alphaThreshold);
  99. };
  100. FireProceduralTexture.prototype.render = function (useCameraPostProcess) {
  101. var scene = this.getScene();
  102. if (this._autoGenerateTime && scene) {
  103. this._time += scene.getAnimationRatio() * 0.03;
  104. this.updateShaderUniforms();
  105. }
  106. _super.prototype.render.call(this, useCameraPostProcess);
  107. };
  108. Object.defineProperty(FireProceduralTexture, "PurpleFireColors", {
  109. get: function () {
  110. return [
  111. new BABYLON.Color3(0.5, 0.0, 1.0),
  112. new BABYLON.Color3(0.9, 0.0, 1.0),
  113. new BABYLON.Color3(0.2, 0.0, 1.0),
  114. new BABYLON.Color3(1.0, 0.9, 1.0),
  115. new BABYLON.Color3(0.1, 0.1, 1.0),
  116. new BABYLON.Color3(0.9, 0.9, 1.0)
  117. ];
  118. },
  119. enumerable: true,
  120. configurable: true
  121. });
  122. Object.defineProperty(FireProceduralTexture, "GreenFireColors", {
  123. get: function () {
  124. return [
  125. new BABYLON.Color3(0.5, 1.0, 0.0),
  126. new BABYLON.Color3(0.5, 1.0, 0.0),
  127. new BABYLON.Color3(0.3, 0.4, 0.0),
  128. new BABYLON.Color3(0.5, 1.0, 0.0),
  129. new BABYLON.Color3(0.2, 0.0, 0.0),
  130. new BABYLON.Color3(0.5, 1.0, 0.0)
  131. ];
  132. },
  133. enumerable: true,
  134. configurable: true
  135. });
  136. Object.defineProperty(FireProceduralTexture, "RedFireColors", {
  137. get: function () {
  138. return [
  139. new BABYLON.Color3(0.5, 0.0, 0.1),
  140. new BABYLON.Color3(0.9, 0.0, 0.0),
  141. new BABYLON.Color3(0.2, 0.0, 0.0),
  142. new BABYLON.Color3(1.0, 0.9, 0.0),
  143. new BABYLON.Color3(0.1, 0.1, 0.1),
  144. new BABYLON.Color3(0.9, 0.9, 0.9)
  145. ];
  146. },
  147. enumerable: true,
  148. configurable: true
  149. });
  150. Object.defineProperty(FireProceduralTexture, "BlueFireColors", {
  151. get: function () {
  152. return [
  153. new BABYLON.Color3(0.1, 0.0, 0.5),
  154. new BABYLON.Color3(0.0, 0.0, 0.5),
  155. new BABYLON.Color3(0.1, 0.0, 0.2),
  156. new BABYLON.Color3(0.0, 0.0, 1.0),
  157. new BABYLON.Color3(0.1, 0.2, 0.3),
  158. new BABYLON.Color3(0.0, 0.2, 0.9)
  159. ];
  160. },
  161. enumerable: true,
  162. configurable: true
  163. });
  164. Object.defineProperty(FireProceduralTexture.prototype, "fireColors", {
  165. get: function () {
  166. return this._fireColors;
  167. },
  168. set: function (value) {
  169. this._fireColors = value;
  170. this.updateShaderUniforms();
  171. },
  172. enumerable: true,
  173. configurable: true
  174. });
  175. Object.defineProperty(FireProceduralTexture.prototype, "time", {
  176. get: function () {
  177. return this._time;
  178. },
  179. set: function (value) {
  180. this._time = value;
  181. this.updateShaderUniforms();
  182. },
  183. enumerable: true,
  184. configurable: true
  185. });
  186. Object.defineProperty(FireProceduralTexture.prototype, "speed", {
  187. get: function () {
  188. return this._speed;
  189. },
  190. set: function (value) {
  191. this._speed = value;
  192. this.updateShaderUniforms();
  193. },
  194. enumerable: true,
  195. configurable: true
  196. });
  197. Object.defineProperty(FireProceduralTexture.prototype, "alphaThreshold", {
  198. get: function () {
  199. return this._alphaThreshold;
  200. },
  201. set: function (value) {
  202. this._alphaThreshold = value;
  203. this.updateShaderUniforms();
  204. },
  205. enumerable: true,
  206. configurable: true
  207. });
  208. return FireProceduralTexture;
  209. }(BABYLON.ProceduralTexture));
  210. BABYLON.FireProceduralTexture = FireProceduralTexture;
  211. })(BABYLON || (BABYLON = {}));
  212. //# sourceMappingURL=babylon.fireProceduralTexture.js.map
  213. BABYLON.Effect.ShadersStore['fireProceduralTexturePixelShader'] = "precision highp float;\nuniform float time;\nuniform vec3 c1;\nuniform vec3 c2;\nuniform vec3 c3;\nuniform vec3 c4;\nuniform vec3 c5;\nuniform vec3 c6;\nuniform vec2 speed;\nuniform float shift;\nuniform float alphaThreshold;\nvarying vec2 vUV;\nfloat rand(vec2 n) {\nreturn fract(cos(dot(n,vec2(12.9898,4.1414)))*43758.5453);\n}\nfloat noise(vec2 n) {\nconst vec2 d=vec2(0.0,1.0);\nvec2 b=floor(n),f=smoothstep(vec2(0.0),vec2(1.0),fract(n));\nreturn mix(mix(rand(b),rand(b+d.yx),f.x),mix(rand(b+d.xy),rand(b+d.yy),f.x),f.y);\n}\nfloat fbm(vec2 n) {\nfloat total=0.0,amplitude=1.0;\nfor (int i=0; i<4; i++) {\ntotal+=noise(n)*amplitude;\nn+=n;\namplitude*=0.5;\n}\nreturn total;\n}\nvoid main() {\nvec2 p=vUV*8.0;\nfloat q=fbm(p-time*0.1);\nvec2 r=vec2(fbm(p+q+time*speed.x-p.x-p.y),fbm(p+q-time*speed.y));\nvec3 c=mix(c1,c2,fbm(p+r))+mix(c3,c4,r.x)-mix(c5,c6,r.y);\nvec3 color=c*cos(shift*vUV.y);\nfloat luminance=dot(color.rgb,vec3(0.3,0.59,0.11));\ngl_FragColor=vec4(color,luminance*alphaThreshold+(1.0-alphaThreshold));\n}";
  214. "use strict";
  215. var BABYLON;
  216. (function (BABYLON) {
  217. var CloudProceduralTexture = /** @class */ (function (_super) {
  218. __extends(CloudProceduralTexture, _super);
  219. function CloudProceduralTexture(name, size, scene, fallbackTexture, generateMipMaps) {
  220. var _this = _super.call(this, name, size, "cloudProceduralTexture", scene, fallbackTexture, generateMipMaps) || this;
  221. _this._skyColor = new BABYLON.Color4(0.15, 0.68, 1.0, 1.0);
  222. _this._cloudColor = new BABYLON.Color4(1, 1, 1, 1.0);
  223. _this.updateShaderUniforms();
  224. return _this;
  225. }
  226. CloudProceduralTexture.prototype.updateShaderUniforms = function () {
  227. this.setColor4("skyColor", this._skyColor);
  228. this.setColor4("cloudColor", this._cloudColor);
  229. };
  230. Object.defineProperty(CloudProceduralTexture.prototype, "skyColor", {
  231. get: function () {
  232. return this._skyColor;
  233. },
  234. set: function (value) {
  235. this._skyColor = value;
  236. this.updateShaderUniforms();
  237. },
  238. enumerable: true,
  239. configurable: true
  240. });
  241. Object.defineProperty(CloudProceduralTexture.prototype, "cloudColor", {
  242. get: function () {
  243. return this._cloudColor;
  244. },
  245. set: function (value) {
  246. this._cloudColor = value;
  247. this.updateShaderUniforms();
  248. },
  249. enumerable: true,
  250. configurable: true
  251. });
  252. return CloudProceduralTexture;
  253. }(BABYLON.ProceduralTexture));
  254. BABYLON.CloudProceduralTexture = CloudProceduralTexture;
  255. })(BABYLON || (BABYLON = {}));
  256. //# sourceMappingURL=babylon.cloudProceduralTexture.js.map
  257. BABYLON.Effect.ShadersStore['cloudProceduralTexturePixelShader'] = "precision highp float;\nvarying vec2 vUV;\nuniform vec4 skyColor;\nuniform vec4 cloudColor;\nfloat rand(vec2 n) {\nreturn fract(cos(dot(n,vec2(12.9898,4.1414)))*43758.5453);\n}\nfloat noise(vec2 n) {\nconst vec2 d=vec2(0.0,1.0);\nvec2 b=floor(n),f=smoothstep(vec2(0.0),vec2(1.0),fract(n));\nreturn mix(mix(rand(b),rand(b+d.yx),f.x),mix(rand(b+d.xy),rand(b+d.yy),f.x),f.y);\n}\nfloat fbm(vec2 n) {\nfloat total=0.0,amplitude=1.0;\nfor (int i=0; i<4; i++) {\ntotal+=noise(n)*amplitude;\nn+=n;\namplitude*=0.5;\n}\nreturn total;\n}\nvoid main() {\nvec2 p=vUV*12.0;\nvec4 c=mix(skyColor,cloudColor,fbm(p));\ngl_FragColor=c;\n}\n";
  258. "use strict";
  259. var BABYLON;
  260. (function (BABYLON) {
  261. var GrassProceduralTexture = /** @class */ (function (_super) {
  262. __extends(GrassProceduralTexture, _super);
  263. function GrassProceduralTexture(name, size, scene, fallbackTexture, generateMipMaps) {
  264. var _this = _super.call(this, name, size, "grassProceduralTexture", scene, fallbackTexture, generateMipMaps) || this;
  265. _this._groundColor = new BABYLON.Color3(1, 1, 1);
  266. _this._grassColors = [
  267. new BABYLON.Color3(0.29, 0.38, 0.02),
  268. new BABYLON.Color3(0.36, 0.49, 0.09),
  269. new BABYLON.Color3(0.51, 0.6, 0.28)
  270. ];
  271. _this.updateShaderUniforms();
  272. return _this;
  273. }
  274. GrassProceduralTexture.prototype.updateShaderUniforms = function () {
  275. this.setColor3("herb1Color", this._grassColors[0]);
  276. this.setColor3("herb2Color", this._grassColors[1]);
  277. this.setColor3("herb3Color", this._grassColors[2]);
  278. this.setColor3("groundColor", this._groundColor);
  279. };
  280. Object.defineProperty(GrassProceduralTexture.prototype, "grassColors", {
  281. get: function () {
  282. return this._grassColors;
  283. },
  284. set: function (value) {
  285. this._grassColors = value;
  286. this.updateShaderUniforms();
  287. },
  288. enumerable: true,
  289. configurable: true
  290. });
  291. Object.defineProperty(GrassProceduralTexture.prototype, "groundColor", {
  292. get: function () {
  293. return this._groundColor;
  294. },
  295. set: function (value) {
  296. this._groundColor = value;
  297. this.updateShaderUniforms();
  298. },
  299. enumerable: true,
  300. configurable: true
  301. });
  302. return GrassProceduralTexture;
  303. }(BABYLON.ProceduralTexture));
  304. BABYLON.GrassProceduralTexture = GrassProceduralTexture;
  305. })(BABYLON || (BABYLON = {}));
  306. //# sourceMappingURL=babylon.grassProceduralTexture.js.map
  307. BABYLON.Effect.ShadersStore['grassProceduralTexturePixelShader'] = "precision highp float;\nvarying vec2 vPosition;\nvarying vec2 vUV;\nuniform vec3 herb1Color;\nuniform vec3 herb2Color;\nuniform vec3 herb3Color;\nuniform vec3 groundColor;\nfloat rand(vec2 n) {\nreturn fract(cos(dot(n,vec2(12.9898,4.1414)))*43758.5453);\n}\nfloat noise(vec2 n) {\nconst vec2 d=vec2(0.0,1.0);\nvec2 b=floor(n),f=smoothstep(vec2(0.0),vec2(1.0),fract(n));\nreturn mix(mix(rand(b),rand(b+d.yx),f.x),mix(rand(b+d.xy),rand(b+d.yy),f.x),f.y);\n}\nfloat fbm(vec2 n) {\nfloat total=0.0,amplitude=1.0;\nfor (int i=0; i<4; i++) {\ntotal+=noise(n)*amplitude;\nn+=n;\namplitude*=0.5;\n}\nreturn total;\n}\nvoid main(void) {\nvec3 color=mix(groundColor,herb1Color,rand(gl_FragCoord.xy*4.0));\ncolor=mix(color,herb2Color,rand(gl_FragCoord.xy*8.0));\ncolor=mix(color,herb3Color,rand(gl_FragCoord.xy));\ncolor=mix(color,herb1Color,fbm(gl_FragCoord.xy*16.0));\ngl_FragColor=vec4(color,1.0);\n}";
  308. "use strict";
  309. var BABYLON;
  310. (function (BABYLON) {
  311. var RoadProceduralTexture = /** @class */ (function (_super) {
  312. __extends(RoadProceduralTexture, _super);
  313. function RoadProceduralTexture(name, size, scene, fallbackTexture, generateMipMaps) {
  314. var _this = _super.call(this, name, size, "roadProceduralTexture", scene, fallbackTexture, generateMipMaps) || this;
  315. _this._roadColor = new BABYLON.Color3(0.53, 0.53, 0.53);
  316. _this.updateShaderUniforms();
  317. return _this;
  318. }
  319. RoadProceduralTexture.prototype.updateShaderUniforms = function () {
  320. this.setColor3("roadColor", this._roadColor);
  321. };
  322. Object.defineProperty(RoadProceduralTexture.prototype, "roadColor", {
  323. get: function () {
  324. return this._roadColor;
  325. },
  326. set: function (value) {
  327. this._roadColor = value;
  328. this.updateShaderUniforms();
  329. },
  330. enumerable: true,
  331. configurable: true
  332. });
  333. return RoadProceduralTexture;
  334. }(BABYLON.ProceduralTexture));
  335. BABYLON.RoadProceduralTexture = RoadProceduralTexture;
  336. })(BABYLON || (BABYLON = {}));
  337. //# sourceMappingURL=babylon.roadProceduralTexture.js.map
  338. BABYLON.Effect.ShadersStore['roadProceduralTexturePixelShader'] = "precision highp float;\nvarying vec2 vUV; \nuniform vec3 roadColor;\nfloat rand(vec2 n) {\nreturn fract(cos(dot(n,vec2(12.9898,4.1414)))*43758.5453);\n}\nfloat noise(vec2 n) {\nconst vec2 d=vec2(0.0,1.0);\nvec2 b=floor(n),f=smoothstep(vec2(0.0),vec2(1.0),fract(n));\nreturn mix(mix(rand(b),rand(b+d.yx),f.x),mix(rand(b+d.xy),rand(b+d.yy),f.x),f.y);\n}\nfloat fbm(vec2 n) {\nfloat total=0.0,amplitude=1.0;\nfor (int i=0; i<4; i++) {\ntotal+=noise(n)*amplitude;\nn+=n;\namplitude*=0.5;\n}\nreturn total;\n}\nvoid main(void) {\nfloat ratioy=mod(gl_FragCoord.y*100.0 ,fbm(vUV*2.0));\nvec3 color=roadColor*ratioy;\ngl_FragColor=vec4(color,1.0);\n}";
  339. "use strict";
  340. var BABYLON;
  341. (function (BABYLON) {
  342. var BrickProceduralTexture = /** @class */ (function (_super) {
  343. __extends(BrickProceduralTexture, _super);
  344. function BrickProceduralTexture(name, size, scene, fallbackTexture, generateMipMaps) {
  345. var _this = _super.call(this, name, size, "brickProceduralTexture", scene, fallbackTexture, generateMipMaps) || this;
  346. _this._numberOfBricksHeight = 15;
  347. _this._numberOfBricksWidth = 5;
  348. _this._jointColor = new BABYLON.Color3(0.72, 0.72, 0.72);
  349. _this._brickColor = new BABYLON.Color3(0.77, 0.47, 0.40);
  350. _this.updateShaderUniforms();
  351. return _this;
  352. }
  353. BrickProceduralTexture.prototype.updateShaderUniforms = function () {
  354. this.setFloat("numberOfBricksHeight", this._numberOfBricksHeight);
  355. this.setFloat("numberOfBricksWidth", this._numberOfBricksWidth);
  356. this.setColor3("brickColor", this._brickColor);
  357. this.setColor3("jointColor", this._jointColor);
  358. };
  359. Object.defineProperty(BrickProceduralTexture.prototype, "numberOfBricksHeight", {
  360. get: function () {
  361. return this._numberOfBricksHeight;
  362. },
  363. set: function (value) {
  364. this._numberOfBricksHeight = value;
  365. this.updateShaderUniforms();
  366. },
  367. enumerable: true,
  368. configurable: true
  369. });
  370. Object.defineProperty(BrickProceduralTexture.prototype, "numberOfBricksWidth", {
  371. get: function () {
  372. return this._numberOfBricksWidth;
  373. },
  374. set: function (value) {
  375. this._numberOfBricksWidth = value;
  376. this.updateShaderUniforms();
  377. },
  378. enumerable: true,
  379. configurable: true
  380. });
  381. Object.defineProperty(BrickProceduralTexture.prototype, "jointColor", {
  382. get: function () {
  383. return this._jointColor;
  384. },
  385. set: function (value) {
  386. this._jointColor = value;
  387. this.updateShaderUniforms();
  388. },
  389. enumerable: true,
  390. configurable: true
  391. });
  392. Object.defineProperty(BrickProceduralTexture.prototype, "brickColor", {
  393. get: function () {
  394. return this._brickColor;
  395. },
  396. set: function (value) {
  397. this._brickColor = value;
  398. this.updateShaderUniforms();
  399. },
  400. enumerable: true,
  401. configurable: true
  402. });
  403. return BrickProceduralTexture;
  404. }(BABYLON.ProceduralTexture));
  405. BABYLON.BrickProceduralTexture = BrickProceduralTexture;
  406. })(BABYLON || (BABYLON = {}));
  407. //# sourceMappingURL=babylon.brickProceduralTexture.js.map
  408. BABYLON.Effect.ShadersStore['brickProceduralTexturePixelShader'] = "precision highp float;\nvarying vec2 vPosition;\nvarying vec2 vUV;\nuniform float numberOfBricksHeight;\nuniform float numberOfBricksWidth;\nuniform vec3 brickColor;\nuniform vec3 jointColor;\nfloat rand(vec2 n) {\nreturn fract(cos(dot(n,vec2(12.9898,4.1414)))*43758.5453);\n}\nfloat noise(vec2 n) {\nconst vec2 d=vec2(0.0,1.0);\nvec2 b=floor(n),f=smoothstep(vec2(0.0),vec2(1.0),fract(n));\nreturn mix(mix(rand(b),rand(b+d.yx),f.x),mix(rand(b+d.xy),rand(b+d.yy),f.x),f.y);\n}\nfloat fbm(vec2 n) {\nfloat total=0.0,amplitude=1.0;\nfor (int i=0; i<4; i++) {\ntotal+=noise(n)*amplitude;\nn+=n;\namplitude*=0.5;\n}\nreturn total;\n}\nfloat roundF(float number){\nreturn sign(number)*floor(abs(number)+0.5);\n}\nvoid main(void)\n{\nfloat brickW=1.0/numberOfBricksWidth;\nfloat brickH=1.0/numberOfBricksHeight;\nfloat jointWPercentage=0.01;\nfloat jointHPercentage=0.05;\nvec3 color=brickColor;\nfloat yi=vUV.y/brickH;\nfloat nyi=roundF(yi);\nfloat xi=vUV.x/brickW;\nif (mod(floor(yi),2.0) == 0.0){\nxi=xi-0.5;\n}\nfloat nxi=roundF(xi);\nvec2 brickvUV=vec2((xi-floor(xi))/brickH,(yi-floor(yi))/brickW);\nif (yi<nyi+jointHPercentage && yi>nyi-jointHPercentage){\ncolor=mix(jointColor,vec3(0.37,0.25,0.25),(yi-nyi)/jointHPercentage+0.2);\n}\nelse if (xi<nxi+jointWPercentage && xi>nxi-jointWPercentage){\ncolor=mix(jointColor,vec3(0.44,0.44,0.44),(xi-nxi)/jointWPercentage+0.2);\n}\nelse {\nfloat brickColorSwitch=mod(floor(yi)+floor(xi),3.0);\nif (brickColorSwitch == 0.0)\ncolor=mix(color,vec3(0.33,0.33,0.33),0.3);\nelse if (brickColorSwitch == 2.0)\ncolor=mix(color,vec3(0.11,0.11,0.11),0.3);\n}\ngl_FragColor=vec4(color,1.0);\n}";
  409. "use strict";
  410. var BABYLON;
  411. (function (BABYLON) {
  412. var MarbleProceduralTexture = /** @class */ (function (_super) {
  413. __extends(MarbleProceduralTexture, _super);
  414. function MarbleProceduralTexture(name, size, scene, fallbackTexture, generateMipMaps) {
  415. var _this = _super.call(this, name, size, "marbleProceduralTexture", scene, fallbackTexture, generateMipMaps) || this;
  416. _this._numberOfTilesHeight = 3;
  417. _this._numberOfTilesWidth = 3;
  418. _this._amplitude = 9.0;
  419. _this._jointColor = new BABYLON.Color3(0.72, 0.72, 0.72);
  420. _this.updateShaderUniforms();
  421. return _this;
  422. }
  423. MarbleProceduralTexture.prototype.updateShaderUniforms = function () {
  424. this.setFloat("numberOfTilesHeight", this._numberOfTilesHeight);
  425. this.setFloat("numberOfTilesWidth", this._numberOfTilesWidth);
  426. this.setFloat("amplitude", this._amplitude);
  427. this.setColor3("jointColor", this._jointColor);
  428. };
  429. Object.defineProperty(MarbleProceduralTexture.prototype, "numberOfTilesHeight", {
  430. get: function () {
  431. return this._numberOfTilesHeight;
  432. },
  433. set: function (value) {
  434. this._numberOfTilesHeight = value;
  435. this.updateShaderUniforms();
  436. },
  437. enumerable: true,
  438. configurable: true
  439. });
  440. Object.defineProperty(MarbleProceduralTexture.prototype, "amplitude", {
  441. get: function () {
  442. return this._amplitude;
  443. },
  444. set: function (value) {
  445. this._amplitude = value;
  446. this.updateShaderUniforms();
  447. },
  448. enumerable: true,
  449. configurable: true
  450. });
  451. Object.defineProperty(MarbleProceduralTexture.prototype, "numberOfTilesWidth", {
  452. get: function () {
  453. return this._numberOfTilesWidth;
  454. },
  455. set: function (value) {
  456. this._numberOfTilesWidth = value;
  457. this.updateShaderUniforms();
  458. },
  459. enumerable: true,
  460. configurable: true
  461. });
  462. Object.defineProperty(MarbleProceduralTexture.prototype, "jointColor", {
  463. get: function () {
  464. return this._jointColor;
  465. },
  466. set: function (value) {
  467. this._jointColor = value;
  468. this.updateShaderUniforms();
  469. },
  470. enumerable: true,
  471. configurable: true
  472. });
  473. return MarbleProceduralTexture;
  474. }(BABYLON.ProceduralTexture));
  475. BABYLON.MarbleProceduralTexture = MarbleProceduralTexture;
  476. })(BABYLON || (BABYLON = {}));
  477. //# sourceMappingURL=babylon.marbleProceduralTexture.js.map
  478. BABYLON.Effect.ShadersStore['marbleProceduralTexturePixelShader'] = "precision highp float;\nvarying vec2 vPosition;\nvarying vec2 vUV;\nuniform float numberOfTilesHeight;\nuniform float numberOfTilesWidth;\nuniform float amplitude;\nuniform vec3 marbleColor;\nuniform vec3 jointColor;\nconst vec3 tileSize=vec3(1.1,1.0,1.1);\nconst vec3 tilePct=vec3(0.98,1.0,0.98);\nfloat rand(vec2 n) {\nreturn fract(cos(dot(n,vec2(12.9898,4.1414)))*43758.5453);\n}\nfloat noise(vec2 n) {\nconst vec2 d=vec2(0.0,1.0);\nvec2 b=floor(n),f=smoothstep(vec2(0.0),vec2(1.0),fract(n));\nreturn mix(mix(rand(b),rand(b+d.yx),f.x),mix(rand(b+d.xy),rand(b+d.yy),f.x),f.y);\n}\nfloat turbulence(vec2 P)\n{\nfloat val=0.0;\nfloat freq=1.0;\nfor (int i=0; i<4; i++)\n{\nval+=abs(noise(P*freq)/freq);\nfreq*=2.07;\n}\nreturn val;\n}\nfloat roundF(float number){\nreturn sign(number)*floor(abs(number)+0.5);\n}\nvec3 marble_color(float x)\n{\nvec3 col;\nx=0.5*(x+1.);\nx=sqrt(x); \nx=sqrt(x);\nx=sqrt(x);\ncol=vec3(.2+.75*x); \ncol.b*=0.95; \nreturn col;\n}\nvoid main()\n{\nfloat brickW=1.0/numberOfTilesWidth;\nfloat brickH=1.0/numberOfTilesHeight;\nfloat jointWPercentage=0.01;\nfloat jointHPercentage=0.01;\nvec3 color=marbleColor;\nfloat yi=vUV.y/brickH;\nfloat nyi=roundF(yi);\nfloat xi=vUV.x/brickW;\nif (mod(floor(yi),2.0) == 0.0){\nxi=xi-0.5;\n}\nfloat nxi=roundF(xi);\nvec2 brickvUV=vec2((xi-floor(xi))/brickH,(yi-floor(yi))/brickW);\nif (yi<nyi+jointHPercentage && yi>nyi-jointHPercentage){\ncolor=mix(jointColor,vec3(0.37,0.25,0.25),(yi-nyi)/jointHPercentage+0.2);\n}\nelse if (xi<nxi+jointWPercentage && xi>nxi-jointWPercentage){\ncolor=mix(jointColor,vec3(0.44,0.44,0.44),(xi-nxi)/jointWPercentage+0.2);\n}\nelse {\nfloat t=6.28*brickvUV.x/(tileSize.x+noise(vec2(vUV)*6.0));\nt+=amplitude*turbulence(brickvUV.xy);\nt=sin(t);\ncolor=marble_color(t);\n}\ngl_FragColor=vec4(color,0.0);\n}";
  479. "use strict";
  480. var BABYLON;
  481. (function (BABYLON) {
  482. var StarfieldProceduralTexture = /** @class */ (function (_super) {
  483. __extends(StarfieldProceduralTexture, _super);
  484. function StarfieldProceduralTexture(name, size, scene, fallbackTexture, generateMipMaps) {
  485. var _this = _super.call(this, name, size, "starfieldProceduralTexture", scene, fallbackTexture, generateMipMaps) || this;
  486. _this._time = 1;
  487. _this._alpha = 0.5;
  488. _this._beta = 0.8;
  489. _this._zoom = 0.8;
  490. _this._formuparam = 0.53;
  491. _this._stepsize = 0.1;
  492. _this._tile = 0.850;
  493. _this._brightness = 0.0015;
  494. _this._darkmatter = 0.400;
  495. _this._distfading = 0.730;
  496. _this._saturation = 0.850;
  497. _this.updateShaderUniforms();
  498. return _this;
  499. }
  500. StarfieldProceduralTexture.prototype.updateShaderUniforms = function () {
  501. this.setFloat("time", this._time);
  502. this.setFloat("alpha", this._alpha);
  503. this.setFloat("beta", this._beta);
  504. this.setFloat("zoom", this._zoom);
  505. this.setFloat("formuparam", this._formuparam);
  506. this.setFloat("stepsize", this._stepsize);
  507. this.setFloat("tile", this._tile);
  508. this.setFloat("brightness", this._brightness);
  509. this.setFloat("darkmatter", this._darkmatter);
  510. this.setFloat("distfading", this._distfading);
  511. this.setFloat("saturation", this._saturation);
  512. };
  513. Object.defineProperty(StarfieldProceduralTexture.prototype, "time", {
  514. get: function () {
  515. return this._time;
  516. },
  517. set: function (value) {
  518. this._time = value;
  519. this.updateShaderUniforms();
  520. },
  521. enumerable: true,
  522. configurable: true
  523. });
  524. Object.defineProperty(StarfieldProceduralTexture.prototype, "alpha", {
  525. get: function () {
  526. return this._alpha;
  527. },
  528. set: function (value) {
  529. this._alpha = value;
  530. this.updateShaderUniforms();
  531. },
  532. enumerable: true,
  533. configurable: true
  534. });
  535. Object.defineProperty(StarfieldProceduralTexture.prototype, "beta", {
  536. get: function () {
  537. return this._beta;
  538. },
  539. set: function (value) {
  540. this._beta = value;
  541. this.updateShaderUniforms();
  542. },
  543. enumerable: true,
  544. configurable: true
  545. });
  546. Object.defineProperty(StarfieldProceduralTexture.prototype, "formuparam", {
  547. get: function () {
  548. return this._formuparam;
  549. },
  550. set: function (value) {
  551. this._formuparam = value;
  552. this.updateShaderUniforms();
  553. },
  554. enumerable: true,
  555. configurable: true
  556. });
  557. Object.defineProperty(StarfieldProceduralTexture.prototype, "stepsize", {
  558. get: function () {
  559. return this._stepsize;
  560. },
  561. set: function (value) {
  562. this._stepsize = value;
  563. this.updateShaderUniforms();
  564. },
  565. enumerable: true,
  566. configurable: true
  567. });
  568. Object.defineProperty(StarfieldProceduralTexture.prototype, "zoom", {
  569. get: function () {
  570. return this._zoom;
  571. },
  572. set: function (value) {
  573. this._zoom = value;
  574. this.updateShaderUniforms();
  575. },
  576. enumerable: true,
  577. configurable: true
  578. });
  579. Object.defineProperty(StarfieldProceduralTexture.prototype, "tile", {
  580. get: function () {
  581. return this._tile;
  582. },
  583. set: function (value) {
  584. this._tile = value;
  585. this.updateShaderUniforms();
  586. },
  587. enumerable: true,
  588. configurable: true
  589. });
  590. Object.defineProperty(StarfieldProceduralTexture.prototype, "brightness", {
  591. get: function () {
  592. return this._brightness;
  593. },
  594. set: function (value) {
  595. this._brightness = value;
  596. this.updateShaderUniforms();
  597. },
  598. enumerable: true,
  599. configurable: true
  600. });
  601. Object.defineProperty(StarfieldProceduralTexture.prototype, "darkmatter", {
  602. get: function () {
  603. return this._darkmatter;
  604. },
  605. set: function (value) {
  606. this._darkmatter = value;
  607. this.updateShaderUniforms();
  608. },
  609. enumerable: true,
  610. configurable: true
  611. });
  612. Object.defineProperty(StarfieldProceduralTexture.prototype, "distfading", {
  613. get: function () {
  614. return this._distfading;
  615. },
  616. set: function (value) {
  617. this._distfading = value;
  618. this.updateShaderUniforms();
  619. },
  620. enumerable: true,
  621. configurable: true
  622. });
  623. Object.defineProperty(StarfieldProceduralTexture.prototype, "saturation", {
  624. get: function () {
  625. return this._saturation;
  626. },
  627. set: function (value) {
  628. this._saturation = value;
  629. this.updateShaderUniforms();
  630. },
  631. enumerable: true,
  632. configurable: true
  633. });
  634. return StarfieldProceduralTexture;
  635. }(BABYLON.ProceduralTexture));
  636. BABYLON.StarfieldProceduralTexture = StarfieldProceduralTexture;
  637. })(BABYLON || (BABYLON = {}));
  638. //# sourceMappingURL=babylon.starfieldProceduralTexture.js.map
  639. BABYLON.Effect.ShadersStore['starfieldProceduralTexturePixelShader'] = "precision highp float;\n\n#define volsteps 20\n#define iterations 15\nvarying vec2 vPosition;\nvarying vec2 vUV;\nuniform float time;\nuniform float alpha;\nuniform float beta;\nuniform float zoom;\nuniform float formuparam;\nuniform float stepsize;\nuniform float tile;\nuniform float brightness;\nuniform float darkmatter;\nuniform float distfading;\nuniform float saturation;\nvoid main()\n{\nvec3 dir=vec3(vUV*zoom,1.);\nfloat localTime=time*0.0001;\n\nmat2 rot1=mat2(cos(alpha),sin(alpha),-sin(alpha),cos(alpha));\nmat2 rot2=mat2(cos(beta),sin(beta),-sin(beta),cos(beta));\ndir.xz*=rot1;\ndir.xy*=rot2;\nvec3 from=vec3(1.,.5,0.5);\nfrom+=vec3(-2.,localTime*2.,localTime);\nfrom.xz*=rot1;\nfrom.xy*=rot2;\n\nfloat s=0.1,fade=1.;\nvec3 v=vec3(0.);\nfor (int r=0; r<volsteps; r++) {\nvec3 p=from+s*dir*.5;\np=abs(vec3(tile)-mod(p,vec3(tile*2.))); \nfloat pa,a=pa=0.;\nfor (int i=0; i<iterations; i++) {\np=abs(p)/dot(p,p)-formuparam; \na+=abs(length(p)-pa); \npa=length(p);\n}\nfloat dm=max(0.,darkmatter-a*a*.001); \na*=a*a; \nif (r>6) fade*=1.-dm; \n\nv+=fade;\nv+=vec3(s,s*s,s*s*s*s)*a*brightness*fade; \nfade*=distfading; \ns+=stepsize;\n}\nv=mix(vec3(length(v)),v,saturation); \ngl_FragColor=vec4(v*.01,1.);\n}";
  640. "use strict";
  641. var BABYLON;
  642. (function (BABYLON) {
  643. var NormalMapProceduralTexture = /** @class */ (function (_super) {
  644. __extends(NormalMapProceduralTexture, _super);
  645. function NormalMapProceduralTexture(name, size, scene, fallbackTexture, generateMipMaps) {
  646. var _this = _super.call(this, name, size, "normalMapProceduralTexture", scene, fallbackTexture, generateMipMaps) || this;
  647. _this.updateShaderUniforms();
  648. return _this;
  649. }
  650. NormalMapProceduralTexture.prototype.updateShaderUniforms = function () {
  651. this.setTexture("baseSampler", this._baseTexture);
  652. this.setFloat("size", this.getRenderSize());
  653. };
  654. NormalMapProceduralTexture.prototype.render = function (useCameraPostProcess) {
  655. _super.prototype.render.call(this, useCameraPostProcess);
  656. };
  657. NormalMapProceduralTexture.prototype.resize = function (size, generateMipMaps) {
  658. _super.prototype.resize.call(this, size, generateMipMaps);
  659. // We need to update the "size" uniform
  660. this.updateShaderUniforms();
  661. };
  662. Object.defineProperty(NormalMapProceduralTexture.prototype, "baseTexture", {
  663. get: function () {
  664. return this._baseTexture;
  665. },
  666. set: function (texture) {
  667. this._baseTexture = texture;
  668. this.updateShaderUniforms();
  669. },
  670. enumerable: true,
  671. configurable: true
  672. });
  673. return NormalMapProceduralTexture;
  674. }(BABYLON.ProceduralTexture));
  675. BABYLON.NormalMapProceduralTexture = NormalMapProceduralTexture;
  676. })(BABYLON || (BABYLON = {}));
  677. //# sourceMappingURL=babylon.normalMapProceduralTexture.js.map
  678. BABYLON.Effect.ShadersStore['normalMapProceduralTexturePixelShader'] = "precision highp float;\n\nuniform sampler2D baseSampler;\nuniform float size;\n\nvarying vec2 vUV;\n\nconst vec3 LUMA_COEFFICIENT=vec3(0.2126,0.7152,0.0722);\nfloat lumaAtCoord(vec2 coord)\n{\nvec3 pixel=texture2D(baseSampler,coord).rgb;\nfloat luma=dot(pixel,LUMA_COEFFICIENT);\nreturn luma;\n}\nvoid main()\n{\nfloat lumaU0=lumaAtCoord(vUV+vec2(-1.0,0.0)/size);\nfloat lumaU1=lumaAtCoord(vUV+vec2( 1.0,0.0)/size);\nfloat lumaV0=lumaAtCoord(vUV+vec2( 0.0,-1.0)/size);\nfloat lumaV1=lumaAtCoord(vUV+vec2( 0.0,1.0)/size);\nvec2 slope=(vec2(lumaU0-lumaU1,lumaV0-lumaV1)+1.0)*0.5;\ngl_FragColor=vec4(slope,1.0,1.0);\n}\n";
  679. "use strict";
  680. var BABYLON;
  681. (function (BABYLON) {
  682. var PerlinNoiseProceduralTexture = /** @class */ (function (_super) {
  683. __extends(PerlinNoiseProceduralTexture, _super);
  684. function PerlinNoiseProceduralTexture(name, size, scene, fallbackTexture, generateMipMaps) {
  685. var _this = _super.call(this, name, size, "perlinNoiseProceduralTexture", scene, fallbackTexture, generateMipMaps) || this;
  686. _this.time = 0.0;
  687. _this.speed = 1.0;
  688. _this.translationSpeed = 1.0;
  689. _this._currentTranslation = 0;
  690. _this.updateShaderUniforms();
  691. return _this;
  692. }
  693. PerlinNoiseProceduralTexture.prototype.updateShaderUniforms = function () {
  694. this.setFloat("size", this.getRenderSize());
  695. var scene = this.getScene();
  696. if (!scene) {
  697. return;
  698. }
  699. var deltaTime = scene.getEngine().getDeltaTime();
  700. this.time += deltaTime;
  701. this.setFloat("time", this.time * this.speed / 1000);
  702. this._currentTranslation += deltaTime * this.translationSpeed / 1000.0;
  703. this.setFloat("translationSpeed", this._currentTranslation);
  704. };
  705. PerlinNoiseProceduralTexture.prototype.render = function (useCameraPostProcess) {
  706. this.updateShaderUniforms();
  707. _super.prototype.render.call(this, useCameraPostProcess);
  708. };
  709. PerlinNoiseProceduralTexture.prototype.resize = function (size, generateMipMaps) {
  710. _super.prototype.resize.call(this, size, generateMipMaps);
  711. };
  712. return PerlinNoiseProceduralTexture;
  713. }(BABYLON.ProceduralTexture));
  714. BABYLON.PerlinNoiseProceduralTexture = PerlinNoiseProceduralTexture;
  715. })(BABYLON || (BABYLON = {}));
  716. //# sourceMappingURL=babylon.perlinNoiseProceduralTexture.js.map
  717. BABYLON.Effect.ShadersStore['perlinNoiseProceduralTexturePixelShader'] = "\nprecision highp float;\n\nuniform float size;\nuniform float time;\nuniform float translationSpeed;\n\nvarying vec2 vUV;\n\nfloat r(float n)\n{\nreturn fract(cos(n*89.42)*343.42);\n}\nvec2 r(vec2 n)\n{\nreturn vec2(r(n.x*23.62-300.0+n.y*34.35),r(n.x*45.13+256.0+n.y*38.89)); \n}\nfloat worley(vec2 n,float s)\n{\nfloat dis=1.0;\nfor(int x=-1; x<=1; x++)\n{\nfor(int y=-1; y<=1; y++)\n{\nvec2 p=floor(n/s)+vec2(x,y);\nfloat d=length(r(p)+vec2(x,y)-fract(n/s));\nif (dis>d)\ndis=d;\n}\n}\nreturn 1.0-dis;\n}\nvec3 hash33(vec3 p3)\n{\np3=fract(p3*vec3(0.1031,0.11369,0.13787));\np3+=dot(p3,p3.yxz+19.19);\nreturn -1.0+2.0*fract(vec3((p3.x+p3.y)*p3.z,(p3.x+p3.z)*p3.y,(p3.y+p3.z)*p3.x));\n}\nfloat perlinNoise(vec3 p)\n{\nvec3 pi=floor(p);\nvec3 pf=p-pi;\nvec3 w=pf*pf*(3.0-2.0*pf);\nreturn mix(\nmix(\nmix(\ndot(pf-vec3(0,0,0),hash33(pi+vec3(0,0,0))),\ndot(pf-vec3(1,0,0),hash33(pi+vec3(1,0,0))),\nw.x\n),\nmix(\ndot(pf-vec3(0,0,1),hash33(pi+vec3(0,0,1))),\ndot(pf-vec3(1,0,1),hash33(pi+vec3(1,0,1))),\nw.x\n),\nw.z\n),\nmix(\nmix(\ndot(pf-vec3(0,1,0),hash33(pi+vec3(0,1,0))),\ndot(pf-vec3(1,1,0),hash33(pi+vec3(1,1,0))),\nw.x\n),\nmix(\ndot(pf-vec3(0,1,1),hash33(pi+vec3(0,1,1))),\ndot(pf-vec3(1,1,1),hash33(pi+vec3(1,1,1))),\nw.x\n),\nw.z\n),\nw.y\n);\n}\n\nvoid main(void)\n{\nvec2 uv=gl_FragCoord.xy+translationSpeed;\nfloat dis=(\n1.0+perlinNoise(vec3(uv/vec2(size,size),time*0.05)*8.0))\n*(1.0+(worley(uv,32.0)+ 0.5*worley(2.0*uv,32.0)+0.25*worley(4.0*uv,32.0))\n);\ngl_FragColor=vec4(vec3(dis/4.0),1.0);\n}\n";
  718. return BABYLON;
  719. });