第二卷 附錄小說 杉鹿圓的FPS講座 理論強化篇(2/2)
「那……那麼……也就是說大家在同一個會場,卻特地與遠方的伺服器連線對戰嗎?」
「對啊。不過啊,不管在什麼樣的環境下,網路對戰都會有個棘手的問題,那就是Lag。」
「Lag……」
「你就當作是延遲或滯後的意思就對了。比方說……有了,在玩擬真系FPS時,有沒有過一種經驗,就是明明是自己先開槍,卻射輸對方?」
岸嶺有這個經驗。
「嗯,有有有。但我那時以為是槍的問題,或是我本領太差。」
「哎,你的話或許有可能,不過有時候應該也是Lag造成的。聽好嘍,基本上,假設有十個人玩網路對戰,會由十個人當中的一個人開設伺服器,然後十個人都以用戶端程式與伺服器連線。換句話說,開設伺服器的人會同時用到伺服器與用戶端。」
杉鹿開始在白板上畫一幅新的示意圖。
首先她在中央寫上「PC1用戶端」,正下方寫上「伺服器」。然後用紅線把「PC1用戶端」與「伺服器」連起來。
接著她又在周圍寫上「PC2用戶端」「PC3用戶端」「PC4用戶端」,同樣用紅線連到中央的「伺服器」。
「你應該看得懂這個的意思吧?」
「勉……勉強。也就是PC1開設了伺服器,然後所有玩家以用戶端程式跟伺服器連線對吧?」
「沒錯。用戶端程式每隔幾影格,就會把這幾影格之間的手把輸入訊號、移動速度與視線角度等資料一起持續送往伺服器。伺服器處理這些資料,再把結果送回用戶端,顯示在畫面上。不過也不是所有FPS都是如此,像格鬥遊戲的話甚至是每影格都會持續將手把的輸入訊號送到伺服器。喂,岸嶺?你有跟上嗎?」
「呃,嗯,勉強……」
「哎,沒差,晚點我再幫你做個總整理。」
「不過,這真的辦得到嗎?」
跟岸嶺不同,天道似乎都有聽懂,手托著下巴問道:
「你說用戶端每隔幾影格,就會把這幾影格之間的手把訊號或角色資料送到伺服器……但十影格也不過才〇‧一二秒吧?這麼多資料能送得這麼快嗎?」
「按鈕訊號的資料量其實不大!」瀨名老師說:「因為基本上一顆按鈕用ON跟OFF就能管理了,加上十字鍵也才十六位元,也就是說只要有二個位元組就能管理十六顆按鈕了!當然如果再加上類比操作杆或角色的視線角度,問題會再複雜一點,不過因為現代壓縮技術進步的關係,實際上的數字比這更小!而且就連用電話線上網的時代,連線速度都有二八八〇〇BPS了,更不要說現在寬頻技術發達,有些廠商甚至主打最高一〇MBPS!〇‧一秒傳送個幾位元,小意思啦!」
「原來如此,也是呢。」
天道好像明白了,但又是位元又是位元組的,岸嶺還是一樣有聽沒懂。
「啊,岸嶺同學,剛才講的這些不懂沒關係!簡而言之,就是世界一直在進步啦!」
「哦,這我就懂了。」
「然後呢,接下來才是關鍵。網路連線速度越來越快是事實,但是在網路上傳遞資料,不管怎麼樣就是會產生延遲。比方說日本與美國單程大約一萬公里,往返就有兩萬公里,對吧?就算用光速傳遞資料,也不可能一瞬間就傳到。」
「對耶,就算光速是每秒三十萬公里,也還是會產生〇‧〇六七秒的Lag呢。」
天道再度以驚人的心算能力一瞬間算出答案。
「沒錯。如果是六十FPS的遊戲的話,一影格是〇‧〇一七秒,單純計算起來就會產生四影格的延遲。在解釋Ping的時候我也講過,實際上必須透過數據機或路由器等各種裝置處理資料,所以速度會更慢。一旦延遲達到十影格左右,在一槍致命的擬真系FPS就會攸關生死問題,對吧?」
岸嶺勉強聽懂了她的意思。
「嗯,對啊。要是被狙擊手爆頭,一槍就沒命了。」
「所以網路遊戲為了解決這個物理性的Lag,就會做很多處理。比較具代表性的處理方式,就是『在伺服器程式內架構未來世界』。」
「未……未來世界?」
話題突然變得好誇張。
「沒錯。講起來有點複雜,FPS的伺服器程式會與用戶端互相傳遞資料,並且架構一個我們看不到的世界。這個世界只是沒有顯示圖像,其他都一樣,在這個世界裡也有玩家操作的角色在玩遊戲。而且這個世界是未來的世界,不過只比我們快個幾影格就是了。說成時間進行得比我們快,或許比較好懂?然後用戶端將手把訊號傳送到這個世界,藉此改變過去……應該說重新架構未來世界,再把結果反映到我們的遊戲畫面上。」
講到這裡,杉鹿轉向瀨名老師。
「還是實際演練一下吧。麻煩老師準備一下遊戲,要選一中槍就會沒命的擬真系FPS。然後請老師開一個私人房間,叫我們過去。」
「嗯,我知道了!」
瀨名老師手腳俐落地啟動遊戲,創建了私人房間。
然後岸嶺等人進入房間,啟動對戰模式。
「這時候伺服器是在瀨名老師那邊,然後包括瀨名老師在內,我們四個人都以用戶端連接到伺服器。現在,比方說我移動一下角色──」
杉鹿先把自己的角色移動到天道的角色面前。現在天道的畫面上看得到杉鹿,杉鹿的畫面上也看得到天道。
「看好嘍。兩個螢幕擺在一起,應該很清楚,你仔細比較一下我跟天道的畫面。」
杉鹿把左操作杆稍微往前推了一下,讓角色前進。
首先,杉鹿畫面上的角色立刻前進。然後稍微慢了一步,天道畫面上的角色也跟著移動。
「唔,杉鹿的畫面上沒有任何問題,但我的畫面稍微慢了一點。這就是Lag嗎?」
「對,不過,這個Lag已經把影響處理到最小了。為了做這個處理,伺服器內才需要描繪『未來世界』。其實不會很難懂,比方說──」
杉鹿再度指著遊戲畫面。
「現在遊戲裡所有角色都沒在動,也沒有人按手把按鈕,所以伺服器內的未來世界,大家應該也都是靜止不動的。可是,如果我現在讓角色前進……」
杉鹿又推了一下類比操作杆。
「這樣一來,我輸入的訊號就會送到伺服器,變成『角色在過去移動了』,於是未來世界就會重新計算、架構。然後這份未來的資料會再送回各個用戶端,反映到遊戲上。即使有幾影格無法迴避的物理性Lag,因為伺服器程式一直在架構幾影格的未來世界,然後將結果反映給用戶端,所以至少看起來感覺不到太大延遲。開槍也是一樣。」
杉鹿的角色對天道開了一槍。
還是一樣,慢了一拍後才出現損傷,使天道的畫面發出紅光。
「首先開槍之後,訊號會送到伺服器,反映到未來世界之中,然後伺服器會比對其他角色的位置資料,判斷是否命中。一旦判斷命中了,伺服器就會處理損傷資料,透過網路再送回用戶端
,然後才會反映在各個玩家的畫面上。」
「……好像聽懂了,又好像沒聽懂。」
事實上講到這裡,已經超出了岸嶺的理解範圍。
「嗯,我也開始有點混亂了。」
就連天道都這麼說。
「哎,會混亂也是沒辦法的!」瀨名老師說:「簡而言之呢,各位!就是網路對戰一定會有物理性的Lag!為了解決……或者該說掩飾這個問題,伺服器內會描繪未來世界,然後把計算結果反映給用戶端!所以自己看到的畫面跟別人的畫面會有誤差!」
這樣歸納的確比較好懂。
「講完了這些,才終於能夠回到天道一開始的疑問。」
「哦,就是用點發打倒敵人的問題,對吧?」
「簡而言之,就是當你的角色在完全停止不動時被敵人開槍打中了,就算急著想移動,手把訊號『送到伺服器』,『在未來世界做處理』,『再將結果反映到遊戲上』,其實要花蠻多時間的。所以結論就是『從停止狀態開始移動,會比自己的畫面看起來更花時間』。」
講到這裡,杉鹿深吸一口氣調整呼吸。
「啊──真是,講了老半天,結論不過就是這麼一句話:『等到中槍才想躲就來不及了』。」
「原來是這麼回事啊。」
天道若有所感地點點頭。
「你這麼一講讓我想到,有時候被敵人開槍打中之後躲到隱蔽處,卻常會照樣死掉。我甚至還以為是程式漏洞呢……」
「這正是杉鹿同學解釋的現象!換句話說,中彈之後急著想跑,但是在手把訊號傳送到伺服器,世界更新之前,伺服器已經先做出了中彈判定,角色就死了!」
「……好像聽懂了,又好像沒聽懂。」
至於岸嶺還是一樣,有點丈二金剛摸不著頭腦。
「你還不懂嗎?總之,一旦你讓角色停下來,自己的畫面看起來可能還好,在其他玩家的畫面上卻已經站很久了。站著不動的敵人打起來最輕鬆了對吧?為了預防這一點,重要的是儘量不要停下來,並且儘量避免讓動作變慢。理論不懂沒關係,明白這一點就夠了。」
「啊,嗯,歸納得這麼簡短,我總算聽懂了。」
「而且連線的Lag,會因為一點小原因而輕易變嚴重。只要哪邊發生網路塞車,馬上就會造成嚴重Lag。Lag如果太嚴重,或者說Ping太差,有時候會發生明明是自己先開槍,卻還是被對手射殺的現象。」
「簡而言之,就是如果跟對手完全同時開槍,贏的會是──Ping比較好的一方?」
杉鹿點頭回答天道的問題。
「哎,就是這麼回事。Ping較差的一方就連接收伺服器資料的間隔都會比較長,所以遊戲更新也會斷斷續續的。這樣一來,可能……當然也要看程式怎麼處理,但其他玩家的角色看起來可能會像是在瞬間移動,或是其他類似的現象,總之應該會對自己很不利。」
「那真的很嚴重……也就是說,現在我們幾個當中,開伺服器的瀨名老師最占優勢?」
「基本上可以這麼說!」瀨名老師說:「不過,我的用戶端程式應該會基於這點做些調整!再說JGBC之類的大賽網路都很穩,這方面應該是不用擔心!」
「不過畢竟還是有物理性Lag,所以動作反映就是會比較慢。非得狙擊或是埋伏的時候沒辦法,但永遠都是隨時移動的一方比較有利。講了老半天的理論,其實結論不過如此。」
「原來是這樣,所以大家才會說FPS里最難纏的,是殺進敵陣的攻擊手?」
「哎,算是原因之一啦。總之,我的講課就到此結束。知道理論當然很重要,不過遊戲本領不是靠理論就能變強的。好啦,差不多該來玩遊戲了吧。」
「也是。那麼為了實踐杉鹿的教導,今天照常開始正式的社團活動吧。」
就這樣,岸嶺等人用剩下的時間大玩特玩FPS。
不久之後,岸嶺將以攻擊手之名在JGBC一舉成名,不過那又是另一個故事了。