M_Sim_Calc_Height_3_5 是连续性方程的高度更新步,M_Sim_Calc_Velocity_3_5 是动量/速度更新步,整体结构和 hfFluid 的浅水迭代框架一致(论文:https://matthias-research.github.io/pages/publications/hfFluid.pdf)。
Height 材质(高度迭代)
- 主更新在 Custom_3,代码是典型迎风通量离散:先按速度符号选上风高度,再算 x/y 通量散度,最后 h += source + dt*dhdt。见 .codex_tmp/material_t3d_aki/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat__M_Sim_Calc_Height_3_5.t3d:615。
- 输入映射很清晰:中心/邻居高度来自 MF_SimulationInfo 的 Volume 输出,速度来自 Velocity 输出拆分,dx/dt 来自参数。见 .codex_tmp/material_t3d_aki/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat__M_Sim_Calc_Height_3_5.t3d:619。
- 输出打包为 (velocity.xy, newHeight):AppendVector_3 + Multiply_5(乘了 Custom_4=1,等效直通)。见 .codex_tmp/material_t3d_aki/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat__M_Sim_Calc_Height_3_5.t3d:336、 .codex_tmp/material_t3d_aki/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat__M_Sim_Calc_Height_3_5.t3d:1285、Docs/MaterialGraph_Aki/M_Sim_Calc_Height_3_5/expanded/material_graph_expanded.json:603。
Velocity 材质(速度迭代)
- 主链路是:压力坡度/重力加速 -> 湿区掩码 -> 摩擦/阻尼 -> 限幅 -> 边界清零。
- 加速项:由中心和邻域水面差构建梯度,再乘 Gravity*DeltaTime,并用 MF_ClampMax2(AccelerationClamp) 限制。见 .codex_tmp/material_t3d_aki/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat__M_Sim_Calc_Velocity_3_5.t3d:300、 .codex_tmp/material_t3d_aki/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat__M_Sim_Calc_Velocity_3_5.t3d:1360、 .codex_tmp/material_t3d_aki/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat__M_Sim_Calc_Velocity_3_5.t3d:907。
- 湿区判定:MF_FluxRemoveFluid 按坡度符号选 W0/W1,再和 MinWater 比较输出 0/1 掩码。见 .codex_tmp/material_t3d_aki/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat__M_Sim_Calc_Velocity_3_5.t3d:1150、Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/functions/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat_Function__MF_FluxRemoveFluid.MF_FluxRemoveFluid.t3d:112。
- 干区清零:Custom_1 做 if (x>0) return v else 0。见 .codex_tmp/material_t3d_aki/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat__M_Sim_Calc_Velocity_3_5.t3d:690。
- 边界清零:Step_1 + TextureProperty 形成边界掩码后乘到速度上。见 .codex_tmp/material_t3d_aki/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat__M_Sim_Calc_Velocity_3_5.t3d:1600。
- 输出打包:AppendVector_5=(newVel.xy, volume) 写到 Emissive;Opacity 取 Foam。见 .codex_tmp/material_t3d_aki/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat__M_Sim_Calc_Velocity_3_5.t3d:422、 .codex_tmp/material_t3d_aki/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat__M_Sim_Calc_Velocity_3_5.t3d:1687。
SWE浅水方程:
高度迭代
论文主式:

离散后本质是“通量差分”,再显式欧拉:


M_Sim_Calc_Velocity_3_5 对应的是 hfFluid 的速度更新部分(Sec 2.1.3):
- 论文主公式(对应 Eq.(8)(9))


再做边界/干湿门控后输出。
- 每一项含义和节点对应
-
g:重力,Gravity 参数,见 Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/material_graph.json:700。
-
\Delta t:时间步长,DeltaTime 参数(多个分支各自使用),见 Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/material_graph.json:221。
-
\eta 与邻域采样:来自 MF_SimulationInfo(Offset 输入 + Height/WaterHeight/Velocity 输出),见 Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/functions/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat_Function__MF_SimulationInfo.MF_SimulationInfo.t3d:122、Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/functions/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat_Function__MF_SimulationInfo.MF_SimulationInfo.t3d:194、Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/functions/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat_Function__MF_SimulationInfo.MF_SimulationInfo.t3d:216。
-
\nabla\eta(坡度/梯度):由当前+邻域采样差分链路(MaterialFunctionCall_22/28/29 + Add/Subtract/Divide)构造,见函数调用位置 Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/material_graph.json:396、Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/material_graph.json:415、Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/material_graph.json:464。
-
a_{max}:AccelerationClamp,通过 MF_ClampMax2 限幅,见 Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/material_graph.json:658、Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/material_graph.json:668。
-
VelocityClamp:速度上限,通过另一个 MF_ClampMax2,见 Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/material_graph.json:169、Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/material_graph.json:179。
-
s_{wet}:干湿缩放(无水时抑制速度),由 MF_FluxRemoveFluid 输出 Scale,见 Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/material_graph.json:552、Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/material_graph.json:639,函数定义见 Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/functions/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat_Function__MF_FluxRemoveFluid.MF_FluxRemoveFluid.t3d:70、Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/functions/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat_Function__MF_FluxRemoveFluid.MF_FluxRemoveFluid.t3d:102。
-
Friction:与速度模长组成非线性衰减,见 Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/material_graph.json:494。
-
Damping:线性阻尼项 1−DampingΔ_t_,见 Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/material_graph.json:221。
1−DampingΔt
-
if (x>0) return v else 0:最终水量门控(Custom_1),见 Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/material_graph.json:160。
-
- 两个关键函数在数学上做了什么
-
MF_ClampMax2:v←v⋅min(1,∣v∣Max),即向量模长限幅。定义见 Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/functions/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat_Function__MF_ClampMax2.MF_ClampMax2.t3d:63、Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/functions/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat_Function__MF_ClampMax2.MF_ClampMax2.t3d:74。
v←v⋅min(1,Max∣v∣)
-
MF_FluxRemoveFluid:根据 Slope 选 W0/W1,再与 MinWater 比较输出 0/1 缩放。定义见 Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/functions/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat_Function__MF_FluxRemoveFluid.MF_FluxRemoveFluid.t3d:70、Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/functions/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat_Function__MF_FluxRemoveFluid.MF_FluxRemoveFluid.t3d:81、Docs/MaterialGraph_Aki/M_Sim_Calc_Velocity_3_5/functions/Game__Aki__Render__RuntimeBP__PCG__WaterSim__Mat_Function__MF_FluxRemoveFluid.MF_FluxRemoveFluid.t3d:92。
-
MAC 网格。
vy(i,j+1/2)
↑
┌─────────────┐
│ │
│ h(i,j) │ → vx(i+1/2,j)
│ │
└─────────────┘
↓
vy(i,j-1/2)
