30fps

RSS: https://30fps.net/atom.xml
30fps,关于电子游戏、游戏开发与游戏文化。

重访 Yliluoma 有序抖动算法:从几何原理到简化实现

深入解析 Joel Yliluoma 2011年的有序抖动算法,并与经典的 Knoll 算法及作者提出的简化变体(EMA-Sweep/Exact/Constant)进行对比。文章提供了详细的几何解释、数学推导及 Python 实现代码,指出通过简单的亮度加权预处理即可替代复杂的色彩差异计算,且简化版算法在保持画质的同时降低了计算复杂度。适合对图形学、图像压缩算法及底层渲染技术感兴趣的开发者。
评论点赞收藏33 天前

RGB 归一化到底应该除以 255 还是 256?

图像处理中一个经典争议:8 位 RGB 转浮点时,除以 255 还是 256?标准做法(÷255)将 0→0.0、255→1.0,与 GPU 一致,但极端值量化 bin 只有其他 bin 一半宽。替代方案(加 0.5 后 ÷256)让每个值位于整数的正中间,理论上重建误差更小(1/1024 vs 1/1020),但黑色不再映射到 0.0,使处理代码与 8 位输入耦合。作者用量化理论(mid-riser vs mid-tread)给出框架性解释,结论明确:处理他人编码的图像请用 ÷255——它是事实标准;只有控制编解码两端时才考虑 ÷256。附代码、数轴图和直方图验证,有观点有证据有深度。
评论点赞收藏75 天前

单遍调色板细化与有序抖动

通过修改在线k-means算法的像素遍历顺序,作者意外发现了一种能同时完成调色板细化和产生有序抖动图案的单通道方法。通常颜色量化分两步:先计算调色板,再为每个像素匹配最近颜色。作者在实现中误解了流程——跳过最终欧几里得像素映射,直接输出在线k-means中间结果,反而产生了类似抖动的噪声效果。他进而尝试用Bayer矩阵顺序(2×2和4×4)遍历像素,发现Bayer顺序能在调色板细化的同时产生规则棋盘状抖动图案,再加入块内随机化后效果更接近经典有序抖动。文章附有完整Python代码和大量对比图,方法虽不能生成最高质量图像,但可跳过最终映射步骤获得理论上的微小加速,且视觉效果别具一格。作者坦言主要动机是觉得结果"看起来很酷",并正在撰写颜色缩减算法方面的书籍。全文有清晰的踩坑记录、审美判断和可复现的代码实现,适合对计算机图形学、图像处理感兴趣的读者。
评论点赞收藏115 天前

更精准的毁灭战士(Doom)调色板重制

作者重制了经典游戏《毁灭战士》(Doom) 的调色板算法。原版使用 sRGB 空间计算亮度衰减,存在理论缺陷。作者改用现代感知均匀颜色空间 Oklab 重新生成色阶映射表。结果显示暗部灰色更平滑,棕色色调更准确,对比度略有提升。文章提供了修改后的文件及 Python 转换脚本,供 Mod 社区测试。
评论点赞收藏290 天前

更精确的《毁灭战士》颜色映射表

本文将现代颜色科学(Oklab 感知均匀色彩空间)应用于《毁灭战士》(Doom 1993)经典光照衰减查找表(colormap)的重建。作者指出,原版在 gamma 空间做线性乘法的近似方法存在理论缺陷,在 2025 年改用 Oklab 重新计算 32 级明暗映射,并提供了完整可下载的 WAD 文件、Python 转换脚本和多组游戏内截图对比。虽然改动极其细微,肉眼几乎不可辨,但确实削去了一层 90 年代"包浆"质感。文章穿插 dcolors.c 源码片段(最近邻颜色匹配算法)、sRGB vs Oklab 理论解释、以及 Jaguar 版原生 CRY 色彩空间的横向对比,论证严谨。结尾附完整数据供读者自行验证,并预告作者正在撰写颜色缩减算法书籍。这是一篇典型的为爱发电技术考古+动手实践文章,信息密度高、可复现、有鲜明立场——游戏属于社区,我们可以做任何修改。
评论点赞收藏290 天前

登录芦苇

登录后关注作者、收藏内容和参与讨论。