什么是CgFX?
CgFX是一种强大的通用的着色器规范和交换格式。CgFX运行时,比如Cg,支持OpenGL,同样也支持DirectX8和DirectX9。对于实时图像艺术家和开发者来说,这种格式提供了几个好处:
1、交叉API,交叉平台的兼容性和便携性
2、多技术(technique)的封装,使细节层、功能性或性能退居其次。
3、支持Cg,汇编语言以及固定功能的着色器
4、文件中内嵌可编辑的参数和GUI描述
5、多遍着色器
6、渲染状态和纹理状态规范
在实际情况下,通过将渲染状态,纹理状态和渲染次数(passes)与Cg顶点程序(Cg vertex programs)和Cg片段程序(Cg fragment programs)包装在一起,开发人员可以在CgFX文件中描述一个完整的渲染效果。尽管一个单独的Cg程序可以包含一个效果必须的核心渲染语法,但只有将这些额外的环境信息合并在一起才使着色器变得完整和自包含。对于艺术家很友好的GUI描述使得CgFX文件与被艺术家和程序员使用的产品流程很好的集成在一起。
CgFX文件格式简介
Cg语言可以让你轻松的表示出一个物体应该被怎么渲染。虽然现在的Cg范本只是描述了一个单独渲染过程,很多渲染技术,像shadow volume或shadow map,需要多于一次的渲染过程。
许多应用程序需要面向很广范围的图形硬件功能和性能。于是,在一个比较旧的硬件上运行的着色器的版本和对远处物体协助性能的着色器的版本是重要的。
每个Cg程序一般来说都是面向一个profile,并不能退到其它profile中,或者汇编语言着色器,或者是固定功能的顶点或片段处理过程。
用Cg程序来产生图像,一些关于它们的环境的信息是必须的。例如,一些程序可能需要alpha混合被打开而深度写被关闭。其他的程序可能为了正常工作需要特定的贴图格式。这些信息在标准的Cg源文件中并没有提供。
CgFX通过一个基于文本的文件,来包含Cg,汇编,固定功能着色器以及为了渲染一个效果需要的渲染状态和和环境信息。这个文本文件的语法与Microsoft .fx 2.0格式(Direct 9.0 效果格式)很类似。
CgFX在一个单独文本文件中包含为渲染效果所需要的所有东西。这个特点使得第三方工具或其它3D应用程序可以像它自己的文件一样来使用CgFX,除了几何和纹理数据之外不需要额外的扩展信息。在这种情况下,CgFX就像一个交换格式。CgFX使得在着色器可以在没有相关C++代码的情况下被交换,这些C++代码在一般情况下都是为了使一个Cg程序与OpenGL和Direct3D一起进行工作的。