|
硬件着色,交互渲染和实时动画处理是目前3D显卡的主要功能。随着DirectX 8和DirectX 9的应用逐渐扩大, Shader(着色器)成为了PC世界3D领域的主宰,从GPU、API、游戏,应用程序,硬件设计者、软件开发者到疯狂的游戏迷都开始围着Shader打转。今年,数百万的用户下载3Dmark03,或为了测试机器的Shader速度,或只是为了争相目睹新版Shader所带来的实时画面效果。
3D游戏开发制作者也为Shader而着迷,不过由于没有合适的工具,大多数3D图形开发者没有办法发挥它们的全部潜能。对于传统的硬件像素渲染和顶点渲染编程就必须要使用低级的汇编语言来进行,众所周知,汇编编程的工作量极大而且难度极高,因此众多的3D图像程序员都很难发挥这些显示卡硬件渲染方面的可编程性。这也正是当初DX8发布后,DX8游戏迟迟不能上市的原因之一。
在这种情况下就诞生了专门用于图象处理的Cg语言(C for Graphics)。Cg语言由NVIDIA公司和微软公司联合开发,专门用于图象处理的高级语言;它为开发商提供一个全面的编程环境,使其更轻松、快捷地创建特殊效果和实时电影效果,因此Cg语言也被称作“硬件着色器”。Cg语言最大的特点就是能够对象素快速着色,渲染,并且实时处理各种特效。Cg语言提供了应用程序和硬件加速规范的中间层,应用程序通过Cg来调用DX和OpenGL,而原来这些功能是通过汇编调用的。因此Cg不但可以大大降低编程的繁杂度,并且保持了汇编的高效性。使用Cg的开发环境,图像编程就成了书写Cg代码的过程,随后,通过Cg编译器产生低级的汇编代码,这样开发者再也不用去直接接触图形核心的细节了。


Cg,GPU和应用程序之间关系
CgFx:Cg语言的应用 尽管比起汇编语言,Cg语言使得开发者的效率大大提高。不过Cg是一种专门的语言,因此使用范围非常窄(一般针对NVIDIA显卡),即使对于专业的程序员,Cg语言的掌握和使用也非常不方便。
针对纯Cg语言的不足,NVIDIA成功开发了CgFX。本质上而言,它是Cg语言的一种使用工具,通过插件的形式向程序员提供了大量的图象处理工具,同时CgFX和DirectX技术规格兼容。CgFX的出现使得程序员能够快速的对着色器进行开发。目前,Softimage XSI ,Maya和3D studio max都支持CgFx插件。本文我们就来了解一下CgFX在3D studio max中的具体应用。
需要指出的是,CgFx是通过D3D API应用shader特效的,所以在安装Cg Plug-in for 3ds max以前,你必须要有硬件支持DX8.1以上的显卡+DX8.1以上版本+3ds max 5,并且在3ds max 5的Customize Preferences Viewport里将当前驱动设为D3D。
CgFX 和3d studio max 3d studio max给CgFX插件提供了可视化的环境,开发者可以直接看到Cg语言处理的效果,同时3d studio max也提供了命令行的模式进行cg语言的处理。 3d studio Max软件中,CgFX插件处理过程通常分为以下几步:打开处理文件,执行处理效果,修改处理效果以及实时显示4个步骤。处理文件的格式要和DirectX规范中的FX格式兼容。

在处理的过程中,用户可以输入自己的参数;因此,相同的处理过程中而不同的参数,而会使得最终的效果有着天壤之别,这也是CgFx魅力所在。游戏开发者根据所需的不同效果对参数进行调整;一般而言,使用最多的是材质和色彩这两个参数。
CgFX 支持所有的DirectX API;不过在OpenGL中,没有丝毫用武之地。针对不同的显卡,CgFX的处理效果也有差别,一般推荐针对最新的NVidia显卡使用。当3d studio max启动完毕后,打开材质编辑器,在Viewport Manager的版面的左下方,就可以发现CgFx插件。

选中CgFx插件后,在Viewport Shader面板中进行相应的选择。

这个面板中,开发者可以对位图处理的光照,颜色,透明度等进行选择。上图中,选择了所有的位图处理效果。

然后,用户可以在Connection Editor面板中对处理的参数值进行进一步的选择。图中,参数名称位于左边,参数值位于右边。在右栏中,可以根据下拉框,选择不同的参数。 这些步骤完成后,用户就可以对图象的效果进行处理,并且在窗口中实时的输出。CgFx插件的使用非常方便。
 左图:CgFx的diffuseBump.fx着色器的处理效果右图:3d max本身的scanline渲染效果
CgFX着色器处理速度 在3D图象的处理中,着色器的处理速度尤为关键。CgFx着色器除了性能的优势外,着色的速度也非常的快速。针对GeForce FX 5200显卡,我们对CgFx的着色速度进行了测试。
|
处理器 |
Intel Pentium 4 2GHz CPU |
|
内存 |
512MB PC2700 DDR SDRAM |
|
显卡 |
GeForce FX 5200 |
|
操作系统 |
Windows XP SP2 |
|
应用程序 |
3ds max 5.1 ;DirectX 8 |
测试中,使用了NV_Shaderball场景,此场景中多边形数量达到4000多个,使用了2个直接光源。 BumpReflectCg.fx处理


Goochy.fx 处理:


Goochy_tex.fx处理:


MetalIP.fx 处理:


DiffNoise.fx 处理:


Dispersion.fx 处理


Ghostly2.fx 处理


从上述的测试结果看出,CgFx的着色速度非常快,zoom的处理速度基本上都在100fps左右,更重要的是,着色的效果非常出众。
结论 CgFX Plug-in for 3ds max是3DS MAX5用户易用、强大、灵活、快捷的高品质创作工具,除了NVIDIA提供的CgFX shader外,还可以在http://www.cgshaders.org/shaders/找到更多更加丰富的CgFX shader库。 CgFX Plug-in for 3ds max的出现,使得3DS MAX的Direct3D驱动界面不再是一个虚空的摆设,而是能够为用户带来实际助益的驱动界面。如果你希望在OpenGL中也使用Cgfx的话,可以选择安装NVB Exporter插件把场景导出为让CgFX Viewer识别的.nvb文件格式,然后在CgFX Viewer里进行实时的浏览。在处理复杂模型、场景的时候,这样的效率依然要比OpenGL渲染高得多。 CgFX的多平台特性也保证了在3DS MAX Viewport中看到的效果同样能够在其他软件、系统上实现,例如Softimage |XSI:

MAYA 4:

|