听说还纯在wwWbitadalulu期他的入点,英该怎么能bitadalulucom找的道

淡笑看着沈落雁的莫槐,并未直接回答,而是转而看向了锦袍胖汉:“香贵是吧?听说你们巴陵帮乃杨广的走狗,专事贩卖人口,我这个人,最讨厌的就是贩卖人口的。”
“对了,洪六,这巴陵帮帮助烟杆陆抗,你是怎么杀的啊?”说着,莫槐便是略微
  应该说这个环节,我经历过有几次了,所以有一些经验,过程自然很顺利了。
  前面介绍过正常的谈判核心内容在于价值,作为出让方我们要通过描述来指导对方认清我们的价值所在,而对方能够接受的心理价格也正是受此影响。这不是很难理解的问题,比如我们的饭店,如果按照经营的现实状况来看,没太多的价值可言,但是它未来的地理优势,则是我们极力强调,并且希望对方能够懂得并接受的所在。说白了,若是我们遇上极力强调目前饭店的亏损的状况,并且对于未来情况表示不确定,这个谈判就比较难了。而事实上,我们确实碰上了这样的谈判对手,让我心生敬佩,他姓董,从他的话中我能够感受出他是一个餐饮内行。
  但是,我也介绍过,除了价值,还有一个主要的干预因素在于市场。市场会有一个预期价格,这个不是哪个人设定的,但是确实存在,在供不应求的时候价格就会自然被抬高。在这一点上恰好印证了我们当初选择山东路作为投资的眼光是正确的,因为即便在交通封堵之下,这里的商铺仍然是一点难求。我们在同城网站
“好,明白。”
  “再补充一点,选准小区是关键。用60%的力量专做高档小区的有奖促销活动,周末堵在小区门口摆摊设点,坚持三个月,市场能不被轰开?然后你再用剩下的40%人马做中档小区,完全放弃普通小区。明白啥意思吧?”
  “呵呵,老大,这点想到一块去了。只不过我没你那么纯粹,是按4:4:2比例来分配的。
  “不好。曾国藩攻难天京时,总是顺江而下,先取安庆再下天京,但清军绿营却是逆江而上,所以被太平天国击破大营,统帅和春把剑自刎。我们反复强调过,做品牌一定要高屋建瓴。你只要打动了中高档小区里的住户,他们购买我们产品带来的是,1、主力消费群,购买力旺盛;2、能引领市场消费潮流。你应该集中兵力,重点突破,甚至集中70%的力量去突破高端客户群,他们可是市场上的意见领袖,这帮人振臂一呼,自然是从者云集啊。”
  “好,知道喽。”
  未完待续中……
  明天继续发帖,敬请关注
    书接上文。
  “第三,广告计划还要修改。我来说几点。1、《扬子晚报》
