游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1201|回复: 0

3d开发的特点

[复制链接]

4

主题

714

帖子

714

积分

高级会员

Rank: 4

积分
714
QQ
发表于 2009-11-11 16:03:00 | 显示全部楼层 |阅读模式

在3D界,人们都在追求着一种"dos like"developing,即崇尚dos下开发游戏时的那种"直接访问硬件的方式"(这主要是基于3d软件效率的考虑),加速器时代和加速时代之前的针对固定渲染管道的编程,特别是GPU vector processing时代给GPU定制指令的编程方式,其实都意味着,3d开发中其实软件和硬件的那层界限很薄(给于开发者有意义的可复用中间件抽象),对于开发者来说,任何基于软件render层面的高阶开发,其实跟发明一个render差不多,都强烈地用到"图形算法",强烈地用到曲面数学,线性代数,解析几何,计算几何等东西.(除了数学,几何,有时甚至是物理知识,所以人们说,3d开发其实是一个学科综合,知识密集的领域,,游戏开发就更是如此了)在文章的稍后,我会介绍与3d开发相关的数学体系和物理体系.

拿DX来说吧,它几乎是最新的3d和3d开发规范,比如,shader也是它首次倡导出来的.比如它有立既模式(由厂商在其驱动程序中来保证一个hal层,对于硬件没有的功能,windows在底层维持一个模拟层,hal和模拟层构成dx中的立既模,这样对于保留模式的DX,它都可以提供一致的硬件接口)和保留模式二种.但即使是高阶的保护模式,虽然它也有内置的变换(render后期的视口变换),但对于程序员来说,也要写自己的变换(通用变换).因为上面说到:3d领域其实是一个非常"专业"的领域,对于程序员,无论在硬软件的哪个层次上进行开发,最初都要涉入到图形算法.正是由于处处需要通用变换和深入到图形算法,所以需要shader.shader的引进,对于3d开发,没有引进任何更多的复用性.它只是假设,任何一个3d程序员,必须是一个了解图形学算法的专业程序员.

至关重要的一点,是要注意,管道,流水线如此类概念,其实硬件是没有的,只是3d render software层面的概念,它只是一些硬件设施的相关机制的保证,这就跟CPU和保护模式的关系一样,能说x386是保护模式的CPU吗,我们只能说,CPU在硬件上提供了这样的一套机制,这套机制被用来进行软件的"保护模式"支持.而显然,保护模式是软件层面上的意义.推而论之,固定管线,可编程管线,其实只是软件层面的意义.

故shader是硬件部件(的一个过程,可定制指令的过程,是一个硬件上的意义,GPU的出现,整个地取代了原来显卡在硬件上的意义,使之变成了vector processer而具有shader部件),dx在软件层的shader层是不是为了取代什么,而是全新设计的一种架构,它目的旨在让程序员在软件层面对硬件提供可定制的指令.

所以,所谓可定制指令,其实正是"针对硬件写程序",但是上面已经说到了,由于3d开发是一个专业领域,所以图形算法,在dx层这样的软件runtime层和在硬件处理的shader部件的复杂性其实是一样的.

为什么这样说呢?3d领域是一个非常"specialized"的领域呢,因为这里不外乎图形学的算法,即数学,物理,几何知识密集的这个地带.

这首先要讲讲3d render 的流程并详细导出这里面的诸多算法.为了简化起见,我将分步讲,先说关于几何信息的,然后讲关于颜色信息(颜色是一种光,是物理现象)的.以及shading,lighting,foging,textures sampling的,在现实中的render中要注意的,这几个步骤往往是平行的.

一般的引擎是基于多边形的引擎(从几何出发),当然也有基于ray tracing的,纯粹从物理出发的.我们这里讲普遍的基于多边形的.

首先,用户通过modeling(可能是曲面或面片,但更多的是poly的)或程序动作的loading x文件,载入一系列顶点定义,然后引擎将其micropoly化,或faclet化,这称为dicing(一般dicing为三角形网格),然后进行hiding 不可见面的算法,到这里时候为止,整个模型是线框信息(纯粹的三角形网格信息),然后shading(shading翻译为"画阴影其上",,我们把其理解为为了不致于使模型是线框信息,而进行的"以表面三角形为单位的",贴上阴影,表现其初步材质性质 - diffur反光特性的过程,注意不是贴图texturing,而只是shading),比如flat shading算法,这使线框网格变得solid,还比如其它一些smooth solid化网格的高级shading算法,会使模型具有更真实的现实效果,此时,模型已有一定的真实感了(如果是通过曲面技术生成的网格,其本来就会显示出一定的平滑性,shading过程对这样的网格效果更好),注意此时只是表现材质,为了追求更好的真实性,还要加入贴图,即来自位图上的颜色信息,texturing其实也是一种shading(shading是一种三角形项点材质反光信息的插值),不过它不是插的材质反光信息,而是颜色数据.

如果不是程序员的眼光来看,比如以一个modeler 艺术家的眼光来看,shading往往是定义一些材质,texturing往往是制作一些UV.以引擎实现的眼光来看,它们要实现平面贴图,BUMP贴图,之类的算法艺术.


然后就是light.注意lighting不是定义材质,材质只是反光特性,始终要注意的是,到现在为止,只是顶点(信息)的处理(比如位置,材质,颜色数据),这也就是vetex shading阶段能做的全部事,和dx 提供一个vetex shader的意义所在和其所针对的渲染阶段.而不涉及到任何像素级的处理.但是对位置,材质,RGB信息的处理,显然是为了最终像素的处理作铺垫(材质,RGB,lighting最终决定了这个顶点在被scaning into pixel后形成的pixel 信息) .

等到作像素处理的时候,引擎就进了"pixel shader",一般地,如果谈到这里,就到了渲染的后期阶段.算法在这里的也比较多,请自行研究.




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-14 17:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表