US2S2L5-2——States-渲染状态
US2S2L5-2——States-渲染状态 回顾: 知识必备——片元 SubShader的基本构成:SubShader语句块中主要由3部分构成:渲染标签,渲染状态,n个渲染通道 12345 |--------Tags(渲染标签) |--------States(渲染状态)SubShader---|--------Pass(渲染通道1) |--------Pass(渲染通道2) |--------....(渲染通道n) 本章代码关键字 12345678910111213141516171819202122232425//设置剔除状态Cull Back //背面剔除Cull Front //正面剔除Cull Off //不剔除//是否写入深度缓冲ZWrite On ...
US2S2L5-1——Tags-渲染标签
US2S2L5-1——Tags-渲染标签 回顾:SubShader的基本构成 SubShader语句块中主要由3部分构成:渲染标签,渲染状态,n个渲染通道 12345 |--------Tags(渲染标签) |--------States(渲染状态)SubShader---|--------Pass(渲染通道1) |--------Pass(渲染通道2) |--------....(渲染通道n) 本章代码关键字 1234567891011121314151617181920Tags { } //标签块,可以声明一系列标签名与标签值的键值对"Queue" //这个标签会确定物体的渲染顺序 "Background" //最早被渲染的物体的队列,一般用来渲染天空盒或者背景,队列号1000 ...
US2S2L5——Shader的子着色器
US2S2L5——Shader的子着色器 回顾:ShaderLab的基本结构 ShaderLab主要由4个部分组成 Shader的名字 Shader的属性 1~n个子着色器 备用的Shader 本章代码关键字 1SubShader { } //子着色器代码块,包括渲染标签,渲染状态,n个渲染通道,可声明多个,Unity选择第一个能够在当前显卡运行的SubShader SubShader语句块 每一个Shader中都会包含至少一个 SubShader 当Unity想要显示一个物体的时候,就会在Shader文件中去检测这些 SubShader 语句块 然后选择第一个能够在当前显卡运行的 SubShader 进行执行 因此在一个Shader当中实现一些高级效果时,为了避免在在某些设备上无法执行 可能会存在多个 SubShader 语句块,用于适配这些低端设备 SubShader 当中包含最终的渲染相关代码,决定了最终的渲染效果 SubShader的基本构成 SubShader语句块中主要由3部分构成 12345 ...
US2S2L4——Shader的属性
US2S2L4——Shader的属性 回顾:ShaderLab的基本结构 ShaderLab主要由4个部分组成 Shader的名字 Shader的属性 1~n个子着色器 备用的Shader 本章代码关键字 123456789101112131415Properties { } //属性在该语句块内声明_属性名("在Inspector窗口上显示的属性名", 类型) = 默认值 //属性的声明方法,要注意属性名默认前缀为'_'//数值类型,以一个数值作为默认值,数值不需要加fInt //整形,虽然提供了整数,但是编译时最终都会转换为浮点型Float //浮点型,在ShaderLab里,浮点数字面量不需要加fRange(,) //范围浮点型,需要在括号内()填写最小值和最大值//颜色与向量类型,以(num1,num2,num3,num4)作为默认值,其中的数值不需要加fColor ...
US2S2L3——Shader的名字
US2S2L3——Shader的名字 回顾:ShaderLab的基本结构 ShaderLab主要由4个部分组成 Shader的名字 Shader的属性 1~n个子着色器 备用的Shader 本章代码关键字 1Shader //在该关键字后为该Shader命名,Shader的名字决定了在材质面板的选择路径,不要使用中文命名! Shader的名字 直接修改shader文件中shader后的名字即可 注意: Shader名字不可用中文命名! Shader名字最好和文件名保持一致 Shader的名字决定了在材质面板的选择路径
US2S2L2——ShaderLab的基本结构
US2S2L2——ShaderLab的基本结构 ShaderLab的基本结构 ShaderLab主要由4个部分组成 Shader的名字 Shader的属性 1~n个子着色器 备用的Shader 123456789101112131415161718192021222324Shader "着色器名字" { //第二部分 Properties { //材质面板上可以看到的属性 } //第三部分 SubShader { //顶点-片段着色器 或 表面着色器 或 固定函数着色器 } //如果发现这个SubShader不可用,就会向后寻找可用的SubShader SubShader { //更加精简的版本 //目的是适配旧设备 } //.....可以有n个SubShader代码块 ...
US2S2L1——材质与Shader
US2S2L1——材质与Shader Unity Shader 和 Shader 的区别 Shader 是一个更通用的概念,用于描述图形渲染程序中的着色器程序,而 Unity Shader 是特指在 Unity 中使用的着色器 你可以认为 Unity Shader 是对 Shader 的一种封装,它是对底层图形渲染技术的封装, 它提供了一种叫做 ShaderLab 的语言,来让我们更加轻松的编写和管理着色器 我们在这一阶段主要对 Unity Shader 当中的 ShaderLab 进行学习 我们之后的学习在提到 Shader 这个词时,主要指的就是 Unity Shader Unity中的材质和Shader 在 Unity 中,材质和 Shader 是密不可分的两兄弟,想要在 Unity 中使用 Shader 就必须要配合材质进行使用,其中: 材质 材质我们也可以称为材质球,它定义了模型网格的外观 材质包含对一个着色器的引用,并通过一组属性(例如颜色、纹理等等信息)来配置着色器 一个模型可以有多个材质,每个材质应用于模型的不同部分 在 C#...
US2S2——ShaderLab语法
US2S2——ShaderLab语法 ShaderLab Unity...
US2S1L19——屏幕空间变换
US2S1L19——屏幕空间变换 知识回顾 在渲染管线中,顶点、法线等相关模型数据会经过以下的空间变换 模型空间 → 世界空间 → 观察空间 → 裁剪空间 → 屏幕空间 坐标空间变换规则一般有两种 方式一:通用的坐标空间变换规则(存在缩放时,轴向单位向量*缩放因子) Ms−f=(kx0000ky0000kz00001)(∣∣∣∣XsYsZsOs∣∣∣∣0001)M_{s-f} = \begin{pmatrix} kx & 0 & 0 & 0 \\ 0 & ky & 0 & 0 \\ 0 & 0 & kz & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} | & | & | & | \\ X_s & Y_s & Z_s & O_s \\ | & | & | & | \\ 0...
US2S1L18——裁剪空间变换的意义
US2S1L18——裁剪空间变换的意义 知识回顾 齐次裁剪空间 齐次裁剪空间是通过将摄像机的视锥体投影到一个规范化的立方体(长宽高都为2,位于原点)而转换来的。 这个立方体就是齐次裁剪空间。是为了让我们可以更通用、便捷的来进行裁剪工作 观察空间到裁剪空间变换要分情况考虑 摄像机为正交投影时: 将视锥体中心位移到观察空间原点中心 将长方体视锥体的xyz坐标范围映射到(-1,1)长宽高为2的正方体中 正交投影变换矩阵为: (1Aspect×Size00001Size0000−2Far−Near−Near+FarFar−Near0001)\begin{pmatrix} \frac{1}{Aspect \times Size} & 0 & 0 & 0 \\ 0 & \frac{1}{Size} & 0 & 0 \\ 0 & 0 & -\frac{2}{Far - Near} & -\frac{Near+Far}{Far - Near} \\ 0 & 0 & 0...