HalfLife引擎网络同步技术简介
2014-08-05 15:32
302 查看
简介 Half Life 2 Source引擎 中的四类网络同步技术:
(1) 客户端预测
(2) 内/外插值
(3) 延迟补偿
(4) 数据压缩
还有强大的图/表同步监测工具。
对快节奏网游有借鉴价值。
HalfLife引擎也是著名的 CS(Counter Strike) 系列游戏的引擎。
---------------------------------------------------------------------
<<HalfLife引擎网络同步技术简介>>
AKara 2011-02-25
Google Doc 上的PPT地址:
https://docs.google.com/present/view?id=dt6c2mc_2t4h8bddm
---------------------------------------------------------------------
理念
* 个体感受优先
* 消除阈值内延迟感
> 50ms->100ms
* 可接受的中等延迟
> 150ms->500ms
* 兼防作弊
---------------------------------------------------------------------
四大技术
* 客户端预测
* 内/外插值
* 延迟补偿
* 数据压缩
---------------------------------------------------------------------
客户端预测 - 本机角色
* 命令队列(图)
> slide window
* 时间片(图)
> frame time
* 最后认证态(图)
> 命令队列滑动
* 共享代码
> pm_share
---------------------------------------------------------------------
内外插值 – 远程对象
* 延迟显示(LERP ms)(图)
> LinEaR interPolating
> 动态调整
> 默认:cl_updaterate = 20; cl_interp = 0.1
* 内插值(Interpolating)(图)
> 位置历史
> Don’t Interpolation Flag
* 外插值(Extrapolating)(图)
> Time Limit(eg.QuakeWorld 100ms)
---------------------------------------------------------------------
Tweaking
* 服务器帧率
> 20->66
* 客户端字节率
> MODEMs 4500 / ISDN 6000 / DSL 10000
* 客户端指令率
> same as server frame
* 客户端lerp率
> same as server frame
---------------------------------------------------------------------
Config
* rate = 10000
> sv: sv_minrate + sv_maxrate
* cl_cmdrate = 30
* cl_updaterate = 20
> sv: sv_minupdaterate + sv_maxupdaterate
* cl_interp = 0.1(old, disabled)
* cl_interp_ratio = 2(new)
> cl_interp = cl_interp_ratio / cl_updaterate
> (eg. 2 / 20 = 0.1; 2 / 66 = 0.03..)
* cl_fullupdate
---------------------------------------------------------------------
延迟补偿 – Time Wrapped
* 公式
> 指令回溯时刻 = 当前时刻 - 包RTT - 客户端LERP间隔
* 瞬时武器(On)
* 轨迹武器(Off)
* 玩家(On)
* NPC(Default Off)
* 直观延迟感
> 子弹回响
---------------------------------------------------------------------
“Shot Around A Corner”
---------------------------------------------------------------------
数据压缩
* 协议精确到bit
* 浮点精度删减
> >> + <<
* prop index优化
> SPROP_CHANGES_OFTEN
* Entity LOD Filter
> ALWAYS / DONTSEND / PVSCHECK / FULLCHECK
* 状态增量同步 + 定时聚合 + 压缩
* String Table
---------------------------------------------------------------------
临时对象
* 同帧数量限制
> Multi MAX 32 / update, Single MAX 255 / update
* 不可靠包
* 只在创建时同步
* 抑制源效果同步
> effect suppression
* 不受总对象限制
* 共享代码
---------------------------------------------------------------------
强力图/表化工具 - NetGraph
---------------------------------------------------------------------
强力图/表化工具-cl_entityreport
---------------------------------------------------------------------
强力图/表化工具-Dtwatchent
delta entity: 1
+ m_flSimulationTime, DPT_Int, index 0, bits 8, value 17
+ m_vecOrigin, DPT_Vector, index 1, bits 52, value (171.156,-83.656,0.063)
+ m_nTickBase, DPT_Int, index 7, bits 32, value 5018
+ m_vecVelocity[0], DPT_Float, index 8, bits 20, value 11.865
+ m_vecVelocity[1], DPT_Float, index 9, bits 20, value -50.936
= 146 bits (19 bytes)
---------------------------------------------------------------------
强力图/表化工具-DTI
* Entity class
* Property Name
* Decode Count
* Total Bits
* Average Bits
* Total Index Bits
* Average Index Bits
---------------------------------------------------------------------
THX & THE END
AKara 2011-02-25
---------------------------------------------------------------------
想以前抗着 AWP ,兜着 Deagle 在awp_map_32b 上练到吐的 盲狙 ...
或许早几年了解参数的意义,瞄准技术能上一个档次 :-)
(1) 客户端预测
(2) 内/外插值
(3) 延迟补偿
(4) 数据压缩
还有强大的图/表同步监测工具。
对快节奏网游有借鉴价值。
HalfLife引擎也是著名的 CS(Counter Strike) 系列游戏的引擎。
---------------------------------------------------------------------
<<HalfLife引擎网络同步技术简介>>
AKara 2011-02-25
Google Doc 上的PPT地址:
https://docs.google.com/present/view?id=dt6c2mc_2t4h8bddm
---------------------------------------------------------------------
理念
* 个体感受优先
* 消除阈值内延迟感
> 50ms->100ms
* 可接受的中等延迟
> 150ms->500ms
* 兼防作弊
---------------------------------------------------------------------
四大技术
* 客户端预测
* 内/外插值
* 延迟补偿
* 数据压缩
---------------------------------------------------------------------
客户端预测 - 本机角色
* 命令队列(图)
> slide window
* 时间片(图)
> frame time
* 最后认证态(图)
> 命令队列滑动
* 共享代码
> pm_share
---------------------------------------------------------------------
内外插值 – 远程对象
* 延迟显示(LERP ms)(图)
> LinEaR interPolating
> 动态调整
> 默认:cl_updaterate = 20; cl_interp = 0.1
* 内插值(Interpolating)(图)
> 位置历史
> Don’t Interpolation Flag
* 外插值(Extrapolating)(图)
> Time Limit(eg.QuakeWorld 100ms)
---------------------------------------------------------------------
Tweaking
* 服务器帧率
> 20->66
* 客户端字节率
> MODEMs 4500 / ISDN 6000 / DSL 10000
* 客户端指令率
> same as server frame
* 客户端lerp率
> same as server frame
---------------------------------------------------------------------
Config
* rate = 10000
> sv: sv_minrate + sv_maxrate
* cl_cmdrate = 30
* cl_updaterate = 20
> sv: sv_minupdaterate + sv_maxupdaterate
* cl_interp = 0.1(old, disabled)
* cl_interp_ratio = 2(new)
> cl_interp = cl_interp_ratio / cl_updaterate
> (eg. 2 / 20 = 0.1; 2 / 66 = 0.03..)
* cl_fullupdate
---------------------------------------------------------------------
延迟补偿 – Time Wrapped
* 公式
> 指令回溯时刻 = 当前时刻 - 包RTT - 客户端LERP间隔
* 瞬时武器(On)
* 轨迹武器(Off)
* 玩家(On)
* NPC(Default Off)
* 直观延迟感
> 子弹回响
---------------------------------------------------------------------
“Shot Around A Corner”
---------------------------------------------------------------------
数据压缩
* 协议精确到bit
* 浮点精度删减
> >> + <<
* prop index优化
> SPROP_CHANGES_OFTEN
* Entity LOD Filter
> ALWAYS / DONTSEND / PVSCHECK / FULLCHECK
* 状态增量同步 + 定时聚合 + 压缩
* String Table
---------------------------------------------------------------------
临时对象
* 同帧数量限制
> Multi MAX 32 / update, Single MAX 255 / update
* 不可靠包
* 只在创建时同步
* 抑制源效果同步
> effect suppression
* 不受总对象限制
* 共享代码
---------------------------------------------------------------------
强力图/表化工具 - NetGraph
---------------------------------------------------------------------
强力图/表化工具-cl_entityreport
---------------------------------------------------------------------
强力图/表化工具-Dtwatchent
delta entity: 1
+ m_flSimulationTime, DPT_Int, index 0, bits 8, value 17
+ m_vecOrigin, DPT_Vector, index 1, bits 52, value (171.156,-83.656,0.063)
+ m_nTickBase, DPT_Int, index 7, bits 32, value 5018
+ m_vecVelocity[0], DPT_Float, index 8, bits 20, value 11.865
+ m_vecVelocity[1], DPT_Float, index 9, bits 20, value -50.936
= 146 bits (19 bytes)
---------------------------------------------------------------------
强力图/表化工具-DTI
* Entity class
* Property Name
* Decode Count
* Total Bits
* Average Bits
* Total Index Bits
* Average Index Bits
---------------------------------------------------------------------
THX & THE END
AKara 2011-02-25
---------------------------------------------------------------------
想以前抗着 AWP ,兜着 Deagle 在awp_map_32b 上练到吐的 盲狙 ...
或许早几年了解参数的意义,瞄准技术能上一个档次 :-)
相关文章推荐
- HalfLife引擎 - 网络同步技术简介
- 游戏中的网络同步技术简介
- 基于Web的网络管理技术简介
- 基于Web的网络管理技术简介
- 80211与IEEE 802网络技术族谱简介
- 动态网络环境下的音视频同步技术设计与实现
- 基于Web的网络管理技术简介
- 4:虚幻引擎网络架构:技术要点总结篇
- 网络游戏引擎简介
- [Symbian] 通讯技术精品汇总-网络通信 (HTTP引擎)
- 基于Web的网络管理技术简介
- 基于Web的网络管理技术简介
- 基于Web的网络管理技术简介
- [技术]网络编程技巧—oauth简介及Demo
- 基于Web的网络管理技术简介
- 基于Web的网络管理技术简介
- 基于Web的网络管理技术简介
- IEEE1588精确网络时钟同步协议简介 II
- 技术杂谈(1)——Vmware网络连接模式简介