» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


 16 12
发新话题
打印

关于DX10的一点杂七杂八

经常看到有人拿Crysis的图片说明DX10是如何如何高于现有的API,加上R版在另外一个帖子里提了一句,就耐下性子打几个字说一下吧

   首先,说说驱动和API的关系吧。以windows举例,毕竟这是我们接触最多的系统。为了在windows上应用,微软制定了一个驱动的框架标准,硬件厂商必须提供符合这个标准的接口才能被调用。然后在这个接口的基础上,有了面向开发的API,比如OpenGL和DX。这些API通过调用驱动的接口来完成描画功能。可见,DX,OGL之类其实都是在调用硬件厂商提供的功能来做事情的,API只是一个表象。这也回答了另外一个常见的OpenGL和DX谁好谁差的问题,其实两者没有本质区别,只是看驱动提供的功能如何。当然,实际情况比这里说的要复杂很多,不是只有这两层关系这么简单。在硬件到API之间有好几层,OpenGL和DX通往硬件的流程也不完全相同。所以会出现有的游戏在OGL和DX上的画面看起来不一样的情况,硬件厂商应该为这种情况负责,比方说ATI一向对OpenGL支持很差,引用某人的话“ATI用它拙劣的OpenGL支持和巨大的产能一步一步的把OpenGL推向死亡”。当我们看到某些游戏在OGL上显示很奇怪的东西的时候,去怪硬件厂商吧,OGL只是叫驱动去做它应该做的事情,至于驱动怎么完成的,OpenGL无能为力。

   再说说硬件做的事。从有3D加速卡以来,硬件做的事情就差不多:扔给它一大堆顶点,n张贴图,硬件吐出一大堆贴好图的三角形。有了vertex shader,硬件可以对每个顶点进行一些传统流水线不提供的计算,有了pixel pixel,硬件可以在三角形的顶点之间的过渡部分做一些特定计算,而不像传统的只能做个线性过渡。即使有了DX10,硬件做的也是差不多同样类型的事情,没有什么天翻地覆的变化。

   说到DX10了。DX10力推的是它的统一渲染架构(Unified Architecture),它想做的是什么样的事情呢?现有的渲染架构里,vertex计算单元和pixel计算单元是分开的。而在实际情况下,两者的负荷是很不平衡的。举例:一个特写镜头,它包含的顶点计算远比pixel计算要少。一个远景,它有大量的顶点,相比来说顶点计算量占的比例就大大提高了(一般情况顶点计算不会超过pixel计算)。为了达到更高的效率,人们想出了一招:能不能共享这些计算单元,让负荷重的计算多用几个?于是DX10在API层面上去掉了vertex/pixel shader的区分,统一称为Geometry(几何)shader。但是,不要忘了一开始我们说的,DX10还是一个驱动功能的调用者,至于驱动怎么执行,那要看硬件怎么干了。统一架构的着重点是一个,速度。而速度这个东西还有很多其他方法可以达到。而速度并不能给你以前做不到的效果,只是做的更快一点。说到这个,不得不说一点我个人的看法。我一向不把更快视为一个API的不同的“效果”,因为它并没有做什么不同的计算,而且最终是由硬件决定的。硬件让API更快,不是反过来的。

   OK,我们还有那至今没有什么东西能完全支持的Shader Model4.0。确实,SM4.0有比以前更多的指令,更多的寄存器,更大的长度。但是用它来算的效果(这里我开始用效果这个词了)有什么本质区别吗? 还是用normalmap做凹凸,高光等等,我们用在游戏里的数学模型还是没有变。更快,更灵活,但数学还是那些数学。不得不承认,有些效果因为以前的限制做不出来,但可以说,我们看到的绝大部分的计算还是和以前一样。

   那么是什么让如今次时代的画面和以前看起来有那么大的区别呢?除了normalmap这些细节以外,有一点非常重要的,统一光照。在次时代的游戏里,我们可以看到对人物的光照造成了遮蔽了场景,也遮蔽了人物自己。这在以往是难以看到的。在Crysis里,几乎所有的东西都被照射,几乎所有的东西都投下阴影,而且覆盖在了它应该在的地方。实现这个东西不是DX10的功能,而是程序员的功劳。程序员利用DX9,XNA也能做同样的事情。DX10只是一个图形API,它只知道画它当前要画的东西,如何对其他东西产生影响,这是开发人员的事。Crysis向来自豪的物理效果?那跟DX更没关系了,DX不管一栋房子是怎么倒下去的。

   先说这么多,手酸。。。我同意DX10能做出一些好效果,但不是所有都是DX10的功劳。Crysis之所以总是和DX10联系在一起,不是因为DX10让Crysis做出了多少惊人的东西,而是Crysis做出了一些惊人的东西,而它是至今最著名的一个用DX10的游戏。可以说,Crysis让DX10更著名。


本帖最近评分记录

TOP

我没看错你~加分高亮

另外,随着 Vista 和 DX10的到来,相信稍微有些落后“次世代”步伐的PC游戏也会进入新的一轮发展时期

这贴希望能对关心PC游戏的人有所帮助

[ 本帖最后由 RestlessDream 于 2007-1-16 22:27 编辑 ]



