利用慣性和加速度進行網游位置同步
帶寬限制下的視覺實體屬性傳播
(Propagation of Visual Entity Properties Under Bandwidth Constraints)
(http://blog.csdn.net/lfhfut/archive/2008/03/02/2138512.aspx)
一文中使用滯后補償時間(LCT, Lag Compensation Time)來平滑客戶端的顯示.
在此方法下, 客戶端主角顯示在未來位置, 超前于服務器時間,
而同伴顯示過去的位置, 滯后于服務器時間.
所以兩個人一齊跑時, 總是會發現同伴落后于自己.
為了減弱同伴落后問題, LCT應該用于遠方物體的位置同步, 越遠LCT可以越大.
就像我們觀察星星, 我們看到是其實是幾萬年前星星的樣子, 因為星星距離我們有幾萬光年.
對于周圍近距離的物體, LCT應該盡量小, 接近0.
所以上文并沒有解決客戶端的平滑問題.
文中所述的導航預測算法(DR, Dead Reckoning)并不應該放棄.
導航預測算法的原理是推算出未來的位置,LCT是將過去的位置作為現在位置來處理.
對于鄰近物體, 應該顯示未來的位置.
因為出于操作感的考慮, 主角的位置是超前于服務器的, 不可能等服務器確認后再移動.
所以周圍同伴的位置也應該是超前的, 這樣才不會有同伴總是落后于自己的現象.
導航預測算法不適用的主要原因是, 網游人物的移動是高度隨機的, 狀態更新太頻繁.
這其實不是問題, 因為有預測肯定比沒有預測要好.
在預測范圍內, 就不必發位置更新.
最差情況下, 每個預測結果都是錯誤的, 必須修正為實際的位置,
這就退化成為沒有預測的簡單的位置更新方法.
但是如果網絡延時50ms, 這50ms的預測是必須的.
因為客戶端表現的是超前服務器50ms前的景象.
這就存在同伴掉下懸崖的現象, 因為同伴在懸崖邊上的停止的消息要在50ms后才到.
這種問題在預測法中是無法解決的, 除非添加行為預測.
但是可以添加一個加速度來減少這種預測錯誤.
導航預測算法適用于飛機飛行模擬這類具有很大慣性的移動.
網游中的移動問題根源就是慣性不足, 有了慣性, 角色將無法任意更改移動狀態,
從而大大減少預測錯誤.
人物在懸崖邊上停止的動作必須有個減速的過程, 只要在50ms之前減速,
就會正確計算出停止點, 避免了墜崖. 開始移動時也是有個加速過程.
并且, 客戶端主角的慣性可以大于服務器端, 而周圍物體的慣性可以小于服務器端.
產生的效果是, 主角的動作變遲鈍, 減少超前時間.
而周圍物體稍稍靈活, 增加了超前時間.
或許我們所處的世界也是虛擬的, 創世者為了位置同步而給我們這個世界加上了慣性和加速度的規則.
(轉載請注明來源于金慶的專欄)
帶寬限制下的視覺實體屬性傳播
(Propagation of Visual Entity Properties Under Bandwidth Constraints)
(http://blog.csdn.net/lfhfut/archive/2008/03/02/2138512.aspx)
一文中使用滯后補償時間(LCT, Lag Compensation Time)來平滑客戶端的顯示.
在此方法下, 客戶端主角顯示在未來位置, 超前于服務器時間,
而同伴顯示過去的位置, 滯后于服務器時間.
所以兩個人一齊跑時, 總是會發現同伴落后于自己.
為了減弱同伴落后問題, LCT應該用于遠方物體的位置同步, 越遠LCT可以越大.
就像我們觀察星星, 我們看到是其實是幾萬年前星星的樣子, 因為星星距離我們有幾萬光年.
對于周圍近距離的物體, LCT應該盡量小, 接近0.
所以上文并沒有解決客戶端的平滑問題.
文中所述的導航預測算法(DR, Dead Reckoning)并不應該放棄.
導航預測算法的原理是推算出未來的位置,LCT是將過去的位置作為現在位置來處理.
對于鄰近物體, 應該顯示未來的位置.
因為出于操作感的考慮, 主角的位置是超前于服務器的, 不可能等服務器確認后再移動.
所以周圍同伴的位置也應該是超前的, 這樣才不會有同伴總是落后于自己的現象.
導航預測算法不適用的主要原因是, 網游人物的移動是高度隨機的, 狀態更新太頻繁.
這其實不是問題, 因為有預測肯定比沒有預測要好.
在預測范圍內, 就不必發位置更新.
最差情況下, 每個預測結果都是錯誤的, 必須修正為實際的位置,
這就退化成為沒有預測的簡單的位置更新方法.
但是如果網絡延時50ms, 這50ms的預測是必須的.
因為客戶端表現的是超前服務器50ms前的景象.
這就存在同伴掉下懸崖的現象, 因為同伴在懸崖邊上的停止的消息要在50ms后才到.
這種問題在預測法中是無法解決的, 除非添加行為預測.
但是可以添加一個加速度來減少這種預測錯誤.
導航預測算法適用于飛機飛行模擬這類具有很大慣性的移動.
網游中的移動問題根源就是慣性不足, 有了慣性, 角色將無法任意更改移動狀態,
從而大大減少預測錯誤.
人物在懸崖邊上停止的動作必須有個減速的過程, 只要在50ms之前減速,
就會正確計算出停止點, 避免了墜崖. 開始移動時也是有個加速過程.
并且, 客戶端主角的慣性可以大于服務器端, 而周圍物體的慣性可以小于服務器端.
產生的效果是, 主角的動作變遲鈍, 減少超前時間.
而周圍物體稍稍靈活, 增加了超前時間.
或許我們所處的世界也是虛擬的, 創世者為了位置同步而給我們這個世界加上了慣性和加速度的規則.
(轉載請注明來源于金慶的專欄)