From 6f18c6751a0d859bec5c708668341dfdf3db8ea4 Mon Sep 17 00:00:00 2001 From: luo2430 Date: Mon, 15 Jun 2026 14:55:14 +0800 Subject: [PATCH 1/7] build(shader-compiler): use shx for cross-platform chmod --- packages/shader-compiler/package.json | 9 +- pnpm-lock.yaml | 117 +++++++++++++++++++++++++- 2 files changed, 121 insertions(+), 5 deletions(-) diff --git a/packages/shader-compiler/package.json b/packages/shader-compiler/package.json index 092346efb3..0192e51bcf 100644 --- a/packages/shader-compiler/package.json +++ b/packages/shader-compiler/package.json @@ -42,7 +42,7 @@ "shader-compiler-precompile": "./bundler/cli.js" }, "scripts": { - "build": "rollup -c rollup.config.js && chmod +x bundler/cli.js", + "build": "rollup -c rollup.config.js && shx chmod +x bundler/cli.js", "b:types": "tsc" }, "umd": { @@ -59,11 +59,12 @@ "verbose/package.json" ], "dependencies": { - "@rollup/pluginutils": "^5.0.0", + "@galacean/engine-core": "workspace:*", "@galacean/engine-math": "workspace:*", - "@galacean/engine-core": "workspace:*" + "@rollup/pluginutils": "^5.0.0" }, "devDependencies": { - "@galacean/engine-design": "workspace:*" + "@galacean/engine-design": "workspace:*", + "shx": "^0.4.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d052455a06..94572330a9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -305,6 +305,9 @@ importers: '@galacean/engine-design': specifier: workspace:* version: link:../design + shx: + specifier: ^0.4.0 + version: 0.4.0 packages/ui: devDependencies: @@ -1121,36 +1124,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.0': resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.0': resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.0': resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.0': resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.0': resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-win32-arm64@2.5.0': resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==} @@ -1256,46 +1265,55 @@ packages: resolution: {integrity: sha512-6npqOKEPRZkLrMcvyC/32OzJ2srdPzCylJjiTJT2c0bwwSGm7nz2F9mNQ1WrAqCBZROcQn91Fno+khFhVijmFA==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.27.2': resolution: {integrity: sha512-V9Xg6eXtgBtHq2jnuQwM/jr2mwe2EycnopO8cbOvpzFuySCGtKlPCI3Hj9xup/pJK5Q0388qfZZy2DqV2J8ftw==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.27.2': resolution: {integrity: sha512-uCFX9gtZJoQl2xDTpRdseYuNqyKkuMDtH6zSrBTA28yTfKyjN9hQ2B04N5ynR8ILCoSDOrG/Eg+J2TtJ1e/CSA==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.27.2': resolution: {integrity: sha512-/PU9P+7Rkz8JFYDHIi+xzHabOu9qEWR07L5nWLIUsvserrxegZExKCi2jhMZRd0ATdboKylu/K5yAXbp7fYFvA==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-powerpc64le-gnu@4.27.2': resolution: {integrity: sha512-eCHmol/dT5odMYi/N0R0HC8V8QE40rEpkyje/ZAXJYNNoSfrObOvG/Mn+s1F/FJyB7co7UQZZf6FuWnN6a7f4g==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.27.2': resolution: {integrity: sha512-DEP3Njr9/ADDln3kNi76PXonLMSSMiCir0VHXxmGSHxCxDfQ70oWjHcJGfiBugzaqmYdTC7Y+8Int6qbnxPBIQ==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-s390x-gnu@4.27.2': resolution: {integrity: sha512-NHGo5i6IE/PtEPh5m0yw5OmPMpesFnzMIS/lzvN5vknnC1sXM5Z/id5VgcNPgpD+wHmIcuYYgW+Q53v+9s96lQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.27.2': resolution: {integrity: sha512-PaW2DY5Tan+IFvNJGHDmUrORadbe/Ceh8tQxi8cmdQVCCYsLoQo2cuaSj+AU+YRX8M4ivS2vJ9UGaxfuNN7gmg==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.27.2': resolution: {integrity: sha512-dOlWEMg2gI91Qx5I/HYqOD6iqlJspxLcS4Zlg3vjk1srE67z5T2Uz91yg/qA8sY0XcwQrFzWWiZhMNERylLrpQ==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.27.2': resolution: {integrity: sha512-euMIv/4x5Y2/ImlbGl88mwKNXDsvzbWUlT7DFky76z2keajCtcbAsN9LUdmk31hAoVmJJYSThgdA0EsPeTr1+w==} @@ -1339,24 +1357,28 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [glibc] '@swc/core-linux-arm64-musl@1.9.2': resolution: {integrity: sha512-8xzrOmsyCC1zrx2Wzx/h8dVsdewO1oMCwBTLc1gSJ/YllZYTb04pNm6NsVbzUX2tKddJVRgSJXV10j/NECLwpA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [musl] '@swc/core-linux-x64-gnu@1.9.2': resolution: {integrity: sha512-kZrNz/PjRQKcchWF6W292jk3K44EoVu1ad5w+zbS4jekIAxsM8WwQ1kd+yjUlN9jFcF8XBat5NKIs9WphJCVXg==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [glibc] '@swc/core-linux-x64-musl@1.9.2': resolution: {integrity: sha512-TTIpR4rjMkhX1lnFR+PSXpaL83TrQzp9znRdp2TzYrODlUd/R20zOwSo9vFLCyH6ZoD47bccY7QeGZDYT3nlRg==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [musl] '@swc/core-win32-arm64-msvc@1.9.2': resolution: {integrity: sha512-+Eg2d4icItKC0PMjZxH7cSYFLWk0aIp94LNmOw6tPq0e69ax6oh10upeq0D1fjWsKLmOJAWEvnXlayZcijEXDw==} @@ -2335,6 +2357,10 @@ packages: eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + execa@1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} + execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -2353,6 +2379,10 @@ packages: fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -2643,6 +2673,10 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -2695,6 +2729,10 @@ packages: is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -2930,6 +2968,10 @@ packages: merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -3068,6 +3110,10 @@ packages: resolution: {integrity: sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==} engines: {node: '>=4'} + npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} + npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3119,6 +3165,10 @@ packages: resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} engines: {node: '>=6'} + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -3345,6 +3395,10 @@ packages: resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} engines: {node: '>= 14.16.0'} + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -3516,6 +3570,16 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shelljs@0.9.2: + resolution: {integrity: sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==} + engines: {node: '>=18'} + hasBin: true + + shx@0.4.0: + resolution: {integrity: sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA==} + engines: {node: '>=18'} + hasBin: true + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -3640,6 +3704,10 @@ packages: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} + strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} @@ -6038,6 +6106,16 @@ snapshots: eventemitter3@5.0.4: {} + execa@1.0.0: + dependencies: + cross-spawn: 6.0.5 + get-stream: 4.1.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + execa@8.0.1: dependencies: cross-spawn: 7.0.5 @@ -6065,6 +6143,14 @@ snapshots: fast-diff@1.3.0: {} + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} @@ -6365,6 +6451,8 @@ snapshots: ini@1.3.8: {} + interpret@1.4.0: {} + is-arrayish@0.2.1: {} is-binary-path@2.1.0: @@ -6403,6 +6491,8 @@ snapshots: dependencies: '@types/estree': 1.0.6 + is-stream@1.1.0: {} + is-stream@2.0.1: {} is-stream@3.0.0: {} @@ -6654,11 +6744,12 @@ snapshots: merge-stream@2.0.0: {} + merge2@1.4.1: {} + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 - optional: true mime@2.6.0: {} @@ -6790,6 +6881,10 @@ snapshots: pify: 3.0.0 optional: true + npm-run-path@2.0.2: + dependencies: + path-key: 2.0.1 + npm-run-path@5.3.0: dependencies: path-key: 4.0.0 @@ -6869,6 +6964,8 @@ snapshots: p-cancelable@1.1.0: {} + p-finally@1.0.0: {} + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -7070,6 +7167,10 @@ snapshots: readdirp@4.0.2: {} + rechoir@0.6.2: + dependencies: + resolve: 1.22.8 + redent@3.0.0: dependencies: indent-string: 4.0.0 @@ -7245,6 +7346,18 @@ snapshots: shebang-regex@3.0.0: {} + shelljs@0.9.2: + dependencies: + execa: 1.0.0 + fast-glob: 3.3.3 + interpret: 1.4.0 + rechoir: 0.6.2 + + shx@0.4.0: + dependencies: + minimist: 1.2.8 + shelljs: 0.9.2 + siginfo@2.0.0: {} signal-exit@3.0.7: {} @@ -7370,6 +7483,8 @@ snapshots: strip-bom@4.0.0: {} + strip-eof@1.0.0: {} + strip-final-newline@3.0.0: {} strip-indent@3.0.0: From 9912b8dda8f2c1b903d12c3f36b9fcc0c3e3285b Mon Sep 17 00:00:00 2001 From: luo2430 Date: Mon, 15 Jun 2026 15:00:09 +0800 Subject: [PATCH 2/7] chore(shader): ignore compiled shaders directory --- packages/shader/.gitignore | 1 + .../shader/compiledShaders/2D/Sprite.shaderc | 1 - .../compiledShaders/2D/SpriteMask.shaderc | 1 - .../shader/compiledShaders/2D/Text.shaderc | 1 - .../compiledShaders/2D/UIDefault.shaderc | 1 - .../shader/compiledShaders/BlinnPhong.shaderc | 1 - .../shader/compiledShaders/Blit/Blit.shaderc | 1 - .../compiledShaders/Blit/BlitScreen.shaderc | 1 - .../compiledShaders/Effect/Particle.shaderc | 1 - .../Effect/ParticleFeedback.shaderc | 1 - .../compiledShaders/Effect/Trail.shaderc | 1 - .../Lighting/ScalableAmbientOcclusion.shaderc | 1 - packages/shader/compiledShaders/PBR.shaderc | 1 - .../Pipeline/DepthOnly.shaderc | 1 - .../Pipeline/ShadowCaster.shaderc | 1 - .../compiledShaders/PostProcess/Bloom.shaderc | 1 - .../PostProcess/FinalAntiAliasing.shaderc | 1 - .../PostProcess/FinalSRGB.shaderc | 1 - .../compiledShaders/PostProcess/Uber.shaderc | 1 - .../Sky/BackgroundTexture.shaderc | 1 - .../compiledShaders/Sky/SkyProcedural.shaderc | 1 - .../shader/compiledShaders/Sky/Skybox.shaderc | 1 - packages/shader/compiledShaders/Unlit.shaderc | 1 - packages/shader/compiledShaders/index.ts | 49 ------------------- 24 files changed, 1 insertion(+), 71 deletions(-) create mode 100644 packages/shader/.gitignore delete mode 100644 packages/shader/compiledShaders/2D/Sprite.shaderc delete mode 100644 packages/shader/compiledShaders/2D/SpriteMask.shaderc delete mode 100644 packages/shader/compiledShaders/2D/Text.shaderc delete mode 100644 packages/shader/compiledShaders/2D/UIDefault.shaderc delete mode 100644 packages/shader/compiledShaders/BlinnPhong.shaderc delete mode 100644 packages/shader/compiledShaders/Blit/Blit.shaderc delete mode 100644 packages/shader/compiledShaders/Blit/BlitScreen.shaderc delete mode 100644 packages/shader/compiledShaders/Effect/Particle.shaderc delete mode 100644 packages/shader/compiledShaders/Effect/ParticleFeedback.shaderc delete mode 100644 packages/shader/compiledShaders/Effect/Trail.shaderc delete mode 100644 packages/shader/compiledShaders/Lighting/ScalableAmbientOcclusion.shaderc delete mode 100644 packages/shader/compiledShaders/PBR.shaderc delete mode 100644 packages/shader/compiledShaders/Pipeline/DepthOnly.shaderc delete mode 100644 packages/shader/compiledShaders/Pipeline/ShadowCaster.shaderc delete mode 100644 packages/shader/compiledShaders/PostProcess/Bloom.shaderc delete mode 100644 packages/shader/compiledShaders/PostProcess/FinalAntiAliasing.shaderc delete mode 100644 packages/shader/compiledShaders/PostProcess/FinalSRGB.shaderc delete mode 100644 packages/shader/compiledShaders/PostProcess/Uber.shaderc delete mode 100644 packages/shader/compiledShaders/Sky/BackgroundTexture.shaderc delete mode 100644 packages/shader/compiledShaders/Sky/SkyProcedural.shaderc delete mode 100644 packages/shader/compiledShaders/Sky/Skybox.shaderc delete mode 100644 packages/shader/compiledShaders/Unlit.shaderc delete mode 100644 packages/shader/compiledShaders/index.ts diff --git a/packages/shader/.gitignore b/packages/shader/.gitignore new file mode 100644 index 0000000000..523d8356e3 --- /dev/null +++ b/packages/shader/.gitignore @@ -0,0 +1 @@ +compiledShaders/ diff --git a/packages/shader/compiledShaders/2D/Sprite.shaderc b/packages/shader/compiledShaders/2D/Sprite.shaderc deleted file mode 100644 index 1d6d2366c0..0000000000 --- a/packages/shader/compiledShaders/2D/Sprite.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"2D/Sprite","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"Default","isUsePass":false,"tags":{"pipelineStage":"Forward"},"renderStates":{"constantMap":{"0":true,"3":6,"4":1,"5":7,"6":7,"11":false,"25":0,"28":2},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nattribute vec3 POSITION;\nattribute vec2 TEXCOORD_0;\nattribute vec4 COLOR_0;\n\nvarying vec2 v_uv;\nvarying vec4 v_color;\n\nuniform mat4 renderer_MVPMat;\nvoid main() { \ngl_Position = renderer_MVPMat * vec4 ( POSITION , 1.0 ) ;\nv_uv = TEXCOORD_0 ;\nv_color = COLOR_0 ;\n }"]],"fragmentShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",34],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",22],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",28],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,32],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nvarying vec2 v_uv;\nvarying vec4 v_color;\n\nuniform sampler2D renderer_SpriteTexture;\nvoid main() { vec4 baseColor = texture2DSRGB(renderer_SpriteTexture, v_uv) ;\ngl_FragColor = baseColor * v_color ; }"]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/2D/SpriteMask.shaderc b/packages/shader/compiledShaders/2D/SpriteMask.shaderc deleted file mode 100644 index 1b8d902209..0000000000 --- a/packages/shader/compiledShaders/2D/SpriteMask.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"2D/SpriteMask","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"Default","isUsePass":false,"tags":{"pipelineStage":"Forward"},"renderStates":{"constantMap":{},"variableMap":{}},"vertexShaderInstructions":[[0,"attribute vec3 POSITION;\nattribute vec2 TEXCOORD_0;\n\nvarying vec2 v_uv;\n\nuniform mat4 camera_VPMat;\nvoid main() { \ngl_Position = camera_VPMat * vec4 ( POSITION , 1.0 ) ;\nv_uv = TEXCOORD_0 ;\n }"]],"fragmentShaderInstructions":[[0,"varying vec2 v_uv;\n\nuniform sampler2D renderer_MaskTexture;\nuniform float renderer_MaskAlphaCutoff;\nvoid main() { vec4 color = texture2D ( renderer_MaskTexture , v_uv ) ;\nif ( color.a < renderer_MaskAlphaCutoff ) { discard ; }\ngl_FragColor = color ; }"]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/2D/Text.shaderc b/packages/shader/compiledShaders/2D/Text.shaderc deleted file mode 100644 index 8a3e6c091d..0000000000 --- a/packages/shader/compiledShaders/2D/Text.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"2D/Text","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"Default","isUsePass":false,"tags":{"pipelineStage":"Forward"},"renderStates":{"constantMap":{"0":true,"3":6,"4":1,"5":7,"6":7,"11":false,"25":0,"28":2},"variableMap":{}},"vertexShaderInstructions":[[0,"attribute vec3 POSITION;\nattribute vec2 TEXCOORD_0;\nattribute vec4 COLOR_0;\n\nvarying vec2 v_uv;\nvarying vec4 v_color;\n\nuniform mat4 renderer_MVPMat;\nvoid main() { \ngl_Position = renderer_MVPMat * vec4 ( POSITION , 1.0 ) ;\nv_uv = TEXCOORD_0 ;\nv_color = COLOR_0 ;\n }"]],"fragmentShaderInstructions":[[0,"varying vec2 v_uv;\nvarying vec4 v_color;\n\nuniform sampler2D renderElement_TextTexture;\nvoid main() { vec4 texColor = texture2D ( renderElement_TextTexture , v_uv ) ;\n\n"],[1,"GRAPHICS_API_WEBGL2",4],[0," float coverage = texColor.r ; \n"],[5,6],[0," float coverage = texColor.a ; \n"],[6],[0,"\ngl_FragColor = vec4 ( v_color.rgb , v_color.a * coverage ) ; }"]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/2D/UIDefault.shaderc b/packages/shader/compiledShaders/2D/UIDefault.shaderc deleted file mode 100644 index ef8fcd3fb2..0000000000 --- a/packages/shader/compiledShaders/2D/UIDefault.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"2D/UIDefault","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"Default","isUsePass":false,"tags":{"pipelineStage":"Forward"},"renderStates":{"constantMap":{"0":true,"1":0,"2":0,"3":6,"4":1,"5":7,"6":7,"11":false,"25":0,"28":2},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nuniform mat4 renderer_MVPMat;\nattribute vec3 POSITION;\nattribute vec2 TEXCOORD_0;\nattribute vec4 COLOR_0;\n\nvarying vec2 v_uv;\nvarying vec4 v_color;\n\nvoid main() { \ngl_Position = renderer_MVPMat * vec4 ( POSITION , 1.0 ) ;\nv_uv = TEXCOORD_0 ;\nv_color = COLOR_0 ;\n }"]],"fragmentShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",40],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nfloat linearToSRGB ( float value ) { value = max ( value , 0.0 ) ;\nreturn ( value <= 0.0031308 ) ? ( value * 12.9232102 ) : 1.055 * pow ( value , 1.0 / 2.4 ) - 0.055 ; }\nvec4 linearToSRGB ( vec4 value ) { return vec4 ( linearToSRGB(value.r) , linearToSRGB(value.g) , linearToSRGB(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",22],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\nvec4 outputSRGBCorrection ( vec4 linearIn ) { \n"],[1,"ENGINE_OUTPUT_SRGB_CORRECT",26],[0," return linearToSRGB(linearIn) ; \n"],[5,28],[0," return linearIn ; \n"],[6],[0," }\n\n"],[1,"GRAPHICS_API_WEBGL2",34],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,38],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nuniform sampler2D renderer_UITexture;\nvarying vec2 v_uv;\nvarying vec4 v_color;\n\nvoid main() { vec4 baseColor = texture2DSRGB(renderer_UITexture, v_uv) ;\nvec4 finalColor = baseColor * v_color ;\n\n"],[1,"ENGINE_SHOULD_SRGB_CORRECT",44],[0," finalColor = outputSRGBCorrection(finalColor) ; \n"],[6],[0,"\ngl_FragColor = finalColor ; }"]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/BlinnPhong.shaderc b/packages/shader/compiledShaders/BlinnPhong.shaderc deleted file mode 100644 index c61d3f196b..0000000000 --- a/packages/shader/compiledShaders/BlinnPhong.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"BlinnPhong","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"Pipeline/ShadowCaster/Default/ShadowCaster","isUsePass":true,"tags":{},"renderStates":{"constantMap":{},"variableMap":{}}},{"name":"Pipeline/DepthOnly/Default/DepthOnly","isUsePass":true,"tags":{},"renderStates":{"constantMap":{},"variableMap":{}}},{"name":"Forward Pass","isUsePass":false,"tags":{"pipelineStage":"Forward"},"renderStates":{"constantMap":{},"variableMap":{"0":"blendEnabled","3":"sourceColorBlendFactor","4":"sourceAlphaBlendFactor","5":"destinationColorBlendFactor","6":"destinationAlphaBlendFactor","11":"depthWriteEnabled","25":"rasterStateCullMode","28":"renderQueueType"}},"vertexShaderInstructions":[[0,"\n"],[2,"FORWARD_PASS_BLINNPHONG_INCLUDED",478],[0,"\n\n"],[7,"FORWARD_PASS_BLINNPHONG_INCLUDED"],[0,"\n\n"],[2,"COMMON_INCLUDED",34],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",28],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,32],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"FOG_INCLUDED",44],[0,"\n\n"],[7,"FOG_INCLUDED"],[0,"\n\n"],[3,"SCENE_FOG_MODE","!=",0,42],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"TRANSFORM_INCLUDED",50],[0,"\n\n"],[7,"TRANSFORM_INCLUDED"],[0,"\nuniform mat4 renderer_ModelMat;\nuniform mat4 renderer_MVMat;\nuniform mat4 renderer_MVPMat;\nuniform mat4 renderer_NormalMat;\n\n"],[6],[0,"\n\n"],[2,"ATTRIBUTES_INCLUDED",108],[0,"\n\n"],[7,"ATTRIBUTES_INCLUDED"],[0,"\nattribute vec3 POSITION;\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",82],[0,"\n"],[2,"RENDERER_BLENDSHAPE_USE_TEXTURE",80],[0,"attribute vec3 POSITION_BS0;\nattribute vec3 POSITION_BS1;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},62],[0,"attribute vec3 NORMAL_BS0;\nattribute vec3 NORMAL_BS1;\nattribute vec3 TANGENT_BS0;\nattribute vec3 TANGENT_BS1;\n\n"],[5,78],[0,"\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},74],[0,"attribute vec3 POSITION_BS2;\nattribute vec3 POSITION_BS3;\n\n"],[1,"RENDERER_BLENDSHAPE_HAS_NORMAL",68],[0,"attribute vec3 NORMAL_BS0;\nattribute vec3 NORMAL_BS1;\nattribute vec3 NORMAL_BS2;\nattribute vec3 NORMAL_BS3;\n\n"],[6],[0,"\n"],[1,"RENDERER_BLENDSHAPE_HAS_TANGENT",72],[0,"attribute vec3 TANGENT_BS0;\nattribute vec3 TANGENT_BS1;\nattribute vec3 TANGENT_BS2;\nattribute vec3 TANGENT_BS3;\n\n"],[6],[0,"\n"],[5,76],[0,"attribute vec3 POSITION_BS2;\nattribute vec3 POSITION_BS3;\nattribute vec3 POSITION_BS4;\nattribute vec3 POSITION_BS5;\nattribute vec3 POSITION_BS6;\nattribute vec3 POSITION_BS7;\n\n"],[6],[0,"\n"],[6],[0,"\n"],[6],[0,"\n"],[6],[0,"\n"],[1,"RENDERER_HAS_UV",86],[0,"attribute vec2 TEXCOORD_0;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_UV1",90],[0,"\n"],[6],[0,"\n"],[1,"RENDERER_HAS_SKIN",94],[0,"attribute vec4 JOINTS_0;\nattribute vec4 WEIGHTS_0;\n\n"],[6],[0,"\n"],[1,"RENDERER_ENABLE_VERTEXCOLOR",98],[0,"attribute vec4 COLOR_0;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_NORMAL",102],[0,"attribute vec3 NORMAL;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_TANGENT",106],[0,"attribute vec4 TANGENT;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"SKIN_INCLUDED",130],[0,"\n\n"],[7,"SKIN_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_SKIN",128],[0,"\n\n"],[1,"RENDERER_USE_JOINT_TEXTURE",118],[0,"\nuniform sampler2D renderer_JointSampler;\nuniform float renderer_JointCount;\nmat4 getJointMatrix ( sampler2D smp, float index ) { float base = index / renderer_JointCount ;\nfloat hf = 0.5 / renderer_JointCount ;\nfloat v = base + hf ;\nvec4 m0 = texture2D ( smp , vec2 ( 0.125 , v ) ) ;\nvec4 m1 = texture2D ( smp , vec2 ( 0.375 , v ) ) ;\nvec4 m2 = texture2D ( smp , vec2 ( 0.625 , v ) ) ;\nvec4 m3 = texture2D ( smp , vec2 ( 0.875 , v ) ) ;\nreturn mat4 ( m0 , m1 , m2 , m3 ) ; }\n\n"],[5,120],[0,"\nuniform mat4 renderer_JointMatrix [ RENDERER_JOINTS_NUM ];\n\n"],[6],[0,"\nmat4 getSkinMatrix ( ) { \n"],[1,"RENDERER_USE_JOINT_TEXTURE",124],[0," mat4 skinMatrix = WEIGHTS_0.x * getJointMatrix(renderer_JointSampler, JOINTS_0.x) + WEIGHTS_0.y * getJointMatrix(renderer_JointSampler, JOINTS_0.y) + WEIGHTS_0.z * getJointMatrix(renderer_JointSampler, JOINTS_0.z) + WEIGHTS_0.w * getJointMatrix(renderer_JointSampler, JOINTS_0.w) ; \n"],[5,126],[0," mat4 skinMatrix = WEIGHTS_0.x * renderer_JointMatrix[int ( JOINTS_0.x )] + WEIGHTS_0.y * renderer_JointMatrix[int ( JOINTS_0.y )] + WEIGHTS_0.z * renderer_JointMatrix[int ( JOINTS_0.z )] + WEIGHTS_0.w * renderer_JointMatrix[int ( JOINTS_0.w )] ; \n"],[6],[0,"\nreturn skinMatrix ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"BLENDSHAPE_INCLUDED",208],[0,"\n\n"],[7,"BLENDSHAPE_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",206],[0,"\n\n"],[1,"RENDERER_BLENDSHAPE_USE_TEXTURE",140],[0,"\nuniform mediump sampler2DArray renderer_BlendShapeTexture;\nuniform ivec3 renderer_BlendShapeTextureInfo;\nuniform float renderer_BlendShapeWeights [ RENDERER_BLENDSHAPE_COUNT ];\nvec3 getBlendShapeVertexElement ( int blendShapeIndex, int vertexElementIndex ) { int y = vertexElementIndex / renderer_BlendShapeTextureInfo.y ;\nint x = vertexElementIndex - y * renderer_BlendShapeTextureInfo.y ;\nivec3 uv = ivec3 ( x , y , blendShapeIndex ) ;\nreturn ( texelFetch ( renderer_BlendShapeTexture , uv , 0 ) ).xyz ; }\n\n"],[5,154],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},144],[0,"\nuniform float renderer_BlendShapeWeights [ 2 ];\n\n"],[5,152],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},148],[0,"\nuniform float renderer_BlendShapeWeights [ 4 ];\n\n"],[5,150],[0,"\nuniform float renderer_BlendShapeWeights [ 8 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nvoid calculateBlendShape ( inout vec4 position\n"],[1,"RENDERER_HAS_NORMAL",162],[0," , inout vec3 normal \n"],[1,"RENDERER_HAS_TANGENT",160],[0," , inout vec4 tangent \n"],[6],[0," \n"],[6],[0," ) { \n"],[1,"RENDERER_BLENDSHAPE_USE_TEXTURE",174],[0," int vertexOffset = gl_VertexID * renderer_BlendShapeTextureInfo.x ;\nfor ( int i = 0 ; i < RENDERER_BLENDSHAPE_COUNT ; i ++ ) { int vertexElementOffset = vertexOffset ;\nfloat weight = renderer_BlendShapeWeights[i] ;\nif ( weight != 0.0 ) { position.xyz += getBlendShapeVertexElement(i, vertexElementOffset) * weight ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"}},168],[0," vertexElementOffset += 1 ;\nnormal += getBlendShapeVertexElement(i, vertexElementOffset) * weight ; \n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_HAS_TANGENT"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},172],[0," vertexElementOffset += 1 ;\ntangent.xyz += getBlendShapeVertexElement(i, vertexElementOffset) * weight ; \n"],[6],[0," } } \n"],[5,204],[0," position.xyz += POSITION_BS0 * renderer_BlendShapeWeights[0] ;\nposition.xyz += POSITION_BS1 * renderer_BlendShapeWeights[1] ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},186],[0," \n"],[1,"RENDERER_HAS_NORMAL",180],[0," normal += NORMAL_BS0 * renderer_BlendShapeWeights[0] ;\nnormal += NORMAL_BS1 * renderer_BlendShapeWeights[1] ; \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_TANGENT",184],[0," tangent.xyz += TANGENT_BS0 * renderer_BlendShapeWeights[0] ;\ntangent.xyz += TANGENT_BS1 * renderer_BlendShapeWeights[1] ; \n"],[6],[0," \n"],[5,202],[0," \n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},198],[0," position.xyz += POSITION_BS2 * renderer_BlendShapeWeights[2] ;\nposition.xyz += POSITION_BS3 * renderer_BlendShapeWeights[3] ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_HAS_NORMAL"}},192],[0," normal += NORMAL_BS0 * renderer_BlendShapeWeights[0] ;\nnormal += NORMAL_BS1 * renderer_BlendShapeWeights[1] ;\nnormal += NORMAL_BS2 * renderer_BlendShapeWeights[2] ;\nnormal += NORMAL_BS3 * renderer_BlendShapeWeights[3] ; \n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"},"r":{"t":"def","m":"RENDERER_HAS_TANGENT"}},196],[0," tangent.xyz += TANGENT_BS0 * renderer_BlendShapeWeights[0] ;\ntangent.xyz += TANGENT_BS1 * renderer_BlendShapeWeights[1] ;\ntangent.xyz += TANGENT_BS2 * renderer_BlendShapeWeights[2] ;\ntangent.xyz += TANGENT_BS3 * renderer_BlendShapeWeights[3] ; \n"],[6],[0," \n"],[5,200],[0," position.xyz += POSITION_BS2 * renderer_BlendShapeWeights[2] ;\nposition.xyz += POSITION_BS3 * renderer_BlendShapeWeights[3] ;\nposition.xyz += POSITION_BS4 * renderer_BlendShapeWeights[4] ;\nposition.xyz += POSITION_BS5 * renderer_BlendShapeWeights[5] ;\nposition.xyz += POSITION_BS6 * renderer_BlendShapeWeights[6] ;\nposition.xyz += POSITION_BS7 * renderer_BlendShapeWeights[7] ; \n"],[6],[0," \n"],[6],[0," \n"],[6],[0," }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"SHADOW_INCLUDED",288],[0,"\n\n"],[7,"SHADOW_INCLUDED"],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"SCENE_SHADOW_TYPE"},"r":{"t":"def","m":"RENDERER_IS_RECEIVE_SHADOWS"}},218],[0,"\n\n"],[7,"NEED_CALCULATE_SHADOWS"],[0,"\n\n"],[6],[0,"\n\n"],[1,"NEED_CALCULATE_SHADOWS",246],[0,"\nuniform mat4 scene_ShadowMatrices [ SCENE_SHADOW_CASCADED_COUNT + 1 ];\nuniform vec4 scene_ShadowSplitSpheres [ 4 ];\nmediump int computeCascadeIndex ( vec3 positionWS ) { vec3 fromCenter0 = positionWS - scene_ShadowSplitSpheres[0].xyz ;\nvec3 fromCenter1 = positionWS - scene_ShadowSplitSpheres[1].xyz ;\nvec3 fromCenter2 = positionWS - scene_ShadowSplitSpheres[2].xyz ;\nvec3 fromCenter3 = positionWS - scene_ShadowSplitSpheres[3].xyz ;\nmediump vec4 comparison = vec4 ( ( dot ( fromCenter0 , fromCenter0 ) < scene_ShadowSplitSpheres[0].w ) , ( dot ( fromCenter1 , fromCenter1 ) < scene_ShadowSplitSpheres[1].w ) , ( dot ( fromCenter2 , fromCenter2 ) < scene_ShadowSplitSpheres[2].w ) , ( dot ( fromCenter3 , fromCenter3 ) < scene_ShadowSplitSpheres[3].w ) ) ;\ncomparison.yzw = clamp ( comparison.yzw - comparison.xyz , 0.0 , 1.0 ) ;\nmediump vec4 indexCoefficient = vec4 ( 4.0 , 3.0 , 2.0 , 1.0 ) ;\nmediump int index = 4 - int ( dot ( comparison , indexCoefficient ) ) ;\nreturn index ; }\nvec3 getShadowCoord ( vec3 positionWS ) { \n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",1,224],[0," mediump int cascadeIndex = 0 ; \n"],[5,226],[0," mediump int cascadeIndex = computeCascadeIndex(positionWS) ; \n"],[6],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",230],[0," mat4 shadowMatrix = scene_ShadowMatrices[cascadeIndex] ; \n"],[5,244],[0," mat4 shadowMatrix ;\n\n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",4,234],[0," if ( cascadeIndex == 0 ) { shadowMatrix = scene_ShadowMatrices[0] ; } else if ( cascadeIndex == 1 ) { shadowMatrix = scene_ShadowMatrices[1] ; } else if ( cascadeIndex == 2 ) { shadowMatrix = scene_ShadowMatrices[2] ; } else if ( cascadeIndex == 3 ) { shadowMatrix = scene_ShadowMatrices[3] ; } else { shadowMatrix = scene_ShadowMatrices[4] ; } \n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",2,238],[0," if ( cascadeIndex == 0 ) { shadowMatrix = scene_ShadowMatrices[0] ; } else if ( cascadeIndex == 1 ) { shadowMatrix = scene_ShadowMatrices[1] ; } else { shadowMatrix = scene_ShadowMatrices[2] ; } \n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",1,242],[0," if ( cascadeIndex == 0 ) { shadowMatrix = scene_ShadowMatrices[0] ; } else { shadowMatrix = scene_ShadowMatrices[1] ; } \n"],[6],[0," \n"],[6],[0,"\nvec4 shadowCoord = shadowMatrix * vec4 ( positionWS , 1.0 ) ;\nreturn shadowCoord.xyz ; }\n\n"],[6],[0,"\n\n"],[1,"NEED_CALCULATE_SHADOWS",286],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",256],[0,"\n\n"],[9,"SAMPLE_TEXTURE2D_SHADOW",["textureName","coord3"],"textureLod ( textureName , coord3 , 0.0 )"],[0,"\n\n"],[9,"TEXTURE2D_SHADOW_PARAM",["shadowMap"],"mediump sampler2DShadow shadowMap"],[0,"\n\n"],[5,270],[0,"\n\n"],[1,"ENGINE_NO_DEPTH_TEXTURE",262],[0,"\nconst vec4 bitShift = vec4 ( 1.0 , 1.0 / 256.0 , 1.0 / ( 256.0 * 256.0 ) , 1.0 / ( 256.0 * 256.0 * 256.0 ) );\nfloat textureShadowMapDowngrade ( sampler2D scene_ShadowMap, vec3 shadowCoord ) { vec4 rgbaDepth = texture2D ( scene_ShadowMap , shadowCoord.xy ) ;\nfloat unpackDepth = dot ( rgbaDepth , bitShift ) ;\nreturn unpackDepth < shadowCoord.z ? 0.0 : 1.0 ; }\n\n"],[9,"SAMPLE_TEXTURE2D_SHADOW",["textureName","coord3"],"textureShadowMapDowngrade(textureName, coord3)"],[0,"\n\n"],[5,266],[0,"\nfloat textureShadowMapDowngrade ( sampler2D scene_ShadowMap, vec3 shadowCoord ) { float depth = texture2D ( scene_ShadowMap , shadowCoord.xy ).r ;\nreturn depth < shadowCoord.z ? 0.0 : 1.0 ; }\n\n"],[9,"SAMPLE_TEXTURE2D_SHADOW",["textureName","coord3"],"textureShadowMapDowngrade(textureName, coord3)"],[0,"\n\n"],[6],[0,"\n\n"],[9,"TEXTURE2D_SHADOW_PARAM",["shadowMap"],"mediump sampler2D shadowMap"],[0,"\n\n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_TYPE","==",2,274],[0,"\n\n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_TYPE","==",3,284],[0,"\n\n"],[2,"SHADOW_SAMPLE_TENT_INCLUDED",282],[0,"\n\n"],[7,"SHADOW_SAMPLE_TENT_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"MOBILE_BLINNPHONG_INCLUDED",388],[0,"\n\n"],[7,"MOBILE_BLINNPHONG_INCLUDED"],[0,"\n\n"],[2,"COMMON_INCLUDED",322],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",316],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,320],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"LIGHT_INCLUDED",364],[0,"\n\n"],[7,"LIGHT_INCLUDED"],[0,"\n\n"],[2,"GRAPHICS_API_WEBGL2",330],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_DIRECT_LIGHT_COUNT",338],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",336],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_POINT_LIGHT_COUNT",346],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",344],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_SPOT_LIGHT_COUNT",354],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",352],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_USE_SH",358],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_USE_SPECULAR_ENV",362],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"NORMAL_INCLUDED",370],[0,"\n\n"],[7,"NORMAL_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_EMISSIVETEXTURE",374],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",378],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_SPECULAR_TEXTURE",382],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_NORMALTEXTURE",386],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"and","l":{"t":"def","m":"RENDERER_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_HAS_TANGENT"}},"r":{"t":"def","m":"MATERIAL_HAS_NORMALTEXTURE"}},394],[0,"\n\n"],[7,"NEED_VERTEX_TANGENT"],[0,"\n\n"],[6],[0,"\nuniform vec4 material_TilingOffset;\nvarying vec2 v_uv;\n\n"],[1,"RENDERER_ENABLE_VERTEXCOLOR",398],[0,"varying vec4 v_color;\n\n"],[6],[0,"varying vec3 v_pos;\n\n"],[3,"SCENE_FOG_MODE","!=",0,402],[0,"varying vec3 v_positionVS;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_NORMAL",410],[0,"varying vec3 v_normalWS;\n\n"],[1,"NEED_VERTEX_TANGENT",408],[0,"varying vec3 v_tangentWS;\nvarying vec3 v_bitangentWS;\n\n"],[6],[0,"\n"],[6],[0,"\n"],[4,{"t":"and","l":{"t":"def","m":"NEED_CALCULATE_SHADOWS"},"r":{"t":"cmp","m":"SCENE_SHADOW_CASCADED_COUNT","op":"==","v":1}},414],[0,"varying vec3 v_shadowCoord;\n\n"],[6],[0,"\nvoid main() { \nvec4 position = vec4 ( POSITION , 1.0 ) ;\n\n"],[1,"RENDERER_HAS_NORMAL",422],[0," vec3 normal = NORMAL ;\n\n"],[1,"RENDERER_HAS_TANGENT",420],[0," vec4 tangent = TANGENT ; \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",434],[0," calculateBlendShape(position\n"],[1,"RENDERER_HAS_NORMAL",432],[0," , normal \n"],[1,"RENDERER_HAS_TANGENT",430],[0," , tangent \n"],[6],[0," \n"],[6],[0,") ; \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_SKIN",446],[0," mat4 skinMatrix = getSkinMatrix() ;\nposition = skinMatrix * position ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_HAS_NORMAL"},"r":{"t":"not","c":{"t":"def","m":"MATERIAL_OMIT_NORMAL"}}},444],[0," mat3 skinNormalMatrix = INVERSE_MAT(mat3 ( skinMatrix )) ;\nnormal = normal * skinNormalMatrix ;\n\n"],[1,"NEED_VERTEX_TANGENT",442],[0," tangent.xyz = tangent.xyz * skinNormalMatrix ; \n"],[6],[0," \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_UV",450],[0," v_uv = TEXCOORD_0 ; \n"],[5,452],[0," v_uv = vec2 ( 0.0 ) ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_NEED_TILING_OFFSET",456],[0," v_uv = v_uv * material_TilingOffset.xy + material_TilingOffset.zw ; \n"],[6],[0,"\n\n"],[1,"RENDERER_ENABLE_VERTEXCOLOR",460],[0," v_color = COLOR_0 ; \n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_HAS_NORMAL"},"r":{"t":"not","c":{"t":"def","m":"MATERIAL_OMIT_NORMAL"}}},468],[0," v_normalWS = normalize ( mat3 ( renderer_NormalMat ) * normal ) ;\n\n"],[1,"NEED_VERTEX_TANGENT",466],[0," vec3 tangentWS = normalize ( mat3 ( renderer_NormalMat ) * tangent.xyz ) ;\nv_tangentWS = tangentWS ;\nv_bitangentWS = cross ( v_normalWS , tangentWS ) * tangent.w ; \n"],[6],[0," \n"],[6],[0,"\nvec4 worldPos = renderer_ModelMat * position ;\nv_pos = worldPos.xyz / worldPos.w ;\ngl_Position = renderer_MVPMat * position ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"NEED_CALCULATE_SHADOWS"},"r":{"t":"cmp","m":"SCENE_SHADOW_CASCADED_COUNT","op":"==","v":1}},472],[0," v_shadowCoord = getShadowCoord(v_pos) ; \n"],[6],[0,"\n\n"],[3,"SCENE_FOG_MODE","!=",0,476],[0," v_positionVS = ( renderer_MVMat * position ).xyz ; \n"],[6],[0,"\n }\n\n"],[6]],"fragmentShaderInstructions":[[0,"\n"],[2,"FORWARD_PASS_BLINNPHONG_INCLUDED",436],[0,"\n\n"],[7,"FORWARD_PASS_BLINNPHONG_INCLUDED"],[0,"\n\n"],[2,"COMMON_INCLUDED",44],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",26],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\nuniform vec4 camera_ProjectionParams;\n\n"],[1,"GRAPHICS_API_WEBGL2",32],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,36],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\nvec3 getViewDirection ( vec3 cameraPosition, vec3 cameraForward, vec3 worldPosition ) { \n"],[1,"CAMERA_ORTHOGRAPHIC",40],[0," return - cameraForward ; \n"],[5,42],[0," return normalize ( cameraPosition - worldPosition ) ; \n"],[6],[0," }\n\n"],[6],[0,"\n\n"],[2,"FOG_INCLUDED",64],[0,"\n\n"],[7,"FOG_INCLUDED"],[0,"\n\n"],[3,"SCENE_FOG_MODE","!=",0,62],[0,"\nuniform vec4 scene_FogColor;\nuniform vec4 scene_FogParams;\nvec4 fog ( vec4 color, vec3 positionVS ) { float fogDepth = length ( positionVS ) ;\n\n"],[3,"SCENE_FOG_MODE","==",1,54],[0," float fogIntensity = clamp ( fogDepth * scene_FogParams.x + scene_FogParams.y , 0.0 , 1.0 ) ; \n"],[5,60],[3,"SCENE_FOG_MODE","==",2,57],[0," float fogIntensity = clamp ( exp2 ( - fogDepth * scene_FogParams.z ) , 0.0 , 1.0 ) ; \n"],[5,60],[3,"SCENE_FOG_MODE","==",3,60],[0," float factor = fogDepth * scene_FogParams.w ;\nfloat fogIntensity = clamp ( exp2 ( - factor * factor ) , 0.0 , 1.0 ) ; \n"],[6],[0,"\ncolor.rgb = mix ( scene_FogColor.rgb , color.rgb , fogIntensity ) ;\nreturn color ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"TRANSFORM_INCLUDED",70],[0,"\n\n"],[7,"TRANSFORM_INCLUDED"],[0,"\nuniform vec3 camera_Position;\nuniform vec3 camera_Forward;\n\n"],[6],[0,"\n\n"],[2,"ATTRIBUTES_INCLUDED",76],[0,"\n\n"],[7,"ATTRIBUTES_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[2,"SKIN_INCLUDED",92],[0,"\n\n"],[7,"SKIN_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_SKIN",90],[0,"\n\n"],[1,"RENDERER_USE_JOINT_TEXTURE",86],[0,"\n\n"],[5,88],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"BLENDSHAPE_INCLUDED",120],[0,"\n\n"],[7,"BLENDSHAPE_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",118],[0,"\n\n"],[1,"RENDERER_BLENDSHAPE_USE_TEXTURE",102],[0,"\n\n"],[5,116],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},106],[0,"\n\n"],[5,114],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},110],[0,"\n\n"],[5,112],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"SHADOW_INCLUDED",212],[0,"\n\n"],[7,"SHADOW_INCLUDED"],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"SCENE_SHADOW_TYPE"},"r":{"t":"def","m":"RENDERER_IS_RECEIVE_SHADOWS"}},130],[0,"\n\n"],[7,"NEED_CALCULATE_SHADOWS"],[0,"\n\n"],[6],[0,"\n\n"],[1,"NEED_CALCULATE_SHADOWS",158],[0,"\nuniform mat4 scene_ShadowMatrices [ SCENE_SHADOW_CASCADED_COUNT + 1 ];\nuniform vec4 scene_ShadowSplitSpheres [ 4 ];\nmediump int computeCascadeIndex ( vec3 positionWS ) { vec3 fromCenter0 = positionWS - scene_ShadowSplitSpheres[0].xyz ;\nvec3 fromCenter1 = positionWS - scene_ShadowSplitSpheres[1].xyz ;\nvec3 fromCenter2 = positionWS - scene_ShadowSplitSpheres[2].xyz ;\nvec3 fromCenter3 = positionWS - scene_ShadowSplitSpheres[3].xyz ;\nmediump vec4 comparison = vec4 ( ( dot ( fromCenter0 , fromCenter0 ) < scene_ShadowSplitSpheres[0].w ) , ( dot ( fromCenter1 , fromCenter1 ) < scene_ShadowSplitSpheres[1].w ) , ( dot ( fromCenter2 , fromCenter2 ) < scene_ShadowSplitSpheres[2].w ) , ( dot ( fromCenter3 , fromCenter3 ) < scene_ShadowSplitSpheres[3].w ) ) ;\ncomparison.yzw = clamp ( comparison.yzw - comparison.xyz , 0.0 , 1.0 ) ;\nmediump vec4 indexCoefficient = vec4 ( 4.0 , 3.0 , 2.0 , 1.0 ) ;\nmediump int index = 4 - int ( dot ( comparison , indexCoefficient ) ) ;\nreturn index ; }\nvec3 getShadowCoord ( vec3 positionWS ) { \n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",1,136],[0," mediump int cascadeIndex = 0 ; \n"],[5,138],[0," mediump int cascadeIndex = computeCascadeIndex(positionWS) ; \n"],[6],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",142],[0," mat4 shadowMatrix = scene_ShadowMatrices[cascadeIndex] ; \n"],[5,156],[0," mat4 shadowMatrix ;\n\n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",4,146],[0," if ( cascadeIndex == 0 ) { shadowMatrix = scene_ShadowMatrices[0] ; } else if ( cascadeIndex == 1 ) { shadowMatrix = scene_ShadowMatrices[1] ; } else if ( cascadeIndex == 2 ) { shadowMatrix = scene_ShadowMatrices[2] ; } else if ( cascadeIndex == 3 ) { shadowMatrix = scene_ShadowMatrices[3] ; } else { shadowMatrix = scene_ShadowMatrices[4] ; } \n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",2,150],[0," if ( cascadeIndex == 0 ) { shadowMatrix = scene_ShadowMatrices[0] ; } else if ( cascadeIndex == 1 ) { shadowMatrix = scene_ShadowMatrices[1] ; } else { shadowMatrix = scene_ShadowMatrices[2] ; } \n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",1,154],[0," if ( cascadeIndex == 0 ) { shadowMatrix = scene_ShadowMatrices[0] ; } else { shadowMatrix = scene_ShadowMatrices[1] ; } \n"],[6],[0," \n"],[6],[0,"\nvec4 shadowCoord = shadowMatrix * vec4 ( positionWS , 1.0 ) ;\nreturn shadowCoord.xyz ; }\n\n"],[6],[0,"\n\n"],[1,"NEED_CALCULATE_SHADOWS",210],[0,"\nuniform vec4 scene_ShadowInfo;\nuniform vec4 scene_ShadowMapSize;\n\n"],[1,"GRAPHICS_API_WEBGL2",168],[0,"\nuniform mediump sampler2DShadow scene_ShadowMap;\n\n"],[9,"SAMPLE_TEXTURE2D_SHADOW",["textureName","coord3"],"textureLod ( textureName , coord3 , 0.0 )"],[0,"\n\n"],[9,"TEXTURE2D_SHADOW_PARAM",["shadowMap"],"mediump sampler2DShadow shadowMap"],[0,"\n\n"],[5,182],[0,"\nuniform sampler2D scene_ShadowMap;\n\n"],[1,"ENGINE_NO_DEPTH_TEXTURE",174],[0,"\nconst vec4 bitShift = vec4 ( 1.0 , 1.0 / 256.0 , 1.0 / ( 256.0 * 256.0 ) , 1.0 / ( 256.0 * 256.0 * 256.0 ) );\nfloat textureShadowMapDowngrade ( sampler2D scene_ShadowMap, vec3 shadowCoord ) { vec4 rgbaDepth = texture2D ( scene_ShadowMap , shadowCoord.xy ) ;\nfloat unpackDepth = dot ( rgbaDepth , bitShift ) ;\nreturn unpackDepth < shadowCoord.z ? 0.0 : 1.0 ; }\n\n"],[9,"SAMPLE_TEXTURE2D_SHADOW",["textureName","coord3"],"textureShadowMapDowngrade(textureName, coord3)"],[0,"\n\n"],[5,178],[0,"\nfloat textureShadowMapDowngrade ( sampler2D scene_ShadowMap, vec3 shadowCoord ) { float depth = texture2D ( scene_ShadowMap , shadowCoord.xy ).r ;\nreturn depth < shadowCoord.z ? 0.0 : 1.0 ; }\n\n"],[9,"SAMPLE_TEXTURE2D_SHADOW",["textureName","coord3"],"textureShadowMapDowngrade(textureName, coord3)"],[0,"\n\n"],[6],[0,"\n\n"],[9,"TEXTURE2D_SHADOW_PARAM",["shadowMap"],"mediump sampler2D shadowMap"],[0,"\n\n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_TYPE","==",2,186],[0,"\nfloat sampleShadowMapFiltered4 ( TEXTURE2D_SHADOW_PARAM(shadowMap), vec3 shadowCoord, vec4 shadowMapSize ) { float attenuation ;\nvec4 attenuation4 ;\nvec2 offset = shadowMapSize.xy / 2.0 ;\nvec3 shadowCoord0 = shadowCoord + vec3 ( - offset , 0.0 ) ;\nvec3 shadowCoord1 = shadowCoord + vec3 ( offset.x , - offset.y , 0.0 ) ;\nvec3 shadowCoord2 = shadowCoord + vec3 ( - offset.x , offset.y , 0.0 ) ;\nvec3 shadowCoord3 = shadowCoord + vec3 ( offset , 0.0 ) ;\nattenuation4.x = SAMPLE_TEXTURE2D_SHADOW(shadowMap, shadowCoord0) ;\nattenuation4.y = SAMPLE_TEXTURE2D_SHADOW(shadowMap, shadowCoord1) ;\nattenuation4.z = SAMPLE_TEXTURE2D_SHADOW(shadowMap, shadowCoord2) ;\nattenuation4.w = SAMPLE_TEXTURE2D_SHADOW(shadowMap, shadowCoord3) ;\nattenuation = dot ( attenuation4 , vec4 ( 0.25 ) ) ;\nreturn attenuation ; }\n\n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_TYPE","==",3,196],[0,"\n\n"],[2,"SHADOW_SAMPLE_TENT_INCLUDED",194],[0,"\n\n"],[7,"SHADOW_SAMPLE_TENT_INCLUDED"],[0,"\nfloat sampleShadowGetIRTriangleTexelArea ( float triangleHeight ) { return triangleHeight - 0.5 ; }\nvoid sampleShadowGetTexelAreasTent3x3 ( float offset, out vec4 computedArea, out vec4 computedAreaUncut ) { float a = offset + 0.5 ;\nfloat offsetSquaredHalved = a * a * 0.5 ;\ncomputedAreaUncut.x = computedArea.x = offsetSquaredHalved - offset ;\ncomputedAreaUncut.w = computedArea.w = offsetSquaredHalved ;\ncomputedAreaUncut.y = sampleShadowGetIRTriangleTexelArea(1.5 - offset) ;\nfloat clampedOffsetLeft = min ( offset , 0.0 ) ;\nfloat areaOfSmallLeftTriangle = clampedOffsetLeft * clampedOffsetLeft ;\ncomputedArea.y = computedAreaUncut.y - areaOfSmallLeftTriangle ;\ncomputedAreaUncut.z = sampleShadowGetIRTriangleTexelArea(1.5 + offset) ;\nfloat clampedOffsetRight = max ( offset , 0.0 ) ;\nfloat areaOfSmallRightTriangle = clampedOffsetRight * clampedOffsetRight ;\ncomputedArea.z = computedAreaUncut.z - areaOfSmallRightTriangle ; }\nvoid sampleShadowGetTexelWeightsTent5x5 ( float offset, out vec3 texelsWeightsA, out vec3 texelsWeightsB ) { vec4 areaFrom3texelTriangle ;\nvec4 areaUncutFrom3texelTriangle ;\nsampleShadowGetTexelAreasTent3x3(offset, areaFrom3texelTriangle, areaUncutFrom3texelTriangle) ;\ntexelsWeightsA.x = 0.16 * ( areaFrom3texelTriangle.x ) ;\ntexelsWeightsA.y = 0.16 * ( areaUncutFrom3texelTriangle.y ) ;\ntexelsWeightsA.z = 0.16 * ( areaFrom3texelTriangle.y + 1.0 ) ;\ntexelsWeightsB.x = 0.16 * ( areaFrom3texelTriangle.z + 1.0 ) ;\ntexelsWeightsB.y = 0.16 * ( areaUncutFrom3texelTriangle.z ) ;\ntexelsWeightsB.z = 0.16 * ( areaFrom3texelTriangle.w ) ; }\nvoid sampleShadowComputeSamplesTent5x5 ( vec4 shadowMapTextureTexelSize, vec2 coord, out float fetchesWeights [ 9 ], out vec2 fetchesUV [ 9 ] ) { vec2 tentCenterInTexelSpace = coord.xy * shadowMapTextureTexelSize.zw ;\nvec2 centerOfFetchesInTexelSpace = floor ( tentCenterInTexelSpace + 0.5 ) ;\nvec2 offsetFromTentCenterToCenterOfFetches = tentCenterInTexelSpace - centerOfFetchesInTexelSpace ;\nvec3 texelsWeightsUA , texelsWeightsUB ;\nvec3 texelsWeightsVA , texelsWeightsVB ;\nsampleShadowGetTexelWeightsTent5x5(offsetFromTentCenterToCenterOfFetches.x, texelsWeightsUA, texelsWeightsUB) ;\nsampleShadowGetTexelWeightsTent5x5(offsetFromTentCenterToCenterOfFetches.y, texelsWeightsVA, texelsWeightsVB) ;\nvec3 fetchesWeightsU = vec3 ( texelsWeightsUA.xz , texelsWeightsUB.y ) + vec3 ( texelsWeightsUA.y , texelsWeightsUB.xz ) ;\nvec3 fetchesWeightsV = vec3 ( texelsWeightsVA.xz , texelsWeightsVB.y ) + vec3 ( texelsWeightsVA.y , texelsWeightsVB.xz ) ;\nvec3 fetchesOffsetsU = vec3 ( texelsWeightsUA.y , texelsWeightsUB.xz ) / fetchesWeightsU.xyz + vec3 ( - 2.5 , - 0.5 , 1.5 ) ;\nvec3 fetchesOffsetsV = vec3 ( texelsWeightsVA.y , texelsWeightsVB.xz ) / fetchesWeightsV.xyz + vec3 ( - 2.5 , - 0.5 , 1.5 ) ;\nfetchesOffsetsU *= shadowMapTextureTexelSize.xxx ;\nfetchesOffsetsV *= shadowMapTextureTexelSize.yyy ;\nvec2 bilinearFetchOrigin = centerOfFetchesInTexelSpace * shadowMapTextureTexelSize.xy ;\nfetchesUV[0] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.x , fetchesOffsetsV.x ) ;\nfetchesUV[1] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.y , fetchesOffsetsV.x ) ;\nfetchesUV[2] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.z , fetchesOffsetsV.x ) ;\nfetchesUV[3] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.x , fetchesOffsetsV.y ) ;\nfetchesUV[4] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.y , fetchesOffsetsV.y ) ;\nfetchesUV[5] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.z , fetchesOffsetsV.y ) ;\nfetchesUV[6] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.x , fetchesOffsetsV.z ) ;\nfetchesUV[7] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.y , fetchesOffsetsV.z ) ;\nfetchesUV[8] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.z , fetchesOffsetsV.z ) ;\nfetchesWeights[0] = fetchesWeightsU.x * fetchesWeightsV.x ;\nfetchesWeights[1] = fetchesWeightsU.y * fetchesWeightsV.x ;\nfetchesWeights[2] = fetchesWeightsU.z * fetchesWeightsV.x ;\nfetchesWeights[3] = fetchesWeightsU.x * fetchesWeightsV.y ;\nfetchesWeights[4] = fetchesWeightsU.y * fetchesWeightsV.y ;\nfetchesWeights[5] = fetchesWeightsU.z * fetchesWeightsV.y ;\nfetchesWeights[6] = fetchesWeightsU.x * fetchesWeightsV.z ;\nfetchesWeights[7] = fetchesWeightsU.y * fetchesWeightsV.z ;\nfetchesWeights[8] = fetchesWeightsU.z * fetchesWeightsV.z ; }\n\n"],[6],[0,"\nfloat sampleShadowMapFiltered9 ( TEXTURE2D_SHADOW_PARAM(shadowMap), vec3 shadowCoord, vec4 shadowmapSize ) { float attenuation ;\nfloat fetchesWeights [ 9 ] ;\nvec2 fetchesUV [ 9 ] ;\nsampleShadowComputeSamplesTent5x5(shadowmapSize, shadowCoord.xy, fetchesWeights, fetchesUV) ;\nattenuation = fetchesWeights[0] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[0].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[1] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[1].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[2] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[2].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[3] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[3].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[4] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[4].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[5] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[5].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[6] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[6].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[7] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[7].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[8] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[8].xy , shadowCoord.z )) ;\nreturn attenuation ; }\n\n"],[6],[0,"\nfloat getShadowFade ( vec3 positionWS ) { vec3 camToPixel = positionWS - camera_Position ;\nfloat distanceCamToPixel2 = dot ( camToPixel , camToPixel ) ;\nreturn saturate(distanceCamToPixel2 * scene_ShadowInfo.z + scene_ShadowInfo.w) ; }\nfloat sampleShadowMap ( vec3 positionWS, vec3 shadowCoord ) { float attenuation = 1.0 ;\nif ( shadowCoord.z > 0.0 && shadowCoord.z < 1.0 ) { \n"],[3,"SCENE_SHADOW_TYPE","==",1,200],[0," attenuation = SAMPLE_TEXTURE2D_SHADOW(scene_ShadowMap, shadowCoord) ; \n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_TYPE","==",2,204],[0," attenuation = sampleShadowMapFiltered4(scene_ShadowMap, shadowCoord, scene_ShadowMapSize) ; \n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_TYPE","==",3,208],[0," attenuation = sampleShadowMapFiltered9(scene_ShadowMap, shadowCoord, scene_ShadowMapSize) ; \n"],[6],[0,"\nfloat shadowFade = getShadowFade(positionWS) ;\nattenuation = mix ( 1.0 , mix ( attenuation , 1.0 , shadowFade ) , scene_ShadowInfo.x ) ; }\nreturn attenuation ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"MOBILE_BLINNPHONG_INCLUDED",362],[0,"\n\n"],[7,"MOBILE_BLINNPHONG_INCLUDED"],[0,"\n\n"],[2,"COMMON_INCLUDED",256],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",238],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\nuniform vec4 camera_ProjectionParams;\n\n"],[1,"GRAPHICS_API_WEBGL2",244],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,248],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\nvec3 getViewDirection ( vec3 cameraPosition, vec3 cameraForward, vec3 worldPosition ) { \n"],[1,"CAMERA_ORTHOGRAPHIC",252],[0," return - cameraForward ; \n"],[5,254],[0," return normalize ( cameraPosition - worldPosition ) ; \n"],[6],[0," }\n\n"],[6],[0,"\n\n"],[2,"LIGHT_INCLUDED",304],[0,"\n\n"],[7,"LIGHT_INCLUDED"],[0,"\nuniform ivec4 renderer_Layer;\n\n"],[2,"GRAPHICS_API_WEBGL2",264],[0,"\nbool isBitSet ( float value, float mask, float bitIndex ) { return mod ( floor ( value / pow ( 2.0 , bitIndex ) ) , 2.0 ) == 1.0 && mod ( floor ( mask / pow ( 2.0 , bitIndex ) ) , 2.0 ) == 1.0 ; }\n\n"],[6],[0,"\nbool isRendererCulledByLight ( ivec2 rendererLayer, ivec2 lightCullingMask ) { \n"],[1,"GRAPHICS_API_WEBGL2",268],[0," return ! ( ( rendererLayer.x & lightCullingMask.x ) != 0 || ( rendererLayer.y & lightCullingMask.y ) != 0 ) ; \n"],[5,270],[0," for ( int i = 0 ; i < 16 ; i ++ ) { if ( isBitSet(float ( rendererLayer.x ), float ( lightCullingMask.x ), float ( i )) || isBitSet(float ( rendererLayer.y ), float ( lightCullingMask.y ), float ( i )) ) { return false ; } }\nreturn true ; \n"],[6],[0," }\n\n"],[1,"SCENE_DIRECT_LIGHT_COUNT",278],[0,"\nstruct DirectLight { vec3 color ; vec3 direction ; } ;\nuniform ivec2 scene_DirectLightCullingMask [ SCENE_DIRECT_LIGHT_COUNT ];\nuniform vec3 scene_DirectLightColor [ SCENE_DIRECT_LIGHT_COUNT ];\nuniform vec3 scene_DirectLightDirection [ SCENE_DIRECT_LIGHT_COUNT ];\n\n"],[1,"GRAPHICS_API_WEBGL2",276],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_POINT_LIGHT_COUNT",286],[0,"\nstruct PointLight { vec3 color ; vec3 position ; float distance ; } ;\nuniform ivec2 scene_PointLightCullingMask [ SCENE_POINT_LIGHT_COUNT ];\nuniform vec3 scene_PointLightColor [ SCENE_POINT_LIGHT_COUNT ];\nuniform vec3 scene_PointLightPosition [ SCENE_POINT_LIGHT_COUNT ];\nuniform float scene_PointLightDistance [ SCENE_POINT_LIGHT_COUNT ];\n\n"],[1,"GRAPHICS_API_WEBGL2",284],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_SPOT_LIGHT_COUNT",294],[0,"\nstruct SpotLight { vec3 color ; vec3 position ; vec3 direction ; float distance ; float angleCos ; float penumbraCos ; } ;\nuniform ivec2 scene_SpotLightCullingMask [ SCENE_SPOT_LIGHT_COUNT ];\nuniform vec3 scene_SpotLightColor [ SCENE_SPOT_LIGHT_COUNT ];\nuniform vec3 scene_SpotLightPosition [ SCENE_SPOT_LIGHT_COUNT ];\nuniform vec3 scene_SpotLightDirection [ SCENE_SPOT_LIGHT_COUNT ];\nuniform float scene_SpotLightDistance [ SCENE_SPOT_LIGHT_COUNT ];\nuniform float scene_SpotLightAngleCos [ SCENE_SPOT_LIGHT_COUNT ];\nuniform float scene_SpotLightPenumbraCos [ SCENE_SPOT_LIGHT_COUNT ];\n\n"],[1,"GRAPHICS_API_WEBGL2",292],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nstruct EnvMapLight { vec3 diffuse ; float mipMapLevel ; float diffuseIntensity ; float specularIntensity ; } ;\nuniform EnvMapLight scene_EnvMapLight;\n\n"],[1,"SCENE_USE_SH",298],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_USE_SPECULAR_ENV",302],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"NORMAL_INCLUDED",316],[0,"\n\n"],[7,"NORMAL_INCLUDED"],[0,"\nvec3 getNormalByNormalTexture ( mat3 tbn, sampler2D normalTexture, float normalIntensity, vec2 uv, bool isFrontFacing ) { vec3 normal = ( texture2D ( normalTexture , uv ) ).rgb ;\nnormal = normalize ( tbn * ( ( 2.0 * normal - 1.0 ) * vec3 ( normalIntensity , normalIntensity , 1.0 ) ) ) ;\nnormal *= float ( isFrontFacing ) * 2.0 - 1.0 ;\nreturn normal ; }\nmat3 getTBNByDerivatives ( vec2 uv, vec3 normal, vec3 position, bool isFrontFacing ) { \n"],[1,"HAS_DERIVATIVES",312],[0," uv = isFrontFacing ? uv : - uv ;\nvec3 dp1 = dFdx ( position ) ;\nvec3 dp2 = dFdy ( position ) ;\nvec2 duv1 = dFdx ( uv ) ;\nvec2 duv2 = dFdy ( uv ) ;\nvec3 dp2perp = cross ( dp2 , normal ) ;\nvec3 dp1perp = cross ( normal , dp1 ) ;\nvec3 tangent = dp2perp * duv1.x + dp1perp * duv2.x ;\nvec3 bitangent = dp2perp * duv1.y + dp1perp * duv2.y ;\nfloat denom = max ( dot ( tangent , tangent ) , dot ( bitangent , bitangent ) ) ;\nfloat invmax = ( denom == 0.0 ) ? 0.0 : camera_ProjectionParams.x / sqrt ( denom ) ;\nreturn mat3 ( tangent * invmax , bitangent * invmax , normal ) ; \n"],[5,314],[0," return mat3 ( vec3 ( 0.0 ) , vec3 ( 0.0 ) , normal ) ; \n"],[6],[0," }\n\n"],[6],[0,"\nuniform vec4 material_EmissiveColor;\nuniform vec4 material_BaseColor;\nuniform vec4 material_SpecularColor;\nuniform float material_Shininess;\nuniform float material_NormalIntensity;\nuniform float material_AlphaCutoff;\n\n"],[1,"MATERIAL_HAS_EMISSIVETEXTURE",320],[0,"\nuniform sampler2D material_EmissiveTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",324],[0,"\nuniform sampler2D material_BaseTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_SPECULAR_TEXTURE",328],[0,"\nuniform sampler2D material_SpecularTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_NORMALTEXTURE",332],[0,"\nuniform sampler2D material_NormalTexture;\n\n"],[6],[0,"\nvoid initBlinnPhongMaterial ( vec2 uv, out vec4 ambient, out vec4 emission, out vec4 diffuse, out vec4 specular ) { ambient = vec4 ( 0.0 ) ;\nemission = material_EmissiveColor ;\ndiffuse = material_BaseColor ;\nspecular = material_SpecularColor ;\n\n"],[1,"MATERIAL_HAS_EMISSIVETEXTURE",336],[0," emission *= texture2DSRGB(material_EmissiveTexture, uv) ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",340],[0," diffuse *= texture2DSRGB(material_BaseTexture, uv) ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_SPECULAR_TEXTURE",344],[0," specular *= texture2DSRGB(material_SpecularTexture, uv) ; \n"],[6],[0,"\nambient = vec4 ( scene_EnvMapLight.diffuse * scene_EnvMapLight.diffuseIntensity , 1.0 ) * diffuse ; }\nvoid calculateBlinnPhongLighting ( vec3 N, vec3 V, vec3 worldPos, float shadowAttenuation, inout vec4 diffuse, inout vec4 specular ) { vec3 lightDiffuse = vec3 ( 0.0 ) ;\nvec3 lightSpecular = vec3 ( 0.0 ) ;\n\n"],[1,"SCENE_DIRECT_LIGHT_COUNT",352],[0," DirectLight directionalLight ;\nfor ( int i = 0 ; i < SCENE_DIRECT_LIGHT_COUNT ; i ++ ) { if ( ! isRendererCulledByLight(renderer_Layer.xy, scene_DirectLightCullingMask[i]) ) { directionalLight.color = scene_DirectLightColor[i] ;\n\n"],[1,"NEED_CALCULATE_SHADOWS",350],[0," if ( i == 0 ) { directionalLight.color *= shadowAttenuation ; } \n"],[6],[0,"\ndirectionalLight.direction = scene_DirectLightDirection[i] ;\nfloat d = max ( dot ( N , - directionalLight.direction ) , 0.0 ) ;\nlightDiffuse += directionalLight.color * d ;\nvec3 halfDir = normalize ( V - directionalLight.direction ) ;\nfloat s = pow ( clamp ( dot ( N , halfDir ) , 0.0 , 1.0 ) , material_Shininess ) ;\nlightSpecular += directionalLight.color * s ; } } \n"],[6],[0,"\n\n"],[1,"SCENE_POINT_LIGHT_COUNT",356],[0," PointLight pointLight ;\nfor ( int i = 0 ; i < SCENE_POINT_LIGHT_COUNT ; i ++ ) { if ( ! isRendererCulledByLight(renderer_Layer.xy, scene_PointLightCullingMask[i]) ) { pointLight.color = scene_PointLightColor[i] ;\npointLight.position = scene_PointLightPosition[i] ;\npointLight.distance = scene_PointLightDistance[i] ;\nvec3 direction = worldPos - pointLight.position ;\nfloat dist = length ( direction ) ;\ndirection /= dist ;\nfloat decay = clamp ( 1.0 - pow ( dist / pointLight.distance , 4.0 ) , 0.0 , 1.0 ) ;\nfloat d = max ( dot ( N , - direction ) , 0.0 ) * decay ;\nlightDiffuse += pointLight.color * d ;\nvec3 halfDir = normalize ( V - direction ) ;\nfloat s = pow ( clamp ( dot ( N , halfDir ) , 0.0 , 1.0 ) , material_Shininess ) * decay ;\nlightSpecular += pointLight.color * s ; } } \n"],[6],[0,"\n\n"],[1,"SCENE_SPOT_LIGHT_COUNT",360],[0," SpotLight spotLight ;\nfor ( int i = 0 ; i < SCENE_SPOT_LIGHT_COUNT ; i ++ ) { if ( ! isRendererCulledByLight(renderer_Layer.xy, scene_SpotLightCullingMask[i]) ) { spotLight.color = scene_SpotLightColor[i] ;\nspotLight.position = scene_SpotLightPosition[i] ;\nspotLight.direction = scene_SpotLightDirection[i] ;\nspotLight.distance = scene_SpotLightDistance[i] ;\nspotLight.angleCos = scene_SpotLightAngleCos[i] ;\nspotLight.penumbraCos = scene_SpotLightPenumbraCos[i] ;\nvec3 direction = spotLight.position - worldPos ;\nfloat lightDistance = length ( direction ) ;\ndirection /= lightDistance ;\nfloat angleCos = dot ( direction , - spotLight.direction ) ;\nfloat decay = clamp ( 1.0 - pow ( lightDistance / spotLight.distance , 4.0 ) , 0.0 , 1.0 ) ;\nfloat spotEffect = smoothstep ( spotLight.penumbraCos , spotLight.angleCos , angleCos ) ;\nfloat decayTotal = decay * spotEffect ;\nfloat d = max ( dot ( N , direction ) , 0.0 ) * decayTotal ;\nlightDiffuse += spotLight.color * d ;\nvec3 halfDir = normalize ( V + direction ) ;\nfloat s = pow ( clamp ( dot ( N , halfDir ) , 0.0 , 1.0 ) , material_Shininess ) * decayTotal ;\nlightSpecular += spotLight.color * s ; } } \n"],[6],[0,"\ndiffuse *= vec4 ( lightDiffuse , 1.0 ) ;\nspecular *= vec4 ( lightSpecular , 1.0 ) ; }\n\n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"and","l":{"t":"def","m":"RENDERER_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_HAS_TANGENT"}},"r":{"t":"def","m":"MATERIAL_HAS_NORMALTEXTURE"}},368],[0,"\n\n"],[7,"NEED_VERTEX_TANGENT"],[0,"\n\n"],[6],[0,"\nvarying vec2 v_uv;\n\n"],[1,"RENDERER_ENABLE_VERTEXCOLOR",372],[0,"varying vec4 v_color;\n\n"],[6],[0,"varying vec3 v_pos;\n\n"],[3,"SCENE_FOG_MODE","!=",0,376],[0,"varying vec3 v_positionVS;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_NORMAL",384],[0,"varying vec3 v_normalWS;\n\n"],[1,"NEED_VERTEX_TANGENT",382],[0,"varying vec3 v_tangentWS;\nvarying vec3 v_bitangentWS;\n\n"],[6],[0,"\n"],[6],[0,"\n"],[4,{"t":"and","l":{"t":"def","m":"NEED_CALCULATE_SHADOWS"},"r":{"t":"cmp","m":"SCENE_SHADOW_CASCADED_COUNT","op":"==","v":1}},388],[0,"varying vec3 v_shadowCoord;\n\n"],[6],[0,"\nvoid main() { vec4 ambient , emission , diffuse , specular ;\ninitBlinnPhongMaterial(v_uv, ambient, emission, diffuse, specular) ;\n\n"],[1,"RENDERER_ENABLE_VERTEXCOLOR",392],[0," diffuse *= v_color ; \n"],[6],[0,"\nvec3 N ;\n\n"],[1,"RENDERER_HAS_NORMAL",408],[0," N = normalize ( v_normalWS ) ;\n\n"],[1,"MATERIAL_HAS_NORMALTEXTURE",404],[0," \n"],[1,"NEED_VERTEX_TANGENT",400],[0," mat3 tbn = mat3 ( v_tangentWS , v_bitangentWS , v_normalWS ) ; \n"],[5,402],[0," mat3 tbn = getTBNByDerivatives(v_uv, N, v_pos, gl_FrontFacing) ; \n"],[6],[0,"\nN = getNormalByNormalTexture(tbn, material_NormalTexture, material_NormalIntensity, v_uv, gl_FrontFacing) ; \n"],[5,406],[0," N *= float ( gl_FrontFacing ) * 2.0 - 1.0 ; \n"],[6],[0," \n"],[5,410],[0," N = vec3 ( 0.0 , 0.0 , 1.0 ) ; \n"],[6],[0,"\nvec3 V = getViewDirection(camera_Position, camera_Forward, v_pos) ;\nfloat shadowAttenuation = 1.0 ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"SCENE_DIRECT_LIGHT_COUNT"},"r":{"t":"def","m":"NEED_CALCULATE_SHADOWS"}},420],[0," \n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",1,416],[0," vec3 shadowCoord = v_shadowCoord ; \n"],[5,418],[0," vec3 shadowCoord = getShadowCoord(v_pos) ; \n"],[6],[0,"\nshadowAttenuation *= sampleShadowMap(v_pos, shadowCoord) ; \n"],[6],[0,"\ncalculateBlinnPhongLighting(N, V, v_pos, shadowAttenuation, diffuse, specular) ;\n\n"],[1,"MATERIAL_IS_ALPHA_CUTOFF",424],[0," if ( diffuse.a < material_AlphaCutoff ) { discard ; } \n"],[6],[0,"\nvec4 color = emission + ambient + diffuse + specular ;\n\n"],[1,"MATERIAL_IS_TRANSPARENT",428],[0," color.a = diffuse.a ; \n"],[5,430],[0," color.a = 1.0 ; \n"],[6],[0,"\n\n"],[3,"SCENE_FOG_MODE","!=",0,434],[0," color = fog(color, v_positionVS) ; \n"],[6],[0,"\ngl_FragColor = color ; }\n\n"],[6]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/Blit/Blit.shaderc b/packages/shader/compiledShaders/Blit/Blit.shaderc deleted file mode 100644 index 3cf033722a..0000000000 --- a/packages/shader/compiledShaders/Blit/Blit.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"Blit/Blit","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"Forward","isUsePass":false,"tags":{"pipelineStage":"Forward"},"renderStates":{"constantMap":{"10":false,"11":false},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"HAS_TEX_LOD",34],[0,"\n\n"],[6],[0,"\nattribute vec4 POSITION_UV;\n\nvarying vec2 v_uv;\n\nvoid main() { \ngl_Position = vec4 ( POSITION_UV.xy , 0.0 , 1.0 ) ;\nv_uv = POSITION_UV.zw ;\n }\n\n"],[1,"HAS_TEX_LOD",38],[0,"\n\n"],[6]],"fragmentShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",34],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",22],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",28],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,32],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nuniform mediump sampler2D renderer_BlitTexture;\n\n"],[1,"HAS_TEX_LOD",38],[0,"\nuniform float renderer_BlitMipLevel;\n\n"],[6],[0,"\nuniform vec4 renderer_SourceScaleOffset;\nvarying vec2 v_uv;\n\n\n"],[1,"HAS_TEX_LOD",46],[0,"\nvec4 texture2DLodSRGB ( sampler2D tex, vec2 uv, float lod ) { vec4 color = texture2DLodEXT ( tex , uv , lod ) ;\n\n"],[1,"ENGINE_NO_SRGB",44],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\n\n"],[6],[0,"\nvoid main() { vec2 uv = v_uv ;\nuv = uv * renderer_SourceScaleOffset.xy + renderer_SourceScaleOffset.zw ;\n\n"],[1,"HAS_TEX_LOD",50],[0," gl_FragColor = texture2DLodSRGB(renderer_BlitTexture, uv, renderer_BlitMipLevel) ; \n"],[5,52],[0," gl_FragColor = texture2DSRGB(renderer_BlitTexture, uv) ; \n"],[6],[0," }"]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/Blit/BlitScreen.shaderc b/packages/shader/compiledShaders/Blit/BlitScreen.shaderc deleted file mode 100644 index 72f3bd052d..0000000000 --- a/packages/shader/compiledShaders/Blit/BlitScreen.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"Blit/BlitScreen","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"Forward","isUsePass":false,"tags":{"pipelineStage":"Forward"},"renderStates":{"constantMap":{"10":false,"11":false},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"HAS_TEX_LOD",34],[0,"\n\n"],[6],[0,"\nattribute vec4 POSITION_UV;\n\nvarying vec2 v_uv;\n\nvoid main() { \ngl_Position = vec4 ( POSITION_UV.xy , 0.0 , 1.0 ) ;\nv_uv = POSITION_UV.zw ;\n }\n\n"],[1,"HAS_TEX_LOD",38],[0,"\n\n"],[6]],"fragmentShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nuniform mediump sampler2D renderer_BlitTexture;\n\n"],[1,"HAS_TEX_LOD",34],[0,"\nuniform float renderer_BlitMipLevel;\n\n"],[6],[0,"\nvarying vec2 v_uv;\n\n\n"],[1,"HAS_TEX_LOD",42],[0,"\nvec4 texture2DLodSRGB ( sampler2D tex, vec2 uv, float lod ) { vec4 color = texture2DLodEXT ( tex , uv , lod ) ;\n\n"],[1,"ENGINE_NO_SRGB",40],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\n\n"],[6],[0,"\nvoid main() { vec2 uv = v_uv ;\nuv.y = 1.0 - uv.y ;\n\n"],[1,"HAS_TEX_LOD",46],[0," gl_FragColor = texture2DLodSRGB(renderer_BlitTexture, uv, renderer_BlitMipLevel) ; \n"],[5,48],[0," gl_FragColor = texture2D ( renderer_BlitTexture , uv ) ; \n"],[6],[0,"\ngl_FragColor = sRGBToLinear(gl_FragColor) ; }"]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/Effect/Particle.shaderc b/packages/shader/compiledShaders/Effect/Particle.shaderc deleted file mode 100644 index c70fa143f2..0000000000 --- a/packages/shader/compiledShaders/Effect/Particle.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"Effect/Particle","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"Forward Pass","isUsePass":false,"tags":{"pipelineStage":"Forward"},"renderStates":{"constantMap":{},"variableMap":{"0":"blendEnabled","3":"sourceColorBlendFactor","4":"sourceAlphaBlendFactor","5":"destinationColorBlendFactor","6":"destinationAlphaBlendFactor","11":"depthWriteEnabled","25":"rasterStateCullMode","28":"renderQueueType"}},"vertexShaderInstructions":[[0,"\n"],[2,"PARTICLE_VERT_INCLUDED",537],[0,"\n\n"],[7,"PARTICLE_VERT_INCLUDED"],[0,"\n\n"],[2,"COMMON_INCLUDED",34],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",28],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,32],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nuniform float renderer_CurrentTime;\nuniform vec3 renderer_Gravity;\nuniform vec3 renderer_WorldPosition;\nuniform vec4 renderer_WorldRotation;\nuniform bool renderer_ThreeDStartRotation;\nuniform vec3 renderer_SizeScale;\nuniform vec3 renderer_PivotOffset;\nuniform mat4 camera_ViewMat;\nuniform mat4 camera_ProjMat;\n\n"],[1,"RENDERER_MODE_STRETCHED_BILLBOARD",38],[0,"\nuniform vec3 camera_Position;\n\n"],[6],[0,"\nuniform vec3 camera_Forward;\nuniform vec3 camera_Up;\nuniform float renderer_StretchedBillboardLengthScale;\nuniform float renderer_StretchedBillboardSpeedScale;\nuniform int renderer_SimulationSpace;\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",42],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_EMISSIVETEXTURE",46],[0,"\n\n"],[6],[0,"\n\n"],[4,{"t":"or","l":{"t":"or","l":{"t":"or","l":{"t":"def","m":"RENDERER_MODE_SPHERE_BILLBOARD"},"r":{"t":"def","m":"RENDERER_MODE_STRETCHED_BILLBOARD"}},"r":{"t":"def","m":"RENDERER_MODE_HORIZONTAL_BILLBOARD"}},"r":{"t":"def","m":"RENDERER_MODE_VERTICAL_BILLBOARD"}},50],[0,"attribute vec4 a_CornerTextureCoordinate;\n\n"],[6],[0,"\n"],[1,"RENDERER_MODE_MESH",58],[0,"attribute vec3 POSITION;\n\n"],[1,"RENDERER_ENABLE_VERTEXCOLOR",56],[0,"attribute vec4 COLOR_0;\n\n"],[6],[0,"attribute vec2 TEXCOORD_0;\n\n"],[6],[0,"attribute vec4 a_ShapePositionStartLifeTime;\nattribute vec4 a_DirectionTime;\nattribute vec4 a_StartColor;\nattribute vec3 a_StartSize;\nattribute vec3 a_StartRotation0;\nattribute float a_StartSpeed;\nattribute vec4 a_Random0;\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_TSA_FRAME_RANDOM_CURVES"},"r":{"t":"def","m":"RENDERER_VOL_IS_RANDOM_TWO"}},62],[0,"attribute vec4 a_Random1;\n\n"],[6],[0,"\n"],[4,{"t":"or","l":{"t":"or","l":{"t":"def","m":"RENDERER_FOL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_FOL_CURVE_MODE"}},"r":{"t":"def","m":"RENDERER_LVL_MODULE_ENABLED"}},66],[0,"attribute vec4 a_Random2;\n\n"],[6],[0,"attribute vec3 a_SimulationWorldPosition;\nattribute vec4 a_SimulationWorldRotation;\n\n"],[1,"RENDERER_TRANSFORM_FEEDBACK",70],[0,"attribute vec3 a_FeedbackPosition;\nattribute vec3 a_FeedbackVelocity;\n\n"],[6],[0,"\n"],[1,"MATERIAL_HAS_BASETEXTURE",74],[0,"attribute vec4 a_SimulationUV;\n\n"],[6],[0,"\nvarying vec4 v_Color;\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",78],[0,"varying vec2 v_TextureCoordinate;\n\n"],[6],[0,"\n"],[1,"RENDERER_MODE_MESH",82],[0,"varying vec4 v_MeshColor;\n\n"],[6],[0,"\n\n"],[2,"PARTICLE_COMMON_INCLUDED",88],[0,"\n\n"],[7,"PARTICLE_COMMON_INCLUDED"],[0,"\nvec3 rotationByQuaternions ( in vec3 v, in vec4 q ) { return v + 2.0 * cross ( q.xyz , cross ( q.xyz , v ) + q.w * v ) ; }\nvec3 rotationByEuler ( in vec3 vector, in vec3 rot ) { float halfRoll = rot.z * 0.5 ;\nfloat halfPitch = rot.x * 0.5 ;\nfloat halfYaw = rot.y * 0.5 ;\nfloat sinRoll = sin ( halfRoll ) ;\nfloat cosRoll = cos ( halfRoll ) ;\nfloat sinPitch = sin ( halfPitch ) ;\nfloat cosPitch = cos ( halfPitch ) ;\nfloat sinYaw = sin ( halfYaw ) ;\nfloat cosYaw = cos ( halfYaw ) ;\nfloat cosYawPitch = cosYaw * cosPitch ;\nfloat sinYawPitch = sinYaw * sinPitch ;\nfloat quaX = ( cosYaw * sinPitch * cosRoll ) + ( sinYaw * cosPitch * sinRoll ) ;\nfloat quaY = ( sinYaw * cosPitch * cosRoll ) - ( cosYaw * sinPitch * sinRoll ) ;\nfloat quaZ = ( cosYawPitch * sinRoll ) - ( sinYawPitch * cosRoll ) ;\nfloat quaW = ( cosYawPitch * cosRoll ) + ( sinYawPitch * sinRoll ) ;\nreturn rotationByQuaternions(vector, vec4 ( quaX , quaY , quaZ , quaW )) ; }\nvec3 rotationByAxis ( in vec3 vector, in vec3 axis, in float angle ) { float halfAngle = angle * 0.5 ;\nfloat s = sin ( halfAngle ) ;\nreturn rotationByQuaternions(vector, vec4 ( axis * s , cos ( halfAngle ) )) ; }\nfloat evaluateParticleCurve ( in vec2 keys [ 4 ], in float normalizedAge ) { float value ;\nfor ( int i = 1 ; i < 4 ; i ++ ) { vec2 key = keys[i] ;\nfloat time = key.x ;\nif ( time >= normalizedAge ) { vec2 lastKey = keys[i - 1] ;\nfloat lastTime = lastKey.x ;\nfloat age = ( normalizedAge - lastTime ) / ( time - lastTime ) ;\nvalue = mix ( lastKey.y , key.y , age ) ;\nbreak ; } }\nreturn value ; }\nfloat evaluateParticleCurveCumulative ( in vec2 keys [ 4 ], in float normalizedAge, out float currentValue ) { float cumulativeValue = 0.0 ;\nfor ( int i = 1 ; i < 4 ; i ++ ) { vec2 key = keys[i] ;\nfloat time = key.x ;\nvec2 lastKey = keys[i - 1] ;\nfloat lastValue = lastKey.y ;\nif ( time >= normalizedAge ) { float lastTime = lastKey.x ;\nfloat offsetTime = normalizedAge - lastTime ;\nfloat age = offsetTime / ( time - lastTime ) ;\ncurrentValue = mix ( lastValue , key.y , age ) ;\ncumulativeValue += ( lastValue + currentValue ) * 0.5 * offsetTime ;\nbreak ; } else { cumulativeValue += ( lastValue + key.y ) * 0.5 * ( time - lastKey.x ) ; } }\nreturn cumulativeValue ; }\nvec4 evaluateParticleGradient ( in vec4 colorKeys [ 4 ], in float colorMaxTime, in vec2 alphaKeys [ 4 ], in float alphaMaxTime, in float t ) { vec4 value ;\nfloat alphaT = min ( t , alphaMaxTime ) ;\nfor ( int i = 0 ; i < 4 ; i ++ ) { vec2 key = alphaKeys[i] ;\nif ( alphaT <= key.x ) { if ( i == 0 ) { value.a = alphaKeys[0].y ; } else { vec2 lastKey = alphaKeys[i - 1] ;\nfloat age = ( alphaT - lastKey.x ) / ( key.x - lastKey.x ) ;\nvalue.a = mix ( lastKey.y , key.y , age ) ; }\nbreak ; } }\nfloat colorT = min ( t , colorMaxTime ) ;\nfor ( int i = 0 ; i < 4 ; i ++ ) { vec4 key = colorKeys[i] ;\nif ( colorT <= key.x ) { if ( i == 0 ) { value.rgb = colorKeys[0].yzw ; } else { vec4 lastKey = colorKeys[i - 1] ;\nfloat age = ( colorT - lastKey.x ) / ( key.x - lastKey.x ) ;\nvalue.rgb = mix ( lastKey.yzw , key.yzw , age ) ; }\nbreak ; } }\nreturn value ; }\n\n"],[6],[0,"\n\n"],[2,"VELOCITY_OVER_LIFETIME_INCLUDED",136],[0,"\n\n"],[7,"VELOCITY_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_VOL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_VOL_CURVE_MODE"}},98],[0,"\n\n"],[7,"_VOL_MODULE_ENABLED"],[0,"\n\n"],[6],[0,"\n\n"],[1,"_VOL_MODULE_ENABLED",134],[0,"\nuniform int renderer_VOLSpace;\n\n"],[1,"RENDERER_VOL_CONSTANT_MODE",108],[0,"\nuniform vec3 renderer_VOLMaxConst;\n\n"],[1,"RENDERER_VOL_IS_RANDOM_TWO",106],[0,"\nuniform vec3 renderer_VOLMinConst;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_VOL_CURVE_MODE",116],[0,"\nuniform vec2 renderer_VOLMaxGradientX [ 4 ];\nuniform vec2 renderer_VOLMaxGradientY [ 4 ];\nuniform vec2 renderer_VOLMaxGradientZ [ 4 ];\n\n"],[1,"RENDERER_VOL_IS_RANDOM_TWO",114],[0,"\nuniform vec2 renderer_VOLMinGradientX [ 4 ];\nuniform vec2 renderer_VOLMinGradientY [ 4 ];\nuniform vec2 renderer_VOLMinGradientZ [ 4 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\nvec3 computeVelocityPositionOffset ( in float normalizedAge, in float age, out vec3 currentVelocity ) { vec3 velocityPosition ;\n\n"],[1,"RENDERER_VOL_CONSTANT_MODE",124],[0," currentVelocity = renderer_VOLMaxConst ;\n\n"],[1,"RENDERER_VOL_IS_RANDOM_TWO",122],[0," currentVelocity = mix ( renderer_VOLMinConst , currentVelocity , a_Random1.yzw ) ; \n"],[6],[0,"\nvelocityPosition = currentVelocity * age ; \n"],[6],[0,"\n\n"],[1,"RENDERER_VOL_CURVE_MODE",132],[0," velocityPosition = vec3 ( evaluateParticleCurveCumulative(renderer_VOLMaxGradientX, normalizedAge, currentVelocity.x) , evaluateParticleCurveCumulative(renderer_VOLMaxGradientY, normalizedAge, currentVelocity.y) , evaluateParticleCurveCumulative(renderer_VOLMaxGradientZ, normalizedAge, currentVelocity.z) ) ;\n\n"],[1,"RENDERER_VOL_IS_RANDOM_TWO",130],[0," vec3 minCurrentVelocity ;\nvec3 minVelocityPosition = vec3 ( evaluateParticleCurveCumulative(renderer_VOLMinGradientX, normalizedAge, minCurrentVelocity.x) , evaluateParticleCurveCumulative(renderer_VOLMinGradientY, normalizedAge, minCurrentVelocity.y) , evaluateParticleCurveCumulative(renderer_VOLMinGradientZ, normalizedAge, minCurrentVelocity.z) ) ;\ncurrentVelocity = mix ( minCurrentVelocity , currentVelocity , a_Random1.yzw ) ;\nvelocityPosition = mix ( minVelocityPosition , velocityPosition , a_Random1.yzw ) ; \n"],[6],[0,"\nvelocityPosition *= vec3 ( a_ShapePositionStartLifeTime.w ) ; \n"],[6],[0,"\nreturn velocityPosition ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"FORCE_OVER_LIFETIME_INCLUDED",183],[0,"\n\n"],[7,"FORCE_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_FOL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_FOL_CURVE_MODE"}},146],[0,"\n\n"],[7,"_FOL_MODULE_ENABLED"],[0,"\n\n"],[6],[0,"\n\n"],[1,"_FOL_MODULE_ENABLED",181],[0,"\nuniform int renderer_FOLSpace;\n\n"],[1,"RENDERER_FOL_CONSTANT_MODE",156],[0,"\nuniform vec3 renderer_FOLMaxConst;\n\n"],[1,"RENDERER_FOL_IS_RANDOM_TWO",154],[0,"\nuniform vec3 renderer_FOLMinConst;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_FOL_CURVE_MODE",164],[0,"\nuniform vec2 renderer_FOLMaxGradientX [ 4 ];\nuniform vec2 renderer_FOLMaxGradientY [ 4 ];\nuniform vec2 renderer_FOLMaxGradientZ [ 4 ];\n\n"],[1,"RENDERER_FOL_IS_RANDOM_TWO",162],[0,"\nuniform vec2 renderer_FOLMinGradientX [ 4 ];\nuniform vec2 renderer_FOLMinGradientY [ 4 ];\nuniform vec2 renderer_FOLMinGradientZ [ 4 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\nfloat computeDisplacementIntegral ( in float to, in float tr, in float a1, in float a2, in float v1 ) { return to * to * to * ( a2 - a1 ) / ( tr * 6.0 ) + a1 * to * to * 0.5 + v1 * to ; }\nfloat evaluateForceParticleCurveCumulative ( in vec2 keys [ 4 ], in float normalizedAge, out float velocityCumulative ) { float cumulativeValue = 0.0 ;\nvelocityCumulative = 0.0 ;\nfor ( int i = 1 ; i < 4 ; i ++ ) { vec2 key = keys[i] ;\nvec2 lastKey = keys[i - 1] ;\nfloat timeRange = ( key.x - lastKey.x ) * a_ShapePositionStartLifeTime.w ;\nif ( key.x >= normalizedAge ) { float timeOffset = ( normalizedAge - lastKey.x ) * a_ShapePositionStartLifeTime.w ;\ncumulativeValue += computeDisplacementIntegral(timeOffset, timeRange, lastKey.y, key.y, velocityCumulative) ;\nfloat finalAcceleration = mix ( lastKey.y , key.y , timeOffset / timeRange ) ;\nvelocityCumulative += 0.5 * timeOffset * ( finalAcceleration + lastKey.y ) ;\nbreak ; } else { cumulativeValue += computeDisplacementIntegral(timeRange, timeRange, lastKey.y, key.y, velocityCumulative) ;\nvelocityCumulative += 0.5 * timeRange * ( lastKey.y + key.y ) ; } }\nreturn cumulativeValue ; }\nvec3 computeForcePositionOffset ( in float normalizedAge, in float age, out vec3 velocityOffset ) { vec3 forcePosition ;\n\n"],[1,"RENDERER_FOL_CONSTANT_MODE",172],[0," vec3 forceAcceleration = renderer_FOLMaxConst ;\n\n"],[1,"RENDERER_FOL_IS_RANDOM_TWO",170],[0," forceAcceleration = mix ( renderer_FOLMinConst , forceAcceleration , vec3 ( a_Random2.x , a_Random2.y , a_Random2.z ) ) ; \n"],[6],[0,"\nvelocityOffset = forceAcceleration * age ;\nforcePosition = 0.5 * forceAcceleration * age * age ; \n"],[5,179],[1,"RENDERER_FOL_CURVE_MODE",179],[0," forcePosition = vec3 ( evaluateForceParticleCurveCumulative(renderer_FOLMaxGradientX, normalizedAge, velocityOffset.x) , evaluateForceParticleCurveCumulative(renderer_FOLMaxGradientY, normalizedAge, velocityOffset.y) , evaluateForceParticleCurveCumulative(renderer_FOLMaxGradientZ, normalizedAge, velocityOffset.z) ) ;\n\n"],[1,"RENDERER_FOL_IS_RANDOM_TWO",177],[0," vec3 minVelocityOffset ;\nforcePosition = vec3 ( mix ( evaluateForceParticleCurveCumulative(renderer_FOLMinGradientX, normalizedAge, minVelocityOffset.x) , forcePosition.x , a_Random2.x ) , mix ( evaluateForceParticleCurveCumulative(renderer_FOLMinGradientY, normalizedAge, minVelocityOffset.y) , forcePosition.y , a_Random2.y ) , mix ( evaluateForceParticleCurveCumulative(renderer_FOLMinGradientZ, normalizedAge, minVelocityOffset.z) , forcePosition.z , a_Random2.z ) ) ;\nvelocityOffset = mix ( minVelocityOffset , velocityOffset , vec3 ( a_Random2.x , a_Random2.y , a_Random2.z ) ) ; \n"],[6],[0," \n"],[6],[0,"\nreturn forcePosition ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"COLOR_OVER_LIFETIME_INCLUDED",209],[0,"\n\n"],[7,"COLOR_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_COL_GRADIENT"},"r":{"t":"def","m":"RENDERER_COL_RANDOM_GRADIENTS"}},195],[0,"\nuniform vec4 renderer_COLMaxGradientColor [ 4 ];\nuniform vec2 renderer_COLMaxGradientAlpha [ 4 ];\n\n"],[1,"RENDERER_COL_RANDOM_GRADIENTS",193],[0,"\nuniform vec4 renderer_COLMinGradientColor [ 4 ];\nuniform vec2 renderer_COLMinGradientAlpha [ 4 ];\n\n"],[6],[0,"\nuniform vec4 renderer_COLGradientKeysMaxTime;\n\n"],[6],[0,"\nvec4 computeParticleColor ( in vec4 color, in float normalizedAge ) { \n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_COL_GRADIENT"},"r":{"t":"def","m":"RENDERER_COL_RANDOM_GRADIENTS"}},199],[0," vec4 gradientColor = evaluateParticleGradient(renderer_COLMaxGradientColor, renderer_COLGradientKeysMaxTime.z, renderer_COLMaxGradientAlpha, renderer_COLGradientKeysMaxTime.w, normalizedAge) ; \n"],[6],[0,"\n\n"],[1,"RENDERER_COL_RANDOM_GRADIENTS",203],[0," gradientColor = mix ( evaluateParticleGradient(renderer_COLMinGradientColor, renderer_COLGradientKeysMaxTime.x, renderer_COLMinGradientAlpha, renderer_COLGradientKeysMaxTime.y, normalizedAge) , gradientColor , a_Random0.y ) ; \n"],[6],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_COL_GRADIENT"},"r":{"t":"def","m":"RENDERER_COL_RANDOM_GRADIENTS"}},207],[0," color *= gradientColor ; \n"],[6],[0,"\nreturn color ; }\n\n"],[6],[0,"\n\n"],[2,"SIZE_OVER_LIFETIME_INCLUDED",269],[0,"\n\n"],[7,"SIZE_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[1,"RENDERER_SOL_CURVE_MODE",229],[0,"\nuniform vec2 renderer_SOLMaxCurveX [ 4 ];\n\n"],[1,"RENDERER_SOL_IS_SEPARATE",219],[0,"\nuniform vec2 renderer_SOLMaxCurveY [ 4 ];\nuniform vec2 renderer_SOLMaxCurveZ [ 4 ];\n\n"],[6],[0,"\n\n"],[1,"RENDERER_SOL_IS_RANDOM_TWO",227],[0,"\nuniform vec2 renderer_SOLMinCurveX [ 4 ];\n\n"],[1,"RENDERER_SOL_IS_SEPARATE",225],[0,"\nuniform vec2 renderer_SOLMinCurveY [ 4 ];\nuniform vec2 renderer_SOLMinCurveZ [ 4 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nvec2 computeParticleSizeBillboard ( in vec2 size, in float normalizedAge ) { \n"],[1,"RENDERER_SOL_CURVE_MODE",247],[0," float lifeSizeX = evaluateParticleCurve(renderer_SOLMaxCurveX, normalizedAge) ;\n\n"],[1,"RENDERER_SOL_IS_RANDOM_TWO",235],[0," lifeSizeX = mix ( evaluateParticleCurve(renderer_SOLMinCurveX, normalizedAge) , lifeSizeX , a_Random0.z ) ; \n"],[6],[0,"\n\n"],[1,"RENDERER_SOL_IS_SEPARATE",243],[0," float lifeSizeY = evaluateParticleCurve(renderer_SOLMaxCurveY, normalizedAge) ;\n\n"],[1,"RENDERER_SOL_IS_RANDOM_TWO",241],[0," lifeSizeY = mix ( evaluateParticleCurve(renderer_SOLMinCurveY, normalizedAge) , lifeSizeY , a_Random0.z ) ; \n"],[6],[0,"\nsize *= vec2 ( lifeSizeX , lifeSizeY ) ; \n"],[5,245],[0," size *= lifeSizeX ; \n"],[6],[0," \n"],[6],[0,"\nreturn size ; }\n\n"],[1,"RENDERER_MODE_MESH",267],[0,"\nvec3 computeParticleSizeMesh ( in vec3 size, in float normalizedAge ) { \n"],[1,"RENDERER_SOL_CURVE",253],[0," size *= evaluateParticleCurve(renderer_SOLMaxCurveX, normalizedAge) ; \n"],[6],[0,"\n\n"],[1,"RENDERER_SOL_RANDOM_CURVES",257],[0," size *= mix ( evaluateParticleCurve(renderer_SOLMaxCurveX, normalizedAge) , evaluateParticleCurve(u_SOLSizeGradientMax, normalizedAge) , a_Random0.z ) ; \n"],[6],[0,"\n\n"],[1,"RENDERER_SOL_CURVE_SEPARATE",261],[0," size *= vec3 ( evaluateParticleCurve(renderer_SOLMinCurveX, normalizedAge) , evaluateParticleCurve(renderer_SOLMinCurveY, normalizedAge) , evaluateParticleCurve(renderer_SOLMinCurveZ, normalizedAge) ) ; \n"],[6],[0,"\n\n"],[1,"RENDERER_SOL_RANDOM_CURVES_SEPARATE",265],[0," size *= vec3 ( mix ( evaluateParticleCurve(renderer_SOLMinCurveX, normalizedAge) , evaluateParticleCurve(renderer_SOLMaxCurveX, normalizedAge) , a_Random0.z ) , mix ( evaluateParticleCurve(renderer_SOLMinCurveY, normalizedAge) , evaluateParticleCurve(renderer_SOLMaxCurveY, normalizedAge) , a_Random0.z ) , mix ( evaluateParticleCurve(renderer_SOLMinCurveZ, normalizedAge) , evaluateParticleCurve(renderer_SOLMaxCurveZ, normalizedAge) , a_Random0.z ) ) ; \n"],[6],[0,"\nreturn size ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"ROTATION_OVER_LIFETIME_INCLUDED",367],[0,"\n\n"],[7,"ROTATION_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_ROL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_ROL_CURVE_MODE"}},299],[0,"\n\n"],[1,"RENDERER_ROL_CURVE_MODE",291],[0,"\nuniform vec2 renderer_ROLMaxCurveZ [ 4 ];\n\n"],[1,"RENDERER_ROL_IS_SEPARATE",281],[0,"\nuniform vec2 renderer_ROLMaxCurveX [ 4 ];\nuniform vec2 renderer_ROLMaxCurveY [ 4 ];\n\n"],[6],[0,"\n\n"],[1,"RENDERER_ROL_IS_RANDOM_TWO",289],[0,"\nuniform vec2 renderer_ROLMinCurveZ [ 4 ];\n\n"],[1,"RENDERER_ROL_IS_SEPARATE",287],[0,"\nuniform vec2 renderer_ROLMinCurveX [ 4 ];\nuniform vec2 renderer_ROLMinCurveY [ 4 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[5,297],[0,"\nuniform vec3 renderer_ROLMaxConst;\n\n"],[1,"RENDERER_ROL_IS_RANDOM_TWO",295],[0,"\nuniform vec3 renderer_ROLMinConst;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nfloat computeParticleRotationFloat ( in float rotation, in float age, in float normalizedAge ) { \n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_ROL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_ROL_CURVE_MODE"}},317],[0," \n"],[1,"RENDERER_ROL_CURVE_MODE",309],[0," float currentValue ;\nfloat lifeRotation = evaluateParticleCurveCumulative(renderer_ROLMaxCurveZ, normalizedAge, currentValue) ;\n\n"],[1,"RENDERER_ROL_IS_RANDOM_TWO",307],[0," lifeRotation = mix ( evaluateParticleCurveCumulative(renderer_ROLMinCurveZ, normalizedAge, currentValue) , lifeRotation , a_Random0.w ) ; \n"],[6],[0,"\nrotation += lifeRotation * a_ShapePositionStartLifeTime.w ; \n"],[5,315],[0," float lifeRotation = renderer_ROLMaxConst.z ;\n\n"],[1,"RENDERER_ROL_IS_RANDOM_TWO",313],[0," lifeRotation = mix ( renderer_ROLMinConst.z , lifeRotation , a_Random0.w ) ; \n"],[6],[0,"\nrotation += lifeRotation * age ; \n"],[6],[0," \n"],[6],[0,"\nreturn rotation ; }\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_MODE_MESH"},"r":{"t":"or","l":{"t":"def","m":"RENDERER_ROL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_ROL_CURVE_MODE"}}},365],[0,"\nvec3 computeParticleRotationVec3 ( in vec3 rotation, in float age, in float normalizedAge ) { \n"],[1,"RENDERER_ROL_IS_SEPARATE",343],[0," \n"],[1,"RENDERER_ROL_CONSTANT_MODE",331],[0," \n"],[1,"RENDERER_ROL_IS_RANDOM_TWO",327],[0," vec3 ageRot = mix ( renderer_ROLMinConst , renderer_ROLMaxConst , a_Random0.w ) * age ; \n"],[5,329],[0," vec3 ageRot = renderer_ROLMaxConst * age ; \n"],[6],[0,"\nrotation += ageRot ; \n"],[6],[0,"\n\n"],[1,"RENDERER_ROL_CURVE_MODE",341],[0," float currentValue ;\nfloat lifetime = a_ShapePositionStartLifeTime.w ;\n\n"],[1,"RENDERER_ROL_IS_RANDOM_TWO",337],[0," rotation += vec3 ( mix ( evaluateParticleCurveCumulative(renderer_ROLMinCurveX, normalizedAge, currentValue) , evaluateParticleCurveCumulative(renderer_ROLMaxCurveX, normalizedAge, currentValue) , a_Random0.w ) , mix ( evaluateParticleCurveCumulative(renderer_ROLMinCurveY, normalizedAge, currentValue) , evaluateParticleCurveCumulative(renderer_ROLMaxCurveY, normalizedAge, currentValue) , a_Random0.w ) , mix ( evaluateParticleCurveCumulative(renderer_ROLMinCurveZ, normalizedAge, currentValue) , evaluateParticleCurveCumulative(renderer_ROLMaxCurveZ, normalizedAge, currentValue) , a_Random0.w ) ) * lifetime ; \n"],[5,339],[0," rotation += vec3 ( evaluateParticleCurveCumulative(renderer_ROLMaxCurveX, normalizedAge, currentValue) , evaluateParticleCurveCumulative(renderer_ROLMaxCurveY, normalizedAge, currentValue) , evaluateParticleCurveCumulative(renderer_ROLMaxCurveZ, normalizedAge, currentValue) ) * lifetime ; \n"],[6],[0," \n"],[6],[0," \n"],[5,363],[0," \n"],[1,"RENDERER_ROL_CONSTANT_MODE",353],[0," \n"],[1,"RENDERER_ROL_IS_RANDOM_TWO",349],[0," float ageRot = mix ( renderer_ROLMinConst.z , renderer_ROLMaxConst.z , a_Random0.w ) * age ; \n"],[5,351],[0," float ageRot = renderer_ROLMaxConst.z * age ; \n"],[6],[0,"\nrotation += ageRot ; \n"],[6],[0,"\n\n"],[1,"RENDERER_ROL_CURVE_MODE",361],[0," float currentValue ;\nfloat lifeRotation = evaluateParticleCurveCumulative(renderer_ROLMaxCurveZ, normalizedAge, currentValue) ;\n\n"],[1,"RENDERER_ROL_IS_RANDOM_TWO",359],[0," lifeRotation = mix ( evaluateParticleCurveCumulative(renderer_ROLMinCurveZ, normalizedAge, currentValue) , lifeRotation , a_Random0.w ) ; \n"],[6],[0,"\nrotation += lifeRotation * a_ShapePositionStartLifeTime.w ; \n"],[6],[0," \n"],[6],[0,"\nreturn rotation ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"TEXTURE_SHEET_ANIMATION_INCLUDED",389],[0,"\n\n"],[7,"TEXTURE_SHEET_ANIMATION_INCLUDED"],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_TSA_FRAME_CURVE"},"r":{"t":"def","m":"RENDERER_TSA_FRAME_RANDOM_CURVES"}},379],[0,"\nuniform float renderer_TSACycles;\nuniform vec3 renderer_TSATillingParams;\nuniform vec2 renderer_TSAFrameMaxCurve [ 4 ];\n\n"],[1,"RENDERER_TSA_FRAME_RANDOM_CURVES",377],[0,"\nuniform vec2 renderer_TSAFrameMinCurve [ 4 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\nvec2 computeParticleUV ( in vec2 uv, in float normalizedAge ) { \n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_TSA_FRAME_CURVE"},"r":{"t":"def","m":"RENDERER_TSA_FRAME_RANDOM_CURVES"}},387],[0," float scaledNormalizedAge = normalizedAge * renderer_TSACycles ;\nfloat cycleNormalizedAge = scaledNormalizedAge - floor ( scaledNormalizedAge ) ;\nfloat normalizedFrame = evaluateParticleCurve(renderer_TSAFrameMaxCurve, cycleNormalizedAge) ;\n\n"],[1,"RENDERER_TSA_FRAME_RANDOM_CURVES",385],[0," normalizedFrame = mix ( evaluateParticleCurve(renderer_TSAFrameMinCurve, cycleNormalizedAge) , normalizedFrame , a_Random1.x ) ; \n"],[6],[0,"\nfloat frame = floor ( normalizedFrame * renderer_TSATillingParams.z ) ;\nfloat tileRow = frame * renderer_TSATillingParams.x ;\nfloat tileRowIndex = floor ( tileRow ) ;\nuv.x += tileRow - tileRowIndex ;\nuv.y += tileRowIndex * renderer_TSATillingParams.y ; \n"],[6],[0,"\nreturn uv ; }\n\n"],[6],[0,"\n\n"],[2,"LIMIT_VELOCITY_OVER_LIFETIME_INCLUDED",447],[0,"\n\n"],[7,"LIMIT_VELOCITY_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[1,"RENDERER_LVL_MODULE_ENABLED",445],[0,"\n\n"],[2,"RENDERER_LVL_SEPARATE_AXES",415],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CONSTANT_MODE",405],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",403],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CURVE_MODE",413],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",411],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_SEPARATE_AXES",435],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CONSTANT_MODE",425],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",423],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CURVE_MODE",433],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",431],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_DRAG_CURVE_MODE",443],[0,"\n\n"],[1,"RENDERER_LVL_DRAG_IS_RANDOM_TWO",441],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nvec3 computeParticlePosition ( in vec3 startVelocity, in float age, in float normalizedAge, vec3 gravityVelocity, vec4 worldRotation, inout vec3 localVelocity, inout vec3 worldVelocity ) { vec3 startPosition = startVelocity * age ;\nvec3 finalPosition ;\nvec3 localPositionOffset = startPosition ;\nvec3 worldPositionOffset ;\n\n"],[1,"_VOL_MODULE_ENABLED",451],[0," vec3 lifeVelocity ;\nvec3 velocityPositionOffset = computeVelocityPositionOffset(normalizedAge, age, lifeVelocity) ;\nif ( renderer_VOLSpace == 0 ) { localVelocity += lifeVelocity ;\nlocalPositionOffset += velocityPositionOffset ; } else { worldVelocity += lifeVelocity ;\nworldPositionOffset += velocityPositionOffset ; } \n"],[6],[0,"\n\n"],[1,"_FOL_MODULE_ENABLED",455],[0," vec3 forceVelocity ;\nvec3 forcePositionOffset = computeForcePositionOffset(normalizedAge, age, forceVelocity) ;\nif ( renderer_FOLSpace == 0 ) { localVelocity += forceVelocity ;\nlocalPositionOffset += forcePositionOffset ; } else { worldVelocity += forceVelocity ;\nworldPositionOffset += forcePositionOffset ; } \n"],[6],[0,"\nfinalPosition = rotationByQuaternions(a_ShapePositionStartLifeTime.xyz + localPositionOffset, worldRotation) + worldPositionOffset ;\nif ( renderer_SimulationSpace == 0 ) { finalPosition = finalPosition + renderer_WorldPosition ; } else if ( renderer_SimulationSpace == 1 ) { finalPosition = finalPosition + a_SimulationWorldPosition ; }\nfinalPosition += 0.5 * gravityVelocity * age ;\nreturn finalPosition ; }\nvec3 computeParticleCenter ( float age, float normalizedAge ) { vec4 worldRotation ;\nif ( renderer_SimulationSpace == 0 ) { worldRotation = renderer_WorldRotation ; } else { worldRotation = a_SimulationWorldRotation ; }\nvec3 localVelocity ;\nvec3 worldVelocity ;\n\n"],[1,"RENDERER_TRANSFORM_FEEDBACK",463],[0," vec3 center ;\nif ( renderer_SimulationSpace == 0 ) { center = rotationByQuaternions(a_FeedbackPosition, worldRotation) + renderer_WorldPosition ; } else if ( renderer_SimulationSpace == 1 ) { center = a_FeedbackPosition ; }\nlocalVelocity = a_FeedbackVelocity ;\nworldVelocity = vec3 ( 0.0 ) ;\n\n"],[1,"_VOL_MODULE_ENABLED",461],[0," vec3 instantVOLVelocity ;\ncomputeVelocityPositionOffset(normalizedAge, age, instantVOLVelocity) ;\nif ( renderer_VOLSpace == 0 ) { localVelocity += instantVOLVelocity ; } else { worldVelocity += instantVOLVelocity ; } \n"],[6],[0," \n"],[5,465],[0," vec3 startVelocity = a_DirectionTime.xyz * a_StartSpeed ;\nvec3 gravityVelocity = renderer_Gravity * a_Random0.x * age ;\nlocalVelocity = startVelocity ;\nworldVelocity = gravityVelocity ;\nvec3 center = computeParticlePosition(startVelocity, age, normalizedAge, gravityVelocity, worldRotation, localVelocity, worldVelocity) ; \n"],[6],[0,"\n\n"],[1,"RENDERER_MODE_SPHERE_BILLBOARD",475],[0," vec2 corner = a_CornerTextureCoordinate.xy + renderer_PivotOffset.xy ;\nvec3 sideVector = normalize ( cross ( camera_Forward , camera_Up ) ) ;\nvec3 upVector = normalize ( cross ( sideVector , camera_Forward ) ) ;\ncorner *= computeParticleSizeBillboard(a_StartSize.xy, normalizedAge) ;\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_ROL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_ROL_CURVE_MODE"}},471],[0," if ( renderer_ThreeDStartRotation ) { vec3 rotation = radians ( vec3 ( a_StartRotation0.xy , computeParticleRotationFloat(a_StartRotation0.z, age, normalizedAge) ) ) ;\ncenter += renderer_SizeScale.xzy * rotationByEuler(corner.x * sideVector + corner.y * upVector, rotation) ; } else { float rot = radians ( computeParticleRotationFloat(a_StartRotation0.x, age, normalizedAge) ) ;\nfloat c = cos ( rot ) ;\nfloat s = sin ( rot ) ;\nmat2 rotation = mat2 ( c , - s , s , c ) ;\ncorner = rotation * corner ;\ncenter += renderer_SizeScale.xzy * ( corner.x * sideVector + corner.y * upVector ) ; } \n"],[5,473],[0," if ( renderer_ThreeDStartRotation ) { center += renderer_SizeScale.xzy * rotationByEuler(corner.x * sideVector + corner.y * upVector, radians ( a_StartRotation0 )) ; } else { float c = cos ( radians ( a_StartRotation0.x ) ) ;\nfloat s = sin ( radians ( a_StartRotation0.x ) ) ;\nmat2 rotation = mat2 ( c , - s , s , c ) ;\ncorner = rotation * corner ;\ncenter += renderer_SizeScale.xzy * ( corner.x * sideVector + corner.y * upVector ) ; } \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"RENDERER_MODE_STRETCHED_BILLBOARD",479],[0," vec2 corner = a_CornerTextureCoordinate.xy + renderer_PivotOffset.xy ;\nvec3 velocity = rotationByQuaternions(renderer_SizeScale * localVelocity, worldRotation) + worldVelocity ;\nvec3 cameraUpVector = normalize ( velocity ) ;\nvec3 direction = normalize ( center - camera_Position ) ;\nvec3 sideVector = normalize ( cross ( direction , normalize ( velocity ) ) ) ;\nsideVector = renderer_SizeScale.xzy * sideVector ;\ncameraUpVector = length ( vec3 ( renderer_SizeScale.x , 0.0 , 0.0 ) ) * cameraUpVector ;\nvec2 size = computeParticleSizeBillboard(a_StartSize.xy, normalizedAge) ;\nconst mat2 rotationZHalfPI = mat2 ( 0.0 , - 1.0 , 1.0 , 0.0 ) ;\ncorner = rotationZHalfPI * corner ;\ncorner.y = corner.y - abs ( corner.y ) ;\nfloat speed = length ( velocity ) ;\ncenter += sign ( renderer_SizeScale.x ) * ( sign ( renderer_StretchedBillboardLengthScale ) * size.x * corner.x * sideVector + ( speed * renderer_StretchedBillboardSpeedScale + size.y * renderer_StretchedBillboardLengthScale ) * corner.y * cameraUpVector ) ; \n"],[6],[0,"\n\n"],[1,"RENDERER_MODE_HORIZONTAL_BILLBOARD",483],[0," vec2 corner = a_CornerTextureCoordinate.xy + renderer_PivotOffset.xy ;\nconst vec3 sideVector = vec3 ( 1.0 , 0.0 , 0.0 ) ;\nconst vec3 upVector = vec3 ( 0.0 , 0.0 , - 1.0 ) ;\ncorner *= computeParticleSizeBillboard(a_StartSize.xy, normalizedAge) ;\nfloat rot ;\nif ( renderer_ThreeDStartRotation ) { rot = radians ( computeParticleRotationFloat(a_StartRotation0.z, age, normalizedAge) ) ; } else { rot = radians ( computeParticleRotationFloat(a_StartRotation0.x, age, normalizedAge) ) ; }\nfloat c = cos ( rot ) ;\nfloat s = sin ( rot ) ;\nmat2 rotation = mat2 ( c , - s , s , c ) ;\ncorner = rotation * corner ;\ncenter += renderer_SizeScale.xzy * ( corner.x * sideVector + corner.y * upVector ) ; \n"],[6],[0,"\n\n"],[1,"RENDERER_MODE_VERTICAL_BILLBOARD",487],[0," vec2 corner = a_CornerTextureCoordinate.xy + renderer_PivotOffset.xy ;\nconst vec3 cameraUpVector = vec3 ( 0.0 , 1.0 , 0.0 ) ;\nvec3 sideVector = normalize ( cross ( camera_Forward , cameraUpVector ) ) ;\nfloat rot = radians ( computeParticleRotationFloat(a_StartRotation0.x, age, normalizedAge) ) ;\nfloat c = cos ( rot ) ;\nfloat s = sin ( rot ) ;\nmat2 rotation = mat2 ( c , - s , s , c ) ;\ncorner = rotation * corner * cos ( 0.78539816339744830961566084581988 ) ;\ncorner *= computeParticleSizeBillboard(a_StartSize.xy, normalizedAge) ;\ncenter += renderer_SizeScale.xzy * ( corner.x * sideVector + corner.y * cameraUpVector ) ; \n"],[6],[0,"\n\n"],[1,"RENDERER_MODE_MESH",523],[0," \n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_ROL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_ROL_CURVE_MODE"}},495],[0," \n"],[7,"RENDERER_ROL_ENABLED"],[0," \n"],[6],[0,"\nvec3 size = computeParticleSizeMesh(a_StartSize, normalizedAge) ;\nbool is3DRotation = renderer_ThreeDStartRotation ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_ROL_ENABLED"},"r":{"t":"def","m":"RENDERER_ROL_IS_SEPARATE"}},499],[0," is3DRotation = true ; \n"],[6],[0,"\nif ( is3DRotation ) { \n"],[1,"RENDERER_ROL_ENABLED",503],[0," vec3 startRotation = renderer_ThreeDStartRotation ? a_StartRotation0 : vec3 ( 0.0 , 0.0 , a_StartRotation0.x ) ;\nvec3 rotation = radians ( computeParticleRotationVec3(startRotation, age, normalizedAge) ) ; \n"],[5,505],[0," vec3 rotation = radians ( a_StartRotation0 ) ; \n"],[6],[0,"\ncenter += rotationByQuaternions(renderer_SizeScale * rotationByEuler(POSITION * size, rotation), worldRotation) ; } else { \n"],[1,"RENDERER_ROL_ENABLED",509],[0," float angle = radians ( computeParticleRotationFloat(a_StartRotation0.x, age, normalizedAge) ) ; \n"],[5,511],[0," float angle = radians ( a_StartRotation0.x ) ; \n"],[6],[0,"\n\n"],[1,"RENDERER_EMISSION_SHAPE",515],[0," vec3 axis = vec3 ( a_ShapePositionStartLifeTime.xy , 0.0 ) ;\nif ( renderer_SimulationSpace == 1 ) { axis = rotationByQuaternions(axis, worldRotation) ; }\nvec3 crossResult = cross ( axis , vec3 ( 0.0 , 0.0 , - 1.0 ) ) ;\nfloat crossLen = length ( crossResult ) ;\nvec3 rotateAxis = crossLen > 0.0001 ? crossResult / crossLen : vec3 ( 0.0 , 1.0 , 0.0 ) ; \n"],[5,517],[0," vec3 rotateAxis = vec3 ( 0.0 , 0.0 , - 1.0 ) ; \n"],[6],[0,"\ncenter += rotationByQuaternions(renderer_SizeScale * rotationByAxis(POSITION * size, rotateAxis, angle), worldRotation) ; }\n\n"],[1,"RENDERER_ENABLE_VERTEXCOLOR",521],[0," v_MeshColor = COLOR_0 ; \n"],[6],[0," \n"],[6],[0,"\nreturn center ; }\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",535],[0,"\nvec2 computeParticleVaryingUV ( float normalizedAge ) { vec2 simulateUV ;\n\n"],[4,{"t":"or","l":{"t":"or","l":{"t":"or","l":{"t":"def","m":"RENDERER_MODE_SPHERE_BILLBOARD"},"r":{"t":"def","m":"RENDERER_MODE_STRETCHED_BILLBOARD"}},"r":{"t":"def","m":"RENDERER_MODE_HORIZONTAL_BILLBOARD"}},"r":{"t":"def","m":"RENDERER_MODE_VERTICAL_BILLBOARD"}},529],[0," simulateUV = a_CornerTextureCoordinate.zw * a_SimulationUV.xy + a_SimulationUV.zw ; \n"],[6],[0,"\n\n"],[1,"RENDERER_MODE_MESH",533],[0," simulateUV = a_SimulationUV.zw + TEXCOORD_0 * a_SimulationUV.xy ; \n"],[6],[0,"\nreturn computeParticleUV(simulateUV, normalizedAge) ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\nvoid main() { \nfloat age = renderer_CurrentTime - a_DirectionTime.w ;\nfloat normalizedAge = age / a_ShapePositionStartLifeTime.w ;\nif ( normalizedAge >= 0.0 && normalizedAge < 1.0 ) { vec3 center = computeParticleCenter(age, normalizedAge) ;\ngl_Position = camera_ProjMat * camera_ViewMat * vec4 ( center , 1.0 ) ;\nv_Color = computeParticleColor(a_StartColor, normalizedAge) ;\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",541],[0," v_TextureCoordinate = computeParticleVaryingUV(normalizedAge) ; \n"],[6],[0," } else { gl_Position = vec4 ( 2.0 , 2.0 , 2.0 , 1.0 ) ; }\n }"]],"fragmentShaderInstructions":[[0,"\n"],[2,"PARTICLE_VERT_INCLUDED",282],[0,"\n\n"],[7,"PARTICLE_VERT_INCLUDED"],[0,"\n\n"],[2,"COMMON_INCLUDED",38],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",26],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",32],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,36],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_MODE_STRETCHED_BILLBOARD",42],[0,"\n\n"],[6],[0,"\nuniform vec4 material_BaseColor;\nuniform mediump vec3 material_EmissiveColor;\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",46],[0,"\nuniform sampler2D material_BaseTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_EMISSIVETEXTURE",50],[0,"\nuniform sampler2D material_EmissiveTexture;\n\n"],[6],[0,"\nvarying vec4 v_Color;\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",54],[0,"varying vec2 v_TextureCoordinate;\n\n"],[6],[0,"\n"],[1,"RENDERER_MODE_MESH",58],[0,"varying vec4 v_MeshColor;\n\n"],[6],[0,"\n\n"],[2,"PARTICLE_COMMON_INCLUDED",64],[0,"\n\n"],[7,"PARTICLE_COMMON_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[2,"VELOCITY_OVER_LIFETIME_INCLUDED",96],[0,"\n\n"],[7,"VELOCITY_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_VOL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_VOL_CURVE_MODE"}},74],[0,"\n\n"],[7,"_VOL_MODULE_ENABLED"],[0,"\n\n"],[6],[0,"\n\n"],[1,"_VOL_MODULE_ENABLED",94],[0,"\n\n"],[1,"RENDERER_VOL_CONSTANT_MODE",84],[0,"\n\n"],[1,"RENDERER_VOL_IS_RANDOM_TWO",82],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_VOL_CURVE_MODE",92],[0,"\n\n"],[1,"RENDERER_VOL_IS_RANDOM_TWO",90],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"FORCE_OVER_LIFETIME_INCLUDED",128],[0,"\n\n"],[7,"FORCE_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_FOL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_FOL_CURVE_MODE"}},106],[0,"\n\n"],[7,"_FOL_MODULE_ENABLED"],[0,"\n\n"],[6],[0,"\n\n"],[1,"_FOL_MODULE_ENABLED",126],[0,"\n\n"],[1,"RENDERER_FOL_CONSTANT_MODE",116],[0,"\n\n"],[1,"RENDERER_FOL_IS_RANDOM_TWO",114],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_FOL_CURVE_MODE",124],[0,"\n\n"],[1,"RENDERER_FOL_IS_RANDOM_TWO",122],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"COLOR_OVER_LIFETIME_INCLUDED",142],[0,"\n\n"],[7,"COLOR_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_COL_GRADIENT"},"r":{"t":"def","m":"RENDERER_COL_RANDOM_GRADIENTS"}},140],[0,"\n\n"],[1,"RENDERER_COL_RANDOM_GRADIENTS",138],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"SIZE_OVER_LIFETIME_INCLUDED",168],[0,"\n\n"],[7,"SIZE_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[1,"RENDERER_SOL_CURVE_MODE",162],[0,"\n\n"],[1,"RENDERER_SOL_IS_SEPARATE",152],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_SOL_IS_RANDOM_TWO",160],[0,"\n\n"],[1,"RENDERER_SOL_IS_SEPARATE",158],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_MODE_MESH",166],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"ROTATION_OVER_LIFETIME_INCLUDED",204],[0,"\n\n"],[7,"ROTATION_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_ROL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_ROL_CURVE_MODE"}},198],[0,"\n\n"],[1,"RENDERER_ROL_CURVE_MODE",190],[0,"\n\n"],[1,"RENDERER_ROL_IS_SEPARATE",180],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_ROL_IS_RANDOM_TWO",188],[0,"\n\n"],[1,"RENDERER_ROL_IS_SEPARATE",186],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[5,196],[0,"\n\n"],[1,"RENDERER_ROL_IS_RANDOM_TWO",194],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_MODE_MESH"},"r":{"t":"or","l":{"t":"def","m":"RENDERER_ROL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_ROL_CURVE_MODE"}}},202],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"TEXTURE_SHEET_ANIMATION_INCLUDED",218],[0,"\n\n"],[7,"TEXTURE_SHEET_ANIMATION_INCLUDED"],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_TSA_FRAME_CURVE"},"r":{"t":"def","m":"RENDERER_TSA_FRAME_RANDOM_CURVES"}},216],[0,"\n\n"],[1,"RENDERER_TSA_FRAME_RANDOM_CURVES",214],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"LIMIT_VELOCITY_OVER_LIFETIME_INCLUDED",276],[0,"\n\n"],[7,"LIMIT_VELOCITY_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[1,"RENDERER_LVL_MODULE_ENABLED",274],[0,"\n\n"],[2,"RENDERER_LVL_SEPARATE_AXES",244],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CONSTANT_MODE",234],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",232],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CURVE_MODE",242],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",240],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_SEPARATE_AXES",264],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CONSTANT_MODE",254],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",252],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CURVE_MODE",262],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",260],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_DRAG_CURVE_MODE",272],[0,"\n\n"],[1,"RENDERER_LVL_DRAG_IS_RANDOM_TWO",270],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",280],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nvoid main() { vec4 color = material_BaseColor * v_Color ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_MODE_MESH"},"r":{"t":"def","m":"RENDERER_ENABLE_VERTEXCOLOR"}},286],[0," color *= v_MeshColor ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",290],[0," color *= texture2DSRGB(material_BaseTexture, v_TextureCoordinate) ; \n"],[6],[0,"\nvec3 emissiveRadiance = material_EmissiveColor ;\n\n"],[1,"MATERIAL_HAS_EMISSIVETEXTURE",294],[0," emissiveRadiance *= texture2DSRGB(material_EmissiveTexture, v_TextureCoordinate).rgb ; \n"],[6],[0,"\ncolor.rgb += emissiveRadiance ;\ngl_FragColor = color ; }"]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/Effect/ParticleFeedback.shaderc b/packages/shader/compiledShaders/Effect/ParticleFeedback.shaderc deleted file mode 100644 index 309b47241b..0000000000 --- a/packages/shader/compiledShaders/Effect/ParticleFeedback.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"Effect/ParticleFeedback","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"TransformFeedback","isUsePass":false,"tags":{"pipelineStage":"TransformFeedback"},"renderStates":{"constantMap":{},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nuniform float renderer_CurrentTime;\nuniform float renderer_DeltaTime;\nuniform vec3 renderer_Gravity;\nuniform vec2 renderer_LVLDragConstant;\nuniform vec4 renderer_WorldRotation;\nuniform int renderer_SimulationSpace;\nattribute vec3 a_FeedbackPosition;\nattribute vec3 a_FeedbackVelocity;\nattribute vec4 a_ShapePositionStartLifeTime;\nattribute vec4 a_DirectionTime;\nattribute vec3 a_StartSize;\nattribute float a_StartSpeed;\nattribute vec4 a_Random0;\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_TSA_FRAME_RANDOM_CURVES"},"r":{"t":"def","m":"RENDERER_VOL_IS_RANDOM_TWO"}},34],[0,"attribute vec4 a_Random1;\n\n"],[6],[0,"attribute vec3 a_SimulationWorldPosition;\nattribute vec4 a_SimulationWorldRotation;\n\n"],[4,{"t":"or","l":{"t":"or","l":{"t":"def","m":"RENDERER_FOL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_FOL_CURVE_MODE"}},"r":{"t":"def","m":"RENDERER_LVL_MODULE_ENABLED"}},38],[0,"attribute vec4 a_Random2;\n\n"],[6],[0,"\nvarying vec3 v_FeedbackPosition;\nvarying vec3 v_FeedbackVelocity;\n\n\n"],[2,"PARTICLE_COMMON_INCLUDED",44],[0,"\n\n"],[7,"PARTICLE_COMMON_INCLUDED"],[0,"\nvec3 rotationByQuaternions ( in vec3 v, in vec4 q ) { return v + 2.0 * cross ( q.xyz , cross ( q.xyz , v ) + q.w * v ) ; }\nvec4 quaternionConjugate ( in vec4 q ) { return vec4 ( - q.xyz , q.w ) ; }\nfloat evaluateParticleCurve ( in vec2 keys [ 4 ], in float normalizedAge ) { float value ;\nfor ( int i = 1 ; i < 4 ; i ++ ) { vec2 key = keys[i] ;\nfloat time = key.x ;\nif ( time >= normalizedAge ) { vec2 lastKey = keys[i - 1] ;\nfloat lastTime = lastKey.x ;\nfloat age = ( normalizedAge - lastTime ) / ( time - lastTime ) ;\nvalue = mix ( lastKey.y , key.y , age ) ;\nbreak ; } }\nreturn value ; }\n\n"],[6],[0,"\n\n"],[2,"VELOCITY_OVER_LIFETIME_INCLUDED",76],[0,"\n\n"],[7,"VELOCITY_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_VOL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_VOL_CURVE_MODE"}},54],[0,"\n\n"],[7,"_VOL_MODULE_ENABLED"],[0,"\n\n"],[6],[0,"\n\n"],[1,"_VOL_MODULE_ENABLED",74],[0,"\nuniform int renderer_VOLSpace;\n\n"],[1,"RENDERER_VOL_CONSTANT_MODE",64],[0,"\nuniform vec3 renderer_VOLMaxConst;\n\n"],[1,"RENDERER_VOL_IS_RANDOM_TWO",62],[0,"\nuniform vec3 renderer_VOLMinConst;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_VOL_CURVE_MODE",72],[0,"\nuniform vec2 renderer_VOLMaxGradientX [ 4 ];\nuniform vec2 renderer_VOLMaxGradientY [ 4 ];\nuniform vec2 renderer_VOLMaxGradientZ [ 4 ];\n\n"],[1,"RENDERER_VOL_IS_RANDOM_TWO",70],[0,"\nuniform vec2 renderer_VOLMinGradientX [ 4 ];\nuniform vec2 renderer_VOLMinGradientY [ 4 ];\nuniform vec2 renderer_VOLMinGradientZ [ 4 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"FORCE_OVER_LIFETIME_INCLUDED",108],[0,"\n\n"],[7,"FORCE_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_FOL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_FOL_CURVE_MODE"}},86],[0,"\n\n"],[7,"_FOL_MODULE_ENABLED"],[0,"\n\n"],[6],[0,"\n\n"],[1,"_FOL_MODULE_ENABLED",106],[0,"\nuniform int renderer_FOLSpace;\n\n"],[1,"RENDERER_FOL_CONSTANT_MODE",96],[0,"\nuniform vec3 renderer_FOLMaxConst;\n\n"],[1,"RENDERER_FOL_IS_RANDOM_TWO",94],[0,"\nuniform vec3 renderer_FOLMinConst;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_FOL_CURVE_MODE",104],[0,"\nuniform vec2 renderer_FOLMaxGradientX [ 4 ];\nuniform vec2 renderer_FOLMaxGradientY [ 4 ];\nuniform vec2 renderer_FOLMaxGradientZ [ 4 ];\n\n"],[1,"RENDERER_FOL_IS_RANDOM_TWO",102],[0,"\nuniform vec2 renderer_FOLMinGradientX [ 4 ];\nuniform vec2 renderer_FOLMinGradientY [ 4 ];\nuniform vec2 renderer_FOLMinGradientZ [ 4 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"LIMIT_VELOCITY_OVER_LIFETIME_INCLUDED",216],[0,"\n\n"],[7,"LIMIT_VELOCITY_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[1,"RENDERER_LVL_MODULE_ENABLED",214],[0,"\nuniform int renderer_LVLSpace;\nuniform float renderer_LVLDampen;\n\n"],[2,"RENDERER_LVL_SEPARATE_AXES",134],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CONSTANT_MODE",124],[0,"\nuniform float renderer_LVLSpeedMaxConst;\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",122],[0,"\nuniform float renderer_LVLSpeedMinConst;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CURVE_MODE",132],[0,"\nuniform vec2 renderer_LVLSpeedMaxCurve [ 4 ];\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",130],[0,"\nuniform vec2 renderer_LVLSpeedMinCurve [ 4 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_SEPARATE_AXES",154],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CONSTANT_MODE",144],[0,"\nuniform vec3 renderer_LVLSpeedMaxConstVector;\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",142],[0,"\nuniform vec3 renderer_LVLSpeedMinConstVector;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CURVE_MODE",152],[0,"\nuniform vec2 renderer_LVLSpeedXMaxCurve [ 4 ];\nuniform vec2 renderer_LVLSpeedYMaxCurve [ 4 ];\nuniform vec2 renderer_LVLSpeedZMaxCurve [ 4 ];\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",150],[0,"\nuniform vec2 renderer_LVLSpeedXMinCurve [ 4 ];\nuniform vec2 renderer_LVLSpeedYMinCurve [ 4 ];\nuniform vec2 renderer_LVLSpeedZMinCurve [ 4 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_DRAG_CURVE_MODE",162],[0,"\nuniform vec2 renderer_LVLDragMaxCurve [ 4 ];\n\n"],[1,"RENDERER_LVL_DRAG_IS_RANDOM_TWO",160],[0,"\nuniform vec2 renderer_LVLDragMinCurve [ 4 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\nfloat evaluateLVLDrag ( float normalizedAge, float dragRand ) { \n"],[1,"RENDERER_LVL_DRAG_CURVE_MODE",172],[0," float dragMax = evaluateParticleCurve(renderer_LVLDragMaxCurve, normalizedAge) ;\n\n"],[1,"RENDERER_LVL_DRAG_IS_RANDOM_TWO",168],[0," float dragMin = evaluateParticleCurve(renderer_LVLDragMinCurve, normalizedAge) ;\nreturn mix ( dragMin , dragMax , dragRand ) ; \n"],[5,170],[0," return dragMax ; \n"],[6],[0," \n"],[5,174],[0," return mix ( renderer_LVLDragConstant.x , renderer_LVLDragConstant.y , dragRand ) ; \n"],[6],[0," }\nvec3 applyLVLSpeedLimitTF ( vec3 velocity, float normalizedAge, float limitRand, float effectiveDampen ) { \n"],[1,"RENDERER_LVL_SEPARATE_AXES",194],[0," vec3 limitSpeed ;\n\n"],[1,"RENDERER_LVL_SPEED_CONSTANT_MODE",184],[0," limitSpeed = renderer_LVLSpeedMaxConstVector ;\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",182],[0," limitSpeed = mix ( renderer_LVLSpeedMinConstVector , limitSpeed , limitRand ) ; \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CURVE_MODE",192],[0," limitSpeed = vec3 ( evaluateParticleCurve(renderer_LVLSpeedXMaxCurve, normalizedAge) , evaluateParticleCurve(renderer_LVLSpeedYMaxCurve, normalizedAge) , evaluateParticleCurve(renderer_LVLSpeedZMaxCurve, normalizedAge) ) ;\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",190],[0," vec3 minLimitSpeed = vec3 ( evaluateParticleCurve(renderer_LVLSpeedXMinCurve, normalizedAge) , evaluateParticleCurve(renderer_LVLSpeedYMinCurve, normalizedAge) , evaluateParticleCurve(renderer_LVLSpeedZMinCurve, normalizedAge) ) ;\nlimitSpeed = mix ( minLimitSpeed , limitSpeed , limitRand ) ; \n"],[6],[0," \n"],[6],[0,"\nvec3 absVel = abs ( velocity ) ;\nvec3 excess = max ( absVel - limitSpeed , vec3 ( 0.0 ) ) ;\nvelocity = sign ( velocity ) * ( absVel - excess * effectiveDampen ) ; \n"],[5,212],[0," float limitSpeed ;\n\n"],[1,"RENDERER_LVL_SPEED_CONSTANT_MODE",202],[0," limitSpeed = renderer_LVLSpeedMaxConst ;\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",200],[0," limitSpeed = mix ( renderer_LVLSpeedMinConst , limitSpeed , limitRand ) ; \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CURVE_MODE",210],[0," limitSpeed = evaluateParticleCurve(renderer_LVLSpeedMaxCurve, normalizedAge) ;\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",208],[0," float minLimitSpeed = evaluateParticleCurve(renderer_LVLSpeedMinCurve, normalizedAge) ;\nlimitSpeed = mix ( minLimitSpeed , limitSpeed , limitRand ) ; \n"],[6],[0," \n"],[6],[0,"\nfloat speed = length ( velocity ) ;\nif ( speed > limitSpeed && speed > 0.0 ) { float excess = speed - limitSpeed ;\nvelocity = velocity * ( ( speed - excess * effectiveDampen ) / speed ) ; } \n"],[6],[0,"\nreturn velocity ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"NOISE_MODULE_INCLUDED",322],[0,"\n\n"],[7,"NOISE_MODULE_INCLUDED"],[0,"\n\n"],[1,"RENDERER_NOISE_MODULE_ENABLED",320],[0,"\n\n"],[2,"NOISE_COMMON_INCLUDED",244],[0,"\n\n"],[7,"NOISE_COMMON_INCLUDED"],[0,"\nvec4 mod289 ( vec4 x ) { return x - floor ( x * ( 1.0 / 289.0 ) ) * 289.0 ; }\nvec3 mod289 ( vec3 x ) { return x - floor ( x * ( 1.0 / 289.0 ) ) * 289.0 ; }\nvec2 mod289 ( vec2 x ) { return x - floor ( x * ( 1.0 / 289.0 ) ) * 289.0 ; }\nfloat mod289 ( float x ) { return x - floor ( x * ( 1.0 / 289.0 ) ) * 289.0 ; }\nvec4 permute ( vec4 x ) { return mod289(( 34.0 * x + 1.0 ) * x) ; }\nvec3 permute ( vec3 x ) { return mod289(( 34.0 * x + 1.0 ) * x) ; }\nfloat permute ( float x ) { return mod289(( ( x * 34.0 ) + 1.0 ) * x) ; }\nvec4 taylorInvSqrt ( vec4 r ) { return 1.79284291400159 - 0.85373472095314 * r ; }\nfloat taylorInvSqrt ( float r ) { return 1.79284291400159 - 0.85373472095314 * r ; }\n\n"],[8,"K","0.142857142857"],[0,"\n\n"],[8,"Ko","0.428571428571"],[0,"\n\n"],[8,"K2","0.020408163265306"],[0,"\n\n"],[8,"Kd2","0.0714285714285"],[0,"\n\n"],[8,"Kz","0.166666666667"],[0,"\n\n"],[8,"Kzo","0.416666666667"],[0,"\n\n"],[8,"jitter","1.0"],[0,"\n\n"],[8,"jitter1","0.8"],[0,"\n\n"],[6],[0,"\n\n"],[2,"NOISE_SIMPLEX_GRAD_INCLUDED",272],[0,"\n\n"],[7,"NOISE_SIMPLEX_GRAD_INCLUDED"],[0,"\n\n"],[2,"NOISE_COMMON_INCLUDED",270],[0,"\n\n"],[7,"NOISE_COMMON_INCLUDED"],[0,"\nvec4 mod289 ( vec4 x ) { return x - floor ( x * ( 1.0 / 289.0 ) ) * 289.0 ; }\nvec3 mod289 ( vec3 x ) { return x - floor ( x * ( 1.0 / 289.0 ) ) * 289.0 ; }\nvec2 mod289 ( vec2 x ) { return x - floor ( x * ( 1.0 / 289.0 ) ) * 289.0 ; }\nfloat mod289 ( float x ) { return x - floor ( x * ( 1.0 / 289.0 ) ) * 289.0 ; }\nvec4 permute ( vec4 x ) { return mod289(( 34.0 * x + 1.0 ) * x) ; }\nvec3 permute ( vec3 x ) { return mod289(( 34.0 * x + 1.0 ) * x) ; }\nfloat permute ( float x ) { return mod289(( ( x * 34.0 ) + 1.0 ) * x) ; }\nvec4 taylorInvSqrt ( vec4 r ) { return 1.79284291400159 - 0.85373472095314 * r ; }\nfloat taylorInvSqrt ( float r ) { return 1.79284291400159 - 0.85373472095314 * r ; }\n\n"],[8,"K","0.142857142857"],[0,"\n\n"],[8,"Ko","0.428571428571"],[0,"\n\n"],[8,"K2","0.020408163265306"],[0,"\n\n"],[8,"Kd2","0.0714285714285"],[0,"\n\n"],[8,"Kz","0.166666666667"],[0,"\n\n"],[8,"Kzo","0.416666666667"],[0,"\n\n"],[8,"jitter","1.0"],[0,"\n\n"],[8,"jitter1","0.8"],[0,"\n\n"],[6],[0,"\nvec3 simplexGrad ( vec3 v ) { const vec2 C = vec2 ( 1.0 / 6.0 , 1.0 / 3.0 ) ;\nconst vec4 D = vec4 ( 0.0 , 0.5 , 1.0 , 2.0 ) ;\nvec3 i = floor ( v + dot ( v , C.yyy ) ) ;\nvec3 x0 = v - i + dot ( i , C.xxx ) ;\nvec3 g = step ( x0.yzx , x0.xyz ) ;\nvec3 l = 1.0 - g ;\nvec3 i1 = min ( g.xyz , l.zxy ) ;\nvec3 i2 = max ( g.xyz , l.zxy ) ;\nvec3 x1 = x0 - i1 + C.xxx ;\nvec3 x2 = x0 - i2 + C.yyy ;\nvec3 x3 = x0 - D.yyy ;\ni = mod289(i) ;\nvec4 p = permute(permute(permute(i.z + vec4 ( 0.0 , i1.z , i2.z , 1.0 )) + i.y + vec4 ( 0.0 , i1.y , i2.y , 1.0 )) + i.x + vec4 ( 0.0 , i1.x , i2.x , 1.0 )) ;\nfloat n_ = 0.142857142857 ;\nvec3 ns = n_ * D.wyz - D.xzx ;\nvec4 j = p - 49.0 * floor ( p * ns.z * ns.z ) ;\nvec4 x_ = floor ( j * ns.z ) ;\nvec4 y_ = floor ( j - 7.0 * x_ ) ;\nvec4 x = x_ * ns.x + ns.yyyy ;\nvec4 y = y_ * ns.x + ns.yyyy ;\nvec4 h = 1.0 - abs ( x ) - abs ( y ) ;\nvec4 b0 = vec4 ( x.xy , y.xy ) ;\nvec4 b1 = vec4 ( x.zw , y.zw ) ;\nvec4 s0 = floor ( b0 ) * 2.0 + 1.0 ;\nvec4 s1 = floor ( b1 ) * 2.0 + 1.0 ;\nvec4 sh = - step ( h , vec4 ( 0.0 ) ) ;\nvec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy ;\nvec4 a1 = b1.xzyw + s1.xzyw * sh.zzww ;\nvec3 p0 = vec3 ( a0.xy , h.x ) ;\nvec3 p1 = vec3 ( a0.zw , h.y ) ;\nvec3 p2 = vec3 ( a1.xy , h.z ) ;\nvec3 p3 = vec3 ( a1.zw , h.w ) ;\nvec4 norm = taylorInvSqrt(vec4 ( dot ( p0 , p0 ) , dot ( p1 , p1 ) , dot ( p2 , p2 ) , dot ( p3 , p3 ) )) ;\np0 *= norm.x ;\np1 *= norm.y ;\np2 *= norm.z ;\np3 *= norm.w ;\nvec4 m = max ( 0.6 - vec4 ( dot ( x0 , x0 ) , dot ( x1 , x1 ) , dot ( x2 , x2 ) , dot ( x3 , x3 ) ) , 0.0 ) ;\nvec4 m2 = m * m ;\nvec4 m4 = m2 * m2 ;\nvec4 pdotx = vec4 ( dot ( p0 , x0 ) , dot ( p1 , x1 ) , dot ( p2 , x2 ) , dot ( p3 , x3 ) ) ;\nvec4 temp = m2 * m * pdotx ;\nvec3 grad = - 8.0 * ( temp.x * x0 + temp.y * x1 + temp.z * x2 + temp.w * x3 ) ;\ngrad += m4.x * p0 + m4.y * p1 + m4.z * p2 + m4.w * p3 ;\nreturn grad * 42.0 ; }\n\n"],[6],[0,"\nuniform vec4 renderer_NoiseParams;\nuniform vec4 renderer_NoiseOctaveParams;\n\n"],[1,"RENDERER_NOISE_STRENGTH_CURVE",288],[0,"\nuniform vec2 renderer_NoiseStrengthMaxCurveX [ 4 ];\n\n"],[1,"RENDERER_NOISE_IS_SEPARATE",278],[0,"\nuniform vec2 renderer_NoiseStrengthMaxCurveY [ 4 ];\nuniform vec2 renderer_NoiseStrengthMaxCurveZ [ 4 ];\n\n"],[6],[0,"\n\n"],[1,"RENDERER_NOISE_STRENGTH_IS_RANDOM_TWO",286],[0,"\nuniform vec2 renderer_NoiseStrengthMinCurveX [ 4 ];\n\n"],[1,"RENDERER_NOISE_IS_SEPARATE",284],[0,"\nuniform vec2 renderer_NoiseStrengthMinCurveY [ 4 ];\nuniform vec2 renderer_NoiseStrengthMinCurveZ [ 4 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[5,294],[0,"\n\n"],[1,"RENDERER_NOISE_STRENGTH_IS_RANDOM_TWO",292],[0,"\nuniform vec3 renderer_NoiseStrengthMinConst;\n\n"],[6],[0,"\n\n"],[6],[0,"\nvec3 sampleCurlNoise3D ( vec3 coord ) { float axisOffset = 100.0 ;\nvec3 gradX = simplexGrad(vec3 ( coord.z , coord.y , coord.x )) ;\nvec3 gradY = simplexGrad(vec3 ( coord.x + axisOffset , coord.z , coord.y )) ;\nvec3 gradZ = simplexGrad(vec3 ( coord.y , coord.x + axisOffset , coord.z )) ;\nreturn vec3 ( gradZ.x - gradY.y , gradX.x - gradZ.y , gradY.x - gradX.y ) ; }\nvec3 computeNoiseVelocity ( vec3 currentPosition, float normalizedAge ) { vec3 coord = currentPosition * renderer_NoiseParams.w + vec3 ( renderer_CurrentTime * renderer_NoiseOctaveParams.x ) ;\nint octaveCount = int ( renderer_NoiseOctaveParams.y ) ;\nfloat octaveIntensityMultiplier = renderer_NoiseOctaveParams.z ;\nfloat octaveFrequencyMultiplier = renderer_NoiseOctaveParams.w ;\nvec3 noiseValue = sampleCurlNoise3D(coord) ;\nfloat totalAmplitude = 1.0 ;\nif ( octaveCount >= 2 ) { float amplitude = octaveIntensityMultiplier ;\ntotalAmplitude += amplitude ;\nnoiseValue += amplitude * sampleCurlNoise3D(coord * octaveFrequencyMultiplier) ;\nif ( octaveCount >= 3 ) { amplitude *= octaveIntensityMultiplier ;\ntotalAmplitude += amplitude ;\nnoiseValue += amplitude * sampleCurlNoise3D(coord * octaveFrequencyMultiplier * octaveFrequencyMultiplier) ; } }\nvec3 strength ;\n\n"],[1,"RENDERER_NOISE_STRENGTH_CURVE",312],[0," float sx = evaluateParticleCurve(renderer_NoiseStrengthMaxCurveX, normalizedAge) ;\n\n"],[1,"RENDERER_NOISE_STRENGTH_IS_RANDOM_TWO",300],[0," sx = mix ( evaluateParticleCurve(renderer_NoiseStrengthMinCurveX, normalizedAge) , sx , a_Random0.z ) ; \n"],[6],[0,"\n\n"],[1,"RENDERER_NOISE_IS_SEPARATE",308],[0," float sy = evaluateParticleCurve(renderer_NoiseStrengthMaxCurveY, normalizedAge) ;\nfloat sz = evaluateParticleCurve(renderer_NoiseStrengthMaxCurveZ, normalizedAge) ;\n\n"],[1,"RENDERER_NOISE_STRENGTH_IS_RANDOM_TWO",306],[0," sy = mix ( evaluateParticleCurve(renderer_NoiseStrengthMinCurveY, normalizedAge) , sy , a_Random0.z ) ;\nsz = mix ( evaluateParticleCurve(renderer_NoiseStrengthMinCurveZ, normalizedAge) , sz , a_Random0.z ) ; \n"],[6],[0,"\nstrength = vec3 ( sx , sy , sz ) ; \n"],[5,310],[0," strength = vec3 ( sx ) ; \n"],[6],[0," \n"],[5,318],[0," strength = renderer_NoiseParams.xyz ;\n\n"],[1,"RENDERER_NOISE_STRENGTH_IS_RANDOM_TWO",316],[0," strength = mix ( renderer_NoiseStrengthMinConst , strength , a_Random0.z ) ; \n"],[6],[0," \n"],[6],[0,"\nreturn ( noiseValue / totalAmplitude ) * strength ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\nvec3 getVOLVelocity ( float normalizedAge ) { vec3 vel = vec3 ( 0.0 ) ;\n\n"],[1,"_VOL_MODULE_ENABLED",342],[0," \n"],[1,"RENDERER_VOL_CONSTANT_MODE",332],[0," vel = renderer_VOLMaxConst ;\n\n"],[1,"RENDERER_VOL_IS_RANDOM_TWO",330],[0," vel = mix ( renderer_VOLMinConst , vel , a_Random1.yzw ) ; \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"RENDERER_VOL_CURVE_MODE",340],[0," vel = vec3 ( evaluateParticleCurve(renderer_VOLMaxGradientX, normalizedAge) , evaluateParticleCurve(renderer_VOLMaxGradientY, normalizedAge) , evaluateParticleCurve(renderer_VOLMaxGradientZ, normalizedAge) ) ;\n\n"],[1,"RENDERER_VOL_IS_RANDOM_TWO",338],[0," vec3 minVel = vec3 ( evaluateParticleCurve(renderer_VOLMinGradientX, normalizedAge) , evaluateParticleCurve(renderer_VOLMinGradientY, normalizedAge) , evaluateParticleCurve(renderer_VOLMinGradientZ, normalizedAge) ) ;\nvel = mix ( minVel , vel , a_Random1.yzw ) ; \n"],[6],[0," \n"],[6],[0," \n"],[6],[0,"\nreturn vel ; }\nvec3 getFOLAcceleration ( float normalizedAge ) { vec3 acc = vec3 ( 0.0 ) ;\n\n"],[1,"_FOL_MODULE_ENABLED",362],[0," \n"],[1,"RENDERER_FOL_CONSTANT_MODE",352],[0," acc = renderer_FOLMaxConst ;\n\n"],[1,"RENDERER_FOL_IS_RANDOM_TWO",350],[0," acc = mix ( renderer_FOLMinConst , acc , vec3 ( a_Random2.x , a_Random2.y , a_Random2.z ) ) ; \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"RENDERER_FOL_CURVE_MODE",360],[0," acc = vec3 ( evaluateParticleCurve(renderer_FOLMaxGradientX, normalizedAge) , evaluateParticleCurve(renderer_FOLMaxGradientY, normalizedAge) , evaluateParticleCurve(renderer_FOLMaxGradientZ, normalizedAge) ) ;\n\n"],[1,"RENDERER_FOL_IS_RANDOM_TWO",358],[0," vec3 minAcc = vec3 ( evaluateParticleCurve(renderer_FOLMinGradientX, normalizedAge) , evaluateParticleCurve(renderer_FOLMinGradientY, normalizedAge) , evaluateParticleCurve(renderer_FOLMinGradientZ, normalizedAge) ) ;\nacc = mix ( minAcc , acc , vec3 ( a_Random2.x , a_Random2.y , a_Random2.z ) ) ; \n"],[6],[0," \n"],[6],[0," \n"],[6],[0,"\nreturn acc ; }\nvoid main() { \nfloat age = renderer_CurrentTime - a_DirectionTime.w ;\nfloat lifetime = a_ShapePositionStartLifeTime.w ;\nfloat normalizedAge = age / lifetime ;\nfloat dt = min ( renderer_DeltaTime , age ) ;\nif ( normalizedAge >= 1.0 || normalizedAge < 0.0 ) { v_FeedbackPosition = a_FeedbackPosition ;\nv_FeedbackVelocity = a_FeedbackVelocity ;\ngl_Position = vec4 ( 0.0 ) ;\n }\nvec4 worldRotation ;\nif ( renderer_SimulationSpace == 0 ) { worldRotation = renderer_WorldRotation ; } else { worldRotation = a_SimulationWorldRotation ; }\nvec4 invWorldRotation = quaternionConjugate(worldRotation) ;\nvec3 localVelocity = a_FeedbackVelocity ;\nvec3 gravityDelta = renderer_Gravity * a_Random0.x * dt ;\nvec3 volLocal = vec3 ( 0.0 ) ;\nvec3 volWorld = vec3 ( 0.0 ) ;\n\n"],[1,"_VOL_MODULE_ENABLED",366],[0," vec3 vol = getVOLVelocity(normalizedAge) ;\nif ( renderer_VOLSpace == 0 ) { volLocal = vol ; } else { volWorld = vol ; } \n"],[6],[0,"\nvec3 folDeltaLocal = vec3 ( 0.0 ) ;\n\n"],[1,"_FOL_MODULE_ENABLED",370],[0," vec3 folAcc = getFOLAcceleration(normalizedAge) ;\nvec3 folVelDelta = folAcc * dt ;\nif ( renderer_FOLSpace == 0 ) { folDeltaLocal = folVelDelta ; } else { folDeltaLocal = rotationByQuaternions(folVelDelta, invWorldRotation) ; } \n"],[6],[0,"\nvec3 gravityLocal = rotationByQuaternions(gravityDelta, invWorldRotation) ;\nlocalVelocity += folDeltaLocal + gravityLocal ;\n\n"],[1,"RENDERER_LVL_MODULE_ENABLED",382],[0," vec3 volAsLocal = volLocal + rotationByQuaternions(volWorld, invWorldRotation) ;\nvec3 volAsWorld = rotationByQuaternions(volLocal, worldRotation) + volWorld ;\nfloat limitRand = a_Random2.w ;\nfloat dampen = renderer_LVLDampen ;\nfloat effectiveDampen = 1.0 - pow ( 1.0 - dampen , dt * 30.0 ) ;\nif ( renderer_LVLSpace == 0 ) { vec3 totalLocal = localVelocity + volAsLocal ;\nvec3 dampenedTotal = applyLVLSpeedLimitTF(totalLocal, normalizedAge, limitRand, effectiveDampen) ;\nlocalVelocity = dampenedTotal - volAsLocal ; } else { vec3 totalWorld = rotationByQuaternions(localVelocity, worldRotation) + volAsWorld ;\nvec3 dampenedTotal = applyLVLSpeedLimitTF(totalWorld, normalizedAge, limitRand, effectiveDampen) ;\nlocalVelocity = rotationByQuaternions(dampenedTotal - volAsWorld, invWorldRotation) ; }\n{ float dragCoeff = evaluateLVLDrag(normalizedAge, a_Random2.w) ;\nif ( dragCoeff > 0.0 ) { vec3 totalVel ;\nif ( renderer_LVLSpace == 0 ) { totalVel = localVelocity + volAsLocal ; } else { totalVel = rotationByQuaternions(localVelocity, worldRotation) + volAsWorld ; }\nfloat velMagSqr = dot ( totalVel , totalVel ) ;\nfloat velMag = sqrt ( velMagSqr ) ;\nfloat drag = dragCoeff ;\n\n"],[1,"RENDERER_LVL_DRAG_MULTIPLY_SIZE",376],[0," float maxDim = max ( a_StartSize.x , max ( a_StartSize.y , a_StartSize.z ) ) ;\nfloat radius = maxDim * 0.5 ;\ndrag *= 3.14159265 * radius * radius ; \n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_DRAG_MULTIPLY_VELOCITY",380],[0," drag *= velMagSqr ; \n"],[6],[0,"\nif ( velMag > 0.0 ) { float newVelMag = max ( 0.0 , velMag - drag * dt ) ;\nvec3 draggedTotal = totalVel * ( newVelMag / velMag ) ;\nif ( renderer_LVLSpace == 0 ) { localVelocity = draggedTotal - volAsLocal ; } else { localVelocity = rotationByQuaternions(draggedTotal - volAsWorld, invWorldRotation) ; } } } } \n"],[6],[0,"\nvec3 totalVelocity ;\nif ( renderer_SimulationSpace == 0 ) { totalVelocity = localVelocity + volLocal + rotationByQuaternions(volWorld, invWorldRotation) ; } else { totalVelocity = rotationByQuaternions(localVelocity + volLocal, worldRotation) + volWorld ; }\n\n"],[1,"RENDERER_NOISE_MODULE_ENABLED",386],[0," vec3 noiseBasePos ;\nif ( renderer_SimulationSpace == 0 ) { noiseBasePos = a_ShapePositionStartLifeTime.xyz + a_DirectionTime.xyz * a_StartSpeed * age ; } else { noiseBasePos = rotationByQuaternions(a_ShapePositionStartLifeTime.xyz + a_DirectionTime.xyz * a_StartSpeed * age, worldRotation) + a_SimulationWorldPosition ; }\ntotalVelocity += computeNoiseVelocity(noiseBasePos, normalizedAge) ; \n"],[6],[0,"\nvec3 position = a_FeedbackPosition + totalVelocity * dt ;\nv_FeedbackPosition = position ;\nv_FeedbackVelocity = localVelocity ;\ngl_Position = vec4 ( 0.0 ) ;\n }"]],"fragmentShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n\n"],[2,"PARTICLE_COMMON_INCLUDED",36],[0,"\n\n"],[7,"PARTICLE_COMMON_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[2,"VELOCITY_OVER_LIFETIME_INCLUDED",68],[0,"\n\n"],[7,"VELOCITY_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_VOL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_VOL_CURVE_MODE"}},46],[0,"\n\n"],[7,"_VOL_MODULE_ENABLED"],[0,"\n\n"],[6],[0,"\n\n"],[1,"_VOL_MODULE_ENABLED",66],[0,"\n\n"],[1,"RENDERER_VOL_CONSTANT_MODE",56],[0,"\n\n"],[1,"RENDERER_VOL_IS_RANDOM_TWO",54],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_VOL_CURVE_MODE",64],[0,"\n\n"],[1,"RENDERER_VOL_IS_RANDOM_TWO",62],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"FORCE_OVER_LIFETIME_INCLUDED",100],[0,"\n\n"],[7,"FORCE_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_FOL_CONSTANT_MODE"},"r":{"t":"def","m":"RENDERER_FOL_CURVE_MODE"}},78],[0,"\n\n"],[7,"_FOL_MODULE_ENABLED"],[0,"\n\n"],[6],[0,"\n\n"],[1,"_FOL_MODULE_ENABLED",98],[0,"\n\n"],[1,"RENDERER_FOL_CONSTANT_MODE",88],[0,"\n\n"],[1,"RENDERER_FOL_IS_RANDOM_TWO",86],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_FOL_CURVE_MODE",96],[0,"\n\n"],[1,"RENDERER_FOL_IS_RANDOM_TWO",94],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"LIMIT_VELOCITY_OVER_LIFETIME_INCLUDED",158],[0,"\n\n"],[7,"LIMIT_VELOCITY_OVER_LIFETIME_INCLUDED"],[0,"\n\n"],[1,"RENDERER_LVL_MODULE_ENABLED",156],[0,"\n\n"],[2,"RENDERER_LVL_SEPARATE_AXES",126],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CONSTANT_MODE",116],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",114],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CURVE_MODE",124],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",122],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_SEPARATE_AXES",146],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CONSTANT_MODE",136],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",134],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_CURVE_MODE",144],[0,"\n\n"],[1,"RENDERER_LVL_SPEED_IS_RANDOM_TWO",142],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_LVL_DRAG_CURVE_MODE",154],[0,"\n\n"],[1,"RENDERER_LVL_DRAG_IS_RANDOM_TWO",152],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"NOISE_MODULE_INCLUDED",240],[0,"\n\n"],[7,"NOISE_MODULE_INCLUDED"],[0,"\n\n"],[1,"RENDERER_NOISE_MODULE_ENABLED",238],[0,"\n\n"],[2,"NOISE_COMMON_INCLUDED",186],[0,"\n\n"],[7,"NOISE_COMMON_INCLUDED"],[0,"\n\n"],[8,"K","0.142857142857"],[0,"\n\n"],[8,"Ko","0.428571428571"],[0,"\n\n"],[8,"K2","0.020408163265306"],[0,"\n\n"],[8,"Kd2","0.0714285714285"],[0,"\n\n"],[8,"Kz","0.166666666667"],[0,"\n\n"],[8,"Kzo","0.416666666667"],[0,"\n\n"],[8,"jitter","1.0"],[0,"\n\n"],[8,"jitter1","0.8"],[0,"\n\n"],[6],[0,"\n\n"],[2,"NOISE_SIMPLEX_GRAD_INCLUDED",214],[0,"\n\n"],[7,"NOISE_SIMPLEX_GRAD_INCLUDED"],[0,"\n\n"],[2,"NOISE_COMMON_INCLUDED",212],[0,"\n\n"],[7,"NOISE_COMMON_INCLUDED"],[0,"\n\n"],[8,"K","0.142857142857"],[0,"\n\n"],[8,"Ko","0.428571428571"],[0,"\n\n"],[8,"K2","0.020408163265306"],[0,"\n\n"],[8,"Kd2","0.0714285714285"],[0,"\n\n"],[8,"Kz","0.166666666667"],[0,"\n\n"],[8,"Kzo","0.416666666667"],[0,"\n\n"],[8,"jitter","1.0"],[0,"\n\n"],[8,"jitter1","0.8"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_NOISE_STRENGTH_CURVE",230],[0,"\n\n"],[1,"RENDERER_NOISE_IS_SEPARATE",220],[0,"\n\n"],[6],[0,"\n\n"],[1,"RENDERER_NOISE_STRENGTH_IS_RANDOM_TWO",228],[0,"\n\n"],[1,"RENDERER_NOISE_IS_SEPARATE",226],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[5,236],[0,"\n\n"],[1,"RENDERER_NOISE_STRENGTH_IS_RANDOM_TWO",234],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nvoid main() { discard ; }"]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/Effect/Trail.shaderc b/packages/shader/compiledShaders/Effect/Trail.shaderc deleted file mode 100644 index 5f16ff08b2..0000000000 --- a/packages/shader/compiledShaders/Effect/Trail.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"Effect/Trail","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"Default","isUsePass":false,"tags":{"pipelineStage":"Forward"},"renderStates":{"constantMap":{},"variableMap":{"0":"blendEnabled","3":"sourceColorBlendFactor","4":"sourceAlphaBlendFactor","5":"destinationColorBlendFactor","6":"destinationAlphaBlendFactor","11":"depthWriteEnabled","25":"rasterStateCullMode","28":"renderQueueType"}},"vertexShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"PARTICLE_COMMON_INCLUDED",36],[0,"\n\n"],[7,"PARTICLE_COMMON_INCLUDED"],[0,"\nfloat evaluateParticleCurve ( in vec2 keys [ 4 ], in float normalizedAge ) { float value ;\nfor ( int i = 1 ; i < 4 ; i ++ ) { vec2 key = keys[i] ;\nfloat time = key.x ;\nif ( time >= normalizedAge ) { vec2 lastKey = keys[i - 1] ;\nfloat lastTime = lastKey.x ;\nfloat age = ( normalizedAge - lastTime ) / ( time - lastTime ) ;\nvalue = mix ( lastKey.y , key.y , age ) ;\nbreak ; } }\nreturn value ; }\nvec4 evaluateParticleGradient ( in vec4 colorKeys [ 4 ], in float colorMaxTime, in vec2 alphaKeys [ 4 ], in float alphaMaxTime, in float t ) { vec4 value ;\nfloat alphaT = min ( t , alphaMaxTime ) ;\nfor ( int i = 0 ; i < 4 ; i ++ ) { vec2 key = alphaKeys[i] ;\nif ( alphaT <= key.x ) { if ( i == 0 ) { value.a = alphaKeys[0].y ; } else { vec2 lastKey = alphaKeys[i - 1] ;\nfloat age = ( alphaT - lastKey.x ) / ( key.x - lastKey.x ) ;\nvalue.a = mix ( lastKey.y , key.y , age ) ; }\nbreak ; } }\nfloat colorT = min ( t , colorMaxTime ) ;\nfor ( int i = 0 ; i < 4 ; i ++ ) { vec4 key = colorKeys[i] ;\nif ( colorT <= key.x ) { if ( i == 0 ) { value.rgb = colorKeys[0].yzw ; } else { vec4 lastKey = colorKeys[i - 1] ;\nfloat age = ( colorT - lastKey.x ) / ( key.x - lastKey.x ) ;\nvalue.rgb = mix ( lastKey.yzw , key.yzw , age ) ; }\nbreak ; } }\nreturn value ; }\n\n"],[6],[0,"\nattribute vec4 a_PositionBirthTime;\nattribute vec4 a_CornerTangent;\nattribute float a_Distance;\n\nvarying vec2 v_uv;\nvarying vec4 v_color;\n\nuniform vec4 renderer_TrailParams;\nuniform vec2 renderer_DistanceParams;\nuniform vec3 camera_Position;\nuniform mat4 camera_ViewMat;\nuniform mat4 camera_ProjMat;\nuniform vec2 renderer_WidthCurve [ 4 ];\nuniform vec4 renderer_ColorKeys [ 4 ];\nuniform vec2 renderer_AlphaKeys [ 4 ];\nuniform vec4 renderer_CurveMaxTime;\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",40],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_EMISSIVETEXTURE",44],[0,"\n\n"],[6],[0,"\nvoid main() { \nvec3 position = a_PositionBirthTime.xyz ;\nfloat corner = a_CornerTangent.x ;\nvec3 tangent = a_CornerTangent.yzw ;\nfloat distFromHead = renderer_DistanceParams.x - a_Distance ;\nfloat totalDist = renderer_DistanceParams.x - renderer_DistanceParams.y ;\nfloat relativePos = totalDist > 0.0 ? distFromHead / totalDist : 0.0 ;\nvec3 toCamera = normalize ( camera_Position - position ) ;\nvec3 right = cross ( tangent , toCamera ) ;\nfloat rightLenSq = dot ( right , right ) ;\nif ( rightLenSq < 0.000001 ) { right = cross ( tangent , vec3 ( 0.0 , 1.0 , 0.0 ) ) ;\nrightLenSq = dot ( right , right ) ;\nif ( rightLenSq < 0.000001 ) { right = cross ( tangent , vec3 ( 1.0 , 0.0 , 0.0 ) ) ;\nrightLenSq = dot ( right , right ) ; } }\nright = right * inversesqrt ( rightLenSq ) ;\nfloat width = evaluateParticleCurve(renderer_WidthCurve, min ( relativePos , renderer_CurveMaxTime.z )) ;\nvec3 worldPosition = position + right * width * 0.5 * corner ;\ngl_Position = camera_ProjMat * camera_ViewMat * vec4 ( worldPosition , 1.0 ) ;\nfloat u = renderer_TrailParams.x == 0.0 ? relativePos : distFromHead ;\nfloat vCoord = corner * 0.5 + 0.5 ;\nv_uv = vec2 ( u * renderer_TrailParams.y , vCoord * renderer_TrailParams.z ) ;\nv_color = evaluateParticleGradient(renderer_ColorKeys, renderer_CurveMaxTime.x, renderer_AlphaKeys, renderer_CurveMaxTime.y, relativePos) ;\n }"]],"fragmentShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",34],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",22],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",28],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,32],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"PARTICLE_COMMON_INCLUDED",40],[0,"\n\n"],[7,"PARTICLE_COMMON_INCLUDED"],[0,"\n\n"],[6],[0,"\nvarying vec2 v_uv;\nvarying vec4 v_color;\n\nuniform vec4 material_BaseColor;\nuniform mediump vec3 material_EmissiveColor;\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",44],[0,"\nuniform sampler2D material_BaseTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_EMISSIVETEXTURE",48],[0,"\nuniform sampler2D material_EmissiveTexture;\n\n"],[6],[0,"\nvoid main() { vec4 color = material_BaseColor * v_color ;\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",52],[0," color *= texture2DSRGB(material_BaseTexture, v_uv) ; \n"],[6],[0,"\nvec3 emissiveRadiance = material_EmissiveColor ;\n\n"],[1,"MATERIAL_HAS_EMISSIVETEXTURE",56],[0," emissiveRadiance *= texture2DSRGB(material_EmissiveTexture, v_uv).rgb ; \n"],[6],[0,"\ncolor.rgb += emissiveRadiance ;\ngl_FragColor = color ; }"]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/Lighting/ScalableAmbientOcclusion.shaderc b/packages/shader/compiledShaders/Lighting/ScalableAmbientOcclusion.shaderc deleted file mode 100644 index cbd899c33c..0000000000 --- a/packages/shader/compiledShaders/Lighting/ScalableAmbientOcclusion.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"Lighting/ScalableAmbientOcclusion","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"ScalableAmbientOcclusion","isUsePass":false,"tags":{},"renderStates":{"constantMap":{"10":false,"11":false},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nattribute vec4 POSITION_UV;\n\nvarying vec2 v_uv;\n\nvoid main() { \ngl_Position = vec4 ( POSITION_UV.xy , 0.0 , 1.0 ) ;\nv_uv = POSITION_UV.zw ;\n }\n\n"],[6],[0,"\n\n"],[2,"SCALABLE_AMBIENT_OCCLUSION_INCLUDED",64],[0,"\n\n"],[7,"SCALABLE_AMBIENT_OCCLUSION_INCLUDED"],[0,"\n\n"],[2,"COMMON_INCLUDED",40],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",34],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,38],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[3,"SSAO_QUALITY","==",0,48],[0,"\n\n"],[8,"SAMPLE_COUNT","7.0"],[0,"\n\n"],[8,"SPIRAL_TURNS","3.0"],[0,"\n\n"],[5,62],[3,"SSAO_QUALITY","==",1,55],[0,"\n\n"],[8,"SAMPLE_COUNT","11.0"],[0,"\n\n"],[8,"SPIRAL_TURNS","6.0"],[0,"\n\n"],[5,62],[3,"SSAO_QUALITY","==",2,62],[0,"\n\n"],[8,"SAMPLE_COUNT","16.0"],[0,"\n\n"],[8,"SPIRAL_TURNS","7.0"],[0,"\n\n"],[6],[0,"\n\n"],[6]],"fragmentShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nvarying vec2 v_uv;\n\n\n"],[6],[0,"\n\n"],[2,"SCALABLE_AMBIENT_OCCLUSION_INCLUDED",83],[0,"\n\n"],[7,"SCALABLE_AMBIENT_OCCLUSION_INCLUDED"],[0,"\n\n"],[2,"COMMON_INCLUDED",46],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nuniform vec4 camera_DepthBufferParams;\nuniform vec4 camera_ProjectionParams;\nfloat remapDepthBufferEyeDepth ( float depth ) { \n"],[1,"CAMERA_ORTHOGRAPHIC",32],[0," return camera_ProjectionParams.y + ( camera_ProjectionParams.z - camera_ProjectionParams.y ) * depth ; \n"],[5,34],[0," return 1.0 / ( camera_DepthBufferParams.z * depth + camera_DepthBufferParams.w ) ; \n"],[6],[0," }\nfloat interleavedGradientNoise ( vec2 sampleCoord ) { const vec3 magic = vec3 ( 0.06711056 , 0.00583715 , 52.9829189 ) ;\nreturn fract ( magic.z * fract ( dot ( sampleCoord , magic.xy ) ) ) ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",40],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,44],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nuniform vec4 renderer_texelSize;\nuniform highp sampler2D renderer_BlitTexture;\n\n"],[3,"SSAO_QUALITY","==",0,54],[0,"\n\n"],[8,"SAMPLE_COUNT","7.0"],[0,"\n\n"],[8,"SPIRAL_TURNS","3.0"],[0,"\nconst vec2 angleIncCosSin = vec2 ( - 0.971148 , 0.238227 );\n\n"],[5,68],[3,"SSAO_QUALITY","==",1,61],[0,"\n\n"],[8,"SAMPLE_COUNT","11.0"],[0,"\n\n"],[8,"SPIRAL_TURNS","6.0"],[0,"\nconst vec2 angleIncCosSin = vec2 ( - 0.896127 , - 0.443780 );\n\n"],[5,68],[3,"SSAO_QUALITY","==",2,68],[0,"\n\n"],[8,"SAMPLE_COUNT","16.0"],[0,"\n\n"],[8,"SPIRAL_TURNS","7.0"],[0,"\nconst vec2 angleIncCosSin = vec2 ( - 0.966846 , 0.255311 );\n\n"],[6],[0,"\nuniform float material_invRadiusSquared;\nuniform float material_minHorizonAngleSineSquared;\nuniform float material_intensity;\nuniform float material_projectionScaleRadius;\nuniform float material_bias;\nuniform float material_peak2;\nuniform float material_power;\nuniform vec2 material_invProjScaleXY;\nvec3 computeViewSpacePosition ( vec2 uv, float linearDepth, vec2 invProjScaleXY ) { \n"],[1,"CAMERA_ORTHOGRAPHIC",72],[0," return vec3 ( ( vec2 ( 0.5 ) - uv ) * invProjScaleXY , linearDepth ) ; \n"],[5,74],[0," return vec3 ( ( vec2 ( 0.5 ) - uv ) * invProjScaleXY * linearDepth , linearDepth ) ; \n"],[6],[0," }\nfloat depthToViewZ ( float depth ) { return - remapDepthBufferEyeDepth(depth) ; }\nvec3 computeViewSpaceNormal ( vec2 uv, highp sampler2D depthTexture, float depth, vec3 viewPos, vec2 texel, vec2 invProjScaleXY ) { vec3 normal = vec3 ( 0.0 ) ;\n\n"],[4,{"t":"or","l":{"t":"cmp","m":"SSAO_QUALITY","op":"==","v":0},"r":{"t":"cmp","m":"SSAO_QUALITY","op":"==","v":1}},78],[0," vec2 uvdx = uv + vec2 ( texel.x , 0.0 ) ;\nvec2 uvdy = uv + vec2 ( 0.0 , texel.y ) ;\nfloat depthX = texture2D ( depthTexture , uvdx ).r ;\nfloat depthY = texture2D ( depthTexture , uvdy ).r ;\nvec3 px = computeViewSpacePosition(uvdx, depthToViewZ(depthX), invProjScaleXY) ;\nvec3 py = computeViewSpacePosition(uvdy, depthToViewZ(depthY), invProjScaleXY) ;\nvec3 dpdx = px - viewPos ;\nvec3 dpdy = py - viewPos ;\nnormal = normalize ( cross ( dpdx , dpdy ) ) ; \n"],[5,81],[3,"SSAO_QUALITY","==",2,81],[0," vec2 dx = vec2 ( texel.x , 0.0 ) ;\nvec2 dy = vec2 ( 0.0 , texel.y ) ;\nvec4 H ;\nH.x = texture2D ( depthTexture , uv - dx ).r ;\nH.y = texture2D ( depthTexture , uv + dx ).r ;\nH.z = texture2D ( depthTexture , uv - dx * 2.0 ).r ;\nH.w = texture2D ( depthTexture , uv + dx * 2.0 ).r ;\nvec2 horizontalEdgeWeights = abs ( ( 2.0 * H.xy - H.zw ) - depth ) ;\nvec3 pos_l = computeViewSpacePosition(uv - dx, depthToViewZ(H.x), invProjScaleXY) ;\nvec3 pos_r = computeViewSpacePosition(uv + dx, depthToViewZ(H.y), invProjScaleXY) ;\nvec3 dpdx = ( horizontalEdgeWeights.x < horizontalEdgeWeights.y ) ? ( viewPos - pos_l ) : ( pos_r - viewPos ) ;\nvec4 V ;\nV.x = texture2D ( depthTexture , uv - dy ).r ;\nV.y = texture2D ( depthTexture , uv + dy ).r ;\nV.z = texture2D ( depthTexture , uv - dy * 2.0 ).r ;\nV.w = texture2D ( depthTexture , uv + dy * 2.0 ).r ;\nvec2 verticalEdgeWeights = abs ( ( 2.0 * V.xy - V.zw ) - depth ) ;\nvec3 pos_d = computeViewSpacePosition(uv - dy, depthToViewZ(V.x), invProjScaleXY) ;\nvec3 pos_u = computeViewSpacePosition(uv + dy, depthToViewZ(V.y), invProjScaleXY) ;\nvec3 dpdy = ( verticalEdgeWeights.x < verticalEdgeWeights.y ) ? ( viewPos - pos_d ) : ( pos_u - viewPos ) ;\nnormal = normalize ( cross ( dpdx , dpdy ) ) ; \n"],[6],[0,"\nreturn normal ; }\nvec2 startPosition ( const float noise ) { float angle = ( ( 2.0 * PI ) * 2.4 ) * noise ;\nreturn vec2 ( cos ( angle ) , sin ( angle ) ) ; }\nmat2 tapAngleStep ( ) { vec2 t = angleIncCosSin ;\nreturn mat2 ( t.x , t.y , - t.y , t.x ) ; }\nvec3 tapLocationFast ( float i, vec2 p, const float noise ) { float radius = ( i + noise + 0.5 ) / SAMPLE_COUNT ;\nreturn vec3 ( p , radius * radius ) ; }\nvoid computeAmbientOcclusionSAO ( inout float occlusion, float i, float ssDiskRadius, vec2 uv, vec3 originPosition, vec3 normal, vec2 tapPosition, float noise ) { vec3 tap = tapLocationFast(i, tapPosition, noise) ;\nfloat ssRadius = max ( 1.0 , tap.z * ssDiskRadius ) ;\nvec2 uvSamplePos = uv + vec2 ( ssRadius * tap.xy ) * renderer_texelSize.xy ;\nfloat occlusionDepth = texture2D ( renderer_BlitTexture , uvSamplePos ).r ;\nfloat linearOcclusionDepth = depthToViewZ(occlusionDepth) ;\nvec3 p = computeViewSpacePosition(uvSamplePos, linearOcclusionDepth, material_invProjScaleXY) ;\nvec3 v = p - originPosition ;\nfloat vv = dot ( v , v ) ;\nfloat vn = dot ( v , normal ) ;\nfloat weight = pow ( max ( 0.0 , 1.0 - vv * material_invRadiusSquared ) , 2.0 ) ;\nweight *= step ( vv * material_minHorizonAngleSineSquared , vn * vn ) ;\nfloat sampleOcclusion = max ( 0.0 , vn + ( originPosition.z * material_bias ) ) / ( vv + material_peak2 ) ;\nocclusion += weight * sampleOcclusion ; }\nvoid scalableAmbientObscurance ( vec2 uv, vec3 origin, vec3 normal, out float obscurance ) { float noise = interleavedGradientNoise(gl_FragCoord.xy) ;\nvec2 tapPosition = startPosition(noise) ;\nmat2 angleStep = tapAngleStep ( ) ;\nfloat ssDiskRadius = - ( material_projectionScaleRadius / origin.z ) ;\nobscurance = 0.0 ;\nfor ( float i = 0.0 ; i < SAMPLE_COUNT ; i += 1.0 ) { computeAmbientOcclusionSAO(obscurance, i, ssDiskRadius, uv, origin, normal, tapPosition, noise) ;\ntapPosition = angleStep * tapPosition ; }\nobscurance = sqrt ( obscurance * material_intensity ) ; }\nvec2 pack ( highp float normalizedDepth ) { highp float z = clamp ( normalizedDepth , 0.0 , 1.0 ) ;\nhighp float t = floor ( 256.0 * z ) ;\nmediump float hi = t * ( 1.0 / 256.0 ) ;\nmediump float lo = ( 256.0 * z ) - t ;\nreturn vec2 ( hi , lo ) ; }\nvoid main() { float depth = texture2D ( renderer_BlitTexture , v_uv ).r ;\nfloat z = depthToViewZ(depth) ;\nvec3 positionVS = computeViewSpacePosition(v_uv, z, material_invProjScaleXY) ;\nvec3 normal = computeViewSpaceNormal(v_uv, renderer_BlitTexture, depth, positionVS, renderer_texelSize.xy, material_invProjScaleXY) ;\nfloat occlusion = 0.0 ;\nscalableAmbientObscurance(v_uv, positionVS, normal, occlusion) ;\nfloat aoVisibility = pow ( clamp ( 1.0 - occlusion , 0.0 , 1.0 ) , material_power ) ;\ngl_FragColor = vec4 ( aoVisibility , pack(- positionVS.z / camera_ProjectionParams.z) , 1.0 ) ; }\n\n"],[6]]},{"name":"BilateralBlur","isUsePass":false,"tags":{},"renderStates":{"constantMap":{"10":false,"11":false},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nattribute vec4 POSITION_UV;\n\nvarying vec2 v_uv;\n\nvoid main() { \ngl_Position = vec4 ( POSITION_UV.xy , 0.0 , 1.0 ) ;\nv_uv = POSITION_UV.zw ;\n }\n\n"],[6],[0,"\n\n"],[2,"BILATERAL_BLUR_INCLUDED",58],[0,"\n\n"],[7,"BILATERAL_BLUR_INCLUDED"],[0,"\n\n"],[2,"COMMON_INCLUDED",40],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",34],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,38],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[3,"SSAO_QUALITY","==",0,46],[0,"\n\n"],[8,"BLUR_SAMPLE_COUNT","3"],[0,"\n\n"],[5,56],[3,"SSAO_QUALITY","==",1,51],[0,"\n\n"],[8,"BLUR_SAMPLE_COUNT","6"],[0,"\n\n"],[5,56],[3,"SSAO_QUALITY","==",2,56],[0,"\n\n"],[8,"BLUR_SAMPLE_COUNT","12"],[0,"\n\n"],[6],[0,"\n\n"],[6]],"fragmentShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nvarying vec2 v_uv;\n\n\n"],[6],[0,"\n\n"],[2,"BILATERAL_BLUR_INCLUDED",58],[0,"\n\n"],[7,"BILATERAL_BLUR_INCLUDED"],[0,"\n\n"],[2,"COMMON_INCLUDED",40],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat interleavedGradientNoise ( vec2 sampleCoord ) { const vec3 magic = vec3 ( 0.06711056 , 0.00583715 , 52.9829189 ) ;\nreturn fract ( magic.z * fract ( dot ( sampleCoord , magic.xy ) ) ) ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",34],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,38],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nuniform sampler2D renderer_BlitTexture;\nuniform vec4 renderer_SourceScaleOffset;\nuniform float material_farPlaneOverEdgeDistance;\n\n"],[3,"SSAO_QUALITY","==",0,46],[0,"\n\n"],[8,"BLUR_SAMPLE_COUNT","3"],[0,"\n\n"],[5,56],[3,"SSAO_QUALITY","==",1,51],[0,"\n\n"],[8,"BLUR_SAMPLE_COUNT","6"],[0,"\n\n"],[5,56],[3,"SSAO_QUALITY","==",2,56],[0,"\n\n"],[8,"BLUR_SAMPLE_COUNT","12"],[0,"\n\n"],[6],[0,"\nuniform float material_kernel [ 12 ];\nfloat bilateralWeight ( float depth, float sampleDepth ) { float diff = ( sampleDepth - depth ) * material_farPlaneOverEdgeDistance ;\nreturn max ( 0.0 , 1.0 - diff * diff ) ; }\nhighp float unpack ( highp vec2 depth ) { return ( depth.x * ( 256.0 / 257.0 ) + depth.y * ( 1.0 / 257.0 ) ) ; }\nvoid tap ( const sampler2D saoTexture, inout float sum, inout float totalWeight, float weight, float depth, vec2 position ) { vec4 data = texture2D ( saoTexture , position ) ;\nfloat bilateral = weight * bilateralWeight(depth, unpack(data.gb)) ;\nsum += data.r * bilateral ;\ntotalWeight += bilateral ; }\nvoid main() { mediump vec4 data = texture2D ( renderer_BlitTexture , v_uv ) ;\nfloat depth = unpack(data.gb) ;\nfloat totalWeight = material_kernel[0] ;\nfloat sum = data.r * totalWeight ;\nvec2 offset = renderer_SourceScaleOffset.zw ;\nfor ( int i = 1 ; i < BLUR_SAMPLE_COUNT ; i ++ ) { float weight = material_kernel[i] ;\ntap(renderer_BlitTexture, sum, totalWeight, weight, depth, v_uv + offset) ;\ntap(renderer_BlitTexture, sum, totalWeight, weight, depth, v_uv - offset) ;\noffset += renderer_SourceScaleOffset.zw ; }\nfloat ao = sum * ( 1.0 / totalWeight ) ;\nao += ( ( interleavedGradientNoise(gl_FragCoord.xy) - 0.5 ) / 255.0 ) ;\ngl_FragColor = vec4 ( ao , data.gb , 1.0 ) ; }\n\n"],[6]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/PBR.shaderc b/packages/shader/compiledShaders/PBR.shaderc deleted file mode 100644 index 2be685d4df..0000000000 --- a/packages/shader/compiledShaders/PBR.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"PBR","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"Pipeline/ShadowCaster/Default/ShadowCaster","isUsePass":true,"tags":{},"renderStates":{"constantMap":{},"variableMap":{}}},{"name":"Pipeline/DepthOnly/Default/DepthOnly","isUsePass":true,"tags":{},"renderStates":{"constantMap":{},"variableMap":{}}},{"name":"Forward Pass","isUsePass":false,"tags":{"pipelineStage":"Forward"},"renderStates":{"constantMap":{},"variableMap":{"0":"blendEnabled","3":"sourceColorBlendFactor","4":"sourceAlphaBlendFactor","5":"destinationColorBlendFactor","6":"destinationAlphaBlendFactor","11":"depthWriteEnabled","25":"rasterStateCullMode","28":"renderQueueType"}},"vertexShaderInstructions":[[0,"\n"],[2,"FORWARD_PASS_PBR_INCLUDED",714],[0,"\n\n"],[7,"FORWARD_PASS_PBR_INCLUDED"],[0,"\n\n"],[4,{"t":"and","l":{"t":"and","l":{"t":"def","m":"RENDERER_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_HAS_TANGENT"}},"r":{"t":"or","l":{"t":"def","m":"MATERIAL_HAS_NORMALTEXTURE"},"r":{"t":"def","m":"MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE"}}},10],[0,"\n\n"],[7,"NEED_VERTEX_TANGENT"],[0,"\n\n"],[6],[0,"\n\n"],[4,{"t":"or","l":{"t":"or","l":{"t":"def","m":"MATERIAL_HAS_NORMALTEXTURE"},"r":{"t":"def","m":"MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE"}},"r":{"t":"def","m":"MATERIAL_ENABLE_ANISOTROPY"}},16],[0,"\n\n"],[7,"NEED_TANGENT_SPACE"],[0,"\n\n"],[6],[0,"\n\n"],[2,"COMMON_INCLUDED",46],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",40],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,44],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"FOG_INCLUDED",56],[0,"\n\n"],[7,"FOG_INCLUDED"],[0,"\n\n"],[3,"SCENE_FOG_MODE","!=",0,54],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"TRANSFORM_INCLUDED",62],[0,"\n\n"],[7,"TRANSFORM_INCLUDED"],[0,"\nuniform mat4 renderer_ModelMat;\nuniform mat4 renderer_MVMat;\nuniform mat4 renderer_MVPMat;\nuniform mat4 renderer_NormalMat;\n\n"],[6],[0,"\n\n"],[2,"ATTRIBUTES_INCLUDED",120],[0,"\n\n"],[7,"ATTRIBUTES_INCLUDED"],[0,"\nattribute vec3 POSITION;\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",94],[0,"\n"],[2,"RENDERER_BLENDSHAPE_USE_TEXTURE",92],[0,"attribute vec3 POSITION_BS0;\nattribute vec3 POSITION_BS1;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},74],[0,"attribute vec3 NORMAL_BS0;\nattribute vec3 NORMAL_BS1;\nattribute vec3 TANGENT_BS0;\nattribute vec3 TANGENT_BS1;\n\n"],[5,90],[0,"\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},86],[0,"attribute vec3 POSITION_BS2;\nattribute vec3 POSITION_BS3;\n\n"],[1,"RENDERER_BLENDSHAPE_HAS_NORMAL",80],[0,"attribute vec3 NORMAL_BS0;\nattribute vec3 NORMAL_BS1;\nattribute vec3 NORMAL_BS2;\nattribute vec3 NORMAL_BS3;\n\n"],[6],[0,"\n"],[1,"RENDERER_BLENDSHAPE_HAS_TANGENT",84],[0,"attribute vec3 TANGENT_BS0;\nattribute vec3 TANGENT_BS1;\nattribute vec3 TANGENT_BS2;\nattribute vec3 TANGENT_BS3;\n\n"],[6],[0,"\n"],[5,88],[0,"attribute vec3 POSITION_BS2;\nattribute vec3 POSITION_BS3;\nattribute vec3 POSITION_BS4;\nattribute vec3 POSITION_BS5;\nattribute vec3 POSITION_BS6;\nattribute vec3 POSITION_BS7;\n\n"],[6],[0,"\n"],[6],[0,"\n"],[6],[0,"\n"],[6],[0,"\n"],[1,"RENDERER_HAS_UV",98],[0,"attribute vec2 TEXCOORD_0;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_UV1",102],[0,"attribute vec2 TEXCOORD_1;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_SKIN",106],[0,"attribute vec4 JOINTS_0;\nattribute vec4 WEIGHTS_0;\n\n"],[6],[0,"\n"],[1,"RENDERER_ENABLE_VERTEXCOLOR",110],[0,"attribute vec4 COLOR_0;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_NORMAL",114],[0,"attribute vec3 NORMAL;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_TANGENT",118],[0,"attribute vec4 TANGENT;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"SKIN_INCLUDED",142],[0,"\n\n"],[7,"SKIN_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_SKIN",140],[0,"\n\n"],[1,"RENDERER_USE_JOINT_TEXTURE",130],[0,"\nuniform sampler2D renderer_JointSampler;\nuniform float renderer_JointCount;\nmat4 getJointMatrix ( sampler2D smp, float index ) { float base = index / renderer_JointCount ;\nfloat hf = 0.5 / renderer_JointCount ;\nfloat v = base + hf ;\nvec4 m0 = texture2D ( smp , vec2 ( 0.125 , v ) ) ;\nvec4 m1 = texture2D ( smp , vec2 ( 0.375 , v ) ) ;\nvec4 m2 = texture2D ( smp , vec2 ( 0.625 , v ) ) ;\nvec4 m3 = texture2D ( smp , vec2 ( 0.875 , v ) ) ;\nreturn mat4 ( m0 , m1 , m2 , m3 ) ; }\n\n"],[5,132],[0,"\nuniform mat4 renderer_JointMatrix [ RENDERER_JOINTS_NUM ];\n\n"],[6],[0,"\nmat4 getSkinMatrix ( ) { \n"],[1,"RENDERER_USE_JOINT_TEXTURE",136],[0," mat4 skinMatrix = WEIGHTS_0.x * getJointMatrix(renderer_JointSampler, JOINTS_0.x) + WEIGHTS_0.y * getJointMatrix(renderer_JointSampler, JOINTS_0.y) + WEIGHTS_0.z * getJointMatrix(renderer_JointSampler, JOINTS_0.z) + WEIGHTS_0.w * getJointMatrix(renderer_JointSampler, JOINTS_0.w) ; \n"],[5,138],[0," mat4 skinMatrix = WEIGHTS_0.x * renderer_JointMatrix[int ( JOINTS_0.x )] + WEIGHTS_0.y * renderer_JointMatrix[int ( JOINTS_0.y )] + WEIGHTS_0.z * renderer_JointMatrix[int ( JOINTS_0.z )] + WEIGHTS_0.w * renderer_JointMatrix[int ( JOINTS_0.w )] ; \n"],[6],[0,"\nreturn skinMatrix ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"BLENDSHAPE_INCLUDED",220],[0,"\n\n"],[7,"BLENDSHAPE_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",218],[0,"\n\n"],[1,"RENDERER_BLENDSHAPE_USE_TEXTURE",152],[0,"\nuniform mediump sampler2DArray renderer_BlendShapeTexture;\nuniform ivec3 renderer_BlendShapeTextureInfo;\nuniform float renderer_BlendShapeWeights [ RENDERER_BLENDSHAPE_COUNT ];\nvec3 getBlendShapeVertexElement ( int blendShapeIndex, int vertexElementIndex ) { int y = vertexElementIndex / renderer_BlendShapeTextureInfo.y ;\nint x = vertexElementIndex - y * renderer_BlendShapeTextureInfo.y ;\nivec3 uv = ivec3 ( x , y , blendShapeIndex ) ;\nreturn ( texelFetch ( renderer_BlendShapeTexture , uv , 0 ) ).xyz ; }\n\n"],[5,166],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},156],[0,"\nuniform float renderer_BlendShapeWeights [ 2 ];\n\n"],[5,164],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},160],[0,"\nuniform float renderer_BlendShapeWeights [ 4 ];\n\n"],[5,162],[0,"\nuniform float renderer_BlendShapeWeights [ 8 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nvoid calculateBlendShape ( inout vec4 position\n"],[1,"RENDERER_HAS_NORMAL",174],[0," , inout vec3 normal \n"],[1,"RENDERER_HAS_TANGENT",172],[0," , inout vec4 tangent \n"],[6],[0," \n"],[6],[0," ) { \n"],[1,"RENDERER_BLENDSHAPE_USE_TEXTURE",186],[0," int vertexOffset = gl_VertexID * renderer_BlendShapeTextureInfo.x ;\nfor ( int i = 0 ; i < RENDERER_BLENDSHAPE_COUNT ; i ++ ) { int vertexElementOffset = vertexOffset ;\nfloat weight = renderer_BlendShapeWeights[i] ;\nif ( weight != 0.0 ) { position.xyz += getBlendShapeVertexElement(i, vertexElementOffset) * weight ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"}},180],[0," vertexElementOffset += 1 ;\nnormal += getBlendShapeVertexElement(i, vertexElementOffset) * weight ; \n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_HAS_TANGENT"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},184],[0," vertexElementOffset += 1 ;\ntangent.xyz += getBlendShapeVertexElement(i, vertexElementOffset) * weight ; \n"],[6],[0," } } \n"],[5,216],[0," position.xyz += POSITION_BS0 * renderer_BlendShapeWeights[0] ;\nposition.xyz += POSITION_BS1 * renderer_BlendShapeWeights[1] ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},198],[0," \n"],[1,"RENDERER_HAS_NORMAL",192],[0," normal += NORMAL_BS0 * renderer_BlendShapeWeights[0] ;\nnormal += NORMAL_BS1 * renderer_BlendShapeWeights[1] ; \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_TANGENT",196],[0," tangent.xyz += TANGENT_BS0 * renderer_BlendShapeWeights[0] ;\ntangent.xyz += TANGENT_BS1 * renderer_BlendShapeWeights[1] ; \n"],[6],[0," \n"],[5,214],[0," \n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},210],[0," position.xyz += POSITION_BS2 * renderer_BlendShapeWeights[2] ;\nposition.xyz += POSITION_BS3 * renderer_BlendShapeWeights[3] ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_HAS_NORMAL"}},204],[0," normal += NORMAL_BS0 * renderer_BlendShapeWeights[0] ;\nnormal += NORMAL_BS1 * renderer_BlendShapeWeights[1] ;\nnormal += NORMAL_BS2 * renderer_BlendShapeWeights[2] ;\nnormal += NORMAL_BS3 * renderer_BlendShapeWeights[3] ; \n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"},"r":{"t":"def","m":"RENDERER_HAS_TANGENT"}},208],[0," tangent.xyz += TANGENT_BS0 * renderer_BlendShapeWeights[0] ;\ntangent.xyz += TANGENT_BS1 * renderer_BlendShapeWeights[1] ;\ntangent.xyz += TANGENT_BS2 * renderer_BlendShapeWeights[2] ;\ntangent.xyz += TANGENT_BS3 * renderer_BlendShapeWeights[3] ; \n"],[6],[0," \n"],[5,212],[0," position.xyz += POSITION_BS2 * renderer_BlendShapeWeights[2] ;\nposition.xyz += POSITION_BS3 * renderer_BlendShapeWeights[3] ;\nposition.xyz += POSITION_BS4 * renderer_BlendShapeWeights[4] ;\nposition.xyz += POSITION_BS5 * renderer_BlendShapeWeights[5] ;\nposition.xyz += POSITION_BS6 * renderer_BlendShapeWeights[6] ;\nposition.xyz += POSITION_BS7 * renderer_BlendShapeWeights[7] ; \n"],[6],[0," \n"],[6],[0," \n"],[6],[0," }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"SHADOW_INCLUDED",300],[0,"\n\n"],[7,"SHADOW_INCLUDED"],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"SCENE_SHADOW_TYPE"},"r":{"t":"def","m":"RENDERER_IS_RECEIVE_SHADOWS"}},230],[0,"\n\n"],[7,"NEED_CALCULATE_SHADOWS"],[0,"\n\n"],[6],[0,"\n\n"],[1,"NEED_CALCULATE_SHADOWS",258],[0,"\nuniform mat4 scene_ShadowMatrices [ SCENE_SHADOW_CASCADED_COUNT + 1 ];\nuniform vec4 scene_ShadowSplitSpheres [ 4 ];\nmediump int computeCascadeIndex ( vec3 positionWS ) { vec3 fromCenter0 = positionWS - scene_ShadowSplitSpheres[0].xyz ;\nvec3 fromCenter1 = positionWS - scene_ShadowSplitSpheres[1].xyz ;\nvec3 fromCenter2 = positionWS - scene_ShadowSplitSpheres[2].xyz ;\nvec3 fromCenter3 = positionWS - scene_ShadowSplitSpheres[3].xyz ;\nmediump vec4 comparison = vec4 ( ( dot ( fromCenter0 , fromCenter0 ) < scene_ShadowSplitSpheres[0].w ) , ( dot ( fromCenter1 , fromCenter1 ) < scene_ShadowSplitSpheres[1].w ) , ( dot ( fromCenter2 , fromCenter2 ) < scene_ShadowSplitSpheres[2].w ) , ( dot ( fromCenter3 , fromCenter3 ) < scene_ShadowSplitSpheres[3].w ) ) ;\ncomparison.yzw = clamp ( comparison.yzw - comparison.xyz , 0.0 , 1.0 ) ;\nmediump vec4 indexCoefficient = vec4 ( 4.0 , 3.0 , 2.0 , 1.0 ) ;\nmediump int index = 4 - int ( dot ( comparison , indexCoefficient ) ) ;\nreturn index ; }\nvec3 getShadowCoord ( vec3 positionWS ) { \n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",1,236],[0," mediump int cascadeIndex = 0 ; \n"],[5,238],[0," mediump int cascadeIndex = computeCascadeIndex(positionWS) ; \n"],[6],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",242],[0," mat4 shadowMatrix = scene_ShadowMatrices[cascadeIndex] ; \n"],[5,256],[0," mat4 shadowMatrix ;\n\n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",4,246],[0," if ( cascadeIndex == 0 ) { shadowMatrix = scene_ShadowMatrices[0] ; } else if ( cascadeIndex == 1 ) { shadowMatrix = scene_ShadowMatrices[1] ; } else if ( cascadeIndex == 2 ) { shadowMatrix = scene_ShadowMatrices[2] ; } else if ( cascadeIndex == 3 ) { shadowMatrix = scene_ShadowMatrices[3] ; } else { shadowMatrix = scene_ShadowMatrices[4] ; } \n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",2,250],[0," if ( cascadeIndex == 0 ) { shadowMatrix = scene_ShadowMatrices[0] ; } else if ( cascadeIndex == 1 ) { shadowMatrix = scene_ShadowMatrices[1] ; } else { shadowMatrix = scene_ShadowMatrices[2] ; } \n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",1,254],[0," if ( cascadeIndex == 0 ) { shadowMatrix = scene_ShadowMatrices[0] ; } else { shadowMatrix = scene_ShadowMatrices[1] ; } \n"],[6],[0," \n"],[6],[0,"\nvec4 shadowCoord = shadowMatrix * vec4 ( positionWS , 1.0 ) ;\nreturn shadowCoord.xyz ; }\n\n"],[6],[0,"\n\n"],[1,"NEED_CALCULATE_SHADOWS",298],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",268],[0,"\n\n"],[9,"SAMPLE_TEXTURE2D_SHADOW",["textureName","coord3"],"textureLod ( textureName , coord3 , 0.0 )"],[0,"\n\n"],[9,"TEXTURE2D_SHADOW_PARAM",["shadowMap"],"mediump sampler2DShadow shadowMap"],[0,"\n\n"],[5,282],[0,"\n\n"],[1,"ENGINE_NO_DEPTH_TEXTURE",274],[0,"\nconst vec4 bitShift = vec4 ( 1.0 , 1.0 / 256.0 , 1.0 / ( 256.0 * 256.0 ) , 1.0 / ( 256.0 * 256.0 * 256.0 ) );\nfloat textureShadowMapDowngrade ( sampler2D scene_ShadowMap, vec3 shadowCoord ) { vec4 rgbaDepth = texture2D ( scene_ShadowMap , shadowCoord.xy ) ;\nfloat unpackDepth = dot ( rgbaDepth , bitShift ) ;\nreturn unpackDepth < shadowCoord.z ? 0.0 : 1.0 ; }\n\n"],[9,"SAMPLE_TEXTURE2D_SHADOW",["textureName","coord3"],"textureShadowMapDowngrade(textureName, coord3)"],[0,"\n\n"],[5,278],[0,"\nfloat textureShadowMapDowngrade ( sampler2D scene_ShadowMap, vec3 shadowCoord ) { float depth = texture2D ( scene_ShadowMap , shadowCoord.xy ).r ;\nreturn depth < shadowCoord.z ? 0.0 : 1.0 ; }\n\n"],[9,"SAMPLE_TEXTURE2D_SHADOW",["textureName","coord3"],"textureShadowMapDowngrade(textureName, coord3)"],[0,"\n\n"],[6],[0,"\n\n"],[9,"TEXTURE2D_SHADOW_PARAM",["shadowMap"],"mediump sampler2D shadowMap"],[0,"\n\n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_TYPE","==",2,286],[0,"\n\n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_TYPE","==",3,296],[0,"\n\n"],[2,"SHADOW_SAMPLE_TENT_INCLUDED",294],[0,"\n\n"],[7,"SHADOW_SAMPLE_TENT_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"VARYINGS_PBR_INCLUDED",330],[0,"\n\n"],[7,"VARYINGS_PBR_INCLUDED"],[0,"\nvarying vec2 uv;\n\n"],[1,"RENDERER_HAS_UV1",308],[0,"varying vec2 uv1;\n\n"],[6],[0,"\n"],[1,"RENDERER_ENABLE_VERTEXCOLOR",312],[0,"varying vec4 vertexColor;\n\n"],[6],[0,"varying vec3 positionWS;\n\n"],[3,"SCENE_FOG_MODE","!=",0,316],[0,"varying vec3 positionVS;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_NORMAL",324],[0,"varying vec3 normalWS;\n\n"],[1,"NEED_VERTEX_TANGENT",322],[0,"varying vec3 tangentWS;\nvarying vec3 bitangentWS;\n\n"],[6],[0,"\n"],[6],[0,"\n"],[4,{"t":"and","l":{"t":"def","m":"NEED_CALCULATE_SHADOWS"},"r":{"t":"cmp","m":"SCENE_SHADOW_CASCADED_COUNT","op":"==","v":1}},328],[0,"varying vec3 shadowCoord;\n\n"],[6],[0,"varying vec4 positionCS;\n\n\n"],[6],[0,"\n\n"],[2,"LIGHT_DIRECT_PBR_INCLUDED",478],[0,"\n\n"],[7,"LIGHT_DIRECT_PBR_INCLUDED"],[0,"\n\n"],[2,"FUNCTION_SURFACE_SHADING",340],[0,"\n\n"],[8,"FUNCTION_SURFACE_SHADING","surfaceShading"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FUNCTION_DIFFUSE_LOBE",346],[0,"\n\n"],[8,"FUNCTION_DIFFUSE_LOBE","diffuseLobe"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FUNCTION_SPECULAR_LOBE",352],[0,"\n\n"],[8,"FUNCTION_SPECULAR_LOBE","specularLobe"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FUNCTION_CLEAR_COAT_LOBE",358],[0,"\n\n"],[8,"FUNCTION_CLEAR_COAT_LOBE","clearCoatLobe"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FUNCTION_SHEEN_LOBE",364],[0,"\n\n"],[8,"FUNCTION_SHEEN_LOBE","sheenLobe"],[0,"\n\n"],[6],[0,"\n\n"],[2,"BSDF_INCLUDED",416],[0,"\n\n"],[7,"BSDF_INCLUDED"],[0,"\n\n"],[2,"REFRACTION_INCLUDED",378],[0,"\n\n"],[7,"REFRACTION_INCLUDED"],[0,"\n\n"],[1,"MATERIAL_ENABLE_TRANSMISSION",376],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[8,"MIN_PERCEPTUAL_ROUGHNESS","0.045"],[0,"\n\n"],[8,"MIN_ROUGHNESS","0.002025"],[0,"\n\n"],[1,"MATERIAL_ENABLE_SHEEN",386],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_ANISOTROPY",390],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_ANISOTROPY",394],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_ANISOTROPY",398],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_IRIDESCENCE",402],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_SHEEN",406],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_TRANSMISSION",410],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_ENABLE_AMBIENT_OCCLUSION",414],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"LIGHT_INCLUDED",458],[0,"\n\n"],[7,"LIGHT_INCLUDED"],[0,"\n\n"],[2,"GRAPHICS_API_WEBGL2",424],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_DIRECT_LIGHT_COUNT",432],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",430],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_POINT_LIGHT_COUNT",440],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",438],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_SPOT_LIGHT_COUNT",448],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",446],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_USE_SH",452],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_USE_SPECULAR_ENV",456],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"REFLECTION_LOBE_INCLUDED",464],[0,"\n\n"],[7,"REFLECTION_LOBE_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_DIRECT_LIGHT_COUNT",468],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_POINT_LIGHT_COUNT",472],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_SPOT_LIGHT_COUNT",476],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"LIGHT_INDIRECT_PBR_INCLUDED",514],[0,"\n\n"],[7,"LIGHT_INDIRECT_PBR_INCLUDED"],[0,"\n\n"],[2,"FUNCTION_DIFFUSE_IBL",488],[0,"\n\n"],[8,"FUNCTION_DIFFUSE_IBL","evaluateDiffuseIBL"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FUNCTION_SPECULAR_IBL",494],[0,"\n\n"],[8,"FUNCTION_SPECULAR_IBL","evaluateSpecularIBL"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FUNCTION_CLEAR_COAT_IBL",500],[0,"\n\n"],[8,"FUNCTION_CLEAR_COAT_IBL","evaluateClearCoatIBL"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FUNCTION_SHEEN_IBL",506],[0,"\n\n"],[8,"FUNCTION_SHEEN_IBL","evaluateSheenIBL"],[0,"\n\n"],[6],[0,"\n\n"],[2,"LIGHT_INDIRECT_FUNCTIONS_INCLUDED",512],[0,"\n\n"],[7,"LIGHT_INDIRECT_FUNCTIONS_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"VERTEX_INCLUDE",580],[0,"\n\n"],[7,"VERTEX_INCLUDE"],[0,"\nstruct VertexInputs { vec4 positionOS ; vec3 positionWS ; \n"],[3,"SCENE_FOG_MODE","!=",0,522],[0," vec3 positionVS ; \n"],[6],[0," \n"],[1,"RENDERER_HAS_NORMAL",530],[0," vec3 normalWS ; \n"],[1,"NEED_VERTEX_TANGENT",528],[0," vec3 tangentWS ; vec3 bitangentWS ; \n"],[6],[0," \n"],[6],[0," } ;\nuniform vec4 material_TilingOffset;\nvec2 getUV0 ( ) { vec2 uv0 = vec2 ( 0 ) ;\n\n"],[1,"RENDERER_HAS_UV",534],[0," uv0 = TEXCOORD_0 ; \n"],[6],[0,"\nreturn uv0 * material_TilingOffset.xy + material_TilingOffset.zw ; }\nVertexInputs getVertexInputs ( ) { VertexInputs inputs ;\nvec4 position = vec4 ( POSITION , 1.0 ) ;\n\n"],[1,"RENDERER_HAS_NORMAL",542],[0," vec3 normal = vec3 ( NORMAL ) ;\n\n"],[1,"RENDERER_HAS_TANGENT",540],[0," vec4 tangent = vec4 ( TANGENT ) ; \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",554],[0," calculateBlendShape(position\n"],[1,"RENDERER_HAS_NORMAL",552],[0," , normal \n"],[1,"RENDERER_HAS_TANGENT",550],[0," , tangent \n"],[6],[0," \n"],[6],[0,") ; \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_SKIN",566],[0," mat4 skinMatrix = getSkinMatrix() ;\nposition = skinMatrix * position ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_HAS_NORMAL"},"r":{"t":"not","c":{"t":"def","m":"MATERIAL_OMIT_NORMAL"}}},564],[0," mat3 skinNormalMatrix = INVERSE_MAT(mat3 ( skinMatrix )) ;\nnormal = normal * skinNormalMatrix ;\n\n"],[1,"NEED_VERTEX_TANGENT",562],[0," tangent.xyz = tangent.xyz * skinNormalMatrix ; \n"],[6],[0," \n"],[6],[0," \n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_HAS_NORMAL"},"r":{"t":"not","c":{"t":"def","m":"MATERIAL_OMIT_NORMAL"}}},574],[0," mat3 normalMat = mat3 ( renderer_NormalMat ) ;\ninputs.normalWS = normalize ( normalMat * normal ) ;\n\n"],[1,"NEED_VERTEX_TANGENT",572],[0," vec3 tangentWS = normalize ( normalMat * tangent.xyz ) ;\nvec3 bitangentWS = cross ( inputs.normalWS , tangentWS ) * tangent.w ;\ninputs.tangentWS = tangentWS ;\ninputs.bitangentWS = bitangentWS ; \n"],[6],[0," \n"],[6],[0,"\ninputs.positionOS = position ;\nvec4 positionWS = renderer_ModelMat * position ;\ninputs.positionWS = positionWS.xyz / positionWS.w ;\n\n"],[3,"SCENE_FOG_MODE","!=",0,578],[0," vec4 positionVS = renderer_MVMat * position ;\ninputs.positionVS = positionVS.xyz / positionVS.w ; \n"],[6],[0,"\nreturn inputs ; }\n\n"],[6],[0,"\n\n"],[2,"MATERIAL_INPUT_PBR_INCLUDED",688],[0,"\n\n"],[7,"MATERIAL_INPUT_PBR_INCLUDED"],[0,"\n\n"],[2,"NORMAL_INCLUDED",590],[0,"\n\n"],[7,"NORMAL_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_SPECULAR_TEXTURE",594],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_SPECULAR_COLOR_TEXTURE",598],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_CLEAR_COAT",614],[0,"\n\n"],[1,"MATERIAL_HAS_CLEAR_COAT_TEXTURE",604],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_CLEAR_COAT_ROUGHNESS_TEXTURE",608],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE",612],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_ANISOTROPY",622],[0,"\n\n"],[1,"MATERIAL_HAS_ANISOTROPY_TEXTURE",620],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_IRIDESCENCE",634],[0,"\n\n"],[1,"MATERIAL_HAS_IRIDESCENCE_THICKNESS_TEXTURE",628],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_IRIDESCENCE_TEXTURE",632],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_SHEEN",646],[0,"\n\n"],[1,"MATERIAL_HAS_SHEEN_TEXTURE",640],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_SHEEN_ROUGHNESS_TEXTURE",644],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_TRANSMISSION",662],[0,"\n\n"],[1,"MATERIAL_HAS_TRANSMISSION_TEXTURE",652],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_THICKNESS",660],[0,"\n\n"],[1,"MATERIAL_HAS_THICKNESS_TEXTURE",658],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",666],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_NORMALTEXTURE",670],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_EMISSIVETEXTURE",674],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_ROUGHNESS_METALLIC_TEXTURE",678],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_OCCLUSION_TEXTURE",682],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_ANISOTROPY",686],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nvoid main() { \nuv = getUV0() ;\n\n"],[1,"RENDERER_HAS_UV1",692],[0," uv1 = TEXCOORD_1 ; \n"],[6],[0,"\n\n"],[1,"RENDERER_ENABLE_VERTEXCOLOR",696],[0," vertexColor = COLOR_0 ; \n"],[6],[0,"\nVertexInputs vertexInputs = getVertexInputs() ;\npositionWS = vertexInputs.positionWS ;\n\n"],[3,"SCENE_FOG_MODE","!=",0,700],[0," positionVS = vertexInputs.positionVS ; \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_NORMAL",708],[0," normalWS = vertexInputs.normalWS ;\n\n"],[1,"NEED_VERTEX_TANGENT",706],[0," tangentWS = vertexInputs.tangentWS ;\nbitangentWS = vertexInputs.bitangentWS ; \n"],[6],[0," \n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"NEED_CALCULATE_SHADOWS"},"r":{"t":"cmp","m":"SCENE_SHADOW_CASCADED_COUNT","op":"==","v":1}},712],[0," shadowCoord = getShadowCoord(vertexInputs.positionWS) ; \n"],[6],[0,"\ngl_Position = renderer_MVPMat * vertexInputs.positionOS ;\npositionCS = gl_Position ;\n }\n\n"],[6]],"fragmentShaderInstructions":[[0,"\n"],[2,"FORWARD_PASS_PBR_INCLUDED",896],[0,"\n\n"],[7,"FORWARD_PASS_PBR_INCLUDED"],[0,"\n\n"],[4,{"t":"and","l":{"t":"and","l":{"t":"def","m":"RENDERER_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_HAS_TANGENT"}},"r":{"t":"or","l":{"t":"def","m":"MATERIAL_HAS_NORMALTEXTURE"},"r":{"t":"def","m":"MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE"}}},10],[0,"\n\n"],[7,"NEED_VERTEX_TANGENT"],[0,"\n\n"],[6],[0,"\n\n"],[4,{"t":"or","l":{"t":"or","l":{"t":"def","m":"MATERIAL_HAS_NORMALTEXTURE"},"r":{"t":"def","m":"MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE"}},"r":{"t":"def","m":"MATERIAL_ENABLE_ANISOTROPY"}},16],[0,"\n\n"],[7,"NEED_TANGENT_SPACE"],[0,"\n\n"],[6],[0,"\n\n"],[2,"COMMON_INCLUDED",50],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat pow2 ( float x ) { return x * x ; }\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",38],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\nuniform vec4 camera_ProjectionParams;\n\n"],[1,"GRAPHICS_API_WEBGL2",44],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,48],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"FOG_INCLUDED",70],[0,"\n\n"],[7,"FOG_INCLUDED"],[0,"\n\n"],[3,"SCENE_FOG_MODE","!=",0,68],[0,"\nuniform vec4 scene_FogColor;\nuniform vec4 scene_FogParams;\nvec4 fog ( vec4 color, vec3 positionVS ) { float fogDepth = length ( positionVS ) ;\n\n"],[3,"SCENE_FOG_MODE","==",1,60],[0," float fogIntensity = clamp ( fogDepth * scene_FogParams.x + scene_FogParams.y , 0.0 , 1.0 ) ; \n"],[5,66],[3,"SCENE_FOG_MODE","==",2,63],[0," float fogIntensity = clamp ( exp2 ( - fogDepth * scene_FogParams.z ) , 0.0 , 1.0 ) ; \n"],[5,66],[3,"SCENE_FOG_MODE","==",3,66],[0," float factor = fogDepth * scene_FogParams.w ;\nfloat fogIntensity = clamp ( exp2 ( - factor * factor ) , 0.0 , 1.0 ) ; \n"],[6],[0,"\ncolor.rgb = mix ( scene_FogColor.rgb , color.rgb , fogIntensity ) ;\nreturn color ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"TRANSFORM_INCLUDED",76],[0,"\n\n"],[7,"TRANSFORM_INCLUDED"],[0,"\nuniform mat4 camera_ViewMat;\nuniform mat4 camera_ProjMat;\nuniform vec3 camera_Position;\nuniform vec3 camera_Forward;\n\n"],[6],[0,"\n\n"],[2,"ATTRIBUTES_INCLUDED",82],[0,"\n\n"],[7,"ATTRIBUTES_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[2,"SKIN_INCLUDED",98],[0,"\n\n"],[7,"SKIN_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_SKIN",96],[0,"\n\n"],[1,"RENDERER_USE_JOINT_TEXTURE",92],[0,"\n\n"],[5,94],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"BLENDSHAPE_INCLUDED",126],[0,"\n\n"],[7,"BLENDSHAPE_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",124],[0,"\n\n"],[1,"RENDERER_BLENDSHAPE_USE_TEXTURE",108],[0,"\n\n"],[5,122],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},112],[0,"\n\n"],[5,120],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},116],[0,"\n\n"],[5,118],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"SHADOW_INCLUDED",218],[0,"\n\n"],[7,"SHADOW_INCLUDED"],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"SCENE_SHADOW_TYPE"},"r":{"t":"def","m":"RENDERER_IS_RECEIVE_SHADOWS"}},136],[0,"\n\n"],[7,"NEED_CALCULATE_SHADOWS"],[0,"\n\n"],[6],[0,"\n\n"],[1,"NEED_CALCULATE_SHADOWS",164],[0,"\nuniform mat4 scene_ShadowMatrices [ SCENE_SHADOW_CASCADED_COUNT + 1 ];\nuniform vec4 scene_ShadowSplitSpheres [ 4 ];\nmediump int computeCascadeIndex ( vec3 positionWS ) { vec3 fromCenter0 = positionWS - scene_ShadowSplitSpheres[0].xyz ;\nvec3 fromCenter1 = positionWS - scene_ShadowSplitSpheres[1].xyz ;\nvec3 fromCenter2 = positionWS - scene_ShadowSplitSpheres[2].xyz ;\nvec3 fromCenter3 = positionWS - scene_ShadowSplitSpheres[3].xyz ;\nmediump vec4 comparison = vec4 ( ( dot ( fromCenter0 , fromCenter0 ) < scene_ShadowSplitSpheres[0].w ) , ( dot ( fromCenter1 , fromCenter1 ) < scene_ShadowSplitSpheres[1].w ) , ( dot ( fromCenter2 , fromCenter2 ) < scene_ShadowSplitSpheres[2].w ) , ( dot ( fromCenter3 , fromCenter3 ) < scene_ShadowSplitSpheres[3].w ) ) ;\ncomparison.yzw = clamp ( comparison.yzw - comparison.xyz , 0.0 , 1.0 ) ;\nmediump vec4 indexCoefficient = vec4 ( 4.0 , 3.0 , 2.0 , 1.0 ) ;\nmediump int index = 4 - int ( dot ( comparison , indexCoefficient ) ) ;\nreturn index ; }\nvec3 getShadowCoord ( vec3 positionWS ) { \n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",1,142],[0," mediump int cascadeIndex = 0 ; \n"],[5,144],[0," mediump int cascadeIndex = computeCascadeIndex(positionWS) ; \n"],[6],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",148],[0," mat4 shadowMatrix = scene_ShadowMatrices[cascadeIndex] ; \n"],[5,162],[0," mat4 shadowMatrix ;\n\n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",4,152],[0," if ( cascadeIndex == 0 ) { shadowMatrix = scene_ShadowMatrices[0] ; } else if ( cascadeIndex == 1 ) { shadowMatrix = scene_ShadowMatrices[1] ; } else if ( cascadeIndex == 2 ) { shadowMatrix = scene_ShadowMatrices[2] ; } else if ( cascadeIndex == 3 ) { shadowMatrix = scene_ShadowMatrices[3] ; } else { shadowMatrix = scene_ShadowMatrices[4] ; } \n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",2,156],[0," if ( cascadeIndex == 0 ) { shadowMatrix = scene_ShadowMatrices[0] ; } else if ( cascadeIndex == 1 ) { shadowMatrix = scene_ShadowMatrices[1] ; } else { shadowMatrix = scene_ShadowMatrices[2] ; } \n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",1,160],[0," if ( cascadeIndex == 0 ) { shadowMatrix = scene_ShadowMatrices[0] ; } else { shadowMatrix = scene_ShadowMatrices[1] ; } \n"],[6],[0," \n"],[6],[0,"\nvec4 shadowCoord = shadowMatrix * vec4 ( positionWS , 1.0 ) ;\nreturn shadowCoord.xyz ; }\n\n"],[6],[0,"\n\n"],[1,"NEED_CALCULATE_SHADOWS",216],[0,"\nuniform vec4 scene_ShadowInfo;\nuniform vec4 scene_ShadowMapSize;\n\n"],[1,"GRAPHICS_API_WEBGL2",174],[0,"\nuniform mediump sampler2DShadow scene_ShadowMap;\n\n"],[9,"SAMPLE_TEXTURE2D_SHADOW",["textureName","coord3"],"textureLod ( textureName , coord3 , 0.0 )"],[0,"\n\n"],[9,"TEXTURE2D_SHADOW_PARAM",["shadowMap"],"mediump sampler2DShadow shadowMap"],[0,"\n\n"],[5,188],[0,"\nuniform sampler2D scene_ShadowMap;\n\n"],[1,"ENGINE_NO_DEPTH_TEXTURE",180],[0,"\nconst vec4 bitShift = vec4 ( 1.0 , 1.0 / 256.0 , 1.0 / ( 256.0 * 256.0 ) , 1.0 / ( 256.0 * 256.0 * 256.0 ) );\nfloat textureShadowMapDowngrade ( sampler2D scene_ShadowMap, vec3 shadowCoord ) { vec4 rgbaDepth = texture2D ( scene_ShadowMap , shadowCoord.xy ) ;\nfloat unpackDepth = dot ( rgbaDepth , bitShift ) ;\nreturn unpackDepth < shadowCoord.z ? 0.0 : 1.0 ; }\n\n"],[9,"SAMPLE_TEXTURE2D_SHADOW",["textureName","coord3"],"textureShadowMapDowngrade(textureName, coord3)"],[0,"\n\n"],[5,184],[0,"\nfloat textureShadowMapDowngrade ( sampler2D scene_ShadowMap, vec3 shadowCoord ) { float depth = texture2D ( scene_ShadowMap , shadowCoord.xy ).r ;\nreturn depth < shadowCoord.z ? 0.0 : 1.0 ; }\n\n"],[9,"SAMPLE_TEXTURE2D_SHADOW",["textureName","coord3"],"textureShadowMapDowngrade(textureName, coord3)"],[0,"\n\n"],[6],[0,"\n\n"],[9,"TEXTURE2D_SHADOW_PARAM",["shadowMap"],"mediump sampler2D shadowMap"],[0,"\n\n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_TYPE","==",2,192],[0,"\nfloat sampleShadowMapFiltered4 ( TEXTURE2D_SHADOW_PARAM(shadowMap), vec3 shadowCoord, vec4 shadowMapSize ) { float attenuation ;\nvec4 attenuation4 ;\nvec2 offset = shadowMapSize.xy / 2.0 ;\nvec3 shadowCoord0 = shadowCoord + vec3 ( - offset , 0.0 ) ;\nvec3 shadowCoord1 = shadowCoord + vec3 ( offset.x , - offset.y , 0.0 ) ;\nvec3 shadowCoord2 = shadowCoord + vec3 ( - offset.x , offset.y , 0.0 ) ;\nvec3 shadowCoord3 = shadowCoord + vec3 ( offset , 0.0 ) ;\nattenuation4.x = SAMPLE_TEXTURE2D_SHADOW(shadowMap, shadowCoord0) ;\nattenuation4.y = SAMPLE_TEXTURE2D_SHADOW(shadowMap, shadowCoord1) ;\nattenuation4.z = SAMPLE_TEXTURE2D_SHADOW(shadowMap, shadowCoord2) ;\nattenuation4.w = SAMPLE_TEXTURE2D_SHADOW(shadowMap, shadowCoord3) ;\nattenuation = dot ( attenuation4 , vec4 ( 0.25 ) ) ;\nreturn attenuation ; }\n\n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_TYPE","==",3,202],[0,"\n\n"],[2,"SHADOW_SAMPLE_TENT_INCLUDED",200],[0,"\n\n"],[7,"SHADOW_SAMPLE_TENT_INCLUDED"],[0,"\nfloat sampleShadowGetIRTriangleTexelArea ( float triangleHeight ) { return triangleHeight - 0.5 ; }\nvoid sampleShadowGetTexelAreasTent3x3 ( float offset, out vec4 computedArea, out vec4 computedAreaUncut ) { float a = offset + 0.5 ;\nfloat offsetSquaredHalved = a * a * 0.5 ;\ncomputedAreaUncut.x = computedArea.x = offsetSquaredHalved - offset ;\ncomputedAreaUncut.w = computedArea.w = offsetSquaredHalved ;\ncomputedAreaUncut.y = sampleShadowGetIRTriangleTexelArea(1.5 - offset) ;\nfloat clampedOffsetLeft = min ( offset , 0.0 ) ;\nfloat areaOfSmallLeftTriangle = clampedOffsetLeft * clampedOffsetLeft ;\ncomputedArea.y = computedAreaUncut.y - areaOfSmallLeftTriangle ;\ncomputedAreaUncut.z = sampleShadowGetIRTriangleTexelArea(1.5 + offset) ;\nfloat clampedOffsetRight = max ( offset , 0.0 ) ;\nfloat areaOfSmallRightTriangle = clampedOffsetRight * clampedOffsetRight ;\ncomputedArea.z = computedAreaUncut.z - areaOfSmallRightTriangle ; }\nvoid sampleShadowGetTexelWeightsTent5x5 ( float offset, out vec3 texelsWeightsA, out vec3 texelsWeightsB ) { vec4 areaFrom3texelTriangle ;\nvec4 areaUncutFrom3texelTriangle ;\nsampleShadowGetTexelAreasTent3x3(offset, areaFrom3texelTriangle, areaUncutFrom3texelTriangle) ;\ntexelsWeightsA.x = 0.16 * ( areaFrom3texelTriangle.x ) ;\ntexelsWeightsA.y = 0.16 * ( areaUncutFrom3texelTriangle.y ) ;\ntexelsWeightsA.z = 0.16 * ( areaFrom3texelTriangle.y + 1.0 ) ;\ntexelsWeightsB.x = 0.16 * ( areaFrom3texelTriangle.z + 1.0 ) ;\ntexelsWeightsB.y = 0.16 * ( areaUncutFrom3texelTriangle.z ) ;\ntexelsWeightsB.z = 0.16 * ( areaFrom3texelTriangle.w ) ; }\nvoid sampleShadowComputeSamplesTent5x5 ( vec4 shadowMapTextureTexelSize, vec2 coord, out float fetchesWeights [ 9 ], out vec2 fetchesUV [ 9 ] ) { vec2 tentCenterInTexelSpace = coord.xy * shadowMapTextureTexelSize.zw ;\nvec2 centerOfFetchesInTexelSpace = floor ( tentCenterInTexelSpace + 0.5 ) ;\nvec2 offsetFromTentCenterToCenterOfFetches = tentCenterInTexelSpace - centerOfFetchesInTexelSpace ;\nvec3 texelsWeightsUA , texelsWeightsUB ;\nvec3 texelsWeightsVA , texelsWeightsVB ;\nsampleShadowGetTexelWeightsTent5x5(offsetFromTentCenterToCenterOfFetches.x, texelsWeightsUA, texelsWeightsUB) ;\nsampleShadowGetTexelWeightsTent5x5(offsetFromTentCenterToCenterOfFetches.y, texelsWeightsVA, texelsWeightsVB) ;\nvec3 fetchesWeightsU = vec3 ( texelsWeightsUA.xz , texelsWeightsUB.y ) + vec3 ( texelsWeightsUA.y , texelsWeightsUB.xz ) ;\nvec3 fetchesWeightsV = vec3 ( texelsWeightsVA.xz , texelsWeightsVB.y ) + vec3 ( texelsWeightsVA.y , texelsWeightsVB.xz ) ;\nvec3 fetchesOffsetsU = vec3 ( texelsWeightsUA.y , texelsWeightsUB.xz ) / fetchesWeightsU.xyz + vec3 ( - 2.5 , - 0.5 , 1.5 ) ;\nvec3 fetchesOffsetsV = vec3 ( texelsWeightsVA.y , texelsWeightsVB.xz ) / fetchesWeightsV.xyz + vec3 ( - 2.5 , - 0.5 , 1.5 ) ;\nfetchesOffsetsU *= shadowMapTextureTexelSize.xxx ;\nfetchesOffsetsV *= shadowMapTextureTexelSize.yyy ;\nvec2 bilinearFetchOrigin = centerOfFetchesInTexelSpace * shadowMapTextureTexelSize.xy ;\nfetchesUV[0] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.x , fetchesOffsetsV.x ) ;\nfetchesUV[1] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.y , fetchesOffsetsV.x ) ;\nfetchesUV[2] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.z , fetchesOffsetsV.x ) ;\nfetchesUV[3] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.x , fetchesOffsetsV.y ) ;\nfetchesUV[4] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.y , fetchesOffsetsV.y ) ;\nfetchesUV[5] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.z , fetchesOffsetsV.y ) ;\nfetchesUV[6] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.x , fetchesOffsetsV.z ) ;\nfetchesUV[7] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.y , fetchesOffsetsV.z ) ;\nfetchesUV[8] = bilinearFetchOrigin + vec2 ( fetchesOffsetsU.z , fetchesOffsetsV.z ) ;\nfetchesWeights[0] = fetchesWeightsU.x * fetchesWeightsV.x ;\nfetchesWeights[1] = fetchesWeightsU.y * fetchesWeightsV.x ;\nfetchesWeights[2] = fetchesWeightsU.z * fetchesWeightsV.x ;\nfetchesWeights[3] = fetchesWeightsU.x * fetchesWeightsV.y ;\nfetchesWeights[4] = fetchesWeightsU.y * fetchesWeightsV.y ;\nfetchesWeights[5] = fetchesWeightsU.z * fetchesWeightsV.y ;\nfetchesWeights[6] = fetchesWeightsU.x * fetchesWeightsV.z ;\nfetchesWeights[7] = fetchesWeightsU.y * fetchesWeightsV.z ;\nfetchesWeights[8] = fetchesWeightsU.z * fetchesWeightsV.z ; }\n\n"],[6],[0,"\nfloat sampleShadowMapFiltered9 ( TEXTURE2D_SHADOW_PARAM(shadowMap), vec3 shadowCoord, vec4 shadowmapSize ) { float attenuation ;\nfloat fetchesWeights [ 9 ] ;\nvec2 fetchesUV [ 9 ] ;\nsampleShadowComputeSamplesTent5x5(shadowmapSize, shadowCoord.xy, fetchesWeights, fetchesUV) ;\nattenuation = fetchesWeights[0] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[0].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[1] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[1].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[2] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[2].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[3] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[3].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[4] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[4].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[5] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[5].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[6] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[6].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[7] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[7].xy , shadowCoord.z )) ;\nattenuation += fetchesWeights[8] * SAMPLE_TEXTURE2D_SHADOW(shadowMap, vec3 ( fetchesUV[8].xy , shadowCoord.z )) ;\nreturn attenuation ; }\n\n"],[6],[0,"\nfloat getShadowFade ( vec3 positionWS ) { vec3 camToPixel = positionWS - camera_Position ;\nfloat distanceCamToPixel2 = dot ( camToPixel , camToPixel ) ;\nreturn saturate(distanceCamToPixel2 * scene_ShadowInfo.z + scene_ShadowInfo.w) ; }\nfloat sampleShadowMap ( vec3 positionWS, vec3 shadowCoord ) { float attenuation = 1.0 ;\nif ( shadowCoord.z > 0.0 && shadowCoord.z < 1.0 ) { \n"],[3,"SCENE_SHADOW_TYPE","==",1,206],[0," attenuation = SAMPLE_TEXTURE2D_SHADOW(scene_ShadowMap, shadowCoord) ; \n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_TYPE","==",2,210],[0," attenuation = sampleShadowMapFiltered4(scene_ShadowMap, shadowCoord, scene_ShadowMapSize) ; \n"],[6],[0,"\n\n"],[3,"SCENE_SHADOW_TYPE","==",3,214],[0," attenuation = sampleShadowMapFiltered9(scene_ShadowMap, shadowCoord, scene_ShadowMapSize) ; \n"],[6],[0,"\nfloat shadowFade = getShadowFade(positionWS) ;\nattenuation = mix ( 1.0 , mix ( attenuation , 1.0 , shadowFade ) , scene_ShadowInfo.x ) ; }\nreturn attenuation ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"VARYINGS_PBR_INCLUDED",248],[0,"\n\n"],[7,"VARYINGS_PBR_INCLUDED"],[0,"\nvarying vec2 uv;\n\n"],[1,"RENDERER_HAS_UV1",226],[0,"varying vec2 uv1;\n\n"],[6],[0,"\n"],[1,"RENDERER_ENABLE_VERTEXCOLOR",230],[0,"varying vec4 vertexColor;\n\n"],[6],[0,"varying vec3 positionWS;\n\n"],[3,"SCENE_FOG_MODE","!=",0,234],[0,"varying vec3 positionVS;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_NORMAL",242],[0,"varying vec3 normalWS;\n\n"],[1,"NEED_VERTEX_TANGENT",240],[0,"varying vec3 tangentWS;\nvarying vec3 bitangentWS;\n\n"],[6],[0,"\n"],[6],[0,"\n"],[4,{"t":"and","l":{"t":"def","m":"NEED_CALCULATE_SHADOWS"},"r":{"t":"cmp","m":"SCENE_SHADOW_CASCADED_COUNT","op":"==","v":1}},246],[0,"varying vec3 shadowCoord;\n\n"],[6],[0,"varying vec4 positionCS;\n\n\n"],[6],[0,"\n\n"],[2,"LIGHT_DIRECT_PBR_INCLUDED",539],[0,"\n\n"],[7,"LIGHT_DIRECT_PBR_INCLUDED"],[0,"\n\n"],[2,"FUNCTION_SURFACE_SHADING",258],[0,"\n\n"],[8,"FUNCTION_SURFACE_SHADING","surfaceShading"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FUNCTION_DIFFUSE_LOBE",264],[0,"\n\n"],[8,"FUNCTION_DIFFUSE_LOBE","diffuseLobe"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FUNCTION_SPECULAR_LOBE",270],[0,"\n\n"],[8,"FUNCTION_SPECULAR_LOBE","specularLobe"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FUNCTION_CLEAR_COAT_LOBE",276],[0,"\n\n"],[8,"FUNCTION_CLEAR_COAT_LOBE","clearCoatLobe"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FUNCTION_SHEEN_LOBE",282],[0,"\n\n"],[8,"FUNCTION_SHEEN_LOBE","sheenLobe"],[0,"\n\n"],[6],[0,"\n\n"],[2,"BSDF_INCLUDED",429],[0,"\n\n"],[7,"BSDF_INCLUDED"],[0,"\n\n"],[2,"REFRACTION_INCLUDED",296],[0,"\n\n"],[7,"REFRACTION_INCLUDED"],[0,"\n\n"],[1,"MATERIAL_ENABLE_TRANSMISSION",294],[0,"\nstruct RefractionModelResult { float transmissionLength ; vec3 positionExit ; } ;\nvoid refractionModelSphere ( vec3 V, vec3 positionWS, vec3 normalWS, float ior, float thickness, out RefractionModelResult ray ) { vec3 R1 = refract ( V , normalWS , 1.0 / ior ) ;\nfloat dist = dot ( - normalWS , R1 ) * thickness ;\nvec3 P1 = positionWS + R1 * dist ;\nray.transmissionLength = dist ;\nray.positionExit = P1 ; }\nvoid refractionModelPlanar ( vec3 V, vec3 positionWS, vec3 normalWS, float ior, float thickness, out RefractionModelResult ray ) { vec3 R = refract ( V , normalWS , 1.0 / ior ) ;\nfloat dist = thickness / max ( dot ( - normalWS , R ) , 1e-5f ) ;\nray.transmissionLength = dist ;\nray.positionExit = vec3 ( positionWS + R * dist ) ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[8,"MIN_PERCEPTUAL_ROUGHNESS","0.045"],[0,"\n\n"],[8,"MIN_ROUGHNESS","0.002025"],[0,"\n\n"],[1,"MATERIAL_ENABLE_SHEEN",304],[0,"\nuniform sampler2D scene_PrefilteredDFG;\n\n"],[6],[0,"\nstruct SurfaceData { vec3 albedoColor ; vec3 emissiveColor ; float metallic ; float roughness ; float ambientOcclusion ; float opacity ; float IOR ; vec3 position ; vec4 positionCS ; vec3 normal ; \n"],[1,"NEED_TANGENT_SPACE",308],[0," vec3 tangent ; vec3 bitangent ; \n"],[6],[0," vec3 viewDir ; float dotNV ; float specularIntensity ; vec3 specularColor ; \n"],[1,"MATERIAL_ENABLE_ANISOTROPY",312],[0," float anisotropy ; vec3 anisotropicT ; vec3 anisotropicB ; vec3 anisotropicN ; \n"],[6],[0," \n"],[1,"MATERIAL_ENABLE_CLEAR_COAT",316],[0," float clearCoat ; float clearCoatRoughness ; vec3 clearCoatNormal ; float clearCoatDotNV ; \n"],[6],[0," \n"],[1,"MATERIAL_ENABLE_IRIDESCENCE",320],[0," float iridescenceIOR ; float iridescenceFactor ; float iridescenceThickness ; \n"],[6],[0," \n"],[1,"MATERIAL_ENABLE_SHEEN",324],[0," float sheenRoughness ; vec3 sheenColor ; \n"],[6],[0," \n"],[1,"MATERIAL_ENABLE_TRANSMISSION",328],[0," vec3 absorptionCoefficient ; float transmission ; float thickness ; \n"],[6],[0," } ;\nstruct BSDFData { vec3 diffuseColor ; float roughness ; vec3 envSpecularDFG ; float diffuseAO ; vec3 specularF0 ; vec3 resolvedSpecularF0 ; float specularF90 ; vec3 energyCompensation ; \n"],[1,"MATERIAL_ENABLE_CLEAR_COAT",332],[0," vec3 clearCoatSpecularColor ; float clearCoatRoughness ; \n"],[6],[0," \n"],[1,"MATERIAL_ENABLE_IRIDESCENCE",336],[0," vec3 iridescenceSpecularColor ; \n"],[6],[0," \n"],[1,"MATERIAL_ENABLE_SHEEN",340],[0," float sheenRoughness ; float sheenScaling ; float approxIBLSheenDG ; \n"],[6],[0," } ;\nfloat getAARoughnessFactor ( vec3 normal ) { \n"],[1,"HAS_DERIVATIVES",344],[0," vec3 dxy = max ( abs ( dFdx ( normal ) ) , abs ( dFdy ( normal ) ) ) ;\nreturn max ( max ( dxy.x , dxy.y ) , dxy.z ) ; \n"],[5,346],[0," return 0.0 ; \n"],[6],[0," }\nfloat F_Schlick ( float f0, float f90, float dotLH ) { return f0 + ( f90 - f0 ) * ( pow ( 1.0 - dotLH , 5.0 ) ) ; }\nvec3 F_Schlick ( vec3 f0, float f90, float dotLH ) { float fresnel = exp2 ( ( - 5.55473 * dotLH - 6.98316 ) * dotLH ) ;\nreturn ( f90 - f0 ) * fresnel + f0 ; }\nfloat G_GGX_SmithCorrelated ( float alpha, float dotNL, float dotNV ) { float a2 = pow2(alpha) ;\nfloat gv = dotNL * sqrt ( a2 + ( 1.0 - a2 ) * pow2(dotNV) ) ;\nfloat gl = dotNV * sqrt ( a2 + ( 1.0 - a2 ) * pow2(dotNL) ) ;\nreturn 0.5 / max ( gv + gl , EPSILON ) ; }\n\n"],[1,"MATERIAL_ENABLE_ANISOTROPY",350],[0,"\nfloat G_GGX_SmithCorrelated_Anisotropic ( float at, float ab, float ToV, float BoV, float ToL, float BoL, float NoV, float NoL ) { float lambdaV = NoL * length ( vec3 ( at * ToV , ab * BoV , NoV ) ) ;\nfloat lambdaL = NoV * length ( vec3 ( at * ToL , ab * BoL , NoL ) ) ;\nreturn 0.5 / max ( lambdaV + lambdaL , EPSILON ) ; }\n\n"],[6],[0,"\nfloat D_GGX ( float alpha, float dotNH ) { float a2 = pow2(alpha) ;\nfloat denom = pow2(dotNH) * ( a2 - 1.0 ) + 1.0 ;\nreturn RECIPROCAL_PI * a2 / pow2(denom) ; }\n\n"],[1,"MATERIAL_ENABLE_ANISOTROPY",354],[0,"\nfloat D_GGX_Anisotropic ( float at, float ab, float ToH, float BoH, float NoH ) { float a2 = at * ab ;\nhighp vec3 d = vec3 ( ab * ToH , at * BoH , a2 * NoH ) ;\nhighp float d2 = dot ( d , d ) ;\nfloat b2 = a2 / d2 ;\nreturn a2 * b2 * b2 * RECIPROCAL_PI ; }\n\n"],[6],[0,"\nfloat DG_GGX ( float alpha, float dotNV, float dotNL, float dotNH ) { float D = D_GGX(alpha, dotNH) ;\nfloat G = G_GGX_SmithCorrelated(alpha, dotNL, dotNV) ;\nreturn G * D ; }\n\n"],[1,"MATERIAL_ENABLE_ANISOTROPY",358],[0,"\nfloat DG_GGX_anisotropic ( vec3 h, vec3 l, SurfaceData surfaceData, float alpha, float dotNV, float dotNL, float dotNH ) { vec3 t = surfaceData.anisotropicT ;\nvec3 b = surfaceData.anisotropicB ;\nvec3 v = surfaceData.viewDir ;\nfloat dotTV = dot ( t , v ) ;\nfloat dotBV = dot ( b , v ) ;\nfloat dotTL = dot ( t , l ) ;\nfloat dotBL = dot ( b , l ) ;\nfloat dotTH = dot ( t , h ) ;\nfloat dotBH = dot ( b , h ) ;\nfloat at = max ( alpha * ( 1.0 + surfaceData.anisotropy ) , MIN_ROUGHNESS ) ;\nfloat ab = max ( alpha * ( 1.0 - surfaceData.anisotropy ) , MIN_ROUGHNESS ) ;\nfloat D = D_GGX_Anisotropic(at, ab, dotTH, dotBH, dotNH) ;\nfloat G = G_GGX_SmithCorrelated_Anisotropic(at, ab, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL) ;\nreturn G * D ; }\n\n"],[6],[0,"\nvec3 BRDF_Specular_GGX ( vec3 incidentDirection, SurfaceData surfaceData, BSDFData bsdfData, vec3 normal, vec3 specularColor, float roughness ) { float alpha = pow2(roughness) ;\nvec3 halfDir = normalize ( incidentDirection + surfaceData.viewDir ) ;\nfloat dotNL = saturate(dot ( normal , incidentDirection )) ;\nfloat dotNV = saturate(dot ( normal , surfaceData.viewDir )) ;\nfloat dotNH = saturate(dot ( normal , halfDir )) ;\nfloat dotLH = saturate(dot ( incidentDirection , halfDir )) ;\nvec3 F = F_Schlick(specularColor, bsdfData.specularF90, dotLH) ;\n\n"],[1,"MATERIAL_ENABLE_IRIDESCENCE",362],[0," F = mix ( F , bsdfData.iridescenceSpecularColor , surfaceData.iridescenceFactor ) ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_ANISOTROPY",366],[0," float GD = DG_GGX_anisotropic(halfDir, incidentDirection, surfaceData, alpha, dotNV, dotNL, dotNH) ; \n"],[5,368],[0," float GD = DG_GGX(alpha, dotNV, dotNL, dotNH) ; \n"],[6],[0,"\nreturn F * GD ; }\nvec3 BRDF_Diffuse_Lambert ( vec3 diffuseColor ) { return RECIPROCAL_PI * diffuseColor ; }\n\n"],[1,"MATERIAL_ENABLE_IRIDESCENCE",372],[0,"\nvec3 iorToFresnel0 ( vec3 transmittedIOR, float incidentIOR ) { return pow ( ( transmittedIOR - incidentIOR ) / ( transmittedIOR + incidentIOR ) , vec3 ( 2.0 ) ) ; }\nfloat iorToFresnel0 ( float transmittedIOR, float incidentIOR ) { return pow ( ( transmittedIOR - incidentIOR ) / ( transmittedIOR + incidentIOR ) , 2.0 ) ; }\nvec3 fresnelToIOR ( vec3 f0 ) { vec3 sqrtF0 = sqrt ( f0 ) ;\nreturn ( vec3 ( 1.0 ) + sqrtF0 ) / ( vec3 ( 1.0 ) - sqrtF0 ) ; }\nvec3 evalSensitivity ( float opd, vec3 shift ) { float phase = 2.0 * PI * opd * 1.0e-9 ;\nconst vec3 val = vec3 ( 5.4856e-13 , 4.4201e-13 , 5.2481e-13 ) ;\nconst vec3 pos = vec3 ( 1.6810e+06 , 1.7953e+06 , 2.2084e+06 ) ;\nconst vec3 var = vec3 ( 4.3278e+09 , 9.3046e+09 , 6.6121e+09 ) ;\nvec3 xyz = val * sqrt ( 2.0 * PI * var ) * cos ( pos * phase + shift ) * exp ( - var * pow2(phase) ) ;\nxyz.x += 9.7470e-14 * sqrt ( 2.0 * PI * 4.5282e+09 ) * cos ( 2.2399e+06 * phase + shift[0] ) * exp ( - 4.5282e+09 * pow2(phase) ) ;\nxyz /= 1.0685e-7 ;\nconst mat3 XYZ_TO_RGB = mat3 ( 3.2404542 , - 0.9692660 , 0.0556434 , - 1.5371385 , 1.8760108 , - 0.2040259 , - 0.4985314 , 0.0415560 , 1.0572252 ) ;\nvec3 rgb = XYZ_TO_RGB * xyz ;\nreturn rgb ; }\nvec3 evalIridescenceSpecular ( float outsideIOR, float dotNV, float thinIOR, vec3 baseF0, float baseF90, float iridescenceThickness ) { vec3 iridescence = vec3 ( 1.0 ) ;\nfloat iridescenceIOR = mix ( outsideIOR , thinIOR , smoothstep ( 0.0 , 0.03 , iridescenceThickness ) ) ;\nfloat sinTheta2Sq = pow ( outsideIOR / iridescenceIOR , 2.0 ) * ( 1.0 - pow ( dotNV , 2.0 ) ) ;\nfloat cosTheta2Sq = 1.0 - sinTheta2Sq ;\nif ( cosTheta2Sq < 0.0 ) { return iridescence ; }\nfloat cosTheta2 = sqrt ( cosTheta2Sq ) ;\nfloat f0 = iorToFresnel0(iridescenceIOR, outsideIOR) ;\nfloat reflectance = F_Schlick(f0, baseF90, dotNV) ;\nfloat t121 = 1.0 - reflectance ;\nfloat phi12 = 0.0 ;\nfloat phi21 = PI - phi12 ;\nvec3 baseIOR = fresnelToIOR(clamp ( baseF0 , 0.0 , 0.9999 )) ;\nvec3 r1 = iorToFresnel0(baseIOR, iridescenceIOR) ;\nvec3 r23 = F_Schlick(r1, baseF90, cosTheta2) ;\nvec3 phi23 = vec3 ( 0.0 ) ;\nif ( baseIOR[0] < iridescenceIOR ) { phi23[0] = PI ; }\nif ( baseIOR[1] < iridescenceIOR ) { phi23[1] = PI ; }\nif ( baseIOR[2] < iridescenceIOR ) { phi23[2] = PI ; }\nfloat opd = 2.0 * iridescenceIOR * iridescenceThickness * cosTheta2 ;\nvec3 phi = vec3 ( phi21 ) + phi23 ;\nvec3 r123 = clamp ( reflectance * r23 , 1e-5 , 0.9999 ) ;\nvec3 sr123 = sqrt ( r123 ) ;\nvec3 rs = pow2(t121) * r23 / ( vec3 ( 1.0 ) - r123 ) ;\nvec3 c0 = reflectance + rs ;\niridescence = c0 ;\nvec3 cm = rs - t121 ;\nfor ( int m = 1 ; m <= 2 ; ++ m ) { cm *= sr123 ;\nvec3 sm = 2.0 * evalSensitivity(float ( m ) * opd, float ( m ) * phi) ;\niridescence += cm * sm ; }\nreturn iridescence = max ( iridescence , vec3 ( 0.0 ) ) ; }\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_SHEEN",382],[0,"\nfloat D_Charlie ( float roughness, float dotNH ) { float invAlpha = 1.0 / roughness ;\nfloat cos2h = dotNH * dotNH ;\nfloat sin2h = max ( 1.0 - cos2h , 0.0078125 ) ;\nreturn ( 2.0 + invAlpha ) * pow ( sin2h , invAlpha * 0.5 ) / ( 2.0 * PI ) ; }\nfloat V_Neubelt ( float NoV, float NoL ) { return saturate(1.0 / ( 4.0 * ( NoL + NoV - NoL * NoV ) )) ; }\nvec3 sheenBRDF ( vec3 incidentDirection, SurfaceData surfaceData, vec3 sheenColor, float sheenRoughness ) { vec3 halfDir = normalize ( incidentDirection + surfaceData.viewDir ) ;\nfloat dotNL = saturate(dot ( surfaceData.normal , incidentDirection )) ;\nfloat dotNH = saturate(dot ( surfaceData.normal , halfDir )) ;\nfloat D = D_Charlie(sheenRoughness, dotNH) ;\nfloat V = V_Neubelt(surfaceData.dotNV, dotNL) ;\nvec3 F = sheenColor ;\nreturn D * V * F ; }\nfloat prefilteredSheenDFG ( float dotNV, float sheenRoughness ) { \n"],[1,"HAS_TEX_LOD",378],[0," return texture2DLodEXT ( scene_PrefilteredDFG , vec2 ( dotNV , sheenRoughness ) , 0.0 ).b ; \n"],[5,380],[0," return texture2D ( scene_PrefilteredDFG , vec2 ( dotNV , sheenRoughness ) , 0.0 ).b ; \n"],[6],[0," }\n\n"],[6],[0,"\nvec2 envDFGApprox ( float roughness, float dotNV ) { const vec4 c0 = vec4 ( - 1 , - 0.0275 , - 0.572 , 0.022 ) ;\nconst vec4 c1 = vec4 ( 1 , 0.0425 , 1.04 , - 0.04 ) ;\nvec4 r = roughness * c0 + c1 ;\nfloat a004 = min ( r.x * r.x , exp2 ( - 9.28 * dotNV ) ) * r.x + r.y ;\nreturn vec2 ( - 1.04 , 1.04 ) * a004 + r.zw ; }\nvec3 envBRDFApprox ( vec3 f0, float f90, float roughness, float dotNV ) { vec2 AB = envDFGApprox(roughness, dotNV) ;\nreturn f0 * AB.x + f90 * AB.y ; }\n\n"],[1,"MATERIAL_ENABLE_TRANSMISSION",397],[0,"\nuniform sampler2D camera_OpaqueTexture;\nvec3 evaluateTransmission ( SurfaceData surfaceData, BSDFData bsdfData ) { RefractionModelResult ray ;\n\n"],[3,"REFRACTION_MODE","==",0,388],[0," refractionModelSphere(- surfaceData.viewDir, surfaceData.position, surfaceData.normal, surfaceData.IOR, surfaceData.thickness, ray) ; \n"],[5,391],[3,"REFRACTION_MODE","==",1,391],[0," refractionModelPlanar(- surfaceData.viewDir, surfaceData.position, surfaceData.normal, surfaceData.IOR, surfaceData.thickness, ray) ; \n"],[6],[0,"\nvec3 refractedRayExit = ray.positionExit ;\nvec4 samplingPositionNDC = camera_ProjMat * camera_ViewMat * vec4 ( refractedRayExit , 1.0 ) ;\nvec2 refractionCoords = ( samplingPositionNDC.xy / samplingPositionNDC.w ) * 0.5 + 0.5 ;\nvec3 refractionTransmitted = texture2DSRGB(camera_OpaqueTexture, refractionCoords).rgb ;\nrefractionTransmitted *= bsdfData.diffuseColor ;\nrefractionTransmitted *= ( 1.0 - max ( max ( bsdfData.envSpecularDFG.r , bsdfData.envSpecularDFG.g ) , bsdfData.envSpecularDFG.b ) ) ;\n\n"],[1,"MATERIAL_HAS_THICKNESS",395],[0," vec3 transmittance = min ( vec3 ( 1.0 ) , exp ( - surfaceData.absorptionCoefficient * ray.transmissionLength ) ) ;\nrefractionTransmitted *= transmittance ; \n"],[6],[0,"\nreturn refractionTransmitted ; }\n\n"],[6],[0,"\n\n"],[1,"SCENE_ENABLE_AMBIENT_OCCLUSION",407],[0,"\nuniform sampler2D camera_AOTexture;\nfloat evaluateAmbientOcclusion ( vec2 uv ) { \n"],[1,"MATERIAL_IS_TRANSPARENT",403],[0," return 1.0 ; \n"],[5,405],[0," return texture2D ( camera_AOTexture , uv ).r ; \n"],[6],[0," }\n\n"],[6],[0,"\nvoid initBSDFData ( SurfaceData surfaceData, out BSDFData bsdfData ) { vec3 albedoColor = surfaceData.albedoColor ;\nfloat metallic = surfaceData.metallic ;\nfloat roughness = surfaceData.roughness ;\nvec3 dielectricBaseF0 = vec3 ( pow2(( surfaceData.IOR - 1.0 ) / ( surfaceData.IOR + 1.0 )) ) ;\nvec3 dielectricF0 = min ( dielectricBaseF0 * surfaceData.specularColor , vec3 ( 1.0 ) ) * surfaceData.specularIntensity ;\nfloat dielectricF90 = surfaceData.specularIntensity ;\nbsdfData.specularF0 = mix ( dielectricF0 , albedoColor , metallic ) ;\nbsdfData.specularF90 = mix ( dielectricF90 , 1.0 , metallic ) ;\nbsdfData.diffuseColor = albedoColor * ( 1.0 - metallic ) * ( 1.0 - max ( max ( dielectricF0.r , dielectricF0.g ) , dielectricF0.b ) ) ;\nbsdfData.roughness = max ( MIN_PERCEPTUAL_ROUGHNESS , min ( roughness + getAARoughnessFactor(surfaceData.normal) , 1.0 ) ) ;\n\n"],[1,"MATERIAL_ENABLE_IRIDESCENCE",411],[0," float topIOR = 1.0 ;\nbsdfData.iridescenceSpecularColor = evalIridescenceSpecular(topIOR, surfaceData.dotNV, surfaceData.iridescenceIOR, bsdfData.specularF0, bsdfData.specularF90, surfaceData.iridescenceThickness) ; \n"],[6],[0,"\nbsdfData.resolvedSpecularF0 = bsdfData.specularF0 ;\n\n"],[1,"MATERIAL_ENABLE_IRIDESCENCE",415],[0," bsdfData.resolvedSpecularF0 = mix ( bsdfData.resolvedSpecularF0 , bsdfData.iridescenceSpecularColor , surfaceData.iridescenceFactor ) ; \n"],[6],[0,"\nvec2 dfg = envDFGApprox(bsdfData.roughness, surfaceData.dotNV) ;\nbsdfData.envSpecularDFG = bsdfData.resolvedSpecularF0 * dfg.x + bsdfData.specularF90 * dfg.y ;\nbsdfData.energyCompensation = 1.0 + bsdfData.resolvedSpecularF0 * ( 1.0 / max ( dfg.x + dfg.y , EPSILON ) - 1.0 ) ;\nbsdfData.diffuseAO = surfaceData.ambientOcclusion ;\n\n"],[1,"SCENE_ENABLE_AMBIENT_OCCLUSION",419],[0," float ambientAO = evaluateAmbientOcclusion(( surfaceData.positionCS.xy / surfaceData.positionCS.w ) * 0.5 + 0.5) ;\nbsdfData.diffuseAO = min ( bsdfData.diffuseAO , ambientAO ) ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_CLEAR_COAT",423],[0," bsdfData.clearCoatRoughness = max ( MIN_PERCEPTUAL_ROUGHNESS , min ( surfaceData.clearCoatRoughness + getAARoughnessFactor(surfaceData.clearCoatNormal) , 1.0 ) ) ;\nbsdfData.clearCoatSpecularColor = vec3 ( 0.04 ) ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_SHEEN",427],[0," bsdfData.sheenRoughness = max ( MIN_PERCEPTUAL_ROUGHNESS , min ( surfaceData.sheenRoughness + getAARoughnessFactor(surfaceData.normal) , 1.0 ) ) ;\nbsdfData.approxIBLSheenDG = prefilteredSheenDFG(surfaceData.dotNV, bsdfData.sheenRoughness) ;\nbsdfData.sheenScaling = 1.0 - bsdfData.approxIBLSheenDG * max ( max ( surfaceData.sheenColor.r , surfaceData.sheenColor.g ) , surfaceData.sheenColor.b ) ; \n"],[6],[0," }\n\n"],[6],[0,"\n\n"],[2,"LIGHT_INCLUDED",477],[0,"\n\n"],[7,"LIGHT_INCLUDED"],[0,"\nuniform ivec4 renderer_Layer;\n\n"],[2,"GRAPHICS_API_WEBGL2",437],[0,"\nbool isBitSet ( float value, float mask, float bitIndex ) { return mod ( floor ( value / pow ( 2.0 , bitIndex ) ) , 2.0 ) == 1.0 && mod ( floor ( mask / pow ( 2.0 , bitIndex ) ) , 2.0 ) == 1.0 ; }\n\n"],[6],[0,"\nbool isRendererCulledByLight ( ivec2 rendererLayer, ivec2 lightCullingMask ) { \n"],[1,"GRAPHICS_API_WEBGL2",441],[0," return ! ( ( rendererLayer.x & lightCullingMask.x ) != 0 || ( rendererLayer.y & lightCullingMask.y ) != 0 ) ; \n"],[5,443],[0," for ( int i = 0 ; i < 16 ; i ++ ) { if ( isBitSet(float ( rendererLayer.x ), float ( lightCullingMask.x ), float ( i )) || isBitSet(float ( rendererLayer.y ), float ( lightCullingMask.y ), float ( i )) ) { return false ; } }\nreturn true ; \n"],[6],[0," }\n\n"],[1,"SCENE_DIRECT_LIGHT_COUNT",451],[0,"\nstruct DirectLight { vec3 color ; vec3 direction ; } ;\nuniform ivec2 scene_DirectLightCullingMask [ SCENE_DIRECT_LIGHT_COUNT ];\nuniform vec3 scene_DirectLightColor [ SCENE_DIRECT_LIGHT_COUNT ];\nuniform vec3 scene_DirectLightDirection [ SCENE_DIRECT_LIGHT_COUNT ];\n\n"],[1,"GRAPHICS_API_WEBGL2",449],[0,"\nDirectLight getDirectLight ( int index ) { DirectLight light ;\nlight.color = scene_DirectLightColor[index] ;\nlight.direction = scene_DirectLightDirection[index] ;\nreturn light ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_POINT_LIGHT_COUNT",459],[0,"\nstruct PointLight { vec3 color ; vec3 position ; float distance ; } ;\nuniform ivec2 scene_PointLightCullingMask [ SCENE_POINT_LIGHT_COUNT ];\nuniform vec3 scene_PointLightColor [ SCENE_POINT_LIGHT_COUNT ];\nuniform vec3 scene_PointLightPosition [ SCENE_POINT_LIGHT_COUNT ];\nuniform float scene_PointLightDistance [ SCENE_POINT_LIGHT_COUNT ];\n\n"],[1,"GRAPHICS_API_WEBGL2",457],[0,"\nPointLight getPointLight ( int index ) { PointLight light ;\nlight.color = scene_PointLightColor[index] ;\nlight.position = scene_PointLightPosition[index] ;\nlight.distance = scene_PointLightDistance[index] ;\nreturn light ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"SCENE_SPOT_LIGHT_COUNT",467],[0,"\nstruct SpotLight { vec3 color ; vec3 position ; vec3 direction ; float distance ; float angleCos ; float penumbraCos ; } ;\nuniform ivec2 scene_SpotLightCullingMask [ SCENE_SPOT_LIGHT_COUNT ];\nuniform vec3 scene_SpotLightColor [ SCENE_SPOT_LIGHT_COUNT ];\nuniform vec3 scene_SpotLightPosition [ SCENE_SPOT_LIGHT_COUNT ];\nuniform vec3 scene_SpotLightDirection [ SCENE_SPOT_LIGHT_COUNT ];\nuniform float scene_SpotLightDistance [ SCENE_SPOT_LIGHT_COUNT ];\nuniform float scene_SpotLightAngleCos [ SCENE_SPOT_LIGHT_COUNT ];\nuniform float scene_SpotLightPenumbraCos [ SCENE_SPOT_LIGHT_COUNT ];\n\n"],[1,"GRAPHICS_API_WEBGL2",465],[0,"\nSpotLight getSpotLight ( int index ) { SpotLight light ;\nlight.color = scene_SpotLightColor[index] ;\nlight.position = scene_SpotLightPosition[index] ;\nlight.direction = scene_SpotLightDirection[index] ;\nlight.distance = scene_SpotLightDistance[index] ;\nlight.angleCos = scene_SpotLightAngleCos[index] ;\nlight.penumbraCos = scene_SpotLightPenumbraCos[index] ;\nreturn light ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\nstruct EnvMapLight { vec3 diffuse ; float mipMapLevel ; float diffuseIntensity ; float specularIntensity ; } ;\nuniform EnvMapLight scene_EnvMapLight;\n\n"],[1,"SCENE_USE_SH",471],[0,"\nuniform vec3 scene_EnvSH [ 9 ];\n\n"],[6],[0,"\n\n"],[1,"SCENE_USE_SPECULAR_ENV",475],[0,"\nuniform samplerCube scene_EnvSpecularSampler;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"REFLECTION_LOBE_INCLUDED",491],[0,"\n\n"],[7,"REFLECTION_LOBE_INCLUDED"],[0,"\nvoid diffuseLobe ( SurfaceData surfaceData, BSDFData bsdfData, vec3 attenuationIrradiance, inout vec3 diffuseColor ) { diffuseColor += attenuationIrradiance * BRDF_Diffuse_Lambert(bsdfData.diffuseColor) ; }\nvoid specularLobe ( SurfaceData surfaceData, BSDFData bsdfData, vec3 incidentDirection, vec3 attenuationIrradiance, inout vec3 specularColor ) { specularColor += attenuationIrradiance * BRDF_Specular_GGX(incidentDirection, surfaceData, bsdfData, surfaceData.normal, bsdfData.specularF0, bsdfData.roughness) * bsdfData.energyCompensation ; }\nvoid sheenLobe ( SurfaceData surfaceData, BSDFData bsdfData, vec3 incidentDirection, vec3 attenuationIrradiance, inout vec3 diffuseColor, inout vec3 specularColor ) { \n"],[1,"MATERIAL_ENABLE_SHEEN",485],[0," diffuseColor *= bsdfData.sheenScaling ;\nspecularColor *= bsdfData.sheenScaling ;\nspecularColor += attenuationIrradiance * sheenBRDF(incidentDirection, surfaceData, surfaceData.sheenColor, bsdfData.sheenRoughness) ; \n"],[6],[0," }\nfloat clearCoatLobe ( SurfaceData surfaceData, BSDFData bsdfData, vec3 incidentDirection, vec3 color, inout vec3 specularColor ) { float attenuation = 1.0 ;\n\n"],[1,"MATERIAL_ENABLE_CLEAR_COAT",489],[0," float clearCoatDotNL = saturate(dot ( surfaceData.clearCoatNormal , incidentDirection )) ;\nvec3 clearCoatIrradiance = clearCoatDotNL * color ;\nspecularColor += surfaceData.clearCoat * clearCoatIrradiance * BRDF_Specular_GGX(incidentDirection, surfaceData, bsdfData, surfaceData.clearCoatNormal, bsdfData.clearCoatSpecularColor, bsdfData.clearCoatRoughness) ;\nattenuation -= surfaceData.clearCoat * F_Schlick(0.04, 1.0, surfaceData.clearCoatDotNV) ; \n"],[6],[0,"\nreturn attenuation ; }\n\n"],[6],[0,"\nvoid surfaceShading ( SurfaceData surfaceData, BSDFData bsdfData, vec3 incidentDirection, vec3 lightColor, inout vec3 totalDiffuseColor, inout vec3 totalSpecularColor ) { vec3 diffuseColor = vec3 ( 0 ) ;\nvec3 specularColor = vec3 ( 0 ) ;\nfloat dotNL = saturate(dot ( surfaceData.normal , incidentDirection )) ;\nvec3 irradiance = dotNL * lightColor * PI ;\nfloat attenuation = FUNCTION_CLEAR_COAT_LOBE(surfaceData, bsdfData, incidentDirection, lightColor, specularColor) ;\nvec3 attenuationIrradiance = attenuation * irradiance ;\nFUNCTION_DIFFUSE_LOBE(surfaceData, bsdfData, attenuationIrradiance, diffuseColor) ;\nFUNCTION_SPECULAR_LOBE(surfaceData, bsdfData, incidentDirection, attenuationIrradiance, specularColor) ;\nFUNCTION_SHEEN_LOBE(surfaceData, bsdfData, incidentDirection, attenuationIrradiance, diffuseColor, specularColor) ;\ntotalDiffuseColor += diffuseColor ;\ntotalSpecularColor += specularColor ; }\n\n"],[1,"SCENE_DIRECT_LIGHT_COUNT",495],[0,"\nvoid addDirectionalDirectLightRadiance ( SurfaceData surfaceData, BSDFData bsdfData, DirectLight directionalLight, inout vec3 totalDiffuseColor, inout vec3 totalSpecularColor ) { vec3 lightColor = directionalLight.color ;\nvec3 direction = - directionalLight.direction ;\nFUNCTION_SURFACE_SHADING(surfaceData, bsdfData, direction, lightColor, totalDiffuseColor, totalSpecularColor) ; }\n\n"],[6],[0,"\n\n"],[1,"SCENE_POINT_LIGHT_COUNT",499],[0,"\nvoid addPointDirectLightRadiance ( SurfaceData surfaceData, BSDFData bsdfData, PointLight pointLight, inout vec3 totalDiffuseColor, inout vec3 totalSpecularColor ) { vec3 lVector = pointLight.position - surfaceData.position ;\nvec3 direction = normalize ( lVector ) ;\nfloat lightDistance = length ( lVector ) ;\nvec3 lightColor = pointLight.color ;\nlightColor *= clamp ( 1.0 - pow ( lightDistance / pointLight.distance , 4.0 ) , 0.0 , 1.0 ) ;\nFUNCTION_SURFACE_SHADING(surfaceData, bsdfData, direction, lightColor, totalDiffuseColor, totalSpecularColor) ; }\n\n"],[6],[0,"\n\n"],[1,"SCENE_SPOT_LIGHT_COUNT",503],[0,"\nvoid addSpotDirectLightRadiance ( SurfaceData surfaceData, BSDFData bsdfData, SpotLight spotLight, inout vec3 totalDiffuseColor, inout vec3 totalSpecularColor ) { vec3 lVector = spotLight.position - surfaceData.position ;\nvec3 direction = normalize ( lVector ) ;\nfloat lightDistance = length ( lVector ) ;\nfloat angleCos = dot ( direction , - spotLight.direction ) ;\nfloat spotEffect = smoothstep ( spotLight.penumbraCos , spotLight.angleCos , angleCos ) ;\nfloat decayEffect = clamp ( 1.0 - pow ( lightDistance / spotLight.distance , 4.0 ) , 0.0 , 1.0 ) ;\nvec3 lightColor = spotLight.color ;\nlightColor *= spotEffect * decayEffect ;\nFUNCTION_SURFACE_SHADING(surfaceData, bsdfData, direction, lightColor, totalDiffuseColor, totalSpecularColor) ; }\n\n"],[6],[0,"\nvoid evaluateDirectRadiance ( SurfaceData surfaceData, BSDFData bsdfData, float shadowAttenuation, inout vec3 totalDiffuseColor, inout vec3 totalSpecularColor ) { \n"],[1,"SCENE_DIRECT_LIGHT_COUNT",517],[0," for ( int i = 0 ; i < SCENE_DIRECT_LIGHT_COUNT ; i ++ ) { if ( ! isRendererCulledByLight(renderer_Layer.xy, scene_DirectLightCullingMask[i]) ) { \n"],[1,"GRAPHICS_API_WEBGL2",509],[0," DirectLight directionalLight = getDirectLight(i) ; \n"],[5,511],[0," DirectLight directionalLight ;\ndirectionalLight.color = scene_DirectLightColor[i] ;\ndirectionalLight.direction = scene_DirectLightDirection[i] ; \n"],[6],[0,"\n\n"],[1,"NEED_CALCULATE_SHADOWS",515],[0," if ( i == 0 ) { directionalLight.color *= shadowAttenuation ; } \n"],[6],[0,"\naddDirectionalDirectLightRadiance(surfaceData, bsdfData, directionalLight, totalDiffuseColor, totalSpecularColor) ; } } \n"],[6],[0,"\n\n"],[1,"SCENE_POINT_LIGHT_COUNT",527],[0," for ( int i = 0 ; i < SCENE_POINT_LIGHT_COUNT ; i ++ ) { if ( ! isRendererCulledByLight(renderer_Layer.xy, scene_PointLightCullingMask[i]) ) { \n"],[1,"GRAPHICS_API_WEBGL2",523],[0," PointLight pointLight = getPointLight(i) ; \n"],[5,525],[0," PointLight pointLight ;\npointLight.color = scene_PointLightColor[i] ;\npointLight.position = scene_PointLightPosition[i] ;\npointLight.distance = scene_PointLightDistance[i] ; \n"],[6],[0,"\naddPointDirectLightRadiance(surfaceData, bsdfData, pointLight, totalDiffuseColor, totalSpecularColor) ; } } \n"],[6],[0,"\n\n"],[1,"SCENE_SPOT_LIGHT_COUNT",537],[0," for ( int i = 0 ; i < SCENE_SPOT_LIGHT_COUNT ; i ++ ) { if ( ! isRendererCulledByLight(renderer_Layer.xy, scene_SpotLightCullingMask[i]) ) { \n"],[1,"GRAPHICS_API_WEBGL2",533],[0," SpotLight spotLight = getSpotLight(i) ; \n"],[5,535],[0," SpotLight spotLight ;\nspotLight.color = scene_SpotLightColor[i] ;\nspotLight.position = scene_SpotLightPosition[i] ;\nspotLight.direction = scene_SpotLightDirection[i] ;\nspotLight.distance = scene_SpotLightDistance[i] ;\nspotLight.angleCos = scene_SpotLightAngleCos[i] ;\nspotLight.penumbraCos = scene_SpotLightPenumbraCos[i] ; \n"],[6],[0,"\naddSpotDirectLightRadiance(surfaceData, bsdfData, spotLight, totalDiffuseColor, totalSpecularColor) ; } } \n"],[6],[0," }\n\n"],[6],[0,"\n\n"],[2,"LIGHT_INDIRECT_PBR_INCLUDED",615],[0,"\n\n"],[7,"LIGHT_INDIRECT_PBR_INCLUDED"],[0,"\n\n"],[2,"FUNCTION_DIFFUSE_IBL",549],[0,"\n\n"],[8,"FUNCTION_DIFFUSE_IBL","evaluateDiffuseIBL"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FUNCTION_SPECULAR_IBL",555],[0,"\n\n"],[8,"FUNCTION_SPECULAR_IBL","evaluateSpecularIBL"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FUNCTION_CLEAR_COAT_IBL",561],[0,"\n\n"],[8,"FUNCTION_CLEAR_COAT_IBL","evaluateClearCoatIBL"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FUNCTION_SHEEN_IBL",567],[0,"\n\n"],[8,"FUNCTION_SHEEN_IBL","evaluateSheenIBL"],[0,"\n\n"],[6],[0,"\n\n"],[2,"LIGHT_INDIRECT_FUNCTIONS_INCLUDED",599],[0,"\n\n"],[7,"LIGHT_INDIRECT_FUNCTIONS_INCLUDED"],[0,"\nvec3 getReflectedVector ( SurfaceData surfaceData, vec3 n ) { \n"],[1,"MATERIAL_ENABLE_ANISOTROPY",575],[0," vec3 r = reflect ( - surfaceData.viewDir , surfaceData.anisotropicN ) ; \n"],[5,577],[0," vec3 r = reflect ( - surfaceData.viewDir , n ) ; \n"],[6],[0,"\nreturn r ; }\nfloat getSpecularMIPLevel ( float roughness, int maxMIPLevel ) { return roughness * float ( maxMIPLevel ) ; }\nvec3 getLightProbeRadiance ( SurfaceData surfaceData, vec3 normal, float roughness ) { \n"],[2,"SCENE_USE_SPECULAR_ENV",581],[0," return vec3 ( 0 ) ; \n"],[5,593],[0," vec3 reflectVec = getReflectedVector(surfaceData, normal) ;\nfloat specularMIPLevel = getSpecularMIPLevel(roughness, int ( scene_EnvMapLight.mipMapLevel )) ;\n\n"],[1,"HAS_TEX_LOD",585],[0," vec4 envMapColor = textureCubeLodEXT ( scene_EnvSpecularSampler , reflectVec , specularMIPLevel ) ; \n"],[5,587],[0," vec4 envMapColor = textureCube ( scene_EnvSpecularSampler , reflectVec , specularMIPLevel ) ; \n"],[6],[0,"\n\n"],[1,"ENGINE_NO_SRGB",591],[0," envMapColor = sRGBToLinear(envMapColor) ; \n"],[6],[0,"\nreturn envMapColor.rgb * scene_EnvMapLight.specularIntensity ; \n"],[6],[0," }\nfloat evaluateSpecularOcclusion ( float dotNV, float diffuseAO, float roughness ) { float specularAOFactor = 1.0 ;\n\n"],[4,{"t":"and","l":{"t":"or","l":{"t":"def","m":"MATERIAL_HAS_OCCLUSION_TEXTURE"},"r":{"t":"def","m":"SCENE_ENABLE_AMBIENT_OCCLUSION"}},"r":{"t":"def","m":"SCENE_USE_SPECULAR_ENV"}},597],[0," specularAOFactor = saturate(pow ( dotNV + diffuseAO , exp2 ( - 16.0 * roughness - 1.0 ) ) - 1.0 + diffuseAO) ; \n"],[6],[0,"\nreturn specularAOFactor ; }\n\n"],[6],[0,"\nvec3 getLightProbeIrradiance ( vec3 sh [ 9 ], vec3 normal ) { vec3 result = sh[0] + sh[1] * ( normal.y ) + sh[2] * ( normal.z ) + sh[3] * ( normal.x ) + sh[4] * ( normal.y * normal.x ) + sh[5] * ( normal.y * normal.z ) + sh[6] * ( 3.0 * normal.z * normal.z - 1.0 ) + sh[7] * ( normal.z * normal.x ) + sh[8] * ( normal.x * normal.x - normal.y * normal.y ) ;\nreturn max ( result , vec3 ( 0.0 ) ) ; }\nvoid evaluateDiffuseIBL ( SurfaceData surfaceData, BSDFData bsdfData, inout vec3 diffuseColor ) { \n"],[1,"SCENE_USE_SH",603],[0," vec3 irradiance = getLightProbeIrradiance(scene_EnvSH, surfaceData.normal) ;\nirradiance *= scene_EnvMapLight.diffuseIntensity ; \n"],[5,605],[0," vec3 irradiance = scene_EnvMapLight.diffuse * scene_EnvMapLight.diffuseIntensity ;\nirradiance *= PI ; \n"],[6],[0,"\ndiffuseColor += bsdfData.diffuseAO * irradiance * BRDF_Diffuse_Lambert(bsdfData.diffuseColor) ; }\nfloat evaluateClearCoatIBL ( SurfaceData surfaceData, BSDFData bsdfData, inout vec3 specularColor ) { float radianceAttenuation = 1.0 ;\n\n"],[1,"MATERIAL_ENABLE_CLEAR_COAT",609],[0," vec3 clearCoatRadiance = getLightProbeRadiance(surfaceData, surfaceData.clearCoatNormal, bsdfData.clearCoatRoughness) ;\nfloat specularAO = evaluateSpecularOcclusion(surfaceData.dotNV, bsdfData.diffuseAO, bsdfData.clearCoatRoughness) ;\nspecularColor += specularAO * clearCoatRadiance * surfaceData.clearCoat * envBRDFApprox(bsdfData.clearCoatSpecularColor, 1.0, bsdfData.clearCoatRoughness, surfaceData.clearCoatDotNV) ;\nradianceAttenuation -= surfaceData.clearCoat * F_Schlick(0.04, 1.0, surfaceData.clearCoatDotNV) ; \n"],[6],[0,"\nreturn radianceAttenuation ; }\nvoid evaluateSpecularIBL ( SurfaceData surfaceData, BSDFData bsdfData, float radianceAttenuation, inout vec3 outSpecularColor ) { vec3 radiance = getLightProbeRadiance(surfaceData, surfaceData.normal, bsdfData.roughness) ;\nfloat specularAO = evaluateSpecularOcclusion(surfaceData.dotNV, bsdfData.diffuseAO, bsdfData.roughness) ;\noutSpecularColor += specularAO * radianceAttenuation * radiance * envBRDFApprox(bsdfData.resolvedSpecularF0, bsdfData.specularF90, bsdfData.roughness, surfaceData.dotNV) * bsdfData.energyCompensation ; }\nvoid evaluateSheenIBL ( SurfaceData surfaceData, BSDFData bsdfData, float radianceAttenuation, inout vec3 diffuseColor, inout vec3 specularColor ) { \n"],[1,"MATERIAL_ENABLE_SHEEN",613],[0," diffuseColor *= bsdfData.sheenScaling ;\nspecularColor *= bsdfData.sheenScaling ;\nfloat specularAO = evaluateSpecularOcclusion(surfaceData.dotNV, bsdfData.diffuseAO, bsdfData.sheenRoughness) ;\nvec3 reflectance = specularAO * radianceAttenuation * bsdfData.approxIBLSheenDG * surfaceData.sheenColor ;\nspecularColor += reflectance ; \n"],[6],[0," }\nvoid evaluateIBL ( SurfaceData surfaceData, BSDFData bsdfData, inout vec3 totalDiffuseColor, inout vec3 totalSpecularColor ) { vec3 diffuseColor = vec3 ( 0 ) ;\nvec3 specularColor = vec3 ( 0 ) ;\nFUNCTION_DIFFUSE_IBL(surfaceData, bsdfData, diffuseColor) ;\nfloat radianceAttenuation = FUNCTION_CLEAR_COAT_IBL(surfaceData, bsdfData, specularColor) ;\nFUNCTION_SPECULAR_IBL(surfaceData, bsdfData, radianceAttenuation, specularColor) ;\nFUNCTION_SHEEN_IBL(surfaceData, bsdfData, radianceAttenuation, diffuseColor, specularColor) ;\ntotalDiffuseColor += diffuseColor ;\ntotalSpecularColor += specularColor ; }\n\n"],[6],[0,"\n\n"],[2,"VERTEX_INCLUDE",621],[0,"\n\n"],[7,"VERTEX_INCLUDE"],[0,"\n\n"],[6],[0,"\n\n"],[2,"MATERIAL_INPUT_PBR_INCLUDED",872],[0,"\n\n"],[7,"MATERIAL_INPUT_PBR_INCLUDED"],[0,"\n\n"],[2,"NORMAL_INCLUDED",637],[0,"\n\n"],[7,"NORMAL_INCLUDED"],[0,"\nvec3 getNormalByNormalTexture ( mat3 tbn, sampler2D normalTexture, float normalIntensity, vec2 uv, bool isFrontFacing ) { vec3 normal = ( texture2D ( normalTexture , uv ) ).rgb ;\nnormal = normalize ( tbn * ( ( 2.0 * normal - 1.0 ) * vec3 ( normalIntensity , normalIntensity , 1.0 ) ) ) ;\nnormal *= float ( isFrontFacing ) * 2.0 - 1.0 ;\nreturn normal ; }\nmat3 getTBNByDerivatives ( vec2 uv, vec3 normal, vec3 position, bool isFrontFacing ) { \n"],[1,"HAS_DERIVATIVES",633],[0," uv = isFrontFacing ? uv : - uv ;\nvec3 dp1 = dFdx ( position ) ;\nvec3 dp2 = dFdy ( position ) ;\nvec2 duv1 = dFdx ( uv ) ;\nvec2 duv2 = dFdy ( uv ) ;\nvec3 dp2perp = cross ( dp2 , normal ) ;\nvec3 dp1perp = cross ( normal , dp1 ) ;\nvec3 tangent = dp2perp * duv1.x + dp1perp * duv2.x ;\nvec3 bitangent = dp2perp * duv1.y + dp1perp * duv2.y ;\nfloat denom = max ( dot ( tangent , tangent ) , dot ( bitangent , bitangent ) ) ;\nfloat invmax = ( denom == 0.0 ) ? 0.0 : camera_ProjectionParams.x / sqrt ( denom ) ;\nreturn mat3 ( tangent * invmax , bitangent * invmax , normal ) ; \n"],[5,635],[0," return mat3 ( vec3 ( 0.0 ) , vec3 ( 0.0 ) , normal ) ; \n"],[6],[0," }\n\n"],[6],[0,"\nuniform float material_AlphaCutoff;\nuniform vec4 material_BaseColor;\nuniform float material_Metal;\nuniform float material_Roughness;\nuniform float material_IOR;\nuniform vec3 material_EmissiveColor;\nuniform float material_NormalIntensity;\nuniform float material_OcclusionIntensity;\nuniform float material_OcclusionTextureCoord;\nuniform float material_SpecularIntensity;\nuniform vec3 material_SpecularColor;\n\n"],[1,"MATERIAL_HAS_SPECULAR_TEXTURE",641],[0,"\nuniform sampler2D material_SpecularIntensityTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_SPECULAR_COLOR_TEXTURE",645],[0,"\nuniform sampler2D material_SpecularColorTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_CLEAR_COAT",661],[0,"\nuniform float material_ClearCoat;\nuniform float material_ClearCoatRoughness;\n\n"],[1,"MATERIAL_HAS_CLEAR_COAT_TEXTURE",651],[0,"\nuniform sampler2D material_ClearCoatTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_CLEAR_COAT_ROUGHNESS_TEXTURE",655],[0,"\nuniform sampler2D material_ClearCoatRoughnessTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE",659],[0,"\nuniform sampler2D material_ClearCoatNormalTexture;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_ANISOTROPY",669],[0,"\nuniform vec3 material_AnisotropyInfo;\n\n"],[1,"MATERIAL_HAS_ANISOTROPY_TEXTURE",667],[0,"\nuniform sampler2D material_AnisotropyTexture;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_IRIDESCENCE",681],[0,"\nuniform vec4 material_IridescenceInfo;\n\n"],[1,"MATERIAL_HAS_IRIDESCENCE_THICKNESS_TEXTURE",675],[0,"\nuniform sampler2D material_IridescenceThicknessTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_IRIDESCENCE_TEXTURE",679],[0,"\nuniform sampler2D material_IridescenceTexture;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_SHEEN",693],[0,"\nuniform float material_SheenRoughness;\nuniform vec3 material_SheenColor;\n\n"],[1,"MATERIAL_HAS_SHEEN_TEXTURE",687],[0,"\nuniform sampler2D material_SheenTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_SHEEN_ROUGHNESS_TEXTURE",691],[0,"\nuniform sampler2D material_SheenRoughnessTexture;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_TRANSMISSION",709],[0,"\nuniform float material_Transmission;\n\n"],[1,"MATERIAL_HAS_TRANSMISSION_TEXTURE",699],[0,"\nuniform sampler2D material_TransmissionTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_THICKNESS",707],[0,"\nuniform vec3 material_AttenuationColor;\nuniform float material_AttenuationDistance;\nuniform float material_Thickness;\n\n"],[1,"MATERIAL_HAS_THICKNESS_TEXTURE",705],[0,"\nuniform sampler2D material_ThicknessTexture;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",713],[0,"\nuniform sampler2D material_BaseTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_NORMALTEXTURE",717],[0,"\nuniform sampler2D material_NormalTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_EMISSIVETEXTURE",721],[0,"\nuniform sampler2D material_EmissiveTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_ROUGHNESS_METALLIC_TEXTURE",725],[0,"\nuniform sampler2D material_RoughnessMetallicTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_OCCLUSION_TEXTURE",729],[0,"\nuniform sampler2D material_OcclusionTexture;\n\n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_ANISOTROPY",733],[0,"\nvec3 getAnisotropicBentNormal ( SurfaceData surfaceData ) { vec3 anisotropyDirection = ( surfaceData.anisotropy >= 0.0 ) ? surfaceData.anisotropicB : surfaceData.anisotropicT ;\nvec3 anisotropicTangent = cross ( anisotropyDirection , surfaceData.viewDir ) ;\nvec3 anisotropicNormal = cross ( anisotropicTangent , anisotropyDirection ) ;\nvec3 bentNormal = normalize ( mix ( surfaceData.normal , anisotropicNormal , abs ( surfaceData.anisotropy ) * saturate(5.0 * surfaceData.roughness) ) ) ;\nreturn bentNormal ; }\n\n"],[6],[0,"\nSurfaceData getSurfaceData ( vec2 aoUV, bool isFrontFacing ) { SurfaceData surfaceData ;\nvec2 uv = uv ;\nvec4 baseColor = material_BaseColor ;\nfloat metallic = material_Metal ;\nfloat roughness = material_Roughness ;\nvec3 emissiveRadiance = material_EmissiveColor ;\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",737],[0," baseColor *= texture2DSRGB(material_BaseTexture, uv) ; \n"],[6],[0,"\n\n"],[1,"RENDERER_ENABLE_VERTEXCOLOR",741],[0," baseColor *= vertexColor ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_IS_ALPHA_CUTOFF",745],[0," if ( baseColor.a < material_AlphaCutoff ) { discard ; } \n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_ROUGHNESS_METALLIC_TEXTURE",749],[0," vec4 metalRoughMapColor = texture2D ( material_RoughnessMetallicTexture , uv ) ;\nroughness *= metalRoughMapColor.g ;\nmetallic *= metalRoughMapColor.b ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_EMISSIVETEXTURE",753],[0," emissiveRadiance *= texture2DSRGB(material_EmissiveTexture, uv).rgb ; \n"],[6],[0,"\nsurfaceData.albedoColor = baseColor.rgb ;\nsurfaceData.emissiveColor = emissiveRadiance ;\nsurfaceData.metallic = metallic ;\nsurfaceData.roughness = roughness ;\nsurfaceData.IOR = material_IOR ;\n\n"],[1,"MATERIAL_IS_TRANSPARENT",757],[0," surfaceData.opacity = baseColor.a ; \n"],[5,759],[0," surfaceData.opacity = 1.0 ; \n"],[6],[0,"\nsurfaceData.position = positionWS ;\nsurfaceData.positionCS = positionCS ;\n\n"],[1,"CAMERA_ORTHOGRAPHIC",763],[0," surfaceData.viewDir = - camera_Forward ; \n"],[5,765],[0," surfaceData.viewDir = normalize ( camera_Position - positionWS ) ; \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_NORMAL",769],[0," vec3 normal = normalize ( normalWS ) ; \n"],[5,774],[1,"HAS_DERIVATIVES",772],[0," vec3 pos_dx = dFdx ( positionWS ) ;\nvec3 pos_dy = dFdy ( positionWS ) ;\nvec3 normal = normalize ( cross ( pos_dx , pos_dy ) ) ;\nnormal *= camera_ProjectionParams.x ; \n"],[5,774],[0," vec3 normal = vec3 ( 0 , 0 , 1 ) ; \n"],[6],[0,"\nnormal *= float ( isFrontFacing ) * 2.0 - 1.0 ;\nsurfaceData.normal = normal ;\n\n"],[1,"NEED_TANGENT_SPACE",788],[0," \n"],[1,"NEED_VERTEX_TANGENT",780],[0," surfaceData.tangent = tangentWS ;\nsurfaceData.bitangent = bitangentWS ;\nmat3 tbn = mat3 ( tangentWS , bitangentWS , normalWS ) ; \n"],[5,782],[0," mat3 tbn = getTBNByDerivatives(uv, normal, positionWS, isFrontFacing) ;\nsurfaceData.tangent = tbn[0] ;\nsurfaceData.bitangent = tbn[1] ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_NORMALTEXTURE",786],[0," surfaceData.normal = getNormalByNormalTexture(tbn, material_NormalTexture, material_NormalIntensity, uv, isFrontFacing) ; \n"],[6],[0," \n"],[6],[0,"\nsurfaceData.dotNV = saturate(dot ( surfaceData.normal , surfaceData.viewDir )) ;\nsurfaceData.specularIntensity = material_SpecularIntensity ;\nsurfaceData.specularColor = material_SpecularColor ;\n\n"],[1,"MATERIAL_HAS_SPECULAR_TEXTURE",792],[0," surfaceData.specularIntensity *= texture2D ( material_SpecularIntensityTexture , uv ).a ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_SPECULAR_COLOR_TEXTURE",796],[0," surfaceData.specularColor *= texture2D ( material_SpecularColorTexture , uv ).rgb ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_CLEAR_COAT",814],[0," \n"],[1,"MATERIAL_HAS_CLEAR_COAT_NORMAL_TEXTURE",802],[0," surfaceData.clearCoatNormal = getNormalByNormalTexture(tbn, material_ClearCoatNormalTexture, material_NormalIntensity, uv, isFrontFacing) ; \n"],[5,804],[0," surfaceData.clearCoatNormal = normal ; \n"],[6],[0,"\nsurfaceData.clearCoatDotNV = saturate(dot ( surfaceData.clearCoatNormal , surfaceData.viewDir )) ;\nsurfaceData.clearCoat = material_ClearCoat ;\nsurfaceData.clearCoatRoughness = material_ClearCoatRoughness ;\n\n"],[1,"MATERIAL_HAS_CLEAR_COAT_TEXTURE",808],[0," surfaceData.clearCoat *= ( texture2D ( material_ClearCoatTexture , uv ) ).r ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_CLEAR_COAT_ROUGHNESS_TEXTURE",812],[0," surfaceData.clearCoatRoughness *= ( texture2D ( material_ClearCoatRoughnessTexture , uv ) ).g ; \n"],[6],[0,"\nsurfaceData.clearCoat = saturate(surfaceData.clearCoat) ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_ANISOTROPY",822],[0," float anisotropy = material_AnisotropyInfo.z ;\nvec3 anisotropicDirection = vec3 ( material_AnisotropyInfo.xy , 0.0 ) ;\n\n"],[1,"MATERIAL_HAS_ANISOTROPY_TEXTURE",820],[0," vec3 anisotropyTextureInfo = ( texture2D ( material_AnisotropyTexture , uv ) ).rgb ;\nanisotropy *= anisotropyTextureInfo.b ;\nanisotropicDirection.xy *= anisotropyTextureInfo.rg * 2.0 - 1.0 ; \n"],[6],[0,"\nsurfaceData.anisotropy = anisotropy ;\nsurfaceData.anisotropicT = normalize ( mat3 ( surfaceData.tangent , surfaceData.bitangent , surfaceData.normal ) * anisotropicDirection ) ;\nsurfaceData.anisotropicB = normalize ( cross ( surfaceData.normal , surfaceData.anisotropicT ) ) ;\nsurfaceData.anisotropicN = getAnisotropicBentNormal(surfaceData) ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_IRIDESCENCE",836],[0," surfaceData.iridescenceFactor = material_IridescenceInfo.x ;\nsurfaceData.iridescenceIOR = material_IridescenceInfo.y ;\n\n"],[1,"MATERIAL_HAS_IRIDESCENCE_THICKNESS_TEXTURE",828],[0," float iridescenceThicknessWeight = texture2D ( material_IridescenceThicknessTexture , uv ).g ;\nsurfaceData.iridescenceThickness = mix ( material_IridescenceInfo.z , material_IridescenceInfo.w , iridescenceThicknessWeight ) ; \n"],[5,830],[0," surfaceData.iridescenceThickness = material_IridescenceInfo.w ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_IRIDESCENCE_TEXTURE",834],[0," surfaceData.iridescenceFactor *= texture2D ( material_IridescenceTexture , uv ).r ; \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_SHEEN",848],[0," vec3 sheenColor = material_SheenColor ;\n\n"],[1,"MATERIAL_HAS_SHEEN_TEXTURE",842],[0," sheenColor *= texture2DSRGB(material_SheenTexture, uv).rgb ; \n"],[6],[0,"\nsurfaceData.sheenColor = sheenColor ;\nsurfaceData.sheenRoughness = material_SheenRoughness ;\n\n"],[1,"MATERIAL_HAS_SHEEN_ROUGHNESS_TEXTURE",846],[0," surfaceData.sheenRoughness *= texture2D ( material_SheenRoughnessTexture , uv ).a ; \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"MATERIAL_ENABLE_TRANSMISSION",864],[0," surfaceData.transmission = material_Transmission ;\n\n"],[1,"MATERIAL_HAS_TRANSMISSION_TEXTURE",854],[0," surfaceData.transmission *= texture2D ( material_TransmissionTexture , uv ).r ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_THICKNESS",862],[0," surfaceData.absorptionCoefficient = - log ( material_AttenuationColor + HALF_EPS ) / max ( HALF_EPS , material_AttenuationDistance ) ;\nsurfaceData.thickness = max ( material_Thickness , 0.0001 ) ;\n\n"],[1,"MATERIAL_HAS_THICKNESS_TEXTURE",860],[0," surfaceData.thickness *= texture2D ( material_ThicknessTexture , uv ).g ; \n"],[6],[0," \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"MATERIAL_HAS_OCCLUSION_TEXTURE",868],[0," surfaceData.ambientOcclusion = ( ( texture2D ( material_OcclusionTexture , aoUV ) ).r - 1.0 ) * material_OcclusionIntensity + 1.0 ; \n"],[5,870],[0," surfaceData.ambientOcclusion = 1.0 ; \n"],[6],[0,"\nreturn surfaceData ; }\n\n"],[6],[0,"\nvoid main() { BSDFData bsdfData ;\nvec2 aoUV = uv ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"MATERIAL_HAS_OCCLUSION_TEXTURE"},"r":{"t":"def","m":"RENDERER_HAS_UV1"}},876],[0," if ( material_OcclusionTextureCoord == 1.0 ) { aoUV = uv1 ; } \n"],[6],[0,"\nSurfaceData surfaceData = getSurfaceData(aoUV, gl_FrontFacing) ;\ninitBSDFData(surfaceData, bsdfData) ;\nvec3 totalDiffuseColor = vec3 ( 0 , 0 , 0 ) ;\nvec3 totalSpecularColor = vec3 ( 0 , 0 , 0 ) ;\nfloat shadowAttenuation = 1.0 ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"SCENE_DIRECT_LIGHT_COUNT"},"r":{"t":"def","m":"NEED_CALCULATE_SHADOWS"}},886],[0," \n"],[3,"SCENE_SHADOW_CASCADED_COUNT","==",1,882],[0," vec3 shadowCoord = shadowCoord ; \n"],[5,884],[0," vec3 shadowCoord = getShadowCoord(positionWS) ; \n"],[6],[0,"\nshadowAttenuation *= sampleShadowMap(positionWS, shadowCoord) ; \n"],[6],[0,"\nevaluateDirectRadiance(surfaceData, bsdfData, shadowAttenuation, totalDiffuseColor, totalSpecularColor) ;\nevaluateIBL(surfaceData, bsdfData, totalDiffuseColor, totalSpecularColor) ;\n\n"],[1,"MATERIAL_ENABLE_TRANSMISSION",890],[0," vec3 refractionTransmitted = evaluateTransmission(surfaceData, bsdfData) ;\ntotalDiffuseColor = mix ( totalDiffuseColor , refractionTransmitted , surfaceData.transmission ) ; \n"],[6],[0,"\nvec4 color = vec4 ( ( totalDiffuseColor + totalSpecularColor ).rgb , surfaceData.opacity ) ;\ncolor.rgb += surfaceData.emissiveColor ;\n\n"],[3,"SCENE_FOG_MODE","!=",0,894],[0," color = fog(color, positionVS) ; \n"],[6],[0,"\ngl_FragColor = color ; }\n\n"],[6]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/Pipeline/DepthOnly.shaderc b/packages/shader/compiledShaders/Pipeline/DepthOnly.shaderc deleted file mode 100644 index c6603a76b2..0000000000 --- a/packages/shader/compiledShaders/Pipeline/DepthOnly.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"Pipeline/DepthOnly","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"DepthOnly","isUsePass":false,"tags":{"pipelineStage":"DepthOnly"},"renderStates":{"constantMap":{},"variableMap":{"28":"material_DepthOnlyRenderQueue"}},"vertexShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"TRANSFORM_INCLUDED",36],[0,"\n\n"],[7,"TRANSFORM_INCLUDED"],[0,"\nuniform mat4 camera_VPMat;\nuniform mat4 renderer_ModelMat;\n\n"],[6],[0,"\n\n"],[2,"ATTRIBUTES_INCLUDED",94],[0,"\n\n"],[7,"ATTRIBUTES_INCLUDED"],[0,"\nattribute vec3 POSITION;\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",68],[0,"\n"],[2,"RENDERER_BLENDSHAPE_USE_TEXTURE",66],[0,"attribute vec3 POSITION_BS0;\nattribute vec3 POSITION_BS1;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},48],[0,"attribute vec3 NORMAL_BS0;\nattribute vec3 NORMAL_BS1;\nattribute vec3 TANGENT_BS0;\nattribute vec3 TANGENT_BS1;\n\n"],[5,64],[0,"\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},60],[0,"attribute vec3 POSITION_BS2;\nattribute vec3 POSITION_BS3;\n\n"],[1,"RENDERER_BLENDSHAPE_HAS_NORMAL",54],[0,"attribute vec3 NORMAL_BS0;\nattribute vec3 NORMAL_BS1;\nattribute vec3 NORMAL_BS2;\nattribute vec3 NORMAL_BS3;\n\n"],[6],[0,"\n"],[1,"RENDERER_BLENDSHAPE_HAS_TANGENT",58],[0,"attribute vec3 TANGENT_BS0;\nattribute vec3 TANGENT_BS1;\nattribute vec3 TANGENT_BS2;\nattribute vec3 TANGENT_BS3;\n\n"],[6],[0,"\n"],[5,62],[0,"attribute vec3 POSITION_BS2;\nattribute vec3 POSITION_BS3;\nattribute vec3 POSITION_BS4;\nattribute vec3 POSITION_BS5;\nattribute vec3 POSITION_BS6;\nattribute vec3 POSITION_BS7;\n\n"],[6],[0,"\n"],[6],[0,"\n"],[6],[0,"\n"],[6],[0,"\n"],[1,"RENDERER_HAS_UV",72],[0,"\n"],[6],[0,"\n"],[1,"RENDERER_HAS_UV1",76],[0,"\n"],[6],[0,"\n"],[1,"RENDERER_HAS_SKIN",80],[0,"attribute vec4 JOINTS_0;\nattribute vec4 WEIGHTS_0;\n\n"],[6],[0,"\n"],[1,"RENDERER_ENABLE_VERTEXCOLOR",84],[0,"\n"],[6],[0,"\n"],[1,"RENDERER_HAS_NORMAL",88],[0,"attribute vec3 NORMAL;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_TANGENT",92],[0,"attribute vec4 TANGENT;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"SKIN_INCLUDED",116],[0,"\n\n"],[7,"SKIN_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_SKIN",114],[0,"\n\n"],[1,"RENDERER_USE_JOINT_TEXTURE",104],[0,"\nuniform sampler2D renderer_JointSampler;\nuniform float renderer_JointCount;\nmat4 getJointMatrix ( sampler2D smp, float index ) { float base = index / renderer_JointCount ;\nfloat hf = 0.5 / renderer_JointCount ;\nfloat v = base + hf ;\nvec4 m0 = texture2D ( smp , vec2 ( 0.125 , v ) ) ;\nvec4 m1 = texture2D ( smp , vec2 ( 0.375 , v ) ) ;\nvec4 m2 = texture2D ( smp , vec2 ( 0.625 , v ) ) ;\nvec4 m3 = texture2D ( smp , vec2 ( 0.875 , v ) ) ;\nreturn mat4 ( m0 , m1 , m2 , m3 ) ; }\n\n"],[5,106],[0,"\nuniform mat4 renderer_JointMatrix [ RENDERER_JOINTS_NUM ];\n\n"],[6],[0,"\nmat4 getSkinMatrix ( ) { \n"],[1,"RENDERER_USE_JOINT_TEXTURE",110],[0," mat4 skinMatrix = WEIGHTS_0.x * getJointMatrix(renderer_JointSampler, JOINTS_0.x) + WEIGHTS_0.y * getJointMatrix(renderer_JointSampler, JOINTS_0.y) + WEIGHTS_0.z * getJointMatrix(renderer_JointSampler, JOINTS_0.z) + WEIGHTS_0.w * getJointMatrix(renderer_JointSampler, JOINTS_0.w) ; \n"],[5,112],[0," mat4 skinMatrix = WEIGHTS_0.x * renderer_JointMatrix[int ( JOINTS_0.x )] + WEIGHTS_0.y * renderer_JointMatrix[int ( JOINTS_0.y )] + WEIGHTS_0.z * renderer_JointMatrix[int ( JOINTS_0.z )] + WEIGHTS_0.w * renderer_JointMatrix[int ( JOINTS_0.w )] ; \n"],[6],[0,"\nreturn skinMatrix ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"BLENDSHAPE_INCLUDED",194],[0,"\n\n"],[7,"BLENDSHAPE_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",192],[0,"\n\n"],[1,"RENDERER_BLENDSHAPE_USE_TEXTURE",126],[0,"\nuniform mediump sampler2DArray renderer_BlendShapeTexture;\nuniform ivec3 renderer_BlendShapeTextureInfo;\nuniform float renderer_BlendShapeWeights [ RENDERER_BLENDSHAPE_COUNT ];\nvec3 getBlendShapeVertexElement ( int blendShapeIndex, int vertexElementIndex ) { int y = vertexElementIndex / renderer_BlendShapeTextureInfo.y ;\nint x = vertexElementIndex - y * renderer_BlendShapeTextureInfo.y ;\nivec3 uv = ivec3 ( x , y , blendShapeIndex ) ;\nreturn ( texelFetch ( renderer_BlendShapeTexture , uv , 0 ) ).xyz ; }\n\n"],[5,140],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},130],[0,"\nuniform float renderer_BlendShapeWeights [ 2 ];\n\n"],[5,138],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},134],[0,"\nuniform float renderer_BlendShapeWeights [ 4 ];\n\n"],[5,136],[0,"\nuniform float renderer_BlendShapeWeights [ 8 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nvoid calculateBlendShape ( inout vec4 position\n"],[1,"RENDERER_HAS_NORMAL",148],[0," , inout vec3 normal \n"],[1,"RENDERER_HAS_TANGENT",146],[0," , inout vec4 tangent \n"],[6],[0," \n"],[6],[0," ) { \n"],[1,"RENDERER_BLENDSHAPE_USE_TEXTURE",160],[0," int vertexOffset = gl_VertexID * renderer_BlendShapeTextureInfo.x ;\nfor ( int i = 0 ; i < RENDERER_BLENDSHAPE_COUNT ; i ++ ) { int vertexElementOffset = vertexOffset ;\nfloat weight = renderer_BlendShapeWeights[i] ;\nif ( weight != 0.0 ) { position.xyz += getBlendShapeVertexElement(i, vertexElementOffset) * weight ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"}},154],[0," vertexElementOffset += 1 ;\nnormal += getBlendShapeVertexElement(i, vertexElementOffset) * weight ; \n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_HAS_TANGENT"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},158],[0," vertexElementOffset += 1 ;\ntangent.xyz += getBlendShapeVertexElement(i, vertexElementOffset) * weight ; \n"],[6],[0," } } \n"],[5,190],[0," position.xyz += POSITION_BS0 * renderer_BlendShapeWeights[0] ;\nposition.xyz += POSITION_BS1 * renderer_BlendShapeWeights[1] ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},172],[0," \n"],[1,"RENDERER_HAS_NORMAL",166],[0," normal += NORMAL_BS0 * renderer_BlendShapeWeights[0] ;\nnormal += NORMAL_BS1 * renderer_BlendShapeWeights[1] ; \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_TANGENT",170],[0," tangent.xyz += TANGENT_BS0 * renderer_BlendShapeWeights[0] ;\ntangent.xyz += TANGENT_BS1 * renderer_BlendShapeWeights[1] ; \n"],[6],[0," \n"],[5,188],[0," \n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},184],[0," position.xyz += POSITION_BS2 * renderer_BlendShapeWeights[2] ;\nposition.xyz += POSITION_BS3 * renderer_BlendShapeWeights[3] ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_HAS_NORMAL"}},178],[0," normal += NORMAL_BS0 * renderer_BlendShapeWeights[0] ;\nnormal += NORMAL_BS1 * renderer_BlendShapeWeights[1] ;\nnormal += NORMAL_BS2 * renderer_BlendShapeWeights[2] ;\nnormal += NORMAL_BS3 * renderer_BlendShapeWeights[3] ; \n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"},"r":{"t":"def","m":"RENDERER_HAS_TANGENT"}},182],[0," tangent.xyz += TANGENT_BS0 * renderer_BlendShapeWeights[0] ;\ntangent.xyz += TANGENT_BS1 * renderer_BlendShapeWeights[1] ;\ntangent.xyz += TANGENT_BS2 * renderer_BlendShapeWeights[2] ;\ntangent.xyz += TANGENT_BS3 * renderer_BlendShapeWeights[3] ; \n"],[6],[0," \n"],[5,186],[0," position.xyz += POSITION_BS2 * renderer_BlendShapeWeights[2] ;\nposition.xyz += POSITION_BS3 * renderer_BlendShapeWeights[3] ;\nposition.xyz += POSITION_BS4 * renderer_BlendShapeWeights[4] ;\nposition.xyz += POSITION_BS5 * renderer_BlendShapeWeights[5] ;\nposition.xyz += POSITION_BS6 * renderer_BlendShapeWeights[6] ;\nposition.xyz += POSITION_BS7 * renderer_BlendShapeWeights[7] ; \n"],[6],[0," \n"],[6],[0," \n"],[6],[0," }\n\n"],[6],[0,"\n\n"],[6],[0,"\nvoid main() { vec4 position = vec4 ( POSITION , 1.0 ) ;\n\n"],[1,"RENDERER_HAS_NORMAL",202],[0," vec3 normal = vec3 ( NORMAL ) ;\n\n"],[1,"RENDERER_HAS_TANGENT",200],[0," vec4 tangent = vec4 ( TANGENT ) ; \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",214],[0," calculateBlendShape(position\n"],[1,"RENDERER_HAS_NORMAL",212],[0," , normal \n"],[1,"RENDERER_HAS_TANGENT",210],[0," , tangent \n"],[6],[0," \n"],[6],[0,") ; \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_SKIN",218],[0," mat4 skinMatrix = getSkinMatrix() ;\nposition = skinMatrix * position ; \n"],[6],[0,"\ngl_Position = camera_VPMat * renderer_ModelMat * position ; }"]],"fragmentShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"TRANSFORM_INCLUDED",36],[0,"\n\n"],[7,"TRANSFORM_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[2,"ATTRIBUTES_INCLUDED",42],[0,"\n\n"],[7,"ATTRIBUTES_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[2,"SKIN_INCLUDED",58],[0,"\n\n"],[7,"SKIN_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_SKIN",56],[0,"\n\n"],[1,"RENDERER_USE_JOINT_TEXTURE",52],[0,"\n\n"],[5,54],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"BLENDSHAPE_INCLUDED",86],[0,"\n\n"],[7,"BLENDSHAPE_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",84],[0,"\n\n"],[1,"RENDERER_BLENDSHAPE_USE_TEXTURE",68],[0,"\n\n"],[5,82],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},72],[0,"\n\n"],[5,80],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},76],[0,"\n\n"],[5,78],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nvoid main() { }"]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/Pipeline/ShadowCaster.shaderc b/packages/shader/compiledShaders/Pipeline/ShadowCaster.shaderc deleted file mode 100644 index c4d98c9b62..0000000000 --- a/packages/shader/compiledShaders/Pipeline/ShadowCaster.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"Pipeline/ShadowCaster","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"ShadowCaster","isUsePass":false,"tags":{"pipelineStage":"ShadowCaster"},"renderStates":{"constantMap":{},"variableMap":{"28":"material_ShadowCasterRenderQueue"}},"vertexShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"TRANSFORM_INCLUDED",36],[0,"\n\n"],[7,"TRANSFORM_INCLUDED"],[0,"\nuniform mat4 camera_VPMat;\nuniform mat4 renderer_ModelMat;\nuniform mat4 renderer_NormalMat;\n\n"],[6],[0,"\n\n"],[2,"ATTRIBUTES_INCLUDED",94],[0,"\n\n"],[7,"ATTRIBUTES_INCLUDED"],[0,"\nattribute vec3 POSITION;\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",68],[0,"\n"],[2,"RENDERER_BLENDSHAPE_USE_TEXTURE",66],[0,"attribute vec3 POSITION_BS0;\nattribute vec3 POSITION_BS1;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},48],[0,"attribute vec3 NORMAL_BS0;\nattribute vec3 NORMAL_BS1;\nattribute vec3 TANGENT_BS0;\nattribute vec3 TANGENT_BS1;\n\n"],[5,64],[0,"\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},60],[0,"attribute vec3 POSITION_BS2;\nattribute vec3 POSITION_BS3;\n\n"],[1,"RENDERER_BLENDSHAPE_HAS_NORMAL",54],[0,"attribute vec3 NORMAL_BS0;\nattribute vec3 NORMAL_BS1;\nattribute vec3 NORMAL_BS2;\nattribute vec3 NORMAL_BS3;\n\n"],[6],[0,"\n"],[1,"RENDERER_BLENDSHAPE_HAS_TANGENT",58],[0,"attribute vec3 TANGENT_BS0;\nattribute vec3 TANGENT_BS1;\nattribute vec3 TANGENT_BS2;\nattribute vec3 TANGENT_BS3;\n\n"],[6],[0,"\n"],[5,62],[0,"attribute vec3 POSITION_BS2;\nattribute vec3 POSITION_BS3;\nattribute vec3 POSITION_BS4;\nattribute vec3 POSITION_BS5;\nattribute vec3 POSITION_BS6;\nattribute vec3 POSITION_BS7;\n\n"],[6],[0,"\n"],[6],[0,"\n"],[6],[0,"\n"],[6],[0,"\n"],[1,"RENDERER_HAS_UV",72],[0,"attribute vec2 TEXCOORD_0;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_UV1",76],[0,"\n"],[6],[0,"\n"],[1,"RENDERER_HAS_SKIN",80],[0,"attribute vec4 JOINTS_0;\nattribute vec4 WEIGHTS_0;\n\n"],[6],[0,"\n"],[1,"RENDERER_ENABLE_VERTEXCOLOR",84],[0,"\n"],[6],[0,"\n"],[1,"RENDERER_HAS_NORMAL",88],[0,"attribute vec3 NORMAL;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_TANGENT",92],[0,"attribute vec4 TANGENT;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"SKIN_INCLUDED",116],[0,"\n\n"],[7,"SKIN_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_SKIN",114],[0,"\n\n"],[1,"RENDERER_USE_JOINT_TEXTURE",104],[0,"\nuniform sampler2D renderer_JointSampler;\nuniform float renderer_JointCount;\nmat4 getJointMatrix ( sampler2D smp, float index ) { float base = index / renderer_JointCount ;\nfloat hf = 0.5 / renderer_JointCount ;\nfloat v = base + hf ;\nvec4 m0 = texture2D ( smp , vec2 ( 0.125 , v ) ) ;\nvec4 m1 = texture2D ( smp , vec2 ( 0.375 , v ) ) ;\nvec4 m2 = texture2D ( smp , vec2 ( 0.625 , v ) ) ;\nvec4 m3 = texture2D ( smp , vec2 ( 0.875 , v ) ) ;\nreturn mat4 ( m0 , m1 , m2 , m3 ) ; }\n\n"],[5,106],[0,"\nuniform mat4 renderer_JointMatrix [ RENDERER_JOINTS_NUM ];\n\n"],[6],[0,"\nmat4 getSkinMatrix ( ) { \n"],[1,"RENDERER_USE_JOINT_TEXTURE",110],[0," mat4 skinMatrix = WEIGHTS_0.x * getJointMatrix(renderer_JointSampler, JOINTS_0.x) + WEIGHTS_0.y * getJointMatrix(renderer_JointSampler, JOINTS_0.y) + WEIGHTS_0.z * getJointMatrix(renderer_JointSampler, JOINTS_0.z) + WEIGHTS_0.w * getJointMatrix(renderer_JointSampler, JOINTS_0.w) ; \n"],[5,112],[0," mat4 skinMatrix = WEIGHTS_0.x * renderer_JointMatrix[int ( JOINTS_0.x )] + WEIGHTS_0.y * renderer_JointMatrix[int ( JOINTS_0.y )] + WEIGHTS_0.z * renderer_JointMatrix[int ( JOINTS_0.z )] + WEIGHTS_0.w * renderer_JointMatrix[int ( JOINTS_0.w )] ; \n"],[6],[0,"\nreturn skinMatrix ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"BLENDSHAPE_INCLUDED",194],[0,"\n\n"],[7,"BLENDSHAPE_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",192],[0,"\n\n"],[1,"RENDERER_BLENDSHAPE_USE_TEXTURE",126],[0,"\nuniform mediump sampler2DArray renderer_BlendShapeTexture;\nuniform ivec3 renderer_BlendShapeTextureInfo;\nuniform float renderer_BlendShapeWeights [ RENDERER_BLENDSHAPE_COUNT ];\nvec3 getBlendShapeVertexElement ( int blendShapeIndex, int vertexElementIndex ) { int y = vertexElementIndex / renderer_BlendShapeTextureInfo.y ;\nint x = vertexElementIndex - y * renderer_BlendShapeTextureInfo.y ;\nivec3 uv = ivec3 ( x , y , blendShapeIndex ) ;\nreturn ( texelFetch ( renderer_BlendShapeTexture , uv , 0 ) ).xyz ; }\n\n"],[5,140],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},130],[0,"\nuniform float renderer_BlendShapeWeights [ 2 ];\n\n"],[5,138],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},134],[0,"\nuniform float renderer_BlendShapeWeights [ 4 ];\n\n"],[5,136],[0,"\nuniform float renderer_BlendShapeWeights [ 8 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nvoid calculateBlendShape ( inout vec4 position\n"],[1,"RENDERER_HAS_NORMAL",148],[0," , inout vec3 normal \n"],[1,"RENDERER_HAS_TANGENT",146],[0," , inout vec4 tangent \n"],[6],[0," \n"],[6],[0," ) { \n"],[1,"RENDERER_BLENDSHAPE_USE_TEXTURE",160],[0," int vertexOffset = gl_VertexID * renderer_BlendShapeTextureInfo.x ;\nfor ( int i = 0 ; i < RENDERER_BLENDSHAPE_COUNT ; i ++ ) { int vertexElementOffset = vertexOffset ;\nfloat weight = renderer_BlendShapeWeights[i] ;\nif ( weight != 0.0 ) { position.xyz += getBlendShapeVertexElement(i, vertexElementOffset) * weight ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"}},154],[0," vertexElementOffset += 1 ;\nnormal += getBlendShapeVertexElement(i, vertexElementOffset) * weight ; \n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_HAS_TANGENT"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},158],[0," vertexElementOffset += 1 ;\ntangent.xyz += getBlendShapeVertexElement(i, vertexElementOffset) * weight ; \n"],[6],[0," } } \n"],[5,190],[0," position.xyz += POSITION_BS0 * renderer_BlendShapeWeights[0] ;\nposition.xyz += POSITION_BS1 * renderer_BlendShapeWeights[1] ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},172],[0," \n"],[1,"RENDERER_HAS_NORMAL",166],[0," normal += NORMAL_BS0 * renderer_BlendShapeWeights[0] ;\nnormal += NORMAL_BS1 * renderer_BlendShapeWeights[1] ; \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_TANGENT",170],[0," tangent.xyz += TANGENT_BS0 * renderer_BlendShapeWeights[0] ;\ntangent.xyz += TANGENT_BS1 * renderer_BlendShapeWeights[1] ; \n"],[6],[0," \n"],[5,188],[0," \n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},184],[0," position.xyz += POSITION_BS2 * renderer_BlendShapeWeights[2] ;\nposition.xyz += POSITION_BS3 * renderer_BlendShapeWeights[3] ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_HAS_NORMAL"}},178],[0," normal += NORMAL_BS0 * renderer_BlendShapeWeights[0] ;\nnormal += NORMAL_BS1 * renderer_BlendShapeWeights[1] ;\nnormal += NORMAL_BS2 * renderer_BlendShapeWeights[2] ;\nnormal += NORMAL_BS3 * renderer_BlendShapeWeights[3] ; \n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"},"r":{"t":"def","m":"RENDERER_HAS_TANGENT"}},182],[0," tangent.xyz += TANGENT_BS0 * renderer_BlendShapeWeights[0] ;\ntangent.xyz += TANGENT_BS1 * renderer_BlendShapeWeights[1] ;\ntangent.xyz += TANGENT_BS2 * renderer_BlendShapeWeights[2] ;\ntangent.xyz += TANGENT_BS3 * renderer_BlendShapeWeights[3] ; \n"],[6],[0," \n"],[5,186],[0," position.xyz += POSITION_BS2 * renderer_BlendShapeWeights[2] ;\nposition.xyz += POSITION_BS3 * renderer_BlendShapeWeights[3] ;\nposition.xyz += POSITION_BS4 * renderer_BlendShapeWeights[4] ;\nposition.xyz += POSITION_BS5 * renderer_BlendShapeWeights[5] ;\nposition.xyz += POSITION_BS6 * renderer_BlendShapeWeights[6] ;\nposition.xyz += POSITION_BS7 * renderer_BlendShapeWeights[7] ; \n"],[6],[0," \n"],[6],[0," \n"],[6],[0," }\n\n"],[6],[0,"\n\n"],[6],[0,"\nuniform vec2 scene_ShadowBias;\nuniform vec3 scene_LightDirection;\nvarying vec2 v_uv;\n\nvec3 applyShadowBias ( vec3 positionWS ) { positionWS -= scene_LightDirection * scene_ShadowBias.x ;\nreturn positionWS ; }\nvec3 applyShadowNormalBias ( vec3 positionWS, vec3 normalWS ) { float invNdotL = 1.0 - clamp ( dot ( - scene_LightDirection , normalWS ) , 0.0 , 1.0 ) ;\nfloat scale = invNdotL * scene_ShadowBias.y ;\npositionWS += normalWS * vec3 ( scale ) ;\nreturn positionWS ; }\nvoid main() { \nvec4 position = vec4 ( POSITION , 1.0 ) ;\n\n"],[1,"RENDERER_HAS_NORMAL",202],[0," vec3 normal = vec3 ( NORMAL ) ;\n\n"],[1,"RENDERER_HAS_TANGENT",200],[0," vec4 tangent = vec4 ( TANGENT ) ; \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",214],[0," calculateBlendShape(position\n"],[1,"RENDERER_HAS_NORMAL",212],[0," , normal \n"],[1,"RENDERER_HAS_TANGENT",210],[0," , tangent \n"],[6],[0," \n"],[6],[0,") ; \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_SKIN",222],[0," mat4 skinMatrix = getSkinMatrix() ;\nposition = skinMatrix * position ;\n\n"],[1,"RENDERER_HAS_NORMAL",220],[0," mat3 skinNormalMatrix = INVERSE_MAT(mat3 ( skinMatrix )) ;\nnormal = normal * skinNormalMatrix ; \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_UV",226],[0," v_uv = TEXCOORD_0 ; \n"],[5,228],[0," v_uv = vec2 ( 0.0 , 0.0 ) ; \n"],[6],[0,"\nvec4 positionWS = renderer_ModelMat * position ;\npositionWS.xyz = applyShadowBias(positionWS.xyz) ;\n\n"],[1,"RENDERER_HAS_NORMAL",232],[0," vec3 normalWS = normalize ( mat3 ( renderer_NormalMat ) * normal ) ;\npositionWS.xyz = applyShadowNormalBias(positionWS.xyz, normalWS) ; \n"],[6],[0,"\nvec4 positionCS = camera_VPMat * positionWS ;\npositionCS.z = max ( positionCS.z , - 1.0 ) ;\ngl_Position = positionCS ;\n }\n\n"],[1,"ENGINE_NO_DEPTH_TEXTURE",236],[0,"\n\n"],[6]],"fragmentShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"TRANSFORM_INCLUDED",36],[0,"\n\n"],[7,"TRANSFORM_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[2,"ATTRIBUTES_INCLUDED",42],[0,"\n\n"],[7,"ATTRIBUTES_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[2,"SKIN_INCLUDED",58],[0,"\n\n"],[7,"SKIN_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_SKIN",56],[0,"\n\n"],[1,"RENDERER_USE_JOINT_TEXTURE",52],[0,"\n\n"],[5,54],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"BLENDSHAPE_INCLUDED",86],[0,"\n\n"],[7,"BLENDSHAPE_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",84],[0,"\n\n"],[1,"RENDERER_BLENDSHAPE_USE_TEXTURE",68],[0,"\n\n"],[5,82],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},72],[0,"\n\n"],[5,80],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},76],[0,"\n\n"],[5,78],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nuniform vec4 material_BaseColor;\nuniform sampler2D material_BaseTexture;\nuniform float material_AlphaCutoff;\nvarying vec2 v_uv;\n\n\n"],[1,"ENGINE_NO_DEPTH_TEXTURE",90],[0,"\nvec4 pack ( float depth ) { const vec4 bitShift = vec4 ( 1.0 , 256.0 , 256.0 * 256.0 , 256.0 * 256.0 * 256.0 ) ;\nconst vec4 bitMask = vec4 ( 1.0 / 256.0 , 1.0 / 256.0 , 1.0 / 256.0 , 0.0 ) ;\nvec4 rgbaDepth = fract ( depth * bitShift ) ;\nrgbaDepth -= rgbaDepth.gbaa * bitMask ;\nreturn rgbaDepth ; }\n\n"],[6],[0,"\nvoid main() { \n"],[4,{"t":"or","l":{"t":"def","m":"MATERIAL_IS_ALPHA_CUTOFF"},"r":{"t":"and","l":{"t":"def","m":"SCENE_ENABLE_TRANSPARENT_SHADOW"},"r":{"t":"def","m":"MATERIAL_IS_TRANSPARENT"}}},106],[0," float alpha = material_BaseColor.a ;\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",96],[0," alpha *= texture2D ( material_BaseTexture , v_uv ).a ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_IS_ALPHA_CUTOFF",100],[0," if ( alpha < material_AlphaCutoff ) { discard ; } \n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"SCENE_ENABLE_TRANSPARENT_SHADOW"},"r":{"t":"def","m":"MATERIAL_IS_TRANSPARENT"}},104],[0," float noise = fract ( 52.982919 * fract ( dot ( vec2 ( 0.06711 , 0.00584 ) , gl_FragCoord.xy ) ) ) ;\nif ( alpha <= noise ) { discard ; } \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"ENGINE_NO_DEPTH_TEXTURE",110],[0," gl_FragColor = pack(gl_FragCoord.z) ; \n"],[5,112],[0," gl_FragColor = vec4 ( 0.0 , 0.0 , 0.0 , 0.0 ) ; \n"],[6],[0," }"]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/PostProcess/Bloom.shaderc b/packages/shader/compiledShaders/PostProcess/Bloom.shaderc deleted file mode 100644 index 5167e79e36..0000000000 --- a/packages/shader/compiledShaders/PostProcess/Bloom.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"PostProcess/Bloom","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"Bloom Prefilter","isUsePass":false,"tags":{},"renderStates":{"constantMap":{"10":false,"11":false},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nattribute vec4 POSITION_UV;\n\nvarying vec2 v_uv;\n\nvoid main() { \ngl_Position = vec4 ( POSITION_UV.xy , 0.0 , 1.0 ) ;\nv_uv = POSITION_UV.zw ;\n }\n\n"],[6],[0,"\n\n"],[2,"BLOOM_PREFILTER",54],[0,"\n\n"],[7,"BLOOM_PREFILTER"],[0,"\n\n"],[2,"POST_COMMON",52],[0,"\n\n"],[7,"POST_COMMON"],[0,"\n\n"],[2,"COMMON_INCLUDED",44],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",38],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,42],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[8,"FLT_MIN","1.175494351e-38"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_MAX","65504.0"],[0,"\n\n"],[6],[0,"\n\n"],[6]],"fragmentShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nvarying vec2 v_uv;\n\n\n"],[6],[0,"\n\n"],[2,"BLOOM_PREFILTER",64],[0,"\n\n"],[7,"BLOOM_PREFILTER"],[0,"\n\n"],[2,"POST_COMMON",56],[0,"\n\n"],[7,"POST_COMMON"],[0,"\n\n"],[2,"COMMON_INCLUDED",48],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",36],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",42],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,46],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[8,"FLT_MIN","1.175494351e-38"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_MAX","65504.0"],[0,"\nfloat max3 ( vec3 val ) { return max ( max ( val.x , val.y ) , val.z ) ; }\n\n"],[6],[0,"\nuniform mediump sampler2D renderer_BlitTexture;\nuniform vec4 material_BloomParams;\nuniform vec4 renderer_texelSize;\nvoid main() { \n"],[1,"BLOOM_HQ",60],[0," vec2 texelSize = renderer_texelSize.xy ;\nmediump vec4 A = texture2DSRGB(renderer_BlitTexture, v_uv + texelSize * vec2 ( - 1.0 , - 1.0 )) ;\nmediump vec4 B = texture2DSRGB(renderer_BlitTexture, v_uv + texelSize * vec2 ( 0.0 , - 1.0 )) ;\nmediump vec4 C = texture2DSRGB(renderer_BlitTexture, v_uv + texelSize * vec2 ( 1.0 , - 1.0 )) ;\nmediump vec4 D = texture2DSRGB(renderer_BlitTexture, v_uv + texelSize * vec2 ( - 0.5 , - 0.5 )) ;\nmediump vec4 E = texture2DSRGB(renderer_BlitTexture, v_uv + texelSize * vec2 ( 0.5 , - 0.5 )) ;\nmediump vec4 F = texture2DSRGB(renderer_BlitTexture, v_uv + texelSize * vec2 ( - 1.0 , 0.0 )) ;\nmediump vec4 G = texture2DSRGB(renderer_BlitTexture, v_uv) ;\nmediump vec4 H = texture2DSRGB(renderer_BlitTexture, v_uv + texelSize * vec2 ( 1.0 , 0.0 )) ;\nmediump vec4 I = texture2DSRGB(renderer_BlitTexture, v_uv + texelSize * vec2 ( - 0.5 , 0.5 )) ;\nmediump vec4 J = texture2DSRGB(renderer_BlitTexture, v_uv + texelSize * vec2 ( 0.5 , 0.5 )) ;\nmediump vec4 K = texture2DSRGB(renderer_BlitTexture, v_uv + texelSize * vec2 ( - 1.0 , 1.0 )) ;\nmediump vec4 L = texture2DSRGB(renderer_BlitTexture, v_uv + texelSize * vec2 ( 0.0 , 1.0 )) ;\nmediump vec4 M = texture2DSRGB(renderer_BlitTexture, v_uv + texelSize * vec2 ( 1.0 , 1.0 )) ;\nmediump vec2 scale = vec2 ( 0.5 , 0.125 ) ;\nmediump vec2 div = ( 1.0 / 4.0 ) * scale ;\nmediump vec4 samplerColor = ( D + E + I + J ) * div.x ;\nsamplerColor += ( A + B + G + F ) * div.y ;\nsamplerColor += ( B + C + H + G ) * div.y ;\nsamplerColor += ( F + G + L + K ) * div.y ;\nsamplerColor += ( G + H + M + L ) * div.y ; \n"],[5,62],[0," mediump vec4 samplerColor = texture2DSRGB(renderer_BlitTexture, v_uv) ; \n"],[6],[0,"\nmediump vec3 color = samplerColor.rgb ;\ncolor = min ( color , HALF_MAX ) ;\nmediump float brightness = max3(color) ;\nfloat threshold = material_BloomParams.x ;\nfloat thresholdKnee = material_BloomParams.y ;\nmediump float softness = clamp ( brightness - threshold + thresholdKnee , 0.0 , 2.0 * thresholdKnee ) ;\nsoftness = ( softness * softness ) / ( 4.0 * thresholdKnee + 1e-4 ) ;\nmediump float multiplier = max ( brightness - threshold , softness ) / max ( brightness , 1e-4 ) ;\ncolor *= multiplier ;\ncolor = max ( color , 0.0 ) ;\ngl_FragColor = vec4 ( color , 0.0 ) ; }\n\n"],[6]]},{"name":"Bloom Blur Horizontal","isUsePass":false,"tags":{},"renderStates":{"constantMap":{"10":false,"11":false},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nattribute vec4 POSITION_UV;\n\nvarying vec2 v_uv;\n\nvoid main() { \ngl_Position = vec4 ( POSITION_UV.xy , 0.0 , 1.0 ) ;\nv_uv = POSITION_UV.zw ;\n }\n\n"],[6],[0,"\n\n"],[2,"BLOOM_BLUR_H",54],[0,"\n\n"],[7,"BLOOM_BLUR_H"],[0,"\n\n"],[2,"POST_COMMON",52],[0,"\n\n"],[7,"POST_COMMON"],[0,"\n\n"],[2,"COMMON_INCLUDED",44],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",38],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,42],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[8,"FLT_MIN","1.175494351e-38"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_MAX","65504.0"],[0,"\n\n"],[6],[0,"\n\n"],[6]],"fragmentShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nvarying vec2 v_uv;\n\n\n"],[6],[0,"\n\n"],[2,"BLOOM_BLUR_H",58],[0,"\n\n"],[7,"BLOOM_BLUR_H"],[0,"\n\n"],[2,"POST_COMMON",56],[0,"\n\n"],[7,"POST_COMMON"],[0,"\n\n"],[2,"COMMON_INCLUDED",48],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",36],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",42],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,46],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[8,"FLT_MIN","1.175494351e-38"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_MAX","65504.0"],[0,"\n\n"],[6],[0,"\nuniform mediump sampler2D renderer_BlitTexture;\nuniform vec4 renderer_texelSize;\nvoid main() { vec2 texelSize = renderer_texelSize.xy * 2.0 ;\nmediump vec4 c0 = texture2DSRGB(renderer_BlitTexture, v_uv - vec2 ( texelSize.x * 4.0 , 0.0 )) ;\nmediump vec4 c1 = texture2DSRGB(renderer_BlitTexture, v_uv - vec2 ( texelSize.x * 3.0 , 0.0 )) ;\nmediump vec4 c2 = texture2DSRGB(renderer_BlitTexture, v_uv - vec2 ( texelSize.x * 2.0 , 0.0 )) ;\nmediump vec4 c3 = texture2DSRGB(renderer_BlitTexture, v_uv - vec2 ( texelSize.x * 1.0 , 0.0 )) ;\nmediump vec4 c4 = texture2DSRGB(renderer_BlitTexture, v_uv) ;\nmediump vec4 c5 = texture2DSRGB(renderer_BlitTexture, v_uv + vec2 ( texelSize.x * 1.0 , 0.0 )) ;\nmediump vec4 c6 = texture2DSRGB(renderer_BlitTexture, v_uv + vec2 ( texelSize.x * 2.0 , 0.0 )) ;\nmediump vec4 c7 = texture2DSRGB(renderer_BlitTexture, v_uv + vec2 ( texelSize.x * 3.0 , 0.0 )) ;\nmediump vec4 c8 = texture2DSRGB(renderer_BlitTexture, v_uv + vec2 ( texelSize.x * 4.0 , 0.0 )) ;\ngl_FragColor = c0 * 0.01621622 + c1 * 0.05405405 + c2 * 0.12162162 + c3 * 0.19459459 + c4 * 0.22702703 + c5 * 0.19459459 + c6 * 0.12162162 + c7 * 0.05405405 + c8 * 0.01621622 ; }\n\n"],[6]]},{"name":"Bloom Blur Vertical","isUsePass":false,"tags":{},"renderStates":{"constantMap":{"10":false,"11":false},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nattribute vec4 POSITION_UV;\n\nvarying vec2 v_uv;\n\nvoid main() { \ngl_Position = vec4 ( POSITION_UV.xy , 0.0 , 1.0 ) ;\nv_uv = POSITION_UV.zw ;\n }\n\n"],[6],[0,"\n\n"],[2,"BLOOM_BLUR_V",54],[0,"\n\n"],[7,"BLOOM_BLUR_V"],[0,"\n\n"],[2,"POST_COMMON",52],[0,"\n\n"],[7,"POST_COMMON"],[0,"\n\n"],[2,"COMMON_INCLUDED",44],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",38],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,42],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[8,"FLT_MIN","1.175494351e-38"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_MAX","65504.0"],[0,"\n\n"],[6],[0,"\n\n"],[6]],"fragmentShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nvarying vec2 v_uv;\n\n\n"],[6],[0,"\n\n"],[2,"BLOOM_BLUR_V",58],[0,"\n\n"],[7,"BLOOM_BLUR_V"],[0,"\n\n"],[2,"POST_COMMON",56],[0,"\n\n"],[7,"POST_COMMON"],[0,"\n\n"],[2,"COMMON_INCLUDED",48],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",36],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",42],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,46],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[8,"FLT_MIN","1.175494351e-38"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_MAX","65504.0"],[0,"\n\n"],[6],[0,"\nuniform mediump sampler2D renderer_BlitTexture;\nuniform vec4 renderer_texelSize;\nvoid main() { vec2 texelSize = renderer_texelSize.xy ;\nmediump vec4 c0 = texture2DSRGB(renderer_BlitTexture, v_uv - vec2 ( 0.0 , texelSize.y * 3.23076923 )) ;\nmediump vec4 c1 = texture2DSRGB(renderer_BlitTexture, v_uv - vec2 ( 0.0 , texelSize.y * 1.38461538 )) ;\nmediump vec4 c2 = texture2DSRGB(renderer_BlitTexture, v_uv) ;\nmediump vec4 c3 = texture2DSRGB(renderer_BlitTexture, v_uv + vec2 ( 0.0 , texelSize.y * 1.38461538 )) ;\nmediump vec4 c4 = texture2DSRGB(renderer_BlitTexture, v_uv + vec2 ( 0.0 , texelSize.y * 3.23076923 )) ;\ngl_FragColor = c0 * 0.07027027 + c1 * 0.31621622 + c2 * 0.22702703 + c3 * 0.31621622 + c4 * 0.07027027 ; }\n\n"],[6]]},{"name":"Bloom Upsample","isUsePass":false,"tags":{},"renderStates":{"constantMap":{"10":false,"11":false},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nattribute vec4 POSITION_UV;\n\nvarying vec2 v_uv;\n\nvoid main() { \ngl_Position = vec4 ( POSITION_UV.xy , 0.0 , 1.0 ) ;\nv_uv = POSITION_UV.zw ;\n }\n\n"],[6],[0,"\n\n"],[2,"BLOOM_UPSAMPLE",60],[0,"\n\n"],[7,"BLOOM_UPSAMPLE"],[0,"\n\n"],[2,"POST_COMMON",52],[0,"\n\n"],[7,"POST_COMMON"],[0,"\n\n"],[2,"COMMON_INCLUDED",44],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",38],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,42],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[8,"FLT_MIN","1.175494351e-38"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_MAX","65504.0"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FILTERING",58],[0,"\n\n"],[7,"FILTERING"],[0,"\n\n"],[6],[0,"\n\n"],[6]],"fragmentShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nvarying vec2 v_uv;\n\n\n"],[6],[0,"\n\n"],[2,"BLOOM_UPSAMPLE",70],[0,"\n\n"],[7,"BLOOM_UPSAMPLE"],[0,"\n\n"],[2,"POST_COMMON",56],[0,"\n\n"],[7,"POST_COMMON"],[0,"\n\n"],[2,"COMMON_INCLUDED",48],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",36],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",42],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,46],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[8,"FLT_MIN","1.175494351e-38"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_MAX","65504.0"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FILTERING",62],[0,"\n\n"],[7,"FILTERING"],[0,"\nvec2 bSpline3MiddleLeft ( vec2 x ) { return 0.16666667 + x * ( 0.5 + x * ( 0.5 - x * 0.5 ) ) ; }\nvec2 bSpline3MiddleRight ( vec2 x ) { return 0.66666667 + x * ( - 1.0 + 0.5 * x ) * x ; }\nvec2 bSpline3Rightmost ( vec2 x ) { return 0.16666667 + x * ( - 0.5 + x * ( 0.5 - x * 0.16666667 ) ) ; }\nvoid bicubicFilter ( vec2 fracCoord, out vec2 weights [ 2 ], out vec2 offsets [ 2 ] ) { vec2 r = bSpline3Rightmost(fracCoord) ;\nvec2 mr = bSpline3MiddleRight(fracCoord) ;\nvec2 ml = bSpline3MiddleLeft(fracCoord) ;\nvec2 l = 1.0 - mr - ml - r ;\nweights[0] = r + mr ;\nweights[1] = ml + l ;\noffsets[0] = - 1.0 + mr / weights[0] ;\noffsets[1] = 1.0 + l / weights[1] ; }\nvec4 sampleTexture2DBicubic ( sampler2D tex, vec2 coord, vec4 texSize ) { vec2 xy = coord * texSize.zw + 0.5 ;\nvec2 ic = floor ( xy ) ;\nvec2 fc = fract ( xy ) ;\nvec2 weights [ 2 ] , offsets [ 2 ] ;\nbicubicFilter(fc, weights, offsets) ;\nreturn weights[0].y * ( weights[0].x * texture2DSRGB(tex, ( ic + vec2 ( offsets[0].x , offsets[0].y ) - 0.5 ) * texSize.xy) + weights[1].x * texture2DSRGB(tex, ( ic + vec2 ( offsets[1].x , offsets[0].y ) - 0.5 ) * texSize.xy) ) + weights[1].y * ( weights[0].x * texture2DSRGB(tex, ( ic + vec2 ( offsets[0].x , offsets[1].y ) - 0.5 ) * texSize.xy) + weights[1].x * texture2DSRGB(tex, ( ic + vec2 ( offsets[1].x , offsets[1].y ) - 0.5 ) * texSize.xy) ) ; }\n\n"],[6],[0,"\nuniform mediump sampler2D renderer_BlitTexture;\nuniform mediump sampler2D material_lowMipTexture;\nuniform vec4 material_BloomParams;\nuniform vec4 material_lowMipTexelSize;\nvoid main() { mediump vec4 highMip = texture2DSRGB(renderer_BlitTexture, v_uv) ;\n\n"],[1,"BLOOM_HQ",66],[0," mediump vec4 lowMip = sampleTexture2DBicubic(material_lowMipTexture, v_uv, material_lowMipTexelSize) ; \n"],[5,68],[0," mediump vec4 lowMip = texture2DSRGB(material_lowMipTexture, v_uv) ; \n"],[6],[0,"\ngl_FragColor = mix ( highMip , lowMip , material_BloomParams.z ) ; }\n\n"],[6]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/PostProcess/FinalAntiAliasing.shaderc b/packages/shader/compiledShaders/PostProcess/FinalAntiAliasing.shaderc deleted file mode 100644 index 955edf7511..0000000000 --- a/packages/shader/compiledShaders/PostProcess/FinalAntiAliasing.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"PostProcess/FinalAntiAliasing","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"0","isUsePass":false,"tags":{},"renderStates":{"constantMap":{"10":false,"11":false},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nattribute vec4 POSITION_UV;\n\nvarying vec2 v_uv;\n\nvoid main() { \ngl_Position = vec4 ( POSITION_UV.xy , 0.0 , 1.0 ) ;\nv_uv = POSITION_UV.zw ;\n }\n\n"],[6],[0,"\n\n"],[2,"FINAL_ANTI_ALIASING",581],[0,"\n\n"],[7,"FINAL_ANTI_ALIASING"],[0,"\n\n"],[8,"FXAA_PC","1"],[0,"\n\n"],[8,"FXAA_QUALITY_PRESET","12"],[0,"\n\n"],[8,"FXAA_GREEN_AS_LUMA","0"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",22],[0,"\n\n"],[8,"FXAA_GLSL_130","1"],[0,"\n\n"],[5,27],[1,"GRAPHICS_API_WEBGL1",27],[0,"\n\n"],[8,"FXAA_GLSL_120","1"],[0,"\n\n"],[6],[0,"\n\n"],[2,"COMMON_INCLUDED",57],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",51],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,55],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_PC",63],[0,"\n\n"],[8,"FXAA_PC","0"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_GLSL_120",69],[0,"\n\n"],[8,"FXAA_GLSL_120","0"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_GLSL_130",75],[0,"\n\n"],[8,"FXAA_GLSL_130","0"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_GREEN_AS_LUMA",81],[0,"\n\n"],[8,"FXAA_GREEN_AS_LUMA","0"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_EARLY_EXIT",87],[0,"\n\n"],[8,"FXAA_EARLY_EXIT","1"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_DISCARD",93],[0,"\n\n"],[8,"FXAA_DISCARD","0"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_FAST_PIXEL_OFFSET",121],[0,"\n\n"],[1,"GL_EXT_gpu_shader4",101],[0,"\n\n"],[8,"FXAA_FAST_PIXEL_OFFSET","1"],[0,"\n\n"],[6],[0,"\n\n"],[1,"GL_NV_gpu_shader5",107],[0,"\n\n"],[8,"FXAA_FAST_PIXEL_OFFSET","1"],[0,"\n\n"],[6],[0,"\n\n"],[1,"gpu_shader5",113],[0,"\n\n"],[8,"FXAA_FAST_PIXEL_OFFSET","1"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_FAST_PIXEL_OFFSET",119],[0,"\n\n"],[8,"FXAA_FAST_PIXEL_OFFSET","0"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_GATHER4_ALPHA",143],[0,"\n\n"],[1,"gpu_shader5",129],[0,"\n\n"],[8,"FXAA_GATHER4_ALPHA","1"],[0,"\n\n"],[6],[0,"\n\n"],[1,"GL_NV_gpu_shader5",135],[0,"\n\n"],[8,"FXAA_GATHER4_ALPHA","1"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_GATHER4_ALPHA",141],[0,"\n\n"],[8,"FXAA_GATHER4_ALPHA","0"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_QUALITY_PRESET",149],[0,"\n\n"],[8,"FXAA_QUALITY_PRESET","12"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",10,161],[0,"\n\n"],[8,"FXAA_QUALITY_PS","3"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","3.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","12.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",11,175],[0,"\n\n"],[8,"FXAA_QUALITY_PS","4"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","3.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","12.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",12,191],[0,"\n\n"],[8,"FXAA_QUALITY_PS","5"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","12.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",13,209],[0,"\n\n"],[8,"FXAA_QUALITY_PS","6"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","12.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",14,229],[0,"\n\n"],[8,"FXAA_QUALITY_PS","7"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","12.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",15,251],[0,"\n\n"],[8,"FXAA_QUALITY_PS","8"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P7","12.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",20,263],[0,"\n\n"],[8,"FXAA_QUALITY_PS","3"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",21,277],[0,"\n\n"],[8,"FXAA_QUALITY_PS","4"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",22,293],[0,"\n\n"],[8,"FXAA_QUALITY_PS","5"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",23,311],[0,"\n\n"],[8,"FXAA_QUALITY_PS","6"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",24,331],[0,"\n\n"],[8,"FXAA_QUALITY_PS","7"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","3.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",25,353],[0,"\n\n"],[8,"FXAA_QUALITY_PS","8"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P7","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",26,377],[0,"\n\n"],[8,"FXAA_QUALITY_PS","9"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P7","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P8","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",27,403],[0,"\n\n"],[8,"FXAA_QUALITY_PS","10"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P7","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P8","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P9","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",28,431],[0,"\n\n"],[8,"FXAA_QUALITY_PS","11"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P7","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P8","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P9","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P10","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",29,461],[0,"\n\n"],[8,"FXAA_QUALITY_PS","12"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P7","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P8","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P9","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P10","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P11","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",39,491],[0,"\n\n"],[8,"FXAA_QUALITY_PS","12"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P7","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P8","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P9","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P10","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P11","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[4,{"t":"or","l":{"t":"cmp","m":"FXAA_GLSL_120","op":"==","v":1},"r":{"t":"cmp","m":"FXAA_GLSL_130","op":"==","v":1}},521],[0,"\n\n"],[8,"FxaaBool","bool"],[0,"\n\n"],[8,"FxaaDiscard","discard"],[0,"\n\n"],[8,"FxaaFloat","float"],[0,"\n\n"],[8,"FxaaFloat2","vec2"],[0,"\n\n"],[8,"FxaaFloat3","vec3"],[0,"\n\n"],[8,"FxaaFloat4","vec4"],[0,"\n\n"],[8,"FxaaHalf","float"],[0,"\n\n"],[8,"FxaaHalf2","vec2"],[0,"\n\n"],[8,"FxaaHalf3","vec3"],[0,"\n\n"],[8,"FxaaHalf4","vec4"],[0,"\n\n"],[8,"FxaaInt2","ivec2"],[0,"\n\n"],[9,"FxaaSat",["x"],"clamp ( x , 0.0 , 1.0 )"],[0,"\n\n"],[8,"FxaaTex","sampler2D"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_GLSL_120","==",1,549],[0,"\n\n"],[9,"FxaaTexTop",["t","p"],"texture2DLodEXT ( t , p , 0.0 )"],[0,"\n\n"],[3,"FXAA_FAST_PIXEL_OFFSET","==",1,531],[0,"\n\n"],[9,"FxaaTexOff",["t","p","o","r"],"texture2DLodOffset ( t , p , 0.0 , o )"],[0,"\n\n"],[5,535],[0,"\n\n"],[9,"FxaaTexOff",["t","p","o","r"],"texture2DLodEXT ( t , p + ( o * r ) , 0.0 )"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_GATHER4_ALPHA","==",1,547],[0,"\n\n"],[9,"FxaaTexAlpha4",["t","p"],"textureGather ( t , p , 3 )"],[0,"\n\n"],[9,"FxaaTexOffAlpha4",["t","p","o"],"textureGatherOffset ( t , p , o , 3 )"],[0,"\n\n"],[9,"FxaaTexGreen4",["t","p"],"textureGather ( t , p , 1 )"],[0,"\n\n"],[9,"FxaaTexOffGreen4",["t","p","o"],"textureGatherOffset ( t , p , o , 1 )"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_GLSL_130","==",1,569],[0,"\n\n"],[9,"FxaaTexTop",["t","p"],"textureLod ( t , p , 0.0 )"],[0,"\n\n"],[9,"FxaaTexOff",["t","p","o","r"],"textureLodOffset ( t , p , 0.0 , o )"],[0,"\n\n"],[3,"FXAA_GATHER4_ALPHA","==",1,567],[0,"\n\n"],[9,"FxaaTexAlpha4",["t","p"],"textureGather ( t , p , 3 )"],[0,"\n\n"],[9,"FxaaTexOffAlpha4",["t","p","o"],"textureGatherOffset ( t , p , o , 3 )"],[0,"\n\n"],[9,"FxaaTexGreen4",["t","p"],"textureGather ( t , p , 1 )"],[0,"\n\n"],[9,"FxaaTexOffGreen4",["t","p","o"],"textureGatherOffset ( t , p , o , 1 )"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_GREEN_AS_LUMA","==",0,573],[0,"\n\n"],[5,575],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_PC","==",1,579],[0,"\n\n"],[6],[0,"\n\n"],[6]],"fragmentShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nvarying vec2 v_uv;\n\n\n"],[6],[0,"\n\n"],[2,"FINAL_ANTI_ALIASING",675],[0,"\n\n"],[7,"FINAL_ANTI_ALIASING"],[0,"\n\n"],[8,"FXAA_PC","1"],[0,"\n\n"],[8,"FXAA_QUALITY_PRESET","12"],[0,"\n\n"],[8,"FXAA_GREEN_AS_LUMA","0"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",22],[0,"\n\n"],[8,"FXAA_GLSL_130","1"],[0,"\n\n"],[5,27],[1,"GRAPHICS_API_WEBGL1",27],[0,"\n\n"],[8,"FXAA_GLSL_120","1"],[0,"\n\n"],[6],[0,"\n\n"],[2,"COMMON_INCLUDED",57],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",51],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,55],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_PC",63],[0,"\n\n"],[8,"FXAA_PC","0"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_GLSL_120",69],[0,"\n\n"],[8,"FXAA_GLSL_120","0"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_GLSL_130",75],[0,"\n\n"],[8,"FXAA_GLSL_130","0"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_GREEN_AS_LUMA",81],[0,"\n\n"],[8,"FXAA_GREEN_AS_LUMA","0"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_EARLY_EXIT",87],[0,"\n\n"],[8,"FXAA_EARLY_EXIT","1"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_DISCARD",93],[0,"\n\n"],[8,"FXAA_DISCARD","0"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_FAST_PIXEL_OFFSET",121],[0,"\n\n"],[1,"GL_EXT_gpu_shader4",101],[0,"\n\n"],[8,"FXAA_FAST_PIXEL_OFFSET","1"],[0,"\n\n"],[6],[0,"\n\n"],[1,"GL_NV_gpu_shader5",107],[0,"\n\n"],[8,"FXAA_FAST_PIXEL_OFFSET","1"],[0,"\n\n"],[6],[0,"\n\n"],[1,"gpu_shader5",113],[0,"\n\n"],[8,"FXAA_FAST_PIXEL_OFFSET","1"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_FAST_PIXEL_OFFSET",119],[0,"\n\n"],[8,"FXAA_FAST_PIXEL_OFFSET","0"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_GATHER4_ALPHA",143],[0,"\n\n"],[1,"gpu_shader5",129],[0,"\n\n"],[8,"FXAA_GATHER4_ALPHA","1"],[0,"\n\n"],[6],[0,"\n\n"],[1,"GL_NV_gpu_shader5",135],[0,"\n\n"],[8,"FXAA_GATHER4_ALPHA","1"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_GATHER4_ALPHA",141],[0,"\n\n"],[8,"FXAA_GATHER4_ALPHA","0"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"FXAA_QUALITY_PRESET",149],[0,"\n\n"],[8,"FXAA_QUALITY_PRESET","12"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",10,161],[0,"\n\n"],[8,"FXAA_QUALITY_PS","3"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","3.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","12.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",11,175],[0,"\n\n"],[8,"FXAA_QUALITY_PS","4"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","3.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","12.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",12,191],[0,"\n\n"],[8,"FXAA_QUALITY_PS","5"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","12.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",13,209],[0,"\n\n"],[8,"FXAA_QUALITY_PS","6"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","12.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",14,229],[0,"\n\n"],[8,"FXAA_QUALITY_PS","7"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","12.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",15,251],[0,"\n\n"],[8,"FXAA_QUALITY_PS","8"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P7","12.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",20,263],[0,"\n\n"],[8,"FXAA_QUALITY_PS","3"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",21,277],[0,"\n\n"],[8,"FXAA_QUALITY_PS","4"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",22,293],[0,"\n\n"],[8,"FXAA_QUALITY_PS","5"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",23,311],[0,"\n\n"],[8,"FXAA_QUALITY_PS","6"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",24,331],[0,"\n\n"],[8,"FXAA_QUALITY_PS","7"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","3.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",25,353],[0,"\n\n"],[8,"FXAA_QUALITY_PS","8"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P7","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",26,377],[0,"\n\n"],[8,"FXAA_QUALITY_PS","9"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P7","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P8","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",27,403],[0,"\n\n"],[8,"FXAA_QUALITY_PS","10"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P7","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P8","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P9","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",28,431],[0,"\n\n"],[8,"FXAA_QUALITY_PS","11"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P7","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P8","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P9","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P10","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",29,461],[0,"\n\n"],[8,"FXAA_QUALITY_PS","12"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P7","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P8","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P9","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P10","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P11","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_QUALITY_PRESET","==",39,491],[0,"\n\n"],[8,"FXAA_QUALITY_PS","12"],[0,"\n\n"],[8,"FXAA_QUALITY_P0","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P1","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P2","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P3","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P4","1.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P5","1.5"],[0,"\n\n"],[8,"FXAA_QUALITY_P6","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P7","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P8","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P9","2.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P10","4.0"],[0,"\n\n"],[8,"FXAA_QUALITY_P11","8.0"],[0,"\n\n"],[6],[0,"\n\n"],[4,{"t":"or","l":{"t":"cmp","m":"FXAA_GLSL_120","op":"==","v":1},"r":{"t":"cmp","m":"FXAA_GLSL_130","op":"==","v":1}},521],[0,"\n\n"],[8,"FxaaBool","bool"],[0,"\n\n"],[8,"FxaaDiscard","discard"],[0,"\n\n"],[8,"FxaaFloat","float"],[0,"\n\n"],[8,"FxaaFloat2","vec2"],[0,"\n\n"],[8,"FxaaFloat3","vec3"],[0,"\n\n"],[8,"FxaaFloat4","vec4"],[0,"\n\n"],[8,"FxaaHalf","float"],[0,"\n\n"],[8,"FxaaHalf2","vec2"],[0,"\n\n"],[8,"FxaaHalf3","vec3"],[0,"\n\n"],[8,"FxaaHalf4","vec4"],[0,"\n\n"],[8,"FxaaInt2","ivec2"],[0,"\n\n"],[9,"FxaaSat",["x"],"clamp ( x , 0.0 , 1.0 )"],[0,"\n\n"],[8,"FxaaTex","sampler2D"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_GLSL_120","==",1,549],[0,"\n\n"],[9,"FxaaTexTop",["t","p"],"texture2DLodEXT ( t , p , 0.0 )"],[0,"\n\n"],[3,"FXAA_FAST_PIXEL_OFFSET","==",1,531],[0,"\n\n"],[9,"FxaaTexOff",["t","p","o","r"],"texture2DLodOffset ( t , p , 0.0 , o )"],[0,"\n\n"],[5,535],[0,"\n\n"],[9,"FxaaTexOff",["t","p","o","r"],"texture2DLodEXT ( t , p + ( o * r ) , 0.0 )"],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_GATHER4_ALPHA","==",1,547],[0,"\n\n"],[9,"FxaaTexAlpha4",["t","p"],"textureGather ( t , p , 3 )"],[0,"\n\n"],[9,"FxaaTexOffAlpha4",["t","p","o"],"textureGatherOffset ( t , p , o , 3 )"],[0,"\n\n"],[9,"FxaaTexGreen4",["t","p"],"textureGather ( t , p , 1 )"],[0,"\n\n"],[9,"FxaaTexOffGreen4",["t","p","o"],"textureGatherOffset ( t , p , o , 1 )"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_GLSL_130","==",1,569],[0,"\n\n"],[9,"FxaaTexTop",["t","p"],"textureLod ( t , p , 0.0 )"],[0,"\n\n"],[9,"FxaaTexOff",["t","p","o","r"],"textureLodOffset ( t , p , 0.0 , o )"],[0,"\n\n"],[3,"FXAA_GATHER4_ALPHA","==",1,567],[0,"\n\n"],[9,"FxaaTexAlpha4",["t","p"],"textureGather ( t , p , 3 )"],[0,"\n\n"],[9,"FxaaTexOffAlpha4",["t","p","o"],"textureGatherOffset ( t , p , o , 3 )"],[0,"\n\n"],[9,"FxaaTexGreen4",["t","p"],"textureGather ( t , p , 1 )"],[0,"\n\n"],[9,"FxaaTexOffGreen4",["t","p","o"],"textureGatherOffset ( t , p , o , 1 )"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[3,"FXAA_GREEN_AS_LUMA","==",0,573],[0,"\nFxaaFloat FxaaLuma ( FxaaFloat4 rgba ) { return dot ( rgba.xyz , FxaaFloat3(0.299, 0.587, 0.114) ) ; }\n\n"],[5,575],[0,"\nFxaaFloat FxaaLuma ( FxaaFloat4 rgba ) { return rgba.y ; }\n\n"],[6],[0,"\n\n"],[3,"FXAA_PC","==",1,669],[0,"\nFxaaFloat4 FxaaPixelShader ( FxaaFloat2 pos, FxaaFloat4 rgbyM, FxaaTex tex, FxaaFloat2 fxaaQualityRcpFrame, FxaaFloat fxaaQualitySubpix, FxaaFloat fxaaQualityEdgeThreshold, FxaaFloat fxaaQualityEdgeThresholdMin ) { FxaaFloat2 posM ;\nposM.x = pos.x ;\nposM.y = pos.y ;\n\n"],[3,"FXAA_GATHER4_ALPHA","==",1,607],[0," \n"],[3,"FXAA_DISCARD","==",0,583],[0," FxaaFloat lumaM = FxaaLuma(rgbyM) ; \n"],[6],[0,"\n\n"],[3,"FXAA_GREEN_AS_LUMA","==",0,587],[0," FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM) ;\nFxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(- 1, - 1)) ; \n"],[5,589],[0," FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM) ;\nFxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(- 1, - 1)) ; \n"],[6],[0,"\n\n"],[3,"FXAA_DISCARD","==",1,593],[0," FxaaFloat lumaM = luma4A.w ; \n"],[6],[0,"\n\n"],[8,"lumaE","luma4A.z"],[0,"\n\n"],[8,"lumaS","luma4A.x"],[0,"\n\n"],[8,"lumaSE","luma4A.y"],[0,"\n\n"],[8,"lumaNW","luma4B.w"],[0,"\n\n"],[8,"lumaN","luma4B.z"],[0,"\n\n"],[8,"lumaW","luma4B.x"],[0," \n"],[5,609],[0," FxaaFloat lumaM = FxaaLuma(rgbyM) ;\nFxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(0, 1), fxaaQualityRcpFrame.xy)) ;\nFxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, 0), fxaaQualityRcpFrame.xy)) ;\nFxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(0, - 1), fxaaQualityRcpFrame.xy)) ;\nFxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(- 1, 0), fxaaQualityRcpFrame.xy)) ; \n"],[6],[0,"\nFxaaFloat maxSM = max ( lumaS , lumaM ) ;\nFxaaFloat minSM = min ( lumaS , lumaM ) ;\nFxaaFloat maxESM = max ( lumaE , maxSM ) ;\nFxaaFloat minESM = min ( lumaE , minSM ) ;\nFxaaFloat maxWN = max ( lumaN , lumaW ) ;\nFxaaFloat minWN = min ( lumaN , lumaW ) ;\nFxaaFloat rangeMax = max ( maxWN , maxESM ) ;\nFxaaFloat rangeMin = min ( minWN , minESM ) ;\nFxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold ;\nFxaaFloat range = rangeMax - rangeMin ;\nFxaaFloat rangeMaxClamped = max ( fxaaQualityEdgeThresholdMin , rangeMaxScaled ) ;\nFxaaBool earlyExit = range < rangeMaxClamped ;\nif ( earlyExit ) \n"],[3,"FXAA_DISCARD","==",1,613],[0," FxaaDiscard ; \n"],[5,615],[0," return rgbyM ; \n"],[6],[0,"\n\n"],[3,"FXAA_GATHER4_ALPHA","==",0,619],[0," FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(- 1, - 1), fxaaQualityRcpFrame.xy)) ;\nFxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, 1), fxaaQualityRcpFrame.xy)) ;\nFxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, - 1), fxaaQualityRcpFrame.xy)) ;\nFxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(- 1, 1), fxaaQualityRcpFrame.xy)) ; \n"],[5,621],[0," FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, - 1), fxaaQualityRcpFrame.xy)) ;\nFxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(- 1, 1), fxaaQualityRcpFrame.xy)) ; \n"],[6],[0,"\nFxaaFloat lumaNS = lumaN + lumaS ;\nFxaaFloat lumaWE = lumaW + lumaE ;\nFxaaFloat subpixRcpRange = 1.0 / range ;\nFxaaFloat subpixNSWE = lumaNS + lumaWE ;\nFxaaFloat edgeHorz1 = ( - 2.0 * lumaM ) + lumaNS ;\nFxaaFloat edgeVert1 = ( - 2.0 * lumaM ) + lumaWE ;\nFxaaFloat lumaNESE = lumaNE + lumaSE ;\nFxaaFloat lumaNWNE = lumaNW + lumaNE ;\nFxaaFloat edgeHorz2 = ( - 2.0 * lumaE ) + lumaNESE ;\nFxaaFloat edgeVert2 = ( - 2.0 * lumaN ) + lumaNWNE ;\nFxaaFloat lumaNWSW = lumaNW + lumaSW ;\nFxaaFloat lumaSWSE = lumaSW + lumaSE ;\nFxaaFloat edgeHorz4 = ( abs ( edgeHorz1 ) * 2.0 ) + abs ( edgeHorz2 ) ;\nFxaaFloat edgeVert4 = ( abs ( edgeVert1 ) * 2.0 ) + abs ( edgeVert2 ) ;\nFxaaFloat edgeHorz3 = ( - 2.0 * lumaW ) + lumaNWSW ;\nFxaaFloat edgeVert3 = ( - 2.0 * lumaS ) + lumaSWSE ;\nFxaaFloat edgeHorz = abs ( edgeHorz3 ) + edgeHorz4 ;\nFxaaFloat edgeVert = abs ( edgeVert3 ) + edgeVert4 ;\nFxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE ;\nFxaaFloat lengthSign = fxaaQualityRcpFrame.x ;\nFxaaBool horzSpan = edgeHorz >= edgeVert ;\nFxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE ;\nif ( ! horzSpan ) lumaN = lumaW ;\nif ( ! horzSpan ) lumaS = lumaE ;\nif ( horzSpan ) lengthSign = fxaaQualityRcpFrame.y ;\nFxaaFloat subpixB = ( subpixA * ( 1.0 / 12.0 ) ) - lumaM ;\nFxaaFloat gradientN = lumaN - lumaM ;\nFxaaFloat gradientS = lumaS - lumaM ;\nFxaaFloat lumaNN = lumaN + lumaM ;\nFxaaFloat lumaSS = lumaS + lumaM ;\nFxaaBool pairN = abs ( gradientN ) >= abs ( gradientS ) ;\nFxaaFloat gradient = max ( abs ( gradientN ) , abs ( gradientS ) ) ;\nif ( pairN ) lengthSign = - lengthSign ;\nFxaaFloat subpixC = FxaaSat(abs ( subpixB ) * subpixRcpRange) ;\nFxaaFloat2 posB ;\nposB.x = posM.x ;\nposB.y = posM.y ;\nFxaaFloat2 offNP ;\noffNP.x = ( ! horzSpan ) ? 0.0 : fxaaQualityRcpFrame.x ;\noffNP.y = ( horzSpan ) ? 0.0 : fxaaQualityRcpFrame.y ;\nif ( ! horzSpan ) posB.x += lengthSign * 0.5 ;\nif ( horzSpan ) posB.y += lengthSign * 0.5 ;\nFxaaFloat2 posN ;\nposN.x = posB.x - offNP.x * FXAA_QUALITY_P0 ;\nposN.y = posB.y - offNP.y * FXAA_QUALITY_P0 ;\nFxaaFloat2 posP ;\nposP.x = posB.x + offNP.x * FXAA_QUALITY_P0 ;\nposP.y = posB.y + offNP.y * FXAA_QUALITY_P0 ;\nFxaaFloat subpixD = ( ( - 2.0 ) * subpixC ) + 3.0 ;\nFxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN)) ;\nFxaaFloat subpixE = subpixC * subpixC ;\nFxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP)) ;\nif ( ! pairN ) lumaNN = lumaSS ;\nFxaaFloat gradientScaled = gradient * 1.0 / 4.0 ;\nFxaaFloat lumaMM = lumaM - lumaNN * 0.5 ;\nFxaaFloat subpixF = subpixD * subpixE ;\nFxaaBool lumaMLTZero = lumaMM < 0.0 ;\nlumaEndN -= lumaNN * 0.5 ;\nlumaEndP -= lumaNN * 0.5 ;\nFxaaBool doneN = abs ( lumaEndN ) >= gradientScaled ;\nFxaaBool doneP = abs ( lumaEndP ) >= gradientScaled ;\nif ( ! doneN ) posN.x -= offNP.x * FXAA_QUALITY_P1 ;\nif ( ! doneN ) posN.y -= offNP.y * FXAA_QUALITY_P1 ;\nFxaaBool doneNP = ( ! doneN ) || ( ! doneP ) ;\nif ( ! doneP ) posP.x += offNP.x * FXAA_QUALITY_P1 ;\nif ( ! doneP ) posP.y += offNP.y * FXAA_QUALITY_P1 ;\nif ( doneNP ) { if ( ! doneN ) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)) ;\nif ( ! doneP ) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)) ;\nif ( ! doneN ) lumaEndN = lumaEndN - lumaNN * 0.5 ;\nif ( ! doneP ) lumaEndP = lumaEndP - lumaNN * 0.5 ;\ndoneN = abs ( lumaEndN ) >= gradientScaled ;\ndoneP = abs ( lumaEndP ) >= gradientScaled ;\nif ( ! doneN ) posN.x -= offNP.x * FXAA_QUALITY_P2 ;\nif ( ! doneN ) posN.y -= offNP.y * FXAA_QUALITY_P2 ;\ndoneNP = ( ! doneN ) || ( ! doneP ) ;\nif ( ! doneP ) posP.x += offNP.x * FXAA_QUALITY_P2 ;\nif ( ! doneP ) posP.y += offNP.y * FXAA_QUALITY_P2 ;\n\n"],[3,"FXAA_QUALITY_PS",">",3,661],[0," if ( doneNP ) { if ( ! doneN ) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)) ;\nif ( ! doneP ) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)) ;\nif ( ! doneN ) lumaEndN = lumaEndN - lumaNN * 0.5 ;\nif ( ! doneP ) lumaEndP = lumaEndP - lumaNN * 0.5 ;\ndoneN = abs ( lumaEndN ) >= gradientScaled ;\ndoneP = abs ( lumaEndP ) >= gradientScaled ;\nif ( ! doneN ) posN.x -= offNP.x * FXAA_QUALITY_P3 ;\nif ( ! doneN ) posN.y -= offNP.y * FXAA_QUALITY_P3 ;\ndoneNP = ( ! doneN ) || ( ! doneP ) ;\nif ( ! doneP ) posP.x += offNP.x * FXAA_QUALITY_P3 ;\nif ( ! doneP ) posP.y += offNP.y * FXAA_QUALITY_P3 ;\n\n"],[3,"FXAA_QUALITY_PS",">",4,659],[0," if ( doneNP ) { if ( ! doneN ) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)) ;\nif ( ! doneP ) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)) ;\nif ( ! doneN ) lumaEndN = lumaEndN - lumaNN * 0.5 ;\nif ( ! doneP ) lumaEndP = lumaEndP - lumaNN * 0.5 ;\ndoneN = abs ( lumaEndN ) >= gradientScaled ;\ndoneP = abs ( lumaEndP ) >= gradientScaled ;\nif ( ! doneN ) posN.x -= offNP.x * FXAA_QUALITY_P4 ;\nif ( ! doneN ) posN.y -= offNP.y * FXAA_QUALITY_P4 ;\ndoneNP = ( ! doneN ) || ( ! doneP ) ;\nif ( ! doneP ) posP.x += offNP.x * FXAA_QUALITY_P4 ;\nif ( ! doneP ) posP.y += offNP.y * FXAA_QUALITY_P4 ;\n\n"],[3,"FXAA_QUALITY_PS",">",5,657],[0," if ( doneNP ) { if ( ! doneN ) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)) ;\nif ( ! doneP ) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)) ;\nif ( ! doneN ) lumaEndN = lumaEndN - lumaNN * 0.5 ;\nif ( ! doneP ) lumaEndP = lumaEndP - lumaNN * 0.5 ;\ndoneN = abs ( lumaEndN ) >= gradientScaled ;\ndoneP = abs ( lumaEndP ) >= gradientScaled ;\nif ( ! doneN ) posN.x -= offNP.x * FXAA_QUALITY_P5 ;\nif ( ! doneN ) posN.y -= offNP.y * FXAA_QUALITY_P5 ;\ndoneNP = ( ! doneN ) || ( ! doneP ) ;\nif ( ! doneP ) posP.x += offNP.x * FXAA_QUALITY_P5 ;\nif ( ! doneP ) posP.y += offNP.y * FXAA_QUALITY_P5 ;\n\n"],[3,"FXAA_QUALITY_PS",">",6,655],[0," if ( doneNP ) { if ( ! doneN ) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)) ;\nif ( ! doneP ) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)) ;\nif ( ! doneN ) lumaEndN = lumaEndN - lumaNN * 0.5 ;\nif ( ! doneP ) lumaEndP = lumaEndP - lumaNN * 0.5 ;\ndoneN = abs ( lumaEndN ) >= gradientScaled ;\ndoneP = abs ( lumaEndP ) >= gradientScaled ;\nif ( ! doneN ) posN.x -= offNP.x * FXAA_QUALITY_P6 ;\nif ( ! doneN ) posN.y -= offNP.y * FXAA_QUALITY_P6 ;\ndoneNP = ( ! doneN ) || ( ! doneP ) ;\nif ( ! doneP ) posP.x += offNP.x * FXAA_QUALITY_P6 ;\nif ( ! doneP ) posP.y += offNP.y * FXAA_QUALITY_P6 ;\n\n"],[3,"FXAA_QUALITY_PS",">",7,653],[0," if ( doneNP ) { if ( ! doneN ) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)) ;\nif ( ! doneP ) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)) ;\nif ( ! doneN ) lumaEndN = lumaEndN - lumaNN * 0.5 ;\nif ( ! doneP ) lumaEndP = lumaEndP - lumaNN * 0.5 ;\ndoneN = abs ( lumaEndN ) >= gradientScaled ;\ndoneP = abs ( lumaEndP ) >= gradientScaled ;\nif ( ! doneN ) posN.x -= offNP.x * FXAA_QUALITY_P7 ;\nif ( ! doneN ) posN.y -= offNP.y * FXAA_QUALITY_P7 ;\ndoneNP = ( ! doneN ) || ( ! doneP ) ;\nif ( ! doneP ) posP.x += offNP.x * FXAA_QUALITY_P7 ;\nif ( ! doneP ) posP.y += offNP.y * FXAA_QUALITY_P7 ;\n\n"],[3,"FXAA_QUALITY_PS",">",8,651],[0," if ( doneNP ) { if ( ! doneN ) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)) ;\nif ( ! doneP ) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)) ;\nif ( ! doneN ) lumaEndN = lumaEndN - lumaNN * 0.5 ;\nif ( ! doneP ) lumaEndP = lumaEndP - lumaNN * 0.5 ;\ndoneN = abs ( lumaEndN ) >= gradientScaled ;\ndoneP = abs ( lumaEndP ) >= gradientScaled ;\nif ( ! doneN ) posN.x -= offNP.x * FXAA_QUALITY_P8 ;\nif ( ! doneN ) posN.y -= offNP.y * FXAA_QUALITY_P8 ;\ndoneNP = ( ! doneN ) || ( ! doneP ) ;\nif ( ! doneP ) posP.x += offNP.x * FXAA_QUALITY_P8 ;\nif ( ! doneP ) posP.y += offNP.y * FXAA_QUALITY_P8 ;\n\n"],[3,"FXAA_QUALITY_PS",">",9,649],[0," if ( doneNP ) { if ( ! doneN ) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)) ;\nif ( ! doneP ) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)) ;\nif ( ! doneN ) lumaEndN = lumaEndN - lumaNN * 0.5 ;\nif ( ! doneP ) lumaEndP = lumaEndP - lumaNN * 0.5 ;\ndoneN = abs ( lumaEndN ) >= gradientScaled ;\ndoneP = abs ( lumaEndP ) >= gradientScaled ;\nif ( ! doneN ) posN.x -= offNP.x * FXAA_QUALITY_P9 ;\nif ( ! doneN ) posN.y -= offNP.y * FXAA_QUALITY_P9 ;\ndoneNP = ( ! doneN ) || ( ! doneP ) ;\nif ( ! doneP ) posP.x += offNP.x * FXAA_QUALITY_P9 ;\nif ( ! doneP ) posP.y += offNP.y * FXAA_QUALITY_P9 ;\n\n"],[3,"FXAA_QUALITY_PS",">",10,647],[0," if ( doneNP ) { if ( ! doneN ) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)) ;\nif ( ! doneP ) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)) ;\nif ( ! doneN ) lumaEndN = lumaEndN - lumaNN * 0.5 ;\nif ( ! doneP ) lumaEndP = lumaEndP - lumaNN * 0.5 ;\ndoneN = abs ( lumaEndN ) >= gradientScaled ;\ndoneP = abs ( lumaEndP ) >= gradientScaled ;\nif ( ! doneN ) posN.x -= offNP.x * FXAA_QUALITY_P10 ;\nif ( ! doneN ) posN.y -= offNP.y * FXAA_QUALITY_P10 ;\ndoneNP = ( ! doneN ) || ( ! doneP ) ;\nif ( ! doneP ) posP.x += offNP.x * FXAA_QUALITY_P10 ;\nif ( ! doneP ) posP.y += offNP.y * FXAA_QUALITY_P10 ;\n\n"],[3,"FXAA_QUALITY_PS",">",11,645],[0," if ( doneNP ) { if ( ! doneN ) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)) ;\nif ( ! doneP ) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)) ;\nif ( ! doneN ) lumaEndN = lumaEndN - lumaNN * 0.5 ;\nif ( ! doneP ) lumaEndP = lumaEndP - lumaNN * 0.5 ;\ndoneN = abs ( lumaEndN ) >= gradientScaled ;\ndoneP = abs ( lumaEndP ) >= gradientScaled ;\nif ( ! doneN ) posN.x -= offNP.x * FXAA_QUALITY_P11 ;\nif ( ! doneN ) posN.y -= offNP.y * FXAA_QUALITY_P11 ;\ndoneNP = ( ! doneN ) || ( ! doneP ) ;\nif ( ! doneP ) posP.x += offNP.x * FXAA_QUALITY_P11 ;\nif ( ! doneP ) posP.y += offNP.y * FXAA_QUALITY_P11 ;\n\n"],[3,"FXAA_QUALITY_PS",">",12,643],[0," if ( doneNP ) { if ( ! doneN ) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)) ;\nif ( ! doneP ) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)) ;\nif ( ! doneN ) lumaEndN = lumaEndN - lumaNN * 0.5 ;\nif ( ! doneP ) lumaEndP = lumaEndP - lumaNN * 0.5 ;\ndoneN = abs ( lumaEndN ) >= gradientScaled ;\ndoneP = abs ( lumaEndP ) >= gradientScaled ;\nif ( ! doneN ) posN.x -= offNP.x * FXAA_QUALITY_P12 ;\nif ( ! doneN ) posN.y -= offNP.y * FXAA_QUALITY_P12 ;\ndoneNP = ( ! doneN ) || ( ! doneP ) ;\nif ( ! doneP ) posP.x += offNP.x * FXAA_QUALITY_P12 ;\nif ( ! doneP ) posP.y += offNP.y * FXAA_QUALITY_P12 ; } \n"],[6],[0," } \n"],[6],[0," } \n"],[6],[0," } \n"],[6],[0," } \n"],[6],[0," } \n"],[6],[0," } \n"],[6],[0," } \n"],[6],[0," } \n"],[6],[0," } \n"],[6],[0," }\nFxaaFloat dstN = posM.x - posN.x ;\nFxaaFloat dstP = posP.x - posM.x ;\nif ( ! horzSpan ) dstN = posM.y - posN.y ;\nif ( ! horzSpan ) dstP = posP.y - posM.y ;\nFxaaBool goodSpanN = ( lumaEndN < 0.0 ) != lumaMLTZero ;\nFxaaFloat spanLength = ( dstP + dstN ) ;\nFxaaBool goodSpanP = ( lumaEndP < 0.0 ) != lumaMLTZero ;\nFxaaFloat spanLengthRcp = 1.0 / spanLength ;\nFxaaBool directionN = dstN < dstP ;\nFxaaFloat dst = min ( dstN , dstP ) ;\nFxaaBool goodSpan = directionN ? goodSpanN : goodSpanP ;\nFxaaFloat subpixG = subpixF * subpixF ;\nFxaaFloat pixelOffset = ( dst * ( - spanLengthRcp ) ) + 0.5 ;\nFxaaFloat subpixH = subpixG * fxaaQualitySubpix ;\nFxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0 ;\nFxaaFloat pixelOffsetSubpix = max ( pixelOffsetGood , subpixH ) ;\nif ( ! horzSpan ) posM.x += pixelOffsetSubpix * lengthSign ;\nif ( horzSpan ) posM.y += pixelOffsetSubpix * lengthSign ;\n\n"],[3,"FXAA_DISCARD","==",1,665],[0," return FxaaTexTop(tex, posM) ; \n"],[5,667],[0," return FxaaTexTop(tex, posM) ; \n"],[6],[0," }\n\n"],[6],[0,"\nconst FxaaFloat FXAA_SUBPIXEL_BLEND_AMOUNT = 0.75;\nconst FxaaFloat FXAA_RELATIVE_CONTRAST_THRESHOLD = 0.166;\nconst FxaaFloat FXAA_ABSOLUTE_CONTRAST_THRESHOLD = 0.0833;\nuniform sampler2D renderer_BlitTexture;\nuniform vec4 renderer_texelSize;\nvec4 applyFXAA ( vec4 color, vec2 positionNDC, vec4 sourceSize, sampler2D blitTexture ) { return FxaaPixelShader(positionNDC, color, blitTexture, sourceSize.xy, FXAA_SUBPIXEL_BLEND_AMOUNT, FXAA_RELATIVE_CONTRAST_THRESHOLD, FXAA_ABSOLUTE_CONTRAST_THRESHOLD) ; }\nvoid main() { mediump vec4 color = texture2D ( renderer_BlitTexture , v_uv ) ;\ncolor = applyFXAA(color, v_uv, renderer_texelSize, renderer_BlitTexture) ;\n\n"],[2,"ENGINE_OUTPUT_SRGB_CORRECT",673],[0," color.rgb /= color.a ;\ncolor = sRGBToLinear(color) ;\ncolor.rgb *= color.a ; \n"],[6],[0,"\ngl_FragColor = color ; }\n\n"],[6]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/PostProcess/FinalSRGB.shaderc b/packages/shader/compiledShaders/PostProcess/FinalSRGB.shaderc deleted file mode 100644 index 8e3c0bc453..0000000000 --- a/packages/shader/compiledShaders/PostProcess/FinalSRGB.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"PostProcess/FinalSRGB","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"0","isUsePass":false,"tags":{},"renderStates":{"constantMap":{"10":false,"11":false},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nattribute vec4 POSITION_UV;\n\nvarying vec2 v_uv;\n\nvoid main() { \ngl_Position = vec4 ( POSITION_UV.xy , 0.0 , 1.0 ) ;\nv_uv = POSITION_UV.zw ;\n }\n\n"],[6],[0,"\n\n"],[2,"FINAL_SRGB",42],[0,"\n\n"],[7,"FINAL_SRGB"],[0,"\n\n"],[2,"COMMON_INCLUDED",40],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",34],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,38],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6]],"fragmentShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nvarying vec2 v_uv;\n\n\n"],[6],[0,"\n\n"],[2,"FINAL_SRGB",46],[0,"\n\n"],[7,"FINAL_SRGB"],[0,"\n\n"],[2,"COMMON_INCLUDED",44],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nfloat linearToSRGB ( float value ) { value = max ( value , 0.0 ) ;\nreturn ( value <= 0.0031308 ) ? ( value * 12.9232102 ) : 1.055 * pow ( value , 1.0 / 2.4 ) - 0.055 ; }\nvec4 linearToSRGB ( vec4 value ) { return vec4 ( linearToSRGB(value.r) , linearToSRGB(value.g) , linearToSRGB(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",32],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",38],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,42],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nuniform mediump sampler2D renderer_BlitTexture;\nvoid main() { mediump vec4 color = texture2DSRGB(renderer_BlitTexture, v_uv) ;\ncolor.rgb = color.rgb / color.a ;\ncolor = linearToSRGB(color) ;\ngl_FragColor = vec4 ( color.rgb * color.a , color.a ) ; }\n\n"],[6]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/PostProcess/Uber.shaderc b/packages/shader/compiledShaders/PostProcess/Uber.shaderc deleted file mode 100644 index f6c2fc240a..0000000000 --- a/packages/shader/compiledShaders/PostProcess/Uber.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"PostProcess/Uber","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"0","isUsePass":false,"tags":{},"renderStates":{"constantMap":{"10":false,"11":false},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nattribute vec4 POSITION_UV;\n\nvarying vec2 v_uv;\n\nvoid main() { \ngl_Position = vec4 ( POSITION_UV.xy , 0.0 , 1.0 ) ;\nv_uv = POSITION_UV.zw ;\n }\n\n"],[6],[0,"\n\n"],[2,"UBER_POST",108],[0,"\n\n"],[7,"UBER_POST"],[0,"\n\n"],[2,"POST_COMMON",52],[0,"\n\n"],[7,"POST_COMMON"],[0,"\n\n"],[2,"COMMON_INCLUDED",44],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",38],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,42],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[8,"FLT_MIN","1.175494351e-38"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_MAX","65504.0"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FILTERING",58],[0,"\n\n"],[7,"FILTERING"],[0,"\n\n"],[6],[0,"\n\n"],[2,"NEUTRAL_TONEMAPPING",66],[0,"\n\n"],[7,"NEUTRAL_TONEMAPPING"],[0,"\n\n"],[8,"TONEMAPPING_CLAMP_MAX","435.18712"],[0,"\n\n"],[6],[0,"\n\n"],[2,"ACES_TONEMAPPING",102],[0,"\n\n"],[7,"ACES_TONEMAPPING"],[0,"\n\n"],[2,"COLOR_TRANSFORM",76],[0,"\n\n"],[7,"COLOR_TRANSFORM"],[0,"\n\n"],[6],[0,"\n\n"],[2,"RRT_GLSL",88],[0,"\n\n"],[7,"RRT_GLSL"],[0,"\n\n"],[2,"TONE_SCALE",86],[0,"\n\n"],[7,"TONE_SCALE"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"ODT_GLSL",100],[0,"\n\n"],[7,"ODT_GLSL"],[0,"\n\n"],[2,"TONE_SCALE",98],[0,"\n\n"],[7,"TONE_SCALE"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[1,"ENABLE_EFFECT_BLOOM",106],[0,"\n\n"],[6],[0,"\n\n"],[6]],"fragmentShaderInstructions":[[0,"\n"],[2,"BLIT_VERTEX_INCLUDED",6],[0,"\n\n"],[7,"BLIT_VERTEX_INCLUDED"],[0,"\nvarying vec2 v_uv;\n\n\n"],[6],[0,"\n\n"],[2,"UBER_POST",141],[0,"\n\n"],[7,"UBER_POST"],[0,"\n\n"],[2,"POST_COMMON",56],[0,"\n\n"],[7,"POST_COMMON"],[0,"\n\n"],[2,"COMMON_INCLUDED",48],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",36],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",42],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,46],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[8,"FLT_MIN","1.175494351e-38"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_MAX","65504.0"],[0,"\nfloat min3 ( vec3 val ) { return min ( min ( val.x , val.y ) , val.z ) ; }\nfloat max3 ( vec3 val ) { return max ( max ( val.x , val.y ) , val.z ) ; }\n\n"],[6],[0,"\n\n"],[2,"FILTERING",62],[0,"\n\n"],[7,"FILTERING"],[0,"\nvec2 bSpline3MiddleLeft ( vec2 x ) { return 0.16666667 + x * ( 0.5 + x * ( 0.5 - x * 0.5 ) ) ; }\nvec2 bSpline3MiddleRight ( vec2 x ) { return 0.66666667 + x * ( - 1.0 + 0.5 * x ) * x ; }\nvec2 bSpline3Rightmost ( vec2 x ) { return 0.16666667 + x * ( - 0.5 + x * ( 0.5 - x * 0.16666667 ) ) ; }\nvoid bicubicFilter ( vec2 fracCoord, out vec2 weights [ 2 ], out vec2 offsets [ 2 ] ) { vec2 r = bSpline3Rightmost(fracCoord) ;\nvec2 mr = bSpline3MiddleRight(fracCoord) ;\nvec2 ml = bSpline3MiddleLeft(fracCoord) ;\nvec2 l = 1.0 - mr - ml - r ;\nweights[0] = r + mr ;\nweights[1] = ml + l ;\noffsets[0] = - 1.0 + mr / weights[0] ;\noffsets[1] = 1.0 + l / weights[1] ; }\nvec4 sampleTexture2DBicubic ( sampler2D tex, vec2 coord, vec4 texSize ) { vec2 xy = coord * texSize.zw + 0.5 ;\nvec2 ic = floor ( xy ) ;\nvec2 fc = fract ( xy ) ;\nvec2 weights [ 2 ] , offsets [ 2 ] ;\nbicubicFilter(fc, weights, offsets) ;\nreturn weights[0].y * ( weights[0].x * texture2DSRGB(tex, ( ic + vec2 ( offsets[0].x , offsets[0].y ) - 0.5 ) * texSize.xy) + weights[1].x * texture2DSRGB(tex, ( ic + vec2 ( offsets[1].x , offsets[0].y ) - 0.5 ) * texSize.xy) ) + weights[1].y * ( weights[0].x * texture2DSRGB(tex, ( ic + vec2 ( offsets[0].x , offsets[1].y ) - 0.5 ) * texSize.xy) + weights[1].x * texture2DSRGB(tex, ( ic + vec2 ( offsets[1].x , offsets[1].y ) - 0.5 ) * texSize.xy) ) ; }\n\n"],[6],[0,"\n\n"],[2,"NEUTRAL_TONEMAPPING",74],[0,"\n\n"],[7,"NEUTRAL_TONEMAPPING"],[0,"\nvec3 neutralCurve ( vec3 x, float a, float b, float c, float d, float e, float f ) { return vec3 ( ( ( x * ( a * x + c * b ) + d * e ) / ( x * ( a * x + b ) + d * f ) ) - e / f ) ; }\n\n"],[8,"TONEMAPPING_CLAMP_MAX","435.18712"],[0,"\nvec3 neutralTonemap ( vec3 color ) { const float a = 0.2 ;\nconst float b = 0.29 ;\nconst float c = 0.24 ;\nconst float d = 0.272 ;\nconst float e = 0.02 ;\nconst float f = 0.3 ;\n\n"],[2,"GL_FRAGMENT_PRECISION_HIGH",72],[0," color = min ( color , TONEMAPPING_CLAMP_MAX ) ; \n"],[6],[0,"\nconst float whiteScale = 1.31338 ;\ncolor = neutralCurve(color * whiteScale, a, b, c, d, e, f) ;\ncolor *= whiteScale ;\nreturn color ; }\n\n"],[6],[0,"\n\n"],[2,"ACES_TONEMAPPING",110],[0,"\n\n"],[7,"ACES_TONEMAPPING"],[0,"\n\n"],[2,"COLOR_TRANSFORM",84],[0,"\n\n"],[7,"COLOR_TRANSFORM"],[0,"\nconst mediump mat3 sRGB_2_AP0 = mat3 ( 0.4397010 , 0.0897923 , 0.0175440 , 0.3829780 , 0.8134230 , 0.1115440 , 0.1773350 , 0.0967616 , 0.8707040 );\nconst mediump mat3 AP0_2_AP1_MAT = mat3 ( vec3 ( 1.4514393161 , - 0.0765537734 , 0.0083161484 ) , vec3 ( - 0.2365107469 , 1.1762296998 , - 0.0060324498 ) , vec3 ( - 0.2149285693 , - 0.0996759264 , 0.9977163014 ) );\nconst mediump mat3 AP1_2_XYZ_MAT = mat3 ( vec3 ( 0.6624541811 , 0.2722287168 , - 0.0055746495 ) , vec3 ( 0.1340042065 , 0.6740817658 , 0.0040607335 ) , vec3 ( 0.1561876870 , 0.0536895174 , 1.0103391003 ) );\nconst mediump mat3 XYZ_2_AP1_MAT = mat3 ( vec3 ( 1.6410233797 , - 0.6636628587 , 0.0117218943 ) , vec3 ( - 0.3248032942 , 1.6153315917 , - 0.0082844420 ) , vec3 ( - 0.2364246952 , 0.0167563477 , 0.9883948585 ) );\nconst mediump mat3 D60_2_D65_CAT = mat3 ( vec3 ( 0.987224 , - 0.00759836 , 0.00307257 ) , vec3 ( - 0.00611327 , 1.00186 , - 0.00509595 ) , vec3 ( 0.0159533 , 0.00533002 , 1.08168 ) );\nconst mediump mat3 XYZ_2_REC709_MAT = mat3 ( vec3 ( 3.2409699419 , - 0.9692436363 , 0.0556300797 ) , vec3 ( - 1.5373831776 , 1.8759675015 , - 0.2039769589 ) , vec3 ( - 0.498610760 , 0.0415550574 , 1.0569715142 ) );\nconst mediump vec3 AP1_RGB2Y = vec3 ( 0.2722287168 , 0.6740817658 , 0.0536895174 );\nmediump float rgb_2_saturation ( mediump vec3 rgb ) { const mediump float TINY = 1e-4 ;\nmediump float mi = min3(rgb) ;\nmediump float ma = max3(rgb) ;\nreturn ( max ( ma , TINY ) - max ( mi , TINY ) ) / max ( ma , 1e-2 ) ; }\nmediump float rgb_2_yc ( mediump vec3 rgb ) { const mediump float ycRadiusWeight = 1.75 ;\nmediump float r = rgb.x ;\nmediump float g = rgb.y ;\nmediump float b = rgb.z ;\nmediump float k = b * ( b - g ) + g * ( g - r ) + r * ( r - b ) ;\nk = max ( k , 0.0 ) ;\nfloat chroma = k == 0.0 ? 0.0 : sqrt ( k ) ;\nreturn ( b + g + r + ycRadiusWeight * chroma ) / 3.0 ; }\nmediump float rgb_2_hue ( mediump vec3 rgb ) { mediump float hue ;\nif ( rgb.x == rgb.y && rgb.y == rgb.z ) { hue = 0.0 ; } else { hue = ( 180.0 / PI ) * atan ( sqrt ( 3.0 ) * ( rgb.y - rgb.z ) , 2.0 * rgb.x - rgb.y - rgb.z ) ; }\nif ( hue < 0.0 ) { hue = hue + 360.0 ; }\nreturn hue ; }\nmediump float center_hue ( mediump float hue, mediump float centerH ) { mediump float hueCentered = hue - centerH ;\nif ( hueCentered < - 180.0 ) { hueCentered = hueCentered + 360.0 ; } else if ( hueCentered > 180.0 ) { hueCentered = hueCentered - 360.0 ; }\nreturn hueCentered ; }\n\n"],[6],[0,"\n\n"],[2,"RRT_GLSL",96],[0,"\n\n"],[7,"RRT_GLSL"],[0,"\n\n"],[2,"TONE_SCALE",94],[0,"\n\n"],[7,"TONE_SCALE"],[0,"\n\n"],[6],[0,"\nmediump float sigmoid_shaper ( mediump float x ) { mediump float t = max ( 1.0 - abs ( x / 2.0 ) , 0.0 ) ;\nmediump float y = 1.0 + sign ( x ) * ( 1.0 - t * t ) ;\nreturn y * 0.5 ; }\nmediump float glow_fwd ( mediump float ycIn, mediump float glowGainIn, mediump float glowMid ) { mediump float glowGainOut ;\nif ( ycIn <= 2.0 / 3.0 * glowMid ) { glowGainOut = glowGainIn ; } else if ( ycIn >= 2.0 * glowMid ) { glowGainOut = 0.0 ; } else { glowGainOut = glowGainIn * ( glowMid / ycIn - 1.0 / 2.0 ) ; }\nreturn glowGainOut ; }\nconst mediump float RRT_GLOW_GAIN = 0.05;\nconst mediump float RRT_GLOW_MID = 0.08;\nconst mediump float RRT_RED_SCALE = 0.82;\nconst mediump float RRT_RED_PIVOT = 0.03;\nconst mediump float RRT_RED_HUE = 0.0;\nconst mediump float RRT_RED_WIDTH = 135.0;\nconst mediump float RRT_SAT_FACTOR = 0.96;\n\n"],[6],[0,"\n\n"],[2,"ODT_GLSL",108],[0,"\n\n"],[7,"ODT_GLSL"],[0,"\n\n"],[2,"TONE_SCALE",106],[0,"\n\n"],[7,"TONE_SCALE"],[0,"\n\n"],[6],[0,"\nconst float ODT_SAT_FACTOR = 0.93;\nmediump vec3 XYZ_2_xyY ( mediump vec3 XYZ ) { mediump float divisor = max ( dot ( XYZ , vec3 ( 1.0 ) ) , 1e-4 ) ;\nreturn vec3 ( XYZ.xy / divisor , XYZ.y ) ; }\nmediump vec3 xyY_2_XYZ ( mediump vec3 xyY ) { mediump float m = xyY.z / max ( xyY.y , 1e-4 ) ;\nmediump vec3 XYZ = vec3 ( xyY.xz , ( 1.0 - xyY.x - xyY.y ) ) ;\nXYZ.xz *= m ;\nreturn XYZ ; }\nconst mediump float DIM_SURROUND_GAMMA = 0.9811;\nmediump vec3 darkSurround_to_dimSurround ( mediump vec3 linearCV ) { mediump vec3 XYZ = AP1_2_XYZ_MAT * linearCV ;\nmediump vec3 xyY = XYZ_2_xyY(XYZ) ;\nxyY.z = clamp ( xyY.z , 0.0 , HALF_MAX ) ;\nxyY.z = pow ( xyY.z , DIM_SURROUND_GAMMA ) ;\nXYZ = xyY_2_XYZ(xyY) ;\nreturn XYZ_2_AP1_MAT * XYZ ; }\n\n"],[6],[0,"\nvec3 ACESTonemap ( vec3 color ) { vec3 aces = sRGB_2_AP0 * color ;\nmediump float saturation = rgb_2_saturation(aces) ;\nmediump float ycIn = rgb_2_yc(aces) ;\nmediump float s = sigmoid_shaper(( saturation - 0.4 ) / 0.2) ;\nfloat addedGlow = 1.0 + glow_fwd(ycIn, RRT_GLOW_GAIN * s, RRT_GLOW_MID) ;\naces *= addedGlow ;\nmediump float hue = rgb_2_hue(vec3 ( aces )) ;\nmediump float centeredHue = center_hue(hue, RRT_RED_HUE) ;\nfloat hueWeight = smoothstep ( 0.0 , 1.0 , 1.0 - abs ( 2.0 * centeredHue / RRT_RED_WIDTH ) ) ;\nhueWeight *= hueWeight ;\naces.r += hueWeight * saturation * ( RRT_RED_PIVOT - aces.r ) * ( 1.0 - RRT_RED_SCALE ) ;\nvec3 acescg = max ( AP0_2_AP1_MAT * aces , 0.0 ) ;\nacescg = mix ( vec3 ( dot ( acescg , AP1_RGB2Y ) ) , acescg , RRT_SAT_FACTOR ) ;\nconst float a = 0.0245786 ;\nconst float b = 0.000090537 ;\nconst float c = 0.983729 ;\nconst float d = 0.4329510 ;\nconst float e = 0.238081 ;\nvec3 rcpAcesCG = 1.0 / ( acescg + FLT_MIN ) ;\nmediump vec3 rgbPost = ( acescg + a - b * rcpAcesCG ) / ( acescg * c + d + e * rcpAcesCG ) ;\nvec3 linearCV = darkSurround_to_dimSurround(rgbPost) ;\nlinearCV = mix ( vec3 ( dot ( linearCV , AP1_RGB2Y ) ) , linearCV , ODT_SAT_FACTOR ) ;\nvec3 XYZ = AP1_2_XYZ_MAT * linearCV ;\nXYZ = D60_2_D65_CAT * XYZ ;\nlinearCV = XYZ_2_REC709_MAT * XYZ ;\nreturn linearCV ; }\n\n"],[6],[0,"\nuniform mediump sampler2D renderer_BlitTexture;\nuniform vec4 renderer_texelSize;\n\n"],[1,"ENABLE_EFFECT_BLOOM",114],[0,"\nuniform mediump sampler2D material_BloomTexture;\nuniform mediump sampler2D material_BloomDirtTexture;\nuniform vec4 material_BloomTint;\nuniform vec4 material_BloomDirtTilingOffset;\nuniform vec4 material_BloomIntensityParams;\n\n"],[6],[0,"\nvoid main() { mediump vec4 color = texture2DSRGB(renderer_BlitTexture, v_uv) ;\n\n"],[1,"ENABLE_EFFECT_BLOOM",128],[0," \n"],[1,"BLOOM_HQ",120],[0," mediump vec4 bloom = sampleTexture2DBicubic(material_BloomTexture, v_uv, renderer_texelSize) ; \n"],[5,122],[0," mediump vec4 bloom = texture2DSRGB(material_BloomTexture, v_uv) ; \n"],[6],[0,"\nbloom *= material_BloomIntensityParams.x ;\ncolor += bloom * material_BloomTint ;\n\n"],[1,"BLOOM_DIRT",126],[0," mediump vec4 dirt = texture2DSRGB(material_BloomDirtTexture, v_uv * material_BloomDirtTilingOffset.xy + material_BloomDirtTilingOffset.zw) ;\ndirt *= material_BloomIntensityParams.y ;\ncolor += dirt * bloom ; \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"ENABLE_EFFECT_TONEMAPPING",139],[0," \n"],[3,"TONEMAPPING_MODE","==",0,134],[0," color.rgb = neutralTonemap(color.rgb) ; \n"],[5,137],[3,"TONEMAPPING_MODE","==",1,137],[0," color.rgb = ACESTonemap(color.rgb) ; \n"],[6],[0,"\ncolor.rgb = clamp ( color.rgb , vec3 ( 0 ) , vec3 ( 1 ) ) ; \n"],[6],[0,"\ngl_FragColor = color ; }\n\n"],[6]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/Sky/BackgroundTexture.shaderc b/packages/shader/compiledShaders/Sky/BackgroundTexture.shaderc deleted file mode 100644 index abd689ed7e..0000000000 --- a/packages/shader/compiledShaders/Sky/BackgroundTexture.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"Sky/BackgroundTexture","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"Forward Pass","isUsePass":false,"tags":{"pipelineStage":"Forward"},"renderStates":{"constantMap":{"12":3},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nuniform vec4 camera_ProjectionParams;\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nattribute vec3 POSITION;\nattribute vec2 TEXCOORD_0;\n\nvarying vec2 v_uv;\n\nvoid main() { \ngl_Position = vec4 ( POSITION , 1.0 ) ;\ngl_Position.y *= camera_ProjectionParams.x ;\nv_uv = TEXCOORD_0 ;\n }"]],"fragmentShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",34],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",22],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",28],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,32],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nvarying vec2 v_uv;\n\nuniform sampler2D material_BaseTexture;\nvoid main() { gl_FragColor = texture2DSRGB(material_BaseTexture, v_uv) ; }"]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/Sky/SkyProcedural.shaderc b/packages/shader/compiledShaders/Sky/SkyProcedural.shaderc deleted file mode 100644 index d1558fcaab..0000000000 --- a/packages/shader/compiledShaders/Sky/SkyProcedural.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"Sky/SkyProcedural","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"Forward Pass","isUsePass":false,"tags":{"pipelineStage":"Forward"},"renderStates":{"constantMap":{"12":3,"25":0},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[8,"OUTER_RADIUS","1.025"],[0,"\n\n"],[8,"RAYLEIGH","( mix ( 0.0 , 0.0025 , pow ( material_AtmosphereThickness , 2.5 ) ) )"],[0,"\n\n"],[8,"MIE","0.0010"],[0,"\n\n"],[8,"SUN_BRIGHTNESS","20.0"],[0,"\n\n"],[8,"MAX_SCATTER","50.0"],[0,"\nconst float SKY_GROUND_THRESHOLD = 0.02;\nconst float outerRadius2 = OUTER_RADIUS * OUTER_RADIUS;\nconst float innerRadius = 1.0;\nconst float innerRadius2 = 1.0;\nconst float cameraHeight = 0.0001;\nconst float HDSundiskIntensityFactor = 15.0;\nconst float simpleSundiskIntensityFactor = 27.0;\nconst float sunScale = 400.0 * SUN_BRIGHTNESS;\nconst float kmESun = MIE * SUN_BRIGHTNESS;\nconst float km4PI = MIE * 4.0 * 3.14159265;\nconst float scale = 1.0 / ( OUTER_RADIUS - 1.0 );\nconst float scaleDepth = 0.25;\nconst float scaleOverScaleDepth = ( 1.0 / ( OUTER_RADIUS - 1.0 ) ) / 0.25;\nconst float samples = 2.0;\nconst vec3 c_DefaultScatteringWavelength = vec3 ( 0.65 , 0.57 , 0.475 );\nconst vec3 c_VariableRangeForScatteringWavelength = vec3 ( 0.15 , 0.15 , 0.15 );\nattribute vec4 POSITION;\n\nvarying vec3 v_GroundColor;\nvarying vec3 v_SkyColor;\n\n"],[1,"MATERIAL_SUN_HIGH_QUALITY",44],[0,"varying vec3 v_Vertex;\n\n"],[5,49],[1,"MATERIAL_SUN_SIMPLE",47],[0,"varying vec3 v_RayDir;\n\n"],[5,49],[0,"varying float v_SkyGroundFactor;\n\n"],[6],[0,"\n"],[4,{"t":"or","l":{"t":"def","m":"MATERIAL_SUN_HIGH_QUALITY"},"r":{"t":"def","m":"MATERIAL_SUN_SIMPLE"}},53],[0,"varying vec3 v_SunColor;\n\n"],[6],[0,"\nuniform mat4 camera_VPMat;\nuniform vec3 material_SkyTint;\nuniform vec3 material_GroundTint;\nuniform float material_Exposure;\nuniform float material_AtmosphereThickness;\nuniform vec4 scene_SunlightColor;\nuniform vec3 scene_SunlightDirection;\n\n"],[8,"GAMMA","2.2"],[0,"\n\n"],[9,"COLOR_2_GAMMA",["color"],"pow ( color , vec3 ( 1.0 / GAMMA ) )"],[0,"\n\n"],[9,"COLOR_2_LINEAR",["color"],"color"],[0,"\nfloat getRayleighPhase ( vec3 light, vec3 ray ) { float eyeCos = dot ( light , ray ) ;\nreturn 0.75 + 0.75 * eyeCos * eyeCos ; }\nfloat scaleAngle ( float inCos ) { float x = 1.0 - inCos ;\nreturn 0.25 * exp ( - 0.00287 + x * ( 0.459 + x * ( 3.83 + x * ( - 6.80 + x * 5.25 ) ) ) ) ; }\nvoid main() { \ngl_Position = camera_VPMat * vec4 ( POSITION.xyz , 1.0 ) ;\nvec3 skyTintInGammaSpace = COLOR_2_GAMMA(material_SkyTint) ;\nvec3 scatteringWavelength = mix ( c_DefaultScatteringWavelength - c_VariableRangeForScatteringWavelength , c_DefaultScatteringWavelength + c_VariableRangeForScatteringWavelength , vec3 ( 1.0 ) - skyTintInGammaSpace ) ;\nvec3 invWavelength = 1.0 / pow ( scatteringWavelength , vec3 ( 4.0 ) ) ;\nfloat krESun = RAYLEIGH * SUN_BRIGHTNESS ;\nfloat kr4PI = RAYLEIGH * 4.0 * 3.14159265 ;\nvec3 cameraPos = vec3 ( 0.0 , innerRadius + cameraHeight , 0.0 ) ;\nvec3 eyeRay = normalize ( POSITION.xyz ) ;\nfloat far = 0.0 ;\nvec3 cIn , cOut ;\nif ( eyeRay.y >= 0.0 ) { far = sqrt ( outerRadius2 + innerRadius2 * eyeRay.y * eyeRay.y - innerRadius2 ) - innerRadius * eyeRay.y ;\nfloat height = innerRadius + cameraHeight ;\nfloat depth = exp ( scaleOverScaleDepth * - cameraHeight ) ;\nfloat startAngle = dot ( eyeRay , cameraPos ) / height ;\nfloat startOffset = depth * scaleAngle(startAngle) ;\nfloat sampleLength = far / samples ;\nfloat scaledLength = sampleLength * scale ;\nvec3 sampleRay = eyeRay * sampleLength ;\nvec3 samplePoint = cameraPos + sampleRay * 0.5 ;\nvec3 frontColor = vec3 ( 0.0 ) ;\n{ float height = length ( samplePoint ) ;\nfloat depth = exp ( scaleOverScaleDepth * ( innerRadius - height ) ) ;\nfloat lightAngle = dot ( - scene_SunlightDirection , samplePoint ) / height ;\nfloat cameraAngle = dot ( eyeRay , samplePoint ) / height ;\nfloat scatter = ( startOffset + depth * ( scaleAngle(lightAngle) - scaleAngle(cameraAngle) ) ) ;\nvec3 attenuate = exp ( - clamp ( scatter , 0.0 , MAX_SCATTER ) * ( invWavelength * kr4PI + km4PI ) ) ;\nfrontColor += attenuate * ( depth * scaledLength ) ;\nsamplePoint += sampleRay ; }\n{ float height = length ( samplePoint ) ;\nfloat depth = exp ( scaleOverScaleDepth * ( innerRadius - height ) ) ;\nfloat lightAngle = dot ( - scene_SunlightDirection , samplePoint ) / height ;\nfloat cameraAngle = dot ( eyeRay , samplePoint ) / height ;\nfloat scatter = ( startOffset + depth * ( scaleAngle(lightAngle) - scaleAngle(cameraAngle) ) ) ;\nvec3 attenuate = exp ( - clamp ( scatter , 0.0 , MAX_SCATTER ) * ( invWavelength * kr4PI + km4PI ) ) ;\nfrontColor += attenuate * ( depth * scaledLength ) ;\nsamplePoint += sampleRay ; }\ncIn = frontColor * ( invWavelength * krESun ) ;\ncOut = frontColor * kmESun ; } else { far = ( - cameraHeight ) / ( min ( - 0.001 , eyeRay.y ) ) ;\nvec3 pos = cameraPos + far * eyeRay ;\nfloat depth = exp ( ( - cameraHeight ) * ( 1.0 / scaleDepth ) ) ;\nfloat cameraAngle = dot ( - eyeRay , pos ) ;\nfloat lightAngle = dot ( - scene_SunlightDirection , pos ) ;\nfloat cameraScale = scaleAngle(cameraAngle) ;\nfloat lightScale = scaleAngle(lightAngle) ;\nfloat cameraOffset = depth * cameraScale ;\nfloat temp = lightScale + cameraScale ;\nfloat sampleLength = far / samples ;\nfloat scaledLength = sampleLength * scale ;\nvec3 sampleRay = eyeRay * sampleLength ;\nvec3 samplePoint = cameraPos + sampleRay * 0.5 ;\nvec3 frontColor = vec3 ( 0.0 , 0.0 , 0.0 ) ;\nvec3 attenuate ;\n{ float height = length ( samplePoint ) ;\nfloat depth = exp ( scaleOverScaleDepth * ( innerRadius - height ) ) ;\nfloat scatter = depth * temp - cameraOffset ;\nattenuate = exp ( - clamp ( scatter , 0.0 , MAX_SCATTER ) * ( invWavelength * kr4PI + km4PI ) ) ;\nfrontColor += attenuate * ( depth * scaledLength ) ;\nsamplePoint += sampleRay ; }\ncIn = frontColor * ( invWavelength * krESun + kmESun ) ;\ncOut = clamp ( attenuate , 0.0 , 1.0 ) ; }\n\n"],[1,"MATERIAL_SUN_HIGH_QUALITY",63],[0," v_Vertex = - POSITION.xyz ; \n"],[5,68],[1,"MATERIAL_SUN_SIMPLE",66],[0," v_RayDir = - eyeRay ; \n"],[5,68],[0," v_SkyGroundFactor = - eyeRay.y / SKY_GROUND_THRESHOLD ; \n"],[6],[0,"\nv_GroundColor = material_Exposure * ( cIn + COLOR_2_LINEAR(material_GroundTint) * cOut ) ;\nv_SkyColor = material_Exposure * ( cIn * getRayleighPhase(- scene_SunlightDirection, - eyeRay) ) ;\nfloat lightColorIntensity = clamp ( length ( scene_SunlightColor.xyz ) , 0.25 , 1.0 ) ;\n\n"],[1,"MATERIAL_SUN_HIGH_QUALITY",72],[0," v_SunColor = HDSundiskIntensityFactor * clamp ( cOut , 0.0 , 1.0 ) * scene_SunlightColor.xyz / lightColorIntensity ; \n"],[5,75],[1,"MATERIAL_SUN_SIMPLE",75],[0," v_SunColor = simpleSundiskIntensityFactor * clamp ( cOut * sunScale , 0.0 , 1.0 ) * scene_SunlightColor.xyz / lightColorIntensity ; \n"],[6],[0,"\n }"]],"fragmentShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[8,"OUTER_RADIUS","1.025"],[0,"\n\n"],[8,"RAYLEIGH","( mix ( 0.0 , 0.0025 , pow ( material_AtmosphereThickness , 2.5 ) ) )"],[0,"\n\n"],[8,"MIE","0.0010"],[0,"\n\n"],[8,"SUN_BRIGHTNESS","20.0"],[0,"\n\n"],[8,"MAX_SCATTER","50.0"],[0,"\nconst float SKY_GROUND_THRESHOLD = 0.02;\nconst float MIE_G = - 0.990;\nconst float MIE_G2 = 0.9801;\nvarying vec3 v_GroundColor;\nvarying vec3 v_SkyColor;\n\n"],[1,"MATERIAL_SUN_HIGH_QUALITY",44],[0,"varying vec3 v_Vertex;\n\n"],[5,49],[1,"MATERIAL_SUN_SIMPLE",47],[0,"varying vec3 v_RayDir;\n\n"],[5,49],[0,"varying float v_SkyGroundFactor;\n\n"],[6],[0,"\n"],[4,{"t":"or","l":{"t":"def","m":"MATERIAL_SUN_HIGH_QUALITY"},"r":{"t":"def","m":"MATERIAL_SUN_SIMPLE"}},53],[0,"varying vec3 v_SunColor;\n\n"],[6],[0,"\nuniform vec3 scene_SunlightDirection;\nuniform float material_SunSize;\nuniform float material_SunSizeConvergence;\n\n"],[8,"GAMMA","2.2"],[0,"\n\n"],[9,"COLOR_2_GAMMA",["color"],"pow ( color , vec3 ( 1.0 / GAMMA ) )"],[0,"\n\n"],[9,"COLOR_2_LINEAR",["color"],"color"],[0,"\nfloat getMiePhase ( float eyeCos, float eyeCos2 ) { float temp = 1.0 + MIE_G2 - 2.0 * MIE_G * eyeCos ;\ntemp = pow ( temp , pow ( material_SunSize , 0.65 ) * 10.0 ) ;\ntemp = max ( temp , 1.0e-4 ) ;\ntemp = 1.5 * ( ( 1.0 - MIE_G2 ) / ( 2.0 + MIE_G2 ) ) * ( 1.0 + eyeCos2 ) / temp ;\nreturn temp ; }\nfloat calcSunAttenuation ( vec3 lightPos, vec3 ray ) { \n"],[1,"MATERIAL_SUN_HIGH_QUALITY",63],[0," float focusedEyeCos = pow ( clamp ( dot ( lightPos , ray ) , 0.0 , 1.0 ) , material_SunSizeConvergence ) ;\nreturn getMiePhase(- focusedEyeCos, focusedEyeCos * focusedEyeCos) ; \n"],[5,65],[0," vec3 delta = lightPos - ray ;\nfloat dist = length ( delta ) ;\nfloat spot = 1.0 - smoothstep ( 0.0 , material_SunSize , dist ) ;\nreturn spot * spot ; \n"],[6],[0," }\nvoid main() { vec3 col = vec3 ( 0.0 , 0.0 , 0.0 ) ;\n\n"],[1,"MATERIAL_SUN_HIGH_QUALITY",69],[0," vec3 ray = normalize ( v_Vertex ) ;\nfloat y = ray.y / SKY_GROUND_THRESHOLD ; \n"],[5,74],[1,"MATERIAL_SUN_SIMPLE",72],[0," vec3 ray = v_RayDir ;\nfloat y = ray.y / SKY_GROUND_THRESHOLD ; \n"],[5,74],[0," float y = v_SkyGroundFactor ; \n"],[6],[0,"\ncol = mix ( v_SkyColor , v_GroundColor , clamp ( y , 0.0 , 1.0 ) ) ;\n\n"],[4,{"t":"or","l":{"t":"def","m":"MATERIAL_SUN_HIGH_QUALITY"},"r":{"t":"def","m":"MATERIAL_SUN_SIMPLE"}},78],[0," if ( y < 0.0 ) col += v_SunColor * calcSunAttenuation(- scene_SunlightDirection, - ray) ; \n"],[6],[0,"\ngl_FragColor = vec4 ( col , 1.0 ) ; }"]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/Sky/Skybox.shaderc b/packages/shader/compiledShaders/Sky/Skybox.shaderc deleted file mode 100644 index 7b45642a00..0000000000 --- a/packages/shader/compiledShaders/Sky/Skybox.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"Sky/Skybox","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"Forward Pass","isUsePass":false,"tags":{"pipelineStage":"Forward"},"renderStates":{"constantMap":{"12":3,"25":0},"variableMap":{}},"vertexShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nattribute vec3 POSITION;\n\nvarying vec3 v_cubeUV;\n\nuniform mat4 camera_VPMat;\nuniform float material_Rotation;\nvec4 rotateY ( vec4 v, float angle ) { const float deg2rad = 3.1415926 / 180.0 ;\nfloat radian = angle * deg2rad ;\nfloat sina = sin ( radian ) ;\nfloat cosa = cos ( radian ) ;\nmat2 m = mat2 ( cosa , - sina , sina , cosa ) ;\nreturn vec4 ( m * v.xz , v.yw ).xzyw ; }\nvoid main() { \nv_cubeUV = POSITION ;\ngl_Position = camera_VPMat * rotateY(vec4 ( POSITION , 1.0 ), material_Rotation) ;\n }"]],"fragmentShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nvarying vec3 v_cubeUV;\n\nuniform samplerCube material_CubeTexture;\nuniform float material_Exposure;\nuniform vec4 material_TintColor;\nvoid main() { vec4 textureColor = textureCube ( material_CubeTexture , v_cubeUV ) ;\n\n"],[1,"ENGINE_NO_SRGB",34],[0," textureColor = sRGBToLinear(textureColor) ; \n"],[6],[0,"\ntextureColor.rgb *= material_Exposure * material_TintColor.rgb ;\ngl_FragColor = textureColor ; }"]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/Unlit.shaderc b/packages/shader/compiledShaders/Unlit.shaderc deleted file mode 100644 index e737d354e7..0000000000 --- a/packages/shader/compiledShaders/Unlit.shaderc +++ /dev/null @@ -1 +0,0 @@ -{"name":"Unlit","platformTarget":0,"subShaders":[{"name":"Default","tags":{},"passes":[{"name":"Pipeline/ShadowCaster/Default/ShadowCaster","isUsePass":true,"tags":{},"renderStates":{"constantMap":{},"variableMap":{}}},{"name":"Pipeline/DepthOnly/Default/DepthOnly","isUsePass":true,"tags":{},"renderStates":{"constantMap":{},"variableMap":{}}},{"name":"Forward Pass","isUsePass":false,"tags":{"pipelineStage":"Forward"},"renderStates":{"constantMap":{},"variableMap":{"0":"blendEnabled","3":"sourceColorBlendFactor","4":"sourceAlphaBlendFactor","5":"destinationColorBlendFactor","6":"destinationAlphaBlendFactor","11":"depthWriteEnabled","25":"rasterStateCullMode","28":"renderQueueType"}},"vertexShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",30],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\n\n"],[1,"GRAPHICS_API_WEBGL2",24],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,28],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"TRANSFORM_INCLUDED",36],[0,"\n\n"],[7,"TRANSFORM_INCLUDED"],[0,"\nuniform mat4 renderer_MVMat;\nuniform mat4 renderer_MVPMat;\n\n"],[6],[0,"\n\n"],[2,"FOG_INCLUDED",46],[0,"\n\n"],[7,"FOG_INCLUDED"],[0,"\n\n"],[3,"SCENE_FOG_MODE","!=",0,44],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"ATTRIBUTES_INCLUDED",104],[0,"\n\n"],[7,"ATTRIBUTES_INCLUDED"],[0,"\nattribute vec3 POSITION;\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",78],[0,"\n"],[2,"RENDERER_BLENDSHAPE_USE_TEXTURE",76],[0,"attribute vec3 POSITION_BS0;\nattribute vec3 POSITION_BS1;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},58],[0,"attribute vec3 NORMAL_BS0;\nattribute vec3 NORMAL_BS1;\nattribute vec3 TANGENT_BS0;\nattribute vec3 TANGENT_BS1;\n\n"],[5,74],[0,"\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},70],[0,"attribute vec3 POSITION_BS2;\nattribute vec3 POSITION_BS3;\n\n"],[1,"RENDERER_BLENDSHAPE_HAS_NORMAL",64],[0,"attribute vec3 NORMAL_BS0;\nattribute vec3 NORMAL_BS1;\nattribute vec3 NORMAL_BS2;\nattribute vec3 NORMAL_BS3;\n\n"],[6],[0,"\n"],[1,"RENDERER_BLENDSHAPE_HAS_TANGENT",68],[0,"attribute vec3 TANGENT_BS0;\nattribute vec3 TANGENT_BS1;\nattribute vec3 TANGENT_BS2;\nattribute vec3 TANGENT_BS3;\n\n"],[6],[0,"\n"],[5,72],[0,"attribute vec3 POSITION_BS2;\nattribute vec3 POSITION_BS3;\nattribute vec3 POSITION_BS4;\nattribute vec3 POSITION_BS5;\nattribute vec3 POSITION_BS6;\nattribute vec3 POSITION_BS7;\n\n"],[6],[0,"\n"],[6],[0,"\n"],[6],[0,"\n"],[6],[0,"\n"],[1,"RENDERER_HAS_UV",82],[0,"attribute vec2 TEXCOORD_0;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_UV1",86],[0,"\n"],[6],[0,"\n"],[1,"RENDERER_HAS_SKIN",90],[0,"attribute vec4 JOINTS_0;\nattribute vec4 WEIGHTS_0;\n\n"],[6],[0,"\n"],[1,"RENDERER_ENABLE_VERTEXCOLOR",94],[0,"\n"],[6],[0,"\n"],[1,"RENDERER_HAS_NORMAL",98],[0,"attribute vec3 NORMAL;\n\n"],[6],[0,"\n"],[1,"RENDERER_HAS_TANGENT",102],[0,"attribute vec4 TANGENT;\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"SKIN_INCLUDED",126],[0,"\n\n"],[7,"SKIN_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_SKIN",124],[0,"\n\n"],[1,"RENDERER_USE_JOINT_TEXTURE",114],[0,"\nuniform sampler2D renderer_JointSampler;\nuniform float renderer_JointCount;\nmat4 getJointMatrix ( sampler2D smp, float index ) { float base = index / renderer_JointCount ;\nfloat hf = 0.5 / renderer_JointCount ;\nfloat v = base + hf ;\nvec4 m0 = texture2D ( smp , vec2 ( 0.125 , v ) ) ;\nvec4 m1 = texture2D ( smp , vec2 ( 0.375 , v ) ) ;\nvec4 m2 = texture2D ( smp , vec2 ( 0.625 , v ) ) ;\nvec4 m3 = texture2D ( smp , vec2 ( 0.875 , v ) ) ;\nreturn mat4 ( m0 , m1 , m2 , m3 ) ; }\n\n"],[5,116],[0,"\nuniform mat4 renderer_JointMatrix [ RENDERER_JOINTS_NUM ];\n\n"],[6],[0,"\nmat4 getSkinMatrix ( ) { \n"],[1,"RENDERER_USE_JOINT_TEXTURE",120],[0," mat4 skinMatrix = WEIGHTS_0.x * getJointMatrix(renderer_JointSampler, JOINTS_0.x) + WEIGHTS_0.y * getJointMatrix(renderer_JointSampler, JOINTS_0.y) + WEIGHTS_0.z * getJointMatrix(renderer_JointSampler, JOINTS_0.z) + WEIGHTS_0.w * getJointMatrix(renderer_JointSampler, JOINTS_0.w) ; \n"],[5,122],[0," mat4 skinMatrix = WEIGHTS_0.x * renderer_JointMatrix[int ( JOINTS_0.x )] + WEIGHTS_0.y * renderer_JointMatrix[int ( JOINTS_0.y )] + WEIGHTS_0.z * renderer_JointMatrix[int ( JOINTS_0.z )] + WEIGHTS_0.w * renderer_JointMatrix[int ( JOINTS_0.w )] ; \n"],[6],[0,"\nreturn skinMatrix ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"BLENDSHAPE_INCLUDED",204],[0,"\n\n"],[7,"BLENDSHAPE_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",202],[0,"\n\n"],[1,"RENDERER_BLENDSHAPE_USE_TEXTURE",136],[0,"\nuniform mediump sampler2DArray renderer_BlendShapeTexture;\nuniform ivec3 renderer_BlendShapeTextureInfo;\nuniform float renderer_BlendShapeWeights [ RENDERER_BLENDSHAPE_COUNT ];\nvec3 getBlendShapeVertexElement ( int blendShapeIndex, int vertexElementIndex ) { int y = vertexElementIndex / renderer_BlendShapeTextureInfo.y ;\nint x = vertexElementIndex - y * renderer_BlendShapeTextureInfo.y ;\nivec3 uv = ivec3 ( x , y , blendShapeIndex ) ;\nreturn ( texelFetch ( renderer_BlendShapeTexture , uv , 0 ) ).xyz ; }\n\n"],[5,150],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},140],[0,"\nuniform float renderer_BlendShapeWeights [ 2 ];\n\n"],[5,148],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},144],[0,"\nuniform float renderer_BlendShapeWeights [ 4 ];\n\n"],[5,146],[0,"\nuniform float renderer_BlendShapeWeights [ 8 ];\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nvoid calculateBlendShape ( inout vec4 position\n"],[1,"RENDERER_HAS_NORMAL",158],[0," , inout vec3 normal \n"],[1,"RENDERER_HAS_TANGENT",156],[0," , inout vec4 tangent \n"],[6],[0," \n"],[6],[0," ) { \n"],[1,"RENDERER_BLENDSHAPE_USE_TEXTURE",170],[0," int vertexOffset = gl_VertexID * renderer_BlendShapeTextureInfo.x ;\nfor ( int i = 0 ; i < RENDERER_BLENDSHAPE_COUNT ; i ++ ) { int vertexElementOffset = vertexOffset ;\nfloat weight = renderer_BlendShapeWeights[i] ;\nif ( weight != 0.0 ) { position.xyz += getBlendShapeVertexElement(i, vertexElementOffset) * weight ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"}},164],[0," vertexElementOffset += 1 ;\nnormal += getBlendShapeVertexElement(i, vertexElementOffset) * weight ; \n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_HAS_TANGENT"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},168],[0," vertexElementOffset += 1 ;\ntangent.xyz += getBlendShapeVertexElement(i, vertexElementOffset) * weight ; \n"],[6],[0," } } \n"],[5,200],[0," position.xyz += POSITION_BS0 * renderer_BlendShapeWeights[0] ;\nposition.xyz += POSITION_BS1 * renderer_BlendShapeWeights[1] ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},182],[0," \n"],[1,"RENDERER_HAS_NORMAL",176],[0," normal += NORMAL_BS0 * renderer_BlendShapeWeights[0] ;\nnormal += NORMAL_BS1 * renderer_BlendShapeWeights[1] ; \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_TANGENT",180],[0," tangent.xyz += TANGENT_BS0 * renderer_BlendShapeWeights[0] ;\ntangent.xyz += TANGENT_BS1 * renderer_BlendShapeWeights[1] ; \n"],[6],[0," \n"],[5,198],[0," \n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},194],[0," position.xyz += POSITION_BS2 * renderer_BlendShapeWeights[2] ;\nposition.xyz += POSITION_BS3 * renderer_BlendShapeWeights[3] ;\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_HAS_NORMAL"}},188],[0," normal += NORMAL_BS0 * renderer_BlendShapeWeights[0] ;\nnormal += NORMAL_BS1 * renderer_BlendShapeWeights[1] ;\nnormal += NORMAL_BS2 * renderer_BlendShapeWeights[2] ;\nnormal += NORMAL_BS3 * renderer_BlendShapeWeights[3] ; \n"],[6],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"},"r":{"t":"def","m":"RENDERER_HAS_TANGENT"}},192],[0," tangent.xyz += TANGENT_BS0 * renderer_BlendShapeWeights[0] ;\ntangent.xyz += TANGENT_BS1 * renderer_BlendShapeWeights[1] ;\ntangent.xyz += TANGENT_BS2 * renderer_BlendShapeWeights[2] ;\ntangent.xyz += TANGENT_BS3 * renderer_BlendShapeWeights[3] ; \n"],[6],[0," \n"],[5,196],[0," position.xyz += POSITION_BS2 * renderer_BlendShapeWeights[2] ;\nposition.xyz += POSITION_BS3 * renderer_BlendShapeWeights[3] ;\nposition.xyz += POSITION_BS4 * renderer_BlendShapeWeights[4] ;\nposition.xyz += POSITION_BS5 * renderer_BlendShapeWeights[5] ;\nposition.xyz += POSITION_BS6 * renderer_BlendShapeWeights[6] ;\nposition.xyz += POSITION_BS7 * renderer_BlendShapeWeights[7] ; \n"],[6],[0," \n"],[6],[0," \n"],[6],[0," }\n\n"],[6],[0,"\n\n"],[6],[0,"\nuniform vec4 material_TilingOffset;\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",208],[0,"\n\n"],[6],[0,"\nvarying vec2 v_uv;\n\n"],[3,"SCENE_FOG_MODE","!=",0,212],[0,"varying vec3 v_positionVS;\n\n"],[6],[0,"\nvoid main() { \nvec4 position = vec4 ( POSITION , 1.0 ) ;\n\n"],[1,"RENDERER_HAS_NORMAL",220],[0," vec3 normal = NORMAL ;\n\n"],[1,"RENDERER_HAS_TANGENT",218],[0," vec4 tangent = TANGENT ; \n"],[6],[0," \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",232],[0," calculateBlendShape(position\n"],[1,"RENDERER_HAS_NORMAL",230],[0," , normal \n"],[1,"RENDERER_HAS_TANGENT",228],[0," , tangent \n"],[6],[0," \n"],[6],[0,") ; \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_SKIN",236],[0," mat4 skinMatrix = getSkinMatrix() ;\nposition = skinMatrix * position ; \n"],[6],[0,"\n\n"],[1,"RENDERER_HAS_UV",240],[0," v_uv = TEXCOORD_0 ; \n"],[5,242],[0," v_uv = vec2 ( 0.0 ) ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_NEED_TILING_OFFSET",246],[0," v_uv = v_uv * material_TilingOffset.xy + material_TilingOffset.zw ; \n"],[6],[0,"\ngl_Position = renderer_MVPMat * position ;\n\n"],[3,"SCENE_FOG_MODE","!=",0,250],[0," v_positionVS = ( renderer_MVMat * position ).xyz ; \n"],[6],[0,"\n }"]],"fragmentShaderInstructions":[[0,"\n"],[2,"COMMON_INCLUDED",34],[0,"\n\n"],[7,"COMMON_INCLUDED"],[0,"\n\n"],[8,"PI","3.14159265359"],[0,"\n\n"],[8,"RECIPROCAL_PI","0.31830988618"],[0,"\n\n"],[8,"EPSILON","1e-6"],[0,"\n\n"],[8,"LOG2","1.442695"],[0,"\n\n"],[8,"HALF_MIN","6.103515625e-5"],[0,"\n\n"],[8,"HALF_EPS","4.8828125e-4"],[0,"\n\n"],[9,"saturate",["a"],"clamp ( a , 0.0 , 1.0 )"],[0,"\nfloat sRGBToLinear ( float value ) { float linearRGBLo = value / 12.92 ;\nfloat linearRGBHi = pow ( ( value + 0.055 ) / 1.055 , 2.4 ) ;\nfloat linearRGB = ( value <= 0.04045 ) ? linearRGBLo : linearRGBHi ;\nreturn linearRGB ; }\nvec4 sRGBToLinear ( vec4 value ) { return vec4 ( sRGBToLinear(value.r) , sRGBToLinear(value.g) , sRGBToLinear(value.b) , value.a ) ; }\nvec4 texture2DSRGB ( sampler2D tex, vec2 uv ) { vec4 color = texture2D ( tex , uv ) ;\n\n"],[1,"ENGINE_NO_SRGB",22],[0," color = sRGBToLinear(color) ; \n"],[6],[0,"\nreturn color ; }\n\n"],[1,"GRAPHICS_API_WEBGL2",28],[0,"\n\n"],[9,"INVERSE_MAT",["mat"],"inverse ( mat )"],[0,"\n\n"],[5,32],[0,"\nmat2 inverseMat ( mat2 m ) { return mat2 ( m[1][1] , - m[0][1] , - m[1][0] , m[0][0] ) / ( m[0][0] * m[1][1] - m[0][1] * m[1][0] ) ; }\nmat3 inverseMat ( mat3 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] ;\nfloat a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] ;\nfloat a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] ;\nfloat b01 = a22 * a11 - a12 * a21 ;\nfloat b11 = - a22 * a10 + a12 * a20 ;\nfloat b21 = a21 * a10 - a11 * a20 ;\nfloat det = a00 * b01 + a01 * b11 + a02 * b21 ;\nreturn mat3 ( b01 , ( - a22 * a01 + a02 * a21 ) , ( a12 * a01 - a02 * a11 ) , b11 , ( a22 * a00 - a02 * a20 ) , ( - a12 * a00 + a02 * a10 ) , b21 , ( - a21 * a00 + a01 * a20 ) , ( a11 * a00 - a01 * a10 ) ) / det ; }\nmat4 inverseMat ( mat4 m ) { float a00 = m[0][0] , a01 = m[0][1] , a02 = m[0][2] , a03 = m[0][3] , a10 = m[1][0] , a11 = m[1][1] , a12 = m[1][2] , a13 = m[1][3] , a20 = m[2][0] , a21 = m[2][1] , a22 = m[2][2] , a23 = m[2][3] , a30 = m[3][0] , a31 = m[3][1] , a32 = m[3][2] , a33 = m[3][3] , b00 = a00 * a11 - a01 * a10 , b01 = a00 * a12 - a02 * a10 , b02 = a00 * a13 - a03 * a10 , b03 = a01 * a12 - a02 * a11 , b04 = a01 * a13 - a03 * a11 , b05 = a02 * a13 - a03 * a12 , b06 = a20 * a31 - a21 * a30 , b07 = a20 * a32 - a22 * a30 , b08 = a20 * a33 - a23 * a30 , b09 = a21 * a32 - a22 * a31 , b10 = a21 * a33 - a23 * a31 , b11 = a22 * a33 - a23 * a32 , det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06 ;\nreturn mat4 ( a11 * b11 - a12 * b10 + a13 * b09 , a02 * b10 - a01 * b11 - a03 * b09 , a31 * b05 - a32 * b04 + a33 * b03 , a22 * b04 - a21 * b05 - a23 * b03 , a12 * b08 - a10 * b11 - a13 * b07 , a00 * b11 - a02 * b08 + a03 * b07 , a32 * b02 - a30 * b05 - a33 * b01 , a20 * b05 - a22 * b02 + a23 * b01 , a10 * b10 - a11 * b08 + a13 * b06 , a01 * b08 - a00 * b10 - a03 * b06 , a30 * b04 - a31 * b02 + a33 * b00 , a21 * b02 - a20 * b04 - a23 * b00 , a11 * b07 - a10 * b09 - a12 * b06 , a00 * b09 - a01 * b07 + a02 * b06 , a31 * b01 - a30 * b03 - a32 * b00 , a20 * b03 - a21 * b01 + a22 * b00 ) / det ; }\n\n"],[9,"INVERSE_MAT",["mat"],"inverseMat(mat)"],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"TRANSFORM_INCLUDED",40],[0,"\n\n"],[7,"TRANSFORM_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[2,"FOG_INCLUDED",60],[0,"\n\n"],[7,"FOG_INCLUDED"],[0,"\n\n"],[3,"SCENE_FOG_MODE","!=",0,58],[0,"\nuniform vec4 scene_FogColor;\nuniform vec4 scene_FogParams;\nvec4 fog ( vec4 color, vec3 positionVS ) { float fogDepth = length ( positionVS ) ;\n\n"],[3,"SCENE_FOG_MODE","==",1,50],[0," float fogIntensity = clamp ( fogDepth * scene_FogParams.x + scene_FogParams.y , 0.0 , 1.0 ) ; \n"],[5,56],[3,"SCENE_FOG_MODE","==",2,53],[0," float fogIntensity = clamp ( exp2 ( - fogDepth * scene_FogParams.z ) , 0.0 , 1.0 ) ; \n"],[5,56],[3,"SCENE_FOG_MODE","==",3,56],[0," float factor = fogDepth * scene_FogParams.w ;\nfloat fogIntensity = clamp ( exp2 ( - factor * factor ) , 0.0 , 1.0 ) ; \n"],[6],[0,"\ncolor.rgb = mix ( scene_FogColor.rgb , color.rgb , fogIntensity ) ;\nreturn color ; }\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"ATTRIBUTES_INCLUDED",66],[0,"\n\n"],[7,"ATTRIBUTES_INCLUDED"],[0,"\n\n"],[6],[0,"\n\n"],[2,"SKIN_INCLUDED",82],[0,"\n\n"],[7,"SKIN_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_SKIN",80],[0,"\n\n"],[1,"RENDERER_USE_JOINT_TEXTURE",76],[0,"\n\n"],[5,78],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[2,"BLENDSHAPE_INCLUDED",110],[0,"\n\n"],[7,"BLENDSHAPE_INCLUDED"],[0,"\n\n"],[1,"RENDERER_HAS_BLENDSHAPE",108],[0,"\n\n"],[1,"RENDERER_BLENDSHAPE_USE_TEXTURE",92],[0,"\n\n"],[5,106],[0,"\n\n"],[4,{"t":"and","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},96],[0,"\n\n"],[5,104],[0,"\n\n"],[4,{"t":"or","l":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_NORMAL"},"r":{"t":"def","m":"RENDERER_BLENDSHAPE_HAS_TANGENT"}},100],[0,"\n\n"],[5,102],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\n\n"],[6],[0,"\nuniform vec4 material_BaseColor;\nuniform float material_AlphaCutoff;\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",114],[0,"\nuniform sampler2D material_BaseTexture;\n\n"],[6],[0,"\nvarying vec2 v_uv;\n\n"],[3,"SCENE_FOG_MODE","!=",0,118],[0,"varying vec3 v_positionVS;\n\n"],[6],[0,"\nvoid main() { vec4 baseColor = material_BaseColor ;\n\n"],[1,"MATERIAL_HAS_BASETEXTURE",122],[0," baseColor *= texture2DSRGB(material_BaseTexture, v_uv) ; \n"],[6],[0,"\n\n"],[1,"MATERIAL_IS_ALPHA_CUTOFF",126],[0," if ( baseColor.a < material_AlphaCutoff ) { discard ; } \n"],[6],[0,"\ngl_FragColor = baseColor ;\n\n"],[2,"MATERIAL_IS_TRANSPARENT",130],[0," gl_FragColor.a = 1.0 ; \n"],[6],[0,"\n\n"],[3,"SCENE_FOG_MODE","!=",0,134],[0," gl_FragColor = fog(gl_FragColor, v_positionVS) ; \n"],[6],[0," }"]]}]}]} \ No newline at end of file diff --git a/packages/shader/compiledShaders/index.ts b/packages/shader/compiledShaders/index.ts deleted file mode 100644 index 0907cb1474..0000000000 --- a/packages/shader/compiledShaders/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Auto-generated by shader-compiler-precompile --emit-index — do not edit. -import BackgroundTextureSource from "./Sky/BackgroundTexture.shaderc"; -import BlinnPhongSource from "./BlinnPhong.shaderc"; -import BlitScreenSource from "./Blit/BlitScreen.shaderc"; -import BlitSource from "./Blit/Blit.shaderc"; -import BloomSource from "./PostProcess/Bloom.shaderc"; -import DepthOnlySource from "./Pipeline/DepthOnly.shaderc"; -import FinalAntiAliasingSource from "./PostProcess/FinalAntiAliasing.shaderc"; -import FinalSRGBSource from "./PostProcess/FinalSRGB.shaderc"; -import ParticleFeedbackSource from "./Effect/ParticleFeedback.shaderc"; -import ParticleSource from "./Effect/Particle.shaderc"; -import PBRSource from "./PBR.shaderc"; -import ScalableAmbientOcclusionSource from "./Lighting/ScalableAmbientOcclusion.shaderc"; -import ShadowCasterSource from "./Pipeline/ShadowCaster.shaderc"; -import SkyboxSource from "./Sky/Skybox.shaderc"; -import SkyProceduralSource from "./Sky/SkyProcedural.shaderc"; -import SpriteMaskSource from "./2D/SpriteMask.shaderc"; -import SpriteSource from "./2D/Sprite.shaderc"; -import TextSource from "./2D/Text.shaderc"; -import TrailSource from "./Effect/Trail.shaderc"; -import UberSource from "./PostProcess/Uber.shaderc"; -import UIDefaultSource from "./2D/UIDefault.shaderc"; -import UnlitSource from "./Unlit.shaderc"; - -// prettier-ignore -export { - BackgroundTextureSource, - BlinnPhongSource, - BlitScreenSource, - BlitSource, - BloomSource, - DepthOnlySource, - FinalAntiAliasingSource, - FinalSRGBSource, - ParticleFeedbackSource, - ParticleSource, - PBRSource, - ScalableAmbientOcclusionSource, - ShadowCasterSource, - SkyboxSource, - SkyProceduralSource, - SpriteMaskSource, - SpriteSource, - TextSource, - TrailSource, - UberSource, - UIDefaultSource, - UnlitSource -}; From 7ad1852f9e01409e52507959f0cc8120d597d797 Mon Sep 17 00:00:00 2001 From: luo2430 Date: Mon, 15 Jun 2026 15:23:12 +0800 Subject: [PATCH 3/7] refactor(engine): extract event types to enum --- packages/core/src/Engine.ts | 10 +++++----- packages/core/src/EngineEventType.ts | 6 ++++++ packages/core/src/index.ts | 3 ++- 3 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 packages/core/src/EngineEventType.ts diff --git a/packages/core/src/Engine.ts b/packages/core/src/Engine.ts index d55a7798ee..f82feb3205 100644 --- a/packages/core/src/Engine.ts +++ b/packages/core/src/Engine.ts @@ -11,6 +11,7 @@ import { Font } from "./2d/text/Font"; import { BasicResources } from "./BasicResources"; import { Camera } from "./Camera"; import { Canvas } from "./Canvas"; +import { EngineEventType } from "./EngineEventType"; import { EngineSettings } from "./EngineSettings"; import { Entity } from "./Entity"; import { BatcherManager } from "./RenderPipeline/BatcherManager"; @@ -32,7 +33,6 @@ import { Shader } from "./shader/Shader"; import { ShaderMacro } from "./shader/ShaderMacro"; import { ShaderMacroCollection } from "./shader/ShaderMacroCollection"; import { ShaderProgramMap } from "./shader/ShaderProgramMap"; -import { ShaderProgram } from "./shader/ShaderProgram"; import { ShaderFactory } from "./shader/ShaderFactory"; import { RenderState } from "./shader/state/RenderState"; import { Texture2D, TextureFormat } from "./texture"; @@ -403,7 +403,7 @@ export class Engine extends EventDispatcher { */ run(): void { this.resume(); - this.dispatch("run", this); + this.dispatch(EngineEventType.Run, this); } /** @@ -506,7 +506,7 @@ export class Engine extends EventDispatcher { this._batcherManager.destroy(); this._renderTargetPool.gc(); this.xrManager?._destroy(); - this.dispatch("shutdown", this); + this.dispatch(EngineEventType.Shutdown, this); // Cancel animation this.pause(); @@ -671,7 +671,7 @@ export class Engine extends EventDispatcher { this.resourceManager._lostGraphicResources(); this._renderingStatistics._reset(); console.log("Device lost."); - this.dispatch("devicelost", this); + this.dispatch(EngineEventType.DeviceLost, this); } private _onDeviceRestored(): void { @@ -692,7 +692,7 @@ export class Engine extends EventDispatcher { ._restoreResourcesContent() .then(() => { console.log("Graphic resource content restored.\n\n" + "Device restored."); - this.dispatch("devicerestored", this); + this.dispatch(EngineEventType.DeviceRestored, this); }) .catch((error) => { console.error(error); diff --git a/packages/core/src/EngineEventType.ts b/packages/core/src/EngineEventType.ts new file mode 100644 index 0000000000..4114d75df0 --- /dev/null +++ b/packages/core/src/EngineEventType.ts @@ -0,0 +1,6 @@ +export enum EngineEventType { + Run = "run", + Shutdown = "shutdown", + DeviceLost = "devicelost", + DeviceRestored = "devicerestored" +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index d605ef9cd4..be483eccbd 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -17,8 +17,9 @@ export { dependentComponents, DependentMode } from "./ComponentsDependencies"; export { Camera } from "./Camera"; export { Transform, TransformModifyFlags } from "./Transform"; export { BoolUpdateFlag } from "./BoolUpdateFlag"; -export type { EngineSettings } from "./EngineSettings"; export type { EngineConfiguration } from "./Engine"; +export { EngineEventType } from "./EngineEventType"; +export type { EngineSettings } from "./EngineSettings"; export type { ComponentConstructor } from "./Entity"; export { request } from "./asset/request"; From d9e518d64b7adf3e8dca25f740c52c9744db8046 Mon Sep 17 00:00:00 2001 From: "chenmo.gl" Date: Mon, 15 Jun 2026 16:59:50 +0800 Subject: [PATCH 4/7] docs(core): add EngineEventType API comments --- packages/core/src/EngineEventType.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/core/src/EngineEventType.ts b/packages/core/src/EngineEventType.ts index 4114d75df0..b6e7d49c29 100644 --- a/packages/core/src/EngineEventType.ts +++ b/packages/core/src/EngineEventType.ts @@ -1,6 +1,13 @@ +/** + * Engine event type. + */ export enum EngineEventType { + /** Dispatched when the engine starts running. */ Run = "run", + /** Dispatched when the engine shuts down. */ Shutdown = "shutdown", + /** Dispatched when the graphic device is lost. */ DeviceLost = "devicelost", + /** Dispatched when the graphic device is restored. */ DeviceRestored = "devicerestored" } From bbef9b8d2eb8899e7ff16522ccda765786b6d025 Mon Sep 17 00:00:00 2001 From: "chenmo.gl" Date: Mon, 15 Jun 2026 17:36:21 +0800 Subject: [PATCH 5/7] build(shader-compiler): use node chmod for cli --- packages/shader-compiler/package.json | 9 ++- pnpm-lock.yaml | 97 --------------------------- 2 files changed, 4 insertions(+), 102 deletions(-) diff --git a/packages/shader-compiler/package.json b/packages/shader-compiler/package.json index 0192e51bcf..6d94e0e6bd 100644 --- a/packages/shader-compiler/package.json +++ b/packages/shader-compiler/package.json @@ -42,7 +42,7 @@ "shader-compiler-precompile": "./bundler/cli.js" }, "scripts": { - "build": "rollup -c rollup.config.js && shx chmod +x bundler/cli.js", + "build": "rollup -c rollup.config.js && node -e \"require('fs').chmodSync('bundler/cli.js', 0o755)\"", "b:types": "tsc" }, "umd": { @@ -59,12 +59,11 @@ "verbose/package.json" ], "dependencies": { - "@galacean/engine-core": "workspace:*", + "@rollup/pluginutils": "^5.0.0", "@galacean/engine-math": "workspace:*", - "@rollup/pluginutils": "^5.0.0" + "@galacean/engine-core": "workspace:*" }, "devDependencies": { - "@galacean/engine-design": "workspace:*", - "shx": "^0.4.0" + "@galacean/engine-design": "workspace:*" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 94572330a9..5b558ef250 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -305,9 +305,6 @@ importers: '@galacean/engine-design': specifier: workspace:* version: link:../design - shx: - specifier: ^0.4.0 - version: 0.4.0 packages/ui: devDependencies: @@ -2357,10 +2354,6 @@ packages: eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} - execa@1.0.0: - resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} - engines: {node: '>=6'} - execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -2379,10 +2372,6 @@ packages: fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -2673,10 +2662,6 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} - is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -2729,10 +2714,6 @@ packages: is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} - is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -2968,10 +2949,6 @@ packages: merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -3110,10 +3087,6 @@ packages: resolution: {integrity: sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==} engines: {node: '>=4'} - npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} - engines: {node: '>=4'} - npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3165,10 +3138,6 @@ packages: resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} engines: {node: '>=6'} - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -3395,10 +3364,6 @@ packages: resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} engines: {node: '>= 14.16.0'} - rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} - engines: {node: '>= 0.10'} - redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -3570,16 +3535,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shelljs@0.9.2: - resolution: {integrity: sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==} - engines: {node: '>=18'} - hasBin: true - - shx@0.4.0: - resolution: {integrity: sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA==} - engines: {node: '>=18'} - hasBin: true - siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -3704,10 +3659,6 @@ packages: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} - strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} - engines: {node: '>=0.10.0'} - strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} @@ -6106,16 +6057,6 @@ snapshots: eventemitter3@5.0.4: {} - execa@1.0.0: - dependencies: - cross-spawn: 6.0.5 - get-stream: 4.1.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - execa@8.0.1: dependencies: cross-spawn: 7.0.5 @@ -6143,14 +6084,6 @@ snapshots: fast-diff@1.3.0: {} - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} @@ -6451,8 +6384,6 @@ snapshots: ini@1.3.8: {} - interpret@1.4.0: {} - is-arrayish@0.2.1: {} is-binary-path@2.1.0: @@ -6491,8 +6422,6 @@ snapshots: dependencies: '@types/estree': 1.0.6 - is-stream@1.1.0: {} - is-stream@2.0.1: {} is-stream@3.0.0: {} @@ -6744,8 +6673,6 @@ snapshots: merge-stream@2.0.0: {} - merge2@1.4.1: {} - micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -6881,10 +6808,6 @@ snapshots: pify: 3.0.0 optional: true - npm-run-path@2.0.2: - dependencies: - path-key: 2.0.1 - npm-run-path@5.3.0: dependencies: path-key: 4.0.0 @@ -6964,8 +6887,6 @@ snapshots: p-cancelable@1.1.0: {} - p-finally@1.0.0: {} - p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -7167,10 +7088,6 @@ snapshots: readdirp@4.0.2: {} - rechoir@0.6.2: - dependencies: - resolve: 1.22.8 - redent@3.0.0: dependencies: indent-string: 4.0.0 @@ -7346,18 +7263,6 @@ snapshots: shebang-regex@3.0.0: {} - shelljs@0.9.2: - dependencies: - execa: 1.0.0 - fast-glob: 3.3.3 - interpret: 1.4.0 - rechoir: 0.6.2 - - shx@0.4.0: - dependencies: - minimist: 1.2.8 - shelljs: 0.9.2 - siginfo@2.0.0: {} signal-exit@3.0.7: {} @@ -7483,8 +7388,6 @@ snapshots: strip-bom@4.0.0: {} - strip-eof@1.0.0: {} - strip-final-newline@3.0.0: {} strip-indent@3.0.0: From 8af7c50cbcbef382b11415afa584d2d679176089 Mon Sep 17 00:00:00 2001 From: "chenmo.gl" Date: Mon, 15 Jun 2026 18:14:33 +0800 Subject: [PATCH 6/7] test: upgrade vitest to 3.2.6 --- package.json | 4 +- pnpm-lock.yaml | 661 ++++++++---------- tests/package.json | 2 +- tests/src/shader-compiler/Precompile.test.ts | 3 +- .../shader-compiler/PrecompileABTest.test.ts | 3 +- .../PrecompileBenchmark.test.ts | 4 +- .../shader-compiler/ShaderCompiler.test.ts | 4 +- .../src/shader-compiler/readShaderTestFile.ts | 17 + tests/vitest.config.ts | 19 +- vitest.config.ts | 7 + vitest.workspace.ts | 3 - 11 files changed, 327 insertions(+), 400 deletions(-) create mode 100644 tests/src/shader-compiler/readShaderTestFile.ts create mode 100644 vitest.config.ts delete mode 100644 vitest.workspace.ts diff --git a/package.json b/package.json index 9fbf6f0f02..7a577317a7 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@types/webxr": "latest", "@typescript-eslint/eslint-plugin": "^8.58.1", "@typescript-eslint/parser": "^8.58.1", - "@vitest/coverage-v8": "2.1.3", + "@vitest/coverage-v8": "3.2.6", "bumpp": "^9.5.2", "cross-env": "^5.2.0", "electron": "^13", @@ -65,7 +65,7 @@ "rollup-plugin-swc3": "^0.10.1", "ts-node": "^10", "typescript": "^5.1.6", - "vitest": "2.1.3" + "vitest": "3.2.6" }, "lint-staged": { "**/*.ts": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5b558ef250..33fdff6d10 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,8 +54,8 @@ importers: specifier: ^8.58.1 version: 8.59.2(eslint@8.57.1)(typescript@5.6.3) '@vitest/coverage-v8': - specifier: 2.1.3 - version: 2.1.3(@vitest/browser@2.1.3(@types/node@18.19.64)(@vitest/spy@2.1.3)(typescript@5.6.3)(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))(vitest@2.1.3))(vitest@2.1.3(@types/node@18.19.64)(@vitest/browser@2.1.3)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(sass@1.81.0)(terser@5.44.1)) + specifier: 3.2.6 + version: 3.2.6(@vitest/browser@3.2.6(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))(vitest@3.2.6))(vitest@3.2.6(@types/node@18.19.64)(@vitest/browser@3.2.6)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(sass@1.81.0)(terser@5.44.1)) bumpp: specifier: ^9.5.2 version: 9.8.1(magicast@0.3.5) @@ -111,8 +111,8 @@ importers: specifier: ^5.1.6 version: 5.6.3 vitest: - specifier: 2.1.3 - version: 2.1.3(@types/node@18.19.64)(@vitest/browser@2.1.3)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(sass@1.81.0)(terser@5.44.1) + specifier: 3.2.6 + version: 3.2.6(@types/node@18.19.64)(@vitest/browser@3.2.6)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(sass@1.81.0)(terser@5.44.1) e2e: dependencies: @@ -371,8 +371,8 @@ importers: version: link:../packages/ui devDependencies: '@vitest/browser': - specifier: 2.1.3 - version: 2.1.3(@types/node@18.19.64)(@vitest/spy@2.1.5)(playwright@1.55.0)(typescript@5.6.3)(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))(vitest@2.1.5) + specifier: 3.2.6 + version: 3.2.6(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(playwright@1.55.0)(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))(vitest@3.2.6) packages: @@ -447,8 +447,9 @@ packages: resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} '@bundled-es-modules/cookie@2.0.1': resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} @@ -967,9 +968,15 @@ packages: '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -1121,42 +1128,36 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.0': resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.0': resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.0': resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.0': resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.0': resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - libc: [musl] '@parcel/watcher-win32-arm64@2.5.0': resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==} @@ -1262,55 +1263,46 @@ packages: resolution: {integrity: sha512-6npqOKEPRZkLrMcvyC/32OzJ2srdPzCylJjiTJT2c0bwwSGm7nz2F9mNQ1WrAqCBZROcQn91Fno+khFhVijmFA==} cpu: [arm] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.27.2': resolution: {integrity: sha512-V9Xg6eXtgBtHq2jnuQwM/jr2mwe2EycnopO8cbOvpzFuySCGtKlPCI3Hj9xup/pJK5Q0388qfZZy2DqV2J8ftw==} cpu: [arm] os: [linux] - libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.27.2': resolution: {integrity: sha512-uCFX9gtZJoQl2xDTpRdseYuNqyKkuMDtH6zSrBTA28yTfKyjN9hQ2B04N5ynR8ILCoSDOrG/Eg+J2TtJ1e/CSA==} cpu: [arm64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.27.2': resolution: {integrity: sha512-/PU9P+7Rkz8JFYDHIi+xzHabOu9qEWR07L5nWLIUsvserrxegZExKCi2jhMZRd0ATdboKylu/K5yAXbp7fYFvA==} cpu: [arm64] os: [linux] - libc: [musl] '@rollup/rollup-linux-powerpc64le-gnu@4.27.2': resolution: {integrity: sha512-eCHmol/dT5odMYi/N0R0HC8V8QE40rEpkyje/ZAXJYNNoSfrObOvG/Mn+s1F/FJyB7co7UQZZf6FuWnN6a7f4g==} cpu: [ppc64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.27.2': resolution: {integrity: sha512-DEP3Njr9/ADDln3kNi76PXonLMSSMiCir0VHXxmGSHxCxDfQ70oWjHcJGfiBugzaqmYdTC7Y+8Int6qbnxPBIQ==} cpu: [riscv64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-s390x-gnu@4.27.2': resolution: {integrity: sha512-NHGo5i6IE/PtEPh5m0yw5OmPMpesFnzMIS/lzvN5vknnC1sXM5Z/id5VgcNPgpD+wHmIcuYYgW+Q53v+9s96lQ==} cpu: [s390x] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.27.2': resolution: {integrity: sha512-PaW2DY5Tan+IFvNJGHDmUrORadbe/Ceh8tQxi8cmdQVCCYsLoQo2cuaSj+AU+YRX8M4ivS2vJ9UGaxfuNN7gmg==} cpu: [x64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-musl@4.27.2': resolution: {integrity: sha512-dOlWEMg2gI91Qx5I/HYqOD6iqlJspxLcS4Zlg3vjk1srE67z5T2Uz91yg/qA8sY0XcwQrFzWWiZhMNERylLrpQ==} cpu: [x64] os: [linux] - libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.27.2': resolution: {integrity: sha512-euMIv/4x5Y2/ImlbGl88mwKNXDsvzbWUlT7DFky76z2keajCtcbAsN9LUdmk31hAoVmJJYSThgdA0EsPeTr1+w==} @@ -1354,28 +1346,24 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] - libc: [glibc] '@swc/core-linux-arm64-musl@1.9.2': resolution: {integrity: sha512-8xzrOmsyCC1zrx2Wzx/h8dVsdewO1oMCwBTLc1gSJ/YllZYTb04pNm6NsVbzUX2tKddJVRgSJXV10j/NECLwpA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - libc: [musl] '@swc/core-linux-x64-gnu@1.9.2': resolution: {integrity: sha512-kZrNz/PjRQKcchWF6W292jk3K44EoVu1ad5w+zbS4jekIAxsM8WwQ1kd+yjUlN9jFcF8XBat5NKIs9WphJCVXg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - libc: [glibc] '@swc/core-linux-x64-musl@1.9.2': resolution: {integrity: sha512-TTIpR4rjMkhX1lnFR+PSXpaL83TrQzp9znRdp2TzYrODlUd/R20zOwSo9vFLCyH6ZoD47bccY7QeGZDYT3nlRg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - libc: [musl] '@swc/core-win32-arm64-msvc@1.9.2': resolution: {integrity: sha512-+Eg2d4icItKC0PMjZxH7cSYFLWk0aIp94LNmOw6tPq0e69ax6oh10upeq0D1fjWsKLmOJAWEvnXlayZcijEXDw==} @@ -1421,8 +1409,8 @@ packages: resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} - '@testing-library/user-event@14.5.2': - resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@testing-library/dom': '>=7.21.4' @@ -1442,9 +1430,15 @@ packages: '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/dom-webcodecs@0.1.13': resolution: {integrity: sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ==} @@ -1550,13 +1544,13 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} deprecated: Potential CWE-502 - Update to 1.3.1 or higher - '@vitest/browser@2.1.3': - resolution: {integrity: sha512-PQ2kLLc9q8ukJutuuYsynHSr31E78/dtYEvPy4jCHLht1LmITqXTVTqu7THWdZ1kXNGrWwtdMqtt3z2mvSKdIg==} + '@vitest/browser@3.2.6': + resolution: {integrity: sha512-CNjSynGBtAVOMTfQITv6Bc8da4/XTU1izorocbDStjUsynXcgx2FHVssh+10a8bKd/BxoqDdQtuSbYHfk302Wg==} peerDependencies: playwright: '*' safaridriver: '*' - vitest: 2.1.3 - webdriverio: '*' + vitest: 3.2.6 + webdriverio: ^7.0.0 || ^8.0.0 || ^9.0.0 peerDependenciesMeta: playwright: optional: true @@ -1565,73 +1559,43 @@ packages: webdriverio: optional: true - '@vitest/coverage-v8@2.1.3': - resolution: {integrity: sha512-2OJ3c7UPoFSmBZwqD2VEkUw6A/tzPF0LmW0ZZhhB8PFxuc+9IBG/FaSM+RLEenc7ljzFvGN+G0nGQoZnh7sy2A==} + '@vitest/coverage-v8@3.2.6': + resolution: {integrity: sha512-LsAdmUapA0qSN306d8+zOyawM0hFm2m2Hg9IwVNIKBm+qJV8cijiq2c+gxKZcB1HCfIWAy+0qEZDCUQA58A1cw==} peerDependencies: - '@vitest/browser': 2.1.3 - vitest: 2.1.3 + '@vitest/browser': 3.2.6 + vitest: 3.2.6 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@2.1.3': - resolution: {integrity: sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==} - - '@vitest/expect@2.1.5': - resolution: {integrity: sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==} + '@vitest/expect@3.2.6': + resolution: {integrity: sha512-1+7q9BtaKzEmO+fmNT3kYvoNn5Y71XWAx2Q5HRim4tTVRQVRv4uJFAQ5FbK0OPUeNP/WmVCpxYxoJdvuHVjzBQ==} - '@vitest/mocker@2.1.3': - resolution: {integrity: sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==} - peerDependencies: - '@vitest/spy': 2.1.3 - msw: ^2.3.5 - vite: ^5.0.0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - - '@vitest/mocker@2.1.5': - resolution: {integrity: sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==} + '@vitest/mocker@3.2.6': + resolution: {integrity: sha512-EZOrpDbkKotFAP7wPAQV1UIyoGOk4oX7ynWhBhLB7v+meMHbQhU16oPpIYGTTe4oFlhpryGpgpcZP/sin3hYuw==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@2.1.3': - resolution: {integrity: sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==} - - '@vitest/pretty-format@2.1.5': - resolution: {integrity: sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==} - - '@vitest/runner@2.1.3': - resolution: {integrity: sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==} + '@vitest/pretty-format@3.2.6': + resolution: {integrity: sha512-lb7XXXzmm2h2ASzFnRvQpDo6onT1NmMJA3tkGTWiBFtRJ9lxGY3d3mm/Apt36gej2bkkOVLL/yTOtufDaFa/jA==} - '@vitest/runner@2.1.5': - resolution: {integrity: sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==} + '@vitest/runner@3.2.6': + resolution: {integrity: sha512-HYcoSj1w5tcgUnzoF0HcyaAQjpA1gj9ftUJ7iSJSuipc02jW9gKkigwZbjFldAfYHA1fa8UZVRftdMY5msWM9Q==} - '@vitest/snapshot@2.1.3': - resolution: {integrity: sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==} + '@vitest/snapshot@3.2.6': + resolution: {integrity: sha512-H+ZjNTWGpObenh0YnlBctAPnJSI20P81PL8BPzWpx54YXLLTm8hEsWawtcYLMrwvpK48hGxLLbCS+1KRXhsKhw==} - '@vitest/snapshot@2.1.5': - resolution: {integrity: sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==} + '@vitest/spy@3.2.6': + resolution: {integrity: sha512-oq6BbH68WzcWmwtBrU9nqLeaXTR4XwJF7FSLkKEZo4i6eoXcrxjcwSuTvWBIRUTC6VC72nXYunzqgZA+IKdtxg==} - '@vitest/spy@2.1.3': - resolution: {integrity: sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==} - - '@vitest/spy@2.1.5': - resolution: {integrity: sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==} - - '@vitest/utils@2.1.3': - resolution: {integrity: sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==} - - '@vitest/utils@2.1.5': - resolution: {integrity: sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==} + '@vitest/utils@3.2.6': + resolution: {integrity: sha512-lI23nIs4bnT3T8NIoh+vFaz5s2/DdP0Jgt2jxwgWljvwn82cLJtyi/If+fjFyoLMGIOz0U/fKvWE0d4jsNQEfg==} JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -1733,6 +1697,9 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-v8-to-istanbul@0.3.12: + resolution: {integrity: sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g==} + at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} @@ -1824,9 +1791,9 @@ packages: caniuse-lite@1.0.30001680: resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} - chai@5.1.2: - resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} - engines: {node: '>=12'} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} chalk@4.1.0: resolution: {integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==} @@ -2127,8 +2094,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} @@ -2358,8 +2325,8 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - expect-type@1.1.0: - resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} extract-zip@1.7.0: @@ -2778,9 +2745,15 @@ packages: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true + js-tokens@10.0.0: + resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -2888,6 +2861,9 @@ packages: loupe@3.1.2: resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + lowercase-keys@1.0.1: resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} engines: {node: '>=0.10.0'} @@ -2913,8 +2889,8 @@ packages: magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.12: - resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} @@ -3214,6 +3190,9 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@2.0.0: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} @@ -3545,9 +3524,9 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} - engines: {node: '>= 10'} + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -3611,8 +3590,8 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - std-env@3.8.0: - resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} strict-event-emitter@0.5.1: resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} @@ -3671,6 +3650,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + sumchecker@3.0.1: resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} engines: {node: '>= 8.0'} @@ -3720,8 +3702,8 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.1: - resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} tinyexec@1.1.2: resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} @@ -3735,16 +3717,16 @@ packages: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} - tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} - tinyrainbow@1.2.0: - resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} to-readable-stream@1.0.0: @@ -3888,14 +3870,9 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - vite-node@2.1.3: - resolution: {integrity: sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - - vite-node@2.1.5: - resolution: {integrity: sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==} - engines: {node: ^18.0.0 || >=20.0.0} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true vite@3.1.6: @@ -3976,44 +3953,22 @@ packages: terser: optional: true - vitest@2.1.3: - resolution: {integrity: sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==} - engines: {node: ^18.0.0 || >=20.0.0} + vitest@3.2.6: + resolution: {integrity: sha512-xejya+bT/j/+R/AGa1XOfRxLmNUlLtlwjRsFUILF+xHfzElmGcmFydy2gqqIrd62ptIEfwVMofd19uNWD9L7Nw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.3 - '@vitest/ui': 2.1.3 + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.6 + '@vitest/ui': 3.2.6 happy-dom: '*' jsdom: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - - vitest@2.1.5: - resolution: {integrity: sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.5 - '@vitest/ui': 2.1.5 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': + '@types/debug': optional: true '@types/node': optional: true @@ -4069,8 +4024,8 @@ packages: write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -4247,20 +4202,23 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@bcoe/v8-coverage@0.2.3': {} + '@bcoe/v8-coverage@1.0.2': {} '@bundled-es-modules/cookie@2.0.1': dependencies: cookie: 0.7.2 + optional: true '@bundled-es-modules/statuses@1.0.1': dependencies: statuses: 2.0.1 + optional: true '@bundled-es-modules/tough-cookie@0.1.6': dependencies: '@types/tough-cookie': 4.0.5 tough-cookie: 4.1.4 + optional: true '@commitlint/cli@11.0.0': dependencies: @@ -4626,6 +4584,7 @@ snapshots: '@inquirer/core': 10.1.0(@types/node@18.19.64) '@inquirer/type': 3.0.1(@types/node@18.19.64) '@types/node': 18.19.64 + optional: true '@inquirer/core@10.1.0(@types/node@18.19.64)': dependencies: @@ -4640,18 +4599,21 @@ snapshots: yoctocolors-cjs: 2.1.2 transitivePeerDependencies: - '@types/node' + optional: true - '@inquirer/figures@1.0.8': {} + '@inquirer/figures@1.0.8': + optional: true '@inquirer/type@3.0.1(@types/node@18.19.64)': dependencies: '@types/node': 18.19.64 + optional: true '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 @@ -4684,11 +4646,18 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -4713,6 +4682,7 @@ snapshots: is-node-process: 1.2.0 outvariant: 1.4.3 strict-event-emitter: 0.5.1 + optional: true '@napi-rs/magic-string-android-arm-eabi@0.3.4': optional: true @@ -4781,14 +4751,17 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@open-draft/deferred-promise@2.2.0': {} + '@open-draft/deferred-promise@2.2.0': + optional: true '@open-draft/logger@0.3.0': dependencies: is-node-process: 1.2.0 outvariant: 1.4.3 + optional: true - '@open-draft/until@2.1.0': {} + '@open-draft/until@2.1.0': + optional: true '@parcel/watcher-android-arm64@2.5.0': optional: true @@ -5040,7 +5013,7 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': dependencies: '@testing-library/dom': 10.4.0 @@ -5054,7 +5027,15 @@ snapshots: '@types/aria-query@5.0.4': {} - '@types/cookie@0.6.0': {} + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/cookie@0.6.0': + optional: true + + '@types/deep-eql@4.0.2': {} '@types/dom-webcodecs@0.1.13': {} @@ -5086,9 +5067,11 @@ snapshots: dependencies: '@types/node': 18.19.64 - '@types/statuses@2.0.5': {} + '@types/statuses@2.0.5': + optional: true - '@types/tough-cookie@4.0.5': {} + '@types/tough-cookie@4.0.5': + optional: true '@types/webxr@0.5.24': {} @@ -5185,159 +5168,88 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitest/browser@2.1.3(@types/node@18.19.64)(@vitest/spy@2.1.3)(typescript@5.6.3)(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))(vitest@2.1.3)': - dependencies: - '@testing-library/dom': 10.4.0 - '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) - '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1)) - '@vitest/utils': 2.1.3 - magic-string: 0.30.12 - msw: 2.6.5(@types/node@18.19.64)(typescript@5.6.3) - sirv: 2.0.4 - tinyrainbow: 1.2.0 - vitest: 2.1.3(@types/node@18.19.64)(@vitest/browser@2.1.3)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(sass@1.81.0)(terser@5.44.1) - ws: 8.18.0 - transitivePeerDependencies: - - '@types/node' - - '@vitest/spy' - - bufferutil - - typescript - - utf-8-validate - - vite - optional: true - - '@vitest/browser@2.1.3(@types/node@18.19.64)(@vitest/spy@2.1.5)(playwright@1.55.0)(typescript@5.6.3)(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))(vitest@2.1.5)': + '@vitest/browser@3.2.6(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(playwright@1.55.0)(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))(vitest@3.2.6)': dependencies: '@testing-library/dom': 10.4.0 - '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) - '@vitest/mocker': 2.1.3(@vitest/spy@2.1.5)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1)) - '@vitest/utils': 2.1.3 - magic-string: 0.30.12 - msw: 2.6.5(@types/node@18.19.64)(typescript@5.6.3) - sirv: 2.0.4 - tinyrainbow: 1.2.0 - vitest: 2.1.5(@types/node@18.19.64)(@vitest/browser@2.1.3)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(sass@1.81.0)(terser@5.44.1) - ws: 8.18.0 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) + '@vitest/mocker': 3.2.6(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1)) + '@vitest/utils': 3.2.6 + magic-string: 0.30.21 + sirv: 3.0.2 + tinyrainbow: 2.0.0 + vitest: 3.2.6(@types/node@18.19.64)(@vitest/browser@3.2.6)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(sass@1.81.0)(terser@5.44.1) + ws: 8.21.0 optionalDependencies: playwright: 1.55.0 transitivePeerDependencies: - - '@types/node' - - '@vitest/spy' - bufferutil - - typescript + - msw - utf-8-validate - vite - '@vitest/coverage-v8@2.1.3(@vitest/browser@2.1.3(@types/node@18.19.64)(@vitest/spy@2.1.3)(typescript@5.6.3)(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))(vitest@2.1.3))(vitest@2.1.3(@types/node@18.19.64)(@vitest/browser@2.1.3)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(sass@1.81.0)(terser@5.44.1))': + '@vitest/coverage-v8@3.2.6(@vitest/browser@3.2.6(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))(vitest@3.2.6))(vitest@3.2.6(@types/node@18.19.64)(@vitest/browser@3.2.6)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(sass@1.81.0)(terser@5.44.1))': dependencies: '@ampproject/remapping': 2.3.0 - '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.7 + '@bcoe/v8-coverage': 1.0.2 + ast-v8-to-istanbul: 0.3.12 + debug: 4.4.3 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.1.7 - magic-string: 0.30.12 + magic-string: 0.30.21 magicast: 0.3.5 - std-env: 3.8.0 + std-env: 3.10.0 test-exclude: 7.0.1 - tinyrainbow: 1.2.0 - vitest: 2.1.3(@types/node@18.19.64)(@vitest/browser@2.1.3)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(sass@1.81.0)(terser@5.44.1) + tinyrainbow: 2.0.0 + vitest: 3.2.6(@types/node@18.19.64)(@vitest/browser@3.2.6)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(sass@1.81.0)(terser@5.44.1) optionalDependencies: - '@vitest/browser': 2.1.3(@types/node@18.19.64)(@vitest/spy@2.1.3)(typescript@5.6.3)(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))(vitest@2.1.3) + '@vitest/browser': 3.2.6(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(playwright@1.55.0)(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))(vitest@3.2.6) transitivePeerDependencies: - supports-color - '@vitest/expect@2.1.3': + '@vitest/expect@3.2.6': dependencies: - '@vitest/spy': 2.1.3 - '@vitest/utils': 2.1.3 - chai: 5.1.2 - tinyrainbow: 1.2.0 + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.6 + '@vitest/utils': 3.2.6 + chai: 5.3.3 + tinyrainbow: 2.0.0 - '@vitest/expect@2.1.5': + '@vitest/mocker@3.2.6(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))': dependencies: - '@vitest/spy': 2.1.5 - '@vitest/utils': 2.1.5 - chai: 5.1.2 - tinyrainbow: 1.2.0 - - '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))': - dependencies: - '@vitest/spy': 2.1.3 + '@vitest/spy': 3.2.6 estree-walker: 3.0.3 - magic-string: 0.30.12 + magic-string: 0.30.21 optionalDependencies: msw: 2.6.5(@types/node@18.19.64)(typescript@5.6.3) vite: 5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1) - '@vitest/mocker@2.1.3(@vitest/spy@2.1.5)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))': - dependencies: - '@vitest/spy': 2.1.5 - estree-walker: 3.0.3 - magic-string: 0.30.12 - optionalDependencies: - msw: 2.6.5(@types/node@18.19.64)(typescript@5.6.3) - vite: 5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1) - - '@vitest/mocker@2.1.5(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))': - dependencies: - '@vitest/spy': 2.1.5 - estree-walker: 3.0.3 - magic-string: 0.30.12 - optionalDependencies: - msw: 2.6.5(@types/node@18.19.64)(typescript@5.6.3) - vite: 5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1) - - '@vitest/pretty-format@2.1.3': - dependencies: - tinyrainbow: 1.2.0 - - '@vitest/pretty-format@2.1.5': - dependencies: - tinyrainbow: 1.2.0 - - '@vitest/runner@2.1.3': - dependencies: - '@vitest/utils': 2.1.3 - pathe: 1.1.2 - - '@vitest/runner@2.1.5': + '@vitest/pretty-format@3.2.6': dependencies: - '@vitest/utils': 2.1.5 - pathe: 1.1.2 + tinyrainbow: 2.0.0 - '@vitest/snapshot@2.1.3': + '@vitest/runner@3.2.6': dependencies: - '@vitest/pretty-format': 2.1.3 - magic-string: 0.30.12 - pathe: 1.1.2 + '@vitest/utils': 3.2.6 + pathe: 2.0.3 + strip-literal: 3.1.0 - '@vitest/snapshot@2.1.5': + '@vitest/snapshot@3.2.6': dependencies: - '@vitest/pretty-format': 2.1.5 - magic-string: 0.30.12 - pathe: 1.1.2 + '@vitest/pretty-format': 3.2.6 + magic-string: 0.30.21 + pathe: 2.0.3 - '@vitest/spy@2.1.3': + '@vitest/spy@3.2.6': dependencies: - tinyspy: 3.0.2 + tinyspy: 4.0.4 - '@vitest/spy@2.1.5': + '@vitest/utils@3.2.6': dependencies: - tinyspy: 3.0.2 - - '@vitest/utils@2.1.3': - dependencies: - '@vitest/pretty-format': 2.1.3 - loupe: 3.1.2 - tinyrainbow: 1.2.0 - - '@vitest/utils@2.1.5': - dependencies: - '@vitest/pretty-format': 2.1.5 - loupe: 3.1.2 - tinyrainbow: 1.2.0 + '@vitest/pretty-format': 3.2.6 + loupe: 3.2.1 + tinyrainbow: 2.0.0 JSONStream@1.3.5: dependencies: @@ -5371,6 +5283,7 @@ snapshots: ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 + optional: true ansi-escapes@7.3.0: dependencies: @@ -5421,6 +5334,12 @@ snapshots: assertion-error@2.0.1: {} + ast-v8-to-istanbul@0.3.12: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + estree-walker: 3.0.3 + js-tokens: 10.0.0 + at-least-node@1.0.0: {} balanced-match@1.0.2: {} @@ -5526,7 +5445,7 @@ snapshots: caniuse-lite@1.0.30001680: {} - chai@5.1.2: + chai@5.3.3: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 @@ -5579,7 +5498,8 @@ snapshots: slice-ansi: 8.0.0 string-width: 8.2.1 - cli-width@4.1.0: {} + cli-width@4.1.0: + optional: true cliui@6.0.0: dependencies: @@ -5592,6 +5512,7 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + optional: true clone-response@1.0.3: dependencies: @@ -5660,7 +5581,8 @@ snapshots: convert-source-map@2.0.0: {} - cookie@0.7.2: {} + cookie@0.7.2: + optional: true core-js@3.39.0: {} @@ -5816,7 +5738,7 @@ snapshots: es-errors@1.3.0: optional: true - es-module-lexer@1.5.4: {} + es-module-lexer@1.7.0: {} es6-error@4.1.1: {} @@ -6069,7 +5991,7 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - expect-type@1.1.0: {} + expect-type@1.3.0: {} extract-zip@1.7.0: dependencies: @@ -6318,7 +6240,8 @@ snapshots: graphemer@1.4.0: {} - graphql@16.9.0: {} + graphql@16.9.0: + optional: true hard-rejection@2.1.0: {} @@ -6344,7 +6267,8 @@ snapshots: dependencies: function-bind: 1.1.2 - headers-polyfill@4.0.3: {} + headers-polyfill@4.0.3: + optional: true hosted-git-info@2.8.9: {} @@ -6408,7 +6332,8 @@ snapshots: is-module@1.0.0: {} - is-node-process@1.2.0: {} + is-node-process@1.2.0: + optional: true is-number@7.0.0: {} @@ -6479,7 +6404,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.3.7 + debug: 4.4.3 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -6497,8 +6422,12 @@ snapshots: jiti@1.21.6: {} + js-tokens@10.0.0: {} + js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + js-yaml@3.14.1: dependencies: argparse: 1.0.10 @@ -6608,6 +6537,8 @@ snapshots: loupe@3.1.2: {} + loupe@3.2.1: {} + lowercase-keys@1.0.1: {} lowercase-keys@2.0.0: {} @@ -6628,9 +6559,9 @@ snapshots: dependencies: sourcemap-codec: 1.4.8 - magic-string@0.30.12: + magic-string@0.30.21: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 magicast@0.3.5: dependencies: @@ -6677,6 +6608,7 @@ snapshots: dependencies: braces: 3.0.3 picomatch: 2.3.1 + optional: true mime@2.6.0: {} @@ -6764,8 +6696,10 @@ snapshots: typescript: 5.6.3 transitivePeerDependencies: - '@types/node' + optional: true - mute-stream@2.0.0: {} + mute-stream@2.0.0: + optional: true nanoid@3.3.7: {} @@ -6883,7 +6817,8 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - outvariant@1.4.3: {} + outvariant@1.4.3: + optional: true p-cancelable@1.1.0: {} @@ -6946,12 +6881,15 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@6.3.0: {} + path-to-regexp@6.3.0: + optional: true path-type@4.0.0: {} pathe@1.1.2: {} + pathe@2.0.3: {} + pathval@2.0.0: {} pend@1.2.0: {} @@ -7030,6 +6968,7 @@ snapshots: psl@1.10.0: dependencies: punycode: 2.3.1 + optional: true pump@3.0.2: dependencies: @@ -7040,7 +6979,8 @@ snapshots: q@1.5.1: {} - querystringify@2.2.0: {} + querystringify@2.2.0: + optional: true queue-microtask@1.2.3: {} @@ -7103,7 +7043,8 @@ snapshots: require-main-filename@2.0.0: {} - requires-port@1.0.0: {} + requires-port@1.0.0: + optional: true resolve-from@4.0.0: {} @@ -7269,7 +7210,7 @@ snapshots: signal-exit@4.1.0: {} - sirv@2.0.4: + sirv@3.0.2: dependencies: '@polka/url': 1.0.0-next.28 mrmime: 2.0.0 @@ -7335,11 +7276,13 @@ snapshots: stackback@0.0.2: {} - statuses@2.0.1: {} + statuses@2.0.1: + optional: true - std-env@3.8.0: {} + std-env@3.10.0: {} - strict-event-emitter@0.5.1: {} + strict-event-emitter@0.5.1: + optional: true string-argv@0.3.2: {} @@ -7353,7 +7296,7 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 string-width@7.2.0: dependencies: @@ -7396,9 +7339,13 @@ snapshots: strip-json-comments@3.1.1: {} + strip-literal@3.1.0: + dependencies: + js-tokens: 9.0.1 + sumchecker@3.0.1: dependencies: - debug: 4.3.7 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -7454,7 +7401,7 @@ snapshots: tinybench@2.9.0: {} - tinyexec@0.3.1: {} + tinyexec@0.3.2: {} tinyexec@1.1.2: {} @@ -7468,11 +7415,11 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - tinypool@1.0.2: {} + tinypool@1.1.1: {} - tinyrainbow@1.2.0: {} + tinyrainbow@2.0.0: {} - tinyspy@3.0.2: {} + tinyspy@4.0.4: {} to-readable-stream@1.0.0: {} @@ -7488,6 +7435,7 @@ snapshots: punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 + optional: true trim-newlines@3.0.1: {} @@ -7533,13 +7481,15 @@ snapshots: type-fest@0.20.2: {} - type-fest@0.21.3: {} + type-fest@0.21.3: + optional: true type-fest@0.6.0: {} type-fest@0.8.1: {} - type-fest@4.27.0: {} + type-fest@4.27.0: + optional: true typedarray-to-buffer@3.1.5: dependencies: @@ -7555,7 +7505,8 @@ snapshots: universalify@0.1.2: {} - universalify@0.2.0: {} + universalify@0.2.0: + optional: true universalify@2.0.1: {} @@ -7577,6 +7528,7 @@ snapshots: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 + optional: true util-deprecate@1.0.2: {} @@ -7589,29 +7541,12 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vite-node@2.1.3(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1): - dependencies: - cac: 6.7.14 - debug: 4.3.7 - pathe: 1.1.2 - vite: 5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vite-node@2.1.5(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1): + vite-node@3.2.4(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1): dependencies: cac: 6.7.14 debug: 4.4.3 - es-module-lexer: 1.5.4 - pathe: 1.1.2 + es-module-lexer: 1.7.0 + pathe: 2.0.3 vite: 5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1) transitivePeerDependencies: - '@types/node' @@ -7657,66 +7592,34 @@ snapshots: sass: 1.81.0 terser: 5.44.1 - vitest@2.1.3(@types/node@18.19.64)(@vitest/browser@2.1.3)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(sass@1.81.0)(terser@5.44.1): - dependencies: - '@vitest/expect': 2.1.3 - '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1)) - '@vitest/pretty-format': 2.1.5 - '@vitest/runner': 2.1.3 - '@vitest/snapshot': 2.1.3 - '@vitest/spy': 2.1.3 - '@vitest/utils': 2.1.3 - chai: 5.1.2 - debug: 4.3.7 - magic-string: 0.30.12 - pathe: 1.1.2 - std-env: 3.8.0 - tinybench: 2.9.0 - tinyexec: 0.3.1 - tinypool: 1.0.2 - tinyrainbow: 1.2.0 - vite: 5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1) - vite-node: 2.1.3(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 18.19.64 - '@vitest/browser': 2.1.3(@types/node@18.19.64)(@vitest/spy@2.1.3)(typescript@5.6.3)(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))(vitest@2.1.3) - transitivePeerDependencies: - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vitest@2.1.5(@types/node@18.19.64)(@vitest/browser@2.1.3)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(sass@1.81.0)(terser@5.44.1): - dependencies: - '@vitest/expect': 2.1.5 - '@vitest/mocker': 2.1.5(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1)) - '@vitest/pretty-format': 2.1.5 - '@vitest/runner': 2.1.5 - '@vitest/snapshot': 2.1.5 - '@vitest/spy': 2.1.5 - '@vitest/utils': 2.1.5 - chai: 5.1.2 + vitest@3.2.6(@types/node@18.19.64)(@vitest/browser@3.2.6)(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(sass@1.81.0)(terser@5.44.1): + dependencies: + '@types/chai': 5.2.3 + '@vitest/expect': 3.2.6 + '@vitest/mocker': 3.2.6(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1)) + '@vitest/pretty-format': 3.2.6 + '@vitest/runner': 3.2.6 + '@vitest/snapshot': 3.2.6 + '@vitest/spy': 3.2.6 + '@vitest/utils': 3.2.6 + chai: 5.3.3 debug: 4.4.3 - expect-type: 1.1.0 - magic-string: 0.30.12 - pathe: 1.1.2 - std-env: 3.8.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 3.10.0 tinybench: 2.9.0 - tinyexec: 0.3.1 - tinypool: 1.0.2 - tinyrainbow: 1.2.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.16 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 vite: 5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1) - vite-node: 2.1.5(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1) + vite-node: 3.2.4(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 18.19.64 - '@vitest/browser': 2.1.3(@types/node@18.19.64)(@vitest/spy@2.1.5)(playwright@1.55.0)(typescript@5.6.3)(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))(vitest@2.1.5) + '@vitest/browser': 3.2.6(msw@2.6.5(@types/node@18.19.64)(typescript@5.6.3))(playwright@1.55.0)(vite@5.4.11(@types/node@18.19.64)(sass@1.81.0)(terser@5.44.1))(vitest@3.2.6) transitivePeerDependencies: - less - lightningcss @@ -7759,9 +7662,9 @@ snapshots: wrap-ansi@8.1.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 wrap-ansi@9.0.2: dependencies: @@ -7778,11 +7681,12 @@ snapshots: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 - ws@8.18.0: {} + ws@8.21.0: {} y18n@4.0.3: {} - y18n@5.0.8: {} + y18n@5.0.8: + optional: true yallist@3.1.1: {} @@ -7799,7 +7703,8 @@ snapshots: yargs-parser@20.2.9: {} - yargs-parser@21.1.1: {} + yargs-parser@21.1.1: + optional: true yargs@15.4.1: dependencies: @@ -7824,6 +7729,7 @@ snapshots: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 + optional: true yauzl@2.10.0: dependencies: @@ -7834,4 +7740,5 @@ snapshots: yocto-queue@0.1.0: {} - yoctocolors-cjs@2.1.2: {} + yoctocolors-cjs@2.1.2: + optional: true diff --git a/tests/package.json b/tests/package.json index e2379813b0..ca4cabd079 100644 --- a/tests/package.json +++ b/tests/package.json @@ -28,6 +28,6 @@ "@galacean/engine-shader": "workspace:*" }, "devDependencies": { - "@vitest/browser": "2.1.3" + "@vitest/browser": "3.2.6" } } diff --git a/tests/src/shader-compiler/Precompile.test.ts b/tests/src/shader-compiler/Precompile.test.ts index 8142479e4d..0b2a795604 100644 --- a/tests/src/shader-compiler/Precompile.test.ts +++ b/tests/src/shader-compiler/Precompile.test.ts @@ -8,10 +8,9 @@ import { import { ShaderMacroProcessor } from "@galacean/engine-core/src/shader/ShaderMacroProcessor"; import { Logger, WebGLEngine } from "@galacean/engine"; -import { server } from "@vitest/browser/context"; import { beforeAll, describe, expect, it } from "vitest"; +import { readFile } from "./readShaderTestFile"; -const { readFile } = server.commands; Logger.enable(); const shaderCompiler = new ShaderCompiler(); diff --git a/tests/src/shader-compiler/PrecompileABTest.test.ts b/tests/src/shader-compiler/PrecompileABTest.test.ts index f9269fd9ca..a4722f8b26 100644 --- a/tests/src/shader-compiler/PrecompileABTest.test.ts +++ b/tests/src/shader-compiler/PrecompileABTest.test.ts @@ -22,10 +22,9 @@ import { ShaderCompiler } from "@galacean/engine-shader-compiler"; import { ShaderMacroProcessor } from "@galacean/engine-core/src/shader/ShaderMacroProcessor"; import { Logger, WebGLEngine } from "@galacean/engine"; -import { server } from "@vitest/browser/context"; import { describe, expect, it } from "vitest"; +import { readFile } from "./readShaderTestFile"; -const { readFile } = server.commands; Logger.enable(); const shaderCompiler = new ShaderCompiler(); diff --git a/tests/src/shader-compiler/PrecompileBenchmark.test.ts b/tests/src/shader-compiler/PrecompileBenchmark.test.ts index 00f67d4ab0..e1edc4c583 100644 --- a/tests/src/shader-compiler/PrecompileBenchmark.test.ts +++ b/tests/src/shader-compiler/PrecompileBenchmark.test.ts @@ -18,10 +18,8 @@ import { ShaderMacroProcessor } from "@galacean/engine-core/src/shader/ShaderMac import { shaders as builtinShaders } from "@galacean/engine-shader/sources"; import { Logger, WebGLEngine } from "@galacean/engine"; -import { server } from "@vitest/browser/context"; import { describe, expect, it } from "vitest"; - -const { readFile } = server.commands; +import { readFile } from "./readShaderTestFile"; function builtinSource(path: string): string { const entry = builtinShaders.find((s) => s.path === path); diff --git a/tests/src/shader-compiler/ShaderCompiler.test.ts b/tests/src/shader-compiler/ShaderCompiler.test.ts index 8590c00c2c..8d54c5b404 100644 --- a/tests/src/shader-compiler/ShaderCompiler.test.ts +++ b/tests/src/shader-compiler/ShaderCompiler.test.ts @@ -13,9 +13,9 @@ import { ShaderCompiler as ShaderCompilerVerbose } from "@galacean/engine-shader import { glslValidate } from "./ShaderValidate"; import { Logger, WebGLEngine } from "@galacean/engine"; -import { server } from "@vitest/browser/context"; import { describe, expect, it, vi } from "vitest"; -const { readFile } = server.commands; +import { readFile } from "./readShaderTestFile"; + Logger.enable(); const shaderCompilerVerbose = new ShaderCompilerVerbose(); diff --git a/tests/src/shader-compiler/readShaderTestFile.ts b/tests/src/shader-compiler/readShaderTestFile.ts new file mode 100644 index 0000000000..3fa5d73924 --- /dev/null +++ b/tests/src/shader-compiler/readShaderTestFile.ts @@ -0,0 +1,17 @@ +import { server } from "@vitest/browser/context"; + +const readBrowserFile = server.commands.readFile; +const shaderCompilerPathPrefix = "./"; +const packagesPathPrefix = "../../../packages/"; + +export function readFile(path: string): Promise { + if (path.startsWith(shaderCompilerPathPrefix)) { + return readBrowserFile(`src/shader-compiler/${path.slice(shaderCompilerPathPrefix.length)}`); + } + + if (path.startsWith(packagesPathPrefix)) { + return readBrowserFile(`../packages/${path.slice(packagesPathPrefix.length)}`); + } + + return readBrowserFile(path); +} diff --git a/tests/vitest.config.ts b/tests/vitest.config.ts index 91a68ffbca..e6d2526da8 100644 --- a/tests/vitest.config.ts +++ b/tests/vitest.config.ts @@ -1,4 +1,5 @@ import { defineProject } from "vitest/config"; +import type {} from "@vitest/browser/providers/playwright"; export default defineProject({ server: { @@ -17,15 +18,17 @@ export default defineProject({ browser: { provider: "playwright", enabled: true, - name: "chromium", - providerOptions: { - launch: { - args: - process.env.HEADLESS === "true" - ? ["--use-gl=egl", "--ignore-gpu-blocklist", "--use-gl=angle", "--headless"] - : ["--use-gl=egl", "--ignore-gpu-blocklist", "--use-gl=angle"] + instances: [ + { + browser: "chromium", + launch: { + args: + process.env.HEADLESS === "true" + ? ["--use-gl=egl", "--ignore-gpu-blocklist", "--use-gl=angle", "--headless"] + : ["--use-gl=egl", "--ignore-gpu-blocklist", "--use-gl=angle"] + } } - } + ] } } }); diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000000..590808176c --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + projects: ["packages/*", "tests"] + } +}); diff --git a/vitest.workspace.ts b/vitest.workspace.ts deleted file mode 100644 index a1db6eb4de..0000000000 --- a/vitest.workspace.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { defineWorkspace } from "vitest/config"; - -export default defineWorkspace(["packages/*", "tests"]); From e712794755c5aa3047427ac7ac0d0440357bf7c2 Mon Sep 17 00:00:00 2001 From: "chenmo.gl" Date: Mon, 15 Jun 2026 19:02:04 +0800 Subject: [PATCH 7/7] test: use explicit shader fixture paths --- tests/src/shader-compiler/Precompile.test.ts | 48 ++++----- .../shader-compiler/PrecompileABTest.test.ts | 22 +++-- .../PrecompileBenchmark.test.ts | 6 +- .../shader-compiler/ShaderCompiler.test.ts | 98 ++++++++++--------- .../src/shader-compiler/readShaderTestFile.ts | 17 ---- 5 files changed, 91 insertions(+), 100 deletions(-) delete mode 100644 tests/src/shader-compiler/readShaderTestFile.ts diff --git a/tests/src/shader-compiler/Precompile.test.ts b/tests/src/shader-compiler/Precompile.test.ts index 0b2a795604..5620e962f9 100644 --- a/tests/src/shader-compiler/Precompile.test.ts +++ b/tests/src/shader-compiler/Precompile.test.ts @@ -9,7 +9,9 @@ import { ShaderMacroProcessor } from "@galacean/engine-core/src/shader/ShaderMac import { Logger, WebGLEngine } from "@galacean/engine"; import { beforeAll, describe, expect, it } from "vitest"; -import { readFile } from "./readShaderTestFile"; +import { server } from "@vitest/browser/context"; + +const { readFile } = server.commands; Logger.enable(); @@ -23,7 +25,7 @@ function makeMacroMap(entries: Array<[string, string]>): Map { describe("ShaderCompiler Precompile", async () => { const canvas = document.createElement("canvas"); const engine = await WebGLEngine.create({ canvas, shaderCompiler }); - const PBRSource = await readFile("../../../packages/shader/src/Shaders/PBR.shader"); + const PBRSource = await readFile("../packages/shader/src/Shaders/PBR.shader"); // ───────────────────────────────────────────────────────── // 1. JSON Serialization round-trip @@ -861,7 +863,7 @@ describe("ShaderCompiler Precompile", async () => { // Note: This first test is a self-check (idempotency) — it verifies that calling // evaluateShaderInstructions twice with the same inputs produces identical output. it("evaluateShaderInstructions is deterministic (same input → same output)", async () => { - const source = await readFile("./shaders/macro-pre.shader"); + const source = await readFile("src/shader-compiler/shaders/macro-pre.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); const macroCombinations: Array> = [ @@ -884,7 +886,7 @@ describe("ShaderCompiler Precompile", async () => { }); it("evaluateShaderInstructions output survives JSON round-trip of instructions", async () => { - const source = await readFile("./shaders/macro-pre.shader"); + const source = await readFile("src/shader-compiler/shaders/macro-pre.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); for (const subShader of precompiled.subShaders) { @@ -968,7 +970,7 @@ describe("ShaderCompiler Precompile", async () => { }); it("simple shader (noFragArgs) → instructions should be single TEXT", async () => { - const source = await readFile("./shaders/noFragArgs.shader"); + const source = await readFile("src/shader-compiler/shaders/noFragArgs.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); for (const subShader of precompiled.subShaders) { @@ -984,7 +986,7 @@ describe("ShaderCompiler Precompile", async () => { }); it("macro-heavy shader → instructions with conditionals", async () => { - const source = await readFile("./shaders/macro-pre.shader"); + const source = await readFile("src/shader-compiler/shaders/macro-pre.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); let foundMacroPass = false; @@ -1003,7 +1005,7 @@ describe("ShaderCompiler Precompile", async () => { }); it("multi-pass shader → renderStates have constantMap entries (BlendState)", async () => { - const source = await readFile("./shaders/multi-pass.shader"); + const source = await readFile("src/shader-compiler/shaders/multi-pass.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); let hasConstant = false; @@ -1018,7 +1020,7 @@ describe("ShaderCompiler Precompile", async () => { }); it("multi-pass shader → UsePass correctly flagged", async () => { - const source = await readFile("./shaders/multi-pass.shader"); + const source = await readFile("src/shader-compiler/shaders/multi-pass.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); const allPasses = precompiled.subShaders.flatMap((s) => s.passes); @@ -1046,7 +1048,7 @@ describe("ShaderCompiler Precompile", async () => { // Hammersley `radicalInverse_VdC` bit twiddle (from // `galacean-tools/baker/IBLBaker.shader`) so `<<`/`>>` are covered too. it("preserves every GLSL ES 3.00 numeric literal form", async () => { - const source = await readFile("./shaders/numeric-literals.shader"); + const source = await readFile("src/shader-compiler/shaders/numeric-literals.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES300); const pass = precompiled.subShaders[0].passes[0]; const text = [ @@ -1097,7 +1099,7 @@ describe("ShaderCompiler Precompile", async () => { // values; each must emit a DefineVal and every user identifier in the // value must become a real `uniform` declaration. it("emits object-like Define instructions and uniforms for complex macro values", async () => { - const source = await readFile("./shaders/macro-value-refs.shader"); + const source = await readFile("src/shader-compiler/shaders/macro-value-refs.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); const fragInstr = (precompiled.subShaders[0].passes[0].fragmentShaderInstructions as ShaderInstruction[]) ?? []; @@ -1143,7 +1145,7 @@ describe("ShaderCompiler Precompile", async () => { // identifier scanner. Real `u_used_*` refs are kept; `u_in_comment_*` // mentions are not promoted to uniforms. it("does not collect identifiers from comments inside #define values", async () => { - const source = await readFile("./shaders/macro-value-refs-with-comments.shader"); + const source = await readFile("src/shader-compiler/shaders/macro-value-refs-with-comments.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); const fragInstr = (precompiled.subShaders[0].passes[0].fragmentShaderInstructions as ShaderInstruction[]) ?? []; const fragText = fragInstr @@ -1166,7 +1168,7 @@ describe("ShaderCompiler Precompile", async () => { }); it("subShader tags are preserved", async () => { - const source = await readFile("./shaders/macro-pre.shader"); + const source = await readFile("src/shader-compiler/shaders/macro-pre.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); const sub = precompiled.subShaders[0]; @@ -1175,7 +1177,7 @@ describe("ShaderCompiler Precompile", async () => { }); it("pass tags are preserved", async () => { - const source = await readFile("./shaders/noFragArgs.shader"); + const source = await readFile("src/shader-compiler/shaders/noFragArgs.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); const pass = precompiled.subShaders[0].passes[0]; @@ -1193,7 +1195,7 @@ describe("ShaderCompiler Precompile", async () => { describe("MacroCallFunction calleeKind-aware arg filtering", () => { let evaluated: string; beforeAll(async () => { - const source = await readFile("./shaders/macro-as-type-args.shader"); + const source = await readFile("src/shader-compiler/shaders/macro-as-type-args.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); const vi = precompiled.subShaders[0].passes[0].vertexShaderInstructions ?? []; evaluated = ShaderMacroProcessor.evaluate(vi as any, new Map()); @@ -1246,7 +1248,7 @@ describe("ShaderCompiler Precompile", async () => { }); it("platformTarget is set on each ShaderPass", async () => { - const source = await readFile("./shaders/noFragArgs.shader"); + const source = await readFile("src/shader-compiler/shaders/noFragArgs.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); const testData = { ...precompiled, name: "TestNoFrag_CFP_PlatformTarget" }; const shader = Shader._createFromPrecompiled(testData); @@ -1262,7 +1264,7 @@ describe("ShaderCompiler Precompile", async () => { }); it("_vertexShaderInstructions / _fragmentShaderInstructions are set correctly", async () => { - const source = await readFile("./shaders/noFragArgs.shader"); + const source = await readFile("src/shader-compiler/shaders/noFragArgs.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); const testData = { ...precompiled, name: "TestNoFrag_CFP_ShaderInstructions" }; const shader = Shader._createFromPrecompiled(testData); @@ -1280,7 +1282,7 @@ describe("ShaderCompiler Precompile", async () => { }); it("_vertexShaderInstructions populated for macro-heavy shader", async () => { - const source = await readFile("./shaders/macro-pre.shader"); + const source = await readFile("src/shader-compiler/shaders/macro-pre.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); const testData = { ...precompiled, name: "TestMacroPre_CFP_ShaderInstructions" }; const shader = Shader._createFromPrecompiled(testData); @@ -1302,7 +1304,7 @@ describe("ShaderCompiler Precompile", async () => { }); it("SubShader tags are preserved after _createFromPrecompiled", async () => { - const source = await readFile("./shaders/macro-pre.shader"); + const source = await readFile("src/shader-compiler/shaders/macro-pre.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); const testData = { ...precompiled, name: "TestMacroPre_CFP_Tags" }; const shader = Shader._createFromPrecompiled(testData); @@ -1314,7 +1316,7 @@ describe("ShaderCompiler Precompile", async () => { }); it("ShaderPass tags are preserved after _createFromPrecompiled", async () => { - const source = await readFile("./shaders/noFragArgs.shader"); + const source = await readFile("src/shader-compiler/shaders/noFragArgs.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); const testData = { ...precompiled, name: "TestNoFrag_CFP_PassTags" }; const shader = Shader._createFromPrecompiled(testData); @@ -1338,7 +1340,7 @@ describe("ShaderCompiler Precompile", async () => { }); it("UsePass in multi-pass shader is handled without throwing", async () => { - const source = await readFile("./shaders/multi-pass.shader"); + const source = await readFile("src/shader-compiler/shaders/multi-pass.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); const testData = { ...precompiled, name: "TestMultiPass_CFP_UsePass" }; @@ -1362,7 +1364,7 @@ describe("ShaderCompiler Precompile", async () => { for (const shaderFile of testShaders) { it(`${shaderFile}: precompile output matches live compilation`, async () => { - const source = await readFile(`./shaders/${shaderFile}`); + const source = await readFile(`src/shader-compiler/shaders/${shaderFile}`); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); const liveSource = shaderCompiler._parseShaderSource(source); @@ -1389,7 +1391,7 @@ describe("ShaderCompiler Precompile", async () => { } it("GLSLES300 precompile output matches GLSLES300 live compilation", async () => { - const source = await readFile("./shaders/noFragArgs.shader"); + const source = await readFile("src/shader-compiler/shaders/noFragArgs.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES300); const liveSource = shaderCompiler._parseShaderSource(source); @@ -1440,7 +1442,7 @@ describe("ShaderCompiler Precompile", async () => { }); it("evaluateShaderInstructions is fast on macro-heavy shader", async () => { - const source = await readFile("./shaders/macro-pre.shader"); + const source = await readFile("src/shader-compiler/shaders/macro-pre.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); let fragmentShaderInstructions: ShaderInstruction[] | undefined; diff --git a/tests/src/shader-compiler/PrecompileABTest.test.ts b/tests/src/shader-compiler/PrecompileABTest.test.ts index a4722f8b26..afac78179d 100644 --- a/tests/src/shader-compiler/PrecompileABTest.test.ts +++ b/tests/src/shader-compiler/PrecompileABTest.test.ts @@ -23,7 +23,9 @@ import { ShaderMacroProcessor } from "@galacean/engine-core/src/shader/ShaderMac import { Logger, WebGLEngine } from "@galacean/engine"; import { describe, expect, it } from "vitest"; -import { readFile } from "./readShaderTestFile"; +import { server } from "@vitest/browser/context"; + +const { readFile } = server.commands; Logger.enable(); @@ -110,7 +112,7 @@ const normalize = (s: string) => describe("Precompile A/B Test: Live vs Precompiled", async () => { const canvas = document.createElement("canvas"); const engine = await WebGLEngine.create({ canvas }); - const PBRSource = await readFile("../../../packages/shader/src/Shaders/PBR.shader"); + const PBRSource = await readFile("../packages/shader/src/Shaders/PBR.shader"); // @ts-ignore — bind runtime include map so the compiler can resolve `#include`. shaderCompiler._includeMap = ShaderFactory.includeMap; @@ -131,7 +133,7 @@ describe("Precompile A/B Test: Live vs Precompiled", async () => { for (const file of testShaders) { it(`${file}: live instructions === precompiled instructions`, async () => { - const source = await readFile(`./shaders/${file}`); + const source = await readFile(`src/shader-compiler/shaders/${file}`); const parsed = shaderCompiler._parseShaderSource(source); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); @@ -292,7 +294,7 @@ describe("Precompile A/B Test: Live vs Precompiled", async () => { const simpleShaders = ["noFragArgs.shader", "waterfull.shader", "mrt-struct.shader", "multi-pass.shader"]; for (const file of simpleShaders) { it(`${file}: precompiled GLSL → WebGL`, async () => { - const source = await readFile(`./shaders/${file}`); + const source = await readFile(`src/shader-compiler/shaders/${file}`); validatePrecompiledWebGL(source, ShaderLanguage.GLSLES100, baseMacros); }); } @@ -364,7 +366,7 @@ describe("Precompile A/B Test: Live vs Precompiled", async () => { const simpleShaders = ["noFragArgs.shader", "waterfull.shader", "mrt-struct.shader"]; for (const file of simpleShaders) { it(`${file}: .shaderc → WebGL`, async () => { - const source = await readFile(`./shaders/${file}`); + const source = await readFile(`src/shader-compiler/shaders/${file}`); validateGspRoundTrip(source, ShaderLanguage.GLSLES100, baseMacros); }); } @@ -375,7 +377,7 @@ describe("Precompile A/B Test: Live vs Precompiled", async () => { // ═══════════════════════════════════════════════════════════ describe("A/B: RenderState equivalence", () => { it("multi-pass: renderStates match between paths", async () => { - const source = await readFile("./shaders/multi-pass.shader"); + const source = await readFile("src/shader-compiler/shaders/multi-pass.shader"); const parsed = shaderCompiler._parseShaderSource(source); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); @@ -428,7 +430,7 @@ describe("Precompile A/B Test: Live vs Precompiled", async () => { for (const file of tagShaders) { it(`${file}: metadata matches between paths`, async () => { - const source = await readFile(`./shaders/${file}`); + const source = await readFile(`src/shader-compiler/shaders/${file}`); const parsed = shaderCompiler._parseShaderSource(source); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); @@ -463,7 +465,7 @@ describe("Precompile A/B Test: Live vs Precompiled", async () => { // ═══════════════════════════════════════════════════════════ describe("A/B: Macro expansion", () => { it("macro-pre: evaluateInstructions output matches live compilation per macro combo", async () => { - const source = await readFile("./shaders/macro-pre.shader"); + const source = await readFile("src/shader-compiler/shaders/macro-pre.shader"); const parsed = shaderCompiler._parseShaderSource(source); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); @@ -519,7 +521,7 @@ describe("Precompile A/B Test: Live vs Precompiled", async () => { // ═══════════════════════════════════════════════════════════ describe("A/B: instruction optimization", () => { it("noFragArgs (single TEXT instruction): still compiles with full macro set", async () => { - const source = await readFile("./shaders/noFragArgs.shader"); + const source = await readFile("src/shader-compiler/shaders/noFragArgs.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); for (const sub of precompiled.subShaders) { @@ -549,7 +551,7 @@ describe("Precompile A/B Test: Live vs Precompiled", async () => { }); it("mrt-struct (single TEXT instruction): compiles correctly", async () => { - const source = await readFile("./shaders/mrt-struct.shader"); + const source = await readFile("src/shader-compiler/shaders/mrt-struct.shader"); const precompiled = shaderCompiler._precompile(source, ShaderLanguage.GLSLES100); for (const sub of precompiled.subShaders) { diff --git a/tests/src/shader-compiler/PrecompileBenchmark.test.ts b/tests/src/shader-compiler/PrecompileBenchmark.test.ts index e1edc4c583..4a8d06911a 100644 --- a/tests/src/shader-compiler/PrecompileBenchmark.test.ts +++ b/tests/src/shader-compiler/PrecompileBenchmark.test.ts @@ -19,7 +19,9 @@ import { shaders as builtinShaders } from "@galacean/engine-shader/sources"; import { Logger, WebGLEngine } from "@galacean/engine"; import { describe, expect, it } from "vitest"; -import { readFile } from "./readShaderTestFile"; +import { server } from "@vitest/browser/context"; + +const { readFile } = server.commands; function builtinSource(path: string): string { const entry = builtinShaders.find((s) => s.path === path); @@ -153,7 +155,7 @@ describe("Precompile Benchmark", async () => { for (const entry of shaderFiles) { if (!entry.source && entry.file) { - entry.source = await readFile(`./shaders/${entry.file}`); + entry.source = await readFile(`src/shader-compiler/shaders/${entry.file}`); } } diff --git a/tests/src/shader-compiler/ShaderCompiler.test.ts b/tests/src/shader-compiler/ShaderCompiler.test.ts index 8d54c5b404..b6b8029a01 100644 --- a/tests/src/shader-compiler/ShaderCompiler.test.ts +++ b/tests/src/shader-compiler/ShaderCompiler.test.ts @@ -14,7 +14,9 @@ import { glslValidate } from "./ShaderValidate"; import { Logger, WebGLEngine } from "@galacean/engine"; import { describe, expect, it, vi } from "vitest"; -import { readFile } from "./readShaderTestFile"; +import { server } from "@vitest/browser/context"; + +const { readFile } = server.commands; Logger.enable(); @@ -24,7 +26,7 @@ const shaderCompilerRelease = new ShaderCompilerRelease(); describe("ShaderCompiler", async () => { const canvas = document.createElement("canvas"); const engine = await WebGLEngine.create({ canvas: canvas }); - const PBRSource = await readFile("../../../packages/shader/src/Shaders/PBR.shader"); + const PBRSource = await readFile("../packages/shader/src/Shaders/PBR.shader"); it("create shaderCompiler", async () => { expect(shaderCompilerVerbose).not.be.null; @@ -89,7 +91,7 @@ describe("ShaderCompiler", async () => { }); it("render state", async () => { - const demoShader = await readFile("./shaders/render-state.shader"); + const demoShader = await readFile("src/shader-compiler/shaders/render-state.shader"); const shader = shaderCompilerRelease._parseShaderSource(demoShader); const subShader = shader.subShaders[0]; const passList = subShader.passes; @@ -229,29 +231,29 @@ describe("ShaderCompiler", async () => { }); it("No frag shader args", async () => { - const demoShader = await readFile("./shaders/noFragArgs.shader"); + const demoShader = await readFile("src/shader-compiler/shaders/noFragArgs.shader"); glslValidate(engine, demoShader, shaderCompilerRelease); }); it("water full shader(complex)", async () => { - const demoShader = await readFile("./shaders/waterfull.shader"); + const demoShader = await readFile("src/shader-compiler/shaders/waterfull.shader"); glslValidate(engine, demoShader, shaderCompilerRelease); }); it("multi-pass", async () => { - const shaderSource = await readFile("./shaders/multi-pass.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/multi-pass.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); }); it("macro-with-preprocessor", async () => { - const shaderSource = await readFile("./shaders/macro-pre.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/macro-pre.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); }); // Regression: function-like macro form params and macro-name-as-var cross-arm // probes used to emit spurious "declared before used" warnings. it("function-like macro form params and macro names don't warn as undeclared", async () => { - const src = await readFile("./shaders/macro-form-params-no-warn.shader"); + const src = await readFile("src/shader-compiler/shaders/macro-form-params-no-warn.shader"); const warns: string[] = []; const origWarn = console.warn; console.warn = (...args: any[]) => warns.push(args.join(" ")); @@ -265,18 +267,18 @@ describe("ShaderCompiler", async () => { }); it("macro-negate-number (!0, !1 in #if expressions)", async () => { - const shaderSource = await readFile("./shaders/macro-negate-number.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/macro-negate-number.shader"); glslValidate(engine, shaderSource, shaderCompilerVerbose); glslValidate(engine, shaderSource, shaderCompilerRelease); }); it("mrt-struct", async () => { - const shaderSource = await readFile("./shaders/mrt-struct.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/mrt-struct.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); }); it("define-struct-access-global (global #define with struct member access)", async () => { - const shaderSource = await readFile("./shaders/define-struct-access-global.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/define-struct-access-global.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); const shader = shaderCompilerVerbose._parseShaderSource(shaderSource); @@ -288,14 +290,14 @@ describe("ShaderCompiler", async () => { 0 )!; - const expectedVert = await readFile("./expected/define-struct-access-global.vert.glsl"); - const expectedFrag = await readFile("./expected/define-struct-access-global.frag.glsl"); + const expectedVert = await readFile("src/shader-compiler/expected/define-struct-access-global.vert.glsl"); + const expectedFrag = await readFile("src/shader-compiler/expected/define-struct-access-global.frag.glsl"); expect(vertex).to.equal(expectedVert); expect(fragment).to.equal(expectedFrag); }); it("define-struct-access (function-body #define with struct member access)", async () => { - const shaderSource = await readFile("./shaders/define-struct-access.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/define-struct-access.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); const shader = shaderCompilerVerbose._parseShaderSource(shaderSource); @@ -307,14 +309,14 @@ describe("ShaderCompiler", async () => { 0 )!; - const expectedVert = await readFile("./expected/define-struct-access.vert.glsl"); - const expectedFrag = await readFile("./expected/define-struct-access.frag.glsl"); + const expectedVert = await readFile("src/shader-compiler/expected/define-struct-access.vert.glsl"); + const expectedFrag = await readFile("src/shader-compiler/expected/define-struct-access.frag.glsl"); expect(vertex).to.equal(expectedVert); expect(fragment).to.equal(expectedFrag); }); it("macro-member-access-builtin-arg (Cocos FSInput pattern: member access macro as builtin fn arg)", async () => { - const shaderSource = await readFile("./shaders/macro-member-access-builtin-arg.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/macro-member-access-builtin-arg.shader"); // Regression guard: before the preprocessor/AST deduplication fix, each // AST-form member-access macro (e.g. `#define FSInput_worldNormal v.v_normal.xyz`) @@ -353,7 +355,7 @@ describe("ShaderCompiler", async () => { }); it("global-varying-var (Cocos VSOutput pattern: global Varyings var with #define macros)", async () => { - const shaderSource = await readFile("./shaders/global-varying-var.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/global-varying-var.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); // Verify verbose mode: global "Varyings o;" should not produce "uniform Varyings o;" @@ -384,37 +386,37 @@ describe("ShaderCompiler", async () => { }); it("define-ctor-with-member (constructor-style macro with struct member access)", async () => { - const shaderSource = await readFile("./shaders/define-ctor-with-member.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/define-ctor-with-member.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("paren-define (object-like with space-before-paren vs function-like without space)", async () => { - const shaderSource = await readFile("./shaders/paren-define-repro.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/paren-define-repro.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("macro-value-refs (uniforms referenced inside paren / operator / fn-call / unary / nested macro values)", async () => { - const shaderSource = await readFile("./shaders/macro-value-refs.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/macro-value-refs.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("macro-call-struct-arg (struct-member access as function-like macro arg)", async () => { - const shaderSource = await readFile("./shaders/macro-call-struct-arg-repro.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/macro-call-struct-arg-repro.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("macro-top-level-comma (replacement list with top-level `,` — GLSL ES 3.00 §3.4)", async () => { - const shaderSource = await readFile("./shaders/macro-top-level-comma-repro.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/macro-top-level-comma-repro.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("macro-leading-dot-float (`.5` is a legal GLSL ES §4.1.4 float literal)", async () => { - const shaderSource = await readFile("./shaders/macro-leading-dot-float.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/macro-leading-dot-float.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); @@ -447,103 +449,103 @@ describe("ShaderCompiler", async () => { }; it("macro-author-error: trailing comma surfaces a uniform diagnostic", async () => { - await assertMacroAuthorError("./shaders/macro-author-error-trailing-comma.shader", "u_a, u_b,"); + await assertMacroAuthorError("src/shader-compiler/shaders/macro-author-error-trailing-comma.shader", "u_a, u_b,"); }); it("macro-author-error: unbalanced bracket surfaces a uniform diagnostic", async () => { - await assertMacroAuthorError("./shaders/macro-author-error-unbalanced-bracket.shader", "u_a[u_b"); + await assertMacroAuthorError("src/shader-compiler/shaders/macro-author-error-unbalanced-bracket.shader", "u_a[u_b"); }); it("macro-author-error: unbalanced paren surfaces a uniform diagnostic", async () => { - await assertMacroAuthorError("./shaders/macro-author-error-unbalanced-paren.shader", "u_a("); + await assertMacroAuthorError("src/shader-compiler/shaders/macro-author-error-unbalanced-paren.shader", "u_a("); }); it("type-alias-repro (FXAA-style portability macros aliasing GLSL types)", async () => { - const shaderSource = await readFile("./shaders/type-alias-repro.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/type-alias-repro.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("type-alias-sampler-only (sampler2D alias alone — should pass via legacy path)", async () => { - const shaderSource = await readFile("./shaders/type-alias-sampler-only.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/type-alias-sampler-only.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("digit-ending-id-repro (struct field ending in digit: v0.xyz, uv1.xy)", async () => { - const shaderSource = await readFile("./shaders/digit-ending-id-repro.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/digit-ending-id-repro.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("paren-member-access-repro (inline (v).v_uv release-mode flatten)", async () => { - const shaderSource = await readFile("./shaders/paren-member-access-repro.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/paren-member-access-repro.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("define-in-comment-repro (Issue 2980 ex.1: regex must not false-positive on /* #define */)", async () => { - const shaderSource = await readFile("./shaders/define-in-comment-repro.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/define-in-comment-repro.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("define-line-continuation-repro (Issue 2980 ex.2: \\-continuation in #define value)", async () => { - const shaderSource = await readFile("./shaders/define-line-continuation-repro.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/define-line-continuation-repro.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("define-comment-in-peek (block comment between macro name and value)", async () => { - const shaderSource = await readFile("./shaders/define-comment-in-peek.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/define-comment-in-peek.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("define-comment-with-dot (reviewer P1-1: `.` inside block comment must not route to AST)", async () => { - const shaderSource = await readFile("./shaders/define-comment-with-dot.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/define-comment-with-dot.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("define-line-continuation-member-access (reviewer P1-2: `\\\\\\n` followed by .field must route to AST)", async () => { - const shaderSource = await readFile("./shaders/define-line-continuation-member-access.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/define-line-continuation-member-access.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("define-line-continuation-no-dot (`\\\\\\n` in directive without member access — `_registerMacroDefine` must fold before regex)", async () => { - const shaderSource = await readFile("./shaders/define-line-continuation-no-dot.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/define-line-continuation-no-dot.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("define-multiline-params (`\\\\\\n` inside function-like macro header — `_scanUtilBreakLine`/`_scanMacroDefineParams` must honor line continuation)", async () => { - const shaderSource = await readFile("./shaders/define-multiline-params.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/define-multiline-params.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("define-if-stack-balance (#if/#elif must keep branch-stack depth so #endif pops correct level)", async () => { - const shaderSource = await readFile("./shaders/define-if-stack-balance.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/define-if-stack-balance.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("define-elif-polarity (#elif arm must not inherit previous arm's branch tag)", async () => { - const shaderSource = await readFile("./shaders/define-elif-polarity.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/define-elif-polarity.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("frag-return-vec4 (Cocos pattern: fragment entry returns vec4 instead of void)", async () => { - const shaderSource = await readFile("./shaders/frag-return-vec4.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/frag-return-vec4.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("macro-type-alias (macro-defined type aliases in declarations, params, struct members, return types)", async () => { - const shaderSource = await readFile("./shaders/macro-type-alias.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/macro-type-alias.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); @@ -563,7 +565,7 @@ describe("ShaderCompiler", async () => { // must also resolve MACRO_CALL references back to a same-name // sibling-arm declaration so the variant where `#if` is false // still has `lumaS` defined. - const shaderSource = await readFile("./shaders/cross-if-declarator-collision.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/cross-if-declarator-collision.shader"); const sourceMeta = shaderCompilerVerbose._parseShaderSource(shaderSource); const passSource = sourceMeta.subShaders[0].passes[0]; const passProgram = shaderCompilerVerbose._parseShaderPass( @@ -584,25 +586,25 @@ describe("ShaderCompiler", async () => { }); it("texture-generic (GVec4 → vec4 resolve)", async () => { - const shaderSource = await readFile("./shaders/texture-generic.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/texture-generic.shader"); glslValidate(engine, shaderSource, shaderCompilerVerbose); glslValidate(engine, shaderSource, shaderCompilerRelease); }); it("generic-return-type (builtin generic return as arg to user function)", async () => { - const shaderSource = await readFile("./shaders/generic-return-type.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/generic-return-type.shader"); glslValidate(engine, shaderSource, shaderCompilerVerbose); glslValidate(engine, shaderSource, shaderCompilerRelease); }); it("define-nested-ifdef (branch stack: nested #ifdef registers entries under combined signatures)", async () => { - const shaderSource = await readFile("./shaders/define-nested-ifdef.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/define-nested-ifdef.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); }); it("define-branch-scoped-ast (per-branch filtering: same flag, both AST forms, different members)", async () => { - const shaderSource = await readFile("./shaders/define-branch-scoped-ast.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/define-branch-scoped-ast.shader"); glslValidate(engine, shaderSource, shaderCompilerRelease); glslValidate(engine, shaderSource, shaderCompilerVerbose); @@ -623,7 +625,7 @@ describe("ShaderCompiler", async () => { }); it("define-mixed-form-repro (Issue 2980 nit: AST/legacy mixed across #ifdef branches must not pollute call-site type)", async () => { - const shaderSource = await readFile("./shaders/define-mixed-form-repro.shader"); + const shaderSource = await readFile("src/shader-compiler/shaders/define-mixed-form-repro.shader"); // Both branches of the mixed `#define LIGHT_INPUT` are legal GLSL on their // own. The bug was that `MacroCallSymbol.hasAstValue` used `.some(...)`, diff --git a/tests/src/shader-compiler/readShaderTestFile.ts b/tests/src/shader-compiler/readShaderTestFile.ts deleted file mode 100644 index 3fa5d73924..0000000000 --- a/tests/src/shader-compiler/readShaderTestFile.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { server } from "@vitest/browser/context"; - -const readBrowserFile = server.commands.readFile; -const shaderCompilerPathPrefix = "./"; -const packagesPathPrefix = "../../../packages/"; - -export function readFile(path: string): Promise { - if (path.startsWith(shaderCompilerPathPrefix)) { - return readBrowserFile(`src/shader-compiler/${path.slice(shaderCompilerPathPrefix.length)}`); - } - - if (path.startsWith(packagesPathPrefix)) { - return readBrowserFile(`../packages/${path.slice(packagesPathPrefix.length)}`); - } - - return readBrowserFile(path); -}