这算是个 关键字 集合吧,有解释不清楚之处或未解释的可查看原书或者网上查资料
一、渲染基础
1.该书是“shader女神”【冯乐乐】精心打造,有兴趣的朋友一定要去读一读。(我这样做笔记不算抄袭吧)
2.shader:着色器 <--关系紧密--> 渲染流水线(目的在于生成|渲染一张二维纹理):shader只是渲染流水线的一个环节
3.渲染流程三阶段:应用阶段(输出渲染图元)、几何阶段(输出屏幕空间的顶点信息)、光栅化阶段
- 应用阶段:应用主导,cpu负责---准备场景数据(摄像机位置,视椎体,模型,光源...)、粗粒度剔除(culling)、设置每个模型的渲染状态(材质,纹理,shader)、这个阶段最重要的输出是渲染图元,将传递给几何阶段
- 几何阶段:处理所有要绘制的几何相关的事,gpu负责,逐顶点逐多边形操作、输出屏幕空间二维顶点坐标,每个顶点深度值,着色到下一阶段
- 光栅化阶段:将上阶段传递的数据产生屏幕上的像素并渲染,gpu负责,逐顶点插值再逐像素
4.应用阶段:
(1)把数据加载到显存中
HDD->RAM->VRAM
(2)设置渲染状态
设置Vertex/Fragment Shader、光源属性、材质...
(3)调用Draw Call
cpu发起,gpu接收;指向一个需要被渲染的图元列表;gpu接收drawcall后会启动gpu流水线
5.GPU流水线(包括几何阶段与光栅化阶段)GPU渲染的过程
顶点数据->【几何阶段】->【光栅化阶段】->屏幕图像
【几何阶段】:顶点着色器(完全可编程)->曲面细分着色器(可选)->几何着色器(可选)->裁剪(可配置)->屏幕映射(无)
【光栅化阶段】:三角形设置(固定函数)->三角形遍历(固定函数)->片元着色器(完全可编程)->逐片元操作(可配置)
- 顶点着色器:处理单位顶点,cpu输入进来的每个顶点都会调用一次vertexshader;无顶点间关联信息,并行处理速度快;主要完成-坐标变换,逐顶点光照,输出后续阶段数据
- 裁剪:完全在视野内、部分在视野内、完全在视野外
- 屏幕映射:输入单位立方体内的三维坐标,输出转换到屏幕坐标下的二维坐标(dx与gl区别)
- 三角形设置 :根据三角网格顶点计算每条边上的像素坐标
- 三角形遍历:三角形覆盖区域像素插值得到一个片元
- 片元着色器:输入上一阶段对顶点信息插值的结果,输出一个或多个颜色值
- 逐片元操作:片元可见性,测试(深度,模板),合并片元颜色和缓冲区颜色
6.re:Shader含义
- GPU流水线上可高度编程的阶段,由着色器编译出来的最终代码是运行在GPU上的
- 一些特定类型着色器:顶点着色器,片元着色器
- 可控制流水线中的渲染细节(顶点:顶点变换、传递数据;片元:逐像素渲染)
7.要得到出色游戏画面需要包括shader在内的所有渲染流水线阶段的共同参与:设置适当渲染状态、使用合适的混合函数、开启/关闭深度测试|深度写入...
二、Unity Shader基础
1.在Unity中需要配合使用材质和UnityShader(相当于材质是UnityShader的一个”实例化“),再将材质赋给一个GameObject
2.UnityShader != Shader
3.更高级渲染抽象层:ShaderLab-编写UnityShader的一种说明性语言
"ShaderName.shader"
Properties{
//属性
Name{"display name",PropertyType}=DefaultValue
}
SubShader{
//显卡A的子着色器
}
SubShader{
//显卡B的子着色器
}
Fallback "[Default]"
}
4.PropertyType : Int;Float;Range(,);Color;Vector;2D;Cube;3D
5. SubShader=SeriesOf<Pass>+[RenderSetup]+[Tags];每个pass定义一次完整的渲染流程,数量不宜过多;
6.RenderSetup:
- Cull Back|Front|Off;
- ZTest Less Greater|LEqual|GEqual|NotEqual|Always
- Zwrite On|Off
- Blend SrcFactor|DstFactor
7.Tags <k,v>=><string,string>
8.非常旧设备:固定函数着色器
各种光源:表面着色器(移动平台性能问题)
光照数目少,自定义渲染效果:顶点/片元着色器
三、数学基础
1.线性代数 笛卡尔坐标系 左手坐标系-左手定则 右手坐标系-右手定则
2.Unity3D 左手坐标系:模型空间、世界空间
右手坐标系:观察空间
3. 点 (x,y,z)位置
矢量(x,y,z)方向/偏移 相对量
4.V(x,y,z)=>kV=(kx,ky,kz)
V1(x1,y1,z1)+V2(x2,y2,z2)=V(x1+x2,y1+y2,z1+z2)
三角形定则
矢量模:|V(x,y,z)|=(x²+y²+z²)½
单位矢量
点积:投影
叉积:面积(左手右手)
5.矩阵
列矩阵、行矩阵
矩阵乘法
方阵
单位矩阵 逆矩阵
转置矩阵
正交矩阵
变换:缩放平移旋转
模型空间、世界空间、观察空间、裁剪空间、屏幕空间、切线空间
透视投影、正交投影
法线变换
(6.张量 )