第1221章 這個哥哥真好
邊煜一屁股坐到主控台前,熟門熟路地把全息晶片夾進調試塢。
藍色指示燈亮起。
一排參數從屏幕上滾過去。
沈恪站在旁邊,手裡拿著連接線,低頭看了一眼接口。
「你上次說的延遲抖動,就是這裡?」
「對。」邊煜敲了兩下鍵盤,「渲染引擎沒問題,光場重建也能跑滿,就是交互協議這塊,幀同步偶爾會漂。」
「漂多少?」
「峰值十二毫秒。」
沈恪把線接好。
「對普通遊戲不明顯,對全息不行。」
「所以我說它欠揍。」邊煜理直氣壯。
其玉站在旁邊,小手扶著桌沿,努力仰著腦袋看屏幕。
奈何個子太矮,再使勁兒,也只能看到一部分。
那些跳動的字母和數字更看不懂。
但他卻看得認真。
邊煜已經顧不上他了,一邊啟動模擬器,一邊跟沈恪說:「你看這裡,動作採樣是六十幀,服務端判定也是六十幀,但本地渲染插幀到了九十。問題是延遲補償算法沒把手勢預測算進去。」
沈恪坐到另一側,調出原始碼。
「你把手勢和位移放在同一條預測鏈里了?」
「嗯。」
「難怪。」
邊煜扭頭:「嗯?什麼情況?」
沈恪把一段代碼選中。
「位移可以線性外推,手勢不行。手指動作有停頓,有反悔,還有微調。你用同一個補償模型,快的時候准,慢的時候就會飄。」
邊煜盯著屏幕兩秒:「……有道理。」
「把手勢拆出來,單獨做狀態機。」
「狀態機?」
「觸碰、懸停、抓取、釋放,每個狀態給不同權重。比如抓取後,位置預測可以強一點,懸停的時候保守一點。」
邊煜拍了下桌子:「可以啊沈恪!你這個人不說話的時候像在發呆,一說話就能救命。」
沈恪把鍵盤推給他:「少夸。改。」
「改就改。」
邊煜嘴上不服,手已經飛快動起來。
其玉看著哥哥的手。
啪嗒啪嗒,很快,像小雨打在窗戶上。
哥哥好厲害!
接著又看向沈恪。
en……這個哥哥不像煜哥哥那麼話多。
眼神落得穩,手指指到哪裡,煜哥哥就改到哪裡。
兩個人就像……拼積木。
一個負責把積木倒出來,一個負責指導怎麼拼。
很快屏幕上全息遊戲的測試場景打開。
半空里浮出一片淺藍色網格。
網格向四周鋪開,變成森林。
樹葉不是貼圖一樣糊在平面上,而是有層次地懸在光里。
風一吹,葉片邊緣有細微的折光。
遠處有一條溪,溪水從石頭旁繞過去,水面反射著天光。
邊煜戴上輕量眼鏡,拿起手勢環。
「來,跑一把。」
沈恪也戴上,兩人進入測試模式。
其玉站在旁邊,一動不動。
邊煜抬手,虛空里出現一把短弓。
沈恪那邊是一枚透明的控制球,裡面有一圈圈發光的坐標。
邊煜拉弓,箭矢成形,瞄準遠處的靶子。
鬆手——
箭飛出去,可惜沒中紅心。
偏了一點。
邊煜立刻皺眉。
「怎麼又這樣?」
沈恪低頭看日誌:「不是渲染延遲,是輸入上報晚了。你看,客戶端第2417幀採到釋放動作,服務端第2419幀才判定。」
「網絡模擬只有三十毫秒,所以不是網絡,是協議包。」
邊煜把日誌拉開,「我壓縮了手勢數據。」
「壓太狠了。」沈恪說,「釋放動作的關鍵幀被合併了。」
邊煜沉默一秒,然後小聲:「我為了省帶寬。」
沈恪看他:「省到箭都飛歪了。」
邊煜:「……」
其玉忽然開口:「哥哥,箭為什麼要聽電腦的話?」
兩個少年同時停住。
邊煜這才想起旁邊還有個小不點:「哎,其玉,你還在啊。」
其玉點頭:「我一直在哦。」
邊煜有點心虛,撓撓頭:「哥哥剛才忙,沒顧上你。」
其玉認真地說:「嗯嗯,我知道,你們在修箭。」
沈恪摘下一邊眼鏡,彎腰看他。
「想試試嗎?」
其玉看了看那個手勢環,滿眼好奇:「我……可以嗎?」
「當然可以。」
邊煜有些擔憂:「他太小了吧,手勢環都——」
話還沒說完,沈恪已經把椅子往後挪了挪。
將其玉抱起來,讓他坐在自己腿上。
「用兒童模式。」
「行吧。」邊煜轉身調設置。
沈恪把小一號的輔助環套到其玉手腕上。
「這個不重,你抬手,它就知道你想做什麼。」
其玉抬了抬手,半空里出現了一隻小木鳥。
鳥撲棱了兩下翅膀,落在一根樹枝上。
「哇!好神奇!」其玉眼睛亮了一下。
他伸出手,慢慢靠近。
小木鳥往旁邊跳了一步。
其玉停住。
「它怕我?」
沈恪耐心解釋:「不是怕,是它在判斷你的動作。」
「判斷是什麼?」
「enn……就是它在思考,你是要摸它,還是要抓它。」
其玉低頭看自己的手:「那我慢一點,它是不是就知道我要摸它?」
「對。」
沈恪握住他手腕,帶著他慢慢往前。
「你看,動作慢,手掌打開,系統會把你判定成友好互動。」
小木鳥歪了歪頭,然後低頭啄了一下其玉的指尖。
其玉抿嘴,很輕地笑了一下。
邊煜在旁邊看見,忍不住說:「哇,它真給你面子,我剛才伸手它啄了我三次。」
其玉想了想,現學現賣:「是因為哥哥你動作太快了。」
邊煜捂住心口:「好好好,我被三歲小朋友教育了。」
沈恪唇角彎了一下。
他把日誌窗口縮小,給其玉打開簡單任務。
「試試把這顆果子放進籃子裡。」
樹枝上垂著一顆紅果,旁邊有一個小籃子。
其玉伸手去拿,果子從枝頭掉下來,滾到地上。
他愣了愣:「哥哥……我沒拿住。」
「抓取的時候,手指要合起來。」沈恪示範,「這裡有碰撞檢測,你的手碰到果子以後,系統會看你的手指有沒有收攏,如果收攏,就算你抓住了。」
其玉又試了一次,這次果子被他穩穩拿住。
他放進籃子,籃子亮了一下。
任務完成,屏幕角落跳出一顆小星星。
其玉看著那顆星星:「它又是怎麼知道我放進去了?」
邊煜馬上興奮起來:「這個我會!」
沈恪看他一眼。
邊煜清清嗓子,「因為籃子有觸發區域,你把果子移動到籃子範圍裡面,系統檢測到它們的坐標重疊,就會判定完成。」
其玉想了想:「如果我放在籃子邊上呢?」
「那要看碰撞體。」沈恪接過話,沒有因為他只有三歲就敷衍糊弄,「如果只是視覺上挨著,但碰撞體沒有進入籃子區域,就不算。」
其玉點點頭:「我知道了,就像拼圖,放在旁邊,不是放進去。」
「對。」
藍色指示燈亮起。
一排參數從屏幕上滾過去。
沈恪站在旁邊,手裡拿著連接線,低頭看了一眼接口。
「你上次說的延遲抖動,就是這裡?」
「對。」邊煜敲了兩下鍵盤,「渲染引擎沒問題,光場重建也能跑滿,就是交互協議這塊,幀同步偶爾會漂。」
「漂多少?」
「峰值十二毫秒。」
沈恪把線接好。
「對普通遊戲不明顯,對全息不行。」
「所以我說它欠揍。」邊煜理直氣壯。
其玉站在旁邊,小手扶著桌沿,努力仰著腦袋看屏幕。
奈何個子太矮,再使勁兒,也只能看到一部分。
那些跳動的字母和數字更看不懂。
但他卻看得認真。
邊煜已經顧不上他了,一邊啟動模擬器,一邊跟沈恪說:「你看這裡,動作採樣是六十幀,服務端判定也是六十幀,但本地渲染插幀到了九十。問題是延遲補償算法沒把手勢預測算進去。」
沈恪坐到另一側,調出原始碼。
「你把手勢和位移放在同一條預測鏈里了?」
「嗯。」
「難怪。」
邊煜扭頭:「嗯?什麼情況?」
沈恪把一段代碼選中。
「位移可以線性外推,手勢不行。手指動作有停頓,有反悔,還有微調。你用同一個補償模型,快的時候准,慢的時候就會飄。」
邊煜盯著屏幕兩秒:「……有道理。」
「把手勢拆出來,單獨做狀態機。」
「狀態機?」
「觸碰、懸停、抓取、釋放,每個狀態給不同權重。比如抓取後,位置預測可以強一點,懸停的時候保守一點。」
邊煜拍了下桌子:「可以啊沈恪!你這個人不說話的時候像在發呆,一說話就能救命。」
沈恪把鍵盤推給他:「少夸。改。」
「改就改。」
邊煜嘴上不服,手已經飛快動起來。
其玉看著哥哥的手。
啪嗒啪嗒,很快,像小雨打在窗戶上。
哥哥好厲害!
接著又看向沈恪。
en……這個哥哥不像煜哥哥那麼話多。
眼神落得穩,手指指到哪裡,煜哥哥就改到哪裡。
兩個人就像……拼積木。
一個負責把積木倒出來,一個負責指導怎麼拼。
很快屏幕上全息遊戲的測試場景打開。
半空里浮出一片淺藍色網格。
網格向四周鋪開,變成森林。
樹葉不是貼圖一樣糊在平面上,而是有層次地懸在光里。
風一吹,葉片邊緣有細微的折光。
遠處有一條溪,溪水從石頭旁繞過去,水面反射著天光。
邊煜戴上輕量眼鏡,拿起手勢環。
「來,跑一把。」
沈恪也戴上,兩人進入測試模式。
其玉站在旁邊,一動不動。
邊煜抬手,虛空里出現一把短弓。
沈恪那邊是一枚透明的控制球,裡面有一圈圈發光的坐標。
邊煜拉弓,箭矢成形,瞄準遠處的靶子。
鬆手——
箭飛出去,可惜沒中紅心。
偏了一點。
邊煜立刻皺眉。
「怎麼又這樣?」
沈恪低頭看日誌:「不是渲染延遲,是輸入上報晚了。你看,客戶端第2417幀採到釋放動作,服務端第2419幀才判定。」
「網絡模擬只有三十毫秒,所以不是網絡,是協議包。」
邊煜把日誌拉開,「我壓縮了手勢數據。」
「壓太狠了。」沈恪說,「釋放動作的關鍵幀被合併了。」
邊煜沉默一秒,然後小聲:「我為了省帶寬。」
沈恪看他:「省到箭都飛歪了。」
邊煜:「……」
其玉忽然開口:「哥哥,箭為什麼要聽電腦的話?」
兩個少年同時停住。
邊煜這才想起旁邊還有個小不點:「哎,其玉,你還在啊。」
其玉點頭:「我一直在哦。」
邊煜有點心虛,撓撓頭:「哥哥剛才忙,沒顧上你。」
其玉認真地說:「嗯嗯,我知道,你們在修箭。」
沈恪摘下一邊眼鏡,彎腰看他。
「想試試嗎?」
其玉看了看那個手勢環,滿眼好奇:「我……可以嗎?」
「當然可以。」
邊煜有些擔憂:「他太小了吧,手勢環都——」
話還沒說完,沈恪已經把椅子往後挪了挪。
將其玉抱起來,讓他坐在自己腿上。
「用兒童模式。」
「行吧。」邊煜轉身調設置。
沈恪把小一號的輔助環套到其玉手腕上。
「這個不重,你抬手,它就知道你想做什麼。」
其玉抬了抬手,半空里出現了一隻小木鳥。
鳥撲棱了兩下翅膀,落在一根樹枝上。
「哇!好神奇!」其玉眼睛亮了一下。
他伸出手,慢慢靠近。
小木鳥往旁邊跳了一步。
其玉停住。
「它怕我?」
沈恪耐心解釋:「不是怕,是它在判斷你的動作。」
「判斷是什麼?」
「enn……就是它在思考,你是要摸它,還是要抓它。」
其玉低頭看自己的手:「那我慢一點,它是不是就知道我要摸它?」
「對。」
沈恪握住他手腕,帶著他慢慢往前。
「你看,動作慢,手掌打開,系統會把你判定成友好互動。」
小木鳥歪了歪頭,然後低頭啄了一下其玉的指尖。
其玉抿嘴,很輕地笑了一下。
邊煜在旁邊看見,忍不住說:「哇,它真給你面子,我剛才伸手它啄了我三次。」
其玉想了想,現學現賣:「是因為哥哥你動作太快了。」
邊煜捂住心口:「好好好,我被三歲小朋友教育了。」
沈恪唇角彎了一下。
他把日誌窗口縮小,給其玉打開簡單任務。
「試試把這顆果子放進籃子裡。」
樹枝上垂著一顆紅果,旁邊有一個小籃子。
其玉伸手去拿,果子從枝頭掉下來,滾到地上。
他愣了愣:「哥哥……我沒拿住。」
「抓取的時候,手指要合起來。」沈恪示範,「這裡有碰撞檢測,你的手碰到果子以後,系統會看你的手指有沒有收攏,如果收攏,就算你抓住了。」
其玉又試了一次,這次果子被他穩穩拿住。
他放進籃子,籃子亮了一下。
任務完成,屏幕角落跳出一顆小星星。
其玉看著那顆星星:「它又是怎麼知道我放進去了?」
邊煜馬上興奮起來:「這個我會!」
沈恪看他一眼。
邊煜清清嗓子,「因為籃子有觸發區域,你把果子移動到籃子範圍裡面,系統檢測到它們的坐標重疊,就會判定完成。」
其玉想了想:「如果我放在籃子邊上呢?」
「那要看碰撞體。」沈恪接過話,沒有因為他只有三歲就敷衍糊弄,「如果只是視覺上挨著,但碰撞體沒有進入籃子區域,就不算。」
其玉點點頭:「我知道了,就像拼圖,放在旁邊,不是放進去。」
「對。」