如何win7降低wow延迟设置

版面跳转 raquo raquo (共 4 页) 到
:: 3.05了,WLK了,帧数降低了??? 老生常谈WOW视屏设置技巧,有效提高帧数 ::
CONTENT
(165284)
2008-12-09 18:14
垂直同步最大的好处,就是省电。
你们可以比较一下打开和关闭情况的CPU利用率和CPU温度,over。
PS: 60f 和200f 有区别吗???
(1127916)
2008-12-09 18:16
达拉然太卡了啊 平时30帧的画面 到了达拉然才6,7帧 真是要命啊
(46947)
2008-12-09 18:17
远景2格怎么pvp?
(41757)
2008-12-09 18:18
直接無視,效果全開
(230419)
2008-12-09 18:19
帧数不是越高越好的。到满足流畅后帧数稳定才是重要。
况且帧数和刷新率不是整数时候容易出现撕裂的
所以垂直同步还是开了吧
(41342)
2008-12-09 18:22
[quote][pid=28297676][b]Post by locked315 (2008-12-09 17:59):[/b][/pid]
远景和距离显示有区别……前者显示最大距离的景色,后者有关乎多远能看到敌对阵营做好***准备……DZ必备……[/quote]
远景真是如此作用吗?难道不是只与景物显示相关?
(726903)
2008-12-09 18:23
我在登陆界面的时候打字和鼠标点击,电脑反应很迟钝,不知道是什么原因..
(182127)
2008-12-09 18:24
垂直同步当然要开。要不画面有可能会出现断层。
(1086648)
2008-12-09 18:26
关于垂直同步的解释:
 1、要知道什么是垂直同步,必须要先明白显示器的工作原理。
  显示器上的所有图像都是一线一线的扫描上去的,无论是隔行扫描还是逐行扫描,显示器,都有2种同步参数——水平同步和垂直同步。
  2、啥叫水平同步?啥叫垂直同步?
  垂直和水平是CRT中两个基本的同步信号,水平同步信号决定了CRT画出一条横越屏幕线的时间,垂直同步信号决定了CRT从屏幕顶部画到底部,再返回原始位置的时间,而恰恰是垂直同步代表着CRT显示器的刷新率水平!
  3、关键部分
  为什么是否关闭垂直同步信号会影响我们CS中的f 数值?道理一点都不复杂,首先我们平时运行操作系统一般屏幕刷新率是多少?大概一般都是在85上下吧,那么显卡就会每按照85的频率时间来发送一个垂直同步信号,信号和信号的时间间隔是85的分辨率所写一屏图像时间。
  如果我们选择“等待垂直同步信号”(也就是我们平时所说的“垂直同步打开”),那么在游戏中,或许强劲的显卡迅速的绘制完一屏的图像,但是没有垂直同步信号的到达,显卡无法绘制下一屏,只有等85单位的信号到达,才可以绘制。这样f 自然要受到操作系统刷新率运行值的制约。
  而如果我们选择“不等待垂直同步信号”(也就是我们平时所说“关闭垂直同步”),那么游戏中作完一屏画面,显卡和显示器无需等待垂直同步信号,就可以开始下一屏图像的绘制,自然可以完全发挥显卡的实力。
  但是,但是,但是,不要忘记,正是因为垂直同步的存在,才能使得游戏进程和显示器刷新率同步,使得画面平滑,使得画面稳定。取消了垂直同步信号,固然可以换来更快的速度,但是在图像的连续性上,性能势必打折扣。这也正是很多朋友抱怨关闭垂直后发现画面不连续的理论原因!
(544760)
2008-12-09 18:27
我把人物全停在铁了 人间惨剧啊...
想2.0刚开的时候 因为米设置好 读完蓝条直接掉线...
估计WLK是别想玩了
(1016617)
2008-12-09 18:29
[quote][pid=28298841][b]Post by shfb001 (2008-12-09 18:23):[/b][/pid]
我在登陆界面的时候打字和鼠标点击,电脑反应很迟钝,不知道是什么原因..[/quote]
终于碰到一样感受的了......
总觉得慢半拍是的
原来设置慢
都关了 24 1
然后改成800
还那样...
(363936)
2008-12-09 18:39
我是啥都关掉了,RAID和战场也只有5-8FPS。
(474154)
2008-12-09 18:40
[quote][pid=28298208][b]Post by crackman (2008-12-09 18:10):[/b][/pid]
你完全没明白垂直同步是怎么回事,或者你家的显示器刷新率是30[/quote]
他说的没错啊, 为什么说他完全没明白垂直同步是怎么回事?
关闭垂直同步会造成画面破裂现象, 不过开启垂直同步会影响显卡效能, 一些性能不济的显卡帧数下降到30多FPS, 关闭后提升至50~60很正常啊.
当然, 如果显卡强劲, 会因为等待垂直同步信号而被限制在60FPS是另一回事.
难道你理解的是 他打开垂直同步后降低到30FPS是由于显示器刷新率设置引起的?
事实上只是因为开启垂直同步也会影响显卡效能罢了. 举例来说, 由于显卡效能不济, 在当前帧还没绘完的时候, 垂直同步信号已经到了, 只能让这次的垂直同步信号与上一帧同步, 显卡继续绘制完此帧,让当前帧被迫跟下一次垂直同步信号同步. 所以FPS会降低. 不是因为显示器刷新率是30造成的.
下面的引用是说明的是显卡性能高的时候的情况.
[quote]
垂直同步又称场同步(Vertical Hold),从CRT显示器的显示原理来看,单个象素组成了水平扫描线,水平扫描线在垂直方向的堆积形成了完整的画面。显示器的刷新率受显卡DAC控制,显卡DAC完成一帧的扫描后就会产生一个垂直同步信号。我们平时所说的打开垂直同步指的是将该信号送入显卡3D图形处理部分,从而让显卡在生成3D图形时受垂直同步信号的制约。
  当我们选择等待垂直同步信号(即打开垂直同步)时,显卡绘制3D图形前会等待垂直同步信号,当该信号到达时,显卡开始绘制3D图形,如果显卡性能较为强劲,在下个垂直同步信号到来之前已经完成了对该帧的渲染,显卡就会暂停处理,等下个垂直同步信号到来后才开始渲染下一帧。由此可见,当打开垂直同步时,游戏的FPS要受刷新率的制约,对于高端显卡而言,限制了其性能的发挥。
  当我们选择不等待垂直同步信号(即关闭垂直同步)时,3D引擎将全速运行,不再等待垂直同步信号的到来,显卡性能得到了最大的发挥。所以我们测试显卡3D性能时,一定要关闭垂直同步。不少的朋友认为在游戏中关闭垂直同步可以得到更高的帧速,其实不然,这虚高的帧速不仅要受到显示器刷新率的制约,更会对游戏画面产生不良的影响。一般来说,关闭垂直同步会导致游戏画面产生以下两种问题:
  (1)画面撕裂
  假设游戏中有一面黑白相间的栅栏墙高速向左运动,显示器设定的刷新率是100Hz,游戏运行速度为200FPS,则显示器扫描第1帧图像至屏幕垂直方向中点时,显卡已经将第2帧图像送了过来,由于栅栏墙高速向左运动,第2帧图像已经左移了一段距离.
  (2)跳帧
  假如显示器设定的刷新率是80Hz,显卡以100FPS循环显示0-9数字,那么,在开始的0.1秒内,显卡显示了10个数字而显示器只刷新了8次,可见,由于显示器刷新率跟不上游戏的FPS,只能舍弃一部分画面,这种现象表现在游戏里就是跳帧。
