第一节:图形处理器简史
GPU发展简史
GPU英文全称Graphic Procssing Unit。
T&L变换和光照流水线
可编程GPU
GPU的优点和缺点
第二节:Unity Shader
Shader和渲染管线
什么是shader
中文翻译是着色器,是一种较为短小的程序片段,用于告诉图形硬件如何计算和输出图像,过去由汇编语言来编写,现在也可以使用高级语言来编写。一句话概括:shader是可编辑图形管线的算法片段。
它主要分为两类,vertexshader和fragmentshader;
什么是渲染管线
渲染管线也称为渲染流水线,是显示芯片内部处理信号相互独立的并行处理单元。一个流水线是一序列可以并行和按照固定顺序进行的阶段。就像一个在同一时间内,不同阶段不同汽车一起制造的装配线,传统的图形硬件流水线以流水的方式处理大量的顶点、几何图元和片段。
Gpu前段模块到 →图元装配阶段
:在过去是硬件决定的,不能也不可能对其进行编程。
现阶段加入了顶点着色器就是可编程渲染管线的加入带来的好处,用户可以对输入进行控制。(片段着色器同理)
帧缓冲:framebuffer
计算机一次现实需要的数据;(深度,颜色)
图片详解!!
vertexshader:
顶点处理的阶段,也是顶点shader的工作范围
Transform:针对顶点空间集合变换。
,texgen:纹理坐标→uv
,lighting:光照
T&L:变换光照流水线。可编程shader出来之前之前是被集成的
当图形硬件有可编程能力后,固定编写的模块(T&L)就被vertexshader取代了
、、、、、、、、、、、、、、、、、、、、、、、、、
CulingDepthTest:裁剪和深度测试。
裁剪:为了减少GPU的工作量
深度测试:锥形视距的剔除。
、、、、、、、、、、、、、、、、、、、、、、、、、、、
TexturingFog:纹理采样和物化处理
光栅化处理的阶段,也是片段shader的工作范围
纹理采样:光栅化阶段判别屏幕上应该显示什么颜色,要进行采样,从纹理当中找到某一个点,绘制色彩。
雾化处理:近处清晰,远处雾化。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
AlphaTest
测试alpha,绘制半透明或者全透明的物体。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
Blending
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
混合最终图像。
在unity优化当中,重要的一点就是减少drawcall的调用。
Drawcall:图形数据通过api调用gpu的过程。(包括收集和传递图形数据)
Shader和材质贴图之间的关系
shader 实际上就是一小段程序,它负责将输入的顶点数据以指定的方式和输入的贴图或者颜色等组合起来,然后输出。绘图单元可以根据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的shader,以及对shader的特定的参数设置,将这些内容(shader以及输入参数)打包储存在一起,得到的就是一个matiarial(材质)之后我们便可以将材质赋予三维物体进行渲染输出了。
材质好比引擎最终使用的商品,shader好比生产这种商品的加工方法,贴图就是原材料。
第三节:三大主流高级编程语言
Shader language 的发展方向是设计出在便携性方面可以和c++和\java相比的高级语言,“赋予程序员灵活而方便的编程方式”,并“尽可能的控制渲染过程”同时“利用图形硬件的并行性,提高算法的效率”
HLSL:基于DrectX的High Level shding language
GLSL:基于OpenGL的OpenGL shading Language
CG:NVIDIA的C for Graphic
Shader的高级语言