shader入门精要读书笔记02 GPU流水线

一、GPU流水线

1.流水线过程:
顶点数据 ——> 几何阶段(包括顶点着色器、曲面细分着色器、几何着色器、裁剪、屏幕映射) ——>光栅化阶段(三角形设置、三角形遍历、片元着色器、逐片元操作)——>屏幕图像

2.顶点数据是应用阶段加载到显存中的,再由Draw Call指定,这些数据随后被传送到顶点着色器。

3.几何阶段内容概念:
顶点着色器 完全可编程,用于顶点的空间变换、顶点着色等功能。
曲面细分着色器 是一个可选的着色器,用于细分图元。
几何着色器 也是一个可选着色器,它可以被用于执行逐图元的着色操作。或者用于产生更多的图元。
裁剪 是将不在摄像机内的顶点裁剪掉(注意与粗粒度剔除的区分,粗粒度剔除是在应用阶段,是将不可见的物体剔除),并剔除某些三角图元的面片。此阶段可以进行控制,可以自定义裁剪平面,或控制裁剪三角图元的正面还是背面。
屏幕映射 负责将每个图元的坐标转换到屏幕坐标系中,其不可编程及配置。

二、顶点着色器

1.顶点着色器处理的单位是顶点,CPU输入进来的每一个顶点信息都会调用一次顶点着色器,GPU可以利用本身特性并行化处理每一个顶点。

顶点着色器完成的主要工作:坐标变换 和 逐顶点光照。

2.顶点着色器的坐标变换
将顶点位置进行某种变换,顶点着色器可以在这一步改变顶点位置,所有其对于顶点动画中是非常有用的。举例:模拟动态水面,布料。

完成这些的前提是 “把顶点坐标从模型空间转换到齐次裁剪空间”。

代码: o.pos=mul(UNITY_MVP,v.position);

坐标转换过程:顶点坐标转换到齐次裁剪坐标系,再由硬件做透视除法,最终得到归一化的设备坐标(NDC)。

OpenGL使用的同时也是Unity使用的NDC,而DirectX中NDC使用的z分量范围是[0,1]。

顶点着色器输出的数据信息 可以直接进入光栅化(片元着色器),或者发送给几何阶段的 曲面细分着色器、几何着色器。

三、裁剪

裁剪就是将只有部分在视野内的物体进行处理。
我们知道NDC下顶点位置都在一个立方体内,所以我们只需将图元裁剪到单位立方体内就可了。
即在图元与立方体边缘的的交界处计算出新的顶点,后与其他顶点连接,形成新的摄像机视野内的图元。
裁剪是不可编辑的,不可编程,这是硬件上的固定操作。
但是我们可以自定义一个裁剪操作来对这一步进行配置。

四、屏幕映射

这一步输入是在单位立方体内的三维坐标系坐标,屏幕映射任务是将每个图元的x,y坐标转换到屏幕坐标系,屏幕坐标系是一个二维坐标系,它和分辨率有很大关系。

屏幕坐标系决定这个顶点对应屏幕上哪个像素以及距离这个像素有多远。

其实也是一个缩放x、y坐标的过程,屏幕映射不会对z坐标进行任何处理。
转换出的屏幕坐标系会与z坐标一起构成窗口坐标系,这些数据值会被一起传送给光栅化阶段。

注意:DX与OpenGL屏幕坐标系区别。OpenGL是左下角最小值,DX是左上角最小值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值