Board logo

标题: 请教3个3D的基础问题! [打印本页]

作者: cf3b5    时间: 2007-6-21 12:07     标题: 请教3个3D的基础问题!

虽然是做开发,但是对3D完全不懂,请教两个问题!

先是一些根据自己得计算机知识推断出来的一些概念,不知道有没有错!

1)任何计算机都能进行任何得3D效果运算,差别只是速度,而且这个差别可能是非常非常大得!任何3D画面其实都是数字运算后在2D上得投影,因此只要程序人员足够强,把任何投影得公式都用最简单得加减乘除等写在程序里面,程序就能运算得出效果,但是问题是速度差距会极其巨大,某些CPU上1秒得结果在另外一些机器上面可能需要几天!

2)3D显卡其实就是提供对3D运算效果得相关公式提供一个快捷运算。理论上来说,计算机得运算只有0,1二进制,而且运算只能做加法,别的运算其实都是依靠二进制得加法转换而来。但是实际上在运算一些固定公式得时候,计算机可以通过一些位移,异或操作等大幅减少指令数,使得效率能够成百上千得提高。但是这样设计了得cpu就失去了通用性!

3)优化过的CPU在处理某些数据上会远远超过没有优化过的CPU!

4)但是在CPU的方面的优化始终有限,不可能优化的非常彻底。因为太彻底,公式就缺少灵活性,比如某效果运算的公式可能都是由几个标准运算公式组成的,如果把cpu直接设计成运算这个效果的公式,这样在别的公式上运算效果就很差,因此设计上就设计成只对3D运算上的常用的标准运算进行优化。

5)在硬件方面对一些标准的3D运算公式进行了优化,但是对于开发来说,还是显得比较复杂,因此类似与DX,OpenGl这种3D的SDK就是在这个基础上对优化的3D运算公式在进行封装、优化。封装成具体3D效果供游戏开发者调用!

问题1,其实常说的某某显卡支持某效果,其实是不是说这个芯片针对这个效果的一些运算进行了优化?
问题2,某某SDK支持某效果,是不是说这个SDK优化封装了这个效果而已?


tg做游戏开发的多,麻烦指教!


问题3,如果上述推断基本成立的话,那么根据一般CPU的指令周期来判断(频率=指令周期/秒,好像是把,不知道没有记错?)
而一个操作至少也需要一个指令周期,而大部分显卡的频率都要远低于cpu的频率!
但是在3D的执行效率上却远远高于cpu,是否可以判断说现在的通用cpu实际上效率其实低的吓人?


[ 本帖最后由 cf3b5 于 2007-6-21 15:07 编辑 ]
作者: aweiwei    时间: 2007-6-21 12:13

TG喷子多,真正的业内少。
作者: Nothing    时间: 2007-6-21 12:37

问题2,某某SDK支持某效果,是不是说这个SDK优化封装了这个效果而已?

SDK里面没有封装效果这种东西,只是可以调用一系列完成这个效果需要的功能,如何调用还是需要开发者自己来。不同的sdk功能差别其实非常的小,目前在统一渲染这种新架构上面dx10略为领先一步
作者: 老刘吃嫩草    时间: 2007-6-21 12:45

我学过3DMAX,不同臆第一句,靠CPU来做3D还是省省吧,我做一把牙刷,显卡是7300(PS3水准的),把牙刷上的毛都用多边型,也就2百来根吧,一根毛8个面,再加上喧染,速度就变得慢了很多.
作者: 123321456    时间: 2007-6-21 12:46

1、不是。
2、不是。

简单例子:
1、fc的6502不能处理32位浮点运算。
2、excel不能解微分方程,matlab可以。
作者: hourousha    时间: 2007-6-21 12:50

GPU不只是一个专门化的'运算'单元集合。'存取'单元的专门化同样是极其重要的一环。
某显卡支持某效果,代表显卡有实现某种功能的能力,比如支持shdaer x.x。代表有能力执行shader x.x中的指令。不支持,则代表无法执行,不是优不优化,速度快不快的关系;GPU不是一个和CPU一样完全flexible的东西。包括它的功能单元和运算单元。不过对于支持SM2.0的GPU,由于算术部分相对完整,所以一部分只和计算关系密切的功能(比如某种格式的blending)可以用shader实现。