TOP

DX10很强


TOP

存在几点问题哦……
主要革命点
1:驱动模型让DX调用更加高效
2:不是去掉VS,PS,而是变成VS-GS-PS结构
3:IA->VS->GS->streamout可以构成循环
还有其他的……

TOP

没有研究过,至今还用DX7。TNT2显卡

TOP

引用:
原帖由 eos 于 2007-1-16 22:40 发表
没有研究过,至今还用DX7。TNT2显卡
TNT2当年辉煌过

TOP

速度还是很重要的,一个虚拟世界的感觉,跟这个世界的复杂度也有直接关系
复杂包括很多特殊效果,也包括很多简单效果的重复物体,在现阶段还不适合用放大镜观察虚拟物体细节的时候,简单而又经常重复的物体就变的很重要了,数量直接影响画面质量。草、树、砖头瓦片之类的就是这种东西,还有远景、、、我倒是觉得现阶段,已有特效已经很不错了,能大幅度提升处理速度来支持这些特效的同时多重使用的量,才是很关键的。
这样的话游戏就会多些室外的大场景,整个虚拟世界也会丰富很多。在这一层上,现在提升处理速度的意义远远大于增加特效

TOP

我想知道TNT2能不能超?

TOP

引用:
原帖由 hourousha 于 2007-1-16 22:30 发表
存在几点问题哦……
主要革命点
1:驱动模型让DX调用更加高效
2:不是去掉VS,PS,而是变成VS-GS-PS结构
3:IA->VS->GS->streamout可以构成循环
还有其他的……
嗯,这1和3确实有,1因为就是提高效率所以没提,3因为当时没看到什么具体应用的例子所以印象不深,给忘了。3应该是一个非常有潜力的变化,不过。。。谁能给个例子来看看?

2是记错了,不好意思,当初review里那些图片太突出Geometry Shader了

谢谢指正

[ 本帖最后由 Nothing 于 2007-1-17 10:46 编辑 ]

TOP

裁缝:你真识货,这个贴的科技成分很高的
地残:有多高?
裁缝:三四楼那么高~

TOP

似乎图形又处在一个突破的边缘上,PARALLAX mapping这类的拟光线跟踪算法开始应用,体积贴图逐渐进入实用化可以开始表现光线穿过空气的效果等等。。。不过单看Crysis,它的开发人员把一堆东西整合在一起让它达到一个目前看起来满惊人的效果,只是DX10不是主要的功臣

TOP

引用:
原帖由 Nothing 于 2007-1-17 10:29 发表


嗯,这1和3确实有,1因为就是提高效率所以没提,3因为当时没看到什么具体应用的例子所以印象不深,给忘了。3应该是一个非常有潜力的变化,不过。。。谁能给个例子来看看?

2是记错了,不好意思,当初rev ...
至于3的典型应用,不妨参考D3D10 SDK中的‘ParticlesGS’和‘PipesGS’

如果不包含GS,IA->VS->streamout这种简化(这个简化程度还真大……)的情况,DX9也不是不可以做,不过变成VB->VS->PS->VTF(NV4x情况)或者VB->VS->PS->R2VB(R3xx情况,效率比VTF的高很多哦)。但是效率显然比DX10差。这种情况的典型应用应该很熟悉了哦,这是用GPU处理物理的最标准形式。
1那点我提到主要是我对长久以来的‘OGL比DX(特指PC上的,console上的不存在这种情况)过程调用高效’耿耿于怀咯。呵呵……
还有一点,对程序员是福音,就是取消了device_cap,换句话说,只要支持DX10的硬件,那么功能上就不存在差别,不像DX10以前或者更灾难的OGL一样,非得针对不同IHV的功能差异制定不同的render path,这种情况真是让人受够了……

TOP

引用:
原帖由 hourousha 于 2007-1-17 11:56 发表

至于3的典型应用,不妨参考D3D10 SDK中的‘ParticlesGS’和‘PipesGS’

如果不包含GS,IA->VS->streamout这种简化(这个简化程度还真大……)的情况,DX9也不是不可以做,不过变成VB->VS->PS- ...
GS上的物理怎么做比较复杂情况下的碰撞呢?粒子对一个平面碰撞还是太简单了啊,不见得实用。我倒是期望这种可以闭环的渲染能做一些复杂的效果,比方说毛发?。。。

dx的api call效率一直低下得匪夷所思,他们这次终于想通了,不容易啊,呵呵。

取消device cap对程序员是好事,不过什么时候硬件能达到这个要求阿?让游戏在所有硬件上跑得一样一直是程序员的一个噩梦

TOP

毛发?毛发还是用障眼法实现好了……(我认为毛发代表比较短而密的那种)
头发的话,还是不用指望很快,比如nv的luna demo……,对了humus曾经用r2vb写了个hair demo
GS的主要应用在于根据图元的拓扑关系产生/消灭vertex。所以,只做头发是不是屈才了?至少也得是类似'PipesGS'里的那种东西吧,呵呵……

TOP

DX10内部支持更大的更多位的浮点运算,这是DX9做不到的。而这些可以让图像更加精细些!期待DX10及支持它的游戏!

TOP

 16 12
发新话题
     
官方公众号及微博