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/fragmodel.vert/frag:精灵与模型的常规管线

红警老玩家看到超时空传送的光效 DNA 动了——底层就是这几十行 GLSL。

我的收获#

  • 约束即风格:调色板限制反而成就了像素风,还顺手解决了阵营色问题
  • 渲染与逻辑分离:Renderable 只描述“画什么”,管线决定“怎么画”,加特效不用碰 gameplay 代码
  • 复刻经典 ≠ 复刻技术,用现代管线实现复古观感才是正解