特效
特效是在一段时间内对谱面整体施加着色器效果的特性,可以用以达成一些普通谱面无法实现或难以实现的视觉效果。prpr 预置了一批着色器,你也可以自己编写着色器,详见 自行编写着色器。
格式
你需要在 extra.json
中加入 effects
字段,其内容为 Effect
的数组。
Effect
单个 Effect
的格式如下所示:
{
"start": [0, 0, 1],
"end": [0, 0, 1],
"shader": "着色器名字",
"global": false,
"vars": {
...
}
}
start
和 end
指定了特效的开始和结束时间,格式与 RPE 默认的时间表示格式相同([小节数, 分子, 分母]
)。
shader
,即着色器名字,既可以是内置着色器,也可以是自定义的着色器。
global
决定了该特效会不会影响到 UI 元素(连击数、暂停按钮等)。可以不填,默认为 false
。
vars
是可选项,它是一个变量名字到 动画变量
的映射,用于指定着色器的参数(或者说,着色器的 uniform
变量)。即,假设我需要指定两个变量 power
和 radius
的值,我可以这样写:
{
...,
"vars": {
"power": ...,
"radius": ...
}
}
示例
下面的例子将在 [2, 0, 1]
到 [4, 0, 1]
中使用 chromatic
内置着色器,并将 power
这一参数在这一时段内从 0
到 0.1
线性变化,且 sampleCount
被固定为 5
:
{
...,
"effects": [
{
"start": [2, 0, 1],
"end": [4, 0, 1],
"shader": "chromatic",
"vars": {
"power": [
{
"startTime": [2, 0, 1],
"endTime": [4, 0, 1],
"easingType": 2,
"start": 0.0,
"end": 0.1
}
],
"sampleCount": 5
}
}
]
}
内置着色器
你可以在 这里 查看所有的内置着色器,以及它们的参数和相关说明。