Luxar Viewer API Documentation - v2026.9.22
    Preparing search index...

    Function requireTslMaterials

    • The already-loaded registry, for synchronous consumers.

      Throws when the WebGPU path is active but loadTslMaterials() has not resolved yet. This must not degrade to the GLSL implementations: a ShaderMaterial does not render at all under WebGPURenderer (see BROWSER_SUPPORT_POLICY.md), so a silent fallback would paint blank quads and read as a rendering bug rather than the wiring bug it is.

      Returns {
          materials: {
              point: typeof PointTSLMaterial;
              line: typeof LineTSLMaterial;
              gsplat: typeof GSplatTSLMaterial;
              mesh: typeof MeshTSLMaterial;
              meshPhysical: typeof PhysicalMeshTSLMaterial;
          };
          environment: {
              PMREMGenerator: typeof PMREMGenerator;
              CubeRenderTarget: typeof CubeRenderTarget;
          };
          picking: {
              point: typeof PointPickingTSLMaterial;
              line: typeof LinePickingTSLMaterial;
              gsplat: typeof GSplatPickingTSLMaterial;
              mesh: typeof MeshPickingTSLMaterial;
          };
          mega: typeof MegaShaderTSLMaterial;
          factories: {
              point: {
                  pointWebGPUFactory: (
                      nodes: PointTSLNodes,
                      config?: PointTSLConfig,
                      outMaterial?: NodeMaterial,
                  ) => NodeMaterial;
                  buildPointTSLNodesFromUniforms: (
                      uniforms: Record<string, THREE.IUniform>,
                      config?: PointTSLConfig,
                  ) => PointTSLNodes;
              };
              line: {
                  lineWebGPUFactory: (
                      nodes: LineTSLNodes,
                      config?: LineTSLConfig,
                      outMaterial?: NodeMaterial,
                  ) => NodeMaterial;
                  buildLineTSLNodesFromUniforms: (
                      uniforms: Record<string, THREE.IUniform>,
                      config?: LineTSLConfig,
                  ) => LineTSLNodes;
              };
              capsuleLine: {
                  capsuleLineWebGPUFactory: (
                      nodes: LineTSLNodes,
                      config?: LineTSLConfig,
                      outMaterial?: NodeMaterial,
                  ) => NodeMaterial;
                  buildLineTSLNodesFromUniforms: (
                      uniforms: Record<string, THREE.IUniform>,
                      config?: LineTSLConfig,
                  ) => LineTSLNodes;
              };
              gsplat: {
                  gsplatWebGPUFactory: (
                      nodes: GSplatTSLNodes,
                      config?: GSplatTSLConfig,
                      outMaterial?: NodeMaterial,
                  ) => NodeMaterial;
                  buildGSplatTSLNodesFromUniforms: (
                      uniforms: Record<string, THREE.IUniform>,
                  ) => GSplatTSLNodes;
              };
              mesh: {
                  meshWebGPUFactory: (
                      nodes: MeshTSLNodes,
                      config?: MeshTSLConfig,
                      outMaterial?: NodeMaterial,
                  ) => NodeMaterial;
                  buildMeshTSLNodesFromUniforms: (
                      uniforms: Record<string, THREE.IUniform>,
                      config?: MeshTSLConfig,
                  ) => MeshTSLNodes;
              };
              mega: {
                  megaWebGPUFactory: (
                      uniforms: Record<string, THREE.IUniform>,
                      config?: MegaTSLConfig,
                      outMaterial?: NodeMaterial,
                  ) => NodeMaterial;
              };
              pickPoint: {
                  pointPickWebGPUFactory: (
                      nodes: PointPickTSLNodes,
                      outMaterial?: NodeMaterial,
                  ) => NodeMaterial;
                  buildPointPickTSLNodesFromUniforms: (
                      uniforms: Record<string, THREE.IUniform>,
                  ) => PointPickTSLNodes;
              };
              pickLine: {
                  linePickWebGPUFactory: (
                      nodes: LinePickTSLNodes,
                      config?: LinePickTSLConfig,
                      outMaterial?: NodeMaterial,
                  ) => NodeMaterial;
                  buildLinePickTSLNodesFromUniforms: (
                      uniforms: Record<string, THREE.IUniform>,
                  ) => LinePickTSLNodes;
              };
              pickCapsuleLine: {
                  capsuleLinePickWebGPUFactory: (
                      nodes: LinePickTSLNodes,
                      config?: CapsuleLinePickTSLConfig,
                      outMaterial?: NodeMaterial,
                  ) => NodeMaterial;
                  buildLinePickTSLNodesFromUniforms: (
                      uniforms: Record<string, THREE.IUniform>,
                  ) => LinePickTSLNodes;
              };
              pickGsplat: {
                  gsplatPickWebGPUFactory: (
                      nodes: GSplatPickTSLNodes,
                      outMaterial?: NodeMaterial,
                  ) => NodeMaterial;
                  buildGSplatPickTSLNodesFromUniforms: (
                      uniforms: Record<string, THREE.IUniform>,
                  ) => GSplatPickTSLNodes;
              };
              pickMesh: {
                  meshPickWebGPUFactory: (
                      nodes: MeshPickTSLNodes,
                      outMaterial?: NodeMaterial,
                  ) => NodeMaterial;
                  buildMeshPickTSLNodesFromUniforms: (
                      uniforms: Record<string, THREE.IUniform>,
                  ) => MeshPickTSLNodes;
              };
              bloom: {
                  bloomThresholdWebGPUFactory: (
                      uniforms: Record<string, THREE.IUniform>,
                  ) => NodeMaterial;
                  bloomDownsampleWebGPUFactory: (
                      uniforms: Record<string, THREE.IUniform>,
                  ) => NodeMaterial;
                  bloomUpsampleWebGPUFactory: (
                      uniforms: Record<string, THREE.IUniform>,
                  ) => NodeMaterial;
              };
              fxaa: {
                  fxaaWebGPUFactory: (
                      uniforms: Record<string, THREE.IUniform>,
                  ) => NodeMaterial;
              };
          };
      }

      • Readonlymaterials: {
            point: typeof PointTSLMaterial;
            line: typeof LineTSLMaterial;
            gsplat: typeof GSplatTSLMaterial;
            mesh: typeof MeshTSLMaterial;
            meshPhysical: typeof PhysicalMeshTSLMaterial;
        }

        Visual material classes, keyed by geometry kind.

        • Readonlypoint: typeof PointTSLMaterial
        • Readonlyline: typeof LineTSLMaterial
        • Readonlygsplat: typeof GSplatTSLMaterial
        • Readonlymesh: typeof MeshTSLMaterial
        • ReadonlymeshPhysical: typeof PhysicalMeshTSLMaterial

          The physical mesh family — three's MeshPhysicalNodeMaterial behind the Luxar leaf-material surface. Its own key rather than a variant of mesh, because none of the house contracts (codegen snapshots, per-epoch shading variant, blend-mode defines) apply to it; picking still uses picking.mesh.

      • Readonlyenvironment: {
            PMREMGenerator: typeof PMREMGenerator;
            CubeRenderTarget: typeof CubeRenderTarget;
        }

        Backend-specific scene-environment tooling (rendering/environment/).

      • Readonlypicking: {
            point: typeof PointPickingTSLMaterial;
            line: typeof LinePickingTSLMaterial;
            gsplat: typeof GSplatPickingTSLMaterial;
            mesh: typeof MeshPickingTSLMaterial;
        }

        Picking material classes, keyed by geometry kind.

      • Readonlymega: typeof MegaShaderTSLMaterial

        The single post-processing mega-shader material class.

      • Readonlyfactories: {
            point: {
                pointWebGPUFactory: (
                    nodes: PointTSLNodes,
                    config?: PointTSLConfig,
                    outMaterial?: NodeMaterial,
                ) => NodeMaterial;
                buildPointTSLNodesFromUniforms: (
                    uniforms: Record<string, THREE.IUniform>,
                    config?: PointTSLConfig,
                ) => PointTSLNodes;
            };
            line: {
                lineWebGPUFactory: (
                    nodes: LineTSLNodes,
                    config?: LineTSLConfig,
                    outMaterial?: NodeMaterial,
                ) => NodeMaterial;
                buildLineTSLNodesFromUniforms: (
                    uniforms: Record<string, THREE.IUniform>,
                    config?: LineTSLConfig,
                ) => LineTSLNodes;
            };
            capsuleLine: {
                capsuleLineWebGPUFactory: (
                    nodes: LineTSLNodes,
                    config?: LineTSLConfig,
                    outMaterial?: NodeMaterial,
                ) => NodeMaterial;
                buildLineTSLNodesFromUniforms: (
                    uniforms: Record<string, THREE.IUniform>,
                    config?: LineTSLConfig,
                ) => LineTSLNodes;
            };
            gsplat: {
                gsplatWebGPUFactory: (
                    nodes: GSplatTSLNodes,
                    config?: GSplatTSLConfig,
                    outMaterial?: NodeMaterial,
                ) => NodeMaterial;
                buildGSplatTSLNodesFromUniforms: (
                    uniforms: Record<string, THREE.IUniform>,
                ) => GSplatTSLNodes;
            };
            mesh: {
                meshWebGPUFactory: (
                    nodes: MeshTSLNodes,
                    config?: MeshTSLConfig,
                    outMaterial?: NodeMaterial,
                ) => NodeMaterial;
                buildMeshTSLNodesFromUniforms: (
                    uniforms: Record<string, THREE.IUniform>,
                    config?: MeshTSLConfig,
                ) => MeshTSLNodes;
            };
            mega: {
                megaWebGPUFactory: (
                    uniforms: Record<string, THREE.IUniform>,
                    config?: MegaTSLConfig,
                    outMaterial?: NodeMaterial,
                ) => NodeMaterial;
            };
            pickPoint: {
                pointPickWebGPUFactory: (
                    nodes: PointPickTSLNodes,
                    outMaterial?: NodeMaterial,
                ) => NodeMaterial;
                buildPointPickTSLNodesFromUniforms: (
                    uniforms: Record<string, THREE.IUniform>,
                ) => PointPickTSLNodes;
            };
            pickLine: {
                linePickWebGPUFactory: (
                    nodes: LinePickTSLNodes,
                    config?: LinePickTSLConfig,
                    outMaterial?: NodeMaterial,
                ) => NodeMaterial;
                buildLinePickTSLNodesFromUniforms: (
                    uniforms: Record<string, THREE.IUniform>,
                ) => LinePickTSLNodes;
            };
            pickCapsuleLine: {
                capsuleLinePickWebGPUFactory: (
                    nodes: LinePickTSLNodes,
                    config?: CapsuleLinePickTSLConfig,
                    outMaterial?: NodeMaterial,
                ) => NodeMaterial;
                buildLinePickTSLNodesFromUniforms: (
                    uniforms: Record<string, THREE.IUniform>,
                ) => LinePickTSLNodes;
            };
            pickGsplat: {
                gsplatPickWebGPUFactory: (
                    nodes: GSplatPickTSLNodes,
                    outMaterial?: NodeMaterial,
                ) => NodeMaterial;
                buildGSplatPickTSLNodesFromUniforms: (
                    uniforms: Record<string, THREE.IUniform>,
                ) => GSplatPickTSLNodes;
            };
            pickMesh: {
                meshPickWebGPUFactory: (
                    nodes: MeshPickTSLNodes,
                    outMaterial?: NodeMaterial,
                ) => NodeMaterial;
                buildMeshPickTSLNodesFromUniforms: (
                    uniforms: Record<string, THREE.IUniform>,
                ) => MeshPickTSLNodes;
            };
            bloom: {
                bloomThresholdWebGPUFactory: (
                    uniforms: Record<string, THREE.IUniform>,
                ) => NodeMaterial;
                bloomDownsampleWebGPUFactory: (
                    uniforms: Record<string, THREE.IUniform>,
                ) => NodeMaterial;
                bloomUpsampleWebGPUFactory: (
                    uniforms: Record<string, THREE.IUniform>,
                ) => NodeMaterial;
            };
            fxaa: {
                fxaaWebGPUFactory: (
                    uniforms: Record<string, THREE.IUniform>,
                ) => NodeMaterial;
            };
        }

        Graph factories, for the ShaderSource.webgpu closures. Those closures stay next to their GLSL twin (they carry shader-specific notes about reading build-time uniforms) and pull the factory from here instead of importing it, which is what actually cuts the eager edge.

        • Readonlypoint: {
              pointWebGPUFactory: (
                  nodes: PointTSLNodes,
                  config?: PointTSLConfig,
                  outMaterial?: NodeMaterial,
              ) => NodeMaterial;
              buildPointTSLNodesFromUniforms: (
                  uniforms: Record<string, THREE.IUniform>,
                  config?: PointTSLConfig,
              ) => PointTSLNodes;
          }
        • Readonlyline: {
              lineWebGPUFactory: (
                  nodes: LineTSLNodes,
                  config?: LineTSLConfig,
                  outMaterial?: NodeMaterial,
              ) => NodeMaterial;
              buildLineTSLNodesFromUniforms: (
                  uniforms: Record<string, THREE.IUniform>,
                  config?: LineTSLConfig,
              ) => LineTSLNodes;
          }
          • lineWebGPUFactory: (
                nodes: LineTSLNodes,
                config?: LineTSLConfig,
                outMaterial?: NodeMaterial,
            ) => NodeMaterial
          • buildLineTSLNodesFromUniforms: (
                uniforms: Record<string, THREE.IUniform>,
                config?: LineTSLConfig,
            ) => LineTSLNodes
        • ReadonlycapsuleLine: {
              capsuleLineWebGPUFactory: (
                  nodes: LineTSLNodes,
                  config?: LineTSLConfig,
                  outMaterial?: NodeMaterial,
              ) => NodeMaterial;
              buildLineTSLNodesFromUniforms: (
                  uniforms: Record<string, THREE.IUniform>,
                  config?: LineTSLConfig,
              ) => LineTSLNodes;
          }
          • capsuleLineWebGPUFactory: (
                nodes: LineTSLNodes,
                config?: LineTSLConfig,
                outMaterial?: NodeMaterial,
            ) => NodeMaterial
          • buildLineTSLNodesFromUniforms: (
                uniforms: Record<string, THREE.IUniform>,
                config?: LineTSLConfig,
            ) => LineTSLNodes
        • Readonlygsplat: {
              gsplatWebGPUFactory: (
                  nodes: GSplatTSLNodes,
                  config?: GSplatTSLConfig,
                  outMaterial?: NodeMaterial,
              ) => NodeMaterial;
              buildGSplatTSLNodesFromUniforms: (
                  uniforms: Record<string, THREE.IUniform>,
              ) => GSplatTSLNodes;
          }
          • gsplatWebGPUFactory: (
                nodes: GSplatTSLNodes,
                config?: GSplatTSLConfig,
                outMaterial?: NodeMaterial,
            ) => NodeMaterial
          • buildGSplatTSLNodesFromUniforms: (uniforms: Record<string, THREE.IUniform>) => GSplatTSLNodes
        • Readonlymesh: {
              meshWebGPUFactory: (
                  nodes: MeshTSLNodes,
                  config?: MeshTSLConfig,
                  outMaterial?: NodeMaterial,
              ) => NodeMaterial;
              buildMeshTSLNodesFromUniforms: (
                  uniforms: Record<string, THREE.IUniform>,
                  config?: MeshTSLConfig,
              ) => MeshTSLNodes;
          }
          • meshWebGPUFactory: (
                nodes: MeshTSLNodes,
                config?: MeshTSLConfig,
                outMaterial?: NodeMaterial,
            ) => NodeMaterial
          • buildMeshTSLNodesFromUniforms: (
                uniforms: Record<string, THREE.IUniform>,
                config?: MeshTSLConfig,
            ) => MeshTSLNodes
        • Readonlymega: {
              megaWebGPUFactory: (
                  uniforms: Record<string, THREE.IUniform>,
                  config?: MegaTSLConfig,
                  outMaterial?: NodeMaterial,
              ) => NodeMaterial;
          }
          • megaWebGPUFactory: (
                uniforms: Record<string, THREE.IUniform>,
                config?: MegaTSLConfig,
                outMaterial?: NodeMaterial,
            ) => NodeMaterial
        • ReadonlypickPoint: {
              pointPickWebGPUFactory: (
                  nodes: PointPickTSLNodes,
                  outMaterial?: NodeMaterial,
              ) => NodeMaterial;
              buildPointPickTSLNodesFromUniforms: (
                  uniforms: Record<string, THREE.IUniform>,
              ) => PointPickTSLNodes;
          }
          • pointPickWebGPUFactory: (nodes: PointPickTSLNodes, outMaterial?: NodeMaterial) => NodeMaterial
          • buildPointPickTSLNodesFromUniforms: (uniforms: Record<string, THREE.IUniform>) => PointPickTSLNodes
        • ReadonlypickLine: {
              linePickWebGPUFactory: (
                  nodes: LinePickTSLNodes,
                  config?: LinePickTSLConfig,
                  outMaterial?: NodeMaterial,
              ) => NodeMaterial;
              buildLinePickTSLNodesFromUniforms: (
                  uniforms: Record<string, THREE.IUniform>,
              ) => LinePickTSLNodes;
          }
        • ReadonlypickCapsuleLine: {
              capsuleLinePickWebGPUFactory: (
                  nodes: LinePickTSLNodes,
                  config?: CapsuleLinePickTSLConfig,
                  outMaterial?: NodeMaterial,
              ) => NodeMaterial;
              buildLinePickTSLNodesFromUniforms: (
                  uniforms: Record<string, THREE.IUniform>,
              ) => LinePickTSLNodes;
          }
        • ReadonlypickGsplat: {
              gsplatPickWebGPUFactory: (
                  nodes: GSplatPickTSLNodes,
                  outMaterial?: NodeMaterial,
              ) => NodeMaterial;
              buildGSplatPickTSLNodesFromUniforms: (
                  uniforms: Record<string, THREE.IUniform>,
              ) => GSplatPickTSLNodes;
          }
          • gsplatPickWebGPUFactory: (nodes: GSplatPickTSLNodes, outMaterial?: NodeMaterial) => NodeMaterial
          • buildGSplatPickTSLNodesFromUniforms: (uniforms: Record<string, THREE.IUniform>) => GSplatPickTSLNodes
        • ReadonlypickMesh: {
              meshPickWebGPUFactory: (
                  nodes: MeshPickTSLNodes,
                  outMaterial?: NodeMaterial,
              ) => NodeMaterial;
              buildMeshPickTSLNodesFromUniforms: (
                  uniforms: Record<string, THREE.IUniform>,
              ) => MeshPickTSLNodes;
          }
          • meshPickWebGPUFactory: (nodes: MeshPickTSLNodes, outMaterial?: NodeMaterial) => NodeMaterial
          • buildMeshPickTSLNodesFromUniforms: (uniforms: Record<string, THREE.IUniform>) => MeshPickTSLNodes
        • Readonlybloom: {
              bloomThresholdWebGPUFactory: (
                  uniforms: Record<string, THREE.IUniform>,
              ) => NodeMaterial;
              bloomDownsampleWebGPUFactory: (
                  uniforms: Record<string, THREE.IUniform>,
              ) => NodeMaterial;
              bloomUpsampleWebGPUFactory: (
                  uniforms: Record<string, THREE.IUniform>,
              ) => NodeMaterial;
          }
          • bloomThresholdWebGPUFactory: (uniforms: Record<string, THREE.IUniform>) => NodeMaterial
          • bloomDownsampleWebGPUFactory: (uniforms: Record<string, THREE.IUniform>) => NodeMaterial
          • bloomUpsampleWebGPUFactory: (uniforms: Record<string, THREE.IUniform>) => NodeMaterial
        • Readonlyfxaa: {
              fxaaWebGPUFactory: (
                  uniforms: Record<string, THREE.IUniform>,
              ) => NodeMaterial;
          }
          • fxaaWebGPUFactory: (uniforms: Record<string, THREE.IUniform>) => NodeMaterial