[/quote]
(1086648)
2008-12-09 18:41
31楼你这太离谱了- -!
机器不行吧?
(1086648)
2008-12-09 18:42
32楼正解,要视具体情况而定,自行试验几次就知道了
(1154285)
2008-12-09 18:44
...不管卡不卡...垂直同步肯定要开的...要不画面难看的...
...其他设置可以根据自己的情况调低....
(492168)
2008-12-09 18:44
两年前的烂机今天尝试效果最优化 帧数10几 亡灵新手村 估计新装的好机器应该能正常游戏吧
那阴影效果感觉挺不错的 可惜呀 老爷机。。关闭。。
(1255456)
2008-12-09 18:45
开服马上去试试效果~
(334942)
2008-12-09 18:46
主要是那个 降低输入延迟也很吃机器的 不关的话我的3650画面会一卡一卡的
所以必须要开 郁闷啊
远景 法术 天气 材质细节
4X反锯齿
泛光都可以全部开了
不过阴影还没试验过
(413553)
2008-12-09 18:47
恩 很有教育意义
但是我的赛扬2.4 就算了
开点法术效果能看到冰环就好了……
评论 (共 4 页) 到
页 raquo raquo ..:: 快速发贴 ::..
FAST POST
验证用户可在本版发帖------3D游戏研发 摘要: posted @
RedLight 阅读(219) |
| 自从WOW更新2.0以来
  BLZ对WOW 图形渲染能力作了一次较大的buff
  这些BUFF 在外域进一步展现出来 更复杂的地貌 模型
  更细腻的材质表现 以及细节上更复杂的光照反射效果
  这使得不少用户大喊:我的机器怎么变卡了~~~ 之类的
  但是考虑到TBC上线的背景现在是2007年为什么不让硬件飞速发展的今天 让我们更多的享受到技术进步带来的成果呢~? (当然 这是要付出代价的 )
  WOW对图形卡的要求 可谓可大 可小
  其中的关键 就是WOW向用户开放的 设置界面
  也就是我们今天这里要讨论的主角 '视频设置'选单
  PC的硬件搭配是如此多元化显然没有一个标准的设置可以适用于所有的玩家
  那么今天我希望用简单的语言向大家描述一下这个界面中所有的选项
  其意味着什么 你需要付出什么 你能得到什么
  从而摸索出最合适自己的设置.
  下面 是经过我mark过的 设置界面
  在一些设置上 我用了不同的颜色方块标记 来区分
  原则上 把主选项 性能取向上分为3类
  红色标记 表示这将较重的依赖你的图形卡渲染能力
  ***标记 表示这需要你的系统综合支持能力
  绿色标记 表示这属于轻量级负载
  首先是显示栏
  分辨率
  这个也就是通常说的解析度 1024x768 个规格是通常17英寸CRT的常用分辨率
  它意味着在画面上你的图形卡需要绘制宽度1024位个像素高度位768个像素的图画
  用前者 乘以 后者 可以得出你的图形卡每帧需要处理多少个像素
  像素是计算机图形的最基本单位,所有看到的图像都由这样叫做'像素'的色点按照程序控制排列
  并呈现出具体图像.
  那么很显然这个数字越大每帧包含的像素越多那么你的图形卡就需要更多的时间去完成这些渲染动作
  那么 每秒内渲染帧数=FramePreSecond 也就是FPS 自然就更低
  这个数字 是决定你图形卡工作量的最基本参数
  一台17英寸CRT显示器 的标准分辨率 1024x768 每帧 78万个像素
  而一台22英寸宽屏LCD显示 标准分辨率为1680x1050 每帧 176万个像素
  那么后者维持同样FPS的条件下需要前者2.25倍的性能才能够实现
  所以必须要了解自己的需要使用到的分辨率不要盲从于WOW对显卡要求很低的说法
  推荐分辨率 无 根据自身显示设备决定
  多重采样
  其实在这个设置 是 色深/z缓存精度/多重采样的混合选项
  色深由于wow目前只仅使用用24bit高色彩
  除非是古董级别GeForce2 mx400(2000年的东西)级别或者更早以外不需要考虑16位色
  那样只会降低色阶过渡的流畅性 无意义的损失画面表现
  Z-缓存精度 涉及到光栅渲染知识的过多细节 这里简化说一下
  低精度的Z缓存 会让图形卡判断几何体之间的空间遮蔽关系变得更模糊 ,几何体连接的地方会出现更多的锯齿状失真这个随着距离视点越远这个效应越严重
  通常24bit Z 也是无损的 所以不需要过多考虑这个
  24位色深24位Z缓存 是基本选项 无需更改
接下来是重头戏采样次数
  WOW支持的是一种叫做多重采样的全屏幕反锯齿渲染技术也就是常说的MSAA 简称AA
  由于3D渲染所有的物体都是由几何结构构成从3D几何数据映射到2D图像的过程中不可能提供无穷的细节来满足最终图像显示的解析度通常有三角形构成的物体最后渲染出来一条斜线往往最后得到的是由一条又一条细小的线段阶梯状排列构成的一条线而这个阶梯状就是我们平时说的锯齿事实上很形象
  而反锯齿技术 就是为了尽可能遮掩这个现象的技术
  这个技术简单的描述就是对构成这个斜线的线段及其附近的像素周围几个点的色彩进行采样
  将这个像素的色彩信息值进行平均运算然后得出与周围色彩过渡近似的色彩去填充那样突兀的锯齿状
  最后看到的斜线一眼看过去就变得顺滑流畅.当然实际算法上比这个复杂得多只是简单的描述
  采样次数 越多最后得到的结果越顺滑过渡越流畅锯齿的可察觉程度就越小
  开启多重采样 可以 显著的改善图像质量使画面更圆润更自然但是要享受 就要付代价
  1x =不开启多重采样锯齿 从2x -8x 根据具体图形卡特性都会在这个选单中出现
  采样次数越高图形卡就需要做更多的动作消耗更多的资源.同时多重采样随着采样次数的提高
  也需要更多的显存空间来作为buffer
  如果在高分辨率下 开启多重采样(MSAA) 那么对于显卡本身渲染管线或者渲染后端的数量以及显存容量显存带宽都会有很高的要求
  对于低端产品 基本没有能力在开启多重采样的情况下流畅运行 9550/6600le/7100/7300gs/8400gs
  低端产品 部描述了
  对于中端产品 通常只能适应1280x1024 /1440x900 4次采样的能力 7300gt/7600gt/8600/1650gt/2600pro
  要求 8管线/ROP渲染后端 128bit显存位宽具备128M以上高速显存
  对于中高端产品 通常能承受1680x1050 4次采样 1950gt/7900系列 (6800/x800 16管版本)
  需要12-16渲染管线/ROP渲染后端 128bit显存位宽具备256M以上高速显存
  对于高端产品 能够承受1920x1200 4x/8x 采样
  基本需要16甚至更多的 渲染后端 需要至少256bit 显存位宽 512M以上高速显存
  基本上 分辨率结合多重采样内的设置基本上是硬指标没有多少灵活'优化'的余地
  刷新率/垂直同步刷新/三倍缓冲
  这个取决于显示设备的工作参数
  其意义是显示末端设备 每秒更新图像的次数
  而实际上图形卡输出的FPS往往和显示设备不一致
  其中就会造成一个时差有一定几率你会在屏幕中发现破裂的帧这个帧混合着上一帧和下一帧的内容
  如果在高速移动中每帧的内容都在不断变化那么这个破裂就会比较明显
  通常这个在低分辨率帧不是很大的时候不明显,对于高分辨率的用户经常可以看到这样的撕裂现象
  当然 这是瞬间的图像。
  而垂直同步刷新则是解决这个问题的方法每渲染完的帧必须和显示设备同步输出这样就避免了破裂
  但是带来了新的问题就是
  每秒输出的最大帧数 =当前刷新率对于喜欢看数字的人可能会不爽但是可以说更高的数字没有意义
  另外每帧渲染的内容都不同所需要的周期也不同额外的等待动作意味着必须牺牲一定的性能。
  而三倍缓冲则是允许图形卡预先渲染更多的帧作为准备输出的内容来缓解这个问题的方案
  所以 当你需要开启垂直同步刷新的时候 请务必钩上三倍缓冲。
  关闭垂直同步刷新 自然是最大化的获得FPS
窗口模式/最大化
  窗口模式 是许多玩家为了游戏中更便捷的切换到qq 网页常开启的选项
  但是 我不得不说 这个选项WINXP以及更早的操作系统下 慎用
  通常这个模式比全屏模式有更多的不稳定因素,尤其是在开启多重采样的情况下经常会产生各种各样的问题
  ATi 表现为不是激活窗口 FPS剧烈下降 NV则有出现使用输入法的时候前后台缓冲混淆 导致画面错误
  另外还有很多不是很典型的渲染错误案例
  这个原因基本上是Windows平台留下的历史遗留问题这个问题在Vista下得到了完美的解决细节就不多陈述了
  这里需要注意的是窗口模式中如果钩上最大化等于以你的桌面分辨率为准 渲染此窗口
  那么部分机器较差的朋友本来想通过降低分辨率提高FPS的时候又钩上最大化的话那么就没有意义
