create-three-blocks-starter 0.4.2 → 0.4.3-alpha.320.g7e6e67cd7214

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # create-three-blocks-starter
2
2
 
3
+ ## 0.4.3-alpha.320.g7e6e67cd7214
4
+
5
+ - Website: Stripe billing events now reach the production webhook reliably.
6
+
7
+ - Devtools: Loading no longer spins the status chip or terminal progress indicator.
8
+
9
+ - Devtools: Vite asset config and inspection handle HDR files and report exact GPU memory.
10
+
11
+ - Packages: Text projects hydrate precompiled shaders and stay crisp across display resolutions.
12
+
13
+ - Packages: Gaussian benchmarks now compare Babylon.js and fully revealed GaussianSplats3D scenes.
14
+
15
+ - Packages: Built from `7e6e67cd7214`.
16
+
17
+
3
18
  ## 0.4.2
4
19
 
5
20
  ### Patch Changes
package/dist/compose.js CHANGED
@@ -174,10 +174,10 @@ function createReadme(project, definitionLabel, packageManager) {
174
174
  const textCommands = project.artifacts.text === undefined
175
175
  ? ""
176
176
  : `| \`${runCommand(packageManager, "text:generate")}\` | Refresh MSDF atlases after changing glyph coverage. |\n| \`${runCommand(packageManager, "text:status")}\` | Verify text configuration and generated atlas readiness. |\n`;
177
- return `# ${project.name}\n\n${definitionLabel} generated by ${GENERATOR_NAME}: rendered in a worker, with shaders precompiled.\n\n## Start here\n\n\`\`\`bash\n${packageManager} install\n${runCommand(packageManager, "dev")}\n\`\`\`\n\nEdit \`src/scene.ts\` first — it is your Three.js scene and hot-reloads without losing its declared \`hot\` state.\n\n## Project map\n\n| File | Purpose |\n|---|---|\n| \`src/scene.ts\` | Your \`Experience\` class: objects, materials, animation, and scene-local assets. |\n| \`src/render.worker.ts\` | Worker-owned renderer, camera, frame loop, and transactional HMR. |\n| \`src/main.ts\` | DOM input, Lenis, accessibility, and the worker host. |\n| \`src/assets.ts\` | Typed asset manifest. |\n| \`three-blocks.text.ts\` | Text fonts and atlas generation (text template only). |\n\n## Commands\n\n| Command | Purpose |\n|---|---|\n| \`${runCommand(packageManager, "dev")}\` | Start Vite with live worker, shader, text, and HMR status. |\n| \`${runCommand(packageManager, "lint")}\` | Check correctness and the shipped Three.js-style formatting. |\n| \`${runCommand(packageManager, "typecheck")}\` | Check strict TypeScript without emitting files. |\n| \`${runCommand(packageManager, "build")}\` | Build with graceful live shader fallback. |\n| \`${runCommand(packageManager, "build:strict")}\` | Require fresh precompiled shader receipts. |\n| \`${runCommand(packageManager, "shaders:capture")}\` | Refresh shader receipts after settling shader edits. |\n${textCommands}| \`${runCommand(packageManager, "browser:smoke")}\` | Prove worker readiness, first frame, and the stats control in a browser. |\n| \`${runCommand(packageManager, "status")}\` | Explain and recover worker, shader, asset, or text readiness. |\n\nPrecompiled shaders are an optimization cache, not an editing prerequisite. During development, changed TSL code hot-swaps and compiles live; the status reports \`shaders live\`. Capture once the shader is settled, then use the strict build as the release gate.\n\nDraco and KTX2 runtime files come from the installed Three.js package; this project commits no codec directory. See the [Three Blocks docs](https://threejs-blocks.com/docs) or the [LLM index](https://threejs-blocks.com/llms.txt).\n\nArtifact state:\n\n${pending}\n\n## License\n\nPersonal and noncommercial projects are free. Pro grants each Project started during an active period a lifetime commercial license for versions released during that period. After cancellation, you may maintain, update, and distribute the Project with those covered versions and keep using Pro Tool versions obtained while active for that Project locally and offline. Starting a new commercial Project, adopting a later version, or downloading or updating a Pro Tool requires an active seat. Covered versions have no runtime gate. See \`NOTICE\` and the [Commercial License Agreement](https://threejs-blocks.com/license).\n`;
177
+ return `# ${project.name}\n\n${definitionLabel} generated by ${GENERATOR_NAME}: rendered in a worker, with shaders precompiled.\n\n## Start here\n\n\`\`\`bash\n${packageManager} install\n${runCommand(packageManager, "dev")}\n\`\`\`\n\nEdit \`src/scene.ts\` first — it is your Three.js scene and hot-reloads without losing its declared \`hot\` state.\n\n## Project map\n\n| File | Purpose |\n|---|---|\n| \`src/scene.ts\` | Your \`Experience\` class: objects, materials, animation, and scene-local assets. |\n| \`src/render.worker.ts\` | Worker-owned renderer, camera, frame loop, and transactional HMR. |\n| \`src/main.ts\` | DOM input, Lenis, accessibility, and the worker host. |\n| \`src/assets.ts\` | Typed asset manifest. |\n| \`three-blocks.text.ts\` | Text fonts and atlas generation (text template only). |\n\n## Commands\n\n| Command | Purpose |\n|---|---|\n| \`${runCommand(packageManager, "dev")}\` | Start Vite with live worker, shader, text, and HMR status. |\n| \`${runCommand(packageManager, "lint")}\` | Check correctness and the shipped Three.js-style formatting. |\n| \`${runCommand(packageManager, "typecheck")}\` | Check strict TypeScript without emitting files. |\n| \`${runCommand(packageManager, "build")}\` | Build with graceful live shader fallback. |\n| \`${runCommand(packageManager, "build:strict")}\` | Require fresh precompiled shader receipts. |\n| \`${runCommand(packageManager, "shaders:capture")}\` | Refresh shader receipts after settling shader edits; also compresses \`public/\` GLB and HDR assets to meshopt + KTX2. |\n| \`${runCommand(packageManager, "assets:status")}\` | Re-verify the optimized-asset receipt. |\n${textCommands}| \`${runCommand(packageManager, "browser:smoke")}\` | Prove worker readiness, first frame, and the stats control in a browser. |\n| \`${runCommand(packageManager, "status")}\` | Explain and recover worker, shader, asset, or text readiness. |\n\nPrecompiled shaders are an optimization cache, not an editing prerequisite. During development, changed TSL code hot-swaps and compiles live; the status reports \`shaders live\`. Capture once the shader is settled, then use the strict build as the release gate.\n\nDraco and KTX2 runtime files come from the installed Three.js package; this project commits no codec directory. See the [Three Blocks docs](https://threejs-blocks.com/docs) or the [LLM index](https://threejs-blocks.com/llms.txt).\n\nArtifact state:\n\n${pending}\n\n## License\n\nPersonal and noncommercial projects are free. Pro grants each Project started during an active period a lifetime commercial license for versions released during that period. After cancellation, you may maintain, update, and distribute the Project with those covered versions and keep using Pro Tool versions obtained while active for that Project locally and offline. Starting a new commercial Project, adopting a later version, or downloading or updating a Pro Tool requires an active seat. Covered versions have no runtime gate. See \`NOTICE\` and the [Commercial License Agreement](https://threejs-blocks.com/license).\n`;
178
178
  }
179
179
  function createAgents(packageManager) {
180
- return `# AGENTS.md — Three Blocks project\n\nThis is a WebGPU Three.js app rendered in an OffscreenCanvas worker, with shaders precompiled for the first frame. Keep that boundary intact.\n\n## Commands\n\n- \`${runCommand(packageManager, "dev")}\` — Vite plus ambient worker/shader/text status.\n- \`${runCommand(packageManager, "lint")}\` — correctness and Three.js house style.\n- \`${runCommand(packageManager, "typecheck")}\` — strict TypeScript.\n- \`${runCommand(packageManager, "build")}\` — normal production build with live shader fallback.\n- \`${runCommand(packageManager, "build:strict")}\` — release gate requiring fresh shader receipts.\n- \`${runCommand(packageManager, "browser:smoke")}\` — browser proof for worker readiness, first frame, and stats control.\n- \`${runCommand(packageManager, "status")}\` — first recovery command for anything not ready.\n- \`${runCommand(packageManager, "shaders:capture")}\` — refresh shader receipts after shader work settles.\n\n## Ownership\n\n- Edit \`src/scene.ts\` first for Three.js objects, materials, assets, and animation.\n- \`src/render.worker.ts\` owns the renderer, scene, camera, GPU work, and frame loop.\n- \`src/main.ts\` owns DOM input, Lenis, accessibility, and the worker host.\n- Never import Three.js, renderer code, or GPU resources into main-thread modules.\n- Values crossing the worker boundary must be structured-cloneable plain data.\n\n## Scene contract\n\n- Keep the exported \`sceneKey\`, \`loadShaderManifest\`, and \`createScene\` names; shader receipt discovery depends on them.\n- Keep shader-producing objects registered through literal \`context.shaders.material(...)\` or \`.container(...)\` calls.\n- \`Experience\` is a Three.js \`Group\`; add it directly to the scene and dispose owned GPU resources.\n- Put continuous HMR state in the declared \`readonly hot = { ... }\` object. Matching fields transfer automatically.\n- New code defines the hot-state shape; renamed, removed, or re-typed fields keep their new defaults.\n- The optional library \`captureHotState\` / \`restoreHotState\` methods are only for asynchronous or non-declarative restoration.\n\n## Shader editing\n\nEdit TSL normally during \`dev\`. A changed scene hot-swaps transactionally, compiles before commit, and falls back to live TSL when receipts are stale. The overlay/terminal will say \`shaders live\`; this is expected while iterating. Run \`${runCommand(packageManager, "shaders:capture")}\` when the shader is settled, then \`${runCommand(packageManager, "build:strict")}\` before release. If state is unclear, run \`${runCommand(packageManager, "status")}\`.\n\n## Text template\n\nThe DOM remains the semantic and layout source of truth. Keep \`data-canvas-text\` copy in \`index.html\`, declare fonts in \`three-blocks.text.ts\`, and run \`${runCommand(packageManager, "text:generate")}\` after changing glyph coverage.\n`;
180
+ return `# AGENTS.md — Three Blocks project\n\nThis is a WebGPU Three.js app rendered in an OffscreenCanvas worker, with shaders precompiled for the first frame. Keep that boundary intact.\n\n## Commands\n\n- \`${runCommand(packageManager, "dev")}\` — Vite plus ambient worker/shader/text status.\n- \`${runCommand(packageManager, "lint")}\` — correctness and Three.js house style.\n- \`${runCommand(packageManager, "typecheck")}\` — strict TypeScript.\n- \`${runCommand(packageManager, "build")}\` — normal production build with live shader fallback.\n- \`${runCommand(packageManager, "build:strict")}\` — release gate requiring fresh shader receipts.\n- \`${runCommand(packageManager, "browser:smoke")}\` — browser proof for worker readiness, first frame, and stats control.\n- \`${runCommand(packageManager, "status")}\` — first recovery command for anything not ready.\n- \`${runCommand(packageManager, "shaders:capture")}\` — refresh shader receipts after shader work settles; also optimizes \`public/\` GLB and HDR assets to meshopt + KTX2.\n- \`${runCommand(packageManager, "assets:status")}\` — re-verify the optimized-asset receipt.\n\n## Assets\n\n- Drop models and environments under \`public/\` in any source format; \`shaders:capture\` compresses GLB and \`.hdr\` files to meshopt + KTX2 (BC6H-ready HDR) automatically and records exact download and VRAM numbers in \`.three-blocks/assets/meta.json\`.\n- Prefer the optimized \`.ktx2\`/\`.tb.glb\` outputs in code; never hand-edit them — re-run capture when sources change.\n\n## Ownership\n\n- Edit \`src/scene.ts\` first for Three.js objects, materials, assets, and animation.\n- \`src/render.worker.ts\` owns the renderer, scene, camera, GPU work, and frame loop.\n- \`src/main.ts\` owns DOM input, Lenis, accessibility, and the worker host.\n- Never import Three.js, renderer code, or GPU resources into main-thread modules.\n- Values crossing the worker boundary must be structured-cloneable plain data.\n\n## Scene contract\n\n- Keep the exported \`sceneKey\`, \`loadShaderManifest\`, and \`createScene\` names; shader receipt discovery depends on them.\n- Keep shader-producing objects registered through literal \`context.shaders.material(...)\` or \`.container(...)\` calls.\n- \`Experience\` is a Three.js \`Group\`; add it directly to the scene and dispose owned GPU resources.\n- Put continuous HMR state in the declared \`readonly hot = { ... }\` object. Matching fields transfer automatically.\n- New code defines the hot-state shape; renamed, removed, or re-typed fields keep their new defaults.\n- The optional library \`captureHotState\` / \`restoreHotState\` methods are only for asynchronous or non-declarative restoration.\n\n## Shader editing\n\nEdit TSL normally during \`dev\`. A changed scene hot-swaps transactionally, compiles before commit, and falls back to live TSL when receipts are stale. The overlay/terminal will say \`shaders live\`; this is expected while iterating. Run \`${runCommand(packageManager, "shaders:capture")}\` when the shader is settled, then \`${runCommand(packageManager, "build:strict")}\` before release. If state is unclear, run \`${runCommand(packageManager, "status")}\`.\n\n## Text template\n\nThe DOM remains the semantic and layout source of truth. Keep \`data-canvas-text\` copy in \`index.html\`, declare fonts in \`three-blocks.text.ts\`, and run \`${runCommand(packageManager, "text:generate")}\` after changing glyph coverage.\n`;
181
181
  }
