#fragment-shader #shader #fragment #opengl #mp4 #rendering #live-coding

bin+lib frag

一个简单的crate,用于实时着色器编码并将着色器渲染到视频中

2 个版本

0.1.6 2024年5月24日
0.1.5 2022年11月18日
0.1.4 2021年3月25日

图形 API 中排名 #103

Download history 179/week @ 2024-05-24 3/week @ 2024-05-31 4/week @ 2024-06-07

每月下载量 382

GPL-3.0-only

40KB
896

Frag

Frag 模块。在 Rust 中编写片段着色器,可以跳过样板代码,直接编写片段着色器。例如,在编写光线追踪着色器时很有用。

特性

  • 组合多个部分或文件的着色器
  • 实时编码:当文件更新时进行更新
  • 键盘控制时间
  • 分辨率无关:渲染和显示可以分别使用不同的分辨率。可以用于拉伸、像素化或抗锯齿
  • 使用 FFMPEG 渲染 MP4
  • 将当前帧保存为 PNG 图片

控制

  • 空格:暂停/恢复时间和渲染
  • 左键(按住):后退时间
  • 右键(按住):前进时间
  • 下键:将时间设置为 0
  • PageDown:后退 5 秒
  • PageUp:前进 5 秒

待办事项

  • 后处理片段着色器可访问

示例

实时编码示例,具有像素艺术风格

use frag::*;
let streamer = shader::ShaderStreamer::new()
    .with_file("lib.glsl")
    .with_file("shader.glsl");
FragConf::new()
    .with_window_width(1600)
    .with_window_height(900)
    .with_canvas_width(320)
    .with_canvas_height(180)
    .with_pixelate(true)
    .with_streamer(streamer)
    .run_live().expect("Could not run.");

渲染到视频的示例

use frag::*;
let streamer = shader::ShaderStreamer::new()
    .with_file("lib.glsl")
    .with_file("shader.glsl");
FragConf::new()
    .with_window_width(1600)
    .with_window_height(900)
    .with_streamer(streamer)
    .into_ffmpeg_renderer()
    .with_framerate(30)
    .with_crf(20)
    .with_preset(Preset::Slow)
    .with_tune(Tune::Animation)
    .with_length(600)
    .with_output("render.mp4")
    .render().expect("Could not render.");

许可证

Copyright (C) 2024 Cody Bloemhard

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.

依赖关系

~18–28MB
~432K SLoC