shaders for game programmers and artists 第一张 关于vertex shader 和 pixel shader 的翻译/猜译 (以助记忆)

 

ertex and Pixel Shader Pipelines and Capabilities

Vertex shade

不是从开头开始,是从讲述vertex shader工作模式开始的。

  开发人员通过类似于directxopengl3D渲染APi讲顶点信息传入shader。这些信息组成一个流。信息流中蕴含着进行可以完整进行位置渲染的所有信息,例如位置,颜色,和纹理坐标。当信息进入之后,它被放入寄存器中 v0~v15,这些都是给vertex shader 使用。这意味着每个顶点不仅被单独处理,而且最多可以支持16个不同信息组合。顶点着色器接下来任然要读取许多别的寄存器来完成它的工作,这其中就包括读取输入信息,将它们处理成可以被像素着色器使用的数据格式来完成最终的工作。

常量寄存器是只读的,所以必须提前设置存储着色器的静态信息。在2.0版本中,常量寄存器是可以容纳浮点数,整数,布尔数的向量。顶点着色器使用的寄存器存储的是四维向量。你可以随意处置其中的任何部分。


  在图片的左边是临时寄存器。(不详解了)。

在可以读取输入寄存器,临时寄存器,常量寄存器,顶点着色器现在可以轻松的处理输入的顶点,你可以想怎么干就怎么干了。处理结束之后,这些结果将被传送到输出寄存器中,其中最重要的信息是位置信息,必须包含屏幕上的投影位置。其他的寄存器包含了例如颜色,纹理坐标信息。

一旦顶点着色器完成了它的工作,这些信息就会被传去光栅化。这部分的分工是对每一个多边形所覆盖的平面位置的相素颜色进行判断。它也负担着其他的渲染任务。例如顶点信息的 interpolation(差值) 和 occlusion(遮挡)。

差值就是在处理所有多边形的顶点信息时,为了实现顶点之间像素值渐变的一种方法。好比是一条线段,一头黑,一头白,那么中间的这些点应该取什么值呢,灰。差值就是这种计算方式,只是差值在shader中的作用范围是整个三角形。遮挡算法。负责计算出一个多边形的那个部分可以在屏幕上显示出来。其实就是裁剪了感觉。采用了遮挡算法之后,就可以让我们不用花时间去处理那些注定看不到的地方了,节省cpu的说。在 光栅器 决定像素覆盖范围之后,像素着色器就会被调动去处理每一个像素的取值了。

Pixel  shader 

1.2

J   见图1.2. 硬件通过 管输入的颜色和纹理寄存器将信息传送给像素着色器去计算。这些值是由 顶点着色器所计算出来的,经过视角转换和差值的。寄存器v0 v1,,是用来存储已经经过差值的漫反射和镜面光照的(?)。寄存器t0到 tn 是存储经过差值的纹理查找坐标。 在1.2中 纹理寄存器的箭头指向两个方向。这是基于设计的决定,让你既可以把他们当做纹理寄存器,也可以当做临时寄存器。最后 s0 sn 指向纹理 意味着。像素着色器在实际渲染像素的过程中,会对纹理进行采样。尽管这些寄存器都有着清晰的结构用途,但是实际上可以承载从顶点着色器到像素着色器的任何信息。

常量寄存器,c0cn ,同顶点着色器,只读,只能提前由开发者设置好有用的信息。最终 ,临时寄存器 r0 rN ,可读可写,用来保存一些计算时 的中间变量。 当使用hlsl时 这些寄存器都是自动设置好的,相对于开发者 都是透明的。

最终,输出寄存器,例如 oC0 0Depth 。是硬件用来存储像素渲染的最终结果。它们定义了最终的颜色,雾化(?),深度值,在最后,你的责任就是让你写的shader来决定这些值。 一旦像素经过像素着色器渲染,输出的结构就会被用来 填充你的帧缓存,也就是将要展现在你的屏幕上的东西。

除了少量地址寄存器之外,大多数在像素着色器中使用的寄存器都是由四个浮点数组成的向量。使用向量的优势在于 可以一次性处理多个数据。在默认情况下,向量都是32bit精度,但是也可以使用16bit。在特定硬件配置中,16位更快。

最后需要注意的是:所有的向量数中的每一个部分都可以单独的取用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值