Realtime Rendering 3rd笔记 8


3.8 Effects

一个单独的shader程序是不能单独起作用的:一个vs程序将结果提供给一个ps。两个程序都必须被载入才能工作。程序员必须将vs的输出和ps的输入进行匹配。一个特定的渲染特效可能由任意数量的shader在几个pass中执行产生。除了shader自己,状态变量必须被正确的设置来保证shader正确的工作。例如,渲染器的状态包括是否使用和如何使用z-buffer和stencil buffer,一个片段如何影响已经存在的像素值(e.g. replace, add, or blend)。
由于以上的原因,多个组织都开发了特效语言(effects language),例如HLSL FX, CgFX, COLLADA FX。一个特效文件试图将执行某个渲染算法需要的所有相关信息包装起来。一般它会定义一些全局参数,可以被程序赋值。例如,一个单独的effect file可能定义渲染塑料材质需要的vs和ps,它可能暴露一些参数例如塑料颜色和粗糙度,这样渲染每个模型的时候可以改变效果而仅仅使用同一个特效文件。

(下面以一个HLSL FX为例,介绍了一下。。略过)

一个effect file中能存储很多techniques。这些techniques通常是一个相同effect的变体,每种对应于一个不同的shader model(SM2.0,SM3.0等等)。

至此关于GPU本身的讨论结束了。GPU可以做很多其他的事情,GPU的功能可以有很多种使用和组合方式。利用这些能力的相关的理论和算法,将会是本书的中心。在这些适当的基础介绍之后,接下来将注意力集中到对transform和visual appearance的深入理解中,这些是流水线的关键元素。

你可能感兴趣的:(time)