您的位置:首页 > 理论基础 > 计算机网络

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 ,兜着 Deagleawp_map_32b 上练到吐的 盲狙 ...

或许早几年了解参数的意义,瞄准技术能上一个档次 :-)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: