24 个着色器,以及与它们配套的滑块
本周,特效画廊大了不少。Shader 层是位于 13 个基准测试场景下方的全屏片段着色器,原来只有 5 个场景,现在增加到了 24 个,而且每个场景都有一个或两个滑块,可以拖动它们改变你看到的画面。
新增内容
新增了 21 个场景。低悬的太阳照着开阔海面。月光下的海几乎一动不动,因此在 OLED 上长时间运行时,它反而是这里最温和的选择。还有阴云、布满陨坑的异星,地平线上悬着一颗带环巨星;粉色异星峡谷;向观者倾斜的螺旋星系;星轨;曲速隧道;围绕绳结旋转的绿色代码雨;摄影棚灯光下的镀铬分形球体;黑白万花筒;被活跃电流环绕的玻璃心;以及其他几个场景。
为了腾出位置,两个旧场景 Synthwave Horizon 和 Neonwave Sunrise 退役了。
磁砖也变了。在此之前,每块着色器磁砖都显示一张手绘的场景草图,而草图并不总是准确。现在磁砖就是场景本身:着色器会在画面第一次靠近屏幕时把一帧画进去,鼠标悬停后则会实时播放。
滑块
打开任意着色器,控制条里就能看到以前没有的一个或两个滑块,它们位于负载、速度和画质旁边。
如果场景作者留下了一个决定整体形状的数字,滑块就控制那个数字。海面有浪高和破浪,阴云有云量和光照,星系有旋臂扭转,星轨有星轨数量,曲速有光带数量。融色保留了作者自己的种子——代码注释鼓励你修改它,而任何数值都会产生不同的一组形状。Demoparty 的滑块则以每分钟节拍数表示节奏。
有些场景内部没有任何东西能移动而不破坏其他部分。对于这些场景,我们改为在场景外部应用色调和缩放。每个滑块都从作者设定的位置开始,因此第一次看到的始终是作者制作出来的那个场景。
三个场景播放前会先询问
我们让每个着色器都通过了闪烁测试。测试会测量屏幕不同区域随时间发生的亮度波动,采用光敏性癫痫指导中计算闪烁的方式,而不是凭场景看起来有多忙来判断。两个场景未通过:Flux Core 和 Demoparty。基准测试中的爆炸恒星 Hypernova 一直被标为闪烁场景,因此也加入了它们。
现在这三个场景都会先询问;在你同意之前,两个着色器的磁砖在悬停时也会保持静止。勾选“在此设备上不再询问”,之后就不会再看到这个问题。选择返回,则不会记住任何内容,下次仍会询问。其他场景都会直接打开,包括 Static Field。它看起来可能是页面上最激烈的一个,但因为噪点在任何足够大的屏幕区域上都会平均掉,所以测试轻松通过。
它们是怎样选出来的
这些着色器由其他人编写,所以我们先看授权。Shadertoy 的默认条款不允许商业使用,而本站带有广告,因此只有明确授予公有领域或 MIT 权利的作品才算符合条件。新场景中有 19 个属于公有领域,2 个采用 MIT。我们阅读作者代码中的授权声明,然后逐个检查着色器是否借用了其他地方的代码,因为混合作品的自由授权并不能让被借用的部分也变得自由。几款外观很好的候选者没有通过这一步。所有作者都列在特效页的表格中。
还有一个场景因为另一个原因被排除:一片漂亮的日落海面,在我们的参考 Mac 上以 1080p 运行时只有 29 fps。放到手机上,它会更像幻灯片。
在手机上
最重的着色器在高密度屏幕上会以较低分辨率打开,因此能以更平滑的状态开始。它们不会低于每个 CSS 像素对应一个设备像素;如果硬件跟得上,画质控制可以把分辨率调回去,fps 读数也是实时的,你会知道当前状态。所有这些都不会影响基准测试:着色器从不计分,而计分工作负载自 2.2.0 起一直冻结。
所有内容免费,直接在浏览器中运行,无需账户。只有你主动打开时,着色器才会加载和播放。完整更新说明见更新日志。