All Projects → pudnax → pilka

pudnax / pilka

Licence: MIT license
Another live-coding tool for creating shader demos, Vulkan+Wgpu powered.

Programming Languages

rust
11053 projects
GLSL
2045 projects

Projects that are alternatives of or similar to pilka

YALCT
Yet Another Live Coding Tool - Powered by Veldrid and elbow grease
Stars: ✭ 25 (-70.24%)
Mutual labels:  shaders, vulkan, glsl
Slang
Making it easier to work with shaders
Stars: ✭ 627 (+646.43%)
Mutual labels:  shaders, vulkan, glsl
MoravaEngine
2D/3D graphics engine written in C++ language. It currently supports the following graphics APIs: OpenGL 3.3+, Vulkan 1.2, DirectX 11. Its current purpose is to experiment with various CG concepts and techniques.
Stars: ✭ 129 (+53.57%)
Mutual labels:  shaders, vulkan, glsl
3d Game Shaders For Beginners
🎮 A step-by-step guide to implementing SSAO, depth of field, lighting, normal mapping, and more for your 3D game.
Stars: ✭ 11,698 (+13826.19%)
Mutual labels:  shaders, vulkan, glsl
Shadergen
Proof-of-concept library for generating HLSL, GLSL, and Metal shader code from C#,
Stars: ✭ 395 (+370.24%)
Mutual labels:  shaders, vulkan, glsl
Reshade
A generic post-processing injector for games and video software.
Stars: ✭ 2,285 (+2620.24%)
Mutual labels:  shaders, vulkan, glsl
rasen
Generate SPIR-V bytecode from an operation graph
Stars: ✭ 65 (-22.62%)
Mutual labels:  shaders, vulkan
ModularMusicVisualizer
Project in Hiatus, unmaintained, being rewritten privately. Will Open Source when stuff is ready. Project will be Renamed.
Stars: ✭ 81 (-3.57%)
Mutual labels:  shaders, glsl
Unity3D-Plane-Clipping
Plane clipping shaders for Unity3D 5. Extends the Standard shader!
Stars: ✭ 84 (+0%)
Mutual labels:  shaders, glsl
RavEngine
A fast, easy to use C++20 3D game library for modern computers
Stars: ✭ 122 (+45.24%)
Mutual labels:  shaders, vulkan
glNoise
A collection of GLSL noise functions for use with WebGL with an easy to use API.
Stars: ✭ 185 (+120.24%)
Mutual labels:  shaders, glsl
nuance
A tool to run your shaders on the gpu. Also a good demo application for wgpu-rs.
Stars: ✭ 26 (-69.05%)
Mutual labels:  glsl, wgpu
Messier87
A realtime raytracing blackhole renderer
Stars: ✭ 53 (-36.9%)
Mutual labels:  shaders, glsl
ofxShadertoy
Addon for openFrameworks that sets up and loads Shadertoy (http://www.shadertoy.com) shaders
Stars: ✭ 77 (-8.33%)
Mutual labels:  shaders, glsl
webassembly-webgl-shaders
Demo project for using WebGL shaders in WebAssembly
Stars: ✭ 107 (+27.38%)
Mutual labels:  shaders, glsl
FNode
Tool based in nodes to build GLSL shaders without any programming knowledge written in C using OpenGL and GLFW.
Stars: ✭ 81 (-3.57%)
Mutual labels:  shaders, glsl
wgpu-py
Next generation GPU API for Python
Stars: ✭ 210 (+150%)
Mutual labels:  vulkan, wgpu
sparksl-noise
minimum proof of concept about procedural noise generation in SparkAR's shader language (SparkSL).
Stars: ✭ 16 (-80.95%)
Mutual labels:  shaders, glsl
cellular-automata-explorer
(WIP) An interactive web app for exploring cellular automata.
Stars: ✭ 18 (-78.57%)
Mutual labels:  shaders, glsl
wgpu-mc
Rust-based replacement for the default Minecraft renderer
Stars: ✭ 254 (+202.38%)
Mutual labels:  vulkan, wgpu

pilka 🔩

Crates.io

Pilka is a cross-platform live-coding tool for creating shader* demos, similar to Bonzomatic, KodeLife or sh4der-jockey.

Available features:

  • Hot-reload
  • Saving shaders
  • Taking screenshot
  • Record video
  • Compute pipeline for post processing

preview

How

In current state pilka tries to seek shaders folder with the files shader.vert and shader.frag, on fail pilka will generate default setup for you. Then open shader in your favourite code editor (VS, emacs, vim, ed etc.) and pilka would fetch changes after each save.

Controls

  • F1: Print help
  • F2: Toggle play/pause
  • F3: Pause and step back one frame
  • F4: Pause and step forward one frame
  • F5: Restart playback at frame 0 (Time and Pos = 0)
  • F6: Print parameters
  • F7: Toggle profiler
  • F8: Switch backend
  • F10: Save shaders
  • F11: Take Screenshot
  • F12: Start/Stop record video
  • ESC: Exit the application
  • Arrows: Change Pos

Parameters

(per-draw-update)

name type range
position vec3 (-∞, ∞)
time float [0, ∞)
resolution vec2 [0, a]
mouse vec2 [-1, 1]
mouse_pressed bool
frame uint
time_delta float
record_period float
prev_frame texture

Flags

  • --record f32 - Specify duration of recorded video
  • --size u32xu32 - Specify window size and lock from resizing
  • --wgsl - Creates template for wgsl shaders

Choosing backend

You can select which backend to start with with the PILKA_BACKEND variable. Currently two backends are available: "wgpu" and "ash". If the value of the variable is incorrect, the default backend "wgpu" will be rolled back.

Requirements

Vulkan SDK is required.

On recent macOS, to allow sound input to be captured (for FFT textures to be generated), you need to: Open up System Preferences, click on Security & Privacy, click on the Privacy tab then click on the Microphone menu item. Make sure pilka is in the list and ticked... erm, probably. I don't have macOS.

Installation

cargo install pilka

You also can install the application by to downloading the source code and build locally.

# or through ssh [email protected]:pudnax/pilka.git
git clone https://github.com/pudnax/pilka.git
cd pilka
cargo install --path .

Dependencies

winit is the "default" window library in Rust ecosystem. And it covers the most of cross-platform issues for you.

png is used to encode screenshots into png files.

notify is a file watcher and maintains the hot-reload.

shaderc is used to compile GLSL shaders on the runtime instead of opening a process with glslc or glslangValidator. I hope to switch to naga soon, when it's mature enough.

ash is a Vulkan bindings. I choose ash because I see pilka as a learning project and want to touch the maximum untouched Vulkan. For the same reason I didn't use vulkano, erupt, vulkanism, vkvk.

wgpu is save GPU abstraction over different graphics API like Vulkan, Metal, OpenGL and used for primary backend aside of ash.

puffin is scoped profiler written in Rust by EmbarkStudios and I baked it to pilka for fast performance checking.

pollster is smol blocking executor and needed for eliminating async wgpu API.

Ffmpeg is used to record videos. For my concerns it's temporary solution after which I switch to rav1e on it's release.

Places of inspiration (from where I steal code):

Examples

You can run any example by executing pilka inside of the folder

cd examples/cube
cargo run
cube cellular automata line segment
cube automata line
dithering circle pattern menger sponge
dithering pattern spoonge
path tracer lasers oblique slices
tracer lasers slices
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].