arsentsn/brc-background

GitHub: arsentsn/brc-background

通过逆向工程重建《Bomb Rush Cyberfunk》菜单背景的 WebGL 着色器,提供可定制的实时渲染效果及 React 组件。

Stars: 0 | Forks: 0

# marble 单文件 WebGL 背景:通过迭代正弦/余弦 domain warp 并在 128 节点色阶上采样实现。无依赖,无构建步骤,约 270 行代码。 **[在线演示 →](https://arsentsn.github.io/brc-background/)** 或者克隆仓库并直接打开 `index.html` —— 无需构建步骤,也不需要服务器。 ![预览](https://static.pigsec.cn/wp-content/uploads/repos/cas/92/920c2ac747e0f38e39ae78b2eb0c505b6f9e7ef31cf49110522c44b152b4399d.png) ## 控件 | | | |---|---| | **scale** | 缩放 —— 值越大,区域越宽广、越平静 | | **warp speed** | 每秒变形周期数(`0.010` ≈ 100 秒循环) | | **palette offset** | 色阶的固定偏移量;它*不会*滚动 | | **iterations** | warp 迭代次数(18 为调优后的默认值) | | **colors** | 五段色带;它们之间的过渡是在线性空间下通过插值完成的 | | **presets** | `menu` 和 `splash` 还原了两种原始配色方案;`ember`、`indigo`、`slate` 则是本项目自带的 | | **panel mask** | 将场裁剪为矩形,而不是填满整个 viewport | URL 参数(用于可复现的截图和 headless 渲染): ``` index.html?preset=indigo&t=0.744&scale=1&iter=18&speed=0.010&panel=1&ui=0 ``` `t` 会将动画定格在固定的时钟值,因此相同的 URL 总是会渲染出相同的帧。`ui=0` 会隐藏控制面板 —— 可用于壁纸、嵌入内容和 headless 截图: ``` chrome --headless=new --window-size=1600,900 --virtual-time-budget=3000 \ --screenshot=out.png "file://$PWD/index.html?ui=0&t=0.744&preset=ember" ``` ## 工作原理 针对每个 fragment,在以屏幕像素除以基于宽度计算的除数后的坐标系中进行操作(两个轴使用同一个除数,因此在任何长宽比下 warp 都能保持正方形): ``` acc = uv; for (i = 1; i <= 18; i++) { acc.x = i*4.0 + amp.x*sin((i*3.0)*acc.y + phase) + acc.x; acc.y = i*4.0 + amp.y*cos((i*3.0)*acc.x + phase) + acc.y; } m = cos(0.358*acc.x + 0.642*acc.y) * 10.97 + offset; col = ramp[fract(m)]; ``` 有两个细节比表面看起来更重要。累加计算使用的是**余弦**而不是正弦 —— 如果用正弦,会产生嘈杂的高频混乱,而不是宽广平静的区域。此外,`0.358/0.642` 的权重使结果落在余弦极值附近,这正是使色带保持宽广的原因;如果仅向 `acc.x` 倾斜权重,结果会落在斜坡中点,并产生大约密集五倍的色带。 色阶是点采样且被截断的:它是一个查找表,而不是一张图像。 ## React React 移植版位于 [`react/`](react/README.md) —— 包含四个变体(JS/TS × CSS/Tailwind)、shadcn registry items 以及一个 demo。`ogl` 是其唯一的依赖项。 ``` ``` ## 出处 该算法是通过研究某款商业游戏的主菜单 shader 推导出来的。 **请阅读 [PROVENANCE.md](PROVENANCE.md)** —— 其中说明了本项目哪些内容是原创的,哪些不是,以及刻意省略了哪些内容。本仓库不包含任何游戏资产、捕获画面或 shader 转储。本项目与 Team Reptile 无关联,也未获得其认可。 研究笔记:[FINDINGS.md](FINDINGS.md)。 ## 许可证 本项目的原创代码采用 MIT 许可证 —— 请参阅 [LICENSE](LICENSE) 及其末尾的范围说明。
标签:WebGL, 前端组件, 数据可视化, 游戏UI, 着色器, 自定义脚本, 视觉特效