20个版本
0.7.11 | 2022年10月22日 |
---|---|
0.7.9 | 2022年9月12日 |
0.7.8 | 2022年6月11日 |
0.7.4 | 2022年1月26日 |
0.3.1 | 2021年3月13日 |
#133 in 渲染
86 每月下载次数
用于 4 个crate(2个直接使用)
165KB
4K SLoC
pilka 🔩
Pilka是一个跨平台的实时编码工具,用于创建着色器*演示,类似于 Bonzomatic, KodeLife 或 sh4der-jockey.
可用功能
- 热重载
- 保存着色器
- 截图
- 录制视频
- 计算管道用于后期处理
如何使用
在当前状态下,pilka
尝试寻找包含文件 shader.vert
和 shader.frag
的 shaders
文件夹,如果失败,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 [email protected]: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 |
![]() |
![]() |
![]() |
依赖项
~7MB
~161K SLoC