绝区零 Fairy 屏幕保护程序(Zenless Zone Zero Fairy Screen Saver)—— 用 Rust + Vulkan 从零实现的 Windows 屏保。画面是《绝区零》(Zenless Zone Zero / ZZZ)里 Fairy 那只蓝色大眼睛,配深蓝色科技感背景:整只眼睛由片元着色器程序化绘制,没有一张贴图、没有顶点缓冲、没有混合状态。支持多显示器、摄像头人脸注视、DPI 感知,单文件绿色免安装,不需要 Vulkan SDK,也不需要下载任何模型文件。
特性
- 全程序化渲染 —— 整屏由一个全屏三角形的片元着色器逐层合成(背景底色 → 网格 → 辉光 → 229 条横向光丝 → 脉冲环 → 眼睛六层),透明用 alpha 的 source-over 手算,眼睛包围盒之外的像素直接跳过整段计算;
- 像素级复刻 —— 每个视觉参数逐条对照参考项目 Fairy-DSH 的 SVG / CSS,呼吸动画沿用其 1440ms 主时钟与
cubic-bezier(.72,0,.28,1)缓动;与参考实现的快照比对全屏平均绝对差 4.4/255(同一构建相隔 0.25 秒的两帧自比对差异就有 5.15,故 4–8 均属正常); - 摄像头注视 —— 用人脸检测判断你在哪,眼睛按真实几何转向你;人靠得够近时会换到离他最近的那块屏幕,跨屏时叠故障撕裂 + 一次完整眨眼;
- 接近 / 离开迟滞 —— 双距离阈值,往椅背上一靠不会闪烁,走开才在超时后释放;
- 标准屏保协议 ——
/s运行、/c设置界面、/p <hwnd>缩略预览等全部支持,可在系统「屏幕保护程序设置」里正常预览与配置; - 零模型文件 —— 人脸检测走系统自带的
Windows.Media.FaceAnalysis,检测不到人脸时退回帧差运动检测兜底。
怎么退出屏保
点击或按键退出,移动鼠标不退出。 标准屏保「任何鼠标移动就退出」的约定在实用中站不住:Windows 在全屏置顶窗口升起过程中会自己发出一连串 WM_MOUSEMOVE,光学鼠标也会一直抖,结果是屏保刚出现几秒就自己退了。判定同时走窗口消息与 GetAsyncKeyState 物理键状态轮询两条路(不依赖键盘焦点),启动后前 400ms 的输入被忽略。
注视是怎么算的
- 检测:系统 WinRT 人脸检测给出真正的人脸包围盒(方位准、脸的大小稳定),多张脸取面积最大的;找不到人脸时退回 48 列灰度网格帧差运动检测,只更新方位。
- 距离:由人脸包围盒高度反推(成年人的脸约 200mm),
d ∝ 1 / tan(视野/2);这个值同时驱动「接近 / 离开」阈值和注视几何的纵深。 - 方向:摄像头面对面看你,画面左右与桌面左右是镜像的,
project_viewer()在读回桌面位置时翻转一次水平轴(有单元测试锁住这个方向感)。 - 瞳孔朝向:眼睛画在平面上没法真旋转,虹膜沿屏幕平面内指向目标的方向滑动,位移取真实夹角的切线并过饱和曲线——人偏到一边时仍然明显在看你,但虹膜不会滑出眼白。
- 半睁眼确认:检测到有人靠近时眼睛半睁着看你约 5.2 秒再快速睁回——慢悠悠地睁开像「睡着了」,快速张开才像「注意到你了」。
设置界面与视角校正
FairyScreenSaver.exe /c(或双击 .scr)打开设置界面,核心交互是右上角的显示器布局图:

- 每个方框是一块显示器,按真实相对位置等比排列(上下堆叠也算得准),蓝框为主屏;
- 橙点 = 摄像头,可以直接点在屏幕之间的缝隙上,比例允许超出 0…1;
- 红点 = 摄像头当前看到的人,中间连线是视线方向;拖「偏航 / 俯仰」让红点落到真实位置,再用「水平视野」校准远近——渲染端与设置界面共用同一个
project_viewer()函数,设置里红点落在哪,运行时眼睛就看哪。
配置文件在 %APPDATA%\FairyScreenSaver\config.ini(删掉即恢复默认),摄像头功能默认关闭,需要时才在设置里打开。广角摄像头的视野值值得校准:默认 60° 套在 90° 广角头上会把距离估大一倍。
构建与安装
powershell -ExecutionPolicy Bypass -File package.ps1 # 构建 + 产出 dist\FairyScreenSaver.scr
| 依赖 | 说明 |
|---|---|
| Rust | 1.85+(发布时使用 1.96.1),MSVC 工具链 |
| Vulkan 运行时 | 由显卡驱动提供(vulkan-1.dll) |
| 着色器 | 构建期由 naga 把 WGSL 编成 SPIR-V,不需要 Vulkan SDK |
安装:右键 dist\FairyScreenSaver.scr → 安装;或复制到 %WINDIR%\System32(需管理员)。.scr 只是改了扩展名的 exe。
版权与许可
本项目中的角色形象(Fairy 的眼睛造型)及其相关美术设计,版权归米哈游(miHoYo)所有。《绝区零》及其中的角色、美术素材、商标均为米哈游的知识产权;视觉效果参考自第三方开源实现 Fairy-DSH,仅作为个人学习与技术演示用途,属非商业性同人作品。本项目与米哈游没有任何隶属、赞助或授权关系,也不是官方作品。除角色形象相关美术设计外,源代码以 MIT 协议开源。