硬件指针/修正延迟
  硬件指针 意思是硬件光标加速 也就是游戏中的鼠标光标
  为了避免FPS过低的时候光标和画面一起渲染导致鼠标移动不顺畅造成影响操作的存在
  另外 游戏中忽然丢失鼠标可以尝试开/光这个项目来解决(这属于不确定因素)
  修正延迟是修正视觉与网络信号传输的差距模糊猜测的动作这个基本钩上
  基本这两个不影响性能 所以不做标明
世界外观
  这是一个综合选单
  如其所表述 这里的设置 关系到对 WOW世界环境的表现力
  远景显示
  这个设置 直接影响你的系统 渲染场景的最大范围
  包括单位进入多少范围开始被渲染 等
  这个范围越大 你的系统渲染的东西越多
  最大远景对于战斗中更早的发现目标和farm中更远的发现自己的目标都有很大好处
  但是这个“蛋糕”可不好啃
  这里对于CPU 内存 显卡 甚至磁盘性能 都有一定要求
  属于综合型负载
  通常平台比较强劲的系统才会拉到最大 一般
  推荐P4系列2ghz以下 以及1.5Ghz左右的K7系统 512M内存的系统通常开低
  P4 2Ghz 以上 K7 1.5ghz以上 底端A64以及底端core2 1G内存的系统开中等
  P43Ghz 以及中高端A64/CORE 平台 1.5G内存以上的系统开高无妨
  Vista系统则需要更高的内存
地形细节
  这个牵涉到WOW 图形引擎的地形渲染系统
  开低可以降低世界模型的几何复杂度一定程度上释放CPU的几何计算压力
  对于底端机器 建议开低
  主流机器大可开高
  基本上这个对性能影响很有限 除非低端平台 能省点算点
法术细节
  这是一个图形/系统平台性能倾向的综合选项
  高法书细节 对于魔法的视觉特征表现得更完整 raid时候通常为了能从动作和魔法效果上更准确知道目标的行为通常会建议开高
  本来简单的魔法效果 赏析悦目又不是很复杂自然是开启好也不会消耗过多的资源。
  但是在单位众多的情况下大量单位释放魔法的时候对于整体系统的压力就会大大提高
  简单的例子 一群法系 aoe 下雨 ,辅助集体buff 以及战斗混乱的场面这个选项开高将给你的系统带来不小的负担。
  一个很难取舍的选项 在系统能够承受的范围内 尽量开启吧。
环境细节
  这个会影响到你对环境渲染的完整度
  就拿泰xx森林来说 开启这个选项
  你在视觉范围内能够看到更多的植物模型灌木以及不影响移动的小石块等几何物体
  基本上 对于主流平台 不会有太大压力
  追求细节的人开启 自然能更好的体验游戏中的气氛
  这个选项会小幅度提高CPU/显卡的压力
  这两方面比较薄弱的平台 可以考虑关闭
  地表景观密度/地表景观范围
  这是一个纯粹的图形卡倚重的选项
  透过VertexShader的支持 在地表绘制出更复杂的地貌
  比如草皮 和一些细小物件的密集程度 以及 在多少距离内被渲染
  超出某个距离则被忽略它和上面最大的区别是这些东西完全是GPU完成的所以数量基数更大
  泰罗卡森林以及xx沼泽等很多地方通过这样的技术来表现地貌特色
  对于环境细节的表现 这2个选项影响比较大追求品质的话推荐开启毕竟既然表现森林那么看起来它最好就要像森林
  基本上 WOW并没有实现过于复杂的地貌效果通常中高端GPU完全可以开满这个选项
  GPU稍差则可以适当降低选项 这个选项 修改后立刻可以看到区别
  可以自己测试对f 影响如果你的GPU足够那么你将看不到FPS严重衰减
  基本上能够满足40+f 让我们更多的享受质量吧毕竟这个不是射击游戏
  这个基本上是依赖GPU的高级可编程部分 Shader性能
  对于后期的中段 7600gt/8600系列/2600系列有非常不错的表现完全可以开启
  下面是效果图 降低密度以后 完全没有植被的感觉
降低景观范围
  这个 稍微好 比关密度好
  但是 能开满当然最好了不然你能很明显看到植被是忽然蹦出来的
  全开满都有这个效应 关了就更明显了 (没办法 减少运算量)
材质分辨率
  这个就是纹理材质质量 纹理是什么?啊。。
  这个世界物体的外表特征等都是靠纹理贴图来完成游戏中人物看起来是石头 是木头都是靠纹理
  那么纹理分辨率影响什么
  很简单 开高纹理分辨率 你将看到更细腻的物体特质
  比如你装备上的纹路 比如地上的石板路 甚至你的脸蛋
  高纹理材质 需要更多的占据系统内存 和显存
  wow的材质本身并不算复杂 但是到了TBC 纹理细腻程度又进一步提升
  不过对于显卡来说〉64M显存的产品基本都可以开高不会明显影响性能
  但是 个别复杂场景除外~
  现阶段 基本推荐〉512M内存 和〉=9550级别的图形卡开高
  基本显卡压力很小很小
  玩WOW 不满足这两个条件的机器很少了
材质过滤
  通常纹理过滤方案 主流是双线形过滤 和三线性过滤
  曾经的老版本中 有独立的三线性过滤得选项
  这种过滤技术 直接影响纹理远近之间过渡得自然程度
  由于三线性过滤从1998年开始有硬件支持到现在已经有了这么多年的历史
  所以2.3将三线性过滤提升到了系统预定过滤方式基本上三线性过滤早就无损的对于拥有4个TMU纹理映射单元的GPU来说基本不存在问题现即使是最底端的产品也不少于4个TMU
  而2.3的材质过滤 实际上是 一个高级过滤 “各项异性过滤”的选单也就是常说的AF
  AF技术可以非常明显的改善纹理质量但是需要付出的是数倍以及数十倍三线性过滤的采样次数
  这个选项 关闭=使用老式三线性过滤 而拉满 应该=8xAF(估计)
  这个技术的存在 对于图形卡的TMU单元来说 有新的要求
  对于大部分4管线4TMU 的图形卡 这个选项会造成不小的性能下降
  对于8管线8TMU的产品 通常开一半会是不错的选择
  部分高频率8TMU产品可以考虑开满
  对于TMU比较多的产品从中得益会比较大具体参数可以参考自己使用的图形卡的技术指标
  另外 这个受到分辨率牵连,高分辨率的情况下 TMU的压力会加大
  基本上能开启尽量开启和关闭会有很大不同当然马虎的人可能不会注意纹理清晰度的问题
天气强度
  用来开启天气的表现
  需要图形卡性能作为支持 图形卡趋向 但是压力并不算大
  基本上中端产品都有能力开启 这里就不过多陈述
特殊效果
  里面3个成员 都是吃GPU的重头
  底端产品关闭可以获得更好的性能
  这里基本上是WOW PixelShader 高级特性应用的主要体现
  PixelShader 数量较多或者是构架先进的产品能够轻松胜任这个工作
  毕竟wow Shader主要是基于DX8 的SM1.X
  中高端产品 根据分辨率来调整 分辨率直接影响开启后的压力
高光效果/全屏幕范光效果
  它们通常是并存的
  高光效果以前的版本就存在 但是到了TBC以后作了进一步强化
  TBC之后 许多金属质感的装备 会有光的折射 表现出其质感
  能量舰中也大量出现折射和高光效果这都是1.xx版本中不曾存在的
  游戏中基本沙粒 地表对光的反射也表现得更加突出
  同时 也通过光学特制 表现出物体的凹凸感 BUMP技术也好是pixelshader的普遍应用
  这里 是TBC图形卡要求提高的主要原因
  效果图~~如下
  光的折射
  弥漫感
  比起木纳的顶点光照来说 像素光照更具备细腻性和表现力
