本帖主要讨论守望先锋中距离和角度的精确测量。给出了测量不同尺度距离的尺子的获得方式和具体数据。另外还给出了测量高度和仰角的方法。
我们都知道训练靶场有几处地面上印有官方的尺子,有的以10米为单位,有的以5米为单位。那为什么我还要讨论距离的测量呢?原因有三。第一,我们没办法把这个尺子带到其他的地图中。假如我想知道某张地图中某两个点之间的距离,地面上没有尺子了,该怎么测呢。第二,靶场没有垂直高度的尺子。假如我们想知道法鸡一个shift可以飞多高,该怎么办呢;假如我们想知道狂鼠的身高,又该怎么测量呢。第三,也是最致命的,靶场的尺子最低以5米为单位,分度值太大了。如果我想精确地知道麦克雷一个战术翻滚能滚多远,以靶场的尺子,是无能为力的。
所以我们需要更灵活,更精确的测距手段。在本帖中,我就会一点一点推导出我们需要的所有“尺子”。
一、战术翻滚到底多远——技能尺
最容易想到的尺子当然是技能了。我们可以利用靶场地面的尺子,测量某些英雄位移技能或放置物的长度。这种尺子,我叫做“技能尺”。首先,源氏的shift在各种百科中距离都计为15米。验证它也很容易。让源氏站在靶场40米地面尺的起点,为了保证精确,需要源氏视角转到正下,看好自己相对于地面上标度的具体位置,如下图:
然后抬头正视前方,连续两次shift,再低头看:
完美的30米。这说明源氏的shift距离是标准的15米。这和网上流传的完全一致。通过类似的方法,我们可以测得猎空的shift是标准的7.5米。
读者可能会问,这不都是常识吗,有什么可测的。但未知来源的常识是危险的,会威胁到整个理论体系的严谨性。维基数据出错也不是新鲜事了。还是把所有数据亲测一遍最安全。按照“常识”,麦克雷的战术翻滚距离是多远呢?在网上查一下,所有记载都写着6米。那么我们在靶场试一下。麦克雷站在40米地面尺的起点。连续做5次战术翻滚。低头,是在30米处吗?不是。明显比30米长了一截:
那么麦克雷shift距离究竟是多远呢,这我们之后会精确测量。
经过测试,精确的技能尺可以找到三个: 源氏shift:15米,注意这个位移可以向任意方向 猎空shift:7.5米,这个位移只能水平移动 猩猩罩子:半径5米的完美球形
二、测距圣地好莱坞——地砖和喷漆
测量距离的圣地是好莱坞进攻方第一个出生点附近。出生点里面的地毯花纹有规律地大面积平铺,只要知道了一个周期的长度,我们就拥有了一大片完美的地面尺。出生点门外是一个大空地,有一个长且直的星光大道,道旁还有规律的地砖。只要测出了那些地砖的边长,我们就有了一个比靶场40米还长的地面尺,分度值还远小于10米。门口右手边还有一个小高台,高台柱子的花纹也是有规律的,很方便未来测量英雄的身高(视角高度)。
如果这些地砖的边长也是规律的1米或者1.5米就好了。然而使用猎空的shift验证之后,发现出生点内的花纹周期虽然接近1米,但还是略小于1的。而门外的地砖边长更不像是整数。
这时,我想到了利用喷漆来帮忙。确切地说,用英雄成就获得的像素喷漆。像素喷漆是由一个一个小像素方格构成的,正好可以当做测量微小距离的尺子。用天使的像素喷漆测量之后,发现出生点内地毯的一个周期等于68.2个天使像素。让猎空站在出生点地毯花纹的一个周期点处,向前闪现一下,经过了7个周期多一点。多出的部分继续用天使像素来计量,发现多出了约31个天使像素。这样我们就得到了 7.5米=(68.2*7+31)天使像素,也就是68.6天使像素=1米。现在我们有了测量微小距离的尺子:天使像素喷漆。要想测试某小距离,只需要在它旁边喷一个天使像素喷漆,对照下面的图片省掉数像素的枯燥过程,然后按照前面给出的换算方式把天使像素数换算成米即可。
一个自然的问题是,是不是所有英雄的像素喷漆中,单个像素的长度都是一样的呢?经过实验,我得到了很遗憾的结论。猎空的换算大约是43猎空像素=1米。而法老之鹰的换算是68.33法鸡像素=1米。这里也给出法老之鹰像素喷漆的网格速查图:
现在我们就可以走出出生点,测量更多的距离了。星光大道的地砖边长是1.29米:
门口右边柱子的单块砖的高度是0.546米。另外下图还能告诉我们法老之鹰的视角高度是1.31米(屏幕下面还有两块相同的砖):
为了给我的遥遥无期的下个帖子做准备,我还测出了黑影站立时视角高度是1.28米,蹲下时是0.85米。狂鼠站立视角高度是1.21米,蹲下时是0.9米。
之前提到的麦克雷战术翻滚距离,在门外的地砖测试之后,发现一个翻滚距离比五个地砖少24个法鸡像素,所以麦克雷战术翻滚距离约为6.1米。
三、三角函鼠——高度和仰角的测量
计划中的下一篇攻略贴中,我会计算狂鼠shift的弹道路线。但是要想得到不同角度下的弹道,首先我们需要一种精确测量仰角的方式。本节提供仰角的一种测量方法。
在讨论仰角之前,先讨论一下守望先锋的垂直FOV。我们在设置里都能看见,守望先锋的最大FOV,同时也是默认FOV是103。这个FOV是水平FOV,也就是说你的视野在最左到最右有103度。那么垂直FOV是多少呢?这和电脑的屏幕比例有关。我的电脑是16:9的,这意味着tan(水平FOV/2) / tan(垂直FOV/2) =16/9,这样我们得到了tan(垂直FOV/2)约为0.707,垂直FOV约为70.5度。(很有意思的一点是0.707正好是1/√2,也就是说你在游戏里里正对一面墙,距离为1,那么这堵墙显示在在屏幕上的部分的长度是√2)。
如何确定平视:
插曲:如何确定平视?近距离的平视比较容易确定,只要保证你屏幕边缘的一条本应垂直向上的线在画面上也是垂直向上的即可。远距离的平视较为困难,因为自然的视角总是稍微偏上的。我的办法是去远方喷个漆,然后把准星和喷漆放在同一水平线上,当然这需要保证这块地面是平坦的。
如上图,令狂鼠站在好莱坞星光大道的起点(有规律的地砖刚开始的地方),平视星光大道延伸的方向。这时可以看到远方有一棵大树,我们现在尝试计算地面到树干红圈处的高度。记红点到狂鼠眼睛的仰角为A,红点高度H,狂鼠到树根距离D。
最容易计算的是D。通过数地砖,再用法鸡像素喷漆精准测量,D=41.9米。下面我们计算A。通过截图分析,得到红圈里的红点到屏幕中心的像素垂直距离是271像素。而半个屏幕高度为540像素。我们可以得到tan(垂直FOV/2)/tan(A)=540/271。前面我们知道tan(垂直FOV/2)=0.707,这样tan(A)就得到了,约为0.3548。这样,角A约为19.53度。而tan(A)又等于(H-狂鼠身高)/D。代入狂鼠身高1.21,我们最终得到H=16.07米。
为了验证这个结论,我用了简单的相似三角形的方法粗略又测了一下。我让小伙伴用猩猩在我前面放罩子,因为罩子顶端有一个亮斑,我可以让他微调罩子位置,使得亮斑在我的视野里与树上的红点位置重合。这时我们两个距离D'约为10.2米。罩子高度H'=5米。相似三角形告诉我们,(H'-1.21)/D'=(H-1.21)/D,这样计算得到的H是16.77米。考虑到放罩子和对齐亮斑的过程误差较大,这0.7米的误差是在接受范围之内的。
下面测量仰视时的仰角。在上图情况中,狂鼠准星明显存在一个仰角。FOV剖面图如下:
点O为角色眼睛的位置,角BOA是角色的垂直FOV,OZ是视线正前方向。OZ'是狂鼠平视前方时的视线,Z'F是那棵树(确切的说是树高于狂鼠的部分),F即为红点位置。我们想计算的仰角就是角ZOZ'。
通过测量,现在红点到屏幕中心距离为50像素。所以tan(FOZ)/tan(垂直FOV/2)=50/540,得到角FOZ约为3.75度。前面计算过角FOZ'约为19.53度,那么我们想要的仰角就求出来了,是19.53-3.75=15.78度。
四、总结和展望
至此,我们通过简单的靶场地面尺,得到了粗放的技能尺,然后进一步利用地砖得到了像素喷漆尺。最后利用所有这些工具,成功测量了以前难以测量的高度和仰角。灵活利用本文提到的方法和工具,守望先锋中的很多以前难以测量的东西都可以测量了。
下一步,我准备测量狂鼠的shift和黑影的E的弹道。初步的数据表明他们很可能不是完美的抛物线。我还需要更多的数据分析,设计新的测试方法才能更好地测量。