Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

2.2 玩家视角的渲染(局域交互自动机)

(The Client View - Local Interactive Automaton)

客户端视角:渲染视界

“在服务器看来,艾泽拉斯是静态的数据水晶;但在玩家看来,它是一场实时的冒险。如果不引入‘客户端’这个概念,我们就永远无法解释为什么会有‘卡顿’,也无法解释为什么我们可以自由选择去哪里。”

上一节我们讲了暴雪服务器(上帝视角)里的世界,那里包含了所有的可能性,像是一个巨大的静态存档。

但这对我们玩家没有意义。因为受限于显卡性能和网速,我们永远无法同时加载整个世界。我们只能看到屏幕里的画面。

为了描述这种主观视角,我们需要引入对偶的计算模型:经典交互式图灵机,或者说是——游戏客户端(Client)

本节将解释,为什么物理学里的“波函数坍缩”,在程序员眼里其实就是**“接收到了服务器的数据包”**。

2.2.1 视野距离与客户端状态

首先,我们必须定义玩家的边界。

由于显存上限(有限信息公理)和最大带宽(光速限制),你在任何时刻只能看到地图上的一小块区域。我们管这个叫局域视界(Local Horizon),或者俗称**“视野距离”**。

定义 2.2.1(客户端状态)

虽然服务器上的数据是极其复杂的(量子的),但你的显卡只能渲染固定的像素。你只能通过屏幕看到确定的画面。因此,对于玩家而言,世界的有效状态不是那个复杂的波函数,而是一个简单的截图(经典比特串)

物理意义

这个从“量子数据”变成“屏幕画面”的过程,物理学叫退相干。在代码世界里,这叫类型转换(Type Casting):为了适应客户端有限的机能,系统强制把高维数据压缩成了低维图像。

2.2.2 键盘鼠标:自由意志的接口

服务器模型是封闭的,而客户端模型是**交互式(Interactive)**的。这是一个本质的区别。

当你的角色走到一个岔路口,或者当你决定是搓火球还是搓寒冰箭时,客户端会暂停当前的预测,向外部(屏幕前的你)发送一个询问。

定义 2.2.2(物理输入接口)

我们定义“物理预言机”为一个连接游戏角色与玩家真身的输入通道

当游戏运行到分支点(比如是暴击还是未命中,或者是往左走还是往右走)时,系统不会像服务器那样分裂成两个平行宇宙,而是发起一次查询(Query)

  • 输入:当前的各种概率(命中率,暴击率)。
  • 输出:一个确定的红字伤害(坍缩)。

本体论推论

在这个模型里,“自由意志”和“随机性”是一回事。它们都代表了非算法的信息流从系统外部(玩家)注入到了游戏内部。这不是Bug,这是I/O通信

2.2.3 交互式动力学:中断与跳转

有了这个接口,我们就可以写出客户端的运行逻辑了。它不再是平滑的动画,而是一个混合系统

  1. 默认模式(预测/插值):当你没动键盘,也没发生什么大事时,客户端会根据上一帧的数据预测下一帧。这叫客户端预测(Client-side Prediction)。这是低成本的惯性演化。

  2. 交互模式(同步/纠正):当你按下了技能键,或者服务器发来了BOSS放技能的数据包时,客户端预测被中断(Interrupt)。系统强制跳转到一个新的状态(比如你的角色突然瞬移回了原来的位置,俗称“橡皮筋”现象)。

这完美对应了量子力学中的:

  • 幺正演化 = 客户端预测。
  • 波函数坍缩 = 接收服务器数据包/玩家输入。

2.2.4 懒加载与动态生成

服务器模型计算了所有可能发生的事,而客户端利用**懒加载(Lazy Evaluation)**机制,只渲染你看到的那部分。

  • 未观测时:暴风城在你去诺森德的时候是不被渲染的。它只作为硬盘里的模型文件存在。
  • 观测时:只有当你坐船回到暴风城港口,显卡才会开始疯狂运转,**即时编译(JIT)**出那些建筑和NPC。

这意味着:未来不是被发现的,未来是被生成的。 你的每一次移动,都在触发系统的生成算法,为你铺设前方的道路。

2.2.5 总结:玩家视角的合法性

客户端模型告诉我们要相信自己的显示器:

  1. 世界是经典的(因为屏幕显示不出叠加态)。
  2. 未来是开放的(因为你在玩游戏,而不是看录像)。
  3. 资源是有限的(因为我们只计算你当前副本的历史)。

现在的核心问题是:这台简陋的客户端看到的世界,真的和那台完美的对服务器里存的世界是一样的吗?

下一节,我们将证明全书最重要的定理:对于每一个玩家来说,只要他不作弊(不看后台数据库),这两个模型就是完全分辨不出来的。