程序员给 2003 年游戏移植版写血液着色器,顺手造了个光学部门

banteg · x · 2026-10-20

开发者 banteg 为自己的 2003 年游戏 Crimsonland 移植版编写了一套血液着色器,成果是一套小型「光学引擎」:Beer–Lambert 吸收、菲涅尔反射、土壤与液体分离法线、按体积加权的凝血,以及 HDR 光束反射。

核心洞察是:直接从血液贴图的 alpha 通道推导法线会让每滴血都带个小陡坡,效果像「浮雕番茄酱」。于是他把表面拆开——土壤/尸体法线负责漫反射光照(不带血液斜面),另一条平滑的液体法线单独负责反射。血液成为湿地上的光学层:光线穿过血液、打到底面、再穿回来,波长相关的吸收先吃掉绿光蓝光,越深的血泊吞掉越多剩余红光。

每滩血还带自己的「年龄」:新鲜度以 45 秒时间常数按沉积体积指数衰减,新的血滴不会让旧血泊复活;随时间推移血液变暗变粗糙,锐利的武器反射随之扩散消失。穿过光束作为有限光源参与反射,高光可以突破 SDR 白色进入 EDR。配图展示了同一滩血从新鲜到 15s、45s、180s 的凝血过程。

原文链接 →

「Fun」频道最新

更多「Fun」频道 AI 资讯 →