182
182
  export function validateResolvedProject(project, source = defaultCatalog) {
183
183
  const runtimeKeys = Object.keys(project.dependencies).sort();
package/dist/constants.js CHANGED
@@ -9,7 +9,7 @@ export const GENERATOR_VERSION = (() => {
9
9
  export const RESULT_PROTOCOL_VERSION = 1;
10
10
  export const COMPATIBILITY_VERSIONS = Object.freeze({
11
11
  three: '0.185.1',
12
- threeBlocks: '0.5.0',
12
+ threeBlocks: '0.6.0-alpha.320.g7e6e67cd7214',
13
13
  lenis: '1.3.25',
14
14
  statsGl: '4.2.3',
15
15
  });
package/dist/generate.js CHANGED
@@ -148,7 +148,7 @@ async function writeResultFile(resultFile, result) {
148
148
  throw error;
149
149
  }
150
150
  }
151
- const DEVTOOLS_SPECIFIER = '@three-blocks/devtools@^0.1.0';
151
+ const DEVTOOLS_SPECIFIER = '@three-blocks/devtools@5.0.0-alpha.320.g7e6e67cd7214';
152
152
  /**
153
153
  * Best-effort devDependency: a project-local `@three-blocks/devtools` makes
154
154
  * `three-blocks status`, shader capture, and browser smoke instant, offline,
package/dist/layers.js CHANGED
@@ -33,6 +33,7 @@ const core = {
33
33
  status: 'three-blocks status',
34
34
  'shaders:capture': 'three-blocks shaders capture',
35
35
  'shaders:test': 'three-blocks shaders test',
36
+ 'assets:status': 'three-blocks assets status',
36
37
  'browser:smoke': 'three-blocks browser smoke',
37
38
  },
38
39
  vite: { worker: true },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-three-blocks-starter",
3
- "version": "0.4.2",
3
+ "version": "0.4.3-alpha.320.g7e6e67cd7214",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Create a typed, worker-first Three Blocks project",
@@ -61,5 +61,9 @@
61
61
  "typescript": "^5.9.3",
62
62
  "typescript-eslint": "^8.62.1",
63
63
  "vitest": "^4.1.8"
64
+ },
65
+ "threeBlocks": {
66
+ "channel": "alpha",
67
+ "site": "https://preprod.threejs-blocks.com"
64
68
  }
65
69
  }
@@ -1,74 +1,74 @@
1
1
  {
2
- "runtime": {
3
- "capture": {
4
- "adapter": "WebGPU adapter",
5
- "features": [],
6
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/149.0.7827.55 Safari/537.36"
7
- },
8
- "three": "0.185.1",
9
- "threeBlocks": "0.2.0",
10
- "threeBlocksShaderClosure": "64e2e021698f0bbb6e72c59c6112fa003450b50938cd226626eaaae0886dcb00"
11
- },
12
- "scenes": {
13
- "scene": {
14
- "artifact": "scene.webgpu.ts",
15
- "artifactHash": "dba00cdd352fd608996620150a3b0ed1a1f74dbb4d1ab52fdc7609ffdb095329",
16
- "asset": "three-blocks/shaders/scene.webgpu.json",
17
- "assetHash": "6b0791f92e1f1a622f81aa848ffe903c5480d175557ab9cb0645b20b16f28ec9",
18
- "backend": "webgpu",
19
- "bytes": 73871,
20
- "coverage": {
21
- "compute": 0,
22
- "fragment": 6,
23
- "render": 6,
24
- "vertex": 6
25
- },
26
- "inputs": {
27
- "src/assets.ts": "ec86aea62751663409bd59264ddd53f028ae716ede15a30bc699d10ea175a5ca",
28
- "src/look.ts": "c0639402db78e361efb099d5c775246bde7b76050fac0958fc9b7db0d0b1bd5a",
29
- "src/scene.ts": "f5ea470cb0a169221e1fd57bf9623c1c211abb32da5cb7d98bf25740794ada4b"
30
- },
31
- "skipped": {
32
- "compute": 0,
33
- "render": 0
34
- }
35
- },
36
- "scene.webgl": {
37
- "artifact": "scene.webgl.ts",
38
- "artifactHash": "775bbf59e097684fa61ec1b9e4218d0afa2d571502361bb8fe5b67adc8a8f2f8",
39
- "asset": "three-blocks/shaders/scene.webgl.json",
40
- "assetHash": "6072302db1be477c29e01515d321dfa2ab1d7c9fdafed0a331300b353095996c",
41
- "backend": "webgl",
42
- "bytes": 106874,
43
- "coverage": {
44
- "compute": 0,
45
- "fragment": 6,
46
- "render": 6,
47
- "vertex": 6
48
- },
49
- "inputs": {
50
- "src/assets.ts": "ec86aea62751663409bd59264ddd53f028ae716ede15a30bc699d10ea175a5ca",
51
- "src/look.ts": "c0639402db78e361efb099d5c775246bde7b76050fac0958fc9b7db0d0b1bd5a",
52
- "src/scene.ts": "f5ea470cb0a169221e1fd57bf9623c1c211abb32da5cb7d98bf25740794ada4b"
53
- },
54
- "skipped": {
55
- "compute": 0,
56
- "render": 0
57
- }
58
- }
59
- },
60
- "schemaVersion": 2,
61
- "tool": {
62
- "address": 2,
63
- "compatibilities": {
64
- "webgl": "three-webgl-r185-v1",
65
- "webgpu": "three-webgpu-r185-v1"
66
- },
67
- "compatibility": "three-webgpu-r185-v1",
68
- "hydration": 2,
69
- "name": "@three-blocks/devtools",
70
- "recipe": 1,
71
- "transform": 62,
72
- "version": "0.1.0"
73
- }
2
+ "runtime": {
3
+ "capture": {
4
+ "adapter": "WebGPU adapter",
5
+ "features": [],
6
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/149.0.7827.55 Safari/537.36"
7
+ },
8
+ "three": "0.185.1",
9
+ "threeBlocks": "0.6.0-alpha.320.g7e6e67cd7214",
10
+ "threeBlocksShaderClosure": "64e2e021698f0bbb6e72c59c6112fa003450b50938cd226626eaaae0886dcb00"
11
+ },
12
+ "scenes": {
13
+ "scene": {
14
+ "artifact": "scene.webgpu.ts",
15
+ "artifactHash": "35724fea3dee964992d0b17084e3ecd6e4158cf222a65c99275dc2da3a7c086a",
16
+ "asset": "three-blocks/shaders/scene.webgpu.json",
17
+ "assetHash": "1c7906c8ccd46f744c962d52a5b8a8ea387100e4dd2a08fdd056813a9c86215a",
18
+ "backend": "webgpu",
19
+ "bytes": 73895,
20
+ "coverage": {
21
+ "compute": 0,
22
+ "fragment": 6,
23
+ "render": 6,
24
+ "vertex": 6
25
+ },
26
+ "inputs": {
27
+ "src/assets.ts": "ec86aea62751663409bd59264ddd53f028ae716ede15a30bc699d10ea175a5ca",
28
+ "src/look.ts": "c0639402db78e361efb099d5c775246bde7b76050fac0958fc9b7db0d0b1bd5a",
29
+ "src/scene.ts": "f5ea470cb0a169221e1fd57bf9623c1c211abb32da5cb7d98bf25740794ada4b"
30
+ },
31
+ "skipped": {
32
+ "compute": 0,
33
+ "render": 0
34
+ }
35
+ },
36
+ "scene.webgl": {
37
+ "artifact": "scene.webgl.ts",
38
+ "artifactHash": "38df41a0370e5069f94ce4f27b1c5c20eb3c977231fc7d28e1ef37ddcd0e5557",
39
+ "asset": "three-blocks/shaders/scene.webgl.json",
40
+ "assetHash": "98a66008570b502402c2f355c974f28e2031f5a1334b1601e7c5d9ecbadd0962",
41
+ "backend": "webgl",
42
+ "bytes": 106898,
43
+ "coverage": {
44
+ "compute": 0,
45
+ "fragment": 6,
46
+ "render": 6,
47
+ "vertex": 6
48
+ },
49
+ "inputs": {
50
+ "src/assets.ts": "ec86aea62751663409bd59264ddd53f028ae716ede15a30bc699d10ea175a5ca",
51
+ "src/look.ts": "c0639402db78e361efb099d5c775246bde7b76050fac0958fc9b7db0d0b1bd5a",
52
+ "src/scene.ts": "f5ea470cb0a169221e1fd57bf9623c1c211abb32da5cb7d98bf25740794ada4b"
53
+ },
54
+ "skipped": {
55
+ "compute": 0,
56
+ "render": 0
57
+ }
58
+ }
59
+ },
60
+ "schemaVersion": 2,
61
+ "tool": {
62
+ "address": 2,
63
+ "compatibilities": {
64
+ "webgl": "three-webgl-r185-v1",
65
+ "webgpu": "three-webgpu-r185-v1"
66
+ },
67
+ "compatibility": "three-webgpu-r185-v1",
68
+ "hydration": 2,
69
+ "name": "@three-blocks/devtools",
70
+ "recipe": 1,
71
+ "transform": 62,
72
+ "version": "5.0.0-alpha.320.g7e6e67cd7214"
73
+ }
74
74
  }
@@ -1500,7 +1500,7 @@ export default {
1500
1500
  }
1501
1501
  ],
1502
1502
  "three": "0.185.1",
1503
- "threeBlocks": "0.2.0",
1503
+ "threeBlocks": "0.6.0-alpha.320.g7e6e67cd7214",
1504
1504
  "updatePlans": [
1505
1505
  [3,6,4,7,8,0,9],
1506
1506
  [],
@@ -883,7 +883,7 @@ export default {
883
883
  }
884
884
  ],
885
885
  "three": "0.185.1",
886
- "threeBlocks": "0.2.0",
886
+ "threeBlocks": "0.6.0-alpha.320.g7e6e67cd7214",
887
887
  "updatePlans": [
888
888
  [2,5,3,6,7,8],
889
889
  [],
@@ -1,28 +1,28 @@
1
1
  {
2
- "adapter": "WebGL adapter",
3
- "measuredAt": "2026-07-29T10:15:46.559Z",
4
- "platform": "darwin/arm64",
5
- "receiptHash": "85c94a5e7eb14ded22c7a1dbf91f1538b11ecd1695693c33cb58bda928ccae92",
6
- "scenes": {
7
- "scene": {
8
- "avoidedBuildMs": 28.299999952316284,
9
- "builds": 6,
10
- "liveBuildMs": 28.299999952316284,
11
- "precompiledBuildMs": 0,
12
- "runs": 1,
13
- "setupMeasured": false,
14
- "spreadMs": 0
15
- },
16
- "scene.webgl": {
17
- "avoidedBuildMs": 28.600000143051147,
18
- "builds": 6,
19
- "liveBuildMs": 28.600000143051147,
20
- "precompiledBuildMs": 0,
21
- "runs": 1,
22
- "setupMeasured": false,
23
- "spreadMs": 0
24
- }
25
- },
26
- "schemaVersion": 3,
27
- "source": "committed-capture"
2
+ "adapter": "WebGL adapter",
3
+ "measuredAt": "2026-08-05T13:44:13.669Z",
4
+ "platform": "darwin/arm64",
5
+ "receiptHash": "26b80569b28fab60caa049f59d3095b3602a2e0d85037d304d55a9aa4e9d1b0c",
6
+ "scenes": {
7
+ "scene": {
8
+ "avoidedBuildMs": 21.50000023841858,
9
+ "builds": 6,
10
+ "liveBuildMs": 21.50000023841858,
11
+ "precompiledBuildMs": 0,
12
+ "runs": 1,
13
+ "setupMeasured": false,
14
+ "spreadMs": 0
15
+ },
16
+ "scene.webgl": {
17
+ "avoidedBuildMs": 21.899999856948853,
18
+ "builds": 6,
19
+ "liveBuildMs": 21.899999856948853,
20
+ "precompiledBuildMs": 0,
21
+ "runs": 1,
22
+ "setupMeasured": false,
23
+ "spreadMs": 0
24
+ }
25
+ },
26
+ "schemaVersion": 3,
27
+ "source": "committed-capture"
28
28
  }
@@ -1,74 +1,74 @@
1
1
  {
2
- "runtime": {
3
- "capture": {
4
- "adapter": "WebGPU adapter",
5
- "features": [],
6
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/149.0.7827.55 Safari/537.36"
7
- },
8
- "three": "0.185.1",
9
- "threeBlocks": "0.2.0",
10
- "threeBlocksShaderClosure": "64e2e021698f0bbb6e72c59c6112fa003450b50938cd226626eaaae0886dcb00"
11
- },
12
- "scenes": {
13
- "text": {
14
- "artifact": "text.webgpu.ts",
15
- "artifactHash": "9d63a4a184ed36f11d9eecf6745cee31cda8ce1411944621981e570aee8b211a",
16
- "asset": "three-blocks/shaders/text.webgpu.json",
17
- "assetHash": "320d7e00455e4f98b89d06548e3c7e040e93a7338f6e844fa31462c0827ea458",
18
- "backend": "webgpu",
19
- "bytes": 105555,
20
- "coverage": {
21
- "compute": 0,
22
- "fragment": 8,
23
- "render": 8,
24
- "vertex": 8
25
- },
26
- "inputs": {
27
- "src/assets.ts": "ec86aea62751663409bd59264ddd53f028ae716ede15a30bc699d10ea175a5ca",
28
- "src/look.ts": "c0639402db78e361efb099d5c775246bde7b76050fac0958fc9b7db0d0b1bd5a",
29
- "src/scene.ts": "359b087788fc51d75eea076e2f0e9d087da6910c77532c87f1441eaddb160c8a"
30
- },
31
- "skipped": {
32
- "compute": 0,
33
- "render": 0
34
- }
35
- },
36
- "text.webgl": {
37
- "artifact": "text.webgl.ts",
38
- "artifactHash": "5a8f14d026642615632c335e34f9d18ebe3ec88dc1ceb86ad3e2bc5d39fe5737",
39
- "asset": "three-blocks/shaders/text.webgl.json",
40
- "assetHash": "d42e8b9ae600efbfa702417e7ed2848a7661fed49a2013807ce37ad2b2ec8cc9",
41
- "backend": "webgl",
42
- "bytes": 107237,
43
- "coverage": {
44
- "compute": 0,
45
- "fragment": 4,
46
- "render": 4,
47
- "vertex": 4
48
- },
49
- "inputs": {
50
- "src/assets.ts": "ec86aea62751663409bd59264ddd53f028ae716ede15a30bc699d10ea175a5ca",
51
- "src/look.ts": "c0639402db78e361efb099d5c775246bde7b76050fac0958fc9b7db0d0b1bd5a",
52
- "src/scene.ts": "359b087788fc51d75eea076e2f0e9d087da6910c77532c87f1441eaddb160c8a"
53
- },
54
- "skipped": {
55
- "compute": 0,
56
- "render": 4
57
- }
58
- }
59
- },
60
- "schemaVersion": 2,
61
- "tool": {
62
- "address": 2,
63
- "compatibilities": {
64
- "webgl": "three-webgl-r185-v1",
65
- "webgpu": "three-webgpu-r185-v1"
66
- },
67
- "compatibility": "three-webgpu-r185-v1",
68
- "hydration": 2,
69
- "name": "@three-blocks/devtools",
70
- "recipe": 1,
71
- "transform": 62,
72
- "version": "0.1.0"
73
- }
2
+ "runtime": {
3
+ "capture": {
4
+ "adapter": "WebGPU adapter",
5
+ "features": [],
6
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/149.0.7827.55 Safari/537.36"
7
+ },
8
+ "three": "0.185.1",
9
+ "threeBlocks": "0.6.0-alpha.320.g7e6e67cd7214",
10
+ "threeBlocksShaderClosure": "64e2e021698f0bbb6e72c59c6112fa003450b50938cd226626eaaae0886dcb00"
11
+ },
12
+ "scenes": {
13
+ "text": {
14
+ "artifact": "text.webgpu.ts",
15
+ "artifactHash": "5339bc35a8ecf200ae5270194c6460838b92093723dbf50862d052939e8d2e82",
16
+ "asset": "three-blocks/shaders/text.webgpu.json",
17
+ "assetHash": "8d990f66195ed6f8576891d304db2579c38926382240d5ec54f0260838056a8e",
18
+ "backend": "webgpu",
19
+ "bytes": 106957,
20
+ "coverage": {
21
+ "compute": 0,
22
+ "fragment": 8,
23
+ "render": 8,
24
+ "vertex": 8
25
+ },
26
+ "inputs": {
27
+ "src/assets.ts": "ec86aea62751663409bd59264ddd53f028ae716ede15a30bc699d10ea175a5ca",
28
+ "src/look.ts": "c0639402db78e361efb099d5c775246bde7b76050fac0958fc9b7db0d0b1bd5a",
29
+ "src/scene.ts": "359b087788fc51d75eea076e2f0e9d087da6910c77532c87f1441eaddb160c8a"
30
+ },
31
+ "skipped": {
32
+ "compute": 0,
33
+ "render": 0
34
+ }
35
+ },
36
+ "text.webgl": {
37
+ "artifact": "text.webgl.ts",
38
+ "artifactHash": "284151dce9bed5dc796f538e2ba35afbb1650239e745f7c3203e1a0c4547a7d4",
39
+ "asset": "three-blocks/shaders/text.webgl.json",
40
+ "assetHash": "40a46aa5ffae9effe571cd9d087e63c2054ad2619667535b7397d4e154ecefb8",
41
+ "backend": "webgl",
42
+ "bytes": 107261,
43
+ "coverage": {
44
+ "compute": 0,
45
+ "fragment": 4,
46
+ "render": 4,
47
+ "vertex": 4
48
+ },
49
+ "inputs": {
50
+ "src/assets.ts": "ec86aea62751663409bd59264ddd53f028ae716ede15a30bc699d10ea175a5ca",
51
+ "src/look.ts": "c0639402db78e361efb099d5c775246bde7b76050fac0958fc9b7db0d0b1bd5a",
52
+ "src/scene.ts": "359b087788fc51d75eea076e2f0e9d087da6910c77532c87f1441eaddb160c8a"
53
+ },
54
+ "skipped": {
55
+ "compute": 0,
56
+ "render": 4
57
+ }
58
+ }
59
+ },
60
+ "schemaVersion": 2,
61
+ "tool": {
62
+ "address": 2,
63
+ "compatibilities": {
64
+ "webgl": "three-webgl-r185-v1",
65
+ "webgpu": "three-webgpu-r185-v1"
66
+ },
67
+ "compatibility": "three-webgpu-r185-v1",
68
+ "hydration": 2,
69
+ "name": "@three-blocks/devtools",
70
+ "recipe": 1,
71
+ "transform": 62,
72
+ "version": "5.0.0-alpha.320.g7e6e67cd7214"
73
+ }
74
74
  }
@@ -1504,7 +1504,7 @@ export default {
1504
1504
  }
1505
1505
  ],
1506
1506
  "three": "0.185.1",
1507
- "threeBlocks": "0.2.0",
1507
+ "threeBlocks": "0.6.0-alpha.320.g7e6e67cd7214",
1508
1508
  "updatePlans": [
1509
1509
  [3,6,4,7,8,0,9],
1510
1510
  [],
@@ -332,6 +332,10 @@ export default {
332
332
  },
333
333
  {
334
334
  "name": "nodeUniform12",
335
+ "type": "vec2"
336
+ },
337
+ {
338
+ "name": "nodeUniform13",
335
339
  "type": "float"
336
340
  }
337
341
  ]
@@ -415,6 +419,10 @@ export default {
415
419
  },
416
420
  {
417
421
  "name": "nodeUniform12",
422
+ "type": "vec2"
423
+ },
424
+ {
425
+ "name": "nodeUniform13",
418
426
  "type": "float"
419
427
  }
420
428
  ]
@@ -498,6 +506,10 @@ export default {
498
506
  },
499
507
  {
500
508
  "name": "nodeUniform12",
509
+ "type": "vec2"
510
+ },
511
+ {
512
+ "name": "nodeUniform13",
501
513
  "type": "float"
502
514
  }
503
515
  ]
@@ -581,6 +593,10 @@ export default {
581
593
  },
582
594
  {
583
595
  "name": "nodeUniform12",
596
+ "type": "vec2"
597
+ },
598
+ {
599
+ "name": "nodeUniform13",
584
600
  "type": "float"
585
601
  }
586
602
  ]
@@ -742,7 +758,7 @@ export default {
742
758
  }
743
759
  ]
744
760
  ],
745
- "modules": ["// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct renderStruct {\n\tcameraProjectionMatrix : mat4x4<f32>,\n\tcameraViewMatrix : mat4x4<f32>\n};\n@binding( 0 ) @group( 0 )\nvar<uniform> render : renderStruct;\n\nstruct objectStruct {\n\tnodeUniform1 : vec2<f32>,\n\tnodeUniform4 : mat4x4<f32>\n};\n@binding( 2 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> modelViewMatrix : mat4x4<f32>;\nvar<private> VERTEX_nodeVar2 : vec4<f32>;\nvar<private> v_modelViewProjection : vec4<f32>;\nvar<private> v_positionView : vec3<f32>;\nvar<private> positionLocal : vec3<f32>;\nvar<private> VERTEX_v_modelViewProjection : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tmodelViewMatrix = ( render.cameraViewMatrix * object.nodeUniform4 );\n\tpositionLocal = position;\n\tv_positionView = ( modelViewMatrix * vec4<f32>( positionLocal, 1.0 ) ).xyz;\n\tVERTEX_nodeVar2 = ( render.cameraProjectionMatrix * vec4<f32>( v_positionView, 1.0 ) );\n\tVERTEX_v_modelViewProjection = VERTEX_nodeVar2;\n\n\t// result\n\n\tvaryings.builtinClipSpace = VERTEX_v_modelViewProjection;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// global\ndiagnostic( off, derivative_uniformity );\n\n\n// structs\n\nstruct OutputStruct {\n\t@location( 0 ) color: vec4<f32>\n};\nvar<private> output : OutputStruct;\n\n// uniforms\n@binding( 0 ) @group( 1 ) var nodeUniform0_sampler : sampler;\n@binding( 1 ) @group( 1 ) var nodeUniform0 : texture_2d<f32>;\n\nstruct objectStruct {\n\tnodeUniform1 : vec2<f32>,\n\tnodeUniform4 : mat4x4<f32>\n};\n@binding( 2 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// vars\nvar<private> nodeVar0 : vec4<f32>;\nvar<private> nodeVar1 : vec4<f32>;\n\n// codes\nfn fn1 ( color : vec4<f32> ) -> vec4<f32> {\n\n\tvar nodeVar0 : vec4<f32>;\n\n\n\tif ( ( color.w == 0.0 ) ) {\n\n\t\tnodeVar0 = vec4<f32>( 0.0, 0.0, 0.0, 0.0 );\n\n\t} else {\n\n\t\tnodeVar0 = vec4<f32>( ( color.xyz / vec3<f32>( color.w ) ), color.w );\n\n\t}\n\n\n\treturn nodeVar0;\n\n}\n\nfn sRGBTransferOETF ( color : vec3<f32> ) -> vec3<f32> {\n\n\t\n\n\n\treturn mix( ( ( pow( color, vec3<f32>( 0.41666 ) ) * vec3<f32>( 1.055 ) ) - vec3<f32>( 0.055 ) ), ( color * vec3<f32>( 12.92 ) ), vec3<f32>( ( color <= vec3<f32>( 0.0031308 ) ) ) );\n\n}\n\nfn fn0 ( color : vec4<f32> ) -> vec4<f32> {\n\n\t\n\n\n\treturn vec4<f32>( ( color.xyz * vec3<f32>( color.w ) ), color.w );\n\n}\n\n\n\n@fragment\nfn main( @builtin( position ) fragCoord : vec4<f32> ) -> OutputStruct {\n\n\t// flow\n\t// code\n\n\tnodeVar0 = textureSample( nodeUniform0, nodeUniform0_sampler, ( fragCoord.xy / object.nodeUniform1 ) );\n\tnodeVar1 = fn1( vec4<f32>( nodeVar0.xyz, clamp( nodeVar0.w, 0.0, 1.0 ) ) );\n\n\t// result\n\n\toutput.color = fn0( vec4<f32>( sRGBTransferOETF( nodeVar1.xyz ), nodeVar1.w ) );\n\n\treturn output;\n\n}\n","// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct renderStruct {\n\tcameraProjectionMatrix : mat4x4<f32>,\n\tcameraViewMatrix : mat4x4<f32>\n};\n@binding( 0 ) @group( 0 )\nvar<uniform> render : renderStruct;\n\nstruct objectStruct {\n\tnodeUniform0 : f32,\n\tnodeUniform3 : mat4x4<f32>\n};\n@binding( 0 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> modelViewMatrix : mat4x4<f32>;\nvar<private> VERTEX_nodeVar1 : vec4<f32>;\nvar<private> v_modelViewProjection : vec4<f32>;\nvar<private> v_positionView : vec3<f32>;\nvar<private> positionLocal : vec3<f32>;\nvar<private> VERTEX_v_modelViewProjection : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tmodelViewMatrix = ( render.cameraViewMatrix * object.nodeUniform3 );\n\tpositionLocal = position;\n\tv_positionView = ( modelViewMatrix * vec4<f32>( positionLocal, 1.0 ) ).xyz;\n\tVERTEX_nodeVar1 = ( render.cameraProjectionMatrix * vec4<f32>( v_positionView, 1.0 ) );\n\tVERTEX_v_modelViewProjection = VERTEX_nodeVar1;\n\n\t// result\n\n\tvaryings.builtinClipSpace = VERTEX_v_modelViewProjection;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// global\ndiagnostic( off, derivative_uniformity );\n\n\n// structs\n\nstruct OutputStruct {\n\t@location( 0 ) color: vec4<f32>\n};\nvar<private> output : OutputStruct;\n\n// uniforms\n\nstruct objectStruct {\n\tnodeUniform0 : f32,\n\tnodeUniform3 : mat4x4<f32>\n};\n@binding( 0 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// vars\nvar<private> DiffuseColor : vec4<f32>;\nvar<private> Output : vec4<f32>;\nvar<private> nodeVar0 : vec4<f32>;\n\n// codes\n\n\n@fragment\nfn main( ) -> OutputStruct {\n\n\t// flow\n\t// code\n\n\tDiffuseColor = vec4<f32>( 0.0, 0.0, 0.0, 1.0 );\n\tDiffuseColor.w = ( DiffuseColor.w * object.nodeUniform0 );\n\tnodeVar0 = max( vec4<f32>( DiffuseColor.xyz, DiffuseColor.w ), vec4<f32>( 0.0 ) );\n\tOutput = nodeVar0;\n\n\t// result\n\n\toutput.color = nodeVar0;\n\n\treturn output;\n\n}\n","// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct renderStruct {\n\tcameraProjectionMatrix : mat4x4<f32>,\n\tcameraViewMatrix : mat4x4<f32>,\n\tnodeUniform11 : vec3<f32>,\n\tnodeUniform16 : vec3<f32>,\n\tnodeUniform19 : vec3<f32>,\n\tnodeUniform20 : vec3<f32>,\n\tnodeUniform9 : vec3<f32>,\n\tnodeUniform10 : vec3<f32>,\n\tnodeUniform14 : vec3<f32>,\n\tnodeUniform15 : vec3<f32>,\n\tnodeUniform17 : vec3<f32>,\n\tnodeUniform18 : vec3<f32>\n};\n@binding( 0 ) @group( 0 )\nvar<uniform> render : renderStruct;\n\nstruct objectStruct {\n\tnodeUniform0 : vec3<f32>,\n\tnodeUniform1 : f32,\n\tnodeUniform2 : f32,\n\tnodeUniform3 : f32,\n\tnodeUniform5 : mat3x3<f32>,\n\tnodeUniform6 : vec3<f32>,\n\tnodeUniform7 : f32,\n\tnodeUniform12 : mat4x4<f32>\n};\n@binding( 0 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@location( 0 ) v_normalViewGeometry : vec3<f32>,\n\t@location( 1 ) v_positionViewDirection : vec3<f32>,\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> normalLocal : vec3<f32>;\nvar<private> modelViewMatrix : mat4x4<f32>;\nvar<private> VERTEX_nodeVar147 : vec4<f32>;\nvar<private> v_modelViewProjection : vec4<f32>;\nvar<private> v_positionView : vec3<f32>;\nvar<private> positionLocal : vec3<f32>;\nvar<private> VERTEX_v_modelViewProjection : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) normal : vec3<f32>,\n\t@location( 1 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tnormalLocal = normal;\n\tvaryings.v_normalViewGeometry = normalize( ( render.cameraViewMatrix * vec4<f32>( ( object.nodeUniform5 * normalLocal ), 0.0 ) ).xyz );\n\tmodelViewMatrix = ( render.cameraViewMatrix * object.nodeUniform12 );\n\tpositionLocal = position;\n\tv_positionView = ( modelViewMatrix * vec4<f32>( positionLocal, 1.0 ) ).xyz;\n\tvaryings.v_positionViewDirection = ( - v_positionView );\n\tVERTEX_nodeVar147 = ( render.cameraProjectionMatrix * vec4<f32>( v_positionView, 1.0 ) );\n\tVERTEX_v_modelViewProjection = VERTEX_nodeVar147;\n\n\t// result\n\n\tvaryings.builtinClipSpace = VERTEX_v_modelViewProjection;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// global\ndiagnostic( off, derivative_uniformity );\n\n\n// structs\n\nstruct OutputStruct {\n\t@location( 0 ) color: vec4<f32>\n};\nvar<private> output : OutputStruct;\n\n// uniforms\n@binding( 1 ) @group( 1 ) var nodeUniform13_sampler : sampler;\n@binding( 2 ) @group( 1 ) var nodeUniform13 : texture_2d<f32>;\n\nstruct objectStruct {\n\tnodeUniform0 : vec3<f32>,\n\tnodeUniform1 : f32,\n\tnodeUniform2 : f32,\n\tnodeUniform3 : f32,\n\tnodeUniform5 : mat3x3<f32>,\n\tnodeUniform6 : vec3<f32>,\n\tnodeUniform7 : f32,\n\tnodeUniform12 : mat4x4<f32>\n};\n@binding( 0 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\nstruct renderStruct {\n\tcameraProjectionMatrix : mat4x4<f32>,\n\tcameraViewMatrix : mat4x4<f32>,\n\tnodeUniform11 : vec3<f32>,\n\tnodeUniform16 : vec3<f32>,\n\tnodeUniform19 : vec3<f32>,\n\tnodeUniform20 : vec3<f32>,\n\tnodeUniform9 : vec3<f32>,\n\tnodeUniform10 : vec3<f32>,\n\tnodeUniform14 : vec3<f32>,\n\tnodeUniform15 : vec3<f32>,\n\tnodeUniform17 : vec3<f32>,\n\tnodeUniform18 : vec3<f32>\n};\n@binding( 0 ) @group( 0 )\nvar<uniform> render : renderStruct;\n\n// vars\nvar<private> DiffuseColor : vec4<f32>;\nvar<private> Metalness : f32;\nvar<private> Roughness : f32;\nvar<private> normalViewGeometry : vec3<f32>;\nvar<private> nodeVar0 : vec3<f32>;\nvar<private> SpecularColor : vec3<f32>;\nvar<private> SpecularColorBlended : vec3<f32>;\nvar<private> SpecularF90 : f32;\nvar<private> DiffuseContribution : vec3<f32>;\nvar<private> EmissiveColor : vec3<f32>;\nvar<private> Output : vec4<f32>;\nvar<private> NORMAL_normalView : vec3<f32>;\nvar<private> normalView : vec3<f32>;\nvar<private> nodeVar1 : vec3<f32>;\nvar<private> nodeVar2 : vec4<f32>;\nvar<private> nodeVar3 : vec4<f32>;\nvar<private> nodeVar4 : vec3<f32>;\nvar<private> nodeVar5 : vec3<f32>;\nvar<private> nodeVar6 : f32;\nvar<private> nodeVar7 : vec3<f32>;\nvar<private> nodeVar8 : vec3<f32>;\nvar<private> directDiffuse : vec3<f32>;\nvar<private> nodeVar9 : vec3<f32>;\nvar<private> nodeVar10 : vec3<f32>;\nvar<private> nodeVar11 : vec3<f32>;\nvar<private> directSpecular : vec3<f32>;\nvar<private> positionViewDirection : vec3<f32>;\nvar<private> nodeVar12 : vec3<f32>;\nvar<private> nodeVar13 : f32;\nvar<private> nodeVar14 : f32;\nvar<private> nodeVar15 : f32;\nvar<private> nodeVar16 : vec4<f32>;\nvar<private> nodeVar17 : vec4<f32>;\nvar<private> nodeVar18 : vec3<f32>;\nvar<private> nodeVar19 : f32;\nvar<private> nodeVar20 : f32;\nvar<private> nodeVar21 : vec3<f32>;\nvar<private> nodeVar22 : vec3<f32>;\nvar<private> nodeVar23 : vec3<f32>;\nvar<private> nodeVar24 : vec3<f32>;\nvar<private> nodeVar25 : vec4<f32>;\nvar<private> nodeVar26 : vec4<f32>;\nvar<private> nodeVar27 : vec3<f32>;\nvar<private> nodeVar28 : vec3<f32>;\nvar<private> nodeVar29 : f32;\nvar<private> nodeVar30 : vec3<f32>;\nvar<private> nodeVar31 : vec3<f32>;\nvar<private> nodeVar32 : vec3<f32>;\nvar<private> nodeVar33 : vec3<f32>;\nvar<private> nodeVar34 : vec3<f32>;\nvar<private> nodeVar35 : vec3<f32>;\nvar<private> nodeVar36 : f32;\nvar<private> nodeVar37 : f32;\nvar<private> nodeVar38 : f32;\nvar<private> nodeVar39 : vec4<f32>;\nvar<private> nodeVar40 : vec4<f32>;\nvar<private> nodeVar41 : vec3<f32>;\nvar<private> nodeVar42 : f32;\nvar<private> nodeVar43 : f32;\nvar<private> nodeVar44 : vec3<f32>;\nvar<private> nodeVar45 : vec3<f32>;\nvar<private> nodeVar46 : vec3<f32>;\nvar<private> nodeVar47 : vec3<f32>;\nvar<private> nodeVar48 : vec4<f32>;\nvar<private> nodeVar49 : vec4<f32>;\nvar<private> nodeVar50 : vec3<f32>;\nvar<private> nodeVar51 : vec3<f32>;\nvar<private> nodeVar52 : f32;\nvar<private> nodeVar53 : vec3<f32>;\nvar<private> nodeVar54 : vec3<f32>;\nvar<private> nodeVar55 : vec3<f32>;\nvar<private> nodeVar56 : vec3<f32>;\nvar<private> nodeVar57 : vec3<f32>;\nvar<private> nodeVar58 : vec3<f32>;\nvar<private> nodeVar59 : f32;\nvar<private> nodeVar60 : f32;\nvar<private> nodeVar61 : f32;\nvar<private> nodeVar62 : vec4<f32>;\nvar<private> nodeVar63 : vec4<f32>;\nvar<private> nodeVar64 : vec3<f32>;\nvar<private> nodeVar65 : f32;\nvar<private> nodeVar66 : f32;\nvar<private> nodeVar67 : vec3<f32>;\nvar<private> nodeVar68 : vec3<f32>;\nvar<private> nodeVar69 : vec3<f32>;\nvar<private> irradiance : vec3<f32>;\nvar<private> nodeVar70 : vec3<f32>;\nvar<private> nodeVar71 : vec3<f32>;\nvar<private> nodeVar72 : vec3<f32>;\nvar<private> nodeVar73 : vec3<f32>;\nvar<private> indirectDiffuse : vec3<f32>;\nvar<private> nodeVar74 : vec3<f32>;\nvar<private> singleScatteringDielectric : vec3<f32>;\nvar<private> multiScatteringDielectric : vec3<f32>;\nvar<private> singleScatteringMetallic : vec3<f32>;\nvar<private> multiScatteringMetallic : vec3<f32>;\nvar<private> nodeVar75 : f32;\nvar<private> nodeVar76 : vec4<f32>;\nvar<private> nodeVar77 : vec3<f32>;\nvar<private> nodeVar78 : f32;\nvar<private> nodeVar79 : vec3<f32>;\nvar<private> nodeVar80 : vec3<f32>;\nvar<private> nodeVar81 : vec3<f32>;\nvar<private> nodeVar82 : vec3<f32>;\nvar<private> nodeVar83 : vec3<f32>;\nvar<private> nodeVar84 : vec3<f32>;\nvar<private> nodeVar85 : vec3<f32>;\nvar<private> nodeVar86 : f32;\nvar<private> nodeVar87 : f32;\nvar<private> nodeVar88 : f32;\nvar<private> nodeVar89 : vec3<f32>;\nvar<private> nodeVar90 : vec3<f32>;\nvar<private> nodeVar91 : vec3<f32>;\nvar<private> nodeVar92 : vec3<f32>;\nvar<private> nodeVar93 : vec3<f32>;\nvar<private> nodeVar94 : vec3<f32>;\nvar<private> nodeVar95 : f32;\nvar<private> nodeVar96 : vec4<f32>;\nvar<private> nodeVar97 : vec3<f32>;\nvar<private> nodeVar98 : f32;\nvar<private> nodeVar99 : vec3<f32>;\nvar<private> nodeVar100 : vec3<f32>;\nvar<private> nodeVar101 : vec3<f32>;\nvar<private> nodeVar102 : vec3<f32>;\nvar<private> nodeVar103 : vec3<f32>;\nvar<private> nodeVar104 : vec3<f32>;\nvar<private> nodeVar105 : vec3<f32>;\nvar<private> nodeVar106 : f32;\nvar<private> nodeVar107 : f32;\nvar<private> nodeVar108 : f32;\nvar<private> nodeVar109 : vec3<f32>;\nvar<private> nodeVar110 : vec3<f32>;\nvar<private> nodeVar111 : vec3<f32>;\nvar<private> nodeVar112 : vec3<f32>;\nvar<private> nodeVar113 : vec3<f32>;\nvar<private> nodeVar114 : vec3<f32>;\nvar<private> radiance : vec3<f32>;\nvar<private> nodeVar115 : vec3<f32>;\nvar<private> nodeVar116 : vec3<f32>;\nvar<private> nodeVar117 : vec3<f32>;\nvar<private> iblIrradiance : vec3<f32>;\nvar<private> nodeVar118 : vec3<f32>;\nvar<private> nodeVar119 : vec3<f32>;\nvar<private> nodeVar120 : vec3<f32>;\nvar<private> nodeVar121 : vec3<f32>;\nvar<private> nodeVar122 : vec3<f32>;\nvar<private> nodeVar123 : vec3<f32>;\nvar<private> nodeVar124 : vec3<f32>;\nvar<private> nodeVar125 : vec3<f32>;\nvar<private> nodeVar126 : vec3<f32>;\nvar<private> nodeVar127 : vec3<f32>;\nvar<private> indirectSpecular : vec3<f32>;\nvar<private> nodeVar128 : vec3<f32>;\nvar<private> nodeVar129 : vec3<f32>;\nvar<private> ambientOcclusion : f32;\nvar<private> nodeVar130 : vec3<f32>;\nvar<private> nodeVar131 : f32;\nvar<private> nodeVar132 : f32;\nvar<private> nodeVar133 : f32;\nvar<private> nodeVar134 : f32;\nvar<private> nodeVar135 : f32;\nvar<private> nodeVar136 : f32;\nvar<private> nodeVar137 : f32;\nvar<private> nodeVar138 : f32;\nvar<private> nodeVar139 : f32;\nvar<private> nodeVar140 : f32;\nvar<private> nodeVar141 : f32;\nvar<private> nodeVar142 : vec3<f32>;\nvar<private> totalDiffuse : vec3<f32>;\nvar<private> nodeVar143 : vec3<f32>;\nvar<private> totalSpecular : vec3<f32>;\nvar<private> nodeVar144 : vec3<f32>;\nvar<private> outgoingLight : vec3<f32>;\nvar<private> nodeVar145 : vec3<f32>;\nvar<private> nodeVar146 : vec4<f32>;\n\n// codes\nfn V_GGX_SmithCorrelated ( alpha : f32, dotNL : f32, dotNV : f32 ) -> f32 {\n\n\tvar nodeVar0 : f32;\n\n\tnodeVar0 = ( alpha * alpha );\n\n\treturn ( 0.5 / max( ( ( dotNL * sqrt( ( nodeVar0 + ( ( 1.0 - nodeVar0 ) * ( dotNV * dotNV ) ) ) ) ) + ( dotNV * sqrt( ( nodeVar0 + ( ( 1.0 - nodeVar0 ) * ( dotNL * dotNL ) ) ) ) ) ), 0.000001 ) );\n\n}\n\nfn D_GGX ( alpha : f32, dotNH : f32 ) -> f32 {\n\n\tvar nodeVar0 : f32;\n\tvar nodeVar1 : f32;\n\n\tnodeVar0 = ( alpha * alpha );\n\tnodeVar1 = ( 1.0 - ( ( dotNH * dotNH ) * ( 1.0 - nodeVar0 ) ) );\n\n\treturn ( ( nodeVar0 / ( nodeVar1 * nodeVar1 ) ) * 0.3183098861837907 );\n\n}\n\n\n\n@fragment\nfn main( @location( 0 ) v_normalViewGeometry : vec3<f32>,\n\t@location( 1 ) v_positionViewDirection : vec3<f32> ) -> OutputStruct {\n\n\t// flow\n\t// code\n\n\tDiffuseColor = vec4<f32>( object.nodeUniform0, 1.0 );\n\tDiffuseColor.w = ( DiffuseColor.w * object.nodeUniform1 );\n\tDiffuseColor.w = 1.0;\n\tMetalness = object.nodeUniform2;\n\tnormalViewGeometry = normalize( v_normalViewGeometry );\n\tnodeVar0 = max( abs( dpdx( normalViewGeometry ) ), abs( - dpdy( normalViewGeometry ) ) );\n\tRoughness = min( ( max( object.nodeUniform3, 0.0525 ) + max( max( nodeVar0.x, nodeVar0.y ), nodeVar0.z ) ), 1.0 );\n\tSpecularColor = vec3<f32>( 0.04, 0.04, 0.04 );\n\tSpecularColorBlended = mix( vec3<f32>( 0.04, 0.04, 0.04 ), DiffuseColor.xyz, Metalness );\n\tSpecularF90 = 1.0;\n\tDiffuseContribution = ( DiffuseColor.xyz * vec3<f32>( ( 1.0 - object.nodeUniform2 ) ) );\n\tEmissiveColor = ( object.nodeUniform6 * vec3<f32>( object.nodeUniform7 ) );\n\tNORMAL_normalView = normalViewGeometry;\n\tnormalView = NORMAL_normalView;\n\tnodeVar1 = ( render.nodeUniform9 - render.nodeUniform10 );\n\tnodeVar2 = vec4<f32>( nodeVar1, 0.0 );\n\tnodeVar3 = ( render.cameraViewMatrix * nodeVar2 );\n\tnodeVar4 = normalize( nodeVar3.xyz );\n\tnodeVar5 = nodeVar4;\n\tnodeVar6 = dot( normalView, nodeVar5 );\n\tnodeVar7 = ( vec3<f32>( clamp( nodeVar6, 0.0, 1.0 ) ) * render.nodeUniform11 );\n\tnodeVar8 = nodeVar7;\n\tdirectDiffuse = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar9 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar10 = ( nodeVar8 * nodeVar9 );\n\tnodeVar11 = ( directDiffuse + nodeVar10 );\n\tdirectDiffuse = nodeVar11;\n\tdirectSpecular = vec3<f32>( 0.0, 0.0, 0.0 );\n\tpositionViewDirection = normalize( v_positionViewDirection );\n\tnodeVar12 = normalize( ( nodeVar5 + positionViewDirection ) );\n\tnodeVar13 = clamp( dot( positionViewDirection, nodeVar12 ), 0.0, 1.0 );\n\tnodeVar14 = exp2( ( ( ( nodeVar13 * -5.55473 ) - 6.98316 ) * nodeVar13 ) );\n\tnodeVar15 = ( Roughness * Roughness );\n\tnodeVar16 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) );\n\tnodeVar17 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( dot( normalView, nodeVar5 ), 0.0, 1.0 ) ) );\n\tnodeVar18 = ( SpecularColorBlended + ( ( vec3<f32>( 1.0 ) - SpecularColorBlended ) * vec3<f32>( 0.047619 ) ) );\n\tnodeVar19 = ( 1.0 - ( nodeVar16.xy.x + nodeVar16.xy.y ) );\n\tnodeVar20 = ( 1.0 - ( nodeVar17.xy.x + nodeVar17.xy.y ) );\n\tnodeVar21 = ( ( ( ( ( SpecularColorBlended * vec3<f32>( ( 1.0 - nodeVar14 ) ) ) + vec3<f32>( ( 1.0 * nodeVar14 ) ) ) * vec3<f32>( V_GGX_SmithCorrelated( nodeVar15, clamp( dot( normalView, nodeVar5 ), 0.0, 1.0 ), clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) ) ) * vec3<f32>( D_GGX( nodeVar15, clamp( dot( normalView, nodeVar12 ), 0.0, 1.0 ) ) ) ) + ( ( ( ( ( ( SpecularColorBlended * vec3<f32>( nodeVar16.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar16.xy.y ) ) ) * ( ( SpecularColorBlended * vec3<f32>( nodeVar17.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar17.xy.y ) ) ) ) * nodeVar18 ) / ( ( vec3<f32>( 1.0 ) - ( ( vec3<f32>( ( nodeVar19 * nodeVar20 ) ) * nodeVar18 ) * nodeVar18 ) ) + vec3<f32>( 0.000001 ) ) ) * vec3<f32>( ( nodeVar19 * nodeVar20 ) ) ) );\n\tnodeVar22 = ( nodeVar8 * nodeVar21 );\n\tnodeVar23 = ( directSpecular + nodeVar22 );\n\tdirectSpecular = nodeVar23;\n\tnodeVar24 = ( render.nodeUniform14 - render.nodeUniform15 );\n\tnodeVar25 = vec4<f32>( nodeVar24, 0.0 );\n\tnodeVar26 = ( render.cameraViewMatrix * nodeVar25 );\n\tnodeVar27 = normalize( nodeVar26.xyz );\n\tnodeVar28 = nodeVar27;\n\tnodeVar29 = dot( normalView, nodeVar28 );\n\tnodeVar30 = ( vec3<f32>( clamp( nodeVar29, 0.0, 1.0 ) ) * render.nodeUniform16 );\n\tnodeVar31 = nodeVar30;\n\tnodeVar32 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar33 = ( nodeVar31 * nodeVar32 );\n\tnodeVar34 = ( directDiffuse + nodeVar33 );\n\tdirectDiffuse = nodeVar34;\n\tnodeVar35 = normalize( ( nodeVar28 + positionViewDirection ) );\n\tnodeVar36 = clamp( dot( positionViewDirection, nodeVar35 ), 0.0, 1.0 );\n\tnodeVar37 = exp2( ( ( ( nodeVar36 * -5.55473 ) - 6.98316 ) * nodeVar36 ) );\n\tnodeVar38 = ( Roughness * Roughness );\n\tnodeVar39 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) );\n\tnodeVar40 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( dot( normalView, nodeVar28 ), 0.0, 1.0 ) ) );\n\tnodeVar41 = ( SpecularColorBlended + ( ( vec3<f32>( 1.0 ) - SpecularColorBlended ) * vec3<f32>( 0.047619 ) ) );\n\tnodeVar42 = ( 1.0 - ( nodeVar39.xy.x + nodeVar39.xy.y ) );\n\tnodeVar43 = ( 1.0 - ( nodeVar40.xy.x + nodeVar40.xy.y ) );\n\tnodeVar44 = ( ( ( ( ( SpecularColorBlended * vec3<f32>( ( 1.0 - nodeVar37 ) ) ) + vec3<f32>( ( 1.0 * nodeVar37 ) ) ) * vec3<f32>( V_GGX_SmithCorrelated( nodeVar38, clamp( dot( normalView, nodeVar28 ), 0.0, 1.0 ), clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) ) ) * vec3<f32>( D_GGX( nodeVar38, clamp( dot( normalView, nodeVar35 ), 0.0, 1.0 ) ) ) ) + ( ( ( ( ( ( SpecularColorBlended * vec3<f32>( nodeVar39.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar39.xy.y ) ) ) * ( ( SpecularColorBlended * vec3<f32>( nodeVar40.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar40.xy.y ) ) ) ) * nodeVar41 ) / ( ( vec3<f32>( 1.0 ) - ( ( vec3<f32>( ( nodeVar42 * nodeVar43 ) ) * nodeVar41 ) * nodeVar41 ) ) + vec3<f32>( 0.000001 ) ) ) * vec3<f32>( ( nodeVar42 * nodeVar43 ) ) ) );\n\tnodeVar45 = ( nodeVar31 * nodeVar44 );\n\tnodeVar46 = ( directSpecular + nodeVar45 );\n\tdirectSpecular = nodeVar46;\n\tnodeVar47 = ( render.nodeUniform17 - render.nodeUniform18 );\n\tnodeVar48 = vec4<f32>( nodeVar47, 0.0 );\n\tnodeVar49 = ( render.cameraViewMatrix * nodeVar48 );\n\tnodeVar50 = normalize( nodeVar49.xyz );\n\tnodeVar51 = nodeVar50;\n\tnodeVar52 = dot( normalView, nodeVar51 );\n\tnodeVar53 = ( vec3<f32>( clamp( nodeVar52, 0.0, 1.0 ) ) * render.nodeUniform19 );\n\tnodeVar54 = nodeVar53;\n\tnodeVar55 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar56 = ( nodeVar54 * nodeVar55 );\n\tnodeVar57 = ( directDiffuse + nodeVar56 );\n\tdirectDiffuse = nodeVar57;\n\tnodeVar58 = normalize( ( nodeVar51 + positionViewDirection ) );\n\tnodeVar59 = clamp( dot( positionViewDirection, nodeVar58 ), 0.0, 1.0 );\n\tnodeVar60 = exp2( ( ( ( nodeVar59 * -5.55473 ) - 6.98316 ) * nodeVar59 ) );\n\tnodeVar61 = ( Roughness * Roughness );\n\tnodeVar62 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) );\n\tnodeVar63 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( dot( normalView, nodeVar51 ), 0.0, 1.0 ) ) );\n\tnodeVar64 = ( SpecularColorBlended + ( ( vec3<f32>( 1.0 ) - SpecularColorBlended ) * vec3<f32>( 0.047619 ) ) );\n\tnodeVar65 = ( 1.0 - ( nodeVar62.xy.x + nodeVar62.xy.y ) );\n\tnodeVar66 = ( 1.0 - ( nodeVar63.xy.x + nodeVar63.xy.y ) );\n\tnodeVar67 = ( ( ( ( ( SpecularColorBlended * vec3<f32>( ( 1.0 - nodeVar60 ) ) ) + vec3<f32>( ( 1.0 * nodeVar60 ) ) ) * vec3<f32>( V_GGX_SmithCorrelated( nodeVar61, clamp( dot( normalView, nodeVar51 ), 0.0, 1.0 ), clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) ) ) * vec3<f32>( D_GGX( nodeVar61, clamp( dot( normalView, nodeVar58 ), 0.0, 1.0 ) ) ) ) + ( ( ( ( ( ( SpecularColorBlended * vec3<f32>( nodeVar62.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar62.xy.y ) ) ) * ( ( SpecularColorBlended * vec3<f32>( nodeVar63.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar63.xy.y ) ) ) ) * nodeVar64 ) / ( ( vec3<f32>( 1.0 ) - ( ( vec3<f32>( ( nodeVar65 * nodeVar66 ) ) * nodeVar64 ) * nodeVar64 ) ) + vec3<f32>( 0.000001 ) ) ) * vec3<f32>( ( nodeVar65 * nodeVar66 ) ) ) );\n\tnodeVar68 = ( nodeVar54 * nodeVar67 );\n\tnodeVar69 = ( directSpecular + nodeVar68 );\n\tdirectSpecular = nodeVar69;\n\tirradiance = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar70 = ( irradiance + render.nodeUniform20 );\n\tirradiance = nodeVar70;\n\tnodeVar71 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar72 = ( irradiance * nodeVar71 );\n\tnodeVar73 = nodeVar72;\n\tindirectDiffuse = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar74 = ( indirectDiffuse + nodeVar73 );\n\tindirectDiffuse = nodeVar74;\n\tsingleScatteringDielectric = vec3<f32>( 0.0, 0.0, 0.0 );\n\tmultiScatteringDielectric = vec3<f32>( 0.0, 0.0, 0.0 );\n\tsingleScatteringMetallic = vec3<f32>( 0.0, 0.0, 0.0 );\n\tmultiScatteringMetallic = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar75 = dot( normalView, positionViewDirection );\n\tnodeVar76 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( nodeVar75, 0.0, 1.0 ) ) );\n\tnodeVar77 = ( SpecularColor * vec3<f32>( nodeVar76.xy.x ) );\n\tnodeVar78 = ( SpecularF90 * nodeVar76.xy.y );\n\tnodeVar79 = ( nodeVar77 + vec3<f32>( nodeVar78 ) );\n\tnodeVar80 = ( singleScatteringDielectric + nodeVar79 );\n\tsingleScatteringDielectric = nodeVar80;\n\tnodeVar81 = ( vec3<f32>( 1.0 ) - SpecularColor );\n\tnodeVar82 = nodeVar81;\n\tnodeVar83 = ( nodeVar82 * vec3<f32>( 0.047619 ) );\n\tnodeVar84 = ( SpecularColor + nodeVar83 );\n\tnodeVar85 = ( nodeVar79 * nodeVar84 );\n\tnodeVar86 = ( nodeVar76.xy.x + nodeVar76.xy.y );\n\tnodeVar87 = ( 1.0 - nodeVar86 );\n\tnodeVar88 = nodeVar87;\n\tnodeVar89 = ( vec3<f32>( nodeVar88 ) * nodeVar84 );\n\tnodeVar90 = ( vec3<f32>( 1.0 ) - nodeVar89 );\n\tnodeVar91 = nodeVar90;\n\tnodeVar92 = ( nodeVar85 / nodeVar91 );\n\tnodeVar93 = ( nodeVar92 * vec3<f32>( nodeVar88 ) );\n\tnodeVar94 = ( multiScatteringDielectric + nodeVar93 );\n\tmultiScatteringDielectric = nodeVar94;\n\tnodeVar95 = dot( normalView, positionViewDirection );\n\tnodeVar96 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( nodeVar95, 0.0, 1.0 ) ) );\n\tnodeVar97 = ( DiffuseColor.xyz * vec3<f32>( nodeVar96.xy.x ) );\n\tnodeVar98 = ( SpecularF90 * nodeVar96.xy.y );\n\tnodeVar99 = ( nodeVar97 + vec3<f32>( nodeVar98 ) );\n\tnodeVar100 = ( singleScatteringMetallic + nodeVar99 );\n\tsingleScatteringMetallic = nodeVar100;\n\tnodeVar101 = ( vec3<f32>( 1.0 ) - DiffuseColor.xyz );\n\tnodeVar102 = nodeVar101;\n\tnodeVar103 = ( nodeVar102 * vec3<f32>( 0.047619 ) );\n\tnodeVar104 = ( DiffuseColor.xyz + nodeVar103 );\n\tnodeVar105 = ( nodeVar99 * nodeVar104 );\n\tnodeVar106 = ( nodeVar96.xy.x + nodeVar96.xy.y );\n\tnodeVar107 = ( 1.0 - nodeVar106 );\n\tnodeVar108 = nodeVar107;\n\tnodeVar109 = ( vec3<f32>( nodeVar108 ) * nodeVar104 );\n\tnodeVar110 = ( vec3<f32>( 1.0 ) - nodeVar109 );\n\tnodeVar111 = nodeVar110;\n\tnodeVar112 = ( nodeVar105 / nodeVar111 );\n\tnodeVar113 = ( nodeVar112 * vec3<f32>( nodeVar108 ) );\n\tnodeVar114 = ( multiScatteringMetallic + nodeVar113 );\n\tmultiScatteringMetallic = nodeVar114;\n\tradiance = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar115 = mix( singleScatteringDielectric, singleScatteringMetallic, Metalness );\n\tnodeVar116 = ( radiance * nodeVar115 );\n\tnodeVar117 = mix( multiScatteringDielectric, multiScatteringMetallic, Metalness );\n\tiblIrradiance = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar118 = ( iblIrradiance * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar119 = ( nodeVar117 * nodeVar118 );\n\tnodeVar120 = ( nodeVar116 + nodeVar119 );\n\tnodeVar121 = nodeVar120;\n\tnodeVar122 = ( singleScatteringDielectric + multiScatteringDielectric );\n\tnodeVar123 = ( vec3<f32>( 1.0 ) - nodeVar122 );\n\tnodeVar124 = nodeVar123;\n\tnodeVar125 = ( DiffuseContribution * nodeVar124 );\n\tnodeVar126 = ( nodeVar125 * nodeVar118 );\n\tnodeVar127 = nodeVar126;\n\tindirectSpecular = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar128 = ( indirectSpecular + nodeVar121 );\n\tindirectSpecular = nodeVar128;\n\tnodeVar129 = ( indirectDiffuse + nodeVar127 );\n\tindirectDiffuse = nodeVar129;\n\tambientOcclusion = 1.0;\n\tnodeVar130 = ( indirectDiffuse * vec3<f32>( ambientOcclusion ) );\n\tindirectDiffuse = nodeVar130;\n\tnodeVar131 = dot( normalView, positionViewDirection );\n\tnodeVar132 = ( clamp( nodeVar131, 0.0, 1.0 ) + ambientOcclusion );\n\tnodeVar133 = ( Roughness * -16.0 );\n\tnodeVar134 = ( 1.0 - nodeVar133 );\n\tnodeVar135 = nodeVar134;\n\tnodeVar136 = ( - nodeVar135 );\n\tnodeVar137 = exp2( nodeVar136 );\n\tnodeVar138 = pow( nodeVar132, nodeVar137 );\n\tnodeVar139 = ( 1.0 - nodeVar138 );\n\tnodeVar140 = nodeVar139;\n\tnodeVar141 = ( ambientOcclusion - nodeVar140 );\n\tnodeVar142 = ( indirectSpecular * vec3<f32>( clamp( nodeVar141, 0.0, 1.0 ) ) );\n\tindirectSpecular = nodeVar142;\n\tnodeVar143 = ( directDiffuse + indirectDiffuse );\n\ttotalDiffuse = nodeVar143;\n\tnodeVar144 = ( directSpecular + indirectSpecular );\n\ttotalSpecular = nodeVar144;\n\tnodeVar145 = ( totalDiffuse + totalSpecular );\n\toutgoingLight = nodeVar145;\n\tnodeVar146 = max( vec4<f32>( ( outgoingLight + EmissiveColor ), DiffuseColor.w ), vec4<f32>( 0.0 ) );\n\tOutput = nodeVar146;\n\n\t// result\n\n\toutput.color = nodeVar146;\n\n\treturn output;\n\n}\n","// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct NodeBuffer_3536Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 3 ) @group( 1 )\nvar<storage, read> NodeBuffer_3536 : NodeBuffer_3536Struct;\n\nstruct NodeBuffer_3517Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 4 ) @group( 1 )\nvar<storage, read> NodeBuffer_3517 : NodeBuffer_3517Struct;\n\nstruct objectStruct {\n\tnodeUniform2 : mat3x3<f32>,\n\tnodeUniform3 : f32,\n\tnodeUniform4 : f32,\n\tnodeUniform5 : f32,\n\tnodeUniform6 : f32,\n\tnodeUniform7 : f32,\n\tnodeUniform9 : vec2<f32>,\n\tnodeUniform11 : vec2<f32>,\n\tnodeUniform12 : f32\n};\n@binding( 2 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@location( 0 ) nodeVarying0 : vec4<f32>,\n\t@location( 1 ) nodeVarying1 : vec4<f32>,\n\t@location( 2 ) nodeVarying2 : vec2<f32>,\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> nodeVar10 : u32;\nvar<private> nodeVar11 : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) msdfMember : f32,\n\t@location( 1 ) msdfUvRect : vec4<f32>,\n\t@location( 2 ) uv : vec2<f32>,\n\t@location( 3 ) msdfRect : vec4<f32>,\n\t@location( 4 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tvaryings.nodeVarying0 = NodeBuffer_3536.value[ u32( msdfMember ) ];\n\tvaryings.nodeVarying1 = msdfUvRect;\n\tvaryings.nodeVarying2 = uv;\n\tnodeVar10 = ( u32( msdfMember ) * 4u );\n\tnodeVar11 = vec4<f32>( ( ( ( ( object.nodeUniform9 + vec2<f32>( ( mat4x4<f32>( NodeBuffer_3517.value[ nodeVar10 ], NodeBuffer_3517.value[ ( nodeVar10 + 1u ) ], NodeBuffer_3517.value[ ( nodeVar10 + 2u ) ], NodeBuffer_3517.value[ ( nodeVar10 + 3u ) ] ) * vec4<f32>( ( msdfRect.xy + ( position.xy * msdfRect.zw ) ), 0.0, 1.0 ) ).xyz.x, ( - ( mat4x4<f32>( NodeBuffer_3517.value[ nodeVar10 ], NodeBuffer_3517.value[ ( nodeVar10 + 1u ) ], NodeBuffer_3517.value[ ( nodeVar10 + 2u ) ], NodeBuffer_3517.value[ ( nodeVar10 + 3u ) ] ) * vec4<f32>( ( msdfRect.xy + ( position.xy * msdfRect.zw ) ), 0.0, 1.0 ) ).xyz.y ) ) ) / object.nodeUniform11 ) * vec2<f32>( 2.0, -2.0 ) ) + vec2<f32>( -1.0, 1.0 ) ), object.nodeUniform12, 1.0 );\n\n\t// result\n\n\tvaryings.builtinClipSpace = nodeVar11;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// global\ndiagnostic( off, derivative_uniformity );\n\n\n// structs\n\nstruct OutputStruct {\n\t@location( 0 ) color: vec4<f32>\n};\nvar<private> output : OutputStruct;\n\n// uniforms\n@binding( 0 ) @group( 1 ) var nodeUniform1_sampler : sampler;\n@binding( 1 ) @group( 1 ) var nodeUniform1 : texture_2d<f32>;\n\nstruct objectStruct {\n\tnodeUniform2 : mat3x3<f32>,\n\tnodeUniform3 : f32,\n\tnodeUniform4 : f32,\n\tnodeUniform5 : f32,\n\tnodeUniform6 : f32,\n\tnodeUniform7 : f32,\n\tnodeUniform9 : vec2<f32>,\n\tnodeUniform11 : vec2<f32>,\n\tnodeUniform12 : f32\n};\n@binding( 2 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\nstruct renderStruct {\n\tnodeUniform8 : vec3<f32>\n};\n@binding( 0 ) @group( 0 )\nvar<uniform> render : renderStruct;\n\n// vars\nvar<private> DiffuseColor : vec4<f32>;\nvar<private> nodeVar0 : vec2<f32>;\nvar<private> nodeVar1 : vec4<f32>;\nvar<private> Output : vec4<f32>;\nvar<private> irradiance : vec3<f32>;\nvar<private> nodeVar2 : vec3<f32>;\nvar<private> indirectDiffuse : vec3<f32>;\nvar<private> nodeVar3 : vec4<f32>;\nvar<private> ambientOcclusion : f32;\nvar<private> nodeVar4 : vec3<f32>;\nvar<private> nodeVar5 : vec3<f32>;\nvar<private> totalDiffuse : vec3<f32>;\nvar<private> directDiffuse : vec3<f32>;\nvar<private> nodeVar6 : vec3<f32>;\nvar<private> totalSpecular : vec3<f32>;\nvar<private> directSpecular : vec3<f32>;\nvar<private> indirectSpecular : vec3<f32>;\nvar<private> nodeVar7 : vec3<f32>;\nvar<private> outgoingLight : vec3<f32>;\nvar<private> nodeVar8 : vec3<f32>;\nvar<private> nodeVar9 : vec4<f32>;\n\n// codes\n\n\n@fragment\nfn main( @location( 0 ) nodeVarying0 : vec4<f32>,\n\t@location( 1 ) nodeVarying1 : vec4<f32>,\n\t@location( 2 ) nodeVarying2 : vec2<f32> ) -> OutputStruct {\n\n\t// flow\n\t// code\n\n\tnodeVar0 = vec2<f32>( mix( nodeVarying1.x, nodeVarying1.z, nodeVarying2.x ), mix( nodeVarying1.w, nodeVarying1.y, nodeVarying2.y ) );\n\tnodeVar1 = textureSample( nodeUniform1, nodeUniform1_sampler, ( object.nodeUniform2 * vec3<f32>( nodeVar0, 1.0 ) ).xy );\n\tDiffuseColor = vec4<f32>( nodeVarying0.xyz, ( ( clamp( ( ( ( ( max( min( nodeVar1.x, nodeVar1.y ), min( max( nodeVar1.x, nodeVar1.y ), nodeVar1.z ) ) - 0.5 ) + object.nodeUniform3 ) * max( ( dot( ( vec2<f32>( object.nodeUniform4 ) / vec2<f32>( textureDimensions( nodeUniform1, 0 ) ) ), ( vec2<f32>( 1.0, 1.0 ) / fwidth( nodeVar0 ) ) ) * 0.5 ), 1.0 ) ) + 0.5 ), 0.0, 1.0 ) * nodeVarying0.w ) * object.nodeUniform5 ) );\n\tDiffuseColor.w = ( DiffuseColor.w * object.nodeUniform6 );\n\n\tif ( ( DiffuseColor.w <= object.nodeUniform7 ) ) {\n\n\t\tdiscard;\n\t\t\n\n\t}\n\n\tirradiance = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar2 = ( irradiance + render.nodeUniform8 );\n\tirradiance = nodeVar2;\n\tindirectDiffuse = vec3<f32>( 0.0, 0.0, 0.0 );\n\tindirectDiffuse = vec4<f32>( 0.0, 0.0, 0.0, 0.0 ).xyz;\n\tnodeVar3 = ( vec4<f32>( indirectDiffuse, 1.0 ) + vec4<f32>( 1.0, 1.0, 1.0, 0.0 ) );\n\tindirectDiffuse = nodeVar3.xyz;\n\tambientOcclusion = 1.0;\n\tnodeVar4 = ( indirectDiffuse * vec3<f32>( ambientOcclusion ) );\n\tindirectDiffuse = nodeVar4;\n\tnodeVar5 = ( indirectDiffuse * DiffuseColor.xyz );\n\tindirectDiffuse = nodeVar5;\n\tdirectDiffuse = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar6 = ( directDiffuse + indirectDiffuse );\n\ttotalDiffuse = nodeVar6;\n\tdirectSpecular = vec3<f32>( 0.0, 0.0, 0.0 );\n\tindirectSpecular = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar7 = ( directSpecular + indirectSpecular );\n\ttotalSpecular = nodeVar7;\n\tnodeVar8 = ( totalDiffuse + totalSpecular );\n\toutgoingLight = nodeVar8;\n\tnodeVar9 = max( vec4<f32>( outgoingLight, DiffuseColor.w ), vec4<f32>( 0.0 ) );\n\tOutput = nodeVar9;\n\n\t// result\n\n\toutput.color = nodeVar9;\n\n\treturn output;\n\n}\n","// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct NodeBuffer_3674Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 3 ) @group( 1 )\nvar<storage, read> NodeBuffer_3674 : NodeBuffer_3674Struct;\n\nstruct NodeBuffer_3655Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 4 ) @group( 1 )\nvar<storage, read> NodeBuffer_3655 : NodeBuffer_3655Struct;\n\nstruct objectStruct {\n\tnodeUniform2 : mat3x3<f32>,\n\tnodeUniform3 : f32,\n\tnodeUniform4 : f32,\n\tnodeUniform5 : f32,\n\tnodeUniform6 : f32,\n\tnodeUniform7 : f32,\n\tnodeUniform9 : vec2<f32>,\n\tnodeUniform11 : vec2<f32>,\n\tnodeUniform12 : f32\n};\n@binding( 2 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@location( 0 ) nodeVarying0 : vec4<f32>,\n\t@location( 1 ) nodeVarying1 : vec4<f32>,\n\t@location( 2 ) nodeVarying2 : vec2<f32>,\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> nodeVar10 : u32;\nvar<private> nodeVar11 : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) msdfMember : f32,\n\t@location( 1 ) msdfUvRect : vec4<f32>,\n\t@location( 2 ) uv : vec2<f32>,\n\t@location( 3 ) msdfRect : vec4<f32>,\n\t@location( 4 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tvaryings.nodeVarying0 = NodeBuffer_3674.value[ u32( msdfMember ) ];\n\tvaryings.nodeVarying1 = msdfUvRect;\n\tvaryings.nodeVarying2 = uv;\n\tnodeVar10 = ( u32( msdfMember ) * 4u );\n\tnodeVar11 = vec4<f32>( ( ( ( ( object.nodeUniform9 + vec2<f32>( ( mat4x4<f32>( NodeBuffer_3655.value[ nodeVar10 ], NodeBuffer_3655.value[ ( nodeVar10 + 1u ) ], NodeBuffer_3655.value[ ( nodeVar10 + 2u ) ], NodeBuffer_3655.value[ ( nodeVar10 + 3u ) ] ) * vec4<f32>( ( msdfRect.xy + ( position.xy * msdfRect.zw ) ), 0.0, 1.0 ) ).xyz.x, ( - ( mat4x4<f32>( NodeBuffer_3655.value[ nodeVar10 ], NodeBuffer_3655.value[ ( nodeVar10 + 1u ) ], NodeBuffer_3655.value[ ( nodeVar10 + 2u ) ], NodeBuffer_3655.value[ ( nodeVar10 + 3u ) ] ) * vec4<f32>( ( msdfRect.xy + ( position.xy * msdfRect.zw ) ), 0.0, 1.0 ) ).xyz.y ) ) ) / object.nodeUniform11 ) * vec2<f32>( 2.0, -2.0 ) ) + vec2<f32>( -1.0, 1.0 ) ), object.nodeUniform12, 1.0 );\n\n\t// result\n\n\tvaryings.builtinClipSpace = nodeVar11;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct NodeBuffer_3948Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 3 ) @group( 1 )\nvar<storage, read> NodeBuffer_3948 : NodeBuffer_3948Struct;\n\nstruct NodeBuffer_3929Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 4 ) @group( 1 )\nvar<storage, read> NodeBuffer_3929 : NodeBuffer_3929Struct;\n\nstruct objectStruct {\n\tnodeUniform2 : mat3x3<f32>,\n\tnodeUniform3 : f32,\n\tnodeUniform4 : f32,\n\tnodeUniform5 : f32,\n\tnodeUniform6 : f32,\n\tnodeUniform7 : f32,\n\tnodeUniform9 : vec2<f32>,\n\tnodeUniform11 : vec2<f32>,\n\tnodeUniform12 : f32\n};\n@binding( 2 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@location( 0 ) nodeVarying0 : vec4<f32>,\n\t@location( 1 ) nodeVarying1 : vec4<f32>,\n\t@location( 2 ) nodeVarying2 : vec2<f32>,\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> nodeVar10 : u32;\nvar<private> nodeVar11 : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) msdfMember : f32,\n\t@location( 1 ) msdfUvRect : vec4<f32>,\n\t@location( 2 ) uv : vec2<f32>,\n\t@location( 3 ) msdfRect : vec4<f32>,\n\t@location( 4 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tvaryings.nodeVarying0 = NodeBuffer_3948.value[ u32( msdfMember ) ];\n\tvaryings.nodeVarying1 = msdfUvRect;\n\tvaryings.nodeVarying2 = uv;\n\tnodeVar10 = ( u32( msdfMember ) * 4u );\n\tnodeVar11 = vec4<f32>( ( ( ( ( object.nodeUniform9 + vec2<f32>( ( mat4x4<f32>( NodeBuffer_3929.value[ nodeVar10 ], NodeBuffer_3929.value[ ( nodeVar10 + 1u ) ], NodeBuffer_3929.value[ ( nodeVar10 + 2u ) ], NodeBuffer_3929.value[ ( nodeVar10 + 3u ) ] ) * vec4<f32>( ( msdfRect.xy + ( position.xy * msdfRect.zw ) ), 0.0, 1.0 ) ).xyz.x, ( - ( mat4x4<f32>( NodeBuffer_3929.value[ nodeVar10 ], NodeBuffer_3929.value[ ( nodeVar10 + 1u ) ], NodeBuffer_3929.value[ ( nodeVar10 + 2u ) ], NodeBuffer_3929.value[ ( nodeVar10 + 3u ) ] ) * vec4<f32>( ( msdfRect.xy + ( position.xy * msdfRect.zw ) ), 0.0, 1.0 ) ).xyz.y ) ) ) / object.nodeUniform11 ) * vec2<f32>( 2.0, -2.0 ) ) + vec2<f32>( -1.0, 1.0 ) ), object.nodeUniform12, 1.0 );\n\n\t// result\n\n\tvaryings.builtinClipSpace = nodeVar11;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct NodeBuffer_3811Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 3 ) @group( 1 )\nvar<storage, read> NodeBuffer_3811 : NodeBuffer_3811Struct;\n\nstruct NodeBuffer_3792Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 4 ) @group( 1 )\nvar<storage, read> NodeBuffer_3792 : NodeBuffer_3792Struct;\n\nstruct objectStruct {\n\tnodeUniform2 : mat3x3<f32>,\n\tnodeUniform3 : f32,\n\tnodeUniform4 : f32,\n\tnodeUniform5 : f32,\n\tnodeUniform6 : f32,\n\tnodeUniform7 : f32,\n\tnodeUniform9 : vec2<f32>,\n\tnodeUniform11 : vec2<f32>,\n\tnodeUniform12 : f32\n};\n@binding( 2 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@location( 0 ) nodeVarying0 : vec4<f32>,\n\t@location( 1 ) nodeVarying1 : vec4<f32>,\n\t@location( 2 ) nodeVarying2 : vec2<f32>,\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> nodeVar10 : u32;\nvar<private> nodeVar11 : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) msdfMember : f32,\n\t@location( 1 ) msdfUvRect : vec4<f32>,\n\t@location( 2 ) uv : vec2<f32>,\n\t@location( 3 ) msdfRect : vec4<f32>,\n\t@location( 4 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tvaryings.nodeVarying0 = NodeBuffer_3811.value[ u32( msdfMember ) ];\n\tvaryings.nodeVarying1 = msdfUvRect;\n\tvaryings.nodeVarying2 = uv;\n\tnodeVar10 = ( u32( msdfMember ) * 4u );\n\tnodeVar11 = vec4<f32>( ( ( ( ( object.nodeUniform9 + vec2<f32>( ( mat4x4<f32>( NodeBuffer_3792.value[ nodeVar10 ], NodeBuffer_3792.value[ ( nodeVar10 + 1u ) ], NodeBuffer_3792.value[ ( nodeVar10 + 2u ) ], NodeBuffer_3792.value[ ( nodeVar10 + 3u ) ] ) * vec4<f32>( ( msdfRect.xy + ( position.xy * msdfRect.zw ) ), 0.0, 1.0 ) ).xyz.x, ( - ( mat4x4<f32>( NodeBuffer_3792.value[ nodeVar10 ], NodeBuffer_3792.value[ ( nodeVar10 + 1u ) ], NodeBuffer_3792.value[ ( nodeVar10 + 2u ) ], NodeBuffer_3792.value[ ( nodeVar10 + 3u ) ] ) * vec4<f32>( ( msdfRect.xy + ( position.xy * msdfRect.zw ) ), 0.0, 1.0 ) ).xyz.y ) ) ) / object.nodeUniform11 ) * vec2<f32>( 2.0, -2.0 ) ) + vec2<f32>( -1.0, 1.0 ) ), object.nodeUniform12, 1.0 );\n\n\t// result\n\n\tvaryings.builtinClipSpace = nodeVar11;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct renderStruct {\n\tcameraProjectionMatrix : mat4x4<f32>,\n\tcameraViewMatrix : mat4x4<f32>,\n\tnodeUniform11 : vec3<f32>,\n\tnodeUniform22 : vec3<f32>,\n\tnodeUniform25 : vec3<f32>,\n\tnodeUniform26 : vec3<f32>,\n\tnodeUniform9 : vec3<f32>,\n\tnodeUniform10 : vec3<f32>,\n\tnodeUniform20 : vec3<f32>,\n\tnodeUniform21 : vec3<f32>,\n\tnodeUniform23 : vec3<f32>,\n\tnodeUniform24 : vec3<f32>,\n\tnodeUniform13 : mat4x4<f32>,\n\tnodeUniform14 : f32,\n\tnodeUniform15 : f32,\n\tnodeUniform16 : vec2<f32>,\n\tnodeUniform18 : f32\n};\n@binding( 0 ) @group( 0 )\nvar<uniform> render : renderStruct;\n\nstruct objectStruct {\n\tnodeUniform0 : vec3<f32>,\n\tnodeUniform1 : f32,\n\tnodeUniform2 : f32,\n\tnodeUniform3 : f32,\n\tnodeUniform5 : mat3x3<f32>,\n\tnodeUniform6 : vec3<f32>,\n\tnodeUniform7 : f32,\n\tnodeUniform12 : mat4x4<f32>\n};\n@binding( 0 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@location( 0 ) v_normalViewGeometry : vec3<f32>,\n\t@location( 1 ) v_positionWorld : vec3<f32>,\n\t@location( 2 ) v_positionViewDirection : vec3<f32>,\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> normalLocal : vec3<f32>;\nvar<private> modelViewMatrix : mat4x4<f32>;\nvar<private> VERTEX_nodeVar158 : vec4<f32>;\nvar<private> v_modelViewProjection : vec4<f32>;\nvar<private> v_positionView : vec3<f32>;\nvar<private> positionLocal : vec3<f32>;\nvar<private> VERTEX_v_modelViewProjection : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) normal : vec3<f32>,\n\t@location( 1 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tnormalLocal = normal;\n\tvaryings.v_normalViewGeometry = normalize( ( render.cameraViewMatrix * vec4<f32>( ( object.nodeUniform5 * normalLocal ), 0.0 ) ).xyz );\n\tpositionLocal = position;\n\tvaryings.v_positionWorld = ( object.nodeUniform12 * vec4<f32>( positionLocal, 1.0 ) ).xyz;\n\tmodelViewMatrix = ( render.cameraViewMatrix * object.nodeUniform12 );\n\tv_positionView = ( modelViewMatrix * vec4<f32>( positionLocal, 1.0 ) ).xyz;\n\tvaryings.v_positionViewDirection = ( - v_positionView );\n\tVERTEX_nodeVar158 = ( render.cameraProjectionMatrix * vec4<f32>( v_positionView, 1.0 ) );\n\tVERTEX_v_modelViewProjection = VERTEX_nodeVar158;\n\n\t// result\n\n\tvaryings.builtinClipSpace = VERTEX_v_modelViewProjection;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// global\ndiagnostic( off, derivative_uniformity );\n\n\n// structs\n\nstruct OutputStruct {\n\t@location( 0 ) color: vec4<f32>\n};\nvar<private> output : OutputStruct;\n\n// uniforms\n@binding( 1 ) @group( 1 ) var nodeUniform17_sampler : sampler_comparison;\n@binding( 2 ) @group( 1 ) var nodeUniform17 : texture_depth_2d;\n@binding( 3 ) @group( 1 ) var nodeUniform19_sampler : sampler;\n@binding( 4 ) @group( 1 ) var nodeUniform19 : texture_2d<f32>;\n\nstruct objectStruct {\n\tnodeUniform0 : vec3<f32>,\n\tnodeUniform1 : f32,\n\tnodeUniform2 : f32,\n\tnodeUniform3 : f32,\n\tnodeUniform5 : mat3x3<f32>,\n\tnodeUniform6 : vec3<f32>,\n\tnodeUniform7 : f32,\n\tnodeUniform12 : mat4x4<f32>\n};\n@binding( 0 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\nstruct renderStruct {\n\tcameraProjectionMatrix : mat4x4<f32>,\n\tcameraViewMatrix : mat4x4<f32>,\n\tnodeUniform11 : vec3<f32>,\n\tnodeUniform22 : vec3<f32>,\n\tnodeUniform25 : vec3<f32>,\n\tnodeUniform26 : vec3<f32>,\n\tnodeUniform9 : vec3<f32>,\n\tnodeUniform10 : vec3<f32>,\n\tnodeUniform20 : vec3<f32>,\n\tnodeUniform21 : vec3<f32>,\n\tnodeUniform23 : vec3<f32>,\n\tnodeUniform24 : vec3<f32>,\n\tnodeUniform13 : mat4x4<f32>,\n\tnodeUniform14 : f32,\n\tnodeUniform15 : f32,\n\tnodeUniform16 : vec2<f32>,\n\tnodeUniform18 : f32\n};\n@binding( 0 ) @group( 0 )\nvar<uniform> render : renderStruct;\n\n// vars\nvar<private> DiffuseColor : vec4<f32>;\nvar<private> Metalness : f32;\nvar<private> Roughness : f32;\nvar<private> normalViewGeometry : vec3<f32>;\nvar<private> nodeVar0 : vec3<f32>;\nvar<private> SpecularColor : vec3<f32>;\nvar<private> SpecularColorBlended : vec3<f32>;\nvar<private> SpecularF90 : f32;\nvar<private> DiffuseContribution : vec3<f32>;\nvar<private> EmissiveColor : vec3<f32>;\nvar<private> Output : vec4<f32>;\nvar<private> NORMAL_normalView : vec3<f32>;\nvar<private> normalView : vec3<f32>;\nvar<private> nodeVar1 : vec3<f32>;\nvar<private> nodeVar2 : vec4<f32>;\nvar<private> nodeVar3 : vec4<f32>;\nvar<private> nodeVar4 : vec3<f32>;\nvar<private> nodeVar5 : vec3<f32>;\nvar<private> nodeVar6 : f32;\nvar<private> shadowPositionWorld : vec3<f32>;\nvar<private> normalWorld : vec3<f32>;\nvar<private> nodeVar7 : vec4<f32>;\nvar<private> nodeVar8 : vec3<f32>;\nvar<private> nodeVar9 : vec3<f32>;\nvar<private> nodeVar10 : f32;\nvar<private> nodeVar11 : vec2<f32>;\nvar<private> nodeVar12 : vec4<f32>;\nvar<private> nodeVar13 : vec4<f32>;\nvar<private> nodeVar14 : vec4<f32>;\nvar<private> nodeVar15 : vec4<f32>;\nvar<private> nodeVar16 : f32;\nvar<private> nodeVar17 : vec3<f32>;\nvar<private> nodeVar18 : vec3<f32>;\nvar<private> nodeVar19 : vec3<f32>;\nvar<private> directDiffuse : vec3<f32>;\nvar<private> nodeVar20 : vec3<f32>;\nvar<private> nodeVar21 : vec3<f32>;\nvar<private> nodeVar22 : vec3<f32>;\nvar<private> directSpecular : vec3<f32>;\nvar<private> positionViewDirection : vec3<f32>;\nvar<private> nodeVar23 : vec3<f32>;\nvar<private> nodeVar24 : f32;\nvar<private> nodeVar25 : f32;\nvar<private> nodeVar26 : f32;\nvar<private> nodeVar27 : vec4<f32>;\nvar<private> nodeVar28 : vec4<f32>;\nvar<private> nodeVar29 : vec3<f32>;\nvar<private> nodeVar30 : f32;\nvar<private> nodeVar31 : f32;\nvar<private> nodeVar32 : vec3<f32>;\nvar<private> nodeVar33 : vec3<f32>;\nvar<private> nodeVar34 : vec3<f32>;\nvar<private> nodeVar35 : vec3<f32>;\nvar<private> nodeVar36 : vec4<f32>;\nvar<private> nodeVar37 : vec4<f32>;\nvar<private> nodeVar38 : vec3<f32>;\nvar<private> nodeVar39 : vec3<f32>;\nvar<private> nodeVar40 : f32;\nvar<private> nodeVar41 : vec3<f32>;\nvar<private> nodeVar42 : vec3<f32>;\nvar<private> nodeVar43 : vec3<f32>;\nvar<private> nodeVar44 : vec3<f32>;\nvar<private> nodeVar45 : vec3<f32>;\nvar<private> nodeVar46 : vec3<f32>;\nvar<private> nodeVar47 : f32;\nvar<private> nodeVar48 : f32;\nvar<private> nodeVar49 : f32;\nvar<private> nodeVar50 : vec4<f32>;\nvar<private> nodeVar51 : vec4<f32>;\nvar<private> nodeVar52 : vec3<f32>;\nvar<private> nodeVar53 : f32;\nvar<private> nodeVar54 : f32;\nvar<private> nodeVar55 : vec3<f32>;\nvar<private> nodeVar56 : vec3<f32>;\nvar<private> nodeVar57 : vec3<f32>;\nvar<private> nodeVar58 : vec3<f32>;\nvar<private> nodeVar59 : vec4<f32>;\nvar<private> nodeVar60 : vec4<f32>;\nvar<private> nodeVar61 : vec3<f32>;\nvar<private> nodeVar62 : vec3<f32>;\nvar<private> nodeVar63 : f32;\nvar<private> nodeVar64 : vec3<f32>;\nvar<private> nodeVar65 : vec3<f32>;\nvar<private> nodeVar66 : vec3<f32>;\nvar<private> nodeVar67 : vec3<f32>;\nvar<private> nodeVar68 : vec3<f32>;\nvar<private> nodeVar69 : vec3<f32>;\nvar<private> nodeVar70 : f32;\nvar<private> nodeVar71 : f32;\nvar<private> nodeVar72 : f32;\nvar<private> nodeVar73 : vec4<f32>;\nvar<private> nodeVar74 : vec4<f32>;\nvar<private> nodeVar75 : vec3<f32>;\nvar<private> nodeVar76 : f32;\nvar<private> nodeVar77 : f32;\nvar<private> nodeVar78 : vec3<f32>;\nvar<private> nodeVar79 : vec3<f32>;\nvar<private> nodeVar80 : vec3<f32>;\nvar<private> irradiance : vec3<f32>;\nvar<private> nodeVar81 : vec3<f32>;\nvar<private> nodeVar82 : vec3<f32>;\nvar<private> nodeVar83 : vec3<f32>;\nvar<private> nodeVar84 : vec3<f32>;\nvar<private> indirectDiffuse : vec3<f32>;\nvar<private> nodeVar85 : vec3<f32>;\nvar<private> singleScatteringDielectric : vec3<f32>;\nvar<private> multiScatteringDielectric : vec3<f32>;\nvar<private> singleScatteringMetallic : vec3<f32>;\nvar<private> multiScatteringMetallic : vec3<f32>;\nvar<private> nodeVar86 : f32;\nvar<private> nodeVar87 : vec4<f32>;\nvar<private> nodeVar88 : vec3<f32>;\nvar<private> nodeVar89 : f32;\nvar<private> nodeVar90 : vec3<f32>;\nvar<private> nodeVar91 : vec3<f32>;\nvar<private> nodeVar92 : vec3<f32>;\nvar<private> nodeVar93 : vec3<f32>;\nvar<private> nodeVar94 : vec3<f32>;\nvar<private> nodeVar95 : vec3<f32>;\nvar<private> nodeVar96 : vec3<f32>;\nvar<private> nodeVar97 : f32;\nvar<private> nodeVar98 : f32;\nvar<private> nodeVar99 : f32;\nvar<private> nodeVar100 : vec3<f32>;\nvar<private> nodeVar101 : vec3<f32>;\nvar<private> nodeVar102 : vec3<f32>;\nvar<private> nodeVar103 : vec3<f32>;\nvar<private> nodeVar104 : vec3<f32>;\nvar<private> nodeVar105 : vec3<f32>;\nvar<private> nodeVar106 : f32;\nvar<private> nodeVar107 : vec4<f32>;\nvar<private> nodeVar108 : vec3<f32>;\nvar<private> nodeVar109 : f32;\nvar<private> nodeVar110 : vec3<f32>;\nvar<private> nodeVar111 : vec3<f32>;\nvar<private> nodeVar112 : vec3<f32>;\nvar<private> nodeVar113 : vec3<f32>;\nvar<private> nodeVar114 : vec3<f32>;\nvar<private> nodeVar115 : vec3<f32>;\nvar<private> nodeVar116 : vec3<f32>;\nvar<private> nodeVar117 : f32;\nvar<private> nodeVar118 : f32;\nvar<private> nodeVar119 : f32;\nvar<private> nodeVar120 : vec3<f32>;\nvar<private> nodeVar121 : vec3<f32>;\nvar<private> nodeVar122 : vec3<f32>;\nvar<private> nodeVar123 : vec3<f32>;\nvar<private> nodeVar124 : vec3<f32>;\nvar<private> nodeVar125 : vec3<f32>;\nvar<private> radiance : vec3<f32>;\nvar<private> nodeVar126 : vec3<f32>;\nvar<private> nodeVar127 : vec3<f32>;\nvar<private> nodeVar128 : vec3<f32>;\nvar<private> iblIrradiance : vec3<f32>;\nvar<private> nodeVar129 : vec3<f32>;\nvar<private> nodeVar130 : vec3<f32>;\nvar<private> nodeVar131 : vec3<f32>;\nvar<private> nodeVar132 : vec3<f32>;\nvar<private> nodeVar133 : vec3<f32>;\nvar<private> nodeVar134 : vec3<f32>;\nvar<private> nodeVar135 : vec3<f32>;\nvar<private> nodeVar136 : vec3<f32>;\nvar<private> nodeVar137 : vec3<f32>;\nvar<private> nodeVar138 : vec3<f32>;\nvar<private> indirectSpecular : vec3<f32>;\nvar<private> nodeVar139 : vec3<f32>;\nvar<private> nodeVar140 : vec3<f32>;\nvar<private> ambientOcclusion : f32;\nvar<private> nodeVar141 : vec3<f32>;\nvar<private> nodeVar142 : f32;\nvar<private> nodeVar143 : f32;\nvar<private> nodeVar144 : f32;\nvar<private> nodeVar145 : f32;\nvar<private> nodeVar146 : f32;\nvar<private> nodeVar147 : f32;\nvar<private> nodeVar148 : f32;\nvar<private> nodeVar149 : f32;\nvar<private> nodeVar150 : f32;\nvar<private> nodeVar151 : f32;\nvar<private> nodeVar152 : f32;\nvar<private> nodeVar153 : vec3<f32>;\nvar<private> totalDiffuse : vec3<f32>;\nvar<private> nodeVar154 : vec3<f32>;\nvar<private> totalSpecular : vec3<f32>;\nvar<private> nodeVar155 : vec3<f32>;\nvar<private> outgoingLight : vec3<f32>;\nvar<private> nodeVar156 : vec3<f32>;\nvar<private> nodeVar157 : vec4<f32>;\n\n// codes\nfn V_GGX_SmithCorrelated ( alpha : f32, dotNL : f32, dotNV : f32 ) -> f32 {\n\n\tvar nodeVar0 : f32;\n\n\tnodeVar0 = ( alpha * alpha );\n\n\treturn ( 0.5 / max( ( ( dotNL * sqrt( ( nodeVar0 + ( ( 1.0 - nodeVar0 ) * ( dotNV * dotNV ) ) ) ) ) + ( dotNV * sqrt( ( nodeVar0 + ( ( 1.0 - nodeVar0 ) * ( dotNL * dotNL ) ) ) ) ) ), 0.000001 ) );\n\n}\n\nfn D_GGX ( alpha : f32, dotNH : f32 ) -> f32 {\n\n\tvar nodeVar0 : f32;\n\tvar nodeVar1 : f32;\n\n\tnodeVar0 = ( alpha * alpha );\n\tnodeVar1 = ( 1.0 - ( ( dotNH * dotNH ) * ( 1.0 - nodeVar0 ) ) );\n\n\treturn ( ( nodeVar0 / ( nodeVar1 * nodeVar1 ) ) * 0.3183098861837907 );\n\n}\n\n\n\n@fragment\nfn main( @location( 0 ) v_normalViewGeometry : vec3<f32>,\n\t@location( 1 ) v_positionWorld : vec3<f32>,\n\t@location( 2 ) v_positionViewDirection : vec3<f32> ) -> OutputStruct {\n\n\t// flow\n\t// code\n\n\tDiffuseColor = vec4<f32>( object.nodeUniform0, 1.0 );\n\tDiffuseColor.w = ( DiffuseColor.w * object.nodeUniform1 );\n\tDiffuseColor.w = 1.0;\n\tMetalness = object.nodeUniform2;\n\tnormalViewGeometry = normalize( v_normalViewGeometry );\n\tnodeVar0 = max( abs( dpdx( normalViewGeometry ) ), abs( - dpdy( normalViewGeometry ) ) );\n\tRoughness = min( ( max( object.nodeUniform3, 0.0525 ) + max( max( nodeVar0.x, nodeVar0.y ), nodeVar0.z ) ), 1.0 );\n\tSpecularColor = vec3<f32>( 0.04, 0.04, 0.04 );\n\tSpecularColorBlended = mix( vec3<f32>( 0.04, 0.04, 0.04 ), DiffuseColor.xyz, Metalness );\n\tSpecularF90 = 1.0;\n\tDiffuseContribution = ( DiffuseColor.xyz * vec3<f32>( ( 1.0 - object.nodeUniform2 ) ) );\n\tEmissiveColor = ( object.nodeUniform6 * vec3<f32>( object.nodeUniform7 ) );\n\tNORMAL_normalView = normalViewGeometry;\n\tnormalView = NORMAL_normalView;\n\tnodeVar1 = ( render.nodeUniform9 - render.nodeUniform10 );\n\tnodeVar2 = vec4<f32>( nodeVar1, 0.0 );\n\tnodeVar3 = ( render.cameraViewMatrix * nodeVar2 );\n\tnodeVar4 = normalize( nodeVar3.xyz );\n\tnodeVar5 = nodeVar4;\n\tnodeVar6 = dot( normalView, nodeVar5 );\n\tshadowPositionWorld = v_positionWorld;\n\tnormalWorld = normalize( ( vec4<f32>( normalView, 0.0 ) * render.cameraViewMatrix ).xyz );\n\tnodeVar7 = ( render.nodeUniform13 * vec4<f32>( ( shadowPositionWorld + ( normalWorld * vec3<f32>( render.nodeUniform14 ) ) ), 1.0 ) );\n\tnodeVar8 = ( nodeVar7.xyz / vec3<f32>( nodeVar7.w ) );\n\tnodeVar9 = vec3<f32>( nodeVar8.x, ( 1.0 - nodeVar8.y ), ( nodeVar8.z + render.nodeUniform15 ) );\n\n\tif ( ( ( ( ( ( nodeVar9.x >= 0.0 ) && ( nodeVar9.x <= 1.0 ) ) && ( nodeVar9.y >= 0.0 ) ) && ( nodeVar9.y <= 1.0 ) ) && ( nodeVar9.z <= 1.0 ) ) ) {\n\n\t\tlet nodeConst0 = fract( ( ( nodeVar9.xy * render.nodeUniform16 ) + vec2<f32>( 0.5 ) ) );\n\t\tnodeVar11 = ( nodeVar9.xy - ( ( nodeConst0 - vec2<f32>( 0.5 ) ) * ( vec2<f32>( 1.0, 1.0 ) / render.nodeUniform16 ) ) );\n\t\tnodeVar9.x = nodeVar11[ 0 ];\n\t\tnodeVar9.y = nodeVar11[ 1 ];\n\t\tnodeVar12 = textureGatherCompare( nodeUniform17, nodeUniform17_sampler, nodeVar9.xy, nodeVar9.z, vec2<i32>( -1, 1 ) );\n\t\tlet nodeConst1 = nodeVar12;\n\t\tnodeVar13 = textureGatherCompare( nodeUniform17, nodeUniform17_sampler, nodeVar9.xy, nodeVar9.z, vec2<i32>( 1, 1 ) );\n\t\tlet nodeConst2 = nodeVar13;\n\t\tnodeVar14 = textureGatherCompare( nodeUniform17, nodeUniform17_sampler, nodeVar9.xy, nodeVar9.z, vec2<i32>( -1, -1 ) );\n\t\tlet nodeConst3 = nodeVar14;\n\t\tnodeVar15 = textureGatherCompare( nodeUniform17, nodeUniform17_sampler, nodeVar9.xy, nodeVar9.z, vec2<i32>( 1, -1 ) );\n\t\tlet nodeConst4 = nodeVar15;\n\t\tnodeVar10 = ( ( ( ( ( ( ( mix( nodeConst1.x, nodeConst2.y, nodeConst0.x ) + nodeConst1.y ) + nodeConst2.x ) * nodeConst0.y ) + ( ( mix( nodeConst1.w, nodeConst2.z, nodeConst0.x ) + nodeConst1.z ) + nodeConst2.w ) ) + ( ( mix( nodeConst3.x, nodeConst4.y, nodeConst0.x ) + nodeConst3.y ) + nodeConst4.x ) ) + ( ( ( mix( nodeConst3.w, nodeConst4.z, nodeConst0.x ) + nodeConst3.z ) + nodeConst4.w ) * ( 1.0 - nodeConst0.y ) ) ) * 0.1111111111111111 );\n\n\t} else {\n\n\t\tnodeVar10 = 1.0;\n\n\t}\n\n\tnodeVar16 = mix( 1.0, nodeVar10, render.nodeUniform18 );\n\tnodeVar17 = ( render.nodeUniform11 * vec3<f32>( nodeVar16 ) );\n\tnodeVar18 = ( vec3<f32>( clamp( nodeVar6, 0.0, 1.0 ) ) * nodeVar17 );\n\tnodeVar19 = nodeVar18;\n\tdirectDiffuse = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar20 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar21 = ( nodeVar19 * nodeVar20 );\n\tnodeVar22 = ( directDiffuse + nodeVar21 );\n\tdirectDiffuse = nodeVar22;\n\tdirectSpecular = vec3<f32>( 0.0, 0.0, 0.0 );\n\tpositionViewDirection = normalize( v_positionViewDirection );\n\tnodeVar23 = normalize( ( nodeVar5 + positionViewDirection ) );\n\tnodeVar24 = clamp( dot( positionViewDirection, nodeVar23 ), 0.0, 1.0 );\n\tnodeVar25 = exp2( ( ( ( nodeVar24 * -5.55473 ) - 6.98316 ) * nodeVar24 ) );\n\tnodeVar26 = ( Roughness * Roughness );\n\tnodeVar27 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) );\n\tnodeVar28 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( dot( normalView, nodeVar5 ), 0.0, 1.0 ) ) );\n\tnodeVar29 = ( SpecularColorBlended + ( ( vec3<f32>( 1.0 ) - SpecularColorBlended ) * vec3<f32>( 0.047619 ) ) );\n\tnodeVar30 = ( 1.0 - ( nodeVar27.xy.x + nodeVar27.xy.y ) );\n\tnodeVar31 = ( 1.0 - ( nodeVar28.xy.x + nodeVar28.xy.y ) );\n\tnodeVar32 = ( ( ( ( ( SpecularColorBlended * vec3<f32>( ( 1.0 - nodeVar25 ) ) ) + vec3<f32>( ( 1.0 * nodeVar25 ) ) ) * vec3<f32>( V_GGX_SmithCorrelated( nodeVar26, clamp( dot( normalView, nodeVar5 ), 0.0, 1.0 ), clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) ) ) * vec3<f32>( D_GGX( nodeVar26, clamp( dot( normalView, nodeVar23 ), 0.0, 1.0 ) ) ) ) + ( ( ( ( ( ( SpecularColorBlended * vec3<f32>( nodeVar27.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar27.xy.y ) ) ) * ( ( SpecularColorBlended * vec3<f32>( nodeVar28.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar28.xy.y ) ) ) ) * nodeVar29 ) / ( ( vec3<f32>( 1.0 ) - ( ( vec3<f32>( ( nodeVar30 * nodeVar31 ) ) * nodeVar29 ) * nodeVar29 ) ) + vec3<f32>( 0.000001 ) ) ) * vec3<f32>( ( nodeVar30 * nodeVar31 ) ) ) );\n\tnodeVar33 = ( nodeVar19 * nodeVar32 );\n\tnodeVar34 = ( directSpecular + nodeVar33 );\n\tdirectSpecular = nodeVar34;\n\tnodeVar35 = ( render.nodeUniform20 - render.nodeUniform21 );\n\tnodeVar36 = vec4<f32>( nodeVar35, 0.0 );\n\tnodeVar37 = ( render.cameraViewMatrix * nodeVar36 );\n\tnodeVar38 = normalize( nodeVar37.xyz );\n\tnodeVar39 = nodeVar38;\n\tnodeVar40 = dot( normalView, nodeVar39 );\n\tnodeVar41 = ( vec3<f32>( clamp( nodeVar40, 0.0, 1.0 ) ) * render.nodeUniform22 );\n\tnodeVar42 = nodeVar41;\n\tnodeVar43 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar44 = ( nodeVar42 * nodeVar43 );\n\tnodeVar45 = ( directDiffuse + nodeVar44 );\n\tdirectDiffuse = nodeVar45;\n\tnodeVar46 = normalize( ( nodeVar39 + positionViewDirection ) );\n\tnodeVar47 = clamp( dot( positionViewDirection, nodeVar46 ), 0.0, 1.0 );\n\tnodeVar48 = exp2( ( ( ( nodeVar47 * -5.55473 ) - 6.98316 ) * nodeVar47 ) );\n\tnodeVar49 = ( Roughness * Roughness );\n\tnodeVar50 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) );\n\tnodeVar51 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( dot( normalView, nodeVar39 ), 0.0, 1.0 ) ) );\n\tnodeVar52 = ( SpecularColorBlended + ( ( vec3<f32>( 1.0 ) - SpecularColorBlended ) * vec3<f32>( 0.047619 ) ) );\n\tnodeVar53 = ( 1.0 - ( nodeVar50.xy.x + nodeVar50.xy.y ) );\n\tnodeVar54 = ( 1.0 - ( nodeVar51.xy.x + nodeVar51.xy.y ) );\n\tnodeVar55 = ( ( ( ( ( SpecularColorBlended * vec3<f32>( ( 1.0 - nodeVar48 ) ) ) + vec3<f32>( ( 1.0 * nodeVar48 ) ) ) * vec3<f32>( V_GGX_SmithCorrelated( nodeVar49, clamp( dot( normalView, nodeVar39 ), 0.0, 1.0 ), clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) ) ) * vec3<f32>( D_GGX( nodeVar49, clamp( dot( normalView, nodeVar46 ), 0.0, 1.0 ) ) ) ) + ( ( ( ( ( ( SpecularColorBlended * vec3<f32>( nodeVar50.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar50.xy.y ) ) ) * ( ( SpecularColorBlended * vec3<f32>( nodeVar51.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar51.xy.y ) ) ) ) * nodeVar52 ) / ( ( vec3<f32>( 1.0 ) - ( ( vec3<f32>( ( nodeVar53 * nodeVar54 ) ) * nodeVar52 ) * nodeVar52 ) ) + vec3<f32>( 0.000001 ) ) ) * vec3<f32>( ( nodeVar53 * nodeVar54 ) ) ) );\n\tnodeVar56 = ( nodeVar42 * nodeVar55 );\n\tnodeVar57 = ( directSpecular + nodeVar56 );\n\tdirectSpecular = nodeVar57;\n\tnodeVar58 = ( render.nodeUniform23 - render.nodeUniform24 );\n\tnodeVar59 = vec4<f32>( nodeVar58, 0.0 );\n\tnodeVar60 = ( render.cameraViewMatrix * nodeVar59 );\n\tnodeVar61 = normalize( nodeVar60.xyz );\n\tnodeVar62 = nodeVar61;\n\tnodeVar63 = dot( normalView, nodeVar62 );\n\tnodeVar64 = ( vec3<f32>( clamp( nodeVar63, 0.0, 1.0 ) ) * render.nodeUniform25 );\n\tnodeVar65 = nodeVar64;\n\tnodeVar66 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar67 = ( nodeVar65 * nodeVar66 );\n\tnodeVar68 = ( directDiffuse + nodeVar67 );\n\tdirectDiffuse = nodeVar68;\n\tnodeVar69 = normalize( ( nodeVar62 + positionViewDirection ) );\n\tnodeVar70 = clamp( dot( positionViewDirection, nodeVar69 ), 0.0, 1.0 );\n\tnodeVar71 = exp2( ( ( ( nodeVar70 * -5.55473 ) - 6.98316 ) * nodeVar70 ) );\n\tnodeVar72 = ( Roughness * Roughness );\n\tnodeVar73 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) );\n\tnodeVar74 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( dot( normalView, nodeVar62 ), 0.0, 1.0 ) ) );\n\tnodeVar75 = ( SpecularColorBlended + ( ( vec3<f32>( 1.0 ) - SpecularColorBlended ) * vec3<f32>( 0.047619 ) ) );\n\tnodeVar76 = ( 1.0 - ( nodeVar73.xy.x + nodeVar73.xy.y ) );\n\tnodeVar77 = ( 1.0 - ( nodeVar74.xy.x + nodeVar74.xy.y ) );\n\tnodeVar78 = ( ( ( ( ( SpecularColorBlended * vec3<f32>( ( 1.0 - nodeVar71 ) ) ) + vec3<f32>( ( 1.0 * nodeVar71 ) ) ) * vec3<f32>( V_GGX_SmithCorrelated( nodeVar72, clamp( dot( normalView, nodeVar62 ), 0.0, 1.0 ), clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) ) ) * vec3<f32>( D_GGX( nodeVar72, clamp( dot( normalView, nodeVar69 ), 0.0, 1.0 ) ) ) ) + ( ( ( ( ( ( SpecularColorBlended * vec3<f32>( nodeVar73.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar73.xy.y ) ) ) * ( ( SpecularColorBlended * vec3<f32>( nodeVar74.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar74.xy.y ) ) ) ) * nodeVar75 ) / ( ( vec3<f32>( 1.0 ) - ( ( vec3<f32>( ( nodeVar76 * nodeVar77 ) ) * nodeVar75 ) * nodeVar75 ) ) + vec3<f32>( 0.000001 ) ) ) * vec3<f32>( ( nodeVar76 * nodeVar77 ) ) ) );\n\tnodeVar79 = ( nodeVar65 * nodeVar78 );\n\tnodeVar80 = ( directSpecular + nodeVar79 );\n\tdirectSpecular = nodeVar80;\n\tirradiance = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar81 = ( irradiance + render.nodeUniform26 );\n\tirradiance = nodeVar81;\n\tnodeVar82 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar83 = ( irradiance * nodeVar82 );\n\tnodeVar84 = nodeVar83;\n\tindirectDiffuse = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar85 = ( indirectDiffuse + nodeVar84 );\n\tindirectDiffuse = nodeVar85;\n\tsingleScatteringDielectric = vec3<f32>( 0.0, 0.0, 0.0 );\n\tmultiScatteringDielectric = vec3<f32>( 0.0, 0.0, 0.0 );\n\tsingleScatteringMetallic = vec3<f32>( 0.0, 0.0, 0.0 );\n\tmultiScatteringMetallic = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar86 = dot( normalView, positionViewDirection );\n\tnodeVar87 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( nodeVar86, 0.0, 1.0 ) ) );\n\tnodeVar88 = ( SpecularColor * vec3<f32>( nodeVar87.xy.x ) );\n\tnodeVar89 = ( SpecularF90 * nodeVar87.xy.y );\n\tnodeVar90 = ( nodeVar88 + vec3<f32>( nodeVar89 ) );\n\tnodeVar91 = ( singleScatteringDielectric + nodeVar90 );\n\tsingleScatteringDielectric = nodeVar91;\n\tnodeVar92 = ( vec3<f32>( 1.0 ) - SpecularColor );\n\tnodeVar93 = nodeVar92;\n\tnodeVar94 = ( nodeVar93 * vec3<f32>( 0.047619 ) );\n\tnodeVar95 = ( SpecularColor + nodeVar94 );\n\tnodeVar96 = ( nodeVar90 * nodeVar95 );\n\tnodeVar97 = ( nodeVar87.xy.x + nodeVar87.xy.y );\n\tnodeVar98 = ( 1.0 - nodeVar97 );\n\tnodeVar99 = nodeVar98;\n\tnodeVar100 = ( vec3<f32>( nodeVar99 ) * nodeVar95 );\n\tnodeVar101 = ( vec3<f32>( 1.0 ) - nodeVar100 );\n\tnodeVar102 = nodeVar101;\n\tnodeVar103 = ( nodeVar96 / nodeVar102 );\n\tnodeVar104 = ( nodeVar103 * vec3<f32>( nodeVar99 ) );\n\tnodeVar105 = ( multiScatteringDielectric + nodeVar104 );\n\tmultiScatteringDielectric = nodeVar105;\n\tnodeVar106 = dot( normalView, positionViewDirection );\n\tnodeVar107 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( nodeVar106, 0.0, 1.0 ) ) );\n\tnodeVar108 = ( DiffuseColor.xyz * vec3<f32>( nodeVar107.xy.x ) );\n\tnodeVar109 = ( SpecularF90 * nodeVar107.xy.y );\n\tnodeVar110 = ( nodeVar108 + vec3<f32>( nodeVar109 ) );\n\tnodeVar111 = ( singleScatteringMetallic + nodeVar110 );\n\tsingleScatteringMetallic = nodeVar111;\n\tnodeVar112 = ( vec3<f32>( 1.0 ) - DiffuseColor.xyz );\n\tnodeVar113 = nodeVar112;\n\tnodeVar114 = ( nodeVar113 * vec3<f32>( 0.047619 ) );\n\tnodeVar115 = ( DiffuseColor.xyz + nodeVar114 );\n\tnodeVar116 = ( nodeVar110 * nodeVar115 );\n\tnodeVar117 = ( nodeVar107.xy.x + nodeVar107.xy.y );\n\tnodeVar118 = ( 1.0 - nodeVar117 );\n\tnodeVar119 = nodeVar118;\n\tnodeVar120 = ( vec3<f32>( nodeVar119 ) * nodeVar115 );\n\tnodeVar121 = ( vec3<f32>( 1.0 ) - nodeVar120 );\n\tnodeVar122 = nodeVar121;\n\tnodeVar123 = ( nodeVar116 / nodeVar122 );\n\tnodeVar124 = ( nodeVar123 * vec3<f32>( nodeVar119 ) );\n\tnodeVar125 = ( multiScatteringMetallic + nodeVar124 );\n\tmultiScatteringMetallic = nodeVar125;\n\tradiance = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar126 = mix( singleScatteringDielectric, singleScatteringMetallic, Metalness );\n\tnodeVar127 = ( radiance * nodeVar126 );\n\tnodeVar128 = mix( multiScatteringDielectric, multiScatteringMetallic, Metalness );\n\tiblIrradiance = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar129 = ( iblIrradiance * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar130 = ( nodeVar128 * nodeVar129 );\n\tnodeVar131 = ( nodeVar127 + nodeVar130 );\n\tnodeVar132 = nodeVar131;\n\tnodeVar133 = ( singleScatteringDielectric + multiScatteringDielectric );\n\tnodeVar134 = ( vec3<f32>( 1.0 ) - nodeVar133 );\n\tnodeVar135 = nodeVar134;\n\tnodeVar136 = ( DiffuseContribution * nodeVar135 );\n\tnodeVar137 = ( nodeVar136 * nodeVar129 );\n\tnodeVar138 = nodeVar137;\n\tindirectSpecular = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar139 = ( indirectSpecular + nodeVar132 );\n\tindirectSpecular = nodeVar139;\n\tnodeVar140 = ( indirectDiffuse + nodeVar138 );\n\tindirectDiffuse = nodeVar140;\n\tambientOcclusion = 1.0;\n\tnodeVar141 = ( indirectDiffuse * vec3<f32>( ambientOcclusion ) );\n\tindirectDiffuse = nodeVar141;\n\tnodeVar142 = dot( normalView, positionViewDirection );\n\tnodeVar143 = ( clamp( nodeVar142, 0.0, 1.0 ) + ambientOcclusion );\n\tnodeVar144 = ( Roughness * -16.0 );\n\tnodeVar145 = ( 1.0 - nodeVar144 );\n\tnodeVar146 = nodeVar145;\n\tnodeVar147 = ( - nodeVar146 );\n\tnodeVar148 = exp2( nodeVar147 );\n\tnodeVar149 = pow( nodeVar143, nodeVar148 );\n\tnodeVar150 = ( 1.0 - nodeVar149 );\n\tnodeVar151 = nodeVar150;\n\tnodeVar152 = ( ambientOcclusion - nodeVar151 );\n\tnodeVar153 = ( indirectSpecular * vec3<f32>( clamp( nodeVar152, 0.0, 1.0 ) ) );\n\tindirectSpecular = nodeVar153;\n\tnodeVar154 = ( directDiffuse + indirectDiffuse );\n\ttotalDiffuse = nodeVar154;\n\tnodeVar155 = ( directSpecular + indirectSpecular );\n\ttotalSpecular = nodeVar155;\n\tnodeVar156 = ( totalDiffuse + totalSpecular );\n\toutgoingLight = nodeVar156;\n\tnodeVar157 = max( vec4<f32>( ( outgoingLight + EmissiveColor ), DiffuseColor.w ), vec4<f32>( 0.0 ) );\n\tOutput = nodeVar157;\n\n\t// result\n\n\toutput.color = nodeVar157;\n\n\treturn output;\n\n}\n"],
761
+ "modules": ["// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct renderStruct {\n\tcameraProjectionMatrix : mat4x4<f32>,\n\tcameraViewMatrix : mat4x4<f32>\n};\n@binding( 0 ) @group( 0 )\nvar<uniform> render : renderStruct;\n\nstruct objectStruct {\n\tnodeUniform1 : vec2<f32>,\n\tnodeUniform4 : mat4x4<f32>\n};\n@binding( 2 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> modelViewMatrix : mat4x4<f32>;\nvar<private> VERTEX_nodeVar2 : vec4<f32>;\nvar<private> v_modelViewProjection : vec4<f32>;\nvar<private> v_positionView : vec3<f32>;\nvar<private> positionLocal : vec3<f32>;\nvar<private> VERTEX_v_modelViewProjection : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tmodelViewMatrix = ( render.cameraViewMatrix * object.nodeUniform4 );\n\tpositionLocal = position;\n\tv_positionView = ( modelViewMatrix * vec4<f32>( positionLocal, 1.0 ) ).xyz;\n\tVERTEX_nodeVar2 = ( render.cameraProjectionMatrix * vec4<f32>( v_positionView, 1.0 ) );\n\tVERTEX_v_modelViewProjection = VERTEX_nodeVar2;\n\n\t// result\n\n\tvaryings.builtinClipSpace = VERTEX_v_modelViewProjection;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// global\ndiagnostic( off, derivative_uniformity );\n\n\n// structs\n\nstruct OutputStruct {\n\t@location( 0 ) color: vec4<f32>\n};\nvar<private> output : OutputStruct;\n\n// uniforms\n@binding( 0 ) @group( 1 ) var nodeUniform0_sampler : sampler;\n@binding( 1 ) @group( 1 ) var nodeUniform0 : texture_2d<f32>;\n\nstruct objectStruct {\n\tnodeUniform1 : vec2<f32>,\n\tnodeUniform4 : mat4x4<f32>\n};\n@binding( 2 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// vars\nvar<private> nodeVar0 : vec4<f32>;\nvar<private> nodeVar1 : vec4<f32>;\n\n// codes\nfn fn1 ( color : vec4<f32> ) -> vec4<f32> {\n\n\tvar nodeVar0 : vec4<f32>;\n\n\n\tif ( ( color.w == 0.0 ) ) {\n\n\t\tnodeVar0 = vec4<f32>( 0.0, 0.0, 0.0, 0.0 );\n\n\t} else {\n\n\t\tnodeVar0 = vec4<f32>( ( color.xyz / vec3<f32>( color.w ) ), color.w );\n\n\t}\n\n\n\treturn nodeVar0;\n\n}\n\nfn sRGBTransferOETF ( color : vec3<f32> ) -> vec3<f32> {\n\n\t\n\n\n\treturn mix( ( ( pow( color, vec3<f32>( 0.41666 ) ) * vec3<f32>( 1.055 ) ) - vec3<f32>( 0.055 ) ), ( color * vec3<f32>( 12.92 ) ), vec3<f32>( ( color <= vec3<f32>( 0.0031308 ) ) ) );\n\n}\n\nfn fn0 ( color : vec4<f32> ) -> vec4<f32> {\n\n\t\n\n\n\treturn vec4<f32>( ( color.xyz * vec3<f32>( color.w ) ), color.w );\n\n}\n\n\n\n@fragment\nfn main( @builtin( position ) fragCoord : vec4<f32> ) -> OutputStruct {\n\n\t// flow\n\t// code\n\n\tnodeVar0 = textureSample( nodeUniform0, nodeUniform0_sampler, ( fragCoord.xy / object.nodeUniform1 ) );\n\tnodeVar1 = fn1( vec4<f32>( nodeVar0.xyz, clamp( nodeVar0.w, 0.0, 1.0 ) ) );\n\n\t// result\n\n\toutput.color = fn0( vec4<f32>( sRGBTransferOETF( nodeVar1.xyz ), nodeVar1.w ) );\n\n\treturn output;\n\n}\n","// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct renderStruct {\n\tcameraProjectionMatrix : mat4x4<f32>,\n\tcameraViewMatrix : mat4x4<f32>\n};\n@binding( 0 ) @group( 0 )\nvar<uniform> render : renderStruct;\n\nstruct objectStruct {\n\tnodeUniform0 : f32,\n\tnodeUniform3 : mat4x4<f32>\n};\n@binding( 0 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> modelViewMatrix : mat4x4<f32>;\nvar<private> VERTEX_nodeVar1 : vec4<f32>;\nvar<private> v_modelViewProjection : vec4<f32>;\nvar<private> v_positionView : vec3<f32>;\nvar<private> positionLocal : vec3<f32>;\nvar<private> VERTEX_v_modelViewProjection : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tmodelViewMatrix = ( render.cameraViewMatrix * object.nodeUniform3 );\n\tpositionLocal = position;\n\tv_positionView = ( modelViewMatrix * vec4<f32>( positionLocal, 1.0 ) ).xyz;\n\tVERTEX_nodeVar1 = ( render.cameraProjectionMatrix * vec4<f32>( v_positionView, 1.0 ) );\n\tVERTEX_v_modelViewProjection = VERTEX_nodeVar1;\n\n\t// result\n\n\tvaryings.builtinClipSpace = VERTEX_v_modelViewProjection;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// global\ndiagnostic( off, derivative_uniformity );\n\n\n// structs\n\nstruct OutputStruct {\n\t@location( 0 ) color: vec4<f32>\n};\nvar<private> output : OutputStruct;\n\n// uniforms\n\nstruct objectStruct {\n\tnodeUniform0 : f32,\n\tnodeUniform3 : mat4x4<f32>\n};\n@binding( 0 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// vars\nvar<private> DiffuseColor : vec4<f32>;\nvar<private> Output : vec4<f32>;\nvar<private> nodeVar0 : vec4<f32>;\n\n// codes\n\n\n@fragment\nfn main( ) -> OutputStruct {\n\n\t// flow\n\t// code\n\n\tDiffuseColor = vec4<f32>( 0.0, 0.0, 0.0, 1.0 );\n\tDiffuseColor.w = ( DiffuseColor.w * object.nodeUniform0 );\n\tnodeVar0 = max( vec4<f32>( DiffuseColor.xyz, DiffuseColor.w ), vec4<f32>( 0.0 ) );\n\tOutput = nodeVar0;\n\n\t// result\n\n\toutput.color = nodeVar0;\n\n\treturn output;\n\n}\n","// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct renderStruct {\n\tcameraProjectionMatrix : mat4x4<f32>,\n\tcameraViewMatrix : mat4x4<f32>,\n\tnodeUniform11 : vec3<f32>,\n\tnodeUniform16 : vec3<f32>,\n\tnodeUniform19 : vec3<f32>,\n\tnodeUniform20 : vec3<f32>,\n\tnodeUniform9 : vec3<f32>,\n\tnodeUniform10 : vec3<f32>,\n\tnodeUniform14 : vec3<f32>,\n\tnodeUniform15 : vec3<f32>,\n\tnodeUniform17 : vec3<f32>,\n\tnodeUniform18 : vec3<f32>\n};\n@binding( 0 ) @group( 0 )\nvar<uniform> render : renderStruct;\n\nstruct objectStruct {\n\tnodeUniform0 : vec3<f32>,\n\tnodeUniform1 : f32,\n\tnodeUniform2 : f32,\n\tnodeUniform3 : f32,\n\tnodeUniform5 : mat3x3<f32>,\n\tnodeUniform6 : vec3<f32>,\n\tnodeUniform7 : f32,\n\tnodeUniform12 : mat4x4<f32>\n};\n@binding( 0 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@location( 0 ) v_normalViewGeometry : vec3<f32>,\n\t@location( 1 ) v_positionViewDirection : vec3<f32>,\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> normalLocal : vec3<f32>;\nvar<private> modelViewMatrix : mat4x4<f32>;\nvar<private> VERTEX_nodeVar147 : vec4<f32>;\nvar<private> v_modelViewProjection : vec4<f32>;\nvar<private> v_positionView : vec3<f32>;\nvar<private> positionLocal : vec3<f32>;\nvar<private> VERTEX_v_modelViewProjection : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) normal : vec3<f32>,\n\t@location( 1 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tnormalLocal = normal;\n\tvaryings.v_normalViewGeometry = normalize( ( render.cameraViewMatrix * vec4<f32>( ( object.nodeUniform5 * normalLocal ), 0.0 ) ).xyz );\n\tmodelViewMatrix = ( render.cameraViewMatrix * object.nodeUniform12 );\n\tpositionLocal = position;\n\tv_positionView = ( modelViewMatrix * vec4<f32>( positionLocal, 1.0 ) ).xyz;\n\tvaryings.v_positionViewDirection = ( - v_positionView );\n\tVERTEX_nodeVar147 = ( render.cameraProjectionMatrix * vec4<f32>( v_positionView, 1.0 ) );\n\tVERTEX_v_modelViewProjection = VERTEX_nodeVar147;\n\n\t// result\n\n\tvaryings.builtinClipSpace = VERTEX_v_modelViewProjection;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// global\ndiagnostic( off, derivative_uniformity );\n\n\n// structs\n\nstruct OutputStruct {\n\t@location( 0 ) color: vec4<f32>\n};\nvar<private> output : OutputStruct;\n\n// uniforms\n@binding( 1 ) @group( 1 ) var nodeUniform13_sampler : sampler;\n@binding( 2 ) @group( 1 ) var nodeUniform13 : texture_2d<f32>;\n\nstruct objectStruct {\n\tnodeUniform0 : vec3<f32>,\n\tnodeUniform1 : f32,\n\tnodeUniform2 : f32,\n\tnodeUniform3 : f32,\n\tnodeUniform5 : mat3x3<f32>,\n\tnodeUniform6 : vec3<f32>,\n\tnodeUniform7 : f32,\n\tnodeUniform12 : mat4x4<f32>\n};\n@binding( 0 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\nstruct renderStruct {\n\tcameraProjectionMatrix : mat4x4<f32>,\n\tcameraViewMatrix : mat4x4<f32>,\n\tnodeUniform11 : vec3<f32>,\n\tnodeUniform16 : vec3<f32>,\n\tnodeUniform19 : vec3<f32>,\n\tnodeUniform20 : vec3<f32>,\n\tnodeUniform9 : vec3<f32>,\n\tnodeUniform10 : vec3<f32>,\n\tnodeUniform14 : vec3<f32>,\n\tnodeUniform15 : vec3<f32>,\n\tnodeUniform17 : vec3<f32>,\n\tnodeUniform18 : vec3<f32>\n};\n@binding( 0 ) @group( 0 )\nvar<uniform> render : renderStruct;\n\n// vars\nvar<private> DiffuseColor : vec4<f32>;\nvar<private> Metalness : f32;\nvar<private> Roughness : f32;\nvar<private> normalViewGeometry : vec3<f32>;\nvar<private> nodeVar0 : vec3<f32>;\nvar<private> SpecularColor : vec3<f32>;\nvar<private> SpecularColorBlended : vec3<f32>;\nvar<private> SpecularF90 : f32;\nvar<private> DiffuseContribution : vec3<f32>;\nvar<private> EmissiveColor : vec3<f32>;\nvar<private> Output : vec4<f32>;\nvar<private> NORMAL_normalView : vec3<f32>;\nvar<private> normalView : vec3<f32>;\nvar<private> nodeVar1 : vec3<f32>;\nvar<private> nodeVar2 : vec4<f32>;\nvar<private> nodeVar3 : vec4<f32>;\nvar<private> nodeVar4 : vec3<f32>;\nvar<private> nodeVar5 : vec3<f32>;\nvar<private> nodeVar6 : f32;\nvar<private> nodeVar7 : vec3<f32>;\nvar<private> nodeVar8 : vec3<f32>;\nvar<private> directDiffuse : vec3<f32>;\nvar<private> nodeVar9 : vec3<f32>;\nvar<private> nodeVar10 : vec3<f32>;\nvar<private> nodeVar11 : vec3<f32>;\nvar<private> directSpecular : vec3<f32>;\nvar<private> positionViewDirection : vec3<f32>;\nvar<private> nodeVar12 : vec3<f32>;\nvar<private> nodeVar13 : f32;\nvar<private> nodeVar14 : f32;\nvar<private> nodeVar15 : f32;\nvar<private> nodeVar16 : vec4<f32>;\nvar<private> nodeVar17 : vec4<f32>;\nvar<private> nodeVar18 : vec3<f32>;\nvar<private> nodeVar19 : f32;\nvar<private> nodeVar20 : f32;\nvar<private> nodeVar21 : vec3<f32>;\nvar<private> nodeVar22 : vec3<f32>;\nvar<private> nodeVar23 : vec3<f32>;\nvar<private> nodeVar24 : vec3<f32>;\nvar<private> nodeVar25 : vec4<f32>;\nvar<private> nodeVar26 : vec4<f32>;\nvar<private> nodeVar27 : vec3<f32>;\nvar<private> nodeVar28 : vec3<f32>;\nvar<private> nodeVar29 : f32;\nvar<private> nodeVar30 : vec3<f32>;\nvar<private> nodeVar31 : vec3<f32>;\nvar<private> nodeVar32 : vec3<f32>;\nvar<private> nodeVar33 : vec3<f32>;\nvar<private> nodeVar34 : vec3<f32>;\nvar<private> nodeVar35 : vec3<f32>;\nvar<private> nodeVar36 : f32;\nvar<private> nodeVar37 : f32;\nvar<private> nodeVar38 : f32;\nvar<private> nodeVar39 : vec4<f32>;\nvar<private> nodeVar40 : vec4<f32>;\nvar<private> nodeVar41 : vec3<f32>;\nvar<private> nodeVar42 : f32;\nvar<private> nodeVar43 : f32;\nvar<private> nodeVar44 : vec3<f32>;\nvar<private> nodeVar45 : vec3<f32>;\nvar<private> nodeVar46 : vec3<f32>;\nvar<private> nodeVar47 : vec3<f32>;\nvar<private> nodeVar48 : vec4<f32>;\nvar<private> nodeVar49 : vec4<f32>;\nvar<private> nodeVar50 : vec3<f32>;\nvar<private> nodeVar51 : vec3<f32>;\nvar<private> nodeVar52 : f32;\nvar<private> nodeVar53 : vec3<f32>;\nvar<private> nodeVar54 : vec3<f32>;\nvar<private> nodeVar55 : vec3<f32>;\nvar<private> nodeVar56 : vec3<f32>;\nvar<private> nodeVar57 : vec3<f32>;\nvar<private> nodeVar58 : vec3<f32>;\nvar<private> nodeVar59 : f32;\nvar<private> nodeVar60 : f32;\nvar<private> nodeVar61 : f32;\nvar<private> nodeVar62 : vec4<f32>;\nvar<private> nodeVar63 : vec4<f32>;\nvar<private> nodeVar64 : vec3<f32>;\nvar<private> nodeVar65 : f32;\nvar<private> nodeVar66 : f32;\nvar<private> nodeVar67 : vec3<f32>;\nvar<private> nodeVar68 : vec3<f32>;\nvar<private> nodeVar69 : vec3<f32>;\nvar<private> irradiance : vec3<f32>;\nvar<private> nodeVar70 : vec3<f32>;\nvar<private> nodeVar71 : vec3<f32>;\nvar<private> nodeVar72 : vec3<f32>;\nvar<private> nodeVar73 : vec3<f32>;\nvar<private> indirectDiffuse : vec3<f32>;\nvar<private> nodeVar74 : vec3<f32>;\nvar<private> singleScatteringDielectric : vec3<f32>;\nvar<private> multiScatteringDielectric : vec3<f32>;\nvar<private> singleScatteringMetallic : vec3<f32>;\nvar<private> multiScatteringMetallic : vec3<f32>;\nvar<private> nodeVar75 : f32;\nvar<private> nodeVar76 : vec4<f32>;\nvar<private> nodeVar77 : vec3<f32>;\nvar<private> nodeVar78 : f32;\nvar<private> nodeVar79 : vec3<f32>;\nvar<private> nodeVar80 : vec3<f32>;\nvar<private> nodeVar81 : vec3<f32>;\nvar<private> nodeVar82 : vec3<f32>;\nvar<private> nodeVar83 : vec3<f32>;\nvar<private> nodeVar84 : vec3<f32>;\nvar<private> nodeVar85 : vec3<f32>;\nvar<private> nodeVar86 : f32;\nvar<private> nodeVar87 : f32;\nvar<private> nodeVar88 : f32;\nvar<private> nodeVar89 : vec3<f32>;\nvar<private> nodeVar90 : vec3<f32>;\nvar<private> nodeVar91 : vec3<f32>;\nvar<private> nodeVar92 : vec3<f32>;\nvar<private> nodeVar93 : vec3<f32>;\nvar<private> nodeVar94 : vec3<f32>;\nvar<private> nodeVar95 : f32;\nvar<private> nodeVar96 : vec4<f32>;\nvar<private> nodeVar97 : vec3<f32>;\nvar<private> nodeVar98 : f32;\nvar<private> nodeVar99 : vec3<f32>;\nvar<private> nodeVar100 : vec3<f32>;\nvar<private> nodeVar101 : vec3<f32>;\nvar<private> nodeVar102 : vec3<f32>;\nvar<private> nodeVar103 : vec3<f32>;\nvar<private> nodeVar104 : vec3<f32>;\nvar<private> nodeVar105 : vec3<f32>;\nvar<private> nodeVar106 : f32;\nvar<private> nodeVar107 : f32;\nvar<private> nodeVar108 : f32;\nvar<private> nodeVar109 : vec3<f32>;\nvar<private> nodeVar110 : vec3<f32>;\nvar<private> nodeVar111 : vec3<f32>;\nvar<private> nodeVar112 : vec3<f32>;\nvar<private> nodeVar113 : vec3<f32>;\nvar<private> nodeVar114 : vec3<f32>;\nvar<private> radiance : vec3<f32>;\nvar<private> nodeVar115 : vec3<f32>;\nvar<private> nodeVar116 : vec3<f32>;\nvar<private> nodeVar117 : vec3<f32>;\nvar<private> iblIrradiance : vec3<f32>;\nvar<private> nodeVar118 : vec3<f32>;\nvar<private> nodeVar119 : vec3<f32>;\nvar<private> nodeVar120 : vec3<f32>;\nvar<private> nodeVar121 : vec3<f32>;\nvar<private> nodeVar122 : vec3<f32>;\nvar<private> nodeVar123 : vec3<f32>;\nvar<private> nodeVar124 : vec3<f32>;\nvar<private> nodeVar125 : vec3<f32>;\nvar<private> nodeVar126 : vec3<f32>;\nvar<private> nodeVar127 : vec3<f32>;\nvar<private> indirectSpecular : vec3<f32>;\nvar<private> nodeVar128 : vec3<f32>;\nvar<private> nodeVar129 : vec3<f32>;\nvar<private> ambientOcclusion : f32;\nvar<private> nodeVar130 : vec3<f32>;\nvar<private> nodeVar131 : f32;\nvar<private> nodeVar132 : f32;\nvar<private> nodeVar133 : f32;\nvar<private> nodeVar134 : f32;\nvar<private> nodeVar135 : f32;\nvar<private> nodeVar136 : f32;\nvar<private> nodeVar137 : f32;\nvar<private> nodeVar138 : f32;\nvar<private> nodeVar139 : f32;\nvar<private> nodeVar140 : f32;\nvar<private> nodeVar141 : f32;\nvar<private> nodeVar142 : vec3<f32>;\nvar<private> totalDiffuse : vec3<f32>;\nvar<private> nodeVar143 : vec3<f32>;\nvar<private> totalSpecular : vec3<f32>;\nvar<private> nodeVar144 : vec3<f32>;\nvar<private> outgoingLight : vec3<f32>;\nvar<private> nodeVar145 : vec3<f32>;\nvar<private> nodeVar146 : vec4<f32>;\n\n// codes\nfn V_GGX_SmithCorrelated ( alpha : f32, dotNL : f32, dotNV : f32 ) -> f32 {\n\n\tvar nodeVar0 : f32;\n\n\tnodeVar0 = ( alpha * alpha );\n\n\treturn ( 0.5 / max( ( ( dotNL * sqrt( ( nodeVar0 + ( ( 1.0 - nodeVar0 ) * ( dotNV * dotNV ) ) ) ) ) + ( dotNV * sqrt( ( nodeVar0 + ( ( 1.0 - nodeVar0 ) * ( dotNL * dotNL ) ) ) ) ) ), 0.000001 ) );\n\n}\n\nfn D_GGX ( alpha : f32, dotNH : f32 ) -> f32 {\n\n\tvar nodeVar0 : f32;\n\tvar nodeVar1 : f32;\n\n\tnodeVar0 = ( alpha * alpha );\n\tnodeVar1 = ( 1.0 - ( ( dotNH * dotNH ) * ( 1.0 - nodeVar0 ) ) );\n\n\treturn ( ( nodeVar0 / ( nodeVar1 * nodeVar1 ) ) * 0.3183098861837907 );\n\n}\n\n\n\n@fragment\nfn main( @location( 0 ) v_normalViewGeometry : vec3<f32>,\n\t@location( 1 ) v_positionViewDirection : vec3<f32> ) -> OutputStruct {\n\n\t// flow\n\t// code\n\n\tDiffuseColor = vec4<f32>( object.nodeUniform0, 1.0 );\n\tDiffuseColor.w = ( DiffuseColor.w * object.nodeUniform1 );\n\tDiffuseColor.w = 1.0;\n\tMetalness = object.nodeUniform2;\n\tnormalViewGeometry = normalize( v_normalViewGeometry );\n\tnodeVar0 = max( abs( dpdx( normalViewGeometry ) ), abs( - dpdy( normalViewGeometry ) ) );\n\tRoughness = min( ( max( object.nodeUniform3, 0.0525 ) + max( max( nodeVar0.x, nodeVar0.y ), nodeVar0.z ) ), 1.0 );\n\tSpecularColor = vec3<f32>( 0.04, 0.04, 0.04 );\n\tSpecularColorBlended = mix( vec3<f32>( 0.04, 0.04, 0.04 ), DiffuseColor.xyz, Metalness );\n\tSpecularF90 = 1.0;\n\tDiffuseContribution = ( DiffuseColor.xyz * vec3<f32>( ( 1.0 - object.nodeUniform2 ) ) );\n\tEmissiveColor = ( object.nodeUniform6 * vec3<f32>( object.nodeUniform7 ) );\n\tNORMAL_normalView = normalViewGeometry;\n\tnormalView = NORMAL_normalView;\n\tnodeVar1 = ( render.nodeUniform9 - render.nodeUniform10 );\n\tnodeVar2 = vec4<f32>( nodeVar1, 0.0 );\n\tnodeVar3 = ( render.cameraViewMatrix * nodeVar2 );\n\tnodeVar4 = normalize( nodeVar3.xyz );\n\tnodeVar5 = nodeVar4;\n\tnodeVar6 = dot( normalView, nodeVar5 );\n\tnodeVar7 = ( vec3<f32>( clamp( nodeVar6, 0.0, 1.0 ) ) * render.nodeUniform11 );\n\tnodeVar8 = nodeVar7;\n\tdirectDiffuse = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar9 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar10 = ( nodeVar8 * nodeVar9 );\n\tnodeVar11 = ( directDiffuse + nodeVar10 );\n\tdirectDiffuse = nodeVar11;\n\tdirectSpecular = vec3<f32>( 0.0, 0.0, 0.0 );\n\tpositionViewDirection = normalize( v_positionViewDirection );\n\tnodeVar12 = normalize( ( nodeVar5 + positionViewDirection ) );\n\tnodeVar13 = clamp( dot( positionViewDirection, nodeVar12 ), 0.0, 1.0 );\n\tnodeVar14 = exp2( ( ( ( nodeVar13 * -5.55473 ) - 6.98316 ) * nodeVar13 ) );\n\tnodeVar15 = ( Roughness * Roughness );\n\tnodeVar16 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) );\n\tnodeVar17 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( dot( normalView, nodeVar5 ), 0.0, 1.0 ) ) );\n\tnodeVar18 = ( SpecularColorBlended + ( ( vec3<f32>( 1.0 ) - SpecularColorBlended ) * vec3<f32>( 0.047619 ) ) );\n\tnodeVar19 = ( 1.0 - ( nodeVar16.xy.x + nodeVar16.xy.y ) );\n\tnodeVar20 = ( 1.0 - ( nodeVar17.xy.x + nodeVar17.xy.y ) );\n\tnodeVar21 = ( ( ( ( ( SpecularColorBlended * vec3<f32>( ( 1.0 - nodeVar14 ) ) ) + vec3<f32>( ( 1.0 * nodeVar14 ) ) ) * vec3<f32>( V_GGX_SmithCorrelated( nodeVar15, clamp( dot( normalView, nodeVar5 ), 0.0, 1.0 ), clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) ) ) * vec3<f32>( D_GGX( nodeVar15, clamp( dot( normalView, nodeVar12 ), 0.0, 1.0 ) ) ) ) + ( ( ( ( ( ( SpecularColorBlended * vec3<f32>( nodeVar16.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar16.xy.y ) ) ) * ( ( SpecularColorBlended * vec3<f32>( nodeVar17.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar17.xy.y ) ) ) ) * nodeVar18 ) / ( ( vec3<f32>( 1.0 ) - ( ( vec3<f32>( ( nodeVar19 * nodeVar20 ) ) * nodeVar18 ) * nodeVar18 ) ) + vec3<f32>( 0.000001 ) ) ) * vec3<f32>( ( nodeVar19 * nodeVar20 ) ) ) );\n\tnodeVar22 = ( nodeVar8 * nodeVar21 );\n\tnodeVar23 = ( directSpecular + nodeVar22 );\n\tdirectSpecular = nodeVar23;\n\tnodeVar24 = ( render.nodeUniform14 - render.nodeUniform15 );\n\tnodeVar25 = vec4<f32>( nodeVar24, 0.0 );\n\tnodeVar26 = ( render.cameraViewMatrix * nodeVar25 );\n\tnodeVar27 = normalize( nodeVar26.xyz );\n\tnodeVar28 = nodeVar27;\n\tnodeVar29 = dot( normalView, nodeVar28 );\n\tnodeVar30 = ( vec3<f32>( clamp( nodeVar29, 0.0, 1.0 ) ) * render.nodeUniform16 );\n\tnodeVar31 = nodeVar30;\n\tnodeVar32 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar33 = ( nodeVar31 * nodeVar32 );\n\tnodeVar34 = ( directDiffuse + nodeVar33 );\n\tdirectDiffuse = nodeVar34;\n\tnodeVar35 = normalize( ( nodeVar28 + positionViewDirection ) );\n\tnodeVar36 = clamp( dot( positionViewDirection, nodeVar35 ), 0.0, 1.0 );\n\tnodeVar37 = exp2( ( ( ( nodeVar36 * -5.55473 ) - 6.98316 ) * nodeVar36 ) );\n\tnodeVar38 = ( Roughness * Roughness );\n\tnodeVar39 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) );\n\tnodeVar40 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( dot( normalView, nodeVar28 ), 0.0, 1.0 ) ) );\n\tnodeVar41 = ( SpecularColorBlended + ( ( vec3<f32>( 1.0 ) - SpecularColorBlended ) * vec3<f32>( 0.047619 ) ) );\n\tnodeVar42 = ( 1.0 - ( nodeVar39.xy.x + nodeVar39.xy.y ) );\n\tnodeVar43 = ( 1.0 - ( nodeVar40.xy.x + nodeVar40.xy.y ) );\n\tnodeVar44 = ( ( ( ( ( SpecularColorBlended * vec3<f32>( ( 1.0 - nodeVar37 ) ) ) + vec3<f32>( ( 1.0 * nodeVar37 ) ) ) * vec3<f32>( V_GGX_SmithCorrelated( nodeVar38, clamp( dot( normalView, nodeVar28 ), 0.0, 1.0 ), clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) ) ) * vec3<f32>( D_GGX( nodeVar38, clamp( dot( normalView, nodeVar35 ), 0.0, 1.0 ) ) ) ) + ( ( ( ( ( ( SpecularColorBlended * vec3<f32>( nodeVar39.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar39.xy.y ) ) ) * ( ( SpecularColorBlended * vec3<f32>( nodeVar40.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar40.xy.y ) ) ) ) * nodeVar41 ) / ( ( vec3<f32>( 1.0 ) - ( ( vec3<f32>( ( nodeVar42 * nodeVar43 ) ) * nodeVar41 ) * nodeVar41 ) ) + vec3<f32>( 0.000001 ) ) ) * vec3<f32>( ( nodeVar42 * nodeVar43 ) ) ) );\n\tnodeVar45 = ( nodeVar31 * nodeVar44 );\n\tnodeVar46 = ( directSpecular + nodeVar45 );\n\tdirectSpecular = nodeVar46;\n\tnodeVar47 = ( render.nodeUniform17 - render.nodeUniform18 );\n\tnodeVar48 = vec4<f32>( nodeVar47, 0.0 );\n\tnodeVar49 = ( render.cameraViewMatrix * nodeVar48 );\n\tnodeVar50 = normalize( nodeVar49.xyz );\n\tnodeVar51 = nodeVar50;\n\tnodeVar52 = dot( normalView, nodeVar51 );\n\tnodeVar53 = ( vec3<f32>( clamp( nodeVar52, 0.0, 1.0 ) ) * render.nodeUniform19 );\n\tnodeVar54 = nodeVar53;\n\tnodeVar55 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar56 = ( nodeVar54 * nodeVar55 );\n\tnodeVar57 = ( directDiffuse + nodeVar56 );\n\tdirectDiffuse = nodeVar57;\n\tnodeVar58 = normalize( ( nodeVar51 + positionViewDirection ) );\n\tnodeVar59 = clamp( dot( positionViewDirection, nodeVar58 ), 0.0, 1.0 );\n\tnodeVar60 = exp2( ( ( ( nodeVar59 * -5.55473 ) - 6.98316 ) * nodeVar59 ) );\n\tnodeVar61 = ( Roughness * Roughness );\n\tnodeVar62 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) );\n\tnodeVar63 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( dot( normalView, nodeVar51 ), 0.0, 1.0 ) ) );\n\tnodeVar64 = ( SpecularColorBlended + ( ( vec3<f32>( 1.0 ) - SpecularColorBlended ) * vec3<f32>( 0.047619 ) ) );\n\tnodeVar65 = ( 1.0 - ( nodeVar62.xy.x + nodeVar62.xy.y ) );\n\tnodeVar66 = ( 1.0 - ( nodeVar63.xy.x + nodeVar63.xy.y ) );\n\tnodeVar67 = ( ( ( ( ( SpecularColorBlended * vec3<f32>( ( 1.0 - nodeVar60 ) ) ) + vec3<f32>( ( 1.0 * nodeVar60 ) ) ) * vec3<f32>( V_GGX_SmithCorrelated( nodeVar61, clamp( dot( normalView, nodeVar51 ), 0.0, 1.0 ), clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) ) ) * vec3<f32>( D_GGX( nodeVar61, clamp( dot( normalView, nodeVar58 ), 0.0, 1.0 ) ) ) ) + ( ( ( ( ( ( SpecularColorBlended * vec3<f32>( nodeVar62.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar62.xy.y ) ) ) * ( ( SpecularColorBlended * vec3<f32>( nodeVar63.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar63.xy.y ) ) ) ) * nodeVar64 ) / ( ( vec3<f32>( 1.0 ) - ( ( vec3<f32>( ( nodeVar65 * nodeVar66 ) ) * nodeVar64 ) * nodeVar64 ) ) + vec3<f32>( 0.000001 ) ) ) * vec3<f32>( ( nodeVar65 * nodeVar66 ) ) ) );\n\tnodeVar68 = ( nodeVar54 * nodeVar67 );\n\tnodeVar69 = ( directSpecular + nodeVar68 );\n\tdirectSpecular = nodeVar69;\n\tirradiance = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar70 = ( irradiance + render.nodeUniform20 );\n\tirradiance = nodeVar70;\n\tnodeVar71 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar72 = ( irradiance * nodeVar71 );\n\tnodeVar73 = nodeVar72;\n\tindirectDiffuse = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar74 = ( indirectDiffuse + nodeVar73 );\n\tindirectDiffuse = nodeVar74;\n\tsingleScatteringDielectric = vec3<f32>( 0.0, 0.0, 0.0 );\n\tmultiScatteringDielectric = vec3<f32>( 0.0, 0.0, 0.0 );\n\tsingleScatteringMetallic = vec3<f32>( 0.0, 0.0, 0.0 );\n\tmultiScatteringMetallic = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar75 = dot( normalView, positionViewDirection );\n\tnodeVar76 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( nodeVar75, 0.0, 1.0 ) ) );\n\tnodeVar77 = ( SpecularColor * vec3<f32>( nodeVar76.xy.x ) );\n\tnodeVar78 = ( SpecularF90 * nodeVar76.xy.y );\n\tnodeVar79 = ( nodeVar77 + vec3<f32>( nodeVar78 ) );\n\tnodeVar80 = ( singleScatteringDielectric + nodeVar79 );\n\tsingleScatteringDielectric = nodeVar80;\n\tnodeVar81 = ( vec3<f32>( 1.0 ) - SpecularColor );\n\tnodeVar82 = nodeVar81;\n\tnodeVar83 = ( nodeVar82 * vec3<f32>( 0.047619 ) );\n\tnodeVar84 = ( SpecularColor + nodeVar83 );\n\tnodeVar85 = ( nodeVar79 * nodeVar84 );\n\tnodeVar86 = ( nodeVar76.xy.x + nodeVar76.xy.y );\n\tnodeVar87 = ( 1.0 - nodeVar86 );\n\tnodeVar88 = nodeVar87;\n\tnodeVar89 = ( vec3<f32>( nodeVar88 ) * nodeVar84 );\n\tnodeVar90 = ( vec3<f32>( 1.0 ) - nodeVar89 );\n\tnodeVar91 = nodeVar90;\n\tnodeVar92 = ( nodeVar85 / nodeVar91 );\n\tnodeVar93 = ( nodeVar92 * vec3<f32>( nodeVar88 ) );\n\tnodeVar94 = ( multiScatteringDielectric + nodeVar93 );\n\tmultiScatteringDielectric = nodeVar94;\n\tnodeVar95 = dot( normalView, positionViewDirection );\n\tnodeVar96 = textureSample( nodeUniform13, nodeUniform13_sampler, vec2<f32>( Roughness, clamp( nodeVar95, 0.0, 1.0 ) ) );\n\tnodeVar97 = ( DiffuseColor.xyz * vec3<f32>( nodeVar96.xy.x ) );\n\tnodeVar98 = ( SpecularF90 * nodeVar96.xy.y );\n\tnodeVar99 = ( nodeVar97 + vec3<f32>( nodeVar98 ) );\n\tnodeVar100 = ( singleScatteringMetallic + nodeVar99 );\n\tsingleScatteringMetallic = nodeVar100;\n\tnodeVar101 = ( vec3<f32>( 1.0 ) - DiffuseColor.xyz );\n\tnodeVar102 = nodeVar101;\n\tnodeVar103 = ( nodeVar102 * vec3<f32>( 0.047619 ) );\n\tnodeVar104 = ( DiffuseColor.xyz + nodeVar103 );\n\tnodeVar105 = ( nodeVar99 * nodeVar104 );\n\tnodeVar106 = ( nodeVar96.xy.x + nodeVar96.xy.y );\n\tnodeVar107 = ( 1.0 - nodeVar106 );\n\tnodeVar108 = nodeVar107;\n\tnodeVar109 = ( vec3<f32>( nodeVar108 ) * nodeVar104 );\n\tnodeVar110 = ( vec3<f32>( 1.0 ) - nodeVar109 );\n\tnodeVar111 = nodeVar110;\n\tnodeVar112 = ( nodeVar105 / nodeVar111 );\n\tnodeVar113 = ( nodeVar112 * vec3<f32>( nodeVar108 ) );\n\tnodeVar114 = ( multiScatteringMetallic + nodeVar113 );\n\tmultiScatteringMetallic = nodeVar114;\n\tradiance = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar115 = mix( singleScatteringDielectric, singleScatteringMetallic, Metalness );\n\tnodeVar116 = ( radiance * nodeVar115 );\n\tnodeVar117 = mix( multiScatteringDielectric, multiScatteringMetallic, Metalness );\n\tiblIrradiance = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar118 = ( iblIrradiance * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar119 = ( nodeVar117 * nodeVar118 );\n\tnodeVar120 = ( nodeVar116 + nodeVar119 );\n\tnodeVar121 = nodeVar120;\n\tnodeVar122 = ( singleScatteringDielectric + multiScatteringDielectric );\n\tnodeVar123 = ( vec3<f32>( 1.0 ) - nodeVar122 );\n\tnodeVar124 = nodeVar123;\n\tnodeVar125 = ( DiffuseContribution * nodeVar124 );\n\tnodeVar126 = ( nodeVar125 * nodeVar118 );\n\tnodeVar127 = nodeVar126;\n\tindirectSpecular = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar128 = ( indirectSpecular + nodeVar121 );\n\tindirectSpecular = nodeVar128;\n\tnodeVar129 = ( indirectDiffuse + nodeVar127 );\n\tindirectDiffuse = nodeVar129;\n\tambientOcclusion = 1.0;\n\tnodeVar130 = ( indirectDiffuse * vec3<f32>( ambientOcclusion ) );\n\tindirectDiffuse = nodeVar130;\n\tnodeVar131 = dot( normalView, positionViewDirection );\n\tnodeVar132 = ( clamp( nodeVar131, 0.0, 1.0 ) + ambientOcclusion );\n\tnodeVar133 = ( Roughness * -16.0 );\n\tnodeVar134 = ( 1.0 - nodeVar133 );\n\tnodeVar135 = nodeVar134;\n\tnodeVar136 = ( - nodeVar135 );\n\tnodeVar137 = exp2( nodeVar136 );\n\tnodeVar138 = pow( nodeVar132, nodeVar137 );\n\tnodeVar139 = ( 1.0 - nodeVar138 );\n\tnodeVar140 = nodeVar139;\n\tnodeVar141 = ( ambientOcclusion - nodeVar140 );\n\tnodeVar142 = ( indirectSpecular * vec3<f32>( clamp( nodeVar141, 0.0, 1.0 ) ) );\n\tindirectSpecular = nodeVar142;\n\tnodeVar143 = ( directDiffuse + indirectDiffuse );\n\ttotalDiffuse = nodeVar143;\n\tnodeVar144 = ( directSpecular + indirectSpecular );\n\ttotalSpecular = nodeVar144;\n\tnodeVar145 = ( totalDiffuse + totalSpecular );\n\toutgoingLight = nodeVar145;\n\tnodeVar146 = max( vec4<f32>( ( outgoingLight + EmissiveColor ), DiffuseColor.w ), vec4<f32>( 0.0 ) );\n\tOutput = nodeVar146;\n\n\t// result\n\n\toutput.color = nodeVar146;\n\n\treturn output;\n\n}\n","// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct NodeBuffer_3536Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 3 ) @group( 1 )\nvar<storage, read> NodeBuffer_3536 : NodeBuffer_3536Struct;\n\nstruct NodeBuffer_3517Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 4 ) @group( 1 )\nvar<storage, read> NodeBuffer_3517 : NodeBuffer_3517Struct;\n\nstruct objectStruct {\n\tnodeUniform2 : mat3x3<f32>,\n\tnodeUniform3 : f32,\n\tnodeUniform4 : f32,\n\tnodeUniform5 : f32,\n\tnodeUniform6 : f32,\n\tnodeUniform7 : f32,\n\tnodeUniform9 : vec2<f32>,\n\tnodeUniform11 : vec2<f32>,\n\tnodeUniform12 : vec2<f32>,\n\tnodeUniform13 : f32\n};\n@binding( 2 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@location( 0 ) nodeVarying0 : vec4<f32>,\n\t@location( 1 ) nodeVarying1 : vec4<f32>,\n\t@location( 2 ) nodeVarying2 : vec2<f32>,\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> nodeVar10 : u32;\nvar<private> nodeVar11 : mat4x4<f32>;\nvar<private> nodeVar12 : vec2<f32>;\nvar<private> nodeVar13 : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) msdfMember : f32,\n\t@location( 1 ) msdfUvRect : vec4<f32>,\n\t@location( 2 ) uv : vec2<f32>,\n\t@location( 3 ) msdfRect : vec4<f32>,\n\t@location( 4 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tvaryings.nodeVarying0 = NodeBuffer_3536.value[ u32( msdfMember ) ];\n\tvaryings.nodeVarying1 = msdfUvRect;\n\tvaryings.nodeVarying2 = uv;\n\tnodeVar10 = ( u32( msdfMember ) * 4u );\n\tnodeVar11 = mat4x4<f32>( NodeBuffer_3517.value[ nodeVar10 ], NodeBuffer_3517.value[ ( nodeVar10 + 1u ) ], NodeBuffer_3517.value[ ( nodeVar10 + 2u ) ], NodeBuffer_3517.value[ ( nodeVar10 + 3u ) ] );\n\tnodeVar12 = ( object.nodeUniform11 / object.nodeUniform12 );\n\tnodeVar13 = vec4<f32>( ( ( ( ( floor( ( ( ( object.nodeUniform9 + vec2<f32>( ( nodeVar11 * vec4<f32>( msdfRect.xy, 0.0, 1.0 ) ).xy.x, ( - ( nodeVar11 * vec4<f32>( msdfRect.xy, 0.0, 1.0 ) ).xy.y ) ) ) * nodeVar12 ) + vec2<f32>( 0.5 ) ) ) + ( vec2<f32>( ( nodeVar11 * vec4<f32>( ( position.xy * msdfRect.zw ), 0.0, 0.0 ) ).xy.x, ( - ( nodeVar11 * vec4<f32>( ( position.xy * msdfRect.zw ), 0.0, 0.0 ) ).xy.y ) ) * nodeVar12 ) ) / object.nodeUniform11 ) * vec2<f32>( 2.0, -2.0 ) ) + vec2<f32>( -1.0, 1.0 ) ), object.nodeUniform13, 1.0 );\n\n\t// result\n\n\tvaryings.builtinClipSpace = nodeVar13;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// global\ndiagnostic( off, derivative_uniformity );\n\n\n// structs\n\nstruct OutputStruct {\n\t@location( 0 ) color: vec4<f32>\n};\nvar<private> output : OutputStruct;\n\n// uniforms\n@binding( 0 ) @group( 1 ) var nodeUniform1_sampler : sampler;\n@binding( 1 ) @group( 1 ) var nodeUniform1 : texture_2d<f32>;\n\nstruct objectStruct {\n\tnodeUniform2 : mat3x3<f32>,\n\tnodeUniform3 : f32,\n\tnodeUniform4 : f32,\n\tnodeUniform5 : f32,\n\tnodeUniform6 : f32,\n\tnodeUniform7 : f32,\n\tnodeUniform9 : vec2<f32>,\n\tnodeUniform11 : vec2<f32>,\n\tnodeUniform12 : vec2<f32>,\n\tnodeUniform13 : f32\n};\n@binding( 2 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\nstruct renderStruct {\n\tnodeUniform8 : vec3<f32>\n};\n@binding( 0 ) @group( 0 )\nvar<uniform> render : renderStruct;\n\n// vars\nvar<private> DiffuseColor : vec4<f32>;\nvar<private> nodeVar0 : vec2<f32>;\nvar<private> nodeVar1 : vec4<f32>;\nvar<private> Output : vec4<f32>;\nvar<private> irradiance : vec3<f32>;\nvar<private> nodeVar2 : vec3<f32>;\nvar<private> indirectDiffuse : vec3<f32>;\nvar<private> nodeVar3 : vec4<f32>;\nvar<private> ambientOcclusion : f32;\nvar<private> nodeVar4 : vec3<f32>;\nvar<private> nodeVar5 : vec3<f32>;\nvar<private> totalDiffuse : vec3<f32>;\nvar<private> directDiffuse : vec3<f32>;\nvar<private> nodeVar6 : vec3<f32>;\nvar<private> totalSpecular : vec3<f32>;\nvar<private> directSpecular : vec3<f32>;\nvar<private> indirectSpecular : vec3<f32>;\nvar<private> nodeVar7 : vec3<f32>;\nvar<private> outgoingLight : vec3<f32>;\nvar<private> nodeVar8 : vec3<f32>;\nvar<private> nodeVar9 : vec4<f32>;\n\n// codes\n\n\n@fragment\nfn main( @location( 0 ) nodeVarying0 : vec4<f32>,\n\t@location( 1 ) nodeVarying1 : vec4<f32>,\n\t@location( 2 ) nodeVarying2 : vec2<f32> ) -> OutputStruct {\n\n\t// flow\n\t// code\n\n\tnodeVar0 = vec2<f32>( mix( nodeVarying1.x, nodeVarying1.z, nodeVarying2.x ), mix( nodeVarying1.w, nodeVarying1.y, nodeVarying2.y ) );\n\tnodeVar1 = textureSample( nodeUniform1, nodeUniform1_sampler, ( object.nodeUniform2 * vec3<f32>( nodeVar0, 1.0 ) ).xy );\n\tDiffuseColor = vec4<f32>( nodeVarying0.xyz, ( ( clamp( ( ( ( ( max( min( nodeVar1.x, nodeVar1.y ), min( max( nodeVar1.x, nodeVar1.y ), nodeVar1.z ) ) - 0.5 ) + object.nodeUniform3 ) * max( ( dot( ( vec2<f32>( object.nodeUniform4 ) / vec2<f32>( textureDimensions( nodeUniform1, 0 ) ) ), ( vec2<f32>( 1.0, 1.0 ) / fwidth( nodeVar0 ) ) ) * 0.5 ), 1.0 ) ) + 0.5 ), 0.0, 1.0 ) * nodeVarying0.w ) * object.nodeUniform5 ) );\n\tDiffuseColor.w = ( DiffuseColor.w * object.nodeUniform6 );\n\n\tif ( ( DiffuseColor.w <= object.nodeUniform7 ) ) {\n\n\t\tdiscard;\n\t\t\n\n\t}\n\n\tirradiance = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar2 = ( irradiance + render.nodeUniform8 );\n\tirradiance = nodeVar2;\n\tindirectDiffuse = vec3<f32>( 0.0, 0.0, 0.0 );\n\tindirectDiffuse = vec4<f32>( 0.0, 0.0, 0.0, 0.0 ).xyz;\n\tnodeVar3 = ( vec4<f32>( indirectDiffuse, 1.0 ) + vec4<f32>( 1.0, 1.0, 1.0, 0.0 ) );\n\tindirectDiffuse = nodeVar3.xyz;\n\tambientOcclusion = 1.0;\n\tnodeVar4 = ( indirectDiffuse * vec3<f32>( ambientOcclusion ) );\n\tindirectDiffuse = nodeVar4;\n\tnodeVar5 = ( indirectDiffuse * DiffuseColor.xyz );\n\tindirectDiffuse = nodeVar5;\n\tdirectDiffuse = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar6 = ( directDiffuse + indirectDiffuse );\n\ttotalDiffuse = nodeVar6;\n\tdirectSpecular = vec3<f32>( 0.0, 0.0, 0.0 );\n\tindirectSpecular = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar7 = ( directSpecular + indirectSpecular );\n\ttotalSpecular = nodeVar7;\n\tnodeVar8 = ( totalDiffuse + totalSpecular );\n\toutgoingLight = nodeVar8;\n\tnodeVar9 = max( vec4<f32>( outgoingLight, DiffuseColor.w ), vec4<f32>( 0.0 ) );\n\tOutput = nodeVar9;\n\n\t// result\n\n\toutput.color = nodeVar9;\n\n\treturn output;\n\n}\n","// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct NodeBuffer_3708Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 3 ) @group( 1 )\nvar<storage, read> NodeBuffer_3708 : NodeBuffer_3708Struct;\n\nstruct NodeBuffer_3689Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 4 ) @group( 1 )\nvar<storage, read> NodeBuffer_3689 : NodeBuffer_3689Struct;\n\nstruct objectStruct {\n\tnodeUniform2 : mat3x3<f32>,\n\tnodeUniform3 : f32,\n\tnodeUniform4 : f32,\n\tnodeUniform5 : f32,\n\tnodeUniform6 : f32,\n\tnodeUniform7 : f32,\n\tnodeUniform9 : vec2<f32>,\n\tnodeUniform11 : vec2<f32>,\n\tnodeUniform12 : vec2<f32>,\n\tnodeUniform13 : f32\n};\n@binding( 2 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@location( 0 ) nodeVarying0 : vec4<f32>,\n\t@location( 1 ) nodeVarying1 : vec4<f32>,\n\t@location( 2 ) nodeVarying2 : vec2<f32>,\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> nodeVar10 : u32;\nvar<private> nodeVar11 : mat4x4<f32>;\nvar<private> nodeVar12 : vec2<f32>;\nvar<private> nodeVar13 : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) msdfMember : f32,\n\t@location( 1 ) msdfUvRect : vec4<f32>,\n\t@location( 2 ) uv : vec2<f32>,\n\t@location( 3 ) msdfRect : vec4<f32>,\n\t@location( 4 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tvaryings.nodeVarying0 = NodeBuffer_3708.value[ u32( msdfMember ) ];\n\tvaryings.nodeVarying1 = msdfUvRect;\n\tvaryings.nodeVarying2 = uv;\n\tnodeVar10 = ( u32( msdfMember ) * 4u );\n\tnodeVar11 = mat4x4<f32>( NodeBuffer_3689.value[ nodeVar10 ], NodeBuffer_3689.value[ ( nodeVar10 + 1u ) ], NodeBuffer_3689.value[ ( nodeVar10 + 2u ) ], NodeBuffer_3689.value[ ( nodeVar10 + 3u ) ] );\n\tnodeVar12 = ( object.nodeUniform11 / object.nodeUniform12 );\n\tnodeVar13 = vec4<f32>( ( ( ( ( floor( ( ( ( object.nodeUniform9 + vec2<f32>( ( nodeVar11 * vec4<f32>( msdfRect.xy, 0.0, 1.0 ) ).xy.x, ( - ( nodeVar11 * vec4<f32>( msdfRect.xy, 0.0, 1.0 ) ).xy.y ) ) ) * nodeVar12 ) + vec2<f32>( 0.5 ) ) ) + ( vec2<f32>( ( nodeVar11 * vec4<f32>( ( position.xy * msdfRect.zw ), 0.0, 0.0 ) ).xy.x, ( - ( nodeVar11 * vec4<f32>( ( position.xy * msdfRect.zw ), 0.0, 0.0 ) ).xy.y ) ) * nodeVar12 ) ) / object.nodeUniform11 ) * vec2<f32>( 2.0, -2.0 ) ) + vec2<f32>( -1.0, 1.0 ) ), object.nodeUniform13, 1.0 );\n\n\t// result\n\n\tvaryings.builtinClipSpace = nodeVar13;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct NodeBuffer_4050Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 3 ) @group( 1 )\nvar<storage, read> NodeBuffer_4050 : NodeBuffer_4050Struct;\n\nstruct NodeBuffer_4031Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 4 ) @group( 1 )\nvar<storage, read> NodeBuffer_4031 : NodeBuffer_4031Struct;\n\nstruct objectStruct {\n\tnodeUniform2 : mat3x3<f32>,\n\tnodeUniform3 : f32,\n\tnodeUniform4 : f32,\n\tnodeUniform5 : f32,\n\tnodeUniform6 : f32,\n\tnodeUniform7 : f32,\n\tnodeUniform9 : vec2<f32>,\n\tnodeUniform11 : vec2<f32>,\n\tnodeUniform12 : vec2<f32>,\n\tnodeUniform13 : f32\n};\n@binding( 2 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@location( 0 ) nodeVarying0 : vec4<f32>,\n\t@location( 1 ) nodeVarying1 : vec4<f32>,\n\t@location( 2 ) nodeVarying2 : vec2<f32>,\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> nodeVar10 : u32;\nvar<private> nodeVar11 : mat4x4<f32>;\nvar<private> nodeVar12 : vec2<f32>;\nvar<private> nodeVar13 : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) msdfMember : f32,\n\t@location( 1 ) msdfUvRect : vec4<f32>,\n\t@location( 2 ) uv : vec2<f32>,\n\t@location( 3 ) msdfRect : vec4<f32>,\n\t@location( 4 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tvaryings.nodeVarying0 = NodeBuffer_4050.value[ u32( msdfMember ) ];\n\tvaryings.nodeVarying1 = msdfUvRect;\n\tvaryings.nodeVarying2 = uv;\n\tnodeVar10 = ( u32( msdfMember ) * 4u );\n\tnodeVar11 = mat4x4<f32>( NodeBuffer_4031.value[ nodeVar10 ], NodeBuffer_4031.value[ ( nodeVar10 + 1u ) ], NodeBuffer_4031.value[ ( nodeVar10 + 2u ) ], NodeBuffer_4031.value[ ( nodeVar10 + 3u ) ] );\n\tnodeVar12 = ( object.nodeUniform11 / object.nodeUniform12 );\n\tnodeVar13 = vec4<f32>( ( ( ( ( floor( ( ( ( object.nodeUniform9 + vec2<f32>( ( nodeVar11 * vec4<f32>( msdfRect.xy, 0.0, 1.0 ) ).xy.x, ( - ( nodeVar11 * vec4<f32>( msdfRect.xy, 0.0, 1.0 ) ).xy.y ) ) ) * nodeVar12 ) + vec2<f32>( 0.5 ) ) ) + ( vec2<f32>( ( nodeVar11 * vec4<f32>( ( position.xy * msdfRect.zw ), 0.0, 0.0 ) ).xy.x, ( - ( nodeVar11 * vec4<f32>( ( position.xy * msdfRect.zw ), 0.0, 0.0 ) ).xy.y ) ) * nodeVar12 ) ) / object.nodeUniform11 ) * vec2<f32>( 2.0, -2.0 ) ) + vec2<f32>( -1.0, 1.0 ) ), object.nodeUniform13, 1.0 );\n\n\t// result\n\n\tvaryings.builtinClipSpace = nodeVar13;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct NodeBuffer_3879Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 3 ) @group( 1 )\nvar<storage, read> NodeBuffer_3879 : NodeBuffer_3879Struct;\n\nstruct NodeBuffer_3860Struct {\n\tvalue : array< vec4<f32> >\n};\n@binding( 4 ) @group( 1 )\nvar<storage, read> NodeBuffer_3860 : NodeBuffer_3860Struct;\n\nstruct objectStruct {\n\tnodeUniform2 : mat3x3<f32>,\n\tnodeUniform3 : f32,\n\tnodeUniform4 : f32,\n\tnodeUniform5 : f32,\n\tnodeUniform6 : f32,\n\tnodeUniform7 : f32,\n\tnodeUniform9 : vec2<f32>,\n\tnodeUniform11 : vec2<f32>,\n\tnodeUniform12 : vec2<f32>,\n\tnodeUniform13 : f32\n};\n@binding( 2 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@location( 0 ) nodeVarying0 : vec4<f32>,\n\t@location( 1 ) nodeVarying1 : vec4<f32>,\n\t@location( 2 ) nodeVarying2 : vec2<f32>,\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> nodeVar10 : u32;\nvar<private> nodeVar11 : mat4x4<f32>;\nvar<private> nodeVar12 : vec2<f32>;\nvar<private> nodeVar13 : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) msdfMember : f32,\n\t@location( 1 ) msdfUvRect : vec4<f32>,\n\t@location( 2 ) uv : vec2<f32>,\n\t@location( 3 ) msdfRect : vec4<f32>,\n\t@location( 4 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tvaryings.nodeVarying0 = NodeBuffer_3879.value[ u32( msdfMember ) ];\n\tvaryings.nodeVarying1 = msdfUvRect;\n\tvaryings.nodeVarying2 = uv;\n\tnodeVar10 = ( u32( msdfMember ) * 4u );\n\tnodeVar11 = mat4x4<f32>( NodeBuffer_3860.value[ nodeVar10 ], NodeBuffer_3860.value[ ( nodeVar10 + 1u ) ], NodeBuffer_3860.value[ ( nodeVar10 + 2u ) ], NodeBuffer_3860.value[ ( nodeVar10 + 3u ) ] );\n\tnodeVar12 = ( object.nodeUniform11 / object.nodeUniform12 );\n\tnodeVar13 = vec4<f32>( ( ( ( ( floor( ( ( ( object.nodeUniform9 + vec2<f32>( ( nodeVar11 * vec4<f32>( msdfRect.xy, 0.0, 1.0 ) ).xy.x, ( - ( nodeVar11 * vec4<f32>( msdfRect.xy, 0.0, 1.0 ) ).xy.y ) ) ) * nodeVar12 ) + vec2<f32>( 0.5 ) ) ) + ( vec2<f32>( ( nodeVar11 * vec4<f32>( ( position.xy * msdfRect.zw ), 0.0, 0.0 ) ).xy.x, ( - ( nodeVar11 * vec4<f32>( ( position.xy * msdfRect.zw ), 0.0, 0.0 ) ).xy.y ) ) * nodeVar12 ) ) / object.nodeUniform11 ) * vec2<f32>( 2.0, -2.0 ) ) + vec2<f32>( -1.0, 1.0 ) ), object.nodeUniform13, 1.0 );\n\n\t// result\n\n\tvaryings.builtinClipSpace = nodeVar13;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// directives\n\n\n// structs\n\n\n// uniforms\n\nstruct renderStruct {\n\tcameraProjectionMatrix : mat4x4<f32>,\n\tcameraViewMatrix : mat4x4<f32>,\n\tnodeUniform11 : vec3<f32>,\n\tnodeUniform22 : vec3<f32>,\n\tnodeUniform25 : vec3<f32>,\n\tnodeUniform26 : vec3<f32>,\n\tnodeUniform9 : vec3<f32>,\n\tnodeUniform10 : vec3<f32>,\n\tnodeUniform20 : vec3<f32>,\n\tnodeUniform21 : vec3<f32>,\n\tnodeUniform23 : vec3<f32>,\n\tnodeUniform24 : vec3<f32>,\n\tnodeUniform13 : mat4x4<f32>,\n\tnodeUniform14 : f32,\n\tnodeUniform15 : f32,\n\tnodeUniform16 : vec2<f32>,\n\tnodeUniform18 : f32\n};\n@binding( 0 ) @group( 0 )\nvar<uniform> render : renderStruct;\n\nstruct objectStruct {\n\tnodeUniform0 : vec3<f32>,\n\tnodeUniform1 : f32,\n\tnodeUniform2 : f32,\n\tnodeUniform3 : f32,\n\tnodeUniform5 : mat3x3<f32>,\n\tnodeUniform6 : vec3<f32>,\n\tnodeUniform7 : f32,\n\tnodeUniform12 : mat4x4<f32>\n};\n@binding( 0 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\n// varyings\n\nstruct VaryingsStruct {\n\t@location( 0 ) v_normalViewGeometry : vec3<f32>,\n\t@location( 1 ) v_positionWorld : vec3<f32>,\n\t@location( 2 ) v_positionViewDirection : vec3<f32>,\n\t@builtin( position ) builtinClipSpace : vec4<f32>\n};\nvar<private> varyings : VaryingsStruct;\n\n// vars\nvar<private> normalLocal : vec3<f32>;\nvar<private> modelViewMatrix : mat4x4<f32>;\nvar<private> VERTEX_nodeVar158 : vec4<f32>;\nvar<private> v_modelViewProjection : vec4<f32>;\nvar<private> v_positionView : vec3<f32>;\nvar<private> positionLocal : vec3<f32>;\nvar<private> VERTEX_v_modelViewProjection : vec4<f32>;\n\n// codes\n\n\n@vertex\nfn main( @location( 0 ) normal : vec3<f32>,\n\t@location( 1 ) position : vec3<f32> ) -> VaryingsStruct {\n\n\t// flow\n\t// code\n\n\tnormalLocal = normal;\n\tvaryings.v_normalViewGeometry = normalize( ( render.cameraViewMatrix * vec4<f32>( ( object.nodeUniform5 * normalLocal ), 0.0 ) ).xyz );\n\tpositionLocal = position;\n\tvaryings.v_positionWorld = ( object.nodeUniform12 * vec4<f32>( positionLocal, 1.0 ) ).xyz;\n\tmodelViewMatrix = ( render.cameraViewMatrix * object.nodeUniform12 );\n\tv_positionView = ( modelViewMatrix * vec4<f32>( positionLocal, 1.0 ) ).xyz;\n\tvaryings.v_positionViewDirection = ( - v_positionView );\n\tVERTEX_nodeVar158 = ( render.cameraProjectionMatrix * vec4<f32>( v_positionView, 1.0 ) );\n\tVERTEX_v_modelViewProjection = VERTEX_nodeVar158;\n\n\t// result\n\n\tvaryings.builtinClipSpace = VERTEX_v_modelViewProjection;\n\n\treturn varyings;\n\n}\n","// Three.js r185 - Node System\n\n// global\ndiagnostic( off, derivative_uniformity );\n\n\n// structs\n\nstruct OutputStruct {\n\t@location( 0 ) color: vec4<f32>\n};\nvar<private> output : OutputStruct;\n\n// uniforms\n@binding( 1 ) @group( 1 ) var nodeUniform17_sampler : sampler_comparison;\n@binding( 2 ) @group( 1 ) var nodeUniform17 : texture_depth_2d;\n@binding( 3 ) @group( 1 ) var nodeUniform19_sampler : sampler;\n@binding( 4 ) @group( 1 ) var nodeUniform19 : texture_2d<f32>;\n\nstruct objectStruct {\n\tnodeUniform0 : vec3<f32>,\n\tnodeUniform1 : f32,\n\tnodeUniform2 : f32,\n\tnodeUniform3 : f32,\n\tnodeUniform5 : mat3x3<f32>,\n\tnodeUniform6 : vec3<f32>,\n\tnodeUniform7 : f32,\n\tnodeUniform12 : mat4x4<f32>\n};\n@binding( 0 ) @group( 1 )\nvar<uniform> object : objectStruct;\n\nstruct renderStruct {\n\tcameraProjectionMatrix : mat4x4<f32>,\n\tcameraViewMatrix : mat4x4<f32>,\n\tnodeUniform11 : vec3<f32>,\n\tnodeUniform22 : vec3<f32>,\n\tnodeUniform25 : vec3<f32>,\n\tnodeUniform26 : vec3<f32>,\n\tnodeUniform9 : vec3<f32>,\n\tnodeUniform10 : vec3<f32>,\n\tnodeUniform20 : vec3<f32>,\n\tnodeUniform21 : vec3<f32>,\n\tnodeUniform23 : vec3<f32>,\n\tnodeUniform24 : vec3<f32>,\n\tnodeUniform13 : mat4x4<f32>,\n\tnodeUniform14 : f32,\n\tnodeUniform15 : f32,\n\tnodeUniform16 : vec2<f32>,\n\tnodeUniform18 : f32\n};\n@binding( 0 ) @group( 0 )\nvar<uniform> render : renderStruct;\n\n// vars\nvar<private> DiffuseColor : vec4<f32>;\nvar<private> Metalness : f32;\nvar<private> Roughness : f32;\nvar<private> normalViewGeometry : vec3<f32>;\nvar<private> nodeVar0 : vec3<f32>;\nvar<private> SpecularColor : vec3<f32>;\nvar<private> SpecularColorBlended : vec3<f32>;\nvar<private> SpecularF90 : f32;\nvar<private> DiffuseContribution : vec3<f32>;\nvar<private> EmissiveColor : vec3<f32>;\nvar<private> Output : vec4<f32>;\nvar<private> NORMAL_normalView : vec3<f32>;\nvar<private> normalView : vec3<f32>;\nvar<private> nodeVar1 : vec3<f32>;\nvar<private> nodeVar2 : vec4<f32>;\nvar<private> nodeVar3 : vec4<f32>;\nvar<private> nodeVar4 : vec3<f32>;\nvar<private> nodeVar5 : vec3<f32>;\nvar<private> nodeVar6 : f32;\nvar<private> shadowPositionWorld : vec3<f32>;\nvar<private> normalWorld : vec3<f32>;\nvar<private> nodeVar7 : vec4<f32>;\nvar<private> nodeVar8 : vec3<f32>;\nvar<private> nodeVar9 : vec3<f32>;\nvar<private> nodeVar10 : f32;\nvar<private> nodeVar11 : vec2<f32>;\nvar<private> nodeVar12 : vec4<f32>;\nvar<private> nodeVar13 : vec4<f32>;\nvar<private> nodeVar14 : vec4<f32>;\nvar<private> nodeVar15 : vec4<f32>;\nvar<private> nodeVar16 : f32;\nvar<private> nodeVar17 : vec3<f32>;\nvar<private> nodeVar18 : vec3<f32>;\nvar<private> nodeVar19 : vec3<f32>;\nvar<private> directDiffuse : vec3<f32>;\nvar<private> nodeVar20 : vec3<f32>;\nvar<private> nodeVar21 : vec3<f32>;\nvar<private> nodeVar22 : vec3<f32>;\nvar<private> directSpecular : vec3<f32>;\nvar<private> positionViewDirection : vec3<f32>;\nvar<private> nodeVar23 : vec3<f32>;\nvar<private> nodeVar24 : f32;\nvar<private> nodeVar25 : f32;\nvar<private> nodeVar26 : f32;\nvar<private> nodeVar27 : vec4<f32>;\nvar<private> nodeVar28 : vec4<f32>;\nvar<private> nodeVar29 : vec3<f32>;\nvar<private> nodeVar30 : f32;\nvar<private> nodeVar31 : f32;\nvar<private> nodeVar32 : vec3<f32>;\nvar<private> nodeVar33 : vec3<f32>;\nvar<private> nodeVar34 : vec3<f32>;\nvar<private> nodeVar35 : vec3<f32>;\nvar<private> nodeVar36 : vec4<f32>;\nvar<private> nodeVar37 : vec4<f32>;\nvar<private> nodeVar38 : vec3<f32>;\nvar<private> nodeVar39 : vec3<f32>;\nvar<private> nodeVar40 : f32;\nvar<private> nodeVar41 : vec3<f32>;\nvar<private> nodeVar42 : vec3<f32>;\nvar<private> nodeVar43 : vec3<f32>;\nvar<private> nodeVar44 : vec3<f32>;\nvar<private> nodeVar45 : vec3<f32>;\nvar<private> nodeVar46 : vec3<f32>;\nvar<private> nodeVar47 : f32;\nvar<private> nodeVar48 : f32;\nvar<private> nodeVar49 : f32;\nvar<private> nodeVar50 : vec4<f32>;\nvar<private> nodeVar51 : vec4<f32>;\nvar<private> nodeVar52 : vec3<f32>;\nvar<private> nodeVar53 : f32;\nvar<private> nodeVar54 : f32;\nvar<private> nodeVar55 : vec3<f32>;\nvar<private> nodeVar56 : vec3<f32>;\nvar<private> nodeVar57 : vec3<f32>;\nvar<private> nodeVar58 : vec3<f32>;\nvar<private> nodeVar59 : vec4<f32>;\nvar<private> nodeVar60 : vec4<f32>;\nvar<private> nodeVar61 : vec3<f32>;\nvar<private> nodeVar62 : vec3<f32>;\nvar<private> nodeVar63 : f32;\nvar<private> nodeVar64 : vec3<f32>;\nvar<private> nodeVar65 : vec3<f32>;\nvar<private> nodeVar66 : vec3<f32>;\nvar<private> nodeVar67 : vec3<f32>;\nvar<private> nodeVar68 : vec3<f32>;\nvar<private> nodeVar69 : vec3<f32>;\nvar<private> nodeVar70 : f32;\nvar<private> nodeVar71 : f32;\nvar<private> nodeVar72 : f32;\nvar<private> nodeVar73 : vec4<f32>;\nvar<private> nodeVar74 : vec4<f32>;\nvar<private> nodeVar75 : vec3<f32>;\nvar<private> nodeVar76 : f32;\nvar<private> nodeVar77 : f32;\nvar<private> nodeVar78 : vec3<f32>;\nvar<private> nodeVar79 : vec3<f32>;\nvar<private> nodeVar80 : vec3<f32>;\nvar<private> irradiance : vec3<f32>;\nvar<private> nodeVar81 : vec3<f32>;\nvar<private> nodeVar82 : vec3<f32>;\nvar<private> nodeVar83 : vec3<f32>;\nvar<private> nodeVar84 : vec3<f32>;\nvar<private> indirectDiffuse : vec3<f32>;\nvar<private> nodeVar85 : vec3<f32>;\nvar<private> singleScatteringDielectric : vec3<f32>;\nvar<private> multiScatteringDielectric : vec3<f32>;\nvar<private> singleScatteringMetallic : vec3<f32>;\nvar<private> multiScatteringMetallic : vec3<f32>;\nvar<private> nodeVar86 : f32;\nvar<private> nodeVar87 : vec4<f32>;\nvar<private> nodeVar88 : vec3<f32>;\nvar<private> nodeVar89 : f32;\nvar<private> nodeVar90 : vec3<f32>;\nvar<private> nodeVar91 : vec3<f32>;\nvar<private> nodeVar92 : vec3<f32>;\nvar<private> nodeVar93 : vec3<f32>;\nvar<private> nodeVar94 : vec3<f32>;\nvar<private> nodeVar95 : vec3<f32>;\nvar<private> nodeVar96 : vec3<f32>;\nvar<private> nodeVar97 : f32;\nvar<private> nodeVar98 : f32;\nvar<private> nodeVar99 : f32;\nvar<private> nodeVar100 : vec3<f32>;\nvar<private> nodeVar101 : vec3<f32>;\nvar<private> nodeVar102 : vec3<f32>;\nvar<private> nodeVar103 : vec3<f32>;\nvar<private> nodeVar104 : vec3<f32>;\nvar<private> nodeVar105 : vec3<f32>;\nvar<private> nodeVar106 : f32;\nvar<private> nodeVar107 : vec4<f32>;\nvar<private> nodeVar108 : vec3<f32>;\nvar<private> nodeVar109 : f32;\nvar<private> nodeVar110 : vec3<f32>;\nvar<private> nodeVar111 : vec3<f32>;\nvar<private> nodeVar112 : vec3<f32>;\nvar<private> nodeVar113 : vec3<f32>;\nvar<private> nodeVar114 : vec3<f32>;\nvar<private> nodeVar115 : vec3<f32>;\nvar<private> nodeVar116 : vec3<f32>;\nvar<private> nodeVar117 : f32;\nvar<private> nodeVar118 : f32;\nvar<private> nodeVar119 : f32;\nvar<private> nodeVar120 : vec3<f32>;\nvar<private> nodeVar121 : vec3<f32>;\nvar<private> nodeVar122 : vec3<f32>;\nvar<private> nodeVar123 : vec3<f32>;\nvar<private> nodeVar124 : vec3<f32>;\nvar<private> nodeVar125 : vec3<f32>;\nvar<private> radiance : vec3<f32>;\nvar<private> nodeVar126 : vec3<f32>;\nvar<private> nodeVar127 : vec3<f32>;\nvar<private> nodeVar128 : vec3<f32>;\nvar<private> iblIrradiance : vec3<f32>;\nvar<private> nodeVar129 : vec3<f32>;\nvar<private> nodeVar130 : vec3<f32>;\nvar<private> nodeVar131 : vec3<f32>;\nvar<private> nodeVar132 : vec3<f32>;\nvar<private> nodeVar133 : vec3<f32>;\nvar<private> nodeVar134 : vec3<f32>;\nvar<private> nodeVar135 : vec3<f32>;\nvar<private> nodeVar136 : vec3<f32>;\nvar<private> nodeVar137 : vec3<f32>;\nvar<private> nodeVar138 : vec3<f32>;\nvar<private> indirectSpecular : vec3<f32>;\nvar<private> nodeVar139 : vec3<f32>;\nvar<private> nodeVar140 : vec3<f32>;\nvar<private> ambientOcclusion : f32;\nvar<private> nodeVar141 : vec3<f32>;\nvar<private> nodeVar142 : f32;\nvar<private> nodeVar143 : f32;\nvar<private> nodeVar144 : f32;\nvar<private> nodeVar145 : f32;\nvar<private> nodeVar146 : f32;\nvar<private> nodeVar147 : f32;\nvar<private> nodeVar148 : f32;\nvar<private> nodeVar149 : f32;\nvar<private> nodeVar150 : f32;\nvar<private> nodeVar151 : f32;\nvar<private> nodeVar152 : f32;\nvar<private> nodeVar153 : vec3<f32>;\nvar<private> totalDiffuse : vec3<f32>;\nvar<private> nodeVar154 : vec3<f32>;\nvar<private> totalSpecular : vec3<f32>;\nvar<private> nodeVar155 : vec3<f32>;\nvar<private> outgoingLight : vec3<f32>;\nvar<private> nodeVar156 : vec3<f32>;\nvar<private> nodeVar157 : vec4<f32>;\n\n// codes\nfn V_GGX_SmithCorrelated ( alpha : f32, dotNL : f32, dotNV : f32 ) -> f32 {\n\n\tvar nodeVar0 : f32;\n\n\tnodeVar0 = ( alpha * alpha );\n\n\treturn ( 0.5 / max( ( ( dotNL * sqrt( ( nodeVar0 + ( ( 1.0 - nodeVar0 ) * ( dotNV * dotNV ) ) ) ) ) + ( dotNV * sqrt( ( nodeVar0 + ( ( 1.0 - nodeVar0 ) * ( dotNL * dotNL ) ) ) ) ) ), 0.000001 ) );\n\n}\n\nfn D_GGX ( alpha : f32, dotNH : f32 ) -> f32 {\n\n\tvar nodeVar0 : f32;\n\tvar nodeVar1 : f32;\n\n\tnodeVar0 = ( alpha * alpha );\n\tnodeVar1 = ( 1.0 - ( ( dotNH * dotNH ) * ( 1.0 - nodeVar0 ) ) );\n\n\treturn ( ( nodeVar0 / ( nodeVar1 * nodeVar1 ) ) * 0.3183098861837907 );\n\n}\n\n\n\n@fragment\nfn main( @location( 0 ) v_normalViewGeometry : vec3<f32>,\n\t@location( 1 ) v_positionWorld : vec3<f32>,\n\t@location( 2 ) v_positionViewDirection : vec3<f32> ) -> OutputStruct {\n\n\t// flow\n\t// code\n\n\tDiffuseColor = vec4<f32>( object.nodeUniform0, 1.0 );\n\tDiffuseColor.w = ( DiffuseColor.w * object.nodeUniform1 );\n\tDiffuseColor.w = 1.0;\n\tMetalness = object.nodeUniform2;\n\tnormalViewGeometry = normalize( v_normalViewGeometry );\n\tnodeVar0 = max( abs( dpdx( normalViewGeometry ) ), abs( - dpdy( normalViewGeometry ) ) );\n\tRoughness = min( ( max( object.nodeUniform3, 0.0525 ) + max( max( nodeVar0.x, nodeVar0.y ), nodeVar0.z ) ), 1.0 );\n\tSpecularColor = vec3<f32>( 0.04, 0.04, 0.04 );\n\tSpecularColorBlended = mix( vec3<f32>( 0.04, 0.04, 0.04 ), DiffuseColor.xyz, Metalness );\n\tSpecularF90 = 1.0;\n\tDiffuseContribution = ( DiffuseColor.xyz * vec3<f32>( ( 1.0 - object.nodeUniform2 ) ) );\n\tEmissiveColor = ( object.nodeUniform6 * vec3<f32>( object.nodeUniform7 ) );\n\tNORMAL_normalView = normalViewGeometry;\n\tnormalView = NORMAL_normalView;\n\tnodeVar1 = ( render.nodeUniform9 - render.nodeUniform10 );\n\tnodeVar2 = vec4<f32>( nodeVar1, 0.0 );\n\tnodeVar3 = ( render.cameraViewMatrix * nodeVar2 );\n\tnodeVar4 = normalize( nodeVar3.xyz );\n\tnodeVar5 = nodeVar4;\n\tnodeVar6 = dot( normalView, nodeVar5 );\n\tshadowPositionWorld = v_positionWorld;\n\tnormalWorld = normalize( ( vec4<f32>( normalView, 0.0 ) * render.cameraViewMatrix ).xyz );\n\tnodeVar7 = ( render.nodeUniform13 * vec4<f32>( ( shadowPositionWorld + ( normalWorld * vec3<f32>( render.nodeUniform14 ) ) ), 1.0 ) );\n\tnodeVar8 = ( nodeVar7.xyz / vec3<f32>( nodeVar7.w ) );\n\tnodeVar9 = vec3<f32>( nodeVar8.x, ( 1.0 - nodeVar8.y ), ( nodeVar8.z + render.nodeUniform15 ) );\n\n\tif ( ( ( ( ( ( nodeVar9.x >= 0.0 ) && ( nodeVar9.x <= 1.0 ) ) && ( nodeVar9.y >= 0.0 ) ) && ( nodeVar9.y <= 1.0 ) ) && ( nodeVar9.z <= 1.0 ) ) ) {\n\n\t\tlet nodeConst0 = fract( ( ( nodeVar9.xy * render.nodeUniform16 ) + vec2<f32>( 0.5 ) ) );\n\t\tnodeVar11 = ( nodeVar9.xy - ( ( nodeConst0 - vec2<f32>( 0.5 ) ) * ( vec2<f32>( 1.0, 1.0 ) / render.nodeUniform16 ) ) );\n\t\tnodeVar9.x = nodeVar11[ 0 ];\n\t\tnodeVar9.y = nodeVar11[ 1 ];\n\t\tnodeVar12 = textureGatherCompare( nodeUniform17, nodeUniform17_sampler, nodeVar9.xy, nodeVar9.z, vec2<i32>( -1, 1 ) );\n\t\tlet nodeConst1 = nodeVar12;\n\t\tnodeVar13 = textureGatherCompare( nodeUniform17, nodeUniform17_sampler, nodeVar9.xy, nodeVar9.z, vec2<i32>( 1, 1 ) );\n\t\tlet nodeConst2 = nodeVar13;\n\t\tnodeVar14 = textureGatherCompare( nodeUniform17, nodeUniform17_sampler, nodeVar9.xy, nodeVar9.z, vec2<i32>( -1, -1 ) );\n\t\tlet nodeConst3 = nodeVar14;\n\t\tnodeVar15 = textureGatherCompare( nodeUniform17, nodeUniform17_sampler, nodeVar9.xy, nodeVar9.z, vec2<i32>( 1, -1 ) );\n\t\tlet nodeConst4 = nodeVar15;\n\t\tnodeVar10 = ( ( ( ( ( ( ( mix( nodeConst1.x, nodeConst2.y, nodeConst0.x ) + nodeConst1.y ) + nodeConst2.x ) * nodeConst0.y ) + ( ( mix( nodeConst1.w, nodeConst2.z, nodeConst0.x ) + nodeConst1.z ) + nodeConst2.w ) ) + ( ( mix( nodeConst3.x, nodeConst4.y, nodeConst0.x ) + nodeConst3.y ) + nodeConst4.x ) ) + ( ( ( mix( nodeConst3.w, nodeConst4.z, nodeConst0.x ) + nodeConst3.z ) + nodeConst4.w ) * ( 1.0 - nodeConst0.y ) ) ) * 0.1111111111111111 );\n\n\t} else {\n\n\t\tnodeVar10 = 1.0;\n\n\t}\n\n\tnodeVar16 = mix( 1.0, nodeVar10, render.nodeUniform18 );\n\tnodeVar17 = ( render.nodeUniform11 * vec3<f32>( nodeVar16 ) );\n\tnodeVar18 = ( vec3<f32>( clamp( nodeVar6, 0.0, 1.0 ) ) * nodeVar17 );\n\tnodeVar19 = nodeVar18;\n\tdirectDiffuse = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar20 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar21 = ( nodeVar19 * nodeVar20 );\n\tnodeVar22 = ( directDiffuse + nodeVar21 );\n\tdirectDiffuse = nodeVar22;\n\tdirectSpecular = vec3<f32>( 0.0, 0.0, 0.0 );\n\tpositionViewDirection = normalize( v_positionViewDirection );\n\tnodeVar23 = normalize( ( nodeVar5 + positionViewDirection ) );\n\tnodeVar24 = clamp( dot( positionViewDirection, nodeVar23 ), 0.0, 1.0 );\n\tnodeVar25 = exp2( ( ( ( nodeVar24 * -5.55473 ) - 6.98316 ) * nodeVar24 ) );\n\tnodeVar26 = ( Roughness * Roughness );\n\tnodeVar27 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) );\n\tnodeVar28 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( dot( normalView, nodeVar5 ), 0.0, 1.0 ) ) );\n\tnodeVar29 = ( SpecularColorBlended + ( ( vec3<f32>( 1.0 ) - SpecularColorBlended ) * vec3<f32>( 0.047619 ) ) );\n\tnodeVar30 = ( 1.0 - ( nodeVar27.xy.x + nodeVar27.xy.y ) );\n\tnodeVar31 = ( 1.0 - ( nodeVar28.xy.x + nodeVar28.xy.y ) );\n\tnodeVar32 = ( ( ( ( ( SpecularColorBlended * vec3<f32>( ( 1.0 - nodeVar25 ) ) ) + vec3<f32>( ( 1.0 * nodeVar25 ) ) ) * vec3<f32>( V_GGX_SmithCorrelated( nodeVar26, clamp( dot( normalView, nodeVar5 ), 0.0, 1.0 ), clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) ) ) * vec3<f32>( D_GGX( nodeVar26, clamp( dot( normalView, nodeVar23 ), 0.0, 1.0 ) ) ) ) + ( ( ( ( ( ( SpecularColorBlended * vec3<f32>( nodeVar27.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar27.xy.y ) ) ) * ( ( SpecularColorBlended * vec3<f32>( nodeVar28.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar28.xy.y ) ) ) ) * nodeVar29 ) / ( ( vec3<f32>( 1.0 ) - ( ( vec3<f32>( ( nodeVar30 * nodeVar31 ) ) * nodeVar29 ) * nodeVar29 ) ) + vec3<f32>( 0.000001 ) ) ) * vec3<f32>( ( nodeVar30 * nodeVar31 ) ) ) );\n\tnodeVar33 = ( nodeVar19 * nodeVar32 );\n\tnodeVar34 = ( directSpecular + nodeVar33 );\n\tdirectSpecular = nodeVar34;\n\tnodeVar35 = ( render.nodeUniform20 - render.nodeUniform21 );\n\tnodeVar36 = vec4<f32>( nodeVar35, 0.0 );\n\tnodeVar37 = ( render.cameraViewMatrix * nodeVar36 );\n\tnodeVar38 = normalize( nodeVar37.xyz );\n\tnodeVar39 = nodeVar38;\n\tnodeVar40 = dot( normalView, nodeVar39 );\n\tnodeVar41 = ( vec3<f32>( clamp( nodeVar40, 0.0, 1.0 ) ) * render.nodeUniform22 );\n\tnodeVar42 = nodeVar41;\n\tnodeVar43 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar44 = ( nodeVar42 * nodeVar43 );\n\tnodeVar45 = ( directDiffuse + nodeVar44 );\n\tdirectDiffuse = nodeVar45;\n\tnodeVar46 = normalize( ( nodeVar39 + positionViewDirection ) );\n\tnodeVar47 = clamp( dot( positionViewDirection, nodeVar46 ), 0.0, 1.0 );\n\tnodeVar48 = exp2( ( ( ( nodeVar47 * -5.55473 ) - 6.98316 ) * nodeVar47 ) );\n\tnodeVar49 = ( Roughness * Roughness );\n\tnodeVar50 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) );\n\tnodeVar51 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( dot( normalView, nodeVar39 ), 0.0, 1.0 ) ) );\n\tnodeVar52 = ( SpecularColorBlended + ( ( vec3<f32>( 1.0 ) - SpecularColorBlended ) * vec3<f32>( 0.047619 ) ) );\n\tnodeVar53 = ( 1.0 - ( nodeVar50.xy.x + nodeVar50.xy.y ) );\n\tnodeVar54 = ( 1.0 - ( nodeVar51.xy.x + nodeVar51.xy.y ) );\n\tnodeVar55 = ( ( ( ( ( SpecularColorBlended * vec3<f32>( ( 1.0 - nodeVar48 ) ) ) + vec3<f32>( ( 1.0 * nodeVar48 ) ) ) * vec3<f32>( V_GGX_SmithCorrelated( nodeVar49, clamp( dot( normalView, nodeVar39 ), 0.0, 1.0 ), clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) ) ) * vec3<f32>( D_GGX( nodeVar49, clamp( dot( normalView, nodeVar46 ), 0.0, 1.0 ) ) ) ) + ( ( ( ( ( ( SpecularColorBlended * vec3<f32>( nodeVar50.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar50.xy.y ) ) ) * ( ( SpecularColorBlended * vec3<f32>( nodeVar51.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar51.xy.y ) ) ) ) * nodeVar52 ) / ( ( vec3<f32>( 1.0 ) - ( ( vec3<f32>( ( nodeVar53 * nodeVar54 ) ) * nodeVar52 ) * nodeVar52 ) ) + vec3<f32>( 0.000001 ) ) ) * vec3<f32>( ( nodeVar53 * nodeVar54 ) ) ) );\n\tnodeVar56 = ( nodeVar42 * nodeVar55 );\n\tnodeVar57 = ( directSpecular + nodeVar56 );\n\tdirectSpecular = nodeVar57;\n\tnodeVar58 = ( render.nodeUniform23 - render.nodeUniform24 );\n\tnodeVar59 = vec4<f32>( nodeVar58, 0.0 );\n\tnodeVar60 = ( render.cameraViewMatrix * nodeVar59 );\n\tnodeVar61 = normalize( nodeVar60.xyz );\n\tnodeVar62 = nodeVar61;\n\tnodeVar63 = dot( normalView, nodeVar62 );\n\tnodeVar64 = ( vec3<f32>( clamp( nodeVar63, 0.0, 1.0 ) ) * render.nodeUniform25 );\n\tnodeVar65 = nodeVar64;\n\tnodeVar66 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar67 = ( nodeVar65 * nodeVar66 );\n\tnodeVar68 = ( directDiffuse + nodeVar67 );\n\tdirectDiffuse = nodeVar68;\n\tnodeVar69 = normalize( ( nodeVar62 + positionViewDirection ) );\n\tnodeVar70 = clamp( dot( positionViewDirection, nodeVar69 ), 0.0, 1.0 );\n\tnodeVar71 = exp2( ( ( ( nodeVar70 * -5.55473 ) - 6.98316 ) * nodeVar70 ) );\n\tnodeVar72 = ( Roughness * Roughness );\n\tnodeVar73 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) );\n\tnodeVar74 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( dot( normalView, nodeVar62 ), 0.0, 1.0 ) ) );\n\tnodeVar75 = ( SpecularColorBlended + ( ( vec3<f32>( 1.0 ) - SpecularColorBlended ) * vec3<f32>( 0.047619 ) ) );\n\tnodeVar76 = ( 1.0 - ( nodeVar73.xy.x + nodeVar73.xy.y ) );\n\tnodeVar77 = ( 1.0 - ( nodeVar74.xy.x + nodeVar74.xy.y ) );\n\tnodeVar78 = ( ( ( ( ( SpecularColorBlended * vec3<f32>( ( 1.0 - nodeVar71 ) ) ) + vec3<f32>( ( 1.0 * nodeVar71 ) ) ) * vec3<f32>( V_GGX_SmithCorrelated( nodeVar72, clamp( dot( normalView, nodeVar62 ), 0.0, 1.0 ), clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) ) ) * vec3<f32>( D_GGX( nodeVar72, clamp( dot( normalView, nodeVar69 ), 0.0, 1.0 ) ) ) ) + ( ( ( ( ( ( SpecularColorBlended * vec3<f32>( nodeVar73.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar73.xy.y ) ) ) * ( ( SpecularColorBlended * vec3<f32>( nodeVar74.xy.x ) ) + vec3<f32>( ( 1.0 * nodeVar74.xy.y ) ) ) ) * nodeVar75 ) / ( ( vec3<f32>( 1.0 ) - ( ( vec3<f32>( ( nodeVar76 * nodeVar77 ) ) * nodeVar75 ) * nodeVar75 ) ) + vec3<f32>( 0.000001 ) ) ) * vec3<f32>( ( nodeVar76 * nodeVar77 ) ) ) );\n\tnodeVar79 = ( nodeVar65 * nodeVar78 );\n\tnodeVar80 = ( directSpecular + nodeVar79 );\n\tdirectSpecular = nodeVar80;\n\tirradiance = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar81 = ( irradiance + render.nodeUniform26 );\n\tirradiance = nodeVar81;\n\tnodeVar82 = ( DiffuseContribution * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar83 = ( irradiance * nodeVar82 );\n\tnodeVar84 = nodeVar83;\n\tindirectDiffuse = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar85 = ( indirectDiffuse + nodeVar84 );\n\tindirectDiffuse = nodeVar85;\n\tsingleScatteringDielectric = vec3<f32>( 0.0, 0.0, 0.0 );\n\tmultiScatteringDielectric = vec3<f32>( 0.0, 0.0, 0.0 );\n\tsingleScatteringMetallic = vec3<f32>( 0.0, 0.0, 0.0 );\n\tmultiScatteringMetallic = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar86 = dot( normalView, positionViewDirection );\n\tnodeVar87 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( nodeVar86, 0.0, 1.0 ) ) );\n\tnodeVar88 = ( SpecularColor * vec3<f32>( nodeVar87.xy.x ) );\n\tnodeVar89 = ( SpecularF90 * nodeVar87.xy.y );\n\tnodeVar90 = ( nodeVar88 + vec3<f32>( nodeVar89 ) );\n\tnodeVar91 = ( singleScatteringDielectric + nodeVar90 );\n\tsingleScatteringDielectric = nodeVar91;\n\tnodeVar92 = ( vec3<f32>( 1.0 ) - SpecularColor );\n\tnodeVar93 = nodeVar92;\n\tnodeVar94 = ( nodeVar93 * vec3<f32>( 0.047619 ) );\n\tnodeVar95 = ( SpecularColor + nodeVar94 );\n\tnodeVar96 = ( nodeVar90 * nodeVar95 );\n\tnodeVar97 = ( nodeVar87.xy.x + nodeVar87.xy.y );\n\tnodeVar98 = ( 1.0 - nodeVar97 );\n\tnodeVar99 = nodeVar98;\n\tnodeVar100 = ( vec3<f32>( nodeVar99 ) * nodeVar95 );\n\tnodeVar101 = ( vec3<f32>( 1.0 ) - nodeVar100 );\n\tnodeVar102 = nodeVar101;\n\tnodeVar103 = ( nodeVar96 / nodeVar102 );\n\tnodeVar104 = ( nodeVar103 * vec3<f32>( nodeVar99 ) );\n\tnodeVar105 = ( multiScatteringDielectric + nodeVar104 );\n\tmultiScatteringDielectric = nodeVar105;\n\tnodeVar106 = dot( normalView, positionViewDirection );\n\tnodeVar107 = textureSample( nodeUniform19, nodeUniform19_sampler, vec2<f32>( Roughness, clamp( nodeVar106, 0.0, 1.0 ) ) );\n\tnodeVar108 = ( DiffuseColor.xyz * vec3<f32>( nodeVar107.xy.x ) );\n\tnodeVar109 = ( SpecularF90 * nodeVar107.xy.y );\n\tnodeVar110 = ( nodeVar108 + vec3<f32>( nodeVar109 ) );\n\tnodeVar111 = ( singleScatteringMetallic + nodeVar110 );\n\tsingleScatteringMetallic = nodeVar111;\n\tnodeVar112 = ( vec3<f32>( 1.0 ) - DiffuseColor.xyz );\n\tnodeVar113 = nodeVar112;\n\tnodeVar114 = ( nodeVar113 * vec3<f32>( 0.047619 ) );\n\tnodeVar115 = ( DiffuseColor.xyz + nodeVar114 );\n\tnodeVar116 = ( nodeVar110 * nodeVar115 );\n\tnodeVar117 = ( nodeVar107.xy.x + nodeVar107.xy.y );\n\tnodeVar118 = ( 1.0 - nodeVar117 );\n\tnodeVar119 = nodeVar118;\n\tnodeVar120 = ( vec3<f32>( nodeVar119 ) * nodeVar115 );\n\tnodeVar121 = ( vec3<f32>( 1.0 ) - nodeVar120 );\n\tnodeVar122 = nodeVar121;\n\tnodeVar123 = ( nodeVar116 / nodeVar122 );\n\tnodeVar124 = ( nodeVar123 * vec3<f32>( nodeVar119 ) );\n\tnodeVar125 = ( multiScatteringMetallic + nodeVar124 );\n\tmultiScatteringMetallic = nodeVar125;\n\tradiance = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar126 = mix( singleScatteringDielectric, singleScatteringMetallic, Metalness );\n\tnodeVar127 = ( radiance * nodeVar126 );\n\tnodeVar128 = mix( multiScatteringDielectric, multiScatteringMetallic, Metalness );\n\tiblIrradiance = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar129 = ( iblIrradiance * vec3<f32>( 0.3183098861837907 ) );\n\tnodeVar130 = ( nodeVar128 * nodeVar129 );\n\tnodeVar131 = ( nodeVar127 + nodeVar130 );\n\tnodeVar132 = nodeVar131;\n\tnodeVar133 = ( singleScatteringDielectric + multiScatteringDielectric );\n\tnodeVar134 = ( vec3<f32>( 1.0 ) - nodeVar133 );\n\tnodeVar135 = nodeVar134;\n\tnodeVar136 = ( DiffuseContribution * nodeVar135 );\n\tnodeVar137 = ( nodeVar136 * nodeVar129 );\n\tnodeVar138 = nodeVar137;\n\tindirectSpecular = vec3<f32>( 0.0, 0.0, 0.0 );\n\tnodeVar139 = ( indirectSpecular + nodeVar132 );\n\tindirectSpecular = nodeVar139;\n\tnodeVar140 = ( indirectDiffuse + nodeVar138 );\n\tindirectDiffuse = nodeVar140;\n\tambientOcclusion = 1.0;\n\tnodeVar141 = ( indirectDiffuse * vec3<f32>( ambientOcclusion ) );\n\tindirectDiffuse = nodeVar141;\n\tnodeVar142 = dot( normalView, positionViewDirection );\n\tnodeVar143 = ( clamp( nodeVar142, 0.0, 1.0 ) + ambientOcclusion );\n\tnodeVar144 = ( Roughness * -16.0 );\n\tnodeVar145 = ( 1.0 - nodeVar144 );\n\tnodeVar146 = nodeVar145;\n\tnodeVar147 = ( - nodeVar146 );\n\tnodeVar148 = exp2( nodeVar147 );\n\tnodeVar149 = pow( nodeVar143, nodeVar148 );\n\tnodeVar150 = ( 1.0 - nodeVar149 );\n\tnodeVar151 = nodeVar150;\n\tnodeVar152 = ( ambientOcclusion - nodeVar151 );\n\tnodeVar153 = ( indirectSpecular * vec3<f32>( clamp( nodeVar152, 0.0, 1.0 ) ) );\n\tindirectSpecular = nodeVar153;\n\tnodeVar154 = ( directDiffuse + indirectDiffuse );\n\ttotalDiffuse = nodeVar154;\n\tnodeVar155 = ( directSpecular + indirectSpecular );\n\ttotalSpecular = nodeVar155;\n\tnodeVar156 = ( totalDiffuse + totalSpecular );\n\toutgoingLight = nodeVar156;\n\tnodeVar157 = max( vec4<f32>( ( outgoingLight + EmissiveColor ), DiffuseColor.w ), vec4<f32>( 0.0 ) );\n\tOutput = nodeVar157;\n\n\t// result\n\n\toutput.color = nodeVar157;\n\n\treturn output;\n\n}\n"],
746
762
  "nodes": [
747
763
  {
748
764
  "k": "owned",
@@ -1069,7 +1085,7 @@ export default {
1069
1085
  "path": [],
1070
1086
  "slot": "vertexNode"
1071
1087
  },
1072
- "path": [0,0,0,0,0,0,0,0,0,0]
1088
+ "path": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
1073
1089
  },
1074
1090
  {
1075
1091
  "k": "owned",
@@ -1079,7 +1095,7 @@ export default {
1079
1095
  "path": [],
1080
1096
  "slot": "vertexNode"
1081
1097
  },
1082
- "path": [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0]
1098
+ "path": [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0]
1083
1099
  },
1084
1100
  {
1085
1101
  "k": "owned",
@@ -1089,7 +1105,7 @@ export default {
1089
1105
  "path": [],
1090
1106
  "slot": "vertexNode"
1091
1107
  },
1092
- "path": [0,0,0,0,0,0,0,1]
1108
+ "path": [0,0,0,0,0,0,0,0,0,1,0,1,0,1]
1093
1109
  },
1094
1110
  {
1095
1111
  "k": "owned",
@@ -1188,7 +1204,7 @@ export default {
1188
1204
  "path": [],
1189
1205
  "slot": "vertexNode"
1190
1206
  },
1191
- "path": [0,0,0,0,0,0,0,0,0,0]
1207
+ "path": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
1192
1208
  },
1193
1209
  {
1194
1210
  "k": "owned",
@@ -1198,7 +1214,7 @@ export default {
1198
1214
  "path": [],
1199
1215
  "slot": "vertexNode"
1200
1216
  },
1201
- "path": [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0]
1217
+ "path": [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0]
1202
1218
  },
1203
1219
  {
1204
1220
  "k": "owned",
@@ -1208,7 +1224,7 @@ export default {
1208
1224
  "path": [],
1209
1225
  "slot": "vertexNode"
1210
1226
  },
1211
- "path": [0,0,0,0,0,0,0,1]
1227
+ "path": [0,0,0,0,0,0,0,0,0,1,0,1,0,1]
1212
1228
  },
1213
1229
  {
1214
1230
  "k": "owned",
@@ -1302,7 +1318,7 @@ export default {
1302
1318
  "path": [],
1303
1319
  "slot": "vertexNode"
1304
1320
  },
1305
- "path": [0,0,0,0,0,0,0,0,0,0]
1321
+ "path": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
1306
1322
  },
1307
1323
  {
1308
1324
  "k": "owned",
@@ -1312,7 +1328,7 @@ export default {
1312
1328
  "path": [],
1313
1329
  "slot": "vertexNode"
1314
1330
  },
1315
- "path": [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0]
1331
+ "path": [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0]
1316
1332
  },
1317
1333
  {
1318
1334
  "k": "owned",
@@ -1322,7 +1338,7 @@ export default {
1322
1338
  "path": [],
1323
1339
  "slot": "vertexNode"
1324
1340
  },
1325
- "path": [0,0,0,0,0,0,0,1]
1341
+ "path": [0,0,0,0,0,0,0,0,0,1,0,1,0,1]
1326
1342
  },
1327
1343
  {
1328
1344
  "k": "owned",
@@ -1416,7 +1432,7 @@ export default {
1416
1432
  "path": [],
1417
1433
  "slot": "vertexNode"
1418
1434
  },
1419
- "path": [0,0,0,0,0,0,0,0,0,0]
1435
+ "path": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
1420
1436
  },
1421
1437
  {
1422
1438
  "k": "owned",
@@ -1426,7 +1442,7 @@ export default {
1426
1442
  "path": [],
1427
1443
  "slot": "vertexNode"
1428
1444
  },
1429
- "path": [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0]
1445
+ "path": [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0]
1430
1446
  },
1431
1447
  {
1432
1448
  "k": "owned",
@@ -1436,7 +1452,7 @@ export default {
1436
1452
  "path": [],
1437
1453
  "slot": "vertexNode"
1438
1454
  },
1439
- "path": [0,0,0,0,0,0,0,1]
1455
+ "path": [0,0,0,0,0,0,0,0,0,1,0,1,0,1]
1440
1456
  },
1441
1457
  {
1442
1458
  "k": "owned",
@@ -1685,8 +1701,9 @@ export default {
1685
1701
  [27,0,"color","fragment","nodeUniform8"],
1686
1702
  [44,0,"vec2","vertex","nodeUniform9"],
1687
1703
  [45,0,"storageBuffer","vertex","NodeBuffer_3517"],
1688
- [46,0,"vec2","vertex","nodeUniform11"],
1689
- [47,0,"float","vertex","nodeUniform12"]
1704
+ [1,0,"vec2","vertex","nodeUniform11"],
1705
+ [46,0,"vec2","vertex","nodeUniform12"],
1706
+ [47,0,"float","vertex","nodeUniform13"]
1690
1707
  ],
1691
1708
  "fragment": 7,
1692
1709
  "hardwareClipping": false,
@@ -1702,7 +1719,7 @@ export default {
1702
1719
  "attributes": 2,
1703
1720
  "compute": null,
1704
1721
  "declarations": [
1705
- [50,0,"storageBuffer","vertex","NodeBuffer_3674"],
1722
+ [50,0,"storageBuffer","vertex","NodeBuffer_3708"],
1706
1723
  [51,0,"texture","fragment","nodeUniform1"],
1707
1724
  [52,0,"mat3","fragment","nodeUniform2"],
1708
1725
  [53,0,"float","fragment","nodeUniform3"],
@@ -1712,9 +1729,10 @@ export default {
1712
1729
  [43,0,"float","fragment","nodeUniform7"],
1713
1730
  [27,0,"color","fragment","nodeUniform8"],
1714
1731
  [56,0,"vec2","vertex","nodeUniform9"],
1715
- [57,0,"storageBuffer","vertex","NodeBuffer_3655"],
1716
- [58,0,"vec2","vertex","nodeUniform11"],
1717
- [59,0,"float","vertex","nodeUniform12"]
1732
+ [57,0,"storageBuffer","vertex","NodeBuffer_3689"],
1733
+ [1,0,"vec2","vertex","nodeUniform11"],
1734
+ [58,0,"vec2","vertex","nodeUniform12"],
1735
+ [59,0,"float","vertex","nodeUniform13"]
1718
1736
  ],
1719
1737
  "fragment": 7,
1720
1738
  "hardwareClipping": false,
@@ -1730,7 +1748,7 @@ export default {
1730
1748
  "attributes": 2,
1731
1749
  "compute": null,
1732
1750
  "declarations": [
1733
- [61,0,"storageBuffer","vertex","NodeBuffer_3948"],
1751
+ [61,0,"storageBuffer","vertex","NodeBuffer_4050"],
1734
1752
  [62,0,"texture","fragment","nodeUniform1"],
1735
1753
  [63,0,"mat3","fragment","nodeUniform2"],
1736
1754
  [64,0,"float","fragment","nodeUniform3"],
@@ -1740,9 +1758,10 @@ export default {
1740
1758
  [43,0,"float","fragment","nodeUniform7"],
1741
1759
  [27,0,"color","fragment","nodeUniform8"],
1742
1760
  [67,0,"vec2","vertex","nodeUniform9"],
1743
- [68,0,"storageBuffer","vertex","NodeBuffer_3929"],
1744
- [69,0,"vec2","vertex","nodeUniform11"],
1745
- [70,0,"float","vertex","nodeUniform12"]
1761
+ [68,0,"storageBuffer","vertex","NodeBuffer_4031"],
1762
+ [1,0,"vec2","vertex","nodeUniform11"],
1763
+ [69,0,"vec2","vertex","nodeUniform12"],
1764
+ [70,0,"float","vertex","nodeUniform13"]
1746
1765
  ],
1747
1766
  "fragment": 7,
1748
1767
  "hardwareClipping": false,
@@ -1758,7 +1777,7 @@ export default {
1758
1777
  "attributes": 2,
1759
1778
  "compute": null,
1760
1779
  "declarations": [
1761
- [72,0,"storageBuffer","vertex","NodeBuffer_3811"],
1780
+ [72,0,"storageBuffer","vertex","NodeBuffer_3879"],
1762
1781
  [73,0,"texture","fragment","nodeUniform1"],
1763
1782
  [74,0,"mat3","fragment","nodeUniform2"],
1764
1783
  [75,0,"float","fragment","nodeUniform3"],
@@ -1768,9 +1787,10 @@ export default {
1768
1787
  [43,0,"float","fragment","nodeUniform7"],
1769
1788
  [27,0,"color","fragment","nodeUniform8"],
1770
1789
  [78,0,"vec2","vertex","nodeUniform9"],
1771
- [79,0,"storageBuffer","vertex","NodeBuffer_3792"],
1772
- [80,0,"vec2","vertex","nodeUniform11"],
1773
- [81,0,"float","vertex","nodeUniform12"]
1790
+ [79,0,"storageBuffer","vertex","NodeBuffer_3860"],
1791
+ [1,0,"vec2","vertex","nodeUniform11"],
1792
+ [80,0,"vec2","vertex","nodeUniform12"],
1793
+ [81,0,"float","vertex","nodeUniform13"]
1774
1794
  ],
1775
1795
  "fragment": 7,
1776
1796
  "hardwareClipping": false,
@@ -1827,16 +1847,16 @@ export default {
1827
1847
  }
1828
1848
  ],
1829
1849
  "three": "0.185.1",
1830
- "threeBlocks": "0.2.0",
1850
+ "threeBlocks": "0.6.0-alpha.320.g7e6e67cd7214",
1831
1851
  "updatePlans": [
1832
1852
  [2,5,3,6,7,8],
1833
1853
  [],
1834
1854
  [2,5,3,6,7,10],
1835
1855
  [2,5,3,6,7,28,10,29,30,14,31,32,33,34,35,36,17,18,21,22,24,25],
1836
- [7,38,48,10,49,33,34,35,36,5,17,18,3,21,22,24,25],
1837
- [7,51,60,10,49,33,34,35,36,5,17,18,3,21,22,24,25],
1838
- [7,62,71,10,49,33,34,35,36,5,17,18,3,21,22,24,25],
1839
- [7,73,82,10,49,33,34,35,36,5,17,18,3,21,22,24,25],
1856
+ [7,8,38,48,10,49,33,34,35,36,5,17,18,3,21,22,24,25],
1857
+ [7,8,51,60,10,49,33,34,35,36,5,17,18,3,21,22,24,25],
1858
+ [7,8,62,71,10,49,33,34,35,36,5,17,18,3,21,22,24,25],
1859
+ [7,8,73,82,10,49,33,34,35,36,5,17,18,3,21,22,24,25],
1840
1860
  [2,5,3,6,7,28,10,29,30,14,31,32,33,34,35,36,17,18,83,89,90,91,92,21,22,24,25],
1841
1861
  [93]
1842
1862
  ],
@@ -1,28 +1,28 @@
1
1
  {
2
- "adapter": "WebGL adapter",
3
- "measuredAt": "2026-07-29T10:15:55.615Z",
4
- "platform": "darwin/arm64",
5
- "receiptHash": "e4b1717cc4098bf201e3c5d3ba6dbc28e0057324084473f78cde13be1b32b146",
6
- "scenes": {
7
- "text": {
8
- "avoidedBuildMs": 31.299999952316284,
9
- "builds": 8,
10
- "liveBuildMs": 31.299999952316284,
11
- "precompiledBuildMs": 0,
12
- "runs": 1,
13
- "setupMeasured": false,
14
- "spreadMs": 0
15
- },
16
- "text.webgl": {
17
- "avoidedBuildMs": 37.09999990463257,
18
- "builds": 4,
19
- "liveBuildMs": 37.09999990463257,
20
- "precompiledBuildMs": 0,
21
- "runs": 1,
22
- "setupMeasured": false,
23
- "spreadMs": 0
24
- }
25
- },
26
- "schemaVersion": 3,
27
- "source": "committed-capture"
2
+ "adapter": "WebGL adapter",
3
+ "measuredAt": "2026-08-05T13:44:22.734Z",
4
+ "platform": "darwin/arm64",
5
+ "receiptHash": "da085a5a5b8ed12d1b193d8b8ebc2edf24d470575e523176783fc8be9ba4a95c",
6
+ "scenes": {
7
+ "text": {
8
+ "avoidedBuildMs": 23.09999990463257,
9
+ "builds": 8,
10
+ "liveBuildMs": 23.09999990463257,
11
+ "precompiledBuildMs": 0,
12
+ "runs": 1,
13
+ "setupMeasured": false,
14
+ "spreadMs": 0
15
+ },
16
+ "text.webgl": {
17
+ "avoidedBuildMs": 23.59999990463257,
18
+ "builds": 4,
19
+ "liveBuildMs": 23.59999990463257,
20
+ "precompiledBuildMs": 0,
21
+ "runs": 1,
22
+ "setupMeasured": false,
23
+ "spreadMs": 0
24
+ }
25
+ },
26
+ "schemaVersion": 3,
27
+ "source": "committed-capture"
28
28
  }