资料
第一课 图形硬件简史与可编程管线
课时总结
- 2003年开始正式进入可编程GPU阶段
- GPU的并行处理能力强于CPU
- 目前GPU无法代替CPU
第二课 shader和渲染管线
- GPU前段模块->图源装配:
过去只有集成在硬件当中的顶点着色器,现在可编程 - 光栅化:
把计算机显卡当中运算的数据进行一个细分用于适配屏幕上具体的每一个像素的显示 - 像素运算:
光栅化不等同于像素运算.像素运算最终反映的是颜色,光栅化过后得到的结果是帧缓存.这个过程中可以加入片段着色器.
- Vertex Processor
顶点处理程序,运算的结果将会交给像素处理器 - Frame Buffer
帧缓冲中容纳了是计算机依次显示所要使用的数据,但不只是屏幕上用语显示的颜色的信息,可能还有其他的附加信息.比如深度值
- Transform, TexGen, Lighting
- Transform
模型的空间变换(针对顶点的空间几何变换) - Texture Generator
纹理坐标的生成,主要用于在顶点当中取得纹理坐标,纹理坐标转化为uv取值的范围 - Lighting
光照
- Transform
- Vertex Shader
改变上个模块的光照,变换,纹理生成等 - Culling Depth Test
- Culling
裁剪.物体在镜头面前展示,背对摄像头的面看不到,可能就会被裁剪,不处理看不到的面的顶点数据. - Depth Test
深度测试.范围超过摄像头最近或最远的渲染范围之后,也会被剔除
- Culling
- Texturing Fog
纹理采样.进入光栅化阶段.从纹理当中找到纹理中对应的一个点 - Fragmen Shader
远处的物体可能需要雾化处理.处于片段shader的可编程范围 - Alpha Test
绘制半透明或全透明物体 - Blending
混合最终的图像
可编程能力是两个部分,一部分是变换和光照,使用顶点shader编写顶点着色器
如何采样,计算颜色以及雾化处理等等,这部分放到片段着色器
unity当中,优化主要部分是减少游戏调用gpu渲染的调度次数.CPU搜集数据,产生GPU调度数据.这个过程是昂贵的.
shader和材质,贴图的关系
shader实际上是一小段程序.负责将输入的顶点数据以指定的方式和输入的贴图或者颜色组合起来然后输出.
绘图单元可以依据这个输出将图像绘制到屏幕上.
输入的贴图或者颜色等,加上对应的shader,以及对shader]d特定的参数设置,将这些内容(shader及输入参数)打包存储在一起.得到的就是一个Material(材质).之后我们便可以将材质赋予三维物体来渲染(输出)了.
材质好比引擎最终的商品,shader是生产这种商品的加工方法,而贴图是原材料.
课时总结
- Shader是图形可编程方案的程序片段
- 渲染管线是一种计算机从数据到最终图形成像的形象描述
- 材质是商品,shader是方法,贴图是材料
第三课 shader的三大主流高级编程语言
- HLSL
基于DirectX的High Level Shading Language - GLSL
基于OpenGL的OpenGL Shading Language - CG
NVIDIA公司的C for Graphic
第四课 Unity Shader的组织形式
- surface shader
unity推荐和鼓励的shader.图形管线能够用于识别的,就是vertex and fragment shader.surface shader是对vertex and fragment shader的一种包装.unity最终会把surface shader编译成能被硬件识别和调用的vertex and fragment shader - vertex and fragment shader
- fixed function shaders
固定管线的shader.
Shaderlab 语法基本结构
1 | Shader "MyShader" { |
unity自带shader
- Unlit
不发光 - VertexLit
顶点光照 - Diffuse
漫反射.不仅仅在顶点上进行光照计算,在片段上进行光照计算 - Normal Mapped
法线贴图.用的比较多.通过一张贴图进行采样.贴图是关于法向量存储的贴图.把这张图采样出的数据作为法向量再进行光照计算.主要目的是当几何模型面片数量,顶点数量不太多,为表达丰富的细节. - Specular
高光.玻璃等 - Normal Mapped Specular
高光法线贴图.较昂贵 - Parallax Normal mapped
视差法线贴图 - Parallax Normal mapped Specular
高光视差法线贴图
Fixed function shader
固定功能的shader.功能有限但是性能很好
Surface Shader
Surface Shader无需编写pass通道