﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-组件工厂-随笔分类-它不是一个人(WOW研究专区)</title><link>http://www.cppblog.com/flashboy/category/8347.html</link><description>------3D游戏研发</description><language>zh-cn</language><lastBuildDate>Fri, 11 Dec 2009 02:35:34 GMT</lastBuildDate><pubDate>Fri, 11 Dec 2009 02:35:34 GMT</pubDate><ttl>60</ttl><item><title>WOW地形Shader分析(转)</title><link>http://www.cppblog.com/flashboy/archive/2009/12/11/102960.html</link><dc:creator>RedLight</dc:creator><author>RedLight</author><pubDate>Fri, 11 Dec 2009 02:04:00 GMT</pubDate><guid>http://www.cppblog.com/flashboy/archive/2009/12/11/102960.html</guid><wfw:comment>http://www.cppblog.com/flashboy/comments/102960.html</wfw:comment><comments>http://www.cppblog.com/flashboy/archive/2009/12/11/102960.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flashboy/comments/commentRss/102960.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flashboy/services/trackbacks/102960.html</trackback:ping><description><![CDATA[<p>SPXG // 标识<br>// 用到5张图片:<br>{<br>&nbsp;&nbsp; blendTexture&nbsp; = 0<br>&nbsp;&nbsp; layer0Texture = 1<br>&nbsp;&nbsp; layer1Texture = 2<br>&nbsp;&nbsp; layer2Texture = 3<br>&nbsp;&nbsp; layer3Texture = 4<br>}<br>!!ARBfp1.0<br>// 定义常量:<br>PARAM c[1] = { { 1, 0.30000001, 0.69999999 } };<br>// 声明3个寄存器:<br>TEMP R0;<br>TEMP R1;<br>TEMP R2;<br>// 开始混合:<br>// 一.第0层和第1层使用第4张图的x通道作为alpha进行混合:<br>TEX R1, fragment.texcoord[0], texture[0], 2D;<br>TEX R0, fragment.texcoord[1], texture[1], 2D;<br>ADD R2, R0, -R1;<br>// r2=Tex1-Tex0<br>TEX R0, fragment.texcoord[4], texture[4], 2D;<br>MAD R2, R0.x, R2, R1;<br>// r2 = Tex4.x*r2+Tex0<br>// 说明:<br>// 其中的Tex4.x是对应第1层alpha值, 下面把Tex4.x当a1看<br>// 即 r2 = a1 * (Tex1-Tex0) + Tex0<br>// 转换一下即是: Tex0*(1-a1)+a1*Tex1, 呵呵,看到了吧,这就是混合公式!<br>// 二.第2层和前面结果使用第4张图的y通道作为alpha进行混合:<br>TEX R1, fragment.texcoord[2], texture[2], 2D;<br>ADD R1, R1, -R2;<br>// r1=Tex2-r2<br>MAD R2, R0.y, R1, R2;<br>// r2 = Tex4.y*r1+r2, 即 a2*r1+r2 = a2*(Tex2-r2)+r2, 即r2*(1-a2)+Tex2*a2, 其中r2即是上次0和1层混合后的结果<br>// 三.第3层和前面结果使用第4张图的z通道作为alpha进行混合:<br>TEX R1, fragment.texcoord[3], texture[3], 2D;<br>ADD R1, R1, -R2;<br>// r1=Tex3-r2<br>MAD R1, R0.z, R1, R2;<br>// r1=a3*r1+r2 , 即 a3*r1+r2 = a3*(Tex3-r2)+r2, 即r2*(1-a3)+Tex3*a3<br>// 这样r1就保存了最终的混合结果<br>// 四.让阴影地表光泽系数为0(Tex4.w即a通道代表地形的阴影,0为阴影,1为正常.而每层贴图中的a通道是光泽通道,所以R1.w保存的是最终的光泽通道值):<br>MUL R0.x, R1.w, R0.w;<br>// r0.x = r1.w(光泽)*Tex4.w(阴影值, 是阴影则=0,否则=1)<br>// 计算削减系数?<br>MAD R0.w, R0, c[0].y, c[0].z; // r0乘上0.3(削减了30％)再加上一个常量0.69999999<br>// 反射高光 = secondary_color(反射光)*光泽:<br>MUL R0.xyz, R0.x, fragment.color.secondary; <br>// 贴图最终color = 最终贴图混出的color*削减系数:<br>MUL R1.xyz, R1, R0.w; <br>// 贴图最终color * primary_color(光照色或是顶点色) + 反射高光:<br>MAD result.color.xyz, R1, fragment.color.primary, R0; <br>// alpha:<br>MOV result.color.w, c[0].x; <br>END<br>&nbsp;&nbsp; <br>&nbsp;&nbsp; </p>
<p>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/flipcode/archive/2008/03/03/2143452.aspx">http://blog.csdn.net/flipcode/archive/2008/03/03/2143452.aspx</a></p>
<img src ="http://www.cppblog.com/flashboy/aggbug/102960.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flashboy/" target="_blank">RedLight</a> 2009-12-11 10:04 <a href="http://www.cppblog.com/flashboy/archive/2009/12/11/102960.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>wow2.3版视频设置详解</title><link>http://www.cppblog.com/flashboy/archive/2008/12/31/70882.html</link><dc:creator>RedLight</dc:creator><author>RedLight</author><pubDate>Wed, 31 Dec 2008 14:42:00 GMT</pubDate><guid>http://www.cppblog.com/flashboy/archive/2008/12/31/70882.html</guid><wfw:comment>http://www.cppblog.com/flashboy/comments/70882.html</wfw:comment><comments>http://www.cppblog.com/flashboy/archive/2008/12/31/70882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flashboy/comments/commentRss/70882.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flashboy/services/trackbacks/70882.html</trackback:ping><description><![CDATA[<span class=Apple-style-span style="WORD-SPACING: 0px; FONT: 12px Verdana; TEXT-TRANSFORM: none; COLOR: rgb(51,51,51); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; TEXT-ALIGN: left; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0">&nbsp;&nbsp;自从WOW更新2.0以来<br>　　BLZ对WOW 图形渲染能力作了一次较大的buff<br>　　这些BUFF 在外域进一步展现出来 更复杂的地貌 模型<br>　　更细腻的材质表现 以及细节上更复杂的光照反射效果<br>　　这使得不少用户大喊:我的机器怎么变卡了~~~ 之类的<br>　　但是考虑到TBC上线的背景现在是2007年为什么不让硬件飞速发展的今天<br>&nbsp;&nbsp;&nbsp;&nbsp;让我们更多的享受到技术进步带来的成果呢~? (当然 这是要付出代价的 )<br>　　WOW对图形卡的要求 可谓可大 可小<br>　　其中的关键 就是WOW向用户开放的 设置界面<br>　　也就是我们今天这里要讨论的主角 '视频设置'选单<br>　　PC的硬件搭配是如此多元化显然没有一个标准的设置可以适用于所有的玩家<br>　　那么今天我希望用简单的语言向大家描述一下这个界面中所有的选项<br>　　其意味着什么 你需要付出什么 你能得到什么<br>　　从而摸索出最合适自己的设置.<br>　　下面 是经过我mark过的 设置界面<br>　　在一些设置上 我用了不同的颜色方块标记 来区分<br>　　原则上 把主选项 性能取向上分为3类<br>　　红色标记 表示这将较重的依赖你的图形卡渲染能力<br>　　黄色标记 表示这需要你的系统综合支持能力<br>　　绿色标记 表示这属于轻量级负载<a style="COLOR: rgb(63,104,166); TEXT-DECORATION: none" name=entrymore></a><br><br><br><a style="COLOR: rgb(63,104,166); TEXT-DECORATION: none" href="http://www.cppblog.com/flashboy/admin/attachment.php?fid=6" target=_blank></a><img height=639 alt="" src="http://blog.wkings.net/attachment/200802/1203848625_3801f3cc.jpg" width=517 border=0><br><br><br><strong>　　首先是显示栏<br>　　分辨率</strong><br>　　这个也就是通常说的解析度 1024x768 个规格是通常17英寸CRT的常用分辨率<br>　　它意味着在画面上你的图形卡需要绘制宽度1024位个像素高度位768个像素的图画<br>　　用前者 乘以 后者 可以得出你的图形卡每帧需要处理多少个像素<br>　　像素是计算机图形的最基本单位,所有看到的图像都由这样叫做'像素'的色点按照程序控制排列<br>　　并呈现出具体图像.<br>　　那么很显然这个数字越大每帧包含的像素越多那么你的图形卡就需要更多的时间去完成这些渲染动作<br>　　那么 每秒内渲染帧数=FramePreSecond 也就是FPS 自然就更低<br>　　这个数字 是决定你图形卡工作量的最基本参数<br>　　一台17英寸CRT显示器 的标准分辨率 1024x768 每帧 78万个像素<br>　　而一台22英寸宽屏LCD显示 标准分辨率为1680x1050 每帧 176万个像素<br>　　那么后者维持同样FPS的条件下需要前者2.25倍的性能才能够实现<br>　　所以必须要了解自己的需要使用到的分辨率不要盲从于WOW对显卡要求很低的说法<br>　　推荐分辨率 无 根据自身显示设备决定<br><br><strong>　　多重采样</strong><br>　　其实在这个设置 是 色深/z缓存精度/多重采样的混合选项<br>　　色深由于wow目前只仅使用用24bit高色彩<br>　　除非是古董级别GeForce2 mx400(2000年的东西)级别或者更早以外不需要考虑16位色<br>　　那样只会降低色阶过渡的流畅性 无意义的损失画面表现<br>　　Z-缓存精度 涉及到光栅渲染知识的过多细节 这里简化说一下<br>　　低精度的Z缓存 会让图形卡判断几何体之间的空间遮蔽关系变得更模糊 ,几何体连接的地方会出现更多的锯齿状失真这个随着距离视点越远这个效应越严重<br>　　通常24bit Z 也是无损的 所以不需要过多考虑这个<br>　　24位色深24位Z缓存 是基本选项 无需更改<br><br><br><br><strong>接下来是重头戏采样次数</strong><br>　　WOW支持的是一种叫做多重采样的全屏幕反锯齿渲染技术也就是常说的MSAA 简称AA<br>　　由于3D渲染所有的物体都是由几何结构构成从3D几何数据映射到2D图像的过程中不可能提供无穷的细节来满足最终图像显示的解析度通常有三角形构成的物体最后渲染出来一条斜线往往最后得到的是由一条又一条细小的线段阶梯状排列构成的一条线而这个阶梯状就是我们平时说的锯齿事实上很形象<br>　　而反锯齿技术 就是为了尽可能遮掩这个现象的技术<br>　　这个技术简单的描述就是对构成这个斜线的线段及其附近的像素周围几个点的色彩进行采样<br>　　将这个像素的色彩信息值进行平均运算然后得出与周围色彩过渡近似的色彩去填充那样突兀的锯齿状<br>　　最后看到的斜线一眼看过去就变得顺滑流畅.当然实际算法上比这个复杂得多只是简单的描述<br>　　采样次数 越多最后得到的结果越顺滑过渡越流畅锯齿的可察觉程度就越小<br>　　开启多重采样 可以 显著的改善图像质量使画面更圆润更自然但是要享受 就要付代价<br>　　1x =不开启多重采样锯齿 从2x -8x 根据具体图形卡特性都会在这个选单中出现<br>　　采样次数越高图形卡就需要做更多的动作消耗更多的资源.同时多重采样随着采样次数的提高<br>　　也需要更多的显存空间来作为buffer<br>　　如果在高分辨率下 开启多重采样(MSAA) 那么对于显卡本身渲染管线或者渲染后端的数量以及显存容量显存带宽都会有很高的要求<br>　　对于低端产品 基本没有能力在开启多重采样的情况下流畅运行 9550/6600le/7100/7300gs/8400gs<br>　　低端产品 部描述了<br>　　对于中端产品 通常只能适应1280x1024 /1440x900 4次采样的能力 7300gt/7600gt/8600/1650gt/2600pro<br>　　要求 8管线/ROP渲染后端 128bit显存位宽具备128M以上高速显存<br>　　对于中高端产品 通常能承受1680x1050 4次采样 1950gt/7900系列 (6800/x800 16管版本)<br>　　需要12-16渲染管线/ROP渲染后端 128bit显存位宽具备256M以上高速显存<br>　　对于高端产品 能够承受1920x1200 4x/8x 采样<br>　　基本需要16甚至更多的 渲染后端 需要至少256bit 显存位宽 512M以上高速显存<br><br>　　基本上 分辨率结合多重采样内的设置基本上是硬指标没有多少灵活'优化'的余地<br><br>　　刷新率/垂直同步刷新/三倍缓冲<br>　　这个取决于显示设备的工作参数<br>　　其意义是显示末端设备 每秒更新图像的次数<br>　　而实际上图形卡输出的FPS往往和显示设备不一致<br>　　其中就会造成一个时差有一定几率你会在屏幕中发现破裂的帧这个帧混合着上一帧和下一帧的内容<br>　　如果在高速移动中每帧的内容都在不断变化那么这个破裂就会比较明显<br>　　通常这个在低分辨率帧不是很大的时候不明显，对于高分辨率的用户经常可以看到这样的撕裂现象<br>　　当然 这是瞬间的图像。<br>　　而垂直同步刷新则是解决这个问题的方法每渲染完的帧必须和显示设备同步输出这样就避免了破裂<br>　　但是带来了新的问题就是<br>　　每秒输出的最大帧数 =当前刷新率对于喜欢看数字的人可能会不爽但是可以说更高的数字没有意义<br>　　另外每帧渲染的内容都不同所需要的周期也不同额外的等待动作意味着必须牺牲一定的性能。<br>　　而三倍缓冲则是允许图形卡预先渲染更多的帧作为准备输出的内容来缓解这个问题的方案<br>　　所以 当你需要开启垂直同步刷新的时候 请务必钩上三倍缓冲。<br>　　关闭垂直同步刷新 自然是最大化的获得FPS<br><br>　　<strong>窗口模式/最大化</strong><br>　　窗口模式 是许多玩家为了游戏中更便捷的切换到qq 网页常开启的选项<br>　　但是 我不得不说 这个选项WINXP以及更早的操作系统下 慎用<br>　　通常这个模式比全屏模式有更多的不稳定因素，尤其是在开启多重采样的情况下经常会产生各种各样的问题<br>　　ATi 表现为不是激活窗口 FPS剧烈下降 NV则有出现使用输入法的时候前后台缓冲混淆 导致画面错误<br>　　另外还有很多不是很典型的渲染错误案例<br>　　这个原因基本上是Windows平台留下的历史遗留问题这个问题在Vista下得到了完美的解决细节就不多陈述了<br><br>　　这里需要注意的是窗口模式中如果钩上最大化等于以你的桌面分辨率为准 渲染此窗口<br>　　那么部分机器较差的朋友本来想通过降低分辨率提高FPS的时候又钩上最大化的话那么就没有意义<br><br>　　<strong>硬件指针/修正延迟</strong><br>　　硬件指针 意思是硬件光标加速 也就是游戏中的鼠标光标<br>　　为了避免FPS过低的时候光标和画面一起渲染导致鼠标移动不顺畅造成影响操作的存在<br>　　另外 游戏中忽然丢失鼠标可以尝试开/光这个项目来解决（这属于不确定因素）<br>　　修正延迟是修正视觉与网络信号传输的差距模糊猜测的动作这个基本钩上<br>　　基本这两个不影响性能 所以不做标明<br><br><br><br><strong>世界外观</strong><br>　　这是一个综合选单<br>　　如其所表述 这里的设置 关系到对 WOW世界环境的表现力<br><br>　　远景显示<br>　　这个设置 直接影响你的系统 渲染场景的最大范围<br>　　包括单位进入多少范围开始被渲染 等<br>　　这个范围越大 你的系统渲染的东西越多<br>　　最大远景对于战斗中更早的发现目标和farm中更远的发现自己的目标都有很大好处<br>　　但是这个&#8220;蛋糕&#8221;可不好啃<br>　　这里对于CPU 内存 显卡 甚至磁盘性能 都有一定要求<br>　　属于综合型负载<br>　　通常平台比较强劲的系统才会拉到最大 一般<br>　　推荐P4系列2ghz以下 以及1.5Ghz左右的K7系统 512M内存的系统通常开低<br>　　P4 2Ghz 以上 K7 1.5ghz以上 底端A64以及底端core2 1G内存的系统开中等<br>　　P43Ghz 以及中高端A64/CORE 平台 1.5G内存以上的系统开高无妨<br>　　Vista系统则需要更高的内存<br><br>　　<strong>地形细节</strong><br>　　这个牵涉到WOW 图形引擎的地形渲染系统<br>　　开低可以降低世界模型的几何复杂度一定程度上释放CPU的几何计算压力<br>　　对于底端机器 建议开低<br>　　主流机器大可开高<br>　　基本上这个对性能影响很有限 除非低端平台 能省点算点<br><br>　　<strong>法术细节</strong><br>　　这是一个图形/系统平台性能倾向的综合选项<br>　　高法书细节 对于魔法的视觉特征表现得更完整 raid时候通常为了能从动作和魔法效果上更准确知道目标的行为通常会建议开高<br>　　本来简单的魔法效果 赏析悦目又不是很复杂自然是开启好也不会消耗过多的资源。<br>　　但是在单位众多的情况下大量单位释放魔法的时候对于整体系统的压力就会大大提高<br>　　简单的例子 一群法系 aoe 下雨 ，辅助集体buff 以及战斗混乱的场面这个选项开高将给你的系统带来不小的负担。<br>　　一个很难取舍的选项 在系统能够承受的范围内 尽量开启吧。<br><br>　　<strong>环境细节</strong><br>　　这个会影响到你对环境渲染的完整度<br>　　就拿泰xx森林来说 开启这个选项<br>　　你在视觉范围内能够看到更多的植物模型灌木以及不影响移动的小石块等几何物体<br>　　基本上 对于主流平台 不会有太大压力<br>　　追求细节的人开启 自然能更好的体验游戏中的气氛<br>　　这个选项会小幅度提高CPU/显卡的压力<br>　　这两方面比较薄弱的平台 可以考虑关闭<br><br>　　地表景观密度/地表景观范围<br>　　这是一个纯粹的图形卡倚重的选项<br>　　透过VertexShader的支持 在地表绘制出更复杂的地貌<br>　　比如草皮 和一些细小物件的密集程度 以及 在多少距离内被渲染<br>　　超出某个距离则被忽略它和上面最大的区别是这些东西完全是GPU完成的所以数量基数更大<br><br>　　泰罗卡森林以及xx沼泽等很多地方通过这样的技术来表现地貌特色<br>　　对于环境细节的表现 这2个选项影响比较大追求品质的话推荐开启毕竟既然表现森林那么看起来它最好就要像森林<br>　　基本上 WOW并没有实现过于复杂的地貌效果通常中高端GPU完全可以开满这个选项<br>　　GPU稍差则可以适当降低选项 这个选项 修改后立刻可以看到区别<br>　　可以自己测试对fps影响如果你的GPU足够那么你将看不到FPS严重衰减<br>　　基本上能够满足40+fps 让我们更多的享受质量吧毕竟这个不是射击游戏<br>　　这个基本上是依赖GPU的高级可编程部分 Shader性能<br>　　对于后期的中段 7600gt/8600系列/2600系列有非常不错的表现完全可以开启<br>　　下面是效果图<br><img height=343 alt="" src="http://blog.wkings.net/attachment/200802/1203848625_93801560.jpg" width=550 border=0><span class=Apple-converted-space>&nbsp;</span><br><br><br>降低密度以后 完全没有植被的感觉<br><img height=343 alt="" src="http://blog.wkings.net/attachment/200802/1203848625_7615799b.jpg" width=550 border=0><br><br><br>　　<strong>降低景观范围</strong><br>　　这个 稍微好 比关密度好<br>　　但是 能开满当然最好了不然你能很明显看到植被是忽然蹦出来的<br>　　全开满都有这个效应 关了就更明显了 （没办法 减少运算量）<br><img height=343 alt="" src="http://blog.wkings.net/attachment/200802/1203848625_9127d009.jpg" width=550 border=0><br><br>　　<strong>材质分辨率</strong><br>　　这个就是纹理材质质量 纹理是什么？啊。。<br>　　这个世界物体的外表特征等都是靠纹理贴图来完成游戏中人物看起来是石头 是木头都是靠纹理<br>　　那么纹理分辨率影响什么<br>　　很简单 开高纹理分辨率 你将看到更细腻的物体特质<br>　　比如你装备上的纹路 比如地上的石板路 甚至你的脸蛋<br>　　高纹理材质 需要更多的占据系统内存 和显存<br>　　wow的材质本身并不算复杂 但是到了TBC 纹理细腻程度又进一步提升<br>　　不过对于显卡来说〉64M显存的产品基本都可以开高不会明显影响性能<br>　　但是 个别复杂场景除外~<br>　　现阶段 基本推荐〉512M内存 和〉=9550级别的图形卡开高<br>　　基本显卡压力很小很小<br>　　玩WOW 不满足这两个条件的机器很少了<br><br>　　<strong>材质过滤</strong><br>　　通常纹理过滤方案 主流是双线形过滤 和三线性过滤<br>　　曾经的老版本中 有独立的三线性过滤得选项<br>　　这种过滤技术 直接影响纹理远近之间过渡得自然程度<br>　　由于三线性过滤从1998年开始有硬件支持到现在已经有了这么多年的历史<br>　　所以2.3将三线性过滤提升到了系统预定过滤方式基本上三线性过滤早就无损的对于拥有4个TMU纹理映射单元的GPU来说基本不存在问题现即使是最底端的产品也不少于4个TMU<br>　　而2.3的材质过滤 实际上是 一个高级过滤 &#8220;各项异性过滤&#8221;的选单也就是常说的AF<br>　　AF技术可以非常明显的改善纹理质量但是需要付出的是数倍以及数十倍三线性过滤的采样次数<br>　　这个选项 关闭=使用老式三线性过滤 而拉满 应该=8xAF(估计)<br>　　这个技术的存在 对于图形卡的TMU单元来说 有新的要求<br>　　对于大部分4管线4TMU 的图形卡 这个选项会造成不小的性能下降<br>　　对于8管线8TMU的产品 通常开一半会是不错的选择<br>　　部分高频率8TMU产品可以考虑开满<br>　　对于TMU比较多的产品从中得益会比较大具体参数可以参考自己使用的图形卡的技术指标<br>　　另外 这个受到分辨率牵连，高分辨率的情况下 TMU的压力会加大<br><br>　　基本上能开启尽量开启和关闭会有很大不同当然马虎的人可能不会注意纹理清晰度的问题<br><br>　　<strong>天气强度</strong><br>　　用来开启天气的表现<br>　　需要图形卡性能作为支持 图形卡趋向 但是压力并不算大<br>　　基本上中端产品都有能力开启 这里就不过多陈述<br><br>　　<strong>特殊效果</strong><br>　　里面3个成员 都是吃GPU的重头<br>　　底端产品关闭可以获得更好的性能<br><br>　　这里基本上是WOW PixelShader 高级特性应用的主要体现<br>　　PixelShader 数量较多或者是构架先进的产品能够轻松胜任这个工作<br>　　毕竟wow Shader主要是基于DX8 的SM1.X<br>　　中高端产品 根据分辨率来调整 分辨率直接影响开启后的压力<br><br><br><br><strong>高光效果/全屏幕范光效果</strong><br>　　它们通常是并存的<br>　　高光效果以前的版本就存在 但是到了TBC以后作了进一步强化<br>　　TBC之后 许多金属质感的装备 会有光的折射 表现出其质感<br>　　能量舰中也大量出现折射和高光效果这都是1.xx版本中不曾存在的<br>　　游戏中基本沙粒 地表对光的反射也表现得更加突出<br>　　同时 也通过光学特制 表现出物体的凹凸感 BUMP技术也好是pixelshader的普遍应用<br>　　这里 是TBC图形卡要求提高的主要原因<br>　　效果图~~如下<br><img height=343 alt="" src="http://blog.wkings.net/attachment/200802/1203848692_5495fe5d.jpg" width=550 border=0><br><br><br>　　光的折射<br>　　弥漫感<br>　　比起木纳的顶点光照来说 像素光照更具备细腻性和表现力<br><br><br><br><img height=343 alt="" src="http://blog.wkings.net/attachment/200802/1203848692_71758cda.jpg" width=550 border=0>　　<br><strong><br>死亡效果</strong><br>　　死亡后 泛白光 这个也是属于高级pixelShader渲染的杰作<br>　　事实上它本质上和上面没有太多不同 只是渲染算逻辑不同<br>　　硬件要求也类似 我就不过于累赘了<br>　　不过这个效果可能不单纯只是死亡时候有用可能把类似渲染都归为这一类别<br><br>　　基本上这3个项目本质上没有不同<br><br>　　多数情况下 通常分辨率1024x768 1280x1024 1440x900 这样分辨率<br>　　中端图形卡乃至于中底端图形卡都有能力开启这3个选项对性能要求并不算高<br>　　基本7300gt 6600gt级别 完全可以胜任 毕竟是DX8的东西<br>　　分辨率高了 是另外的问题<br><br>　　<strong>其他<br>　　角色阴影</strong><br>　　是否渲染玩家单位阴影的操作 基本上属于简单的shadow map<br>　　WOW中没有用到复杂的阴影渲染技术基本上还是quake3（1999）年代的东西<br>　　这个项目并不会消耗多少图形卡资源 属于轻量负载<br>　　而且开启有一个好处在单位进入你渲染范围的时候往往阴影比模型先出现！<br>　　HOHO...<br>　　<strong>世界层次细节</strong><br>　　这是一套最早在&#8220;升刚&#8221;的一个FPS游戏中成熟利用的技术<br>　　对不同距离的的单位使用不同细节的模型到了一定距离就用简单的模型来渲染单位来减少渲染压力<br>　　开启这个以后 可以一定程度降低CPU/图形卡的压力<br>　　正如其描述所说<br>　　底端平台 中端建议打开 基本不影响效果。高端平台就随意了<br></span>
<img src ="http://www.cppblog.com/flashboy/aggbug/70882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flashboy/" target="_blank">RedLight</a> 2008-12-31 22:42 <a href="http://www.cppblog.com/flashboy/archive/2008/12/31/70882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WOW的地形渲染 (转)</title><link>http://www.cppblog.com/flashboy/archive/2008/12/24/70265.html</link><dc:creator>RedLight</dc:creator><author>RedLight</author><pubDate>Wed, 24 Dec 2008 12:03:00 GMT</pubDate><guid>http://www.cppblog.com/flashboy/archive/2008/12/24/70265.html</guid><wfw:comment>http://www.cppblog.com/flashboy/comments/70265.html</wfw:comment><comments>http://www.cppblog.com/flashboy/archive/2008/12/24/70265.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flashboy/comments/commentRss/70265.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flashboy/services/trackbacks/70265.html</trackback:ping><description><![CDATA[<span class=Apple-style-span style="WORD-SPACING: 0px; FONT: 14px/25px 宋体; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 1px; webkit-border-vertical-spacing: 1px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0"><br>&nbsp;&nbsp;&nbsp; 魔兽世界的地形渲染，基本上有三种渲染路径：固定渲染管线（其中是不是又分几种就不清楚了）；shader（带高光）；shader（不带高光）<br>　　用到shader的渲染路径又分别针对1层，2层，3层，4层（最多允许每个chunk使用4层纹理）专门写了shader代码。<br>　　用MyWarCraftStudio打开WOW的misc.mpq包，shader \ pixel \ 目录下以"terrain"打头的bls文件就是地形渲染使用的shader，带有"_s"后缀的是带高光的渲染，否则就是不带高光的。<br>　　我仔细看了其中的terrain4_s.bls（用UltraEdit之类的工具可以直接当成文本文件打开）。是汇编形式的ps代码，由于之前俺只用过c形式的HLSL所以看起来有点吃力，好在还是看明白了。<br>　　texture0~3就是待混合的4层纹理，每层纹理的a通道是该层纹理对应的高光通道；texture4是一张用来控制混合权重的alpha纹理。texture4的r,g,b通道分别对应texture1~3的alpha值，而texture4.a则代表地形的阴影，0为阴影，1为正常。<br>　　混合的公式为res_n = res_n-1 * ( 1 - alpha_n ) + texture_n * alpha_n。其中n代表第n层纹理。res_n代表第n层混合后的结果。<br>　　从代码可以看出，最终混合结果的a通道（高光通道）被乘以阴影值，也就是说阴影中没有高光。同时，阴影中的diffuse光照被削减了30％。<br>　　1，2，3层纹理混合，以及不带高光的情况想必也没有什么特别之处，也不去细看了。<br>　　值得一提的是我原来一直以为WOW的地形渲染只用了ps_1_1，但从这个shader看用了5张纹理，超出了ps_1_1的4个纹理采样的限制，所以至少使用了ps_1_4（允许6个纹理采样）。而1～3层纹理混合的情况使用ps_1_1就够了。我不知道在渲染时频繁切换ps版本会不会收到性能上的惩罚，但有些显卡（比如NV的5200）同样的代码在ps_1_4上运行要比在ps_1_1上运行慢很多。<br>　　至于固定渲染管线的渲染路径，由于不可能看到代码，具体如何实现多层纹理混合无法揣测，集合了各层纹理混合系数的alpha图应该不能直接用于渲染，因为固定渲染管线似乎只能用a通道来控制混合系数，可能需要将这张纹理拆成4张才行。。。</span>
<img src ="http://www.cppblog.com/flashboy/aggbug/70265.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flashboy/" target="_blank">RedLight</a> 2008-12-24 20:03 <a href="http://www.cppblog.com/flashboy/archive/2008/12/24/70265.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我也来分析魔兽世界-场景组织(转)</title><link>http://www.cppblog.com/flashboy/archive/2008/12/23/70151.html</link><dc:creator>RedLight</dc:creator><author>RedLight</author><pubDate>Tue, 23 Dec 2008 05:46:00 GMT</pubDate><guid>http://www.cppblog.com/flashboy/archive/2008/12/23/70151.html</guid><wfw:comment>http://www.cppblog.com/flashboy/comments/70151.html</wfw:comment><comments>http://www.cppblog.com/flashboy/archive/2008/12/23/70151.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flashboy/comments/commentRss/70151.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flashboy/services/trackbacks/70151.html</trackback:ping><description><![CDATA[<p>没有办法WOW太经典，当自己碰到问题的时候再回头研究wow发现wow尽然没有问题，暴雪的游戏制作经验让wow一开始就设计的如此讲究，不得不感叹国内游戏同世界设计方面的差异。 </p>
<p>由于没有wow的源代码，所有的分析想法都来自与wowmapview这个开源的wow地图察看器，wowmapview的代码写的很凌乱，但很容易理解，好了，我们开始吧！Gogo </p>
<p>wow场景是由一系列MapTile组成，这些MapTile的大小是1600/3 ≈ 533.33m，而每个MapTile又是由 16x16 个MapChunk组成，由此可以计算出每个MapChunk≈33.33m，如图： </p>
<p><img height=410 alt="" src="http://www.sineysoft.com/UserFiles/Image/14f85412504b_896/clip_image001.gif" width=410> </p>
<p>在wow中，一个MapTile是有由一个adt文件描述。 </p>
<p>比如World\Maps\AhnQiraj\AhnQiraj_29_48.adt文件就描述在xz（29，48）位置的MapTile，每个MapTile都包含了该tile内使用的贴图（引用外部）、模型（引用外部）、wmo（MapObject）、模型实例、wmo实例，所谓模型实例就是相同模型在tile内不同摆放位置、大小、角度的说明信息，在wow引擎中的术语是doodad，即可以随意摆放的小东西，wmo实例类似。为了节省文件尺寸，模式实例、wmo实例是通过index模型、wmo的方式保存的，同顶点索引类似。 </p>
<p>每个MapChunk又由9x9＋8x8个地形顶点高度，法线，若干贴图层（一般为4层），水面，Alpha贴图层（用于控制地表贴图的混合比例，一般为3张，尺寸64x64）和一层shadow map（64x64）组成。如图，由此可推算出wow的地面精度≈2m </p>
<p>Wow的地表是非常精细的，这与它使用了alpha贴图控制地表混合比例有关，而一般的引擎则把地表贴图的混合比例放在地表顶点中记录，这样地表的精度将同顶点密度保持一致。 </p>
<p>Wow使用固定方向光照，所以可以使用shadow map来模拟树、房子等在地表透射的阴影，shadow map的尺寸也是64x64，可见阴影的精度也是非常高的。 </p>
<p><img height=289 alt="" src="http://www.sineysoft.com/UserFiles/Image/14f85412504b_896/clip_image003.gif" width=289> </p>
<p>这样的地形顶点分布是wow在最高地表精度下的高度顶点布局，当相机远离MapChunk时，这个高度顶点的布局可能是这样： </p>
<p><img height=289 alt="" src="http://www.sineysoft.com/UserFiles/Image/14f85412504b_896/clip_image005.gif" width=289> </p>
<p>此时，地表的精度≈4m。</p>
<p>Wow的地表是支持挖洞的，有意思的是为了节省空间，其标示挖洞的信息数据就是一个int，通过使用位运算来得到一个4x4精度的挖洞信息，我们不放把这种4x4的洞叫做holeChunk，每个holeChunk支持4种状态来标示其内部2x2的洞分布状况，由此可见wow在数据结构方面已经发挥到了极致：对于需要精密表现的地表好不吝啬的使用64x64混合贴图，而对于hole这种只需要粗略（一半还不使用的东西）的记录一个int。</p>
<img src ="http://www.cppblog.com/flashboy/aggbug/70151.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flashboy/" target="_blank">RedLight</a> 2008-12-23 13:46 <a href="http://www.cppblog.com/flashboy/archive/2008/12/23/70151.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>