特效

特效是在一段时间内对谱面整体施加着色器效果的特性,可以用以达成一些普通谱面无法实现或难以实现的视觉效果。prpr 预置了一批着色器,你也可以自己编写着色器,详见 自行编写着色器

格式

你需要在 extra.json 中加入 effects 字段,其内容为 Effect 的数组。

Effect

单个 Effect 的格式如下所示:

{
	"start": [0, 0, 1],
	"end": [0, 0, 1],
	"shader": "着色器名字",
	"global": false,
	"vars": {
		...
	}
}

startend 指定了特效的开始和结束时间,格式与 RPE 默认的时间表示格式相同([小节数, 分子, 分母])。

shader,即着色器名字,既可以是内置着色器,也可以是自定义的着色器。

global 决定了该特效会不会影响到 UI 元素(连击数、暂停按钮等)。可以不填,默认为 false

vars 是可选项,它是一个变量名字到 动画变量 的映射,用于指定着色器的参数(或者说,着色器的 uniform 变量)。即,假设我需要指定两个变量 powerradius 的值,我可以这样写:

{
	...,
	"vars": {
		"power": ...,
		"radius": ...
	}
}

示例

下面的例子将在 [2, 0, 1][4, 0, 1] 中使用 chromatic 内置着色器,并将 power 这一参数在这一时段内从 00.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
			}
		}
	]
}

内置着色器

你可以在 这里 查看所有的内置着色器,以及它们的参数和相关说明。