项目 My Work Is Not Yet Done 证明了恐怖无需色彩。仅使用纯黑与纯白调色板,其创作者利用 Unity 和 C# 后处理技术实时应用抖动算法(dithering)。结果营造出一种令人压抑的氛围,仿佛一幅墨水画,证明了技术限制可以成为独立游戏开发中最具表现力的资产。
Unity 中 C# 抖动算法的技术实现 🎮
要实现此效果,需创建一个后处理脚本,遍历渲染图像中的每个像素。关键算法是 Bayer 抖动或 Floyd-Steinberg 抖动。与简单地对图像进行阈值处理(会丢失细节)不同,这些算法会将每个像素的灰度值与阈值矩阵(Bayer 算法)进行比较,或将量化误差分配到相邻像素(Floyd-Steinberg 算法)。在 Unity 中,这可以通过着色器或使用 OnRenderImage 处理摄像机的脚本来实现。至关重要的是禁用输出纹理的双线性过滤,并将分辨率强制设置为较低值以增强像素艺术效果。类似 Return of the Obra Dinn 的游戏采用了类似方法,但使用 3 色调色板,而 World of Horror 则应用了更静态的抖动。对于你的项目,我建议从 4x4 Bayer 矩阵开始,它在性能和视觉质量之间提供了良好的平衡。
单色叙事:为何黑白效果如此出色 🖤
除了技术层面,美学选择也源于叙事需求。极端的黑白消除了色彩的干扰,迫使玩家专注于形状、阴影和运动。抖动算法通过生成颗粒状纹理,唤起了紧张草稿或受干扰档案照片的焦虑感。My Work Is Not Yet Done 利用这种极端对比,在视觉噪声中隐藏细节,营造出一种偏执感。如果你在游戏中追求这种效果,请记住光照必须具有高对比度;带有硬阴影的强方向光是为抖动发挥魔力奠定完美基础。
对于像 My Work Is Not Yet Done 这样仅使用纯黑与纯白调色板的恐怖游戏,如何在 Unity 中实现程序化抖动,以生成 1 位纹理,同时保持视觉可读性和压抑氛围,而不依赖灰度级?
(附注:为移动端优化就像试图把大象塞进 Mini Cooper)