import type { GPUTextureHandle } from './texture.js'; import type { ShaderType } from './material-asset.js'; export interface MaterialParams { albedo?: [number, number, number, number]; metallic?: number; roughness?: number; albedoTexture?: GPUTextureHandle; emissive?: [number, number, number]; emissiveIntensity?: number; normalTexture?: GPUTextureHandle; metallicRoughnessTexture?: GPUTextureHandle; splatSharpness?: number; /** Fragments with alpha below this value are discarded. 0 = no cutoff. */ alphaCutoff?: number; texTilingX?: number; texTilingY?: number; } export interface Material { albedo: Float32Array; metallic: number; roughness: number; emissive: Float32Array; emissiveIntensity: number; /** Terrain splat sharpness exponent (1 = linear, higher = sharper). Default 1. */ splatSharpness: number; /** Fragments with alpha below this value are discarded. 0 = no cutoff. */ alphaCutoff: number; texTilingX: number; texTilingY: number; dirty: boolean; uniformBuffer: GPUBuffer | null; bindGroup: GPUBindGroup | null; albedoTexture: GPUTextureHandle | null; normalTexture: GPUTextureHandle | null; metallicRoughnessTexture: GPUTextureHandle | null; textureVersion: number; /** Shader type for this material. Default 'pbr'. */ shaderType: ShaderType; /** Path to custom .wgsl fragment shader (when shaderType === 'custom'). */ customShaderPath: string | null; /** GPU buffer for custom shader uniforms. */ customUniformBuffer: GPUBuffer | null; /** CPU-side data for custom shader uniforms. */ customUniformData: Float32Array | null; /** Texture handles keyed by @texture name. */ customTextures: Map; /** Whether custom uniform data needs upload. */ customDirty: boolean; } /** * Bytes: vec4 albedo(16) + f32 metallic(4) + f32 roughness(4) + 8B pad * + vec4 emissive(16: rgb + intensity in w) * + vec2 texTiling(8) + 8B pad = 64 */ export declare const MATERIAL_UNIFORM_SIZE = 64; export declare function createMaterial(params?: MaterialParams): Material; /** * Write material uniforms into a Float32Array for GPU upload. * Layout: [albedo(4), metallic, roughness, splatSharpness, alphaCutoff, * emissive.rgb(3), emissiveIntensity, texTilingX, texTilingY, pad, pad] */ export declare function writeMaterialUniforms(out: Float32Array, mat: Material): void; //# sourceMappingURL=material.d.ts.map