import type { TSLFloatInput, TSLFloatNode, TSLFunction, TSLIntegerInput, TSLTextureInput, TSLVec2Node, TSLVec3Node } from '../types/tsl.cjs'; export type ParallaxHeightSampler = (coordinate: TSLVec2Node, dx: TSLVec2Node, dy: TSLVec2Node) => TSLFloatNode; export type ParallaxOcclusionArguments = [ v_uv: TSLVec2Node, dispTex: TSLTextureInput, parallaxScale?: TSLFloatInput, blueNoiseTex?: TSLTextureInput | null, minSamples?: TSLIntegerInput, maxSamples?: TSLIntegerInput, refineSteps?: TSLIntegerInput, edgeMargin?: TSLFloatInput ]; export type ParallaxSamplerArguments = [ v_uv: TSLVec2Node, parallaxScale?: TSLFloatInput, blueNoiseTex?: TSLTextureInput | null, minSamples?: TSLIntegerInput, maxSamples?: TSLIntegerInput, refineSteps?: TSLIntegerInput, edgeMargin?: TSLFloatInput ]; /** * Builds adaptive parallax-occlusion mapping from a height texture and returns displaced UVs * plus a depth offset. Optional blue-noise jitter reduces ray-march banding. */ declare const parallaxOcclusion: TSLFunction; /** * Build the same parallax-occlusion raymarch around an arbitrary height sampler. This lets * multi-frame/array sources reuse the POM implementation instead of pretending one texture * is the whole depth signal. * * @param {ParallaxHeightSampler} sampleHeight * @return {import('../types/tsl.js').TSLFunction<[v_uv: import('../types/tsl.js').TSLVec2Node, parallaxScale?: import('../types/tsl.js').TSLFloatInput, blueNoiseTex?: import('../types/tsl.js').TSLTextureInput|null, minSamples?: import('../types/tsl.js').TSLIntegerInput, maxSamples?: import('../types/tsl.js').TSLIntegerInput, refineSteps?: import('../types/tsl.js').TSLIntegerInput, edgeMargin?: import('../types/tsl.js').TSLFloatInput], import('../types/tsl.js').TSLVec3Node>} TSL function `(uv, scale, blueNoise, minSamples, maxSamples, refine, edge)`. */ export declare function parallaxOcclusionFromSampler(sampleHeight: ParallaxHeightSampler): TSLFunction; export { parallaxOcclusion };