import type { LC, LiveElement } from '@use-gpu/live'; import type { ShaderModule, ShaderSource } from '@use-gpu/shader'; export type ShaderLitMaterialProps = { /** Flat shader, for unlit passes (e.g. shadow map) fn getFragment(color: vec4, uv: vec4, st: vec4) -> vec4 */ fragment: ShaderModule; /** Surface shader, for material properties fn getSurface( color: vec4, uv: vec4, st: vec4, normal: vec4, tangent: vec4, position: vec4, coord: vec4, ) -> SurfaceFragment */ surface: ShaderModule; /** Depth-only shader, for optimized shadow passes (optional) fn getDepth( alpha: f32, uv: vec4, st: vec4, position: vec4, ) -> DepthFragment; */ depth?: ShaderModule; /** Environment shader, for reflections fn getEnvironment( N: vec3, V: vec3, surface: SurfaceFragment, ) -> vec3 */ environment?: ShaderModule; /** Light fragment shader, for combining lights. e.g. `getLitFragment`. fn getLight(surface: SurfaceFragment) -> vec4 */ light?: ShaderModule; /** Material lighting shader, for lighting model. e.g. `applyPBRMaterial`. fn applyMaterial( N: vec3, L: vec3, V: vec3, surface: SurfaceFragment, ) -> vec4 */ apply?: ShaderModule; render?: (material: Record>) => LiveElement; children?: LiveElement | ((material: Record>) => LiveElement); }; export declare const ShaderLitMaterial: LC;