看视频总结的unity3d的shader大略的内容

学习过程的疑问:
1,为什么不先裁剪,再顶点着色器。这样不是浪费了一些操作吗?


看视频需要记录的内容:

DrawCall:CPU准备数据到GPU的操作,DrawCall操作相对于GPU的执行速度来说,非常慢,所以GPU能做多少事和DrawCall大小有关。DrawCall为100表示需要转载数据的次数为100次,如果多个物体使用同一个shader,那多个物体将只有一个DrawCall,减少DrawCall的一个方法是让物体共用一个shader。比如:NGUI中2个使用同一个shader的图片中间夹了一个使用另一个shader的图片时会变成3个DrawCall,可以根据CPU处理的规则将DrawCall变成2个。

CPU与GPU:一个模型有1000个顶点,在处理这些顶点时,CPU是按照顺序依次执行1000次处理每个顶点,顶点可以共享数据。GUP是多核的,GPU可以并行的执行多个顶点,比如:一次性执行100个顶点,分10次处理完,顶点数据相互不能共享。

OpenGL和DirectX:图像应用接口。显卡是硬件,显卡会更新换代,内部架构可能会发生改变。显卡驱动可以控制兼容不同的显卡,提供操作显卡的一些基础操作。图形应用接口(OpenGL):居于显卡驱动提供的基础操作,提供一些更加便捷的显卡操作。Unity3d在shader中编写DirectX的代码,获得便捷的操作。

顶点着色器和几何着色器和片元着色器:有3个DrawCall意味着GPU要分3次计算,假如第1个DrawCall有10个模型共10000个点,GPU一次并行执行1000个点,分10次执行完,10000个点都会依次执行同一个shader里的同一个函数,即顶点着色器,几何着色器,片元着色器。这意味着顶点着色器要执行10000次。片元着色器根据插值分配出片元个数,也许有10000*100个,那GPU要执行1000次。几何着色器是在顶点着色器执行完成之后,在这个结果上再做些细化的操作,比如10个模型有10000个点,如果导入粗糙的一点的模型为8000个点,再在几何着色器中计算重新生成10000个点,这样CPU在准备DrawCall数据时就可以更快一点。

GPU渲染流程:应用阶段 + 几何阶段 + 光栅化阶段
顶点着色器:每一个点都执行该函数,计算顶点的颜色,改变顶点的位置。
几何着色器:细化,做自己想要的操作,产生更多的数据。
裁剪:去掉一些不需要的数据。
屏幕映射:将模型三维数据变成屏幕二维数据,并保存Z轴数据。

三角形设置:连线成三角形,做些基本操作。
三角形变换:根据面生成片元数据。比如插值算法。
片元着色器:每个片元执行相应的函数。
逐片元操作:根据Z轴信息,根据一些信息,将前后的片元融合。比如:半透明。


 

 

 

 

 

 

 

你可能感兴趣的:(unity,shader学习)