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


发新话题
打印

原来3D游戏的显示原理和过去想的完全不一样

一直听说未来的3D发展方向是光线追踪,还以为和字面的意思一样,指的是光线处理技术,后来才知道所谓的光线追踪指的是完全不同的一种显示原理。

大部分人都以为,所谓3D图象就是计算机在虚拟空间中构造一个世界,物体由多边形构成,多边形上有帖图,光照形成明暗面,在地面生成影子。然后我们是透过窗户(屏幕)来看这个世界。

实际上完全不是这么回事,民用电脑根本没有能力即时演算多边形空间,3D游戏中虽然3D空间是多边形构成,但显卡处理的并不是多边形,而是屏幕上的象素,这就是所谓的光栅化技术。

打个比方,我们从窗口看屋子外的世界,世界上的东西都只有形体没有颜色和光影(就好像素描上的黑白线条),有两种方法给世界上色,1是动手给世界里的东西都涂上颜色,并且找来光源使物体有投影,2是从窗口拍一张黑白照片,然后动手给这个黑白照片上色。显然2的工作量远远小于1,1的工作量取决于这个世界上有多少物体,而2的工作量只取决于照片上有多少个象素。假设照片只有10X10=100个象素,那么我们只要画100个象素就可以了,即使窗外有1亿个东西,我们也只要给100个象素上色。透过像素看3D世界,只能看到离屏幕最近的一个多边形,显卡只要计算出这一个多边形的数据就能给像素上色,即使考虑后边和周围多边形的影响,运算量也远远小于处理所有多边形。

显卡在运算时,只要考虑像素A带有的极其有限的几条信息就可以了。这个信息是极度简化的,刚好够计算屏幕上的点的颜色,比如是否有贴图(找贴图相应位置的颜色),是否处于光照中(加色),是否处于阴影中(减色),是否半透明(与后面多边形的色彩叠加),是否有反射(与邻近的多边形色彩叠加),是否有特效(也是加减色)

比如要计算像素A的光照信息,只要知道离A最近的那个多边形的垂线方向就可以了,计算法线与光源射线的夹角,就可以知道有多少光打到这个平面上,按比例给 A加上一定的颜色。因为这种特性,所以有的特效在运算的时候要求特定的顺序,比如先渲染后边的物体,再渲染前面的物体,否则遇到半透明的物体还要反回去计算它后面的物体。




--------------------

喵的,果然脑补过度了

[ 本帖最后由 md2 于 2010-8-19 21:26 编辑 ]


TOP

这样也就能知道为什么32位机时代主机的3D能力相差这么大了。实际上差异不是因为主机的运算能力,而是主机选择的即时演算方式。当时的主机采用光栅化渲染效率最高。PS的路线不全对但最适合发挥主机潜力。N64路线正确但不适应它的机能,SS则是走错了路。

SS,N64和PS的3D原理不同,这个前提下谈论老机器的多边形数量毫无意义,因为只有N64的技术接近现在的3D游戏,PS有些特性正好相反,SS则完全是另一个体系。
不同的运算原理,贴图和光照等特效运算对机器造成的负担也不同,针对特定的游戏,机器的优势也不一样。
有一种说法是SEGA官方不公布SS多边形运算能力是因为数值低,实际情况可能正好相反,SS和PS2一样,单纯几何运算能力高,开启特定效果后多边形数会狂降,即使多边形再多,实际游戏中如果效果不好看那就毫无意义了。SS早期采用的3D显示体系与实现半透明等特效的算法正好矛盾。N64主机的多边形数远少于PS,但3D效果反而在其上,就是这个道理。

所谓“SS没有3D机能”是错误的说法,SS的3D游戏当然是计算多边形,它所没有的是“光栅化渲染方式”
3D游戏的运算肯定是多边形,它的差异在于最后的渲染(包括贴图光照等特效)是用其他方式实现的

[ 本帖最后由 md2 于 2010-8-19 16:26 编辑 ]



TOP

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