先熱個(gè)身——關(guān)于usb芯片延遲的測量,以及會(huì)給游戲帶來的影響
首先明確一點(diǎn),先把自己能力提升到對(duì)延遲有高要求的地步,再去提升相關(guān)設(shè)施才有更大的意義。
游戲延遲以及顯示延遲才是大頭,過于糾結(jié)芯片提升十分有限
文章比較枯燥,想看哪部分請(qǐng)手動(dòng)跳轉(zhuǎn)
雖然大家都知道,延遲確實(shí)是對(duì)幾乎所有的游戲都有不良的影響,但是,這玩意對(duì)于我們有多大的直觀影響,可能大部分人的認(rèn)識(shí)其實(shí)都稍微有點(diǎn)偏頗。我想應(yīng)該是有不少人覺得,只要延遲低于一幀,就不會(huì)有實(shí)質(zhì)影響,問題是真的是這樣嗎?
?
Part1 usb輪詢機(jī)制說明
Part2 手柄延遲測試之對(duì)點(diǎn)測試
Part3 手柄延遲測試之a(chǎn)rduino
Part4 手柄延遲對(duì)我們究竟有什么影響
Part1 usb輪詢機(jī)制說明
要解釋這個(gè)問題,最起碼我們要了解一下usb的運(yùn)轉(zhuǎn)機(jī)制。
假設(shè)我們有這么一個(gè)場景:
——————————————————————
剛插上手柄
主機(jī):你誰啊
手柄:我usb手柄
主機(jī):啊,報(bào)一下姓名
手柄:xxxxxx,一會(huì)每幾毫秒碰個(gè)頭
——————————————————————
之后每過幾毫秒
主機(jī):阿柄,匯報(bào)一下工作
手柄:xxxx鍵在按著,資道吧
主機(jī):資道了
——————————————————————
整個(gè)對(duì)話會(huì)固定每隔幾毫秒做一次,這件事一秒做多少次,就叫usb的輪詢率。另外有些主機(jī)會(huì)有加密或者是隔三差五會(huì)改暗號(hào),暗號(hào)對(duì)不上直接讓手柄滾蛋(ps4)
我們關(guān)注的usb延遲實(shí)際上是,從我按鍵按下去,到最終usb發(fā)出按鍵信號(hào)的結(jié)果這中間會(huì)間隔多久。那么從這個(gè)機(jī)制上看,首先至少可以感覺的是,usb的輪詢率高的話至少比低要好一點(diǎn),理論上如果你輪詢率是60的整數(shù)倍的話還不錯(cuò),但是正常來講輪詢的時(shí)間是其他的時(shí)間,比如1,2,4ms。。。。所以說,還是盡量高一點(diǎn)吧,畢竟電競的各項(xiàng)要求還是非常高的,現(xiàn)在的電競鍵盤和鼠標(biāo)都打著1ms的旗號(hào),好處是,夠快,壞處是,費(fèi)電。
那么整個(gè)過程,延遲產(chǎn)生的重大因素,就是芯片的單片機(jī)本身的處理速度,以及代碼的優(yōu)化。如果說手柄太笨的話,那么芯片每輪告訴主機(jī)的按鍵信息可能就是幾輪之前自己記錄下來的信息。

Part2 手柄延遲測試之對(duì)點(diǎn)測試
那么,我們?nèi)绾螠y量手柄的延遲?這個(gè)可以好好說一下
一個(gè)比較著名的方法是游戲?qū)c(diǎn)測試,找一個(gè)比較穩(wěn)定的格斗游戲,接上兩個(gè)手柄,把接地接到一起,一個(gè)按鈕同時(shí)接到兩個(gè)芯片上

按下按鈕會(huì)同時(shí)觸發(fā)兩個(gè)芯片的按鈕,看角色發(fā)招是否是同時(shí),通過統(tǒng)計(jì)有多少發(fā)招是不同步的來得出一個(gè)統(tǒng)計(jì)值,再根據(jù)高中生都學(xué)過的幾何概型來大致確定一個(gè)延遲的值,就像這樣