[ 本帖最后由 hourousha 于 2007-6-21 12:53 编辑 ]
作者: cc0128    时间: 2007-6-21 12:52

引用:
原帖由 123321456 于 2007-6-21 12:46 发表

1、fc的6502不能处理32位浮点运算。
问下这个可以软件的方法解决么?

不是说原来INTEL的64位是32位2次计算得出来的,然后被AMD说是伪64位么。。
作者: firesun    时间: 2007-6-21 12:53

6502用高低位来慢慢算,用定点数模拟浮点数,也完全不能处理32位浮点么?
作者: Jonsoncao    时间: 2007-6-21 12:53

引用:
原帖由 123321456 于 2007-6-21 12:46 发表
1、不是。
2、不是。

简单例子:
1、fc的6502不能处理32位浮点运算。
2、excel不能解微分方程,matlab可以。
excel可以用数值算法解,也就是把微分方程变成差分之后设立节点组成巨大的稀疏矩阵,再用excel的solver

不过直接写code的确不行
作者: reg-neo    时间: 2007-6-21 12:57

动画电影,就是GC,由于用到的特效太多,都是用CPU渲染的,优化少数指令的GPU根本用不上
作者: cf3b5    时间: 2007-6-21 12:58

引用:
原帖由 hourousha 于 2007-6-21 12:50 发表
GPU不只是一个专门化的'运算'单元集合。'存取'单元的专门化同样是极其重要的一环。
某显卡支持某效果,代表显卡有实现某种功能的能力,比如支持shdaer x.x。代表有能力执行shader x.x中的指令。不支持,则代表 ...
我说的优化当然包括存取的优化,某些情况下多一个寄存器就可以节省很多指令!
基本上我的意思是!

GPU实际上是CPU的优化版,而非功能增加版!
虽然有些运算cpu也能做,但是几乎不具备任何实用价值,比如GPU1秒钟搞掂的,CPU可能要1个钟头~
但是前提是,CPU也能算!

回答麻烦加上原因~
作者: hourousha    时间: 2007-6-21 13:07

如果你的意思是:GPU干的事,CPU也能办得到。那当然没错。Quake还有software renderer呢。
回答加上原因?什么原因?
作者: cf3b5    时间: 2007-6-21 13:11

引用:
原帖由 hourousha 于 2007-6-21 13:07 发表
如果你的意思是:GPU干的事,CPU也能办得到。那当然没错。Quake还有software renderer呢。
回答加上原因?什么原因?
原因那个不是指你!
我是不想有些人随便回答个是与不是就算~
:D
作者: 123321456    时间: 2007-6-21 13:24

引用:
原帖由 cc0128 于 2007-6-21 12:52 发表

问下这个可以软件的方法解决么?

不是说原来INTEL的64位是32位2次计算得出来的,然后被AMD说是伪64位么。。
对于6502来说它算的是不是32位浮点?
显卡也是一样,我拿预渲染的dx10画面当贴图,给dx7显卡做个游戏,是不是表示dx7卡支持dx10特效?
作者: 123321456    时间: 2007-6-21 13:31

引用:
原帖由 firesun 于 2007-6-21 12:53 发表
6502用高低位来慢慢算,用定点数模拟浮点数,也完全不能处理32位浮点么?
lz问的是
引用:
原帖由 cf3b5 于 2007-6-21 12:07 发表
问题1,其实常说的某某显卡支持某效果,其实是不是说这个芯片针对这个效果的一些运算进行了优化?
我的回答是不是,有些运算指令是cpu/gpu本身不支持的。
即使我们能通过软件算法得出运算结果,那也和硬件支不支持该种运算无关。
作者: singlung    时间: 2007-6-21 13:35

這帖太內涵了.估計很少人戰得起~

作者: 123321456    时间: 2007-6-21 13:37

引用:
原帖由 cf3b5 于 2007-6-21 12:58 发表

我说的优化当然包括存取的优化,某些情况下多一个寄存器就可以节省很多指令!
基本上我的意思是!

GPU实际上是CPU的优化版,而非功能增加版!
虽然有些运算cpu也能做,但是几乎不具备任何实用价值,比如 ...
cpu是通用运算,只要你愿意6502最终当然也可以算出hdr渲染画面,只是它自己始终算的还是8位整数运算而已。
作者: dboy99    时间: 2007-6-21 13:40

