Shader库中的输入输出结构体
1/
.cginc文件 可以被加载进我们的Shader中
例如
写如下代码在CGPROGRAM中,加载UnityCG.cginc文件
#iclude "UnityCG.cginc"
这样我们就可以直接使用“Unity CG.cginc”文件内的变量和方法了。
2/
UnityShaderUtiilities.cginc
UnityShaderVariables.cginc
以上俩个.cginc文件是默认被加载进Shader中的。
Shader库中的输入输出结构体
1/
.cginc文件 可以被加载进我们的Shader中
例如
写如下代码在CGPROGRAM中,加载UnityCG.cginc文件
#iclude "UnityCG.cginc"
这样我们就可以直接使用“Unity CG.cginc”文件内的变量和方法了。
2/
UnityShaderUtiilities.cginc
UnityShaderVariables.cginc
以上俩个.cginc文件是默认被加载进Shader中的。
属性控制
内容概要
1/属性快
Properties
{
_MainTex("Texture",2D) = "white"{ }
_Color("Color",Color) = (1,1,1,1)
}
定义的属性块需要在CGPROGRAM中再次进行定义
.xyzw 和 .rgba 是一样的。
当我们的一个变量是3维的(例如:float3 color)
那么我们需要用一个3维的去与他相乘,(例如:color *= _Color.rgb),如果用非3维的向量去与之相乘会报错。
输出结构体
构造函数a2v的命名
a: application 应用
2:to 到
v: vert 顶点着色器
构造函数v2f的命名
v: vert 顶点着色器
2:to 到
f:frag 片元着色器
本节概要
Shader中2个构造函数名字的含义。
2个构造函数中各个成员语义的意义。
顶点着色器返回值和写法讲解。
如何将区间(-1,1)转变为(0,1)。
Shader 输入结构体
:SV_TARGET(是渲染到RenderTarget中,RenderTarget是默认的缓存叫做帧缓存)
:POSITION(语义:输入的模型顶点信息)
:SV_POSOTION(语义:顶点输出之后的裁剪空间的顶点信息)
以上三种都是CG,HLSL中的语义,语义是告诉程序,我们输入的是什么。
例如:顶点着色器的参数(float4 v:POSITION)
float4告诉我们这是一个4维的变量。
:POSITION告诉我们这是输入的模型顶点信息。
理解a2v结构体,这个a2v名字可以随便命名,但是要确保和地下顶点着色器中的参数名字保持一直。
结构体中的每一个成员,都需要有一个语义去标注。
理解 vert( ) 方法 的结构:
1/返回值float4是被 :SV_POSITION语义标注的
代表裁剪空间顶线信息。
2/参数a2v 是一个结构体,考虑到可能要输入大量的模型空间的信息。例如,顶点信息,法线信息,uv信息等,固使用结构体来作为方法参数。
ab = x1x2 + y1y2
ab = |a||b|cos&
几何意义:用于求两个向量的夹角
cos&
正为锐角
0为垂直
负为钝角
Pass中Tags独有属性
LightMode 定义该pass通道在Unity渲染流水中的角色
RequireOptions 满足某些条件时才渲染该Pass通道
Render设置
Cull off/back/front 选择渲染哪个面
ZTest Always/Less Greater/LEqual/GEqual/NotEqual 深度测试
ZWrite off/on深度写入
Blend SrcFactor DstFactor 混合
LOD //不同情况下使用bu
Tags 标签
Queue //渲染顺序
RenderType //着色器替换功能
DisableBatching //是否进行合批
ForceNoShadowCasting //是否投射阴影
IgnoreProjector //受不受Projector的影响,通常用于透明物体
CanUseSpriteAltas //是否用于图片的shader,通常用于UI
PreviewType //用作shader面板预览的类型
subshader语义块
Tags
unity属性类型
Int
float
Range(x,y):范围值
Color
Vector (x,y,z,w)
2D
Cube
3D
应用阶段-几何阶段-光栅化阶段
cpu应用阶段:
https://blog.csdn.net/qq_42461824/article/details/107672111
这一节没有阴影是因为没有定义_Color 属性
导致无法计算阴影
课程勘误:对于向量的点积和叉积,都是在[0.180]度讨论的。不存在-90这一说
顶点数据为应用阶段传入的。
带宽
漫反射:法线n 光源l 法线与光源夹角θ
漫反射强度:θ=90最弱 θ=0最强
向量n l
2cosθ*n=2(n*l)*n
n*l=|n|*|l|*cosθ
因为向量n l是单位向量
所以向量n*l=cosθ
BRDF光照模型=>次世代渲染
ssscai'z
渲染设置
Cull off/back/front //选择渲染那个面
ZTest Always/LessGreater/LEqual/GEqyal/Equal/NotEqual//深度测试
Zwrite off/on //深度写人
Blend Srcfactor DstFactor// 混合
LOD 100 //不同情况下使用不同的LOD,到达提升性能