import type { TSLBoolInput, TSLFunction, TSLMat4Node, TSLVec3Node, TSLVec4Node } from '../types/tsl.cjs'; export interface BillboardingConfig { position?: TSLVec3Node | null | undefined; horizontal?: TSLBoolInput | undefined; vertical?: TSLBoolInput | undefined; worldMatrixNode?: TSLMat4Node | undefined; } export interface WorldUpBillboardingConfig { up?: TSLVec3Node | undefined; position?: TSLVec3Node | null | undefined; worldMatrixNode?: TSLMat4Node | undefined; } export interface BillboardingFunction extends TSLFunction<[config: BillboardingConfig], TSLVec4Node> { (): TSLVec4Node; } export interface WorldUpBillboardingFunction extends TSLFunction<[config: WorldUpBillboardingConfig], TSLVec4Node> { (): TSLVec4Node; } /** * This can be used to achieve a billboarding behavior for flat meshes. That means they are * oriented always towards the camera. * * ```js * material.vertexNode = billboarding(); * ``` * * @tsl * @function * @param {Object} config - The configuration object. * @param {?Node} [config.position=null] - Can be used to define the vertex positions in world space. * @param {boolean} [config.horizontal=true] - Whether to follow the camera rotation horizontally or not. * @param {boolean} [config.vertical=false] - Whether to follow the camera rotation vertically or not. * @return {Node} The updated vertex position in clip space. */ export declare const billboarding: BillboardingFunction; /** * Billboard that preserves world up (no camera roll). * Useful for impostors where the atlas already encodes view direction. * * @tsl * @function * @param {Object} [config] * @param {Node} [config.up=vec3(0,1,0)] - World up direction. * @param {Node} [config.position=null] - Optional world-space position override. * @param {Node} [config.worldMatrixNode=modelWorldMatrix] - World transform for scale. * @return {Node} The updated vertex position in clip space. */ export declare const worldUpBillboarding: WorldUpBillboardingFunction;