6个版本 (破坏性)
0.5.0 | 2021年8月31日 |
---|---|
0.4.3 | 2021年4月1日 |
0.3.1 | 2021年3月13日 |
0.2.3 | 2021年2月20日 |
0.1.0 | 2021年2月20日 |
#393 in 渲染
用于 pilka_lib
79KB
2K 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 |
依赖项
~38MB
~858K SLoC