其实LZ的意思是PS3的Cell异常强大,就算RSX残废了也能凭着软模拟实现05E3的KZ2和TK6的布料模拟


作者: 123321456    时间: 2007-6-21 13:40

引用:
原帖由 Jonsoncao 于 2007-6-21 12:53 发表


excel可以用数值算法解,也就是把微分方程变成差分之后设立节点组成巨大的稀疏矩阵,再用excel的solver

不过直接写code的确不行
其实给我个普通计算器我都能算微分方程:D :D :D
问题在于算的到底是excel、matlab、计算器还是我自己就只有天知道了。
作者: chovosky    时间: 2007-6-21 13:41

引用:
原帖由 dboy99 于 2007-6-21 13:40 发表
其实LZ的意思是PS3的Cell异常强大,就算RSX残废了也能凭着软模拟实现05E3的KZ2和TK6的布料模拟



真的么
作者: 123321456    时间: 2007-6-21 13:41

引用:
原帖由 dboy99 于 2007-6-21 13:40 发表
其实LZ的意思是PS3的Cell异常强大,就算RSX残废了也能凭着软模拟实现05E3的KZ2和TK6的布料模拟

所以他才会一直问原因嘛。
作者: Nothing    时间: 2007-6-21 13:52

引用:
原帖由 cf3b5 于 2007-6-21 12:58 发表

我说的优化当然包括存取的优化,某些情况下多一个寄存器就可以节省很多指令!
基本上我的意思是!

GPU实际上是CPU的优化版,而非功能增加版!
虽然有些运算cpu也能做,但是几乎不具备任何实用价值,比如 ...
确实gpu做的那些运算cpu都能做,不然也不会有纯cpu算出来的cg了。倒是有些cpu能做的gpu不能做,gpu没那么通用
作者: murasame    时间: 2007-6-21 13:53

引用:
原帖由 cf3b5 于 2007-6-21 12:07 发表
虽然是做开发,但是对3D完全不懂,请教两个问题!
问题1,其实常说的某某显卡支持某效果,其实是不是说这个芯片针对这个效果的一些运算进行了优化?
问题2,某某SDK支持某效果,是不是说这个SDK优化封装了这个效果而已?
我不是做开发的,根本不懂3d,但是觉得你的问题还是挺简单的
1,是,硬件上的支持,有专门的算法来对应这个特效,不支持只能说不能在实际应用中使用,你一定说几天几夜去实现还是可以做到的……
2,不知道怎么回答,感觉上sdk类似于素材库,你要用什么就拿什么,当然也可以自己从0开始做完全不去用它。硬件支持的条件下,假设2个sdk,一个支持效果a一个不支持,那只能说明不支持的sdk库里面没有这个效果,你需要人工完成,支持的只是方便你的工作,拿来就可以用了。最简单的,xo的水的反射,全部如出一辙,就能说明问题了。简单是简单了,区别也没了。

随便看看,我和开发软件完全不搭界:D
作者: Nothing    时间: 2007-6-21 14:03

引用:
原帖由 murasame 于 2007-6-21 13:53 发表

我不是做开发的,根本不懂3d,但是觉得你的问题还是挺简单的
2,不知道怎么回答,感觉上sdk类似于素材库,你要用什么就拿什么,当然也可以自己从0开始做完全不去用它。硬件支持的条件下,假设2个sdk,一个支持效果a一个不支持,那只能说明不支持的sdk库里面没有这个效果,你需要人工完成,支持的只是方便你的工作,拿来就可以用了。最简单的,xo的水的反射,全部如出一辙,就能说明问题了。简单是简单了,区别也没了。
2不对,sdk里没有所谓效果库一样的东西,sdk支持一些基本渲染功能,前面说过,sdk的区别其实非常小。效果是由开发人员运用一系列功能作出来的。xbox的水反射,只能说明开发人员用了相同或者类似的办法来做水的反射。一段时期里,总有一些方法是最实用或者是易用的,出现相同的效果不稀奇,比方说normalmap。因为normalmap的贴图不同的人做的风格效果可能会不同,所以Normalmap看起来还不那么一样。水面往往只涉及到一些固定的反射折射运算,和贴图关系很小,看起来都一样很正常。

