《Unity Shader入门精要》读书笔记(抄1)

这算是个 关键字 集合吧,有解释不清楚之处或未解释的可查看原书或者网上查资料

一、渲染基础  

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"

Shader "ShaderName"{
   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定义一次完整的渲染流程,数量不宜过多;

[RenderSetup]+[Tags]可以定义在SubShader下作该SubShader全局设置应用到每个Pass,也可单独设置到每个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.张量 )

原文地址:https://www.cnblogs.com/lenkaset/p/11262981.html