这是一个基于 Rust 和 wgpu 编写的 GPU 加速粉末沙盒游戏。 本项目将物理模拟与渲染进行了分离,在 CPU 端进行元胞自动机与流体物理的运算,在 GPU 的着色器中实现了 2D 全景光线追踪与热力学状态的可视化。
- 混合物理模拟:包含了受重力影响的粉末(沙子、泥土)、会扩散的流体(水)、反重力上升的气体(蒸汽)以及静态刚体(墙壁、木头)。
- 热力学与三态变化:物质之间具有真实的导热系数。水遇极寒会结冰,受热会沸腾化为蒸汽,蒸汽触碰冷壁会重新凝结成水滴。
- 2D 动态光影追踪:拥有可以被实体遮挡的上帝视角手电筒工具,光线穿透蒸汽和水幕时会产生体积透射衰减。火焰会自动照亮周围的空气。
- 矢量力场交互:包含了可以吹飞粒子和水花的人造风场,以及带有事件视界和引力透镜效果的黑洞。
- 红外热成像模式:可以在设置中开启 Heatmap 视图,直观查看当前世界的绝对温度分布。
游戏主要通过鼠标进行交互,同时提供了数字键以便快速切换工具。
| 快捷键 | 功能说明 |
|---|---|
| 鼠标左键 | 在画布上使用当前选中的工具(绘制/擦除/取色等) |
| 鼠标滚轮 | 在右侧的物质调色盘上滚动列表 |
ESC |
暂停世界时间,并打开系统设置面板 |
1 |
切换至:画笔工具 (Brush) |
2 |
切换至:橡皮擦工具 (Eraser) |
3 |
切换至:取色器工具 (Picker) - 吸取画面中的物质并自动切回画笔 |
4 |
切换至:油漆桶工具 (Bucket) - 智能填充封闭区域 |
5 |
切换至:手电筒工具 (Flashlight) - 提供 2D 动态光照视场 |
0 |
清空世界 (打开垃圾桶二次确认面板) |
除了基础的沙子、木头和水之外,调色盘中提供了一些具有特殊物理逻辑的材质:
- WIND GEN (风场发生器):绘制时,系统会记录你鼠标拖拽的方向和速度。放置后,它会持续向该方向吹出强风,可以吹散火焰或卷起水花。
- BLACK HOLE (黑洞):单次点击放置。黑洞具有白色的事件视界(吞噬一切物质与力场)和红色的引力范围(吸引周围的粉末和风)。
- HEAT SRC / COLD SRC (恒温热源/冷源):无法被破坏的温度源。热源会维持极高的温度并向外辐射热晕,可以直接蒸发水滴;冷源则会瞬间冻结接触到的水。
- SEED (种子):掉落在泥土或沙子上,吸收水分后会随机生长出不同形态的植物。
直接运行
在 Release 页面下载对应的压缩包。解压后,请确保 powdergame.exe 与 assets 文件夹处于同一级目录下,直接双击运行即可。
从源码编译 确保你的电脑已安装 Rust 开发环境。克隆本仓库后,在项目根目录下运行:
cargo run --release