sharp.go
← 返回

· Sharp.go Team

引擎内部:sharp.go 如何以 60fps 渲染 361 颗棋子

五年前,具备完整 3D 检视能力的 60fps 围棋棋盘是渲染器的梦想。今天它只是渲染器的午后工作。本文是我们开始时所期望的那种注释式漫游 — 架构选择、死胡同,以及产生差异的细微之处。

问题

01

为什么这很难

塑造了当前 3D 引擎的三项约束。

一盘围棋是一棵树,而不是一条线。在任何时刻,玩家都能分支出成千上万种变化,每一种都在 19×19 棋盘上拥有自己关于棋子的幻想。我们想要同时拥有三者:可交互的 3D 相机、低于 100ms 的分析延迟、以及走过第 200 手仍不崩溃的棋谱。

每一项单独都可解。问题在于它们都触及同一条热路径 — 棋子落盘的瞬间 — 而每一条需要的时间又各不相同。

着法编码

02

21 字节的线路格式

紧凑、确定、可跨版本重放。

sharp.go 中的每手棋都是 21 字节的载荷。我们试过 JSON、CBOR 与 protobuf,最终选择了手工编写的二进制格式。格式足够紧凑:一盘 400 手的真实对局仅占 8.4 KB — 与棋盘自身的压缩 JPEG 大致相当。

  • 01.

    字节 0 — 颜色

    黑为 0x00,白为 0x01。一字节,不协商。

  • 02.

    字节 1–2 — 坐标

    两个小端字节:行 (0–18) 与列 (0–18)。19×19 网格上的 361 个有效位置。

  • 03.

    字节 3–6 — 序号

    无符号 32 位着法索引。同一对局内连续,跨重放确定。

  • 04.

    字节 7–10 — 挂钟时间戳

    对局开始以来的毫秒数。用于重放拖动。

  • 05.

    字节 11–14 — 局面哈希

    32 位 Zobrist 哈希。无需扫描整个棋盘即可检测重复局面与超级劫。

  • 06.

    字节 15–20 — 引擎信号保留位

    提子、劫标记、虚着标志。为前向兼容而保留。

分段

"

我们最初并不是要发明一种二进制格式。我们最初是要让分析感觉即时,而字节数恰好是最后最容易放松的约束。

"

Naomi S. / 首席引擎工程师

渲染管线

03

三趟渲染,一块画布

顺序比成本更重要。

渲染器是严格的三趟管线。我们不在趟之间排序、混合或反射 — 每趟写入自己的纹理,下一趟再读取。

Tabs

每颗棋子是带 PBR 材质的单个实例化立方体。我们将全部 361 个位置渲染到一张离屏棋盘深度纹理。空位完全跳过;占据位获得逐实例的变换。
稳态帧率 60fps
着法格式解码吞吐 1.1GB/s
线路上每手字节数 21B

设计决策

04

为什么先做 3D

第一个产品的设计依据,而不是对 2D 的判决。

Comparison

引擎对比

Feature sharp.go 2D 客户端 手机应用
3D 棋盘检视
低于 100ms 的 AI 反馈
开放的棋谱格式
协作复盘
两次点击的分享链接
仅浏览器模式
  • 整个棋盘上的实例化渲染

    361 个实例,一次绘制调用。其他方式都更慢。

  • 缓存的反射,而不是实时的

    相机移动超过 5° 时重渲染。玩家察觉不到。

  • 磁盘上的二进制着法格式

    紧凑、确定,2026 年的对局重放在 2027 年仍能加载。

  • 作为一等公民的深度链接 URL

    每个局面都有稳定 URL。分享棋盘是复制粘贴,不是截图。

常见问题

常见问题

01 引擎为什么对局面使用 Zobrist 哈希?

Zobrist 哈希每手 O(1) 更新 (对变化位做异或),并允许我们通过一次 32 位比较检测超级劫与重复局面。每手都扫描整个棋盘在 19×19 上没问题,但无法扩展到我们计划支持的 25×25。

02 我可以在另一台设备上从 URL 重放对局吗?

可以。每盘对局都有稳定的 URL,着法序列被编码在路径中。在任何设备、任何浏览器打开该 URL,重放都会从同一局面开始。

03 AI 在离线时也保持同一水平吗?

是的。设备端 AI 完全离线运行,默认校准到初学者级别。你可以在菜单里调到更高的强度,无需任何网络往返。

04 为什么二进制着法格式未在公开规范中记录?

稳定性。该格式是我们重放兼容性承诺的一部分。我们将在 1.0 引擎发布时公布稳定的 v1 规范。在此之前,小版本之间可能发生变化。

下一步

05

路线图,不是承诺

我们正在做的工作,按预期成本排序。

接下来的六个月围绕重放的可移植性。你下的每盘棋都应该比下棋的客户端更长寿。

试用引擎

在真实 3D 棋盘上下棋

无需安装。在浏览器中打开对局,与校准过的 AI 对弈,一键分享局面。

"

最好的围棋界面是消失的界面。你看到的是棋盘,而不是应用。

"

The sharp.go team / 香港,2026 年 5 月
enginerenderingperformance