這個(gè)方案確實(shí)是比較容易理解而且確實(shí)有人去做,網(wǎng)上流傳最廣的幾張表就是這個(gè)操作的結(jié)果,雖然測出來的是相對(duì)值,但是對(duì)于想要選擇高性能搖桿的人來說已經(jīng)很有意義了,就像學(xué)習(xí),你考多少分是一方面,另一方面你不也想看排名嘛,所以這張表也被大多數(shù)人使用和參考。
但是方案的缺陷也是比較明顯,首先是這個(gè)測試過程必須至少有兩個(gè)搖桿,而且如果你遇到了不共地的搖桿,還得改電路(我就見過,hori那個(gè)蟲桿,各種反人類的設(shè)計(jì),用腳設(shè)計(jì)出來的),再有,如果其他人手里的兩個(gè)手柄都不在之前的表里的話,那么也沒辦法給這個(gè)表補(bǔ)充數(shù)據(jù),另外,測試的時(shí)候必須一個(gè)按鈕一個(gè)按鈕去點(diǎn),而且要盯著屏幕去計(jì)數(shù),自己按了多少次,有多少次發(fā)招是不同步的,做多了會(huì)吐的。所以說那個(gè)表是怎么肝出來的
Part3 手柄延遲測試之a(chǎn)rduino
那么,有沒有一個(gè)裝置,能夠識(shí)別usb手柄,能自動(dòng)給按鈕釋放高低電平并且自己統(tǒng)計(jì)從自己釋放信號(hào)到最終接收從usb過來的信號(hào)這之間過了多久?
答案是,有!
作為核心的arduino和usb host shield已經(jīng)足夠成熟了,兼容性極強(qiáng),國內(nèi)外愛好者用這些玩意做出了很多usb手柄相關(guān)的東西,比如之前發(fā)過的https://www.bilibili.com/read/cv11000216這個(gè)是把usb手柄信號(hào)轉(zhuǎn)化成電平信號(hào)的裝置,可以用usb手柄來控制jamma街機(jī)。
https://inputlag.science/controller/methodology這個(gè)是這個(gè)測試方案所對(duì)應(yīng)的項(xiàng)目的來源,開源就意味著誰都可以做,當(dāng)然首先是你要有一定的arduino的基礎(chǔ),裝置上只要是arduino兼容的硬件都沒問題,我用的是arduino nano以及usb host shield mini,因?yàn)閚ano有3.3v和5v供電,而且有usb可以直接與電腦通信,最重要的是,手頭就有。然后畫個(gè)外圍電路,打個(gè)板,就可以測試了,當(dāng)然你可以用面包板,但是有點(diǎn)亂,反正打板不花錢。


