1 个不稳定版本

0.1.0 2022 年 12 月 8 日

321图形 API

自定义许可LGPL-3.0

5MB
4K SLoC

Rust 3.5K SLoC // 0.1% comments WebGPU Shader Language 239 SLoC // 0.5% comments Python 185 SLoC // 0.0% comments

Radiance

Radiance 是 VJ 的视频艺术软件。它支持节拍检测、动画 GIF、YouTube 视频、OpenGL 着色器效果。它专为现场表演设计,并在 Linux 和 MacOS 上运行。

Build Status

艺术品

Simple screencapture

示例艺术品 1

示例艺术品 2

示例艺术品 3

此艺术品的屏幕截图

示例效果

下载

您可以从 发布页面 下载 Radiance for Linux 或 MacOS。

构建

依赖项

  • Qt 5.9 或更高版本
  • PortAudio
  • FFTW3
  • libsamplerate

可选依赖项

  • libmpv
  • rtmidi

在 Ubuntu 上安装依赖项

$ sudo apt-add-repository ppa:beineri/opt-qt591-trusty
$ sudo apt-get update
$ sudo apt-get install qt59base qt59multimedia qt59quickcontrols qt59imageformats qt59quickcontrols2 qt59script libfftw3-dev libsamplerate0-dev libasound2-dev libmpv-dev libdrm-dev libgl1-mesa-dev
$ git clone https://github.com/EddieRingle/portaudio    # build & install
$ git clone https://github.com/thestk/rtmidi            # build & install

注意:您可能需要从 git 安装 portaudio 和 rtmidi,如上所述

构建 Radiance

git clone https://github.com/zbanks/radiance
git submodule update --init
cd radiance
mkdir build
cd build
cmake .. # -DCMAKE_PREFIX_PATH=/opt/qt59/ -DCMAKE_BUILD_TYPE=Debug
make
./radiance          # Qt UI
./radiance_cli      # Command line  GIF generator

如果您有 git pull 变更,请确保您还执行 git submodule update 以拉取 BTrack/ 的变更。

youtube-dl

Radiance 使用 libmpv 加载视频,可以可选地使用 youtube-dl 从 YouTube 和许多其他网站流式传输视频。由于 youtube-dl 经常更新,我们避免将其与 Radiance 一起捆绑。相反,在 Linux

sudo pip install youtube-dl

或 Mac

brew install youtube-dl

上,您可以使用库中的 youtube 节点将 YouTube 视频加载到 Radiance 中。

鼠标控制

  • 双击(在库中) - 添加瓦片
  • 点击(在瓦片上) - 选择瓦片
  • Ctrl-点击(在瓦片上) - 选择多个
  • Shift-click(在瓦片上) - 选择连续的
  • 点击并拖动(在瓦片上) - 重新排序选定的瓦片
  • 滚轮 - 改变选定瓦片的强度
  • Ctrl-scroll wheel - 缩放

键盘控制

  • : - 搜索库
  • Ctrl-+ - 放大
  • Ctrl-- - 缩小
  • Ctrl-0 - 重置缩放
  • `0-9 - 设置选定的滑块。 ` = 0%;1 = 10%;5 = 50%;0 = 100%
  • j - 减少选定滑块 10%
  • k - 增加选定滑块 10%
  • Delete - 删除瓦片
  • Ctrl + `1-9 - 将滑块分配给 MIDI 轮
  • r - 重新加载瓦片
  • Esc - 关闭输出窗口

着色器效果

Radiance 通过一组连接的 "VideoNodes" 生成视频。这些节点通常基于 OpenGL 片段着色器,但也可能是静态图像、GIF 或视频。每个节点接受一个或多个输入并产生一个输出。

每个 OpenGL 片段着色器节点由一个位于 resources/library/effects.glsl 文件描述。

这些文件主要是描述片段着色器的 GLSL 代码。这类似于 shadertoy.com 或 glslsandbox.com 上的设置。每个着色器定义一个函数 void main(void),它为给定的坐标 vec2 uv 设置像素颜色 vec4 fragColorfragColor 是一个预乘 alpha 的 RGBA 颜色:因此 40% 透明度的白色编码为 vec4(0.4, 0.4, 0.4, 0.4)。坐标 uv 的 x 和 y 值在 [0.0, 1.0] 的范围内,其中 vec2(0., 0.) 对应左下角。

着色器还可以通过 iInput(或 iInputs[])统一变量访问其输入。

此外,每个着色器还可以访问其他uniform变量,这些变量在resources/effects/*.glsl中有文档说明。其中最重要的是iIntensity,它是一个范围在[0.0, 1.0]的值,它映射到UI中的滑块,由用户控制。每个效果有一个限制:每个效果恰好有一个输入滑块:这是为了减少对最终用户的认知负担。其他变量包括有关当前音频或时间的信息。

不变性

每个着色器必须遵循以下属性

  • 每个着色器设置的fragColor必须是一个有效的、预乘的alpha,RGBA元组。每个vec4的分量必须在[0.0, 1.0]的范围内,并且RGB分量必须小于或等于A分量。(参见afixhighlight以突出显示此处的错误,颜色为粉红色)
  • 恒等性:当iIntensity == 0.时,着色器必须完全不变地传递其第一个输入。这意味着在增加强度之前,插入新的着色器不应影响输出。

多缓冲区着色器效果

某些效果无法通过单个片段着色器传递完成。一个效果可以由一系列着色器组成,这些着色器通过#buffershader分隔。每个着色器渲染到iChannels[](例如,第一个渲染到iChannels[0])。着色器按反向顺序渲染,因此文件中的最后一个着色器首先渲染。仅显示文件中的第一个着色器的输出--其他缓冲区在帧之间持续存在,但不对其他节点公开。

使用此功能的示例是foh.glsl。它实现了一个(指数)"一阶保持" - 在节拍倍数上采样输入纹理并将其存储在iChannel[1]中。

在MIT/X11许可证下发布。版权所有2016年Zach Banks和Eric Van Albert。

依赖项

~22–57MB
~1M SLoC