顶点着色器(vertex shader)

顶点着色器(vertex shader

                     ---- 译自real time rendering 3rd

 

       尽管vertex shader 是这个按功能性划分的管线的第一阶段,需要提到的是,在此之前,还需要做一些数据维护。在这个DirectX把它称为输入装配(input assembler)的过程中,大量的流式数据被聚合成顶点或图元的集合,送入管线中以供下一步处理。举例说明,一个物体能够被表现为一个位置数组和一个颜色数组。输入装配从本质上从位置和颜色创建顶点,来构造三角形。第二个物体使用与第一个物体相同的位置,但是用不同的颜色来表现。数据表示的细节在12.4.5讨论。

 

这里同时也支持在输入装配的过程中执行实例化(instancing),这能够允许一个物体被绘制多次,每次绘制都使用不同的可变数据,这个多次的绘制过程只需要一次函数调用。实例化的问题在15.4.2讨论。

 

Direct10里,输入装配仍然用一个ID标识出每个实例,图元,顶点,这个ID能够被后续的各个着色阶段使用。而对早期的shader model,这些数据必须显式的被加到模型中。

 

一个三角形网格表现为一个顶点的集合和一些用来描述哪些顶点形成三角形的附加信息。顶点着色器是第一个处理网格模型的阶段。用来描述哪些顶点形成三角形的附加信息在顶点着色器中是不可用的;就如同它的名字所暗示的一样,它专门输入顶点。概括来说,vertex shader提供了一种途径去修改、创建或忽略与多边形顶点有关的值(比如颜色、法线、纹理坐标、位置等)。正常情况下,vertex shader程序从本地(建模)坐标空间变换顶点坐标到齐次剪裁空间;一个顶点着色器总是至少输出这个位置

 

这个功能最早在2001年被DirectX8引入。因为它是整个渲染管线的第一阶段,并且被调用的不是那么频繁,它可以使用GPUCPU来实现,将结果传递给GPU进行光栅化。用最新的硬件做这个过程能提高一些速度,但没有功能性的改变。现在所有的GPU都支持硬件顶点着色。

 

一个顶点着色器的与我们在3.2章描述的通用虚拟机很相似。每个被传入的顶点被vertex shader程序所处理,然后通过按三角形和线进行插值的方法,输出某些值。Vertex shader不能创建和摧毁顶点,并且一个顶点的处理结果不能被传递给另一个顶点。既然每一个顶点是被独立处理的,任意数量的顶点着色器处理能够并行处理输入的顶点数据流。

 

后续章节解释了一些vertex shader特效,比如阴影锥创建,vertex blending for animating joints,轮廓渲染。其他一些使用包括:

长镜头,使屏幕产生鱼眼、水下或失真效果。

物体定义,通过只创建一次网格并且使其变形。

物体扭曲,弯曲,锥形递减。

程序控制的物体变形,比如飘动的旗帜,布料或者流水。

图元创建,通过将退化的网格模型沿渲染管线向下传递,并且让他们到达需要的区域。(???)这个功能在新的GPU中被geometry shader取代。

页卷曲,高温模糊,水波纹等其他特效能通过这样的方法实现:将整个frame buffer的内容作为纹理贴在与屏幕对齐的、经过预处理的网格模型上。

顶点纹理读取,允许在顶点网格上应用纹理,用较低的代价生成海面或地形高度效果。

Vertex shader的输出能够通过不同的方式使用。通常作为单个实例的三角形来生成并且被光栅化,然后产生每个独立的像素段,送到pixel shader程序进行后续处理。而在shader model4.0中,数据也有可能会被送到geometry shader,或者直接送给pixel shader,或者两者都做。这是下一个部分的话题了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值