死亡效果
  死亡后 泛白光 这个也是属于高级pixelShader渲染的杰作
  事实上它本质上和上面没有太多不同 只是渲染算逻辑不同
  硬件要求也类似 我就不过于累赘了
  不过这个效果可能不单纯只是死亡时候有用可能把类似渲染都归为这一类别
  基本上这3个项目本质上没有不同
  多数情况下 通常分辨率1024x768 1280x1024 1440x900 这样分辨率
  中端图形卡乃至于中底端图形卡都有能力开启这3个选项对性能要求并不算高
  基本7300gt 6600gt级别 完全可以胜任 毕竟是DX8的东西
  分辨率高了 是另外的问题
  角色阴影
  是否渲染玩家单位阴影的操作 基本上属于简单的shadow map
  WOW中没有用到复杂的阴影渲染技术基本上还是quake3(1999)年代的东西
  这个项目并不会消耗多少图形卡资源 属于轻量负载
  而且开启有一个好处在单位进入你渲染范围的时候往往阴影比模型先出现!
  HOHO...
世界层次细节
  这是一套最早在“升刚”的一个FPS游戏中成熟利用的技术
  对不同距离的的单位使用不同细节的模型到了一定距离就用简单的模型来渲染单位来减少渲染压力
  开启这个以后 可以一定程度降低CPU/图形卡的压力
  正如其描述所说
  底端平台 中端建议打开 基本不影响效果。高端平台就随意了
posted @
RedLight 阅读(105) |
| 魔兽世界的地形渲染,基本上有三种渲染路径:固定渲染管线(其中是不是又分几种就不清楚了);shader(带高光);shader(不带高光)
  用到shader的渲染路径又分别针对1层,2层,3层,4层(最多允许每个chunk使用4层纹理)专门写了shader代码。
  用MyWarCraftStudio打开WOW的misc.mpq包,shader \ pixel \ 目录下以"terrain"打头的bls文件就是地形渲染使用的shader,带有"_s"后缀的是带高光的渲染,否则就是不带高光的。
  我仔细看了其中的terrain4_s.bls(用UltraEdit之类的工具可以直接当成文本文件打开)。是汇编形式的 代码,由于之前俺只用过c形式的HLSL所以看起来有点吃力,好在还是看明白了。
  texture0~3就是待混合的4层纹理,每层纹理的a通道是该层纹理对应的高光通道;texture4是一张用来控制混合权重的alpha纹理。texture4的r,g,b通道分别对应texture1~3的alpha值,而texture4.a则代表地形的阴影,0为阴影,1为正常。
  混合的公式为res_n = res_n-1 * ( 1 - alpha_n ) + texture_n * alpha_n。其中n代表第n层纹理。res_n代表第n层混合后的结果。
  从代码可以看出,最终混合结果的a通道(高光通道)被乘以阴影值,也就是说阴影中没有高光。同时,阴影中的diffuse光照被削减了30%。
  1,2,3层纹理混合,以及不带高光的情况想必也没有什么特别之处,也不去细看了。
  值得一提的是我原来一直以为WOW的地形渲染只用了 _1_1,但从这个shader看用了5张纹理,超出了 _1_1的4个纹理采样的限制,所以至少使用了 _1_4(允许6个纹理采样)。而1~3层纹理混合的情况使用 _1_1就够了。我不知道在渲染时频繁切换 版本会不会收到性能上的惩罚,但有些显卡(比如NV的5200)同样的代码在 _1_4上运行要比在 _1_1上运行慢很多。
  至于固定渲染管线的渲染路径,由于不可能看到代码,具体如何实现多层纹理混合无法揣测,集合了各层纹理混合系数的alpha图应该不能直接用于渲染,因为固定渲染管线似乎只能用a通道来控制混合系数,可能需要将这张纹理拆成4张才行。。。
posted @
RedLight 阅读(200) |
| 没有办法WOW太经典,当自己碰到问题的时候再回头研究wow发现wow尽然没有问题,暴雪的游戏制作经验让wow一开始就设计的如此讲究,不得不感叹国内游戏同世界设计方面的差异。
由于没有wow的源代码,所有的分析想法都来自与wowmapview这个开源的wow地图察看器,wowmapview的代码写的很凌乱,但很容易理解,好了,我们开始吧!Gogo
wow场景是由一系列MapTile组成,这些MapTile的大小是1600/3 ≈ 533.33m,而每个MapTile又是由 16x16 个MapChunk组成,由此可以计算出每个MapChunk≈33.33m,如图:
在wow中,一个MapTile是有由一个adt文件描述。
比如World\Ma \AhnQiraj\AhnQiraj_29_48.adt文件就描述在xz(29,48)位置的MapTile,每个MapTile都包含了该tile内使用的贴图(引用外部)、模型(引用外部)、wmo(MapObject)、模型实例、wmo实例,所谓模型实例就是相同模型在tile内不同摆放位置、大小、角度的说明信息,在wow引擎中的术语是doodad,即可以随意摆放的小东西,wmo实例类似。为了节省文件尺寸,模式实例、wmo实例是通过index模型、wmo的方式保存的,同顶点索引类似。
每个MapChunk又由9x9+8x8个地形顶点高度,法线,若干贴图层(一般为4层),水面,Alpha贴图层(用于控制地表贴图的混合比例,一般为3张,尺寸64x64)和一层shadow map(64x64)组成。如图,由此可推算出wow的地面精度≈2m
Wow的地表是非常精细的,这与它使用了alpha贴图控制地表混合比例有关,而一般的引擎则把地表贴图的混合比例放在地表顶点中记录,这样地表的精度将同顶点密度保持一致。
Wow使用固定方向光照,所以可以使用shadow map来模拟树、房子等在地表透射的阴影,shadow map的尺寸也是64x64,可见阴影的精度也是非常高的。
这样的地形顶点分布是wow在最高地表精度下的高度顶点布局,当相机远离MapChunk时,这个高度顶点的布局可能是这样:
此时,地表的精度≈4m。
Wow的地表是支持挖洞的,有意思的是为了节省空间,其标示挖洞的信息数据就是一个int,通过使用位运算来得到一个4x4精度的挖洞信息,我们不放把这种4x4的洞叫做holeChunk,每个holeChunk支持4种状态来标示其内部2x2的洞分布状况,由此可见wow在数据结构方面已经发挥到了极致:对于需要精密表现的地表好不吝啬的使用64x64混合贴图,而对于hole这种只需要粗略(一半还不使用的东西)的记录一个int。
posted @
RedLight 阅读(205) |
| 摘要: posted @
RedLight 阅读(234) |
| 摘要: posted @
RedLight 阅读(474) |
| 摘要: posted @
RedLight 阅读(439) |
| 摘要: posted @
RedLight 阅读(211) |
|  
教你如何使用maxscript调试器
作者:李英江 (转载)
  就我个人来说3ds max 8脚本调试器用得不多,在这里我讲一下脚本调试器的原理和简单的用法。脚本调试器只不过是一个max8的一个调试程序,它允许暂停3ds max主线程和其它线程,可以使用命令threads显示当前的3ds max所有线程及线程id,可以使用setThread 线程ID)切换当前调试的线程。一般情况调试器默认为调试最顶层(这个词不知道大家是否理解我的意思,就像是家里面的菜盘子,最顶层的盘子是最后放上去的,当然要拿开盘子只能从最上面一个开始)的线程,3ds max本身在实现一些操作时大量使用多线程,例如渲染时,就创建了一个新线程,关于线程和进程的区别,你可以找相应编程书籍。在3ds max8的目前调试器版本,还不支持鼠标选择某行设置断点(至少我没有找到这个功能,你找到了请告诉我),因此我现在断定,这是一个不实用的工具。但是3ds max8已经为我们提供了这个工具,当然是有用的了,只不过稍稍麻烦。
  使用脚本调试器(我假设你已经写好了一个脚本),首先在你的脚本你想要暂停的地方设置断点,设置断点可以使用break()函数,也就是当脚本运行到这里时暂停程序。这样当你运行这个脚本时你将会在脚本调试器的"输出"编辑窗口中显示线程相应的内容。(我个人认为每运行一个脚本,3ds max就为这个脚本创建一个线程,所以才可以使用脚本调试器来跟踪脚本。谁能证实一下我的猜测 我的E-MAIL: 
)。当脚本执行到你设的断点处就停下来,这时你可以使用getVar ""和 setVar "" 来查看变量内容和临时设置变量内容。更方便查看变量内容的方法可以点击"监视"按钮,然后输入变量名按回车键即可显示你刚输入的变量名的值了。点击"运行"按钮可以使脚本运行到下一个断点处暂停,查看和设置变量的方法上一步所说的是一样。
  总结一下:3ds max8的目前的调试器还很不完善(你也可以用丑陋来形容,希望以后的Max版本能把脚本调试器做得好点,好可惜我没有看到在MAX9调试器有一点点的变化)。脚本调试器虽不怎么样,但也不是一无是处,至少你可以少用print和format来查看运行时变量内容和调试脚本。
  以下是我写了一个简单的调试脚本,运行后当i=10时会启动脚本调试器。
