FluidSimulation
Simulates and renders a deforming water surface with flow, drains, and buoyancy.
Properties
| Property | Type | Default |
|---|---|---|
Name | string | "FluidSimulation" |
Position | Vector3 | Vector3.new(0, 0, 0) |
Size | Vector3 | Vector3.new(20, 4, 20) |
SimResolution | number | 16 |
FlowRate | number | 0.7 |
WaterLevel | number | 0.5 |
Contained | boolean | true |
VisResolution | number | 32 |
WaveHeight | number | 0.12 |
WaveSpeed | number | 0.9 |
WaveScale | number | 0.45 |
WaveDirection | Vector2 | Vector2.new(1, 0.5) |
Color | Color3 | Color3.new(0.05, 0.35, 0.72) |
Roughness | number | 0.07 |
Transparency | number | 0.42 |
FlowDirection | Vector2 | Vector2.new(0, 0) |
FlowSpeed | number | 0.0 |
PhysicsEnabled | boolean | true |
BuoyancyFactor | number | 25.0 |
Dampening | number | 0.55 |
Container | any | nil |
FitContainer | boolean | false |
FillLevel | number | 0.85 |
Enabled | boolean | true |
Functions
`readPtr64`
`ptrFromStructField`
`normalize3`
`makeF32Buf`
`makeVec2Buf`
`waveDisplacement`
`waveNormal`
`ensureOffsets`
`simIndex`
`initGrid`
`sampleGrid`
`worldToNorm`
`surfaceYAt`
`totalWater`
`stepSimulation`
`updateDrains`
`buildWaveConfig`
`buildGrid_vis`
`buildIndices_vis`
`createMaterial`
`buildMesh`
`updateMeshVerts`
`syncShaderUniforms`
`syncToContainer`
`runBuoyancy`
`instance:SetWaterLevel`
Sets every simulation cell to a fill level from 0 to 1.
`instance:GetWaterLevel`
Returns the current average fill level from 0 to 1.
`instance:AddWater`
Adds water uniformly across the simulation surface.
`instance:RemoveWater`
Removes water uniformly across the simulation surface.
`instance:AddWaterAt`
Adds water to the simulation cell nearest a world-space XZ position.
`instance:RemoveWaterAt`
Removes water from the simulation cell nearest a world-space XZ position and returns the amount removed.
`instance:GetWaterHeight`
Returns the water surface Y position at a world-space XZ position.
`instance:IsPointSubmerged`
Returns whether a world-space point is inside the current water volume.
`instance:GetSubmergedFraction`
Returns how much of a part's height is submerged, from 0 to 1.
`instance:ConnectTo`
Connects this simulation to another so water can flow through a drain point.
`instance:Disconnect`
Removes all drain connections from this simulation to a target simulation.
`instance:Rebuild`
Rebuilds the render mesh and resets the simulation grid when already initialized.
`avgWater`
`addWaterUniform`
readPtr64
Arguments
buf: buffer, offset: numberReturns
ptrFromStructField
Arguments
structBuf: buffer, fieldOff: numberReturns
normalize3
Arguments
x: number, y: number, z: numberReturns
makeF32Buf
Arguments
v: numberReturns
makeVec2Buf
Arguments
x: number, y: numberReturns
waveDisplacement
Arguments
x: number, z: number, t: number, waves: { any }Returns
waveNormal
Arguments
x: number, z: number, t: number, waves: { any }Returns
ensureOffsets
Arguments
Returns
simIndex
Arguments
x: number, z: numberReturns
initGrid
Arguments
Returns
sampleGrid
Arguments
lx: number, lz: numberReturns
worldToNorm
Arguments
wx: number, wz: numberReturns
surfaceYAt
Arguments
wx: number, wz: number, t: number?Returns
totalWater
Arguments
Returns
stepSimulation
Arguments
dt: numberReturns
updateDrains
Arguments
dt: numberReturns
buildWaveConfig
Arguments
Returns
buildGrid_vis
Arguments
posX, posZ, halfW, halfL, resX, resZReturns
buildIndices_vis
Arguments
resX, resZReturns
createMaterial
Arguments
Returns
buildMesh
Arguments
Returns
updateMeshVerts
Arguments
t: numberReturns
syncShaderUniforms
Arguments
Returns
syncToContainer
Arguments
Returns
runBuoyancy
Arguments
dt: numberReturns
instance:SetWaterLevel
Sets every simulation cell to a fill level from 0 to 1.
Arguments
level: numberReturns
instance:GetWaterLevel
Returns the current average fill level from 0 to 1.
Arguments
Returns
numberinstance:AddWater
Adds water uniformly across the simulation surface.
Arguments
amount: numberReturns
instance:RemoveWater
Removes water uniformly across the simulation surface.
Arguments
amount: numberReturns
instance:AddWaterAt
Adds water to the simulation cell nearest a world-space XZ position.
Arguments
worldX: number, worldZ: number, amount: numberReturns
instance:RemoveWaterAt
Removes water from the simulation cell nearest a world-space XZ position and returns the amount removed.
Arguments
worldX: number, worldZ: number, amount: numberReturns
numberinstance:GetWaterHeight
Returns the water surface Y position at a world-space XZ position.
Arguments
worldX: number, worldZ: numberReturns
numberinstance:IsPointSubmerged
Returns whether a world-space point is inside the current water volume.
Arguments
worldPos: Vector3Returns
booleaninstance:GetSubmergedFraction
Returns how much of a part's height is submerged, from 0 to 1.
Arguments
part: anyReturns
numberinstance:ConnectTo
Connects this simulation to another so water can flow through a drain point.
Arguments
targetSim: any, worldX: number, worldZ: number, thresholdH: number?, flowMult: number?Returns
instance:Disconnect
Removes all drain connections from this simulation to a target simulation.
Arguments
targetSim: anyReturns
instance:Rebuild
Rebuilds the render mesh and resets the simulation grid when already initialized.
Arguments
Returns
avgWater
Arguments
Returns
addWaterUniform
Arguments
amount: numberReturns
API
instance:readPtr64(buf: buffer, offset: number)
instance:ptrFromStructField(structBuf: buffer, fieldOff: number)
instance:normalize3(x: number, y: number, z: number)
instance:makeF32Buf(v: number)
instance:makeVec2Buf(x: number, y: number)
instance:waveDisplacement(x: number, z: number, t: number, waves: { any })
instance:waveNormal(x: number, z: number, t: number, waves: { any })
instance:ensureOffsets()
instance:simIndex(x: number, z: number)
instance:initGrid()
instance:sampleGrid(lx: number, lz: number)
instance:worldToNorm(wx: number, wz: number)
instance:surfaceYAt(wx: number, wz: number, t: number?)
instance:totalWater()
instance:stepSimulation(dt: number)
instance:updateDrains(dt: number)
instance:buildWaveConfig()
instance:buildGrid_vis(posX, posZ, halfW, halfL, resX, resZ)
instance:buildIndices_vis(resX, resZ)
instance:createMaterial()
instance:buildMesh()
instance:updateMeshVerts(t: number)
instance:syncShaderUniforms()
instance:syncToContainer()
instance:runBuoyancy(dt: number)
instance:SetWaterLevel(level: number)
instance:GetWaterLevel(): number
instance:AddWater(amount: number)
instance:RemoveWater(amount: number)
instance:AddWaterAt(worldX: number, worldZ: number, amount: number)
instance:RemoveWaterAt(worldX: number, worldZ: number, amount: number): number
instance:GetWaterHeight(worldX: number, worldZ: number): number
instance:IsPointSubmerged(worldPos: Vector3): boolean
instance:GetSubmergedFraction(part: any): number
instance:ConnectTo(targetSim: any, worldX: number, worldZ: number, thresholdH: number?, flowMult: number?)
instance:Disconnect(targetSim: any)
instance:Rebuild()
instance:avgWater()
instance:addWaterUniform(amount: number)