Unity入门精要(笔记)

Draw Call:理解为一个命令,由CPU发起,GPU接收,命令指向一个需要被渲染的图元列表,计算数据后输出为像素

顶点着色器:每个定点都会调用一次,完成坐标的变换(将定点坐标从模型空间转换到其次裁剪空间)和逐定点的光照。

三角形设置:由得到的信息计算每个图元覆盖的像素,计算像素的颜色

三角形遍历:检查每个像素是否被一个三角网格覆盖。被覆盖则生成一个片元(片元并不是真正意义上的像素)

片元着色器(像素着色器):进行逐片元的操作,输入的是对顶点着色器输出的信息插值得到的结果(为了在片元着色器中进行纹理采样,通常在定点着色器阶段输出每个顶点对应的纹理坐标)

逐片元操作:决定片元的可见性,混合颜色信息

HLSL(DirectX):High Level Shading Language

Cg(Nvidia):C for Graphic

GLSL(OpenGL):OpenGL Shading Language

DrawCall数量影响:DrawCall之前CPU向GPU提交数据,DrawCall多时,过多的CPU提交数据造成CPU过载

Unity Shader:用ShaderLab编写,ShaderLab是Unity提供的编写UnityShader的一种说明性语言

通过Shader名称的字符串中添加'/'修改对应Shader出现在菜单中的位置

Properties:用于包含需要显示在Inspector面板中的属性的语义块

\\ Example
Properties{
  Name("display name", PropertyType) = DefaultValue
}

SubShader

  • 一个Shader中至少包含一个SubShader
  • Unity会选择第一个可以在当前平台使用的SubShader,都不行的话使用Fallback指定的UnityShader
  • SubShader中会定义一系列的Pass,RenderSetup,Tags

常见渲染状态

  • Cull:设置剔除模式,背面(Back),证明(Front),关闭(Off)
  • ZTest:设置深度测试使用函数
  • ZWrite:开启和关闭深度写入
  • Blend:开启并设置混合模式

Pass语义块

  • 通过Name "MyPassName"命名,从而实现复用
  • 复用使用UsePass "MyShader/MYPASSNAME",PassName部分要使用全大写

Fallback:如果所有的SubShader都用不了的话就使用Fallback提供备选的Shader

表面着色器(Surface Shader)

  • 需要代码量少,但是渲染代价比较大
  • 处理很多光照细节

顶点/片元着色器(Vertex/Fragment Shader)

  • 代码复杂但是灵活度高
  • 代码写在Pass语义块内,自己定义每个Pass的Shader代码

Unity Shader并非是真正的Shader

  • Unity里,Unity Shader指的只是一个ShaderLab文件
  • Unity Shader可以同时编写顶点着色器和片元着色器
  • 本质上说Unity中只存在定点/片元着色器

Unity中的笛卡尔坐标系

  • 对于模型空间和世界空间,使用的是左手系
  • 观察空间使用的是右手系

点(Point):维度空间里面的一个位置,主要为二维空间或者三维空间

矢量(vector):包含了模和方向的有向线段,小写粗体表示,通常用于相对于某个点的偏移

单位矢量:模为1的矢量,也称为归一化的矢量,将矢量转化成单位矢量的过程叫做归一化,单位矢量使用小写粗体字符上添加'^'表示

矢量的点积

  • 也称为内积
  • dot(a,b)表示两个矢量的点积,计算为矢量对应的分量分别相乘。
  • 点积的其中一个几何意义就是投影,一个矢量a点积一个矢量b,除以a模则是ba上的投影,除以b的模则是ab方向上的投影
  • 正负表示与单位矢量a方向相同或者相反
  • 一个矢量与自身进行点积,结果是矢量模的平方
  • 两个单位矢量的点积是对应的余弦值

矢量的叉积

  • 也成为矢量的外积
  • 计算的结果仍然是一个矢量
  • axb = (aybz - azby, azbx - axbz, axby - aybx),计算的角标是按照xyz连续相邻
  • 不满足交换率
  • 点积的向量的长度为a的模和b的模乘以sin夹夹角值
  • 左手系和右手系不会对计算结果产生影响,影响的知识三维空间中视觉表现

矩阵(Matrix)

  • 由mxn个标量组成的长方形数组
  • 矩阵乘法满足结合率不满足交换率

方块矩阵

  • 简称方阵,行数和列数相等的矩阵
  • 有对角元素,对角元素为行数和列数相等的元素

对角矩阵

  • 对角矩阵是除了对角元素外都为0的对角矩阵

单位矩阵

  • 将原矩阵的第i行变成了第i列,即为转置矩阵

逆矩阵

  • 矩阵可逆的前提是方块矩阵
  • 如果矩阵有逆矩阵则说矩阵可逆
  • 矩阵的行列式不为0,则矩阵可逆
  • 转置矩阵的逆矩阵是逆矩阵的转置

正交矩阵

  • 如果一个方阵和其转置矩阵的相乘为单位矩阵则为正交矩阵

你可能感兴趣的:(Unity入门精要(笔记))