global =10
for i=0 to 100 do
  #160 #160; = + i
  if i==10 do break()
查看运行时断点的i变量,可以点击"监视"按钮,输入i 然后回车,就可以看到变量i的值为10。
posted @
RedLight 阅读(200) |
| Lua脚本语法说明(增加lua5.1部份特性)
  Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱。
  所以,我只简单的归纳一下Lua的一些语法规则,使用起来方便好查就可以了。估计看完了,就懂得怎么写Lua程序了。
  在Lua中,一切都是变量,除了关键字。
I. 首先是注释
  写一个程序,总是少不了注释的。
  在Lua中,你可以使用单行注释和多行注释。
  单行注释中,连续两个减号"--"表示注释的开始,一直延续到行末为止。相当于C++语言中的"//"。
  多行注释中,由"--[["表示注释开始,并且一直延续到"]]"为止。这种注释相当于C语言中的"/*...*/"。在注释当中,"[["和"]]"是可以嵌套的(
在lua5.1中,中括号中间是可以加若干个"="号的,如 [==[ ... ]==]
),见下面的字符串表示说明。
II. Lua编程
  经典的"Hello world"的程序总是被用来开始介绍一种语言。在Lua中,写一个这样的程序很简单:
  print("Hello world")
  在Lua中,语句之间可以用分号";"隔开,也可以用空白隔开。一般来说,如果多个语句写在同一行的话,建议总是用分号隔开。
  Lua 有好几种程序控制语句,如:
