马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
emm...兄弟盟我回来了。两个星期没更了,是不是觉得我放弃了,还是失踪了?undefined前段时间因为跳槽换公司,熟悉新环境,并且加班也比较多,所以就偷懒,没写博客。现在缓过来了,继续我们的shader入门到放弃。加油!!! 上一篇我们讲的是渲染流水线的三个阶段,分别是应用阶段,几何阶段,光栅化阶段。同时简单的列举了这三个阶段所做的事情。如果忘记了就回去看看UnityShader学习笔记(三)。本篇我们继续讲上一篇的内容,更深入的了解一下。
应用阶段:
上一篇应用阶段我们列举了三项:场景数据、剔除Culling、设置渲染状态。场景数据和剔除比较容易理解我们就不再讨论了,兄弟盟想要更熟悉的话可以自行查阅。这里我们就再简单介绍一下设置渲染状态其实是在做什么。 设置渲染状态:渲染状态通俗的解释是,这些状态定义了场景中的网格是怎样被渲染的。例如,使用哪个顶点着色器/片元着色器、光源属性、材质等。如果我们没有更改渲染状态,那么所有的网格都将使用同一种渲染状态,如下图显示了当使用同一种渲染状态时,渲染3个不同网格的内容。
再此之后CPU就会“通知”GPU开始干活,这里的“通知”其实就是DrawCall。关于DrawCall我打算后面单独写一篇来介绍一下。
几何阶段: 几何阶段我们在上一篇分为了五项:模型视图转换、顶点着色、投影、裁剪、屏幕映射。这里我们逐个分析。 模型视图转换:其实就坐标转换,在顶点着色器中进行。坐标转换,对顶点(既位置)进行某种变化。首先我们需要了解几个坐标类型:Object space(模型坐标空间)、World space (世界坐标空间)、Eye spac(观察坐标空间)、Clip space(裁剪坐标空间)、Clip and Project spac(屏幕坐标空间)。如果不清楚这五种坐标空间可以先去了解一下。那这里的坐标转换就是将三维的坐标数据绘制到二维屏幕上。例如,由模型空间转换为世界空间,再由世界空间转换为观察空间,之后再由观察空间转换为裁剪空间。
顶点着色:就是确定模型上顶点处材质的光照效果。emmm... 投影:投影分为正交投影和透视投影。正交投影:正交投影的可视体通常是一个矩形,正交投影可以把这个视体变换为单位立方体。正交投影的主要特性是平行线在变换之后彼此之间仍然保持平行,这种变换是平移与缩放的组合。透视投影:相比之下,透视投影比正交投影复杂一些。在这种投影中,越远离摄像机的物体,它在投影后看起来越小。更进一步来说,平行线将在地平线处会聚。透视投影的变换其实就是模拟人类感知物体的方式。 裁剪:一个图元和摄像机视野的关系有3种:完全在视野内、部分在视野内、完全在视野外。完全在视野内的图元就继续传递给下一个流水线阶段,完全在视野外的图元不会继续向下传递,因为它们不需要被渲染。而那些部分在视野内的图元需要进行一个处理,这就是裁剪。例如,一条线段的一个顶点在视野内,而另一个顶点不在视野内,那么在视野外部的顶点应该使用一个新的顶来代替,这个新的顶点位于这条线段和视野边界的交点处。 这里再讲一下裁剪和应用阶段中的剔除的区别,剔除:在应用程序阶段,能够判断物体不在视锥体内并且与视锥体的6个面没有交叉,那么就把物体剔除,不再发给几何阶段;裁剪:物体与视锥体的6个面有交叉,意味着物体的一部分在视锥体内,一部分在视锥体外,那么在几何处理阶段完成投影后,就得把视锥体外的物体裁剪,不再发给屏幕映射。
屏幕映射:这一步输入的坐标仍然是三维坐标系下的坐标(范围在单位立方体内)。屏幕映的任务是把每个图元的x和y坐标转换到屏幕坐标下。屏幕坐标系是一个二维坐标系,它与我们用于显示画面的分辨率有很大关系。
本篇就先写到这吧。光栅化就留到下一篇啦。因为留下一点没写完,这样会更有动力让我继续写,哈哈哈。(借口) 本篇参考文献: 《UnityShader入门精要》-- 冯乐乐,人民邮电出版社,2018年3月第11次印刷。请支持正版! 《Real-Time Rendering 3rd》提炼总结 -- https://blog.csdn.net/poem_qianmo/article/details/70544201
|