-
Shader中的texcoord
–[[
texcoord取得是模型纹理的第一二三四等等纹理坐标
TEXCOORD(n)是指纹理坐标,float2, float3, float4类型。n是指第几组纹理坐标。
texcoord就是存在顶点里的一组数据, 我们可以通过这组数据在渲染的时候进行贴图采样
]] -
Unity最多支持几套UV
–[[
unity一共支持4套uv,在shader编程中,分别叫UV0, UV1, UV2, UV3,而在c#编程中分别叫UV, UV2, UV3, UV4
float2 texcoord : TEXCOORD0 TEXCOORD0代表第一套uv texcoord名字为自定义变量
UV0用于主纹理, UV1用于光照贴图, UV2用于实时动态光照, UV3可进行自定义。
]] -
Unity3D中Material的Tiling和Offset是怎么回事
–[[
Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置。
]] -
Unity_Shader 之TRANSFORM_TEX详解
–[[
简单来说,TRANSFORM_TEX主要作用是拿顶点的uv去和材质球的tiling和offset作运算, 确保材质球里的缩放和偏移设置是正确的Shader提供的方法 o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
TRANSFORM_TEX方法内部的实现 o.uv = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw;
]] -
Unity Shader clip函数详解
–[[
当值不满该值时 clip函数可以丢弃某些像素
举个例子,如果 alpha 值低于 0.3,我们将丢弃它。
该功能可以是:
clip(xx.a - 0.3)
]] -
shader中shader_feature 与 multi_compile 之间的区别
–[[
shader_feature 和 multi_compile 的主要缺点是其中定义的所有关键字均会影响 Unity 的全局关键字计数上限(256 个全局关键字,外加 64 个本地关键字)
shader_feature的用法和multi_compile大致相同 都是通过定义的宏判断一些shader代码的执行
multi_compile 更适合通过代码来全局设置的关键字, 因为没有用到的shader变体也会被添加到程序中去 容易造成内存大的问题 谨慎使用
shader_feature更适用于材质的关键字 shader_feature不会将不用的shader变体添加到程序中
]] -
shader中的变体
–[[
在写shader时,往往会在shader中定义多个宏,并在shader代码中控制开启宏或关闭宏时物体的渲染过程。
最终编译的时候也是根据这些不同的宏来编译生成多种组合形式的shader源码。其中每一种组合就是这个shader的一个变体(Variant)。
]] -
shader中的dot
–[[
我们知道指向光源的方向和法向量的夹角不会大于90度,如果出现大于90度说明光源在平面的背面,我们不需要负光的出现,所以需要“受钳制的光照”
dot 两个向量做点乘 角度越小值越大 也就是面越垂直值越小
]]
-
shader中RenderQueue
–[[
Background:1000
Geometry:2000
AlphaTest:2450
Transparent:3000
Overlay:4000值越大 越先渲染 越靠后显示
]] -
shader中ZWrite ZTest
–[[
ZWrite (默认是ZWrite On, 看ZTest是否通过 通过了才会更新z值) 只有(On/Off)开关
ZWrite 深度写入 新的深度值和深度缓存中的值作比较 小的值显示出来 被遮挡的物体深度大于前面的物体 所以深度写入失败 颜色不会输出深度写入是否刷新根据ZTest是否通过
ZTest 参数
Less (当物体的这个像素的Z值小于当前摄像机在这个像素上的Z值,则通过Ztest)
LEqual(条件变为小于等于)
Greater(条件变为大于)
GEqual(条件变为大于等于)
Equal(条件变为相等)
NotEqual(条件变为不相等)
Always(Ztest永远通过)
Never(Ztest永远不通过)
Off(等同于 ZTest Always)
On(等同于ZTest LEqual)
]] -
遮挡溶解效果
–[[
https://blog.csdn.net/puppet_master/article/details/73478905?spm=1001.2014.3001.5501
]] -
Shader中的内置数学函数
–[[
abs 计算输入值的绝对值。
acos 返回输入值反余弦值。
all 测试非0值。
any 测试输入值中的任何非零值。
asin 返回输入值的反正弦值。
atan 返回输入值的反正切值。
atan2 返回y/x的反正切值。
ceil 返回大于或等于输入值的最小整数。
clamp 把输入值限制在[min, max]范围内。
clip 如果输入向量中的任何元素小于0,则丢弃当前像素。
cos 返回输入值的余弦。
cosh 返回输入值的双曲余弦。
cross 返回两个3D向量的叉积。
ddx 返回关于屏幕坐标x轴的偏导数。
ddy 返回关于屏幕坐标y轴的偏导数。
degrees 弧度到角度的转换
determinant 返回输入矩阵的值。
distance 返回两个输入点间的距离。
dot 返回两个向量的点积。
exp 返回以e为底数,输入值为指数的指数函数值。
exp2 返回以2为底数,输入值为指数的指数函数值。
faceforward 检测多边形是否位于正面。
floor 返回小于等于x的最大整数。
fmod 返回a / b的浮点余数。
frac 返回输入值的小数部分。
frexp 返回输入值的尾数和指数
fwidth 返回 abs ( ddx (x) + abs ( ddy(x))。
isfinite 如果输入值为有限值则返回true,否则返回false。
isinf 如何输入值为无限的则返回true。
isnan 如果输入值为NAN或QNAN则返回true。
ldexp frexp的逆运算,返回 x * 2 ^ exp。
len / lenth 返回输入向量的长度。
lerp 对输入值进行插值计算。
lit 返回光照向量(环境光,漫反射光,镜面高光,1)。
log 返回以e为底的对数。
log10 返回以10为底的对数。
log2 返回以2为底的对数。
max 返回两个输入值中较大的一个。
min 返回两个输入值中较小的一个。
modf 把输入值分解为整数和小数部分。
mul 返回输入矩阵相乘的积。
normalize 返回规范化的向量,定义为 x / length(x)。
pow 返回输入值的指定次幂。
radians 角度到弧度的转换。
reflect 返回入射光线i对表面法线n的反射光线。
refract 返回在入射光线i,表面法线n,折射率为eta下的折射光线v。
round 返回最接近于输入值的整数。
rsqrt 返回输入值平方根的倒数。
saturate 把输入值限制到[0, 1]之间。
sign 计算输入值的符号。
sin 计算输入值的正弦值。
sincos 返回输入值的正弦和余弦值。
sinh 返回x的双曲正弦。
smoothstep 返回一个在输入值之间平稳变化的插值。
sqrt 返回输入值的平方根。
step 返回(x >= a)? 1 : 0。
tan 返回输入值的正切值。
fanh 返回输入值的双曲线切线。
transpose 返回输入矩阵的转置。
tex1D* 1D纹理查询。
tex2D* 2D纹理查询。
tex3D* 3D纹理查询。
texCUBE* 立方纹理查询。
]]
BlendMode
//
// 摘要:
// Blend factor is (0, 0, 0, 0).
Zero = 0,
//
// 摘要:
// Blend factor is (1, 1, 1, 1).
One = 1,
//
// 摘要:
// Blend factor is (Rd, Gd, Bd, Ad).
DstColor = 2,
//
// 摘要:
// Blend factor is (Rs, Gs, Bs, As).
SrcColor = 3,
//
// 摘要:
// Blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad).
OneMinusDstColor = 4,
//
// 摘要:
// Blend factor is (As, As, As, As).
SrcAlpha = 5,
//
// 摘要:
// Blend factor is (1 - Rs, 1 - Gs, 1 - Bs, 1 - As).
OneMinusSrcColor = 6,
//
// 摘要:
// Blend factor is (Ad, Ad, Ad, Ad).
DstAlpha = 7,
//
// 摘要:
// Blend factor is (1 - Ad, 1 - Ad, 1 - Ad, 1 - Ad).
OneMinusDstAlpha = 8,
//
// 摘要:
// Blend factor is (f, f, f, 1); where f = min(As, 1 - Ad).
SrcAlphaSaturate = 9,
//
// 摘要:
// Blend factor is (1 - As, 1 - As, 1 - As, 1 - As).
OneMinusSrcAlpha = 10