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

    Variable TSL_REGISTRYConst

    TSL_REGISTRY: {
        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;
            };
        };
    } = ...

    Everything the WebGPU path needs, in one value.

    Grouped by role rather than by directory so call sites read as registry.materials.point / registry.factories.pickLine — the shape the MaterialManager dispatch tables and the ShaderSource.webgpu closures actually index by.

    Type Declaration

    • 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