控制语句
if 条件 then ... elseif 条件 then ... else ... end
2 then rint(
elseif 1
3 then rint(
else rint(
while 条件 do ... end
while 1
2 do rint(
repeat ... until 条件
repeat print
) until 1
for 变量=初值, 终点值, 步进 do ... end
for i = 1
, 2 do rint(i) end
for 变量1, 变量2, ... 变量n in 表或枚举函数 do ... end
for a, in mylist do print
(a, ) end
  注意一下,for的循环变量总是只作用于for的局部变量;当省略步进值时,for循环会使用1作为步进值。
  使用break可以用来中止一个循环。
  相对C语言来说,Lua有几个地方是明显不同的,所以面要特别注意一下:
  .
语句块
    语句块在C中是用"{"和"}"括起来的,在Lua中,它是用do 和 end 括起来的。比如:
    do print("Hello") end
    可以在
语句块
中定局部变量。
  .
赋值语句
    赋值语句在Lua被强化了。它可以同时给多个变量赋值。
    例如:
    a,b,c,d=1,2,3,4
    甚至是:
    a,b=b,a -- 多么方便的交换变量功能啊。
    在默认情况下,变量总是认为是全局的。假如需要定义局部变量,则在第一次赋值的时候,需要用local说明。比如:
    local a,b,c = 1,2,3 -- a,b,c都是局部变量
  .
数值运算
    和C语言一样,支持 +, -, *, /。但Lua还多了一个"^"。这表示指数乘方运算。比如2^3 结果为8, 2^4结果为16。
    连接两个字符串,可以用".."运处符。如:
    "This a " .. "string." -- 等于 "this a string"
  .
比较运算
比较符号
小于或等于
大于或等于
不相等
    所有这些操作符总是返回true或false。
    对于Table,Function和Userdata类型的数据,只有 == 和 ~=可以用。相等表示两个变量引用的是同一个数据。比如:
    a
    b
    
输出 true, false
    a
    b
    
输出 false, true
  .逻辑运算
    and, or, not
    其中,and 和 or 与C语言区别特别大。
    在这里,请先记住,在Lua中,只有false和nil才计算为false,其它任何数据都计算为true,0也是true!
    and 和 or的运算结果不是true和false,而是和它的两个操作数相关。
    a and b:如果a为false,则返回a;否则返回b
    a or b:如果 a 为true,则返回a;否则返回b
    举几个例子:
     print
4 and 5
输出 5
     print
(nil and 13
输出 il
     print
(false and 13
输出 false
     print
输出 4
     print
(false or 5
输出 5
    在Lua中这是很有用的特性,也是比较令人混洧的特性。
    我们可以模拟C语言中的语句:x = a? b : c,在Lua中,可以写成:x = a and b or c。
    最有用的语句是: x = x or v,它相当于:if not x then x = v end 。
  .运算符优先级,从低到高顺序如下: or and < > = = ~= == .. (字符串连接) + - * / % not #(
lua5.1 取长度运算
) - (一元运算) ^
和C语言一样,括号可以改变优先级。
III. 关键字
  关键字是不能做为变量的。Lua的关键字不多,就以下几个: and
function
IV. 变量类型
  怎么确定一个变量是什么类型的呢?大家可以用type()函数来检查。Lua支持的类型有以下几种:
空值,所有没有使用过的变量,都是nil。nil既是值,又是类型。
Boolean
布尔值,只有两个有效值:true和false
数值,在Lua里,数值相当于C语言的double
字符串,如果你愿意的话,字符串是可以包含"\0"字符的(这和C语言总是以"\0"结尾是不一样的)
关系表类型,这个类型功能比较强大,请参考后面的内容。
Function
函数类型,不要怀疑,函数也是一种类型,也就是说,所有的函数,它本身就是一个变量。
Userdata
嗯,这个类型专门用来和Lua的宿主打交道的。宿主通常是用C和C++来编写的,在这种情况下,Userdata可以是宿主的任意数据类型,常用的有Struct和指针。
线程类型,在Lua中没有真正的线程。Lua中可以将一个函数分成几部份运行。
如果感兴趣的话,可以去看看Lua的文档。
现在回过头来看看,倒觉得不是线程类型。反而象是用来做遍历的,象是Iterator函数。
function range(n) local
i = 0 while
(i ) do coroutine.yield( i ) i = i + 1 end
可惜的是要继续运行,需要coroutine.resume函数,有点鸡肋。请指教。
V. 变量的定义
  所有的语言,都要用到变量。在Lua中,不管在什么地方使用变量,都不需要声明,并且所有的这些变量总是全局变量,除非我们在前面加上"local"。这一点要特别注意,因为我们可能想在函数里使用局部变量,却忘了用local来说明。
  至于变量名字,它是大小写相关的。也就是说,A和a是两个不同的变量。
  定义一个变量的方法就是赋值。"="操作就是用来赋值的
  我们一起来定义几种常用类型的变量吧。
  A. Nil
    正如前面所说的,没有使用过的变量的值,都是Nil。有时候我们也需要将一个变量清除,这时候,我们可以直接给变量赋以nil值。如:
    var1
nil -- 请注意 il 一定要小写
  B. Boolean
    布尔值通常是用在进行条件判断的时候。布尔值有两种:true 和 false。在Lua中,只有false和nil才被计算为false,而所有任何其它类型的值,都是true。比如0,空串等等,都是true。不要被 C语言的习惯所误导,0在Lua中的的确确是true。你也可以直接给一个变量赋以Boolean类型的值,如:
    theBoolea = true
  C. Number
    在Lua中,是没有整数类型的,也不需要。一般情况下,只要数值不是很大(比如不超过100,000,000,000,000),是不会产生舍入误差的。在WindowsXP能跑的当今主流PC上,实数的运算并不比整数慢。
    实数的表示方法,同C语言类似,如:
    4 0.4 4.57e-3 0.3e12 5e+20
  D. String
    字符串,总是一种非常常用的高级类型。在Lua中,我们可以非常方便的定义很长很长的字符串。
    字符串在Lua中有几种方法来表示,最通用的方法,是用双引号或单引号来括起一个字符串的,如:
    "That's go!"
    或
    'Hello world!'
    和C语言相同的,它支持一些转义字符,列表如下:
    \a bell
    \ back ace
    \f form feed
    \ newline
    \r carriage return
    \t horizontal tab
    \v vertical tab
    \\ backslash
    \" double quote
    \" single quote
    \[ left square bracket
    \] right square bracket
    由于这种字符串只能写在一行中,因此,不可避免的要用到转义字符。加入了转义字符的串,看起来实在是不敢恭维,比如:
    "one line\ ext line\n\"in quotes\", "in quotes""
    一大堆的"\"符号让人看起来很倒胃口。如果你与我有同感,那么,我们在Lua中,可以用另一种表示方法:用"[["和"]]"将多行的字符串括起来。(
lua5.1: 中括号中间可以加入若干个"="号,如 [==[ ... ]==],详见下面示例
    示例:下面的语句所表示的是完全相同的字符串:
alo\n123"
a = "alo\n123\""
\97lo\10\04923"
    值得注意的是,在这种字符串中,如果含有单独使用的"[["或"]]"就仍然得用"\["或"\]"来避免歧义。当然,这种情况是极少会发生的。
  E. Table
    关系表类型,这是一个很强大的类型。我们可以把这个类型看作是一个数组。只是C语言的数组,只能用正整数来作索引;在Lua中,你可以用任意类型来作数组的索引,除了nil。同样,在C语言中,数组的内容只允许一种类型;在Lua中,你也可以用任意类型的值来作数组的内容,除了nil。
    Table的定义很简单,它的主要特征是用"{"和"}"来括起一系列数据元素的。比如:
    T1 = {} -- 定义一个空表
    T1
10 -- 然后我们就可以象C语言一样来使用它了。
    T1
, Gender
"Male"}
    这一句相当于:
    T1
{} -- 必须先定义成一个表,还记得未定义的变量是nil类型吗
    T1
    T1
"Gender"
    当表的索引是字符串的时候,我们可以简写成:
    T1.John
    T1.John.Age
    T1.John.Gender
    或
    T1.John{Age
, Gender
"Male"}
这是一个很强的特性。
    在定义表的时候,我们可以把所有的数据内容一起写在"{"和"}"之间,这样子是非常方便,而且很好看。比如,前面的T1的定义,我们可以这么写:
    T1
    {
      
, -- 相当于 [1] = 10
      
      John
= -- 如果你原意,你还可以写成:["John"] =
      {
        Age
, -- 如果你原意,你还可以写成:["Age"] =27
        Gender
Male -- 如果你原意,你还可以写成:["Gender"] =Male
      },
      
20 -- 相当于 [2] = 20
    }
    看起来很漂亮,不是吗?我们在写的时候,需要注意三点:
    第一,所有元素之间,总是用逗号","隔开;
    第二,所有索引值都需要用"["和"]"括起来;如果是字符串,还可以去掉引号和中括号;
    第三,如果不写索引,则索引就会被认为是数字,并按顺序自动从1往后编;
    表类型的构造是如此的方便,以致于常常被人用来代替配置文件。是的,不用怀疑,它比ini文件要漂亮,并且强大的多。
  F. Function
    函数,在Lua中,函数的定义也很简单。典型的定义如下:
    
function add
(a,b) -- add 是函数名字,a和b是参数名字
     return a
+ -- retur 用来返回函数的运行结果
    
    请注意,return语言一定要写在end之前。假如我们非要在中间放上一句return,那么就应该要写成:do return end。
    还记得前面说过,函数也是变量类型吗?上面的函数定义,其实相当于:
    
add = function (a,b) return a
当重新给add赋值时,它就不再表示这个函数了。我们甚至可以赋给add任意数据,包括nil (这样,赋值为nil,将会把该变量清除)。Function是不是很象C语言的函数指针呢?
    和C语言一样,Lua的函数可以接受可变参数个数,它同样是用"..."来定义的,比如:
    
function sum (a,b,
如果想取得...所代表的参数,可以在函数中访问arg局部变量(表类型)得到 (
lua5.1: 取消arg,并直接用"..."来代表可变参数了,本质还是arg
    如 sum(1,2,3,4)
    则,在函数中,a = 1, b = 2, arg = {3, 4} (
lua5.1: a = 1, b = 2, ... = {3, 4}
    更可贵的是,它可以同时返回多个结果,比如:
    
function ()
      
return 1
    
    a,b,c,d = () -- 此时,a = 1, = 2, c = 3, d = 4
    前面说过,表类型可以拥有任意类型的值,包括函数!因此,有一个很强大的特性是,拥有函数的表,哦,我想更恰当的应该说是对象吧。Lua可以使用面向对象编程了。不信?举例如下:
    t =
    {
     Age = 27
     add = function
(self, ) elf.Age = elf.Age
    }
    
(t.Age) -- 27
    t.
    
(t.Age) -- 37
    不过,t.add(t,10) 这一句实在是有点土对吧?没关系,在Lua中,我们可以简写成:
    t:
) -- 相当于 t.add(t,10)
  G. Userdata 和 Thread
    这两个类型的话题,超出了本文的内容,就不打算细说了。
VI. 结束语
  就这么结束了吗?当然不是,接下来,我们需要用Lua解释器,来帮助理解和实践了。相信这样会更快的对Lua上手了。
  就象C语言一样,Lua提供了相当多的标准函数来增强语言的功能。使用这些标准函数,可以很方便的操作各种数据类型,并处理输入输出。有关这方面的信息,我们可以参考《Programming in Lua 》一书,也可以在网络上直接观看电子版,网址为:
备注:本文的部份内容摘、译自lua随机文档。
相关链接:
1. Lua 官方网站:
2. Lua Wiki网站,你可以在这里找到很多相关的资料,如文档、教程、扩展,以及C/C++的包装等:
3. Lua 打包下载(包括各种平台和编译器的工程文件如vs2003,vs2005):http://luabinaries.luaforge.net/download.html
posted @
RedLight 阅读(190) |
| 共9页: 5 Powered by:
Copyright RedLight
2011年8月
随笔 - 89
文章 - 0
评论 - 23
引用 - 0
Name: Galen
QQ: 88104725
常用链接
留言簿
随笔分类
随笔档案
My Friend
搜索 最新评论
做格式工厂转换失真及带解决
--王政
111111111
--王政
评论内容较长,点击标题查看
--Sebastien
房子那张贴图很漂亮,反射效果也很棒。
看你的版本应该是1.9以上的
正好一起研究。我的QQ:47784550 天兵
附加信息:BW
--老张
阅读排行榜
评论排行榜记忆堆栈 - Never give up, fight for dreams!
随笔 - 25, 文章 - 0, 评论 - 2, 引用 - 0
首先,以下办法是通用方法,我个人遇到的问题主要是这样的:
1。玩魔兽,打黑龙的时候AOE几波小龙的时候要掉线.
2.访问大数据量网站,比如 www.sina.com.cn 或者 www.tiexue.net 此类首页字节数相当巨大的网站,浏览器假死(响应非常慢), ping值突然变为timeout. 很长一段时间之后,网页上的图片才缓慢显示,但是仍然有残缺不全的地方,此刻ping值才恢复正常(10ms左右)
==================技术分割线开始================== 1. 魔兽是一个好游戏,转手到网易之后,骂声不断,众人理解为因为服务器太卡的原因. 通过技术分析,其实不是.
主要原因是2方面,第一是服务器现在都在杭州;第二,暴雪新的帧打包压缩方式和大众的本地网络设置格格不入.
  和9C相比,服务器的部署方式改变. 以前9C是采用的分布式部署方式, 也就是说网通用户服务器部署到北京之类的地区, 电信用户又根据省份不同,部署到不同的省份.这种方式好处就是用户体验很好,网速快,响应快,掉包少,稳定.然后在登录之后的分区显示里面可以完全按照暴雪制定的策略,选择PVE,PVP以及分区信息等.这点上显然用户体验至上,小小赞9C一个, 应该是专门和暴雪技术谈了的.   网易的部署方式完全按照暴雪wow的架构来设计,因为在国外,装机量通常不高,也没有什么网通,电信相互分割的说法,所以通常来说,系统设计只有一份,换句话说,没考虑中国这种网通电信互通困难的局面.因此都是单机房部署,在中国进行部署,也可以,最好的互通方式就是BGP机房.但是即便是BGP机房,延迟仍然有50-100左右,而不像9C时代的10ms的ping.所以用户体验要差一点点.
  既然是BGP,所以路由相比9C机房部署方式就增加了.因此,任何一个节点受到黑客攻击,都会造成卡和莫名其妙的掉线(有时候玩的好好的突然掉了,就是在遥远而漫长的路由节点中,某个无良网管由于修改全局防火墙配置,重启了防火墙-----通常也就是几秒的事情,所以大家可能骂两句就不了了之了,然是事实就是如此.好,这里是稳定性降低的原因之一.
  另外,东拥湖开战的时候,才是考验服务器的时候,如果这个时候恰逢傍晚人多的时候,就更卡了.掉线就更频繁了.这个时候属于服务器CPU过高导致,确实是硬件没跟上的问题. 但是显然, 任何系统不可能为了这1个小时左右的剑锋时期而投入更多的服务器,如果为了这1个小时增加投入,其余23个小时的运营成本就惨淡了. 这是任何厂商不愿意看到的.所以,这个是架构设计问题,暴雪的问题,魔兽的架构问题,和网易无关,如果换做9C的分布式部署方式来运作,结果应该是一样的.所以,别莫名的抱怨.
  好,以上是不可抗力因素.现在我们来分析和解决个人的网络环境问题.
  这里我只说家庭用户,毕竟成分最多.通常家庭网络部署是 外部网络-ADSL猫猫(路由器/集线器)-多台电脑 , 容易忽略的是我们的ADSL设置和个人电脑的设置不匹配.
  首
先我们需要进入ADSL配置界面(类似
[ ] 输入admin/admin)从菜单里找到"防火墙设置"这一项,将 "最大半开TCP连接"修改为80, "最大单个主机连接"修改为80 然后找到"PVC6"也就是设置口令的那个界面,在里面找MTU设置信息,我的"运作MTU是1432。这个很重要,避免数据包被拆分就靠它了.关于不登陆ADSL猫找寻MTU信息的方法,可以使用CMD命令 ping -l 1376 -f www.163.com, -l是指定包大小 -f是强制不分包 其中1376可以试着增加,知道ping通为止,如果ping不同,就增加或者降低,总之找到一个刚好ping通的值.多一个字节的都不行.我这里找到的是1376,打开windows优化大师,在"优化网络"那里找到设置"最大传输单元MTU","最大数据段长度MSS","传输单元缓冲区" 分别手动设置为 1404(1376+28或者1432-28),1364(1404-40(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)),256000;
  然后在 控制面板-网络链接-本地连接(右键-属性)-配置-高级 里面的几项
  FlowControl 流控制 关闭
  大量传送减负 关闭
  网络唤醒 关闭
  关闭网卡以节约电能 关闭
  Rx/Tx 校验 关闭 改为CPU接管 以下是网上搜集的部分网卡的配置方法.大体思路从上面的几个关键改动派生. NF网卡高级设置
Checksum Offload 数据包校验 建议关闭
Flow Control 流量控制 一定要关闭
IEEE802.1P Su ort IEEE802.1P支持 建议关闭
Jumbo Frame Payload Size 默认是1500 这个是千兆网络一个新的设置,在下文详细叙述。
Low Power State Link Speed 网卡节能 建议关闭
Network Addre MAC的修改 默认为不存在 一般不必改动
Optimize For CPU/Throughput 为CPU占用优化或为吞吐量进行优化,设置为CPU的话,网卡的速度被限制,但CPU占用会很低,假如改为Throughput的话,网卡的性能才能完全发挥,但CPU的占用也会上升不少。
Segmentation Offload 建议关闭
Speed/Duplex Setting Full Autonegotiation(全自适应,一般不用修改)
VLAN Id 默认是1 不用改
VLAN Su ort VLAN支持 一般关闭
Wake on Magic packet 魔术数据包唤醒 建议关闭
Wake on patter 建议关闭
WakeOnLAN From PowerOff 建议关闭
8168/8111c网卡高级设置
在网卡高级选项里
JUMBO FRAME 改成无
802.1Q/1P VLAN Tagging 改成关闭
Flow Control 改成关闭
Jumbo Frame 改成关闭
Offload Checksum 改成关闭
Offload TCP_LargeSemnd 改成关闭
8169/8167网卡高级设置 820.1Q/1p VLAN Tagging=Disable Flow Control=Disable Ju o Frame=Disable Offload Checksum=Disable Offload TCP_LargeSend=Disable
Marvell Yukon网卡高级设置
流控制-》禁用(或者Flow Control-Disable)
传送缓冲区-》512(或者MaxTra mits-200)
接收缓冲区-》512(或者MaxReceives-500)
唤醒功能-》Link Change唤醒模式(或者WakeUpModeCap_A-28)
卸载 TCP/UDP 校验和 (IPv4)-》禁用(或者*TCPUDPChecksumOffloadIPv4-0)
在内网的IPX协议里手工添加一个帖类型802.2,网络号为:00012345或12345678 这样启动速度会快一点
修改XP默认TCP连接数
Intel Pro 1000网卡高级设置
QoS数据包标签 建议设置:已禁用
本地管理的地址 建议设置:不存在
传输描述符 建议设置:256
等待连接 建议设置:开
分载传输IP效验和 建议设置:开
分载传输TCP效验和 建议设置:关
分载接收IP效验和 建议设置:开
分载接收TCP效验和 建议设置:关
唤醒链接设置 建议设置:已禁用
唤醒设置 建议设置:已禁用
纪录链接状态设置 建议设置:已禁用
接收描述符 建议设置:256
巨帧 建议设置:已禁用
链接速度和双工 建议设置:1000 M 自动协商
流程控制 建议设置:关
启用 PME 建议设置:控制操作系统
适应性帧间距调整 建议设置:已启用
中断节流率 建议设置:关 网卡高级属性设置
1。link down power saving 连接断开时关闭电源节省,建议启用enable。
2。link eed/duplex mode 连接的速度,现在的网卡一般都是10/100M自适应的,选默认的auto negotiation 自动选择即可。
3。network performance 网络设置,不用理它。
4。optimal performance 优化设置,建议启用enable。
5。receive buffer size 接收缓存大小,选最大的64k bytes吧。
6。wakeup on arp/ping wakeup on link change wakeup using Apm mode
这些都是网络唤醒功能,不需要的建议关闭disable。
Link Down Power Saving 低速连接时省电模式 Link Speed/Duplex Mode 连接速度双工模式 Network Addre 网络地址 Optimal Performance 优化性能 Receive Buffer Size 接收缓冲大小 WakeUp on ARP/PING 网络唤醒通过ARP/PING WakeUp on Link Change 网络唤醒通过连接改变 WakeUp using APM Mode 网络唤醒通过APM模式
==================技术分割线结束================== 其中最重要的是MTU的匹配,如果不匹配,数据包会被拆分,而wlk版本的数据包压缩方式改变,压缩比非常高,一旦失败,就要重新切割.
而 大流量减负 Rx/Tx CRC 等等以上说的都会导致包重新切割.造成了数据包一直在本地缓冲内循环切割和等待,最终就是卡掉线. 上面的措施不仅仅是解决掉线问题,其次是可以增加上网浏览速度15%-100*N% .
==================================================
参考资料:
TCP的MSS(最大分段)以及MTU分析
[背景知识] MTU: Maxitum Tra mi ion Unit 最大传输单元 MSS: Maxitum Segment Size 最大分段大小(偶是直译,翻译的不好,不要打俺PP) PPPoE: PPP Over Ethernet(在以太网上承载PPP协议) [分析过程] 先说说这MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,让我们先仔细回忆一下EthernetII帧的结构DMAC+SMAC+Type+Data+CRC 由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes最大不能超过1518bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。 (注:小于64Bytes的数据帧一般是由于以太网冲突产生的“碎片”或者线路干扰或者坏的以太网接口产生的,对于大于1518Bytes的数据帧我们一般把它叫做Giant帧,这种一般是由于线路干扰或者坏的以太网口产生) 由于以太网EthernetII最大的数据帧是1518Bytes这样,刨去以太网帧的帧头(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC校验部分4Bytes(这个部门有时候大家也把它叫做FCS),那么剩下承载上层协议的地方也就是Data域最大就只能有1500Bytes这个值我们就把它称之为MTU。这个就是网络层协议非常关心的地方,因为网络层协议比如IP协议会根据这个值来决定是否把上层传下来的数据进行分片。就好比一个盒子没法装下一大块面包,我们需要把面包切成片,装在多个盒子里面一样的道理。 当两台远程PC互联的时候,它们的数据需要穿过很多的路由器和各种各样的网络媒介才能到达对端,网络中不同媒介的MTU各不相同,就好比一长段的水管,由不同粗细的水管组成(MTU不同 )通过这段水管最大水量就要由中间最细的水管决定。 对于网络层的上层协议而言(我们以TCP/IP协议族为例)它们对水管粗细不在意它们认为这个是网络层的事情。网络层IP协议会检查每个从上层协议下来的数据包的大小,并根据本机MTU的大小决定是否作“分片”处理。分片最大的坏处就是降低了传输性能,本来一次可以搞定的事情,分成多次搞定,所以在网络层更高一层(就是传输层)的实现中往往会对此加以注意!有些高层因为某些原因就会要求我这个面包不能切片,我要完整地面包,所以会在IP数据包包头里面加上一个标签
F(DonotFragment)。这样当这个IP数据包在一大段网络(水管里面)传输的时候,如果遇到MTU小于IP数据包的情况,转发设备就会根据要求丢弃这个数据包。然后返回一个错误信息给发送者。这样往往会造成某些通讯上的问题,不过幸运的是大部分网络链路都是MTU1500或者大于1500。 对于UDP协议而言,这个协议本身是无连接的协议,对数据包的到达顺序以及是否正确到达不甚关心,所以一般UDP应用对分片没有特殊要求。 对于TCP协议而言就不一样了,这个协议是面向连接的协议,对于TCP协议而言它非常在意数据包的到达顺序以及是否传输中有错误发生。所以有些TCP应用对分片有要求---不能分片(DF)。 花开两朵,各表一枝,说完MTU的故事我们该讲讲今天的第二个猪脚---PPPoE所谓PPPoE就是在以太网上面跑PPP协议,有人奇怪了,PPP协议和Ethernet不都是链路层协议吗?怎么一个链路层跑到另外一个链路层上面去了,难道升级成网络层协议了不成。其实这是个误区:就是某层协议只能承载更上一层协议。 为什么会产生这种奇怪的需求呢?这是因为随着宽带接入(这种宽带接入一般为CableModem或者xDSL或者以太网的接入)由于以太网缺乏认证计费机制而传统运营商是通过PPP协议来对拨号等接入服务进行认证计费的,所以就出了这么一个怪胎
PPoE。(有关PPPoE的详细介绍参见本站其他成员的一些介绍文章,我就不啰里啰唆的了) PPPoE带来了好处,也带来了一些坏处,比如:二次封装耗费资源,降低了传输效能等等,这些坏处俺也不多说了,最大的坏处就是PPPoE导致MTU变小了以太网的MTU是1500,再减去PPP的包头包尾的开销(8Bytes),就变成1492。 如果两台主机之间的某段网络使用了PPPoE那么就会导致某些不能分片的应用无法通讯。 这个时候就需要我们调整一下主机的MTU,通过降低主机的MTU,这样我们就能够顺利地进行通讯了。 当然对于TCP应用而言还有另外的解决方案。 马上请出今天第三位猪脚:MSS。 MSS最大传输大小的缩写,是TCP协议里面的一个概念。 MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460。通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。 介绍完这三位猪脚 我们回过头来看前言里面的那个问题,我们试想一下,如果我们在中间路由器上把每次TCP连接的最大MSS进行调整这样使得通过PPPoE链路的最大MSS值加上数据包头包尾不会超过PPPoE的MTU大小1492这样就不会造成无法通讯的问题.所以上面的问题可以通过ip tcp adjust-m 1452来解决。当然问题也可以通过修改PC机的MTU来解决。 MTU是什么? 如何查看它的大小?如何修改它的值?MTU是Maximum Tra mi ion Unit的缩写。意思是 网络上传送的最大数据包。MTU的单位是字节。 大部分网络设备的MTU都是1500。如果本机的MTU比网关的MTU大,大的数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度。把本机的MTU设成比网关的MTU小或相同,就可以减少丢包。 如何检测网关的MTU? 在本机打开dos窗口,执行: ping -f -l 1472 192.168.0.1 其中192.168.0.1是网关IP地址,1472是数据包的长度。请注意,上面的参数是“-l”(小写的L),而不是“-1”。如果能ping通,表示数据包不需要拆包,可以通过网关发送出去。如果出现: Packet needs to be fragmented butDF set.表示数据包需要拆开来发送。此时,减少数据包长度,再执行上面的ping命令。从1400到1472之间多试几次,就能找到合适的数据包长度了。把数据包长度加上数据包头28字节,就得到MTU的值。 如果检测到网关的MTU值是1500,不需要修改。如果网关有防火墙ping不通,可以试试直接把MTU设为1400。 如何修改本机的MTU? 修改方法如下: (1)、运行regedit (2)、浏览到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interface (3)、Interfaces下有多个子项,每个子项对应一个网卡。 请按如下方法选择网卡: (a)确定本机用来连接Internet的网卡或拨号连接的IP,如192.168.0.19; (b)用鼠标点击Interfaces上的子项,查看键值列表中的IPAddre 项; (c)如果IPAddre 的键值与(a)中的IP相同,即192.168.0.19,则该子项就是要找的网卡。 (d)、进入该子项,在右边的窗口里按鼠标右键,选择“新建”-&am gt #8220;双字节值”,输入名称“MTU”,按回车。再用鼠标双击“MTU”,弹出修改窗口, 填入MTU的值。填写前请先把基数设为十进制。 设置好后,需要重启机器才能生效。 标签:
绿色通道:
posted on 2010-11-09 17:36
阅读(594)
注册用户登录后才能发表评论,请
最新IT新闻
最新知识库文章
网站导航:
2010年11月
昵称:
园龄:
粉丝:
关注:
最新闪存
thanks to firefox!在这个肉欲横行的多进程浏览器时代,难得ff还能坚持单进程多线程的内核,在某些系统上,多进程并不好用,而且对单进程多线程的TCP连接有限制...在这种平台下,多线程的优势就出来了...而且多线程,,,很难写的无bug.佩服!
像.NET这种中间平台(从架构上说,相当于Adapter模式),能不能将GPU的运算和CPU运算整合呢?这样在办公应用上,也可以提升整机速度啊?不至于不打游戏的时候,浪费GPU资源...
我们能不能将太阳能在太空搜集并聚能,通过激光直接指向地球地面设备发电,充分利用太空发电,可行否?
F35啥的,太过于复杂,其复杂程度高于日本H2火箭项目,导致后期维护成本高居不下,从这点来看,性价比太低.而且u table的因素太多,悲剧,切当做技术SHOW吧
raid1 mirror 坏了一个盘,借此机会升级了硬件,换了网卡,结果导致双机互访失败,查了接近2个小时,最后发现arp绑定了MAC,防攻击的时候加的,而且加在启动批处理中的,,,,我了个去...
搜索 常用链接
我的标签
随笔档案
最新评论
偏应用的业务需求的各种语言都大体相同.
偏科研性质的代码,C语言当之无愧.
--yashika
惊!原来c语言也不过如此。
--zzmsl
阅读排行榜
评论排行榜
Powered by:
Copyright 钢铁奏鸣曲

参考资料