众所周知,图形渲染都是由GPU来完成的。
GPU优势
- GPU具有高并发结构,因此在处理图形数据和复杂算法得效率上要高于
CPU。
2.GPU采用流式并行计算模式,可对每个数据进行独立得并行计算,所谓“对数据进行独立计算”,即,流内任意元素得计算不依赖于其它同类型数据。在顶点处理程序中,可以同时处理N个顶点数据。
GPU的缺陷
由于“任意一个元素的计算不依赖于其他同类型数据”,导致“需要知道数据之间相关性”的算法。GPU中的控制器少于CPU,导致控制能力有限。
什么是渲染管线
渲染管线也称渲染流水线,是显示芯片内部处理图形信号相互独立的并行处理单元。一个流水线是一序列可以并行和按照固定顺序执行的阶段。每个阶段都从它的全一阶段接受输入,然后把输出发给随后的阶段。
3D应用接口会调用OpenGL,Dx的API接口是硬件和图形处理程序的中间层。
光栅化就是把计算机显卡中计算的数据进行细分
片段着色器最终的目的是编程屏幕上显示的像素
导入素材到unity >调用图形API进行GPU运算 >顶点运算结果交给像素处理器 >交给帧缓冲。
帧缓冲容纳计算机屏幕依次显示的信息,但不止包含颜色信息。
1.渲染管道线首先进行各种Transform(顶点坐标变化),TexGen(纹理生成),Lighting(光照)
(不利于用户扩展)->被Vertex Shader替代
2.裁剪、深度测试:不去渲染看不见的面,以及相机最远看到哪里(超过即剔除)
3.纹理采样:光栅化阶段。从纹理中找到对应点数据,雾化就是需不需要将远处朦胧话(片段着色器能力范围)
4.Alpha测试: 绘制透明物体,
5.Blending:混合最终图像。
CPU通过图形接口调用GPU来渲染,这个调度过程是昂贵的(即DrawCall
),这就会产生性能瓶颈。
Shader和材质、贴图的关系
Shader负责将输入的顶点数据以指定的方式和输入的贴图或颜色组合起来,然后输出。
一句话总结:材质是最终商品,Shader是加工方法,贴图是材料
主流的shader编程语言:
HLSL (DirectX) , GLSL(OpenGL), CG(Nvida)
1.OpenGL是一个功能强大,调用方便的底层图形库。它的特点是与硬件无关的软件接口,可以在不同的平台之间移植。
2.DirectX它只运用与微软的平台。
3.CG 由于 HLSL移植性较差但在游戏领域深入人心;GLSL移植性好但语法独成一家。他们不能互相支持,CG却可以被OpenGL和DirectX广泛支持的图形处理器编程语言。但是CG语言并不是和前两者是同一层次上的语言,而是他们的上层,即CG程序是运行在OpenGL和DX标准顶点和像素着色的基础上的。
怎么选?
如果我们使用unity开发多平台游戏,我们最好选择CG语言。