這個(gè)方案基本上解決了對(duì)點(diǎn)測試?yán)镉龅降拇蟛糠謫栴},每個(gè)人都可以測試,測試的結(jié)果可以提交給網(wǎng)站,網(wǎng)站還提供了統(tǒng)計(jì)表格模板,把你采集的數(shù)據(jù)往表格里貼,就能夠得出結(jié)果。
另外這個(gè)值是絕對(duì)延遲,后續(xù)可以解釋一個(gè)問題,就是延遲會(huì)對(duì)游戲產(chǎn)生什么實(shí)質(zhì)影響。
問題:整個(gè)系統(tǒng)會(huì)有延遲嗎,這個(gè)結(jié)果可靠嗎,會(huì)不會(huì)這上面測試的結(jié)果與插到電腦上以及主機(jī)的結(jié)果有較大出入?
答案:arduino這種單片機(jī)的頻率還是夠高的,就算是信號(hào)處理和演算也是us級(jí)別,精度夠了
老外用某一個(gè)手柄和ps4做了一個(gè)測試結(jié)果,與這個(gè)裝置測試結(jié)果的曲線高度重合,幾乎可以說明沒有大的問題。相關(guān)文章可以在這里看到https://medium.com/@WydD/controller-input-lag-how-to-measure-it-1ebfd2c9d60
而且usb通訊協(xié)議沒有那么復(fù)雜,現(xiàn)有的協(xié)議都是標(biāo)準(zhǔn)協(xié)議。再有這里也只是討論手柄本身的延遲,至于到主機(jī)內(nèi)部之后延遲會(huì)是多少,那是主機(jī)以及顯示自身的問題了,像妹往生那種離譜的游戲。。。
另外,之前文章里提到的mister,也是一個(gè)兼容大部分手柄的硬件,相關(guān)團(tuán)隊(duì)也用這個(gè)硬件做了類似的測試,測試方法大概幾乎是差不多(沒找到相關(guān)文章),而且統(tǒng)計(jì)方法也是幾乎相同,差別也就是mister測試的手柄更多。https://rpubs.com/misteraddons/inputlatency
Part4 手柄延遲對(duì)我們究竟有什么影響
之前說過,可能有不少人認(rèn)為,只要你延遲不超過1幀就不會(huì)有影響,事實(shí)真的是這樣嗎?在上一part的最后說道老外給了一個(gè)表格
https://medium.com/@WydD/controller-input-lag-how-to-measure-it-1ebfd2c9d60
研究了老外的統(tǒng)計(jì)公式之后,理解了一下意圖,這里解釋一下,看一下圖

綠色是你按下物理按鈕的時(shí)間,藍(lán)色是主機(jī)識(shí)別到信號(hào)的時(shí)間,這里簡化了一下模型,也就是說主機(jī)識(shí)別到信號(hào)之后到游戲程序之間以及最后輸出的延遲是不考慮的,都在同一環(huán)境下考慮也是比較公平(像妹往生那種游戲,算了吧)
由于usb的輪詢遠(yuǎn)比游戲幀率密集,所以我們這里粗糙的認(rèn)為usb會(huì)在一幀內(nèi)的任何地方觸發(fā),老外的表格是做了一個(gè)離散處理,把一幀分成了50份,統(tǒng)計(jì)每一份時(shí)間延遲對(duì)應(yīng)的概率。
那么這就很有意思了。仔細(xì)想一下,就算是延遲是2ms,主機(jī)也可能會(huì)在游戲的2F才收到usb的信號(hào),那么游戲在3F做出動(dòng)作,那么延遲就是一幀;就算是延遲是10ms,主機(jī)也可能在當(dāng)前幀1F收到手柄信號(hào),在2F做出動(dòng)作。那么,最大的差異,就是兩者的跳幀概率是多少了。這才是最直觀的影響。表格內(nèi)的計(jì)算公式核心是條件概率和全概率公式,感興趣的可以自己推一下233333.
所以說,結(jié)論是,延遲低而且穩(wěn)定的芯片不是不會(huì)延遲,而是跳幀的概率會(huì)比延遲高的芯片低得多,我們追求的不就是希望我們的設(shè)備能夠按時(shí)的做出回應(yīng)嘛。
結(jié)語:
追求芯片低延遲是沒什么問題,這里也是講一下需要關(guān)注什么,以及討論一下芯片延遲帶來的影響,用數(shù)據(jù)解釋和反映一些事情,這就是數(shù)據(jù)的美,就像我之前跟學(xué)生說的一樣,如果你未來只能掌握一樣數(shù)學(xué)工具,那么就是四則運(yùn)算,如果你還能再掌握一樣,那就是概率統(tǒng)計(jì)了(笑)
不過就像最開始說的那樣,先把自己水平提高到一定高度再糾結(jié)這種事情。
那么為什么我想寫這個(gè)?是因?yàn)橹笙敫阋恍┦虑?,to be continue