[ 本帖最后由 Nothing 于 2007-6-21 14:04 编辑 ]
作者: liuyicheng    时间: 2007-6-21 14:17

引用:
原帖由 dboy99 于 2007-6-21 13:40 发表
其实LZ的意思是PS3的Cell异常强大,就算RSX残废了也能凭着软模拟实现05E3的KZ2和TK6的布料模拟

从理论上的确可以,但是在客观上不可行。

效率啊效率,谁会玩幻灯片?
作者: chovosky    时间: 2007-6-21 14:19

引用:
原帖由 liuyicheng 于 2007-6-21 14:17 发表

从理论上的确可以,但是在客观上不可行。

效率啊效率,谁会玩幻灯片?
gal啊,gal
作者: cf3b5    时间: 2007-6-21 14:29

引用:
原帖由 Nothing 于 2007-6-21 14:03 发表

2不对,sdk里没有所谓效果库一样的东西,sdk支持一些基本渲染功能,前面说过,sdk的区别其实非常小。效果是由开发人员运用一系列功能作出来的。xbox的水反射,只能说明开发人员用了相同或者类似的办法来做水的 ...
那么说,假设cpu是最小运算指令,gpu是把cpu中多个运算指令加以优化封装后提供一个新的运算指令,SDK则是对gpu中提供的运算指令再次优化封装,提供给开发者??
其实我说SDK的效果库不是我的原意,我其实只是想表达SDK是否是对运算操作的一个更高阶封装?不过可能有点猜过头了~:D
作者: liuyicheng    时间: 2007-6-21 14:30

GAL游戏用啥碰撞模拟,连3D都不用,2D还能YY,3D后你看I社等几家公司的作品,YY可行度下降很多(水平低啊)。
作者: chovosky    时间: 2007-6-21 14:32

引用:
原帖由 liuyicheng 于 2007-6-21 14:30 发表
GAL游戏用啥碰撞模拟,连3D都不用,2D还能YY,3D后你看I社等几家公司的作品,YY可行度下降很多(水平低啊)。
gal是针对你说的:谁会玩幻灯片?:D
作者: liuyicheng    时间: 2007-6-21 14:34

引用:
原帖由 cf3b5 于 2007-6-21 14:29 发表

那么说,假设cpu是最小运算指令,gpu是把cpu中多个运算指令加以优化封装后提供一个新的运算指令,SDK则是对gpu中提供的运算指令再次优化封装,提供给开发者??
其实我说SDK的效果库不是我的原意,我其实只是 ...
你对GPU的理解我不能明白什么意思。。。?

SDK则是对gpu中提供的运算指令再次优化封装。。。?
作者: zcomic    时间: 2007-6-21 14:40

1、理论上的确没错。就象做网页,如果“足够强”的话,理论上只需要
一个记事本就可以了,直接写代码就可以把整个网业的代码都搞定了(当然
多媒体文件如图片等要另外插入),也就是说足够强的话,DreamWeaver等
网页制作软件可以不用。

但事实自然是没人那么做的。

再来说3D,任何3D模型都是只要制作者“足够强”,根本不需要3D软件,直接
把每个顶点坐标数据写下来就可以了,无非是一堆数字信息而已。比如我可以把
最终幻想里的角色模型数据文本贴在论坛上,你拿去还原一下,就可以得到一个
最终幻想里的3D模型。

所以理论上的超级高手完全可以用记事本做个最终幻想级别的MM模型出来。
作者: 责任编辑    时间: 2007-6-21 14:48

理论上是对的东西不一定有人去做
所以上面的说法都有些极端所以只能对80%
作者: 猪头    时间: 2007-6-22 11:13

游戏引擎是做什么的?有很多特效是在这里生成的,好的引擎生成的画面就越好,就好比3D里用的渲染器,同样的一张图,你用线扫描的画面就没有VRAY渲染的好.渲染速度主要是取决于CPU和内存.重要的还是CPU.游戏引擎才是最重要的 我觉得




欢迎光临 TGFC Lifestyle (http://tgfcer.com/) Powered by Discuz! 6.0.0