310 字
2 分钟
同一张贴图两种阵营色:OpenRA 的渲染与调色板魔法
复古外皮,现代心脏
OpenRA 要还原 90 年代西木像素风,但跑在现代 GPU 上。OpenRA.Game/Graphics/ 里是自研渲染器:Palette.cs(调色板)、PlayerColorRemap.cs(阵营色重映射)、HardwarePalette.cs,配 glsl/ 下一堆 shader。
阵营色:换色不换图
红军坦克和蓝军坦克用同一张贴图。原理是调色板索引:贴图里留一段索引专门表示“阵营色”,渲染时按玩家颜色实时重映射。PlayerColorRemap 就是干这个的——内存省一半,Mod 作者也不用为 8 个颜色各画一套。
后期特效全是 shader
glsl/ 目录像个特效菜单:
postprocess_chronoshift.frag:超时空传送的扭曲溶解postprocess_flash.frag:核弹/超武白闪postprocess_menufade.frag:菜单过渡combined.vert/frag、model.vert/frag:精灵与模型的常规管线
红警老玩家看到超时空传送的光效 DNA 动了——底层就是这几十行 GLSL。
我的收获
- 约束即风格:调色板限制反而成就了像素风,还顺手解决了阵营色问题
- 渲染与逻辑分离:
Renderable只描述“画什么”,管线决定“怎么画”,加特效不用碰 gameplay 代码 - 复刻经典 ≠ 复刻技术,用现代管线实现复古观感才是正解