1 个不稳定版本
0.1.0 | 2022 年 12 月 8 日 |
---|
321 在 图形 API 中
5MB
4K SLoC
Radiance
Radiance 是 VJ 的视频艺术软件。它支持节拍检测、动画 GIF、YouTube 视频、OpenGL 着色器效果。它专为现场表演设计,并在 Linux 和 MacOS 上运行。
艺术品
下载
您可以从 发布页面 下载 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 fragColor
。 fragColor
是一个预乘 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