您当前的位置: 首页 > 

果冻喜之郎

暂无认证

  • 5浏览

    0关注

    79博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

渲染管线1

果冻喜之郎 发布时间:2021-08-09 20:36:33 ,浏览量:5

整体流程:

 1        应用阶段:

 

 

 

剔除掉被遮挡或视锥以外的物体 

渲染目标:当前渲染操作输出的对象是输出到真缓存FrameBuffer还是RenderTexture

按照渲染设置和渲染模式,把它们输出到显存,然后交由GPU中进行处理 

2        几何阶段

顶点着色:可编程 ——顶点着色器

顶点着色数据交给曲面细分和几何组处理:可选

投影:GPU自动完成

以上三步完成从顶点空间到投影空间的过程

裁剪:判断顶点是否在视锥椎体内,不在就剔除(cvv)

屏幕映射:把3D空间变换到2D屏幕空间,连续到离散,屏幕中独立的像素点

模型坐标系——>投影坐标系——>屏幕2D坐标系

通过给定的图元生成更多的图元 

对于顶点在裁剪空间里的位置,xyzw要进行透视除法:把xyz处以w来完成投影操作,这样就从投影坐标系转换到了标准设备坐标系,也就是NDC 

完成投影操作后,如果xyz超过-1~1,则无需显示该图元,剔除掉;如果 是图元部分处于裁剪空间外,剔除掉空间外的部分之后,还要再生成两个额外的点来补全图元

设备坐标系在open GL和D3D下不一样:在open GL中,xyz三个维度都是从-1~1,在D3D中只有xy两个维度,他们从-1~1,z从0~1

在屏幕坐标系中,范围是输出设备的长和宽

3        光栅化阶段

 

 

 计算边界信息

检查这些像素是否被三角形覆盖,如果被覆盖,说明片元属于三角形,寻找被三角形网格所覆盖的所有像素的过程,叫三角形遍历。

当得到被三角形覆盖了的所有像素后,会使用三角形的三个顶点,对每一个被覆盖的像素进行线性插值,然后得到当前三角形在像素对应片元的数据。

注意:这里得到的片元并不等同于像素,因为在屏幕的同一个像素位置,有可能对应与多个三角形的不同片元,他们重叠在一起,那么他们各自着色以后,还要决定保留哪些,以及保留下来的片元如何混合,并且最终输出到像素的位置

4        逐片元操作

 片元着色:可编程

颜色混合:通过进行透明度测试,深度测试,模板测试,对片元进行取舍

 

 透明度小于给定阈值的片元被舍弃而不被渲染

 

把片元深度值和对应的深度缓冲当中的深度值与作比较 ,通过比较的保留

深度测试:首先渲染地表,此时深度缓存为空,则将地表的深度值写入深度缓存中,再渲染立方体,远处立方体的深度值小于深度缓存中地表的深度值,所以把立方体的片元覆盖掉地表的片元,同时把这个远处立方体的深度值写入到深度缓存中,近处立方体同理。即近处覆盖远处,由于测试是可配置的,也可以是远处覆盖近处

模板测试:对两个立方体整体进行描边,即不希望立方体的描边挡住其他立方体,那么可以将两个立方体的顶点放大,并且把它绘制成描边的颜色,在绘制的时候写入模板值,绘制完以后得到了两个绿色区域的立方体,在进行真实立方体绘制时,把立方体的模板值和之前描边颜色的模板值进行比较,只要模板值是描边模板值,就覆盖掉,这样可以实现立方体永远在描边之上

教程地址 

关注
打赏
1655963140
查看更多评论
立即登录/注册

微信扫码登录

0.0820s