亲爱的朋友:
&&&&欢迎您在新浪博客安家,您的博客地址是:
&&&&您可以用文字、图片、视频记录和展示最真实的自我,与网友交流,与线上好友聊天,还能通过手机发表博文和上传图片,随时随地记录心情和身边趣闻。
&&&&我们为您提供了丰富的炫酷模板来装点您在网上的家园,强大的音乐播放功能更能陪伴您的网络生活。准备好了吗?现在就开始精彩的博客之旅!ai_Five_喜欢的音乐 - 歌单 - 网易云音乐
ai_Five_喜欢的音乐
播放:2968次
网易云音乐多端下载
同步歌单,随时畅听320k好音乐
网易公司版权所有(C)杭州乐读科技有限公司运营:
违法和不良信息举报电话:6
举报邮箱:完美DX10!ATI新王者HD2900XT权威评测
日 08:10&&&出处:&& 作者:泡泡网评测室&&
   R600对于DIY玩家已经不算陌生,过去一年多的时间里,相关R600的各类新闻充斥着硬件网站。但在今天,它真的来了! 带着众多Afans和新东家的期盼,首款支持DirectX 10显卡——ATI Radeon HD 2000系列正式发布。   如果说,&ATI的联姻是一个新时代的开始;R600则是这场“婚姻”后真正意义上的产物。这个由当年缔造了经典R300研发团队,再度操刀的R600将会带来怎样惊喜? DirectX 10战场上NVIDIA/ATI精彩厮杀能否再度上演?本文将会带您进入精彩的R600世界。                                                                 
                               &&                                  &                                                                                         &&   &&                                                                                                         :                                                                                &&                                                                                                                                                          &&   &&   &&                                                                                                                             
                                            
                                                         2007显卡年!AMD/NVIDIA决战图形市场第一章 前言 Afan的节日 R600震撼发布 第一节 2007显卡年!AMD/NVIDIA决战图形市场   在竞争激烈的图形芯片领域,2007年被业内人士寄以厚望。微软新一代操作系统Vista将个人电脑的3D门槛大大提高;具有革命意义的DirectX 10以及众多诱人的DX10游戏更促进了显示卡的更新换代。机会与挑战并存,对于NVIDIA/AMD两大竞争对手来说,2007年同样具有战略意义的一年。● 内忧外患 Radeon HD2000注定多坎坷&&    R600发布固然是个好消息,但AMD近来传出的消息却不慎乐观。四月末,AMD公布了2007年一季度财报:AMD今年第一季度的销售收入为12.33亿美元,这一业绩与其2006年同期的销售收入13.32亿美元相比,减少了0.99亿美元,继续处于亏损状态;再此期间,AMD为了ATI继续支付了1.13亿美元收购开支。看来,06年大手笔的收购案以及处理器市场激烈竞争导致利润降低,短时间内AMD财务状况仍不是太乐观。   从市场状况来看,竞争对手NVIDIA支持DirectX 10的高端G80系列已经上市长达半年。8800GTX/GTS以及简化版的8800GTS 320M覆盖了从元的绝大多数高端市场。半年来的市场真空不仅保证了丰厚的利润,也创造了NV高端卡市场的最佳销量。而待到R600上市后又很可能迎来NV的价格战,这对于在制造成本上不占优势的R600系列将是更大的考验。   不过一切还算不上太糟糕,DirectX 10游戏的全面延期使得市场对于DX10显卡需求也相应放缓。对于在未来几月才能陆续到来的DX10游戏,A卡还有较为充裕的时间准备。尤其在销量最大的千元内主流市场,NV新推出的优势尚未完全建立,市场对于Radeon HD 2000系列前景依旧看好。● OEM市场传捷报 R6**未发布已被抢购一空   &#8220;前途是光明的,道路是曲折的&#8221;这句老话用在A卡身上再适合不过。自去年AMD完成对ATI的并购后,AMD也成为业内唯一能独立提供CPU+GPU+芯片组的厂商,创新的平台化战略大大加强了AMD/ATI产品的竞争力。   据外电报道称,R6**系列图形芯片已经卖出了百万颗芯片。其中低端RV610(HD 2400系列)尚未发布就已被被戴尔、惠普和联想三家瓜分一空。OEM巨头所看重的正是RV610低廉的成本(核心小、64Bit显存成本低)、极小的发热(65nm核心)、UVD高清视频加速和完整的DX10支持。另据有关预测显示,到2007年底,AMD 65纳米的 GPU销量有可能达到一个亿!奋起直追!全新Radeon HD 2000产品线解析第二节 奋起直追!全新Radeon HD 2000产品线解析● ATI Radeon HD 2000系列规格表   针对新一代产品在HD应用上的特色,AMD也将之前的英文字母&#8220;X&#8221;从产品命名当中除去。R600、RV630、RV610以及未来的RV6XX系列将会统一命名为Radeon HD 2XXX系列。&Radeon HD 2XXX系列规格表(点击看大图)● R600&#8212;&#8212;Radeon HD 2900系列   AMD Radeon HD 2000产品线的高端部分目前只有Radeon HD 2900XT一款,仍采用TSMC 80nm工艺制作。Radeon HD2900系列图形芯片拥有7亿个晶体管,内建320个流处理器,搭配双向512-bit显存位宽;支持原生交火、128-bit HDR渲染、硬件支持物理加速;而在HDTV支持方面,显卡内建了HDMI数字输出以及5.1声道的音频输出。&ATI Radeon HD 2900XT● RV630&#8212;&#8212;Radeon HD 2600系列   Radeon HD 2600系列采用TSMC最新的65nm工艺。芯片拥有3.9亿个晶体管,内建了120个流处理器,搭配128bit显存位宽主要面向中端市场。主流的Radeon HD 2600系列将拥有XT、Pro两种规格,通过不同显存搭配从而衍生出多个不同版本。   Radeon HD 2600系列支持最新Avivo HD技术。能够从硬件端完成蓝光、HD-DVD影碟(H.264、VC-1编码)的播放,从而彻底解放CPU。&&&Radeon HD 2600XT GDDR4   &Radeon HD 2600XT GDDR3/Radeon HD 2600PRO GDDR3RV630相关型号规格:   Radeon HD 2600XT 512MB GDDR4   Radeon HD 2600XT 512MB GDDR3   Radeon HD 2600XT 256MB GDDR3   Radeon HD 2600PRO 256MB GDDR3● RV610&#8212;&#8212;Radeon HD 2400系列   面向入门级用户的RV610(Radeon HD 2400系列)分为XT、Pro两种规格,芯片拥有1.8亿个晶体管,内建40流处理器,64bit显存位宽;低端的Radeon HD 2400系列同样保留在HD视频全面的功能。能够支持UVD以及Avivo HD,在输出方面同样支持HDMI以及5.1声道音频输出。   RV610的功耗仅为25W,发热很小,很容易被设计成被动散热以及刀卡板型,这个特性使得它非常适合用在准系统或者HTPC之上,再加上先进的规格,前景十分广阔!   &Radeon HD 2400XT GDDR2与Radeon HD 2400Pro GDDR2RV610相关型号规格:   Radeon HD 2400XT 256MB GDDR2   Radeon HD 2400PRO 256MB GDDR2   Radeon HD 2400PRO 128MB GDDR2●&Radeon HD 2000系列定价   根据AMD官方定价,高端HD 2900XT售价不足400美金,国内售价在元左右;HD 2600系列由于规格较多,定价从99~199美金(800~1600元之间),基本于NV 8600GTS/GT相似。低端的HD 2400价格将低于99美元,国内售价在500~700元之间。功能化发展!Radeon HD2000系列亮点逐个看第三节 功能化发展!Radeon HD2000系列亮点逐个看   硬件产业发展至今,3D游戏性能早已不是衡量一款显卡优劣的全部。了解了Radeon HD 2000系列又具备哪些亮点功能?在正式评测开始前,先让我们来简单了解一下。 ●&全线支持HP数字保护   作为高清视频内容的保护机制,HDCP(High-Bandwidth Digital Content Protection)是软件和硬件厂商针对HDTV推出的版权保护协议。在使用PC/HTPC播放蓝光和HD-DVD的播放过程中,选择一块支持HDCP的显卡是必不可少的环节。只有这样,才能完整输出蓝光和HD-DVD影碟的全高清画面。&Radeon HD 2000系列芯片全部内建HDCP密钥   从X1000系列开始,ATI中高端产品中已经开始加入了对HDCP的支持。但从制造成本考虑,HDCP仍只作为厂商的参考方案,市场销售的千元以内显卡绝大多数并不支持HDCP。随着高清内容的迅速普及,AMD已经将HDCP作为标配,HD 2000系列全线产品均可支持HDCP数字保护。●&显卡声卡二合一!HD 2000支持HDMI混音输出    在显示卡发展初期,声卡显卡二合一并不算罕见。不过随着个人电脑市场的发展趋势,偏重3D性能的显卡与声卡功能完全分开从此分道扬镳。然而,HDTV的普及/应用却再次为显卡声卡的合二为一提供了最佳的契机。   作为AMD新一代图形芯片的另一大特色,Radeon HD 2000系列核心集成了完整的声卡部分。不过这并不是说R600会竞争创新X-Fi等普通声卡,HD 2000系列音频部分是用来提供HDMI输出。因此在使用HD 2000系列显卡接驳大屏幕平板电视时可以更加方便输出视频和音频。   另据AMD官方资料,通过DVI-HDMI转接器HD 2000系列可提供Full HD 5.1音频信号。关于音频的详细介绍及测试,将在下文中为大家介绍。● 超低功耗 HD率先采用65nm制程   在此次推出的HD 2000系列显卡中,除高端R600(HD 2900XT)仍采用80nm制程外,另外两款RV630(HD 2600系列)、RV610(HD 2400系列)均采用TSMC 65nm工艺制造,这也是业界首款采用65nm工艺制造的GPU。   得益于更先进的工艺制程,RV630与RV610相比RV5**核心面积更小,对于芯片成本降低有利。不仅如此,先进的65nm工艺也使得功耗发热得到明显改善。低端RV610显卡的功耗仅为25W,很容易被设计成被动散热以及刀卡板型,这也使得它非常适合用在准系统或者HTPC之上,应用前景广阔。● 迈进高清! ATI全新视频引擎UVD   R6XX系列除了集成声卡以及HDMI/HDCP等先进特效之外,新一代的高清视频加速引擎UVD也是一大卖点。作为Avivo的升级版本,UVD引擎在播放HDTV高清视频时有着更为出色的表现。与以往视频解码由CPU和GPU共同完成不同,UVD引擎能够在显卡上完成蓝光、HD-DVD影碟(支持H.264/VC-1编码)全部解码过程,从而彻底解放CPU。   在下文中,我们还会就UVD引擎进行介绍。第二章:统一渲染架构解析● 第二章 统一渲染架构详细解析   R600在架构上最大的特点就是它采用了第二代统一渲染架构(Superscalar Unified Shader Architecture )。这种架构院源自于Xbox360使用的Xenos图形核心。本章节将为您介绍一下统一渲染架构的特点。第一节:3D图形创建原理   在为大家介绍R600的统一渲染架构之前,为了让更多的朋友能对统一渲染架构的革命性创新有更深入的了解,我们先介绍下图形管线,来看看传统的显卡管线工作原理,3D画面是如何最终展现在屏幕上的。   3D程序从载入到展现在屏幕上,在传统图形管线中是经过下列四个步骤的:● 第一步:应用程序载入/ 场景构建     其中包含了场景/几何数据库遍历、对象的运动,观察相机的运动和瞄准,对象模型的动画运动,3D 世界内容的描述,对象的可见性检查,包括可能的遮挡剔除、细节层次的选择 (LOD)等处理。   简而言之,这一步主要是决定在游戏中有哪些对象, 它们的模型、使用的纹理,可能在什么动画帧,以及它们在游戏世界里的位置。 也决定照相机的位置和方向。● 第二步:几何处理   几何处理过程也就是传统意义上的坐标转换和光源(Transforms&Lighting )。其中包含几何模型的变换 (旋转,平移, 缩放),从模型空间到世界空间的变(Direct3D),从世界空间到观察空间变换,观察投影,细节接受/ 拒绝 剔除,背面剔除 (也可以在后面的屏幕空间中做),光照,透视分割 - 变换到裁剪空间,裁剪,变换到屏幕空间等几个步骤3d 骨架模型   在第二步中,计算机处理的内容是几何模型,不包括贴图和其他素材,因为只有骨架确定了位置和形状,往上面贴图才是有意义的。我们所说的&#8220;骨架&#8221;,也就是几何模型,在电脑里存储的信息就是确定这个几何模型的顶点的数据。因为我们知道,两个点能够确定一条线,三个点能够确定一个面,也就是一个三角形,而多个三角形可以组成一个多边形,多个多边形就确定了一个几何模型。&三角形蒙皮   而且,3D画面中的任何一个顶点都有一个坐标,当此物体运动时,它包含的顶点坐标发生变化,这指的就是几何模型的变换。这个步骤里每个模型的每一时刻的顶点位置都要被重新确定。   然后进行的是观察投影(坐标转换),每一个时刻的3D几何模型将会由3D状态转变为2D状态,具体的方法就是将3D几何模型的每一个顶点的三维坐标通过投影的方法转换为二维坐标。这个过程中,做转换用的平面是根据玩家看游戏的方向和视角决定的。这个过程中电脑并不会进行贴图的操作。甚至每个顶点之前也仍然都是独立没有关系的。&投影   这个步骤中包含了隐面消除技术(HSR),现实处理时还常加上背面剔除来提高效率。现实生活中,当你观察A物体的时候,如果物体B在你和A物体之间,那么你的视线就被物体B所遮挡。在3D技术发展的初期,整个3D场景所包含的顶点都被进行坐标变换并进行处理,这样一来,很多最终不会被显示在屏幕上面的模型也会被处理。所以研究人员发明了Z缓冲器算法来提前进行Z轴判断,也就是判断每个顶点的前后关系,从而决定究竟哪些顶点会被显示。Z缓冲器其实就是另一种帧缓冲器, 不同的是帧缓冲器存的是画面上每个像素的光亮度, 而Z缓冲器存的是画面上每个像素内可见表面采样点的深度。后来还有扫描线Z缓冲器算法,用于消除早期Z缓冲器算法内存消耗严重的缺点。&隐面消除   3D游戏中除了场景与物体还需要灯光,没有灯光就没有3D物体的表现,无论是实时3D游戏还是3D影像渲染,加上光照的3D渲染会引入大量的数学计算。在硬件T&L问世之前,位置转换和光照都需要CPU来计算。ATI从REDEON 256开始支持硬件T&L功能,从而把CPU从繁重的数学计算中解脱出来。后来,在硬件T&L但元为顶点着色单元所取代,这次REDEON X2900XTX的发布,带来的又是一场全新的革命,统一渲染架构下的64个5D Unifide Shader运算单元理论上都可以用作顶点的运算。● 第三步:三角形生成     这个过程就是将已经转换为二维坐标的点根据他们之间的关系,构建成为三角形,也就是上一步骤中产生的骨架模型被附着一套三角形网格,这一过程也就是所谓的蒙皮,为下一步的贴图做准备。蒙皮过程需要进行计算普通或是相切的向量,并且需要骨架的节点被转化,因此他们与基础形态的关节是相关的,基础形态的关节会被转化后用于生成动态的网格。&一个简单的人物模型有5000多个多边形&一个复杂的人物模型会有多达两百万个多边形   构建三角形的这个过程常常称之为Setup,不论在GeForce 256发布前后,这个部分都是显卡的性能衡量的重要指标,也就是&#8220;三角形生成能力&#8221;。● 第四步:渲染/光栅化   首先是处理原始的贴图或者材质素材,简单的而言就是根据需要把贴图处理一下,大多数情况是把贴图斜向做透视,说的明白一些就是把图片变变形状。这个过程中,我们常常提到的材质过滤(Texture Filtering,包括二线型过滤,三线性过滤,各项异性过滤)就是在这里做处理的。特别是各向异形过滤在做高等级处理的时候,消耗资源也相当的大。     应用程序经常需要把纹理贴到几何体上并使texel直接映射到屏幕上的像素。例如,以一个需要在纹理中显示文本的应用程序为例,为了使纹理中的文本能清晰地显示,应用程序需要以某种方式确保映射到几何体上的texel不受纹理过滤的影响。如果无法保证这一点,那么得到的图像通常会是模糊的,如果纹理过滤方法为最近点取样,那么可能会产生粗糙边缘。为了统一像素和纹理取样,并同时支持图像和纹理过滤, Direct3D的像素和纹理取样规则经过了精心定义,但这也使得把纹理中的texel直接映射到屏幕上的像素成为一个相当有意义却又艰难的挑战。&材质过滤   当然,这个过程随着可编程像素单元问世后变得更加复杂,实时的阴影、光照计算,甚至根据法线贴图做虚拟的3D贴图技术,都是Pixel Shader处理的内容,所以Pixel Shader从问世后就成文显卡中对性能影响最大的一个部分。上一代的R580显示芯片提供了多达48个4D Pixel Shader单元,不过在R600中,弹性的统一渲染架构让可进行Pixel Shader处理的单元最大增加到理论上的64个5D Unifide Shader单元。   第二,对三角形进行像素的填充,将处理好的每一个象素填充到三角形中,在具体的执行操作的时候其实几乎是和Pixel Shader对像素的计算同步运行的。处理一些像素,就填充一些,然后再运行Pixel Shader处理一些象素。   这个过程处理的数据也比较多,如果FPS确定、分辨率一定,数据量也就固定了。当然如果括反锯齿的处理,那么需要的像素数据量也会倍增。这部分在当年3D加速芯片问世的时候也是显卡性能的另一个最重要的指标,直接决定了游戏的显示速度。这也是我们常说的&#8220;像素填充率&#8221;指标。&像素填充的测试   在&#8220;隐面消除技术&#8221;出现之前,这个步骤还要进行根据Z轴信息做Z轴判断,看哪个象素在前面才画出来,哪个象素在后面就不画出来。不过这种低效率的做法早已经被淘汰了。&Alpha混合处理前后的对比   最后,是光栅处理以及帧缓冲和输出,这个步骤起的作用是将已经着色的象素进行透明度(Alpha)混合等处理,这个过程就相当于最终决定显示什么图像的最后的操作,所以也非常的重要。在这个部分,显示芯片也需要投入大量的运算,所以显示芯片也使用了多个ROP单元同时运行的设计。   经过ROP处理后的数据就是即将显示到显示器上的画面了,显示卡会将这些数据存入一个帧缓冲后再进行输出,由于帧缓冲的速度非常快,所以我们是感受不到的。   到这里,整个显卡管线的处理过程就算是完成了,接下来就是通过RAMDAC转换为模拟信号,通过D-Sub接口输出到显示器上。或者通过TMDS的运算转换为TMDS信号,通过DVI输出到LCD上。第二章/第二节:革命!R600的统一渲染架构●第二章 第二节:二次革命!R600的统一渲染架构   上面我们介绍了3D图形管线的整个工作过程,那么在这一节中我们将介绍R600的第二代统一渲染架构。●第二章 第二节 第一小节:传统的显示芯片架构   我们已经在第一节中介绍了3D游戏的处理的全部过程,那么在为大家介绍R600的统一渲染架构之前,我们有必要先了解一下传统图形架构的相关知识。   如前一节所述,3D图形管线是一种顺序处理的过程,这种顺序执行的结构就像是一个管道一样,各种数据就像是管道里的水,不断留向下一级,所以人们也就根据这种特性为这种结构的处理单元起了一个更为形象的名字,这就是&#8220;管线&#8221;(Pipeline)的由来。&&传统3D管线   不过在目前的显示芯片中,管线通常有多种类型,比如像素渲染管线、顶点着色管线、像素着色管线。其中,像素渲染管线是一直存在于图形芯片中的,和三角形生成一样成为早期图形核心的标志性功能。目前像素渲染管线演变为ROP单元,也就是说对于目前的GPU,有几个ROP单元就相当与有几条像素渲染管线。   像素着色管线、顶点着色管线是从DirectX8开始被引入,具有可编程性。从此以后像素渲染管线逐渐退居到一个相对次要的地位,顶点着色管线、尤其是像素着色管线成为显卡的决定性因素。● 第二章 第二节 第二小节,传统架构的劣势和不足   我们注意到,在之前的显示芯片设计的时候,显示芯片厂商在设计的时候并不会将顶点管线和象素管线按照相同的数目去做。而是将顶点管线相对放的少一些,多放一些象素渲染管线。   那么显示芯片厂商为什么要这么做呢?答案是:这样的结构和比例是芯片设计厂商根据常见游戏的情况而决定的。   不同的游戏在开发的过程中,设计的游戏复杂度是不同的,有的游戏就非常简单,3D模型也相对简单,这样游戏就可以在更多的玩家的电脑上运行。有的游戏的3D模型和后期特效就非常复杂,这样在保证了游戏的效果的同时就让很多配置不是那么好的玩家无法运行或者运行起来特别慢。   除去游戏复杂度的区别,游戏的开发商和显示芯片厂商还处在一个更加难以解决的怪圈中,这就是,游戏开发商无法在游戏的资源消耗定向上达成一致,所以带给了显示芯片厂商很大的麻烦。   具体来说就是,有的厂商会开发一些3D模型很复杂,顶点数目很多的游戏,这些游戏就需要耗费很大的顶点渲染管线的资源,这类游戏可以把通常场景很复杂,里面的3D模型的细节非常到位。而另一类厂商则会将焦点放在后期的象素级别的特效,这样的好处就是可以给游戏带来更炫的视觉效果。Vertex Shader、Pixel Shader负载不均衡     举例来说,上图可以看到一个典型的例子,第一场景(鲨鱼)主要是由框架以及三角形来构成的,因此对于Vertex Shader的计算量是相当高的,而Pixel Shader计算的部分却非常少,Pixel Shader的管线资源被闲置。&实际中的Vertex Shader、Pixel Shader负载   而第二个例子描绘的是一个复杂水体模拟场景,是由大量的光影特效都是依靠像素处理实现的,因此对于Pixel Shader单元的要求却非常高,而Vertex Shader的操作早已完成,导致了资源的浪费。这两个例子充分的证明了这样一个事实,大部分的应用中,Vertex Shader和Pixel Shader处理不平衡的现象非常普遍,导致部分Shader单元闲置,从而浪费宝贵的资源。这也正式Shader单元分离式设计显示卡的最大弊端之一。 && 在这种情况下,显示芯片厂商只能按照最常见的游戏的情况来设计显示芯片,尽最大能力去满足不同的游戏。   而游戏厂商在设计游戏的时候也不能随心所欲的设计游戏,必须满足显示芯片的性能配比,这样才能在消耗性能最小的情况下达到最好的游戏效果。   这个矛盾一天不得到解决,显示芯片最大的效能就不能充分的得到发挥,这也一直是显示芯片的性能提高的最大瓶颈所在,在这样的架构上,不断的加&#8220;管线&#8221;,提高频率是显示芯片厂商唯一能作的事情。传统显示芯片架构的缺点1 游戏厂商无法按照需要设计游戏,必须向硬件性能妥协。2 显示芯片的利用效率不高,运算单元被闲置的现象经常发生。统一渲染架构的优点   1.动态分配运算单元,提升利用率   在这样的统一渲染架构下,每个处理单元都可以进行Vertex Shader的运算和Pixel Shader的运算,这样一来,无论是怎样的游戏,都能够充分利用显卡的资源,再也不会有一些处理单元闲置,一些处理单元负载过高的情况出现了。   在需要大量顶点运算的游戏中, Unified Shader将被分配去做顶点的运算,而在需要大量后期象素级别特效的时候, Unified Shader将被安排去做Pixel Shader的事情。   2.并行处理,提高利用效率   除了动态分配方面带来的好处,这样的结构还有利于处理并行性的提升,因为这些处理单元可以并行运行,不像原来的串行的结构那样顺序执行。4● 第二章/第二节/第三小节:ATI的第一代统一渲染架构:XENOS   这一节,我们主要回顾下ATI第一代统一渲染架构:用于XBOX360的XENOS的图形核心。&XBOX360   ATI从2003年9月与MICROSOFT签订协议,为新一代游戏主机XBOX360开发图形核心,由此开始,ATI正式着手研发第一代基于统一渲染架构的图形核心:XENOS。XENOS(研发代号C1)的研制工作于2005年底结束,也成为世界上第一个的统一渲染架构的图形核心   Xenos一共由两个图形运算核心构成,主内核拥有2亿3200万晶体管,核心频率为500MHz,拥有48个Unified Shader。Daughter Die附内核拥有1亿晶体管,由NEC 90nm工艺制造,负责处理所有采样运算,包括色彩读写、混合,多重采样AA,Z轴运算等。&Xenos核心Xenos核心的特点如下:(1)是世界上首个基于统一渲染架构的图形核心,可以支持更加优化、效率更高的图形算法。(2)具有硬件线程分派单元,可以充分提高shader单元的利用效率,配合unified shaders使核心的Shader负载更加平衡。(3)具有智能的内嵌式存储器,可以提供高到320M/S的带宽,具有专门的逻辑控制单元以及加速反锯齿、 alpha blending等操作。(4)可以和把数据直接读取或写入到CPU的缓存,更加高效的处理流式指令。(5)Xenos有自己专门的编译器。&点击查看大图● Xenos的统一渲染架构:&Xenos的渲染架构   统一渲染架构,从硬件的角度来说,就是指不再有Vertex、Pixel Shader单元的划分,显示核心不再为Shader类型不同而配置不同类型的Shader单元,在统一渲染架构中这两种Shader单元被统一为Unified Shader,所有的Unified Shader单元都可根据需要需要进行处理,不管和是Pixel Shader类型还是Vertex Shader类型。&Xenos架构图   Xenos具备48个&#8220;4D+1D&#8221;(矢量+标量)的Unified Shader,其ALU单元为SIMD结构,每16个着色单元被合并为一个着色矩阵,调配哪几组Shader单元负责处理何种指令或者进行什么类型的计算,则由一个被称为thread arbiter(线程仲裁器)的部分来控制。不过,在Xenos中每个矩阵内部同一周期内只能执行同一类别的指令,要么Pixel Shader要么是Vertex Shader,虽然不太灵活,但还是实现了统一着色架构,大大提高了Shader单元的负载平衡。   &shader array   Xenos具备三组线程控制器,最大可以支持64个并行的线程,可以充分提高shader单元的利用效率,有效掩盖了着色管线的延迟问题。其统一渲染架构具备三组渲染单元(每个渲染单元具备16个Shader单元,总共具备16x3=48个Shader单元),也就是说每一组渲染单元都将具有一组独立的线程控制器,而更多的仲裁器显然可以更加优化Shader指令的分派,根据ATI的测试表明,在通用图形计算中,Xenos的shader array可以达到95%的利用率。   &&Geometry Tessellation Uni   虽然没有引入Geometry Shader,但是Xenos中增加了一个Geometry Tessellation Unit镶嵌处理单元,可以对输入的三角形,矩形、正方形进行分割处理。不过,Xenos的Tessellation单元为固定功能的单元,不具有可编程性,也可看作是Geometry Shader的一个雏形,而Tessellation后来也成为DirectX 10中引入的Geometry Shader的功能之一。由于没有Geometry Shader,Xenos自身并不能生成多边形。不过Xenos中的MEMEXPORT、CPU streaming 技术可以实现类似于DirectX 10中的stream-out功能,所以,Xenos可以把数据发送给CPU的cache,然后通过复用实现生成多边形的目的。值得一提是MEMEXPORT可以直接和系统存储器交换向量数据,它的引入也提高了Xenos的通用计算性能以及可编程性(即扩展了shader program 的长度)。   同时,Xenos的数据流控制效率更高,ATI还为vertex、pixel计算引入了统一指令集,可以更快速的执行一些复杂的图形算法,如高次表面和全局照明等等。&纹理拾取单元   Xenos还拥有16个纹理拾取单元(过滤纹理单元,带LOD)和16个顶点拾取单元(无过滤/点取样单元)。如果需要还可以增加若干的附属纹理处理单元。所有这些元件都是由纹理处理阵列控制,且每一个纹理单元都有自己的纹理地址处理器。每一个过滤纹理单元都具备双线性取样能力,并可以支持三线性或更高的排列过滤技术(如Anisotropic Filtering,各向异性过滤)。由于XBOX36O采用了是UMA控制器类型,因此整个RAM系统都将支持纹理取样。为了弥补10MB eDRAM在进行反锯齿的时候容量不足的问题,Xenos以Tile Rendering 的方式来实现 FSAA。 此外,Xenos也支持Multiple Render Targets (多目标渲染)、Hierarchical Stencil Buffer(层次模板缓冲)、Alpha-to-Mask等主流技术。&第三章:DirectX发展回顾以及DirectX10详细介绍● 第三章:DirectX发展回顾以及DirectX10详细介绍第一节:技术背景&#8212;&#8212;DirectX 的发展回顾和API相关基本常识。   Microsoft发布的DirectX 10代表了自从可编程Shader出现以来在3D API方面的最巨大的进步,也是自DirectX诞生以来,又一次彻底的重新设计。通过一番脱胎换骨般的重建,DirectX 10展现出一系列非常醒目的新特性,包括高度优化的运行时,强大的Geometry Shader,纹理数组等等;这些特性将引领PC实时三维图形进入一个全新的世界。DirectX总览   在过去的十年中,DirectX已经稳步成为了Microsoft Windows平台上进行游戏开发的首选API。每一代的DirectX都带来对新的图形硬件特性的支持,帮助游戏开发者们视线更惊人的特效。那么我们也就按照DirectX发展的轨迹,以Direct3D为重点,为读者完整回顾下DirectX的辉煌历程。●&& DirectX简介   DirectX是Microsoft开发的基于Windows平台的一组API,它是为高速的实时动画渲染、交互式音乐和环境音效等高要求应用开发服务的。&&DirectX机制&   微软不仅开发了DirectX标准平台,并且根据硬件制造厂商和游戏厂商合作共同更新升级DirectX的标准。硬件制造商按照此标准研发制造更好的产品,游戏开发者根据这套标准开发游戏。也就是说,无论硬件是否支持某种特效,只要DirectX标准中有,游戏开发者就可以把它写到游戏中,当这个游戏在硬件上运行,如果此硬件根据DirectX标准把这个效果做到了此硬件驱动程序中,驱动程序驾驭其硬件算出结果,用户就可以欣赏到此效果。这就是&#8220;硬件设备无关性&#8221;,是DirectX真正意义所在。 &&DirectX架构   通常,Windows对硬件访问的管制非常严格,用通常的办法不易访问,但DirectX通过&#8220;硬件抽象层(HAL)&#8221;给予了开发人员直接访问硬件的能力,HAL不仅解决了硬件及兼容性问题,而且开发人员可以利用它直接访问计算机的某些硬件设备,例如显示设备的直接显存控制和渲染,键盘、鼠标和游戏杆的控制的直接访问控制,音频设备的直接音频混合与输出能力等等,因此开发人员可以充分利用硬件加速将程序的性能优化到一个新的高度,如果目标机器不支持相应的硬件加速,DirectX还可以仿真加速器以提供强大的多媒体环境。DirectX家族包含的成员有Direct3D、DirectDraw、DirectInput、DirectMusic、DirectPlay、DirectSound、DirectDraw、DirectVoice、 DirectVideo和 DirectShow 。●& DirectX发展历程1.DirectX 1.0&&DirectX 1.0   1995年9月,伴随着Windows95的发布,微软推出了DirectX 1.0。其中,来自于ATI的开发团队为DirectX的开发带来了最基础的图形技术。第一代的DirectX很不成功,推出时众多的硬件均不支持,当时基本都采用专业图形API-OpenGL,缺乏硬件的支持成了其进一步扩大影响的最大障碍。DirectX 1.0版本是第一个可以直接对硬件信息进行读取的程序。它提供了更为直接的读取图形硬件的性能以及基本的声音和输入设备功能(函数),使开发的游戏能实现对二维(2D)图像进行加速。这时候的DirectX不包括Direct3D,还处于一个初级阶段。2.DirectX 2.0/2.0aDirectX 2.0   1996年,伴随着Windows95的成功,微软实行了一项新计划,以支持在Windows95上运行更多的3D游戏,目标是扩大市PC领域的游戏市场。于是微软收购了英国的Rendermorphics,Ltd.并得到了名为RealityLab的3D API。经重新整理,微软发布了新的3D API&#8212;&#8212;Direct3D,并整合在DirectX2.0中。   DirectX2.0最大的改善是在Direct Draw,而且为当时风靡全世界的《RedAlert》和《Diablo》所支持,《RedAlert》的Windows版本和《Diablo》都是在DirectX的标准上开发的。除了2D以外,DirectX2.0的D3D部分的雏形基本完成,由于当时3D游戏较少,很多都是基于DOS开发的。世嘉公司的VR战士的PC版本就是基于DirectX2.0开发完成的,虽然效果粗糙了一些,但Direct 3D魅力还是可以感受到的。    在DirectX 2.0中,采用了&#8220;平滑模拟和RGB模拟&#8221;两种模拟方式对三维(3D)图像进行加速计算的。DirectX 2.0同时也采用了更加友好的用户设置程序并更正了应用程序接口的许多问题。从DirectX 2.0开始,整个DirectX的设计架构雏形就已基本完成。但是当时3D游戏程序更多的是基于3DFX的Glide以及ID的QUAKE引擎(OpenGL)开发,支持Direct 3D的游戏很少。3.DirectX 3.0/3.0a   1996年后期,微软发布了DirectX 3.0,DirectX 3.0是DirectX 2.0的简单升级版,它对DirectX 2.0的改动并不多。包括对DirectSound(针对3D声音功能)和DirectPlay(针对游戏/网络)的一些修改和升级。DirectX 3.0集成了较简单的3D效果,还不是很成熟。   在微软不遗余力的推广下,DirectX的魅力被众多软硬件厂商看好,让D3D有了与OpenGL与Glide格斗的资本。从这个版本开始,很多玩家知道了DirectX存在,也是这个时候开始出现了可以支持Direct 3D的加速卡,如Nvidia的Riva128,Intel的I740。   当然微软在Direct3D的推广中并不是一帆风顺,也出现过不少波折。微软当时拒绝了在Window95上支持OpenGL并采取异常手段收回对OpenGL的MCD驱动接口的支持,这个做法导致了很多游戏开发者的反对。QUAKE之父John Carmack公开声明拒绝D3D,著名游戏制作人Chris Hecker在游戏开发杂志上发表了两套API的全面分析,并以微软应放弃D3D为结论。以John Carmack为首的56名首席游戏开发者曾联名至信微软,要求其发行OpenGL MCD驱动。   微软则坚持自己的一贯立场:Direct3D面向通用(high-volume)、高性能应用,认为OpenGL只面向高精度的专业CAD应用。所以微软继续增加对Direct3D的投资,并继续削减对OpenGL的投入。4.DirectX 5.0/5.1/5.2   1997年6月,微软公司跳过了DirectX 4.0,直接推出了DirectX 5.0。DirectX 5.0对Direct3D做出了很大的改动,加入了雾化效果、Alpha混合等3D特效,使3D游戏中的空间感和真实感得以增强,此外还加入了S3的纹理压缩技术。&DirectX 5.0架构   同时,DirectX 5.0在其它各组件方面也有加强,在声卡、游戏控制器方面均做了改进,支持了更多的设备。因此,DirectX发展到DirectX 5.0才真正走向了成熟。此时的DirectX性能完全不逊色于其它3D API,而且大有后来居上之势。   微软的投入也得到了回报,3DFX的GLIDE API开始逐渐失去了过去在游戏开发领域的优势地位,最著名的两个例子就当时称得上是风靡世界的古墓丽影2和极品飞车2,这两个过去本来是GLIDE的御用游戏,都加入了对D3D API的支持,当时著名的Riva 128等非VOODOO显卡也可以通过D3D接口完美的运行游戏。&5.DirectX 6/6.1&DirectX 6   1998年7月,DirectX 6正式发布,它的新特性有:几何形体的灵活顶点格式定义、几何形体的顶点缓冲存储、支持多纹理渲染、自动纹理管理、可选深度缓冲(使用Z Buffer或W Buffer)、通过凹凸环境贴图(ENV BUMP ENVMAP,同级别显卡中只有MATROX的G400支持)为反光面和水波特效提供逐像素的渲染和贴图能力。DirectX 6的3D效果更丰富,而且借助硬件的强大性能,可以渲染出高分辨率下的32位色的图像效果。可以看到,这一时期,DirectX 的技术进步速度也远远超过了GLIDE。6.DirectX 7/7.1   1999年9月,微软推出了DirectX 7.0。DirectX7最大的进步就是支持硬件T&L(Transforms&Lighting),也就是&#8220;坐标转换和光源&#8221;。上一章已经有过介绍,此处不再赘述。&DirectX 7   DirectX 7的其它新特性有:立方体表面的环境贴图、几何渲染、改进的纹理渲染、自动纹理坐标生成、纹理转换、投影纹理和任意面裁剪、D3DX实用库等。   DirectX 7的发布无疑给了GLIDE的致命的一击,DirectX 7提供的特效更丰,D3D函数库的引入方便了开发人员的使用,迅速得到游戏厂商的青睐。为了挽回局面,3DFX甚至还开放GLIDE源代码,但最终GLIDE还是被广大开发人员所离弃。没有了GLIDE的3DFX最终也以被自己的老对手NVIDIA收购而告终。7.DirectX 8.0/8.1   2000年9月,微软正式推出了划时代的DirectX 8 ,将可编程的着色管线概念正式引入到GPU,新的shaders(着色器)数据处理方式也是DirectX 8中最具意义的创新。Shader采用了新的数据处理程序模型,这与旧有的预定义模型是不同的。这种模型中,数据是透过virtual machine以一个类似于带有特殊汇编指令集的pre-arranged(事先安排好)程序进行处理的,程序员可以直接对其进行编程。&DirectX 8   凭借可编程几何管线和可编程像素管线,使用者可以自由的控制几何和像素的代码设计。这对于图形开发者是空前的,他们可以通过基本的着色器,利用开发工具,产生全新的,极具创造力的效果。也正是可编程管线的引入,为GPU发展翻开了新的篇章,GPU开始向SIMD处理器方向发展,凭借强大的并行处理性能,使得GPU开始用有了部分流式处理器特征,逐渐开始被用于工程方面的通用计算。&DirectX 8架构   DirectX 8的其他特性:编写定制的硬件着色器,例如通用纹理组合公式,逐像素光照(凹凸贴图),适用于实现照片(真实)级镜面效果的逐像素环境贴图或者任何其他开发者定义的算法。 支持多重采样渲染 、高性能的粒子系统渲染、 3D空间纹理 、允许范围衰减、包含了用于输出Direct3D蒙皮网格的三维内容创建工具插件,使用了Direct3D多种不同技术,多分辨率层次细节(LOD)几何、索引顶点混合 、扩充了Direct3DX实用库。   2001年底,Microsoft推出了DirectX8.1,主要的改进是增加了PixelShader 1.2/1.3/1.4。在此之前,Microsoft差不多每年推出一个DirectX新版本,到DX8以后,这个速度开始减缓,以后的DirectX9也是如此。主要的原因是自 DirectX 7以后,每一个版本(major release)实际对应于一代新的显示核心,硬件的更新周期要长于软件,所以作为图形API的DirectX要照顾到软件更新的速度。另外,游戏开发的复杂程度也越来越高,开发周期也越来越长,而游戏开发人员并不希望在开发过程中更新API。8.DirectX 9.0/9.0b/9.0c&&DirectX 9.0   2002年底,微软发布DirectX9.0。DirectX 9中Shader的渲染精度已达到浮点精度,为GPU向通用计算领域的发展迈出了决定性的一步。全新的VertexShader(顶点着色引擎)编程将比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的着色指令增加到了1024条。全新高级着色器语言的引入,使得程序员从底层代码中解放出来。&DirectX 9详细规格   PS 2.0具备完全可编程的架构,能对纹理效果即时演算、动态纹理贴图,还不占用显存,理论上对材质贴图的分辨率的精度提高无限多;另外PS1.4只能支持28个硬件指令,同时操作6个材质,而PS2.0却可以支持160个硬件指令,同时操作16个材质数量,新的高精度浮点数据规格可以使用多重纹理贴图,可操作的指令数可以任意长,电影级别的显示效果轻而易举的实现。   VS 2.0通过增加Vertex程序的灵活性,显著的提高了老版本(DirectX8)的VS性能,新的控制指令,可以用通用的程序代替以前专用的单独着色程序,效率提高许多倍;增加循环操作指令,减少工作时间,提高处理效率;扩展着色指令个数,从128个提升到256个。   DirectX9的出现使得OpenGL API在游戏开发领域的应用走到了尾声。目前,除了ID SOFTWARE自家的DOOM、QUAKE系列,基于OpenGL API开发的游戏已经屈指可数了。微软把OpenGL API的应用限制在专业工作站领域的目的已经达到。&DirectX9.0c    DirectX9也有DirectX9.0b和DirectX9.0c两个版本,由于篇幅关系,此处不再详细介绍。第二节 DX10的架构特性 以及带来的好处● 第三章 第二节&DX10的架构特性 以及带来的好处。&   DirectX之所以在广大的开发者中流行,是得益于它的简单易用和丰富的功能特性。然而,DirectX一直被一个主要的问题所困扰,那就是高CPU负载。&   在图形编程API出现之前,三维程序直接向图形硬件发送图形命令来完成绘制工作。虽然这样绘制效率相当高,但是程序中要应对各种不同硬件上的不同命令,这使得开发工作十分困难,且程序中很容易出错。当越来越多不同的图形硬件冒出来的时候,这就成了一件十分不能忍的事。&   于是便出现了像DirectX和OpenGL这样的图形API。它们在图形硬件和应用程序之间架起了一个中间层,这样,应用程序可以使用统一的图形编程代码,而对底层各种硬件的适应,则由图形API来完成。这就将游戏程序员们从与大量的图形硬件交换意见的恶梦中解救出来,使他们能够将精力集中在&#8220;制作伟大的游戏作品&#8221;上面^_^&   但是这样就完美了么?不是的。每次DirectX从应用程序那里接收到一条命令,它就需要先对这条命令进行分析和处理,再向图形硬件发送相对应的硬件命令。由于这个分析和处理的过程是在CPU上完成的,这就意味着每一条3D绘图命令都会带来CPU的负载。这种负载给3D图象带来两个负面影响:限制了画面中可以同时绘制的物体数量;限制了可以在一个场景中使用的独立的特效的数量。这就使得游戏画面中的细节数量受到了很大的限制。而使图像具有真实感的重要因素,偏偏是细节量。&   DirectX 10的一个主要目标就是最大地降低CPU负载。它主要通过三个途径来达到这个目的:第一,修改API核心,使得绘制物体和切换材质特效时的消耗降低;第二,引入新的机制,降低图形运算操作对CPU的依赖性,使更多的运算在GPU中完成;第三,使大量的物体可以通过调用单条DirectX绘制命令进行批量绘制。下面我们就来仔细的看一下这三种方式:&1.降低绘制消耗   第一种方式的一个重要例子就是DirectX 10中对三维数据和绘制命令进行验证过程的修改。所谓三维数据和命令的验证,是指在DirectX绘制图形之前,对传给它的图形数据和绘制命令进行格式和数据完整性的检查,以保证它们被送到图形硬件时不会导致硬件出问题;这是很必要的一步操作,但是不幸的是它会带来很大的性能开销。&&&&&   从上表我们可以很容易的看出,在DirectX 9中,每次绘制一帧画面之前,都会对即将使用的相关数据进行一次验证。而DirectX 10中,仅当这些数据被创建后验证一次。这很明显是可以大大提高游戏进行中的效率的。&2.降低CPU依赖性&   在降低CPU依赖性方面,DirectX 10 引入的三个重要机制就是:纹理阵列(texture arrays)、绘制断言(predicated draw)和数据流输出(stream out)。不要被这三个晦涩的名词吓倒,实际上它们是三个不难理解的机制。&   首先我们来看纹理阵列。传统的DirectX在多张纹理中进行切换的操作是一个很消耗CPU的操作,因为每切换一次,都要调用一次DirectX的API函数。而每绘制一个使用新纹理的物体,就要进行一次这样的切换操作;有时为了实现特殊的材质特效,绘制一个物体时可能就要切换好几次纹理,开销很大。&   所以,以前游戏美工们经常索性将大量的小纹理拼合到一张大的纹理中,通过给不同的三维物体分配这张大纹理的不同局部以期减少纹理切换,提高游戏运行效率。然而,想想也知道,这件事做起来会非常麻烦,而且DirectX 9中对纹理的尺寸的限制是48像素,也就是说,如果要容下更多的小纹理块,可能就得开辟很多张这样的大纹理。&   DirectX 10引入的新的纹理阵列机构,将允许在一个由显卡维护的阵列中容纳512张单独的纹理,而且,在shader程序中可以使用一条新的指令来获取这个阵列中的任意一张纹理。而这种shader指令是运行在GPU中的;这样,就把原来要消耗很多CPU时间的纹理切换工作轻松地转给了GPU。由于纹理一般是直接放在显存中的,所以这件事由同显存一起放在显卡上的GPU来完成真是天经地义,大快人心^_^。现在,在应用程序的层面,只要一开始设置好纹理阵列中的纹理,然后每次绘制一个物体时为它指定一个纹理的索引号,并同物体三维数据一起传递到shader中,就可以放心的让GPU来给物体选纹理了。&   然后说说绘制断言。在一般的三维场景里,很多物体都是完全被别的物体挡在后面的。这时候如果要显卡绘制这些物体就是白费力气。尽管高级的GPU可以通过硬件算法将场景画面中被挡住的像素(注意是像素)预先剔除,但是仍然会有一些处理消耗。例如,一个完全被挡住的复杂的角色模型,它的身上可能有几千个顶点,需要做复杂的骨骼皮肤动画处理、顶点光照运算等等&#8212;&#8212;然而,GPU是在处理完这些顶点之后,并要把这个角色模型一个像素一个像素地画到画面中时,才开始判断每个像素是否需要画&#8212;&#8212;当所有的像素都被剔除了时,之前做的顶点处理也就全白费了-_- || 于是,游戏开发者们想出了一个方法来解决这个问题,这就是绘制断言。&   简言之就是用一个可以代表某个复杂物体的简单物体来判断这个物体是否被全部挡住了&#8212;&#8212;例如用一个可以罩住刚才那个角色的大盒子,当绘制这个盒子时,如果所有的像素都被P掉了,也就说明这个盒子肯定完全看不见,更甭说里边的角色了,也就不用做什么骨骼皮肤运算啦之类的操作了。一个盒子顶多有八个顶点,这学过初中几何的人都知道,相比处理几千个顶点,开销小得多。但是,以前这步中有些部分也是要在CPU中完成的。现在,在DirectX 10中,已经彻彻低低的交由GPU来做了^_^。真是很周到啊。&   最后来看看数据流输出。这是一个DirectX 10中的非常重要的特性,它允许GPU上的Vertex shader或Geometry shader向显存中添加数据!您也许觉得这感觉没什么,然而在以往的vertex shader中是史无前例的。以前的DirectX中,vertex shader只能读取显存中已有的顶点数据;而DirectX 10中引入的新的Geometry shader,不但能读取显存中的顶点数据、几何(点、线段、三角形)数据,还可以生成新的几何数据放回显存。鉴于其重要性,这一机制我们将在第四节:几何Shader以及Stream Out中单独介绍。&3.批量绘制&   在DirectX 9中,对渲染状态的管理一直是一个十分消耗CPU时间的操作。所谓渲染状态,是指显卡进行一次绘制操作时所需要设置的各种数据和参数。例如,要绘制一个人物角色,就需要先设置他的几何模型数据的数据格式、纹理过滤模式、半透明混合模式等等&#8212;&#8212;每设置一项,都要调用一次DirectX API,占用大量CPU时间,极大的约束了渲染的性能。&   为了使这些操作能够批量的进行,DirectX 10中引入了两个新的结构&#8212;&#8212;状态对象(state object)和常量缓冲(constant buffers)。   状态对象就是将以前的零散状态按照功能归结为几个整体,这样,当要设置一系列相关状态时,无需为每一个状态来调用一次DirectX API,只需要调用一次将这些状态统统设置到显卡中去。&   而常量缓冲是另一个十分有意义的机制。在绘制模型前的准备工作中,渲染状态的设置只是一小部分。还是拿绘制人物角色来说,能照亮这个人的光源的颜色、位置、类型、范围等等,都要提前设给显卡;为了通过骨骼来带动他的皮肤做出姿势,还要设置骨骼的位置信息等等&#8212;&#8212;总之是很多东西;而这些东西主要都是通过GPU中的常量寄存器(constant registers)来传递给它的。每个常量寄存器可以存储一个4维的浮点型向量(即四个浮点数)。常量寄存器是游戏程序向GPU输入游戏场景中数据的重要途径。在DirectX 9中,这种常量寄存器的数量是十分有限的,这在下文中的对比图表中我们也可以看到;而且每次更新一个寄存器,都需要调用一次DirectX API函数。而DirectX 10中,使用了常量缓冲(constant buffer)这种结构;在每个constant buffer中都可以容纳4096个常量,而且只需调用一次API就可以更新一大批常量。&&采用constant buffer绘制的大量克隆物体。图片来源:Microsoft DirectX 10 SDK   举一个具体些的例子来对比一下:在以前,如果程序中想在场景里画很多的树木和杂草,可以采用一个类似于&#8220;克隆&#8221;的方法:先做好一棵或几棵树、草的三维模型,然后在画一帧画面时,不停的在不同的位置、方向,用不同的大小为参数,调用DirectX API的绘制函数来画这些模型,就可以画出很多草木来;但是每画一棵,都要设置一大堆参数后调用一次API;这是很耗CPU时间的,所以在以前的游戏中很难有大规模且细节丰富的森林场景。&   而在DirectX 10中,我们可以先把树、草的几个模型设给显卡,然后将所有要画的树木的位置、方向和大小一次性的写入到constant buffer中,然后告诉DirectX&#8212;&#8212;画!显卡就一下把所有的树木和草都一起绘制出来了^_^ 这样,像Far cry 2 那样的游戏,才能营造出十分逼真的森林效果。&&&DX9和DX10的处理器负载情况对比&总结&   总之,DirectX 10降生到这个世上,就是为了带走由于CPU负载过大而给游戏图形效果带来的苦难。通过提前数据验证、纹理阵列、绘制断言、数据流输出、状态对象、常量缓冲等机制,帮助游戏的效果和效率上升到一个新的高度。第三章/第三节:ATI 3Dc功能回顾&● 第三章/第三节:ATI 3Dc功能回顾1.纹理压缩技术   纹理贴图是贴在3D对象上的位图,它可以在不增加3D场景中几何体复杂性的前提下得到逼真的表面细节。纹理贴图可以从木纹、大理石一直到复杂图形如人物、建筑、树木等等。为了模拟现实生活中的场景,必须利用大量细致的纹理贴图来实现。这些纹理贴图会占用大量系统或显存。纹理压缩就是将预备贴到3D模型上的贴图进行数据压缩,从而节省传输、存储它们所占用的显存的带宽、容量。&待压缩的材质   据个例子来说。对于一个最大尺寸是96像素的图片来说。如果按照32位色来存储,这个贴图文件的大小是:96&#215;32=536,870,912bit,也就是67,108,864Byte,合算是67MB。这意味着什么?这意味着256MB的显存也只能放上不到4张贴图。所以纹理压缩显得非常必要了。纹理压缩的原理就是将这些贴图进行压缩后存储进显存,这样就能大大的减小对显存容量的依赖。   最开始的纹理压缩技术并不是微软在DirectX中提出的,这种技术的渊源要追溯到5年以前了。最开始采用纹理压缩技术是S3在OpenGL中首先提出的,最初的名称叫做S3TC。   到了1999年,微软吸纳了这种做法,在他们的DirectX中加入了纹理压缩技术,并且取名为DXTC(DirectX Texture Compression)。&&DXTC   纹理压缩的技术虽然看似简单,但是将压缩后的数据存储进显存并不是终结。重要的是需要用显示芯片把这些压缩后的数据进行解压缩,再经过运算贴图到3D模型上。这个过程就需要显示芯片在硬件上支持了,如果不支持,对于压缩后的数据无法识别,照样不能完成纹理压缩,也不能发挥出纹理压缩的优势。   纹理压缩应用的算法由于涉及硬件复杂度、解压效率、色彩空间变换等等技术问题,要比单纯的压缩图片复杂的多了。就拿我们刚刚提到的DXTC来讲,这其中就包含着5种不同的算法,DXT1一直到DXT5,这5种不同的算法是根据5种不同的情况来使用的。   当然然而,DXTC纹理压缩技术虽然能够带来性能上的提升,但是这种压缩技术却是一种有损压缩,这也就意味着在压缩→存储→解压的过程中势必会对细节有一定的损失,但是这个损失的幅度并不是很大,所以人们也就接受了这种折中的做法。DXTC技术得到了充分而广泛的应用,几乎所有游戏都采用了这种技术。   随着技术的发展,normal mapping技术成为了游戏中逐渐流行的贴图技术,它用很少的多边形就可以表现非常高的表面纹理细节。由于法线贴图RGB通道中存贮的是法线向量,在使用传统的压缩算法的时候就遇到了麻烦。&&法线贴图   法线贴图中每个点的颜色反映的是该点法线的角度,也就是该点的凹凸的信息,如果这些信息丢失了,带来的结果就会糟糕的多&#8212;&#8212;阴影失真是小,甚至可能造成贴图错误,因此,ATI研发了3Dc技术,以解决法线贴图的压缩问题。<FONT color=#.3DC技术原理   首先,3Dc压缩算法是一种基于&#8220;块&#8221;的压缩方式。什么叫做基于&#8220;块&#8221;呢?就是指压缩的过程中将要压缩的内容进行分块,再对每一个单独的&#8220;块&#8221;进行压缩。  在3Dc技术中,ATI选择了将一个法线贴图分成若干个4&#215;4像素(纹素)的块,每个块拥有16个像素。为什么这样分,这其中也是有一定的道理的。&&分块  因为作为一个法线贴图来讲,虽然每个点表示了相应位置的凹凸情况。但是,一个平面的凹凸通常不会太细,即使有小尺寸的凹凸情况,也不会比贴图上4个像素还要小。所以ATI选择了以4&#215;4个像素为一个基本的单元,然后对这个单元内的信息进行压缩。   接下来的步骤就是要进行插值运算了。所谓插值运算,就是在这两个数之间插入一些经处理器生成的数值。具体到3Dc算法中,他们采用了在这最大值和最小值之间等分7份,然后将中间的6个值插进刚刚统计得来的最大值和最小值之间。   有了插值运算的基础,我们接下来就不难理解其中压缩的实现方法了。因为我们在记录数据的时候就能够摒弃原来的16个数了,转而使用两个数(最大值和最小值)就能表示了,两个数自然要比16个数占的空间要小,这也就是压缩的意义所在。&   当然,这个过程中还有特别重要的一点就是将原数据和插值后的数据进行比较,从而让计算机知道那些不是最大值也不是最小值的点,究竟应该取这8个数值中的哪一个。    3Dc技术根据Z轴向量是一个仅仅表示方向的向量的特点,将向量的长度取&#,然后利用公式X2+Y2+Z2=2562,将Z在后期算出。3.3DC技术的优点● 压缩比比较大,体现了压缩的优势   我们看到,3Dc技术对于法线贴图的压缩比是恒定的4:1,这个比例相对于DXTC压缩技术中的6:1的压缩比要小一些,但是对于原数据来讲,能够将原来占用的空间缩减到1/4,压缩的意义也是非常大的。● 压缩失真小   我们看到,在3Dc算法中其实是有一定的失真的,这一点也不必隐晦,因为如果在一个取样范围较大的空间实现压缩的话,失真是在所难免的,这16个点中每一个色彩通道的取值范围均有256个,3Dc算法仅仅使用了8个数来表示这些值,其中就有可能舍掉了248个数。   但是由于我们采用的8个数值在这个空间中是平均分布的,而且每个值都用了和原数据最为接近的一个值来表示,所以每个数值失真的幅度就被控制在了[0,16]的闭区间上。由于实际情况中在一个4&#215;4的块中两个极值的差通常会比较接近,所以实际应用中3Dc的失真的影响也会比较小。● 算法简单,效率高   这个算法的具体操作过程非常简单,这些步骤在通过CPU和显示芯片运算的过程中耗费的资源相对于其他的步骤来讲比较小,所以CPU和显示芯片就能够在更短的时间内完成更多的操作,从而提升了效率,反映在用户的直观感受上就是看到了3D效果但是显示的帧速率并没有太大的降低。   有鉴于3DC技术的出色表现,Microsoft在2004年发布的DirectX 9.0c加入了对ATi 3dc纹理压缩技术的支持,3DC成为得到业界公认的技术标准。3Dc 技术最初是伴随着X800系列显卡问世界,成为DirectX 9.0c标准的压缩技术后,对手NVIDIA也在GeForce 7800 GTX系列显卡上使用了3Dc压缩技术。   不止3DC技术,ATI也率先支持的tesselation功能(上一章介绍),ATI对新技术的追求也是孜孜不倦,为图形核心的发展做出了自己的贡献,也赢得了业内人士的尊敬。3&&● 第三章 第四节&Shader Model 4.0&   当Shader Model 3.0的光彩尚未退去的时候,在DirectX 10中,又引入了Shader Model 4.0。它包含下面几项革新:1 加入了一种新的Shader&#8212;&#8212;Geometry shader&   通过它可以编程操纵几何图元;为vertex、geometry、pixel shader采用了统一的Sahder架构。Geometry shaders是可编程图形流水线的一大进步。它第一次允许由GPU来动态的生成和销毁几何图元数据。通过和新的数据流输出功能配合使用,许多以前无法实时使用的算法现在都可以在GPU中使用了。在下一节,将仔细讨论Geometry shaders。&2 统一的Shader架构&   在DirectX 9中,Pixel shader总是在各个方面落后于vertex shaders,包括常量寄存器个数、可用的指令个数、shader长度等。程序员需要区分对待这两种shader。   而在shader model 4中,这vertex、geometry和pixel shader有着统一的指令集、同样的临时/常量寄存器个数。它们将平等的共享GPU中的所有可用资源。在游戏程序中不用再考虑每种shader自身的限制了。&3 百倍于DirectX 9的可用资源&   对于shader中可用的资源,在Shader model 4.0中比原来有了惊人的扩充。就像早期的程序员们绞尽脑汁的省着用可怜的640k内存一样,在使用以前的DirectX开发游戏的过程中,程序员需要小心翼翼的分配珍贵的shader寄存器资源。寄存器的数量,直接影响着shader程序的复杂度。这和在640k内存的机器上,怎么也不可能写出Microsoft Office这样的大规模软件是同一个道理。而在DirectX 10中,将临时寄存器由原来的32个扩充到了4096个,将常量寄存器由原来的256个扩充到了65536个!而这些并不仅仅是DirectX给出的理论值&#8212;&#8212;在Geforce 8800架构中,它们都是实实在在的在显卡上面的!&&&&4 更多的纹理   在Shader Model 4.0中提供了对纹理阵列(Texture arrays)的支持。在前文中已经对纹理阵列有了比较详细的介绍,在这里只着重介绍一下与shader相关的部分。在每个纹理阵列中,最多可以保存512张同样大小的纹理。而且每张贴图的分辨率被扩展到了92。更大的分辨率意味着纹理中更丰富的细节。在一个shader中能够同时访问的纹理个数被增加到了128个,也就是说在每次执行同一个shader时,可以使用一个纹理阵列的512个纹理中的128个。所以说,在DirectX 10中,纹理的多样性和细节程度将会有大幅的提升。&&&&使用纹理阵列实现细致的纹理&5 更多的渲染目标(Render Target)   所谓渲染目标,就是指GPU可以把画面绘制到的目标,我们可以把它理解为GPU的画布。一般来说,渲染目标被输出到屏幕上,这样我们就能看到画好的画面了;但是有时为了实现一些特效,某些渲染结果并不直接画到屏幕上,而是再返给GPU做进一步的特效处理;而且渲染目标中也不一定是画好的画面的颜色信息。&   根据特效的需要,它们可能是每个物体距离屏幕的远近,或者物体表面上每个像素的方向,或者每个物体表面的温度(为了实现《分裂细胞》中那种热能感应器的效果)&#8230;总之为了实现特效,可以按需要在其中绘制任何信息。为了提高这种情况下的效率,很多新的显卡都支持在同一遍Shader执行结束后,同时把不同的信息绘制到不同的渲染目标中。在DirectX 9中就已经支持这种机制了,但是它约束最多同时向四个渲染目标绘制。而DirectX 10将这个数量提升了一倍。&6 新的HDR颜色格式&   要说这些年来在实时图形界炒得最热的概念,应该是HDR了。它通过采用浮点格式的颜色格式来为纹理、光照等计算提供极大的精度和颜色范围(以前的纹理一般都是采用整数型的颜色格式)。尽管最后显示到屏幕上还是每个颜色通道8位的整数格式,但是以前由于在材质、光照计算中纹理也是用每通道8位的格式来参与计算,所以在显示到画面之前,很多细节就在低精度的运算中丢失了。&   而采用每颜色通道16位浮点数的纹理,能够保证在运算过程中几乎没有颜色细节信息的丢失。另外,采用16位浮点格式的颜色通道,可以表现更大的颜色范围。这些就是HDR的优越性。对于玩家来说,当游戏中的画面罩上一层HDR效果后,立刻显得和真正的照片一样,有朦胧的光晕、细致的高光和十分自然的色调。在玩《极品飞车9》时,充满风格的色调让人有一种置身于电影里的感觉。&&HDR(高动态范围)渲染。图片来源:Futuremark&   然而,采用每个颜色通道16位浮点数的格式,比采用每通道8位的整数格式的纹理要多占据一倍的显存;这给绘制的效率带来了负面的影响。所以在DirectX 10中引入了两个新的HDR格式。第一种是R11G11B10,表示红色和绿色通道用11位浮点数,而蓝色通道采用10位浮点数表示。那么,为什么不都用11位呢?这是为了凑32这个整数。学过计算机的人都知道,当内存中一个数据单元的宽度是32位时,对它的操作效率最高;而且在纹理数据中一般要求每个像素的数据宽度是2的倍数,如2,8,16,32,64等等。又因为人眼对蓝色的敏感度不如对红色和绿色,所以它比其他两个通道少用了一位。&   另外一种格式是采用每通道9位尾数、所有通道共享5位指数的形式(众所周知,在计算机中,浮点数是采用尾数附加指数的形式来表示的),加起来还是32位。这些新的格式使得纹理能够与原来占用同样多的显存空间,避免了大的空间和带宽消耗。同时,为了适合需要精确的科学计算的场合,DirectX 10和Geforce 8800 GTX完全支持每通道32位(4个通道加起来128位)精度的浮点数纹理。&总结&   上面提到的这些扩充和提高,对于图形程序员来说是一件非常爽的事。他们可以摆脱束缚,创建出包含前所未有的细节度的实时游戏场景;对于玩家来说也是一件非常爽的事,因为他们的眼球有得养了。&&3&● 第三章 第五节&几何Shader以及 Stream Out&   直到现在,图形硬件只有在GPU上操作已有数据的能力。顶点着色器(Vertex Shader)和像素着色器(Pixel Shader)都允许程序操作内存中已有的数据。这种开发模型非常成功,因为它在复杂网格蒙皮和对已有像素进行精确计算方面都表现的很出色。但是,这种开发模型不允许在图像处理器上生成新数据。当一些物体在游戏中被动态的创建时(比如新型武器的外形),就需要调用CPU了。可惜现在大多数游戏已经很吃CPU了,游戏进行时动态创建庞大数量新数据的机会就变得微乎其微了。   Shader Model 4.0中引入的几何着色器(Geometry Shader),第一次允许程序在图像处理器中创建新数据。这一革命性的事件使得GPU在系统中的角色由只可处理已有数据的处理器变成了可以以极快速度既可处理又可生成数据的处理器。在以前图形系统上无法实现的复杂算法现如今变成了现实。使用DirectX 10和Geforce 8800 GTX,类似模板阴影(Stencil Shadow)、动态立方体贴图(Dynamic Cube Map)、虚拟位移贴图(Displacement Mapping)等依靠CPU或多通道渲染(Multi-Pass Rendering)的算法效率提升了很多。&&DirectX 10流水线加入了几何着色器和数据流输出(Stream Output),使GPU可以在不用CPU干涉的条件下进行反复运算。&   几何着色器被放在顶点着色器和光栅化阶段(Rasterizer)中间。所谓光栅化,就是一行一行的扫描每个三角形,把它们一个像素一个像素的绘制到画面上。几何着色器把经过顶点着色器处理过的顶点当作输入,对于每个顶点,几何着色器可以生成1024个顶点作为输出。这种生成大量数据的能力叫做数据扩大(Data Amplification)。同样的,几何着色器也可以通过输出更少的顶点来删除顶点,因此,就叫做数据缩小(Data Minimization)。这两个新特性使GPU在改变数据流方面变得异常强大。&1 细分的虚拟位移贴图(Displacement Mapping with Tessellation)&   几何着色器终于让虚拟位移贴图可以在GPU上生成了。虚拟位移贴图是在离线渲染系统中非常流行的一项技术,它可以用一个简单的模型和高度图(Height Map)渲染出非常复杂的模型。高度图是一张用来表示模型上各点高度的灰度图。渲染时,低多边形的模型会被细分成多边形更多的模型,再根据高度图上的信息,把多边形挤出,来表现细节更丰富的模型。&因为在DirectX 9中,GPU无法生成新的数据,低多边形的模型无法被细分,所以只有小部分功能的虚拟位移贴图可以实现出来。现在,使用DirectX 10和R600的强大力量,数以千计的顶点可以凭空创造出来,也就实现了实时渲染中真正的细分的虚拟位移贴图。&2 基于边缘(Adjacency)的新算法&&几何着色器可以处理三种图元:顶点、线和三角形。同样的,它也可以输出这三种图元中的任何一种,虽然每个着色器只能输出一种。在处理线和三角形时,几何着色器有取得边缘信息的能力。使用线和三角形边缘上的顶点,可以实现很多强大的算法。比如,边缘信息可以用来计算卡通渲染和真实毛发渲染的模型轮廓。&&&使用几何着色器的非照片模拟渲染(Non-Photorealistic Rendering - NPR)&3 数据流输出(Stream Output)&&在DirectX 10之前,几何体必须在写入内存之前被光栅化并送入像素着色器(pixel shader)。DirectX 10引入了一个叫做数据流输出(Stream Output)的新特性,它允许数据从顶点着色器或几何着色器中直接被传入帧缓冲内存(Frame Buffer Memory)。这种输出可以被传回渲染流水线重新处理。当几何着色器与数据流输出结合使用时,GPU不仅可以处理新的图形算法,还可以提高一般运算和物理运算的效率。   &在生成、删除数据和数据流输出这些技术的支持下,一个完整的粒子系统就可以独立地在GPU上运行了。粒子在几何着色器中生成,在数据扩大的过程中被扩大与派生。新的粒子被数据流输出到内存,再被传回到顶点着色器制作动画。过了一段时间,它们开始逐渐消失,最后在几何着色器中被销毁。&3● 第三章 第六节&高级渲染语言(HLSL 10)&   DirectX 10& 为以前的DirectX 9中的&#8220;高级着色语言&#8221;(High Level Shading Language )带来了诸多功能强大的新元素。其中包括可以提升常量更新速度的&#8220;常量缓冲器&#8221;(Constant Buffers),提升渲染流程中操作数据的灵活性的&#8220;观念&#8221;(view),为更广泛的算法所准备的&#8220;整形与位指令&#8221;(Integer and Bitwise Instructions),添加了switch语句。&1 常量寄存器(Constant Buffers)&   着色程序同普通的程序一样需要使用常量来定义各种参数,例如光源的位置和颜色,摄像机的位置和投影矩阵以及一些材质的参数(例如反光度)。在整个渲染的过程中,这些常量往往需要频繁的更新,而数以百计的常量的使用以及更新无疑会给CPU带来极大的负载。DirectX 10中新加入的常量缓冲器可以根据他们的使用频率将这些常量分配到指定的缓冲器中并协调的对其进行更新。&   在一个着色程序中DirectX 10支持最多16个常量缓冲器,每一个缓冲器可以存放4096个常量。与其相比DirectX 9实在是少得可怜,因为它在每个着色程序中同时最多只能支持256个常量。&   相比DirectX 9,DirectX 10不仅提供了更多的常量,最主要的是它大幅的提升了常量更新的速度。对那些被分配到同一个缓冲器中的常量,我们只需进行一次操作就可以将它们全部更新完毕,而非单个单个的去更新。&   由于不同的常量更新的时间间隔各异,所以跟据使用的频率来对他们进行组织就可以获得更高的效率。举例来说:摄像机的视矩阵只在每一祯之间发生改变,而像贴图信息这样的材质参数却会在图元切换时发生改变。于是这些常量缓冲器被分成了两个部分&#8212;&#8212;那些每祯更新的常量缓冲器专门存放那些需要在两祯间更新的常数并在两祯间一次把他们全部更新,另外的图元切换更新的常量缓冲器也同理。这样就会将更新常量过程中的一些不必要的工作消除,以便让整个着色器脚本比在DirectX 9中运行的更加顺畅。&2 Views&   在DirectX 9中,着色器(shader)中的数据的类型是被严格划分开的。例如,顶点着色器用到的顶点缓冲器中的数据不能当作贴图的数据来让像素着色器使用。这样就将特定的资源类型同其相对应的渲染流程中的特定步骤紧密地结合了起来,同时限制了资源资源在整个渲染流程中可以使用的范围。&   DirectX 10舍弃了&#8220;严格区分的数据类型&#8221;这一概念。当一段数据被创建,那么DirectX 10所做的仅仅是将其简单的当作内存中的一段比特域(bit field)来对待。如果要想使用这一段没有定义类型的比特域数据就必须通过使用一个&#8220;view&#8221;。 使用&#8220;view&#8221;,相同的一段数据就可以有各种各样的方法来读取。DirectX 10支持对同一段资源在同时使用两个&#8220;view&#8221;。&   通过这种多重&#8220;view&#8221;的手段,就可以在整个渲染流程的不同部分以不同目的使用同一段数据。例如:我们可以通过像素着色器将一段几何数据渲染到一张纹理上,之后顶点着色器通过一个&#8220;view&#8221;将这张纹理视为一个顶点缓冲器并将其中的数据作为几何数据渲染。&#8220;view&#8221;通过在整个渲染流程中的不同步骤重复使用同一段数据为&#8220;数据处理&#8221;带来了更大的灵活性,帮助开发者实现更多更有创意更精彩的特效。&3 整形与位运算指令 (Integer and Bitwise Instructions)&   在新的高级着色器语言中添加了&#8220;整形与位指令&#8221;。这样把&#8220;整形与位运算指令&#8221;的操作加入其基础运算函数的好处在于帮助一些算法在GPU上的实现。开发者终于可以直接使用整形而非从浮点中强转来计算出准确的答案。数组的索引号现在可以轻松的计算出来。GPU无整形运算的时代终于被终结了。这将为shader程序的开发带来很大的便利。4 Switch 语句(Switch Statement)&   终于,HLSL 10可以支持switch语句了!!!这将大幅简化那些有着大量判断(分支)的着色器脚本的编码。一种用法就是建立一个&#8220;航母级的着色器(shader)程序&#8221;&#8212;&#8212;包含了大量的小型着色器程序并且自身体形巨大的着色器程序。在这个&#8220;航母级的着色器程序&#8221;,我们可以通过设定一个材质ID在switch语句中判断来轻松的在渲染同一个图元时切换不同的特效。也就是说,现在一个军队中的每个士兵身上都可以拥有各自不同的特效了。&3● 第三章 第七节&其他改进● 第三章 第七节 第一小节 alpha to coverage&   在游戏中,经常使用带有半透明信息纹理的多边形模型来模拟复杂的物体,例如,草、树叶、铁丝网等。如果使用真正的模型,一颗边缘参差不齐的小草可能就要消耗掉几百个多边形;然而采用透明纹理,可以只用2~3个多边形就解决了。&&半透明纹理示意&#8212;&#8212;一片树叶&   然而,当使用这种有半透明信息的纹理时候,它的不透明和透明部分的边界线上,常常会出现难看的锯齿。采用半透明混合技术可以解决这个问题,但是它需要把场景中所有这类物体按照由远到近的顺序来绘制,才能保证它们的遮挡关系是正确的&#8212;&#8212;这是十分消耗CPU时间的,所以很不可取。在以前,alpha测试和混合简直就是图形程序员的噩梦。   在DirectX 10中,使用了一种新的技术叫做Alpha to coverage。使用这种技术,在透明和不透明交界处的纹理像素会被进行多极取样(Multi-sample),达到抗锯齿的效果。这就在不引入大的性能开销的情况下华丽的解决了这个问题^_^ 室外场景的游戏将大大受益于这种技术。树叶、铁丝网、草的边缘将会更加柔和、圆滑。&&   使用Alpha to coverage技术,叶片的边缘更加平滑。&● 第三章 第七节 第二小节 shadow map filtering&   阴影图(Shadow map)技术已经逐渐成为了渲染真实感阴影的流行技术。在包括《战争机器》、《分裂细胞:双重特工》、《Ghost Recon》、《刺客信条》等的各大次世代游戏中都能看到它的身影。然而,由于shadow map的尺寸限制,用它实现的阴影边缘往往有明显的锯齿。在DirectX 10中,提供了对shadow map进行过滤的功能的正式支持。经过过滤后,阴影的边缘将会变得更加柔和。&● 第三章 第八节&游戏效果&   DirectX 10为游戏开发者提供了很多新的特性,采用这些特性可以用来开发大量的次世代图形效果。然而,由于这是基于强大、灵活的可编程特性基础上的,所以很难简单的指出这些特性都带来了哪些效果。实际上,很多图形效果都是对这些特性进行综合运用的结果。在这一部分,让我们来仔细的看一下几种次世代特效技术,感受一下新的DirectX 10特性在其中起到的作用。&● 第三章 第八节 第一小节 次世代Instancing技术&   在上文中,我们已经用这张图来说明DirectX 10的常量缓冲器特性。其实,这里采用的技术有一个学名叫做Instancing,大意就是通过一个或几个模型来复制出它们的很多实例,实现满山遍野的树木、敌兵那样的效果。这种技术在DirectX 9时代就已经出现了,但是有很多的限制,例如模型不能有动画,所有的模型实例必须使用同一张纹理贴图和同一种材质效果,等等。这就给这项技术带来很多遗憾的地方&#8212;&#8212;玩家肯定不喜欢看见游戏里满山遍野的敌人或树木都长成一个模样,或者只有那么几种模样。在DirectX 10中,通过常量缓冲器、纹理阵列、动态shader执行分支等特性,将Instancing技术从这些局限中解放了出来。模型的实例没必要使用同一张纹理贴图;它们可以通过自己本身的纹理来从纹理阵列中取出各自的纹理;它们甚至可以有不同的特效&#8212;&#8212;程序员可以写一个包含很多特效的&#8220;超级&#8221;shader,然后为每个模型实例运用这个shader程序的不同执行分支部分,从而给不同的模型赋以不同的材质特效。甚至连为每个模型实例使用骨骼蒙皮动画这种需要大量变换矩阵操作的问题,在16&#215;4096常量寄存器的强大攻势下都可以迎刃而解。&   &#8220;克隆人&#8221;的时代已经结束了^_^ 通过DirectX 10的高级特性,Instancing将允许每个模型实例拥有它的个性:纹理贴图,pixel和vertex shader,以及动作动画。每个实例都将会有它自己的生命。&&● 第三章 第八节 第二小节 基于象素级别的位移贴图技术&   在介绍这项技术之前,首先请允许我对工作在坐落于北京海淀区知春路的微软亚洲研究院/工程院的工程师们致以崇高的敬意\\ ^ ^ /。因为这项技术的实现方法,是由这些中国的工程师们研究、创造出来的。&&实时每像素位移贴图。图象来源:Microsoft DirectX SDK。&   位移贴图技术,用过3DS MAX的读者可能不会感到陌生。在3DS MAX中,这种技术有时也被翻译成&#8220;置换贴图&#8221;,其核心思想就是在制作三维模型时采用比较低的细节,然后给这个模型赋上一张表面高度图;在渲染时,会根据这张高度图来修改模型的表面,使它们隆起或凹陷&#8212;&#8212;这样,就可以十分省力的给模型表面加上真正的凹凸不平的效果。毕竟,在3DS MAX里一个点一个点的修改模型表面来添加凹凸细节,要比直接拿Photoshop绘制一张高度图麻烦的多。&   位移贴图要比单纯的normal map技术的凹凸贴图逼真&#8212;&#8212;因为它是真正的将模型的表面进行修改,抬高或降低它们。然而,由于它需要在渲染时将模型表面进行细分,即将原来的一个多边形分成大量的小多边形,这样才能有足够多的顶点来进行移动。这在原来的DirectX中是不能实现的,因为那时没有geometry shader,不能动态生成多边形图元,也就不能实现动态的多边形细分。即使在有了geometry shader以后,将多边形细分也是一个消耗性能很大的操作。&   然而,微软亚洲工程院/研究院的工程师们另辟蹊径,创造了一种新的每像素位移贴图技术。它的大致过程是,将简单模型表面的三角形向上拉伸,成为一个三棱台,这样它就具有了一定的体积;而它的高度,就是模型表面根据高度图进行位移后能达到的最大高度。然后在填充三角形的每个像素时,通过将观察者的视线和这个三棱台进行求交,得到一个相对于这个三棱台的交线段。&   由于高度图是相对于这个三棱台的,只有同样使用相对于这个三棱台的交线段,才能正确的求出线段和高度图所代表的表面高度的交点。然后再通过这个交点来计算应该把颜色纹理中的哪个点绘制到屏幕上。在这里只是简单介绍了一下这种技术的大体原理,实际的实现算法比这个要复杂,因为需要克服各种各样的问题。&&每像素位移贴图原理示意。图片来源:Microsoft DirectX SDK&&集众家之长,R600架构总览第四章 R600核心架构解析第四章\\第一节 集众家之长,R600架构总览&   就如同G80革命性的架构带给我们的震撼一样,R600的图形架构也让人为之一怔,空前复杂和庞大的规模令人眼花缭乱!DirectX 10、Shader Mode 4.0、统一渲染架构,再加上ATI各种创新的技术和功能,R600的核心架构发生了巨大的变化,但我们依稀也能看出其架构与上代产品有几分相似之处:&● Xbox360图形芯片Xenos,为R600的研发积累了宝贵的经验&&  通过仔细对比可以发现,R600的整体架构与Xenos比较相似。早在05年ATI就首次在Xenos芯片上实现了统一渲染架构,只不过是用在了微软Xbox360游戏机中,我们可以把它看作是DX9规格的统一渲染GPU。&   Xenos不仅是首款采用统一渲染架构的GPU,同时Xenos还率先采用了符合DX10规范的Stream Out(数据流输出)技术。Xenos芯片超前的技术规格见证了ATI和Microsoft亲密无间的合作关系,如今统一渲染架构、高效的ALU利用率、Stream Out等技术被完整地保留了下来,经过改进和优化之后被R600所采用。&● R580架构的精髓被沿用在了R600之上&&   Xenos和R520几乎是同一时代的产品,正是因为ATI的双线操作才导致了桌面芯片R520的延期,虽然R520是一款不成熟的产品,但其架构设计思路是非常优秀的,其继承者R580一举帮助ATI夺回性能之王的宝座,R5XX架构在经历了风风雨雨之后终于证明了自己的实力,它在Shader Model 3.0多执行运算体系、超标量动态分歧技术、可编程显存控制器、HDR+AA等方面无不是青出于蓝而胜于蓝,R580是毫无疑问的DX9C最强者!&   R600的架构论证和底层设计从2003年就已经开始,其最初的规划就是R5XX和Xenos的结合体,R5XX久经考验的快速动态分歧技术、流处理运算、全速联合纹理缓存和Fetch4阴影加速技术都被继承下来。R600集两者之长并且加入Shader Model 4.0规范,改进显存控制器,更令人惊讶的是超出DX10规范的Tessellator技术(DX10.1?),R600的确是一款专为新一代游戏而生的GPU!&R600架构分块介绍&   R5XX是首次集成动态分歧预测超线程分配处理器的GPU,而Xenos是首款采用统一渲染架构的GPU,如果将这两款GPU的精华部分有机的结合在一块,那么R600的架构邹形就展现在了我们面前。&   R600核心架构主要特点包括:&   大规模超标量着色器;   新一代超线程分配处理器;   第二代统一渲染架构;   完整支持DX10,包括SM4.0和几何着色;   全新的显存控制器,带宽吞吐量大增。&   下面就对R600的核心架构进行全方位分析介绍。&第四章\\第二节 R600架构分块介绍&&   R600的架构可以拆分为以下几个模块:Command Processor(指令处理器)Setup Engine(装配引擎)Ultra-Threaded Dispatch Processor(超线程分配处理器)Stream Processing Units(流处理器)Texture Units(纹理单元及缓存)Cache & Buffer(缓存及缓冲区)Shader Export&& Render Back-Ends(像素输出部分)Memory Control(显存控制器)第四章\\第三节 Command Processor(指令处理器)   Command Processor负责从PCI-E总线发出或者接受指令流,让GPU在驱动程序给定的时间间隔中完成恒定数据流操作,此过程需要通过Parallel DMA Engine,调用系统内存或者是本地显存的相关资源。   DMA引擎能够最大化PCI-E总线带宽利用率,确保GPU和CPU并行工作,消除显示系统的瓶颈。   R600改进的指令处理器能够降低30%以上的CPU占用率,尤其是在处理大批量小数据流时的效果尤为显著,由此可以将CPU编译驱动指令的负载降低到5%-10%,让CPU可以在复杂的3D游戏中发挥更大的作用。Setup Engine(装配引擎)第四章\\第四节 Setup Engine(装配引擎)   Setup,通常这个词用于程序安装,在这里我们可以理解为GPU负责指令分配和安装的模块,主要负责给流处理器将要执行的指令准备数据,我们将其称之为装配引擎。&&R600的Setup Engine&   我们可以看到R600的Setup Engine分为Vertex Assembler(顶点装配器)、Geometry Assembler(几何装配器)、Scan Converter/Rasterizer(扫描转换/光栅化)、Interpolators(排序器),另外在顶点装配器上方还有一个特殊的Programmable Tessellator(可编程拆嵌模块)。&   以往GPU的Setup Engine位于Vertex Shader(顶点着色器)之后Pixel Shader(像素着色器)之前,也就是说指令首先经过顶点建模之后才进入Setup Engine进行三角形重组,生成像素、纹理、颜色值等信息,然后交给Pixel Shader处理。&   而R600是统一渲染架构&DX10,因此数据通过Command Processor之后直接进入Setup Engine,此时Setup Engine还必须承担部分顶点引擎的工作、并且生成几何着色

我要回帖

更多关于 mips 32bit alu 的文章

 

随机推荐