import type { ComputeNode, Storage3DTexture } from 'three/webgpu'; import type { TSLBoolNode, TSLFloatNode, TSLVec3Node } from '../../../types/tsl.cjs'; interface SmokeTexturePair { read: Storage3DTexture; write: Storage3DTexture; } interface SmokeScalarTextureResource { texture: Storage3DTexture; } /** Smoke resources consumed by the solid-aware pressure and masking graphs. */ export interface SmokeSolidBoundarySource { simRes: number; dyeRes: number; neighborStride: TSLFloatNode; subcellSolidFractions: boolean; _uUseBoundaries: TSLBoolNode; inverseCellSizeSquared: TSLVec3Node; pressureFactor: TSLFloatNode; sorOmega: TSLFloatNode; _velocity3D: SmokeTexturePair; _density3D: SmokeTexturePair; _pressure3D: SmokeScalarTextureResource; _divergence3D: SmokeScalarTextureResource; } /** Solid-aware smoke passes, including the legacy pressure/gradient aliases. */ export interface SmokeSolidBoundaryPasses { applyReadToWrite: ComputeNode; applyWriteToRead: ComputeNode; divergenceRead: ComputeNode; divergenceWrite: ComputeNode; pressureRed: ComputeNode; pressureBlack: ComputeNode; pressureReadRed: ComputeNode; pressureWriteRed: ComputeNode; pressureReadBlack: ComputeNode; pressureWriteBlack: ComputeNode; gradientVelocityRead: ComputeNode; gradientVelocityWrite: ComputeNode; gradientPressureReadVelocityRead: ComputeNode; gradientPressureWriteVelocityRead: ComputeNode; gradientPressureReadVelocityWrite: ComputeNode; gradientPressureWriteVelocityWrite: ComputeNode; densityMaskReadToWrite: ComputeNode; densityMaskWriteToRead: ComputeNode; } /** * Build the solid-aware projection passes (divergence, pressure, gradient, velocity/density * masking) used when a collider or SDF boundary field is active. * * Pressure is solved in place on the volume's single r32float texture, so only one red and one * black pipeline exist; the legacy Read/Write key pairs are kept as aliases for external drivers * that still select passes off `_pressure3D.phase`. */ declare function createSmokeSolidBoundaryPasses(smoke: SmokeSolidBoundarySource, solidTexture: Storage3DTexture): SmokeSolidBoundaryPasses; export { createSmokeSolidBoundaryPasses };