import type { TSLMat3Node, TSLUniformNode } from '../../types/tsl.cjs'; import type { MPMMaterialModel, MPMMaterialParticleContext, MPMMaterialStressContext, MPMMaterialUpdateContext, MPMParticleFieldMap } from './MPMFluidModel.cjs'; /** Parameters for the Coulomb-capped granular material. */ export interface MPMGranularModelOptions { /** Tait pressure stiffness. */ stiffness?: number | undefined; /** Target particle density. */ restDensity?: number | undefined; /** Coulomb friction coefficient. */ friction?: number | undefined; /** Viscosity below the Coulomb yield cap. */ flowViscosity?: number | undefined; /** Fraction of symmetric APIC shear removed after each transfer. */ shearDamping?: number | undefined; } /** Mutable TSL uniforms owned by {@link MPMGranularModel}. */ export interface MPMGranularUniforms { /** Pressure stiffness uniform. */ stiffness: TSLUniformNode<'float', number>; /** Rest-density uniform. */ restDensity: TSLUniformNode<'float', number>; /** Coulomb friction uniform. */ friction: TSLUniformNode<'float', number>; /** Pre-yield viscosity uniform. */ flowViscosity: TSLUniformNode<'float', number>; /** Symmetric APIC damping uniform. */ shearDamping: TSLUniformNode<'float', number>; } /** * Drucker-Prager-lite granular material with no extra particle fields. * Pressure supplies the Coulomb yield cap; RPIC damping removes residual shear * while retaining the antisymmetric APIC spin used by render pose passes. */ export declare class MPMGranularModel implements MPMMaterialModel { name: 'granular'; particleFields: MPMParticleFieldMap; uniforms: MPMGranularUniforms; /** Create a granular material with mutable pressure, friction, and damping controls. */ constructor({ stiffness, restDensity, friction, flowViscosity, shearDamping, }?: MPMGranularModelOptions); initParticle({ particle }: MPMMaterialParticleContext): void; stress({ C, density }: MPMMaterialStressContext): TSLMat3Node; updateDeformation({ particle, C }: MPMMaterialUpdateContext): void; }