图形学笔记1----基本概念

随声附和 提交于 2019-12-22 17:01:38

边学边记,现在先看的shader入门精要,书上的内容以及自己的理解,以后会慢慢完善

一.渲染管线(渲染流水线)

就是一个物体展示到屏幕的整个过程,分为三个阶段:应用阶段,几何阶段,光栅化阶段

1.应用阶段

这个阶段是准备数据阶段,例如摄像机位置,场景中包含的模型,使用的光源,以及把不可见的物体剔除出去等等。设置每个模型的渲染状态,这些渲染状态包括但不限于使用他的材质。最重要的是渲染所需的几何信息,即渲染图元(一般是点,线面等)

2.几何阶段

这个阶段由几部构成:顶点着色器,曲面细分着色器,几何着色器,裁剪,屏幕映射

顶点着色器(完全可编程):它的输入来自CPU,处理单位是顶点,本身无法创建或者销毁顶点,无法取得顶点与顶点之间的关系。主要的工作是:坐标中变换和逐顶点光照。最基本的完成顶点由模型空间到其次裁剪空间的转换。

曲面细分着色器(可选):用于细分图元

几何着色器:(可选):逐图元着色操作,用于产生更多的图元

裁剪(可配置,不可编程):将不在摄像机内的顶点剔除掉

屏幕映射(不可配置和编程):负责将图片的坐标转换到屏幕坐标系

 

这一阶段最终输出的是:屏幕坐标系下的顶点位置以及它们相关的额外信息,如深度值,法线方向,视角方向等

3.光栅化阶段

这个阶段有几部分构成:三角形设置,三角形遍历,片元着色器,逐片元操作

最重要的目标是:计算每个图元覆盖了哪些像素,以及为这些像素计算他们的颜色。

三角形设置:上一个阶段得到的是一个个顶点,这个阶段就是组合三角形

三角形遍历:检查每个像素是否被一个三角形网格所覆盖,如果被覆盖就会生成一个片元,这个过程就是三角形遍历。片元不是真正的像素,里面的内容是由三个点进行插值计算而来

片元着色器(可编程):输入数据是上一阶段对从顶点着色器进行差值计算而来的结果,最重要的功能是纹理采样

逐片元操作(合并阶段,可配置):主要任务是:1.决定每个片元的可见性(深度测试,模板测试)2.如果通过测试需要把这个片元的颜色值存储在颜色缓冲区进行合并(混合)

                模板测试(可配置):GPU首先读取模板缓冲区中的参考值(refrence value,可编程配置)比较,不符的扔掉,不管一个片元有没有通过都可以根据测试结果修改模板缓冲区,通常是限制渲染区域

                 深度测试(可配置):里面判断每个片元与摄像机的距离,如果大于就抛弃,如果无法通过深度测试,那么无法更改深度缓冲区的值,透明效果与深度测试深度写入密切相关。

合并:如果颜色缓冲区里面该片元位置有值,如果开启混合,那么就会进行混合操作,更新缓冲区的值,如果不开启,那么直接使用该片元的颜色。所以,想实现透明效果就需要开启

双重缓冲:在整个渲染过程中,为了让我们开到渲染过程,所以渲染是在幕后发生的,即后置缓冲,一旦场景被渲染到了后置缓冲区中就会交换前后缓冲区的内容,因此保证我们看到的是连续的。

几何阶段以及之后的数据,顶点数据,纹理等都是在显存中的

二.DrawCall

drawCall是一个指令,即CPU发送到GPU的过程。(CPU把指令放入栈中,GPU从栈中取指令,最费时的是CPU放入的过程(也就是减少DrawCall))。

unity中通关减少drawCall优化项目可以理解为(1个模型发送一个指令,我若是把10个模型合并成一个,只需要发送一个)

 

三.几大空间

由几部分组成:模型空间(model space),世界空间(world space) 观察空间(veiw space) 裁剪空间(clip space,也叫投影举着 projection matrix) 屏幕空间screen space

运算过程太复杂,解释不清楚,,,都是依靠矩阵运算 ,自己也没看明白,以后有机会看懂了再写,关于矩阵运算可以看下我另外一篇:https://blog.csdn.net/qq_35957011/article/details/77172560

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!