7 个版本 (4 个重大变更)
| 0.5.0 | 2021 年 8 月 31 日 |
|---|---|
| 0.4.3 | 2021 年 4 月 1 日 |
| 0.3.1 | 2021 年 3 月 13 日 |
| 0.2.4 | 2021 年 2 月 24 日 |
| 0.1.0 | 2021 年 2 月 20 日 |
#383 in 渲染
80KB
2K SLoC
pilka 🔩
Pilka 是一个跨平台的实时编码工具,用于创建着色器*演示,类似于 Bonzomatic、KodeLife 或 sh4der-jockey。
可用功能
- 热重载
- 保存着色器
- 截图
- 录制视频
- 后处理计算管线

如何使用
在当前状态下,pilka 尝试查找名为 shaders 的文件夹,其中包含文件 shader.vert 和 shader.frag,如果失败,pilka 将为您生成默认设置。然后,在您喜欢的代码编辑器(VS、emacs、vim、ed 等)中打开着色器,每次保存后,pilka 会获取更改。
控制
- F1: 打印帮助信息
- F2: 切换播放/暂停
- F3: 暂停并回退一帧
- F4: 暂停并前进一帧
- F5: 从帧 0 重新播放(
Time和Pos= 0) - F6: 打印参数
- F7: 切换分析器
- F8: 切换后端
- F10: 保存着色器
- F11: 截图
- F12: 开始/停止录制视频
- ESC: 退出应用程序
- 箭头键: 改变
Pos
参数
(per-draw-update)
| 名称 | 类型 | 范围 |
|---|---|---|
| 位置 | vec3 | (-∞, ∞) |
| 时间 | float | [0, ∞) |
| 分辨率 | vec2 | [0, a] |
| 鼠标 | vec2 | [-1, 1] |
| 鼠标按下 | bool | |
| 帧 | uint | |
| 时间差 | float | |
| 记录周期 | float | |
| 前一帧 | 纹理 |
标志
--record f32- 指定录制视频的持续时间--size u32xu32- 指定窗口大小并锁定调整大小--wgsl- 为wgsl着色器创建模板
选择后端
您可以使用变量 PILKA_BACKEND 选择要启动的后端。目前有“wgpu”和“ash”两种后端可用。如果变量的值不正确,将回滚到默认后端“wgpu”。
需求
需要Vulkan SDK。
在最新的macOS上,为了允许捕获声音输入(以便生成FFT纹理),您需要:打开系统偏好设置,点击安全与隐私,点击隐私标签,然后点击麦克风菜单项。确保 pilka 在列表中并勾选……呃,可能吧。我没有macOS。
安装
cargo install pilka
您也可以通过下载源代码并本地构建来安装应用程序。
# or through ssh git@github.com:pudnax/pilka.git
git clone https://github.com/pudnax/pilka.git
cd pilka
cargo install --path .
依赖项
winit 是Rust生态系统中的“默认”窗口库。并且它覆盖了大部分跨平台问题。
png 用于将截图编码为png文件。
notify 是一个文件监视器,并维护热重载。
naga 用于在运行时编译GLSL着色器。
ash 是Vulkan绑定。我选择 ash 是因为我将 pilka 视为一个学习项目,并希望接触尽可能多的未被触及的Vulkan。出于同样的原因,我没有使用 vulkano、erupt、vulkanism、vkvk。
wgpu 是针对不同图形API(如Vulkan、Metal、OpenGL)的GPU抽象,并作为除 ash 之外的主要后端。
puffin 是由 EmbarkStudios 使用Rust编写的范围分析器,我将它集成到 pilka 中以快速检查性能。
pollster 是一个小的阻塞执行器,用于消除异步 wgpu API。
Ffmpeg 用于录制视频。就我所知,这是一个临时解决方案,之后我将切换到 rav1e。
灵感来源(我从哪里偷代码)
示例
您可以通过在文件夹中执行 pilka 来运行任何示例
cd examples/cube
cargo run
| cube | cellular automata | line segment |
|---|---|---|
![]() |
![]() |
![]() |
| dithering | circle pattern | menger sponge |
![]() |
![]() |
![]() |
| path tracer | lasers | oblique slices |
![]() |
![]() |
![]() |
依赖项
~38MB
~858K SLoC








