发言者:WIN2000
发表时间:1999年8月09日 18时14分45秒
来自:(202.104.35.49)
举个最简单的例子:渲染一个带纹理的三角形。
3DMAX的处理方法是这样的,把屏幕上的每一个像素做反投影变换,找到该像素对应的场景中的表面,在本例中就是这个三角形。如果该像素落在三角形区域内,则计算在三角形上该点对应的位置,根据该位置对纹理贴图进行双线形插值,得到这点的贴图颜色。然后计算这点的法向量,用点坐标和法向量等参数代入PHONE(法向量插值)光学公式,计算出场景中一个光源对该点的照射结果,如果有很多光源,则要把全部光源的照射结果加在一起,最后再把上面得到的纹理颜色合成进来,就得到屏幕上一个像素的颜色。3DMAX为了追求尽可能高的质量,全部的渲染都是用软件实现。
同样的例子,OPENGL是这样处理的,设置好灯光和纹理,CPU把三角形的3个坐标传送给3D加速卡,告诉加速卡要渲染一个三角形即可,其它的工作如纹理、光照、像素填充等都由硬件完成。OPENGL使用GROUND光照模型(亮度插值),即使没有加速卡,用软件计算也很快。另外还应注意到,OPENGL是为实时交互设计的,在计算光照时不考虑阴影,而且标准版只支持最多8个光源。在以前CPU还很慢的时候,高档3D加速卡还带一个几何处理器,用硬件来进行坐标转换、三角形裁剪等操作,但今天CPU的速度已经超过了一般的几何处理器,所以DIRECTX从一开始就把几何处理归为CPU的工作,而把耗时的纹理填充、光照计算等工作交给3D卡去处理。
由上面的介绍可知,单纯用OPENGL,靠硬件来进行照明计算是做不出好的效果图的,要制作最终的作品还得用软件。而光能传递的出现就使这种情况发生了很大的改变,这种技术实质上是在场景空间中进行渲染(Object Space),有别于以往的在屏幕空间中的渲染(Screen Space),经过光能传递计算后,各个表面的颜色和亮度已经计算好,而阴影则是亮度很低的表面。这时用OPENGL进行渲染(其实应该叫显示更确切一些)就非常快,因为这时实际上不用处理任何光源。在今天3D加速卡越来越快,图象质量越来越好的情况下,已经有很多人在研究如何直接用3D卡来制作高质量的图象,如圆方6就是直接用OPENGL加速卡作最终渲染。
综上所述,由于计算原理不同,3DMAX等软件在最终渲染时不可能利用任何3D加速卡,LightScape在用光线跟踪时也是一样,这就是为什么3D加速卡并不能令你渲染得更快的原因。
回复以上发言