Shader相关笔记

  1. Shader中的texcoord
    –[[
    texcoord取得是模型纹理的第一二三四等等纹理坐标
    TEXCOORD(n)是指纹理坐标,float2, float3, float4类型。n是指第几组纹理坐标。
    texcoord就是存在顶点里的一组数据, 我们可以通过这组数据在渲染的时候进行贴图采样
    ]]

  2. 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可进行自定义。
    ]]

  3. Unity3D中Material的Tiling和Offset是怎么回事
    –[[
    Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置。
    ]]

  4. 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;
    ]]

  5. Unity Shader clip函数详解
    –[[
    当值不满该值时 clip函数可以丢弃某些像素
    举个例子,如果 alpha 值低于 0.3,我们将丢弃它。
    该功能可以是:
    clip(xx.a - 0.3)
    ]]

  6. 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变体添加到程序中
    ]]

  7. shader中的变体
    –[[
    在写shader时,往往会在shader中定义多个宏,并在shader代码中控制开启宏或关闭宏时物体的渲染过程。
    最终编译的时候也是根据这些不同的宏来编译生成多种组合形式的shader源码。其中每一种组合就是这个shader的一个变体(Variant)。
    ]]

  8. shader中的dot
    –[[
    我们知道指向光源的方向和法向量的夹角不会大于90度,如果出现大于90度说明光源在平面的背面,我们不需要负光的出现,所以需要“受钳制的光照”
    dot 两个向量做点乘 角度越小值越大 也就是面越垂直值越小
    在这里插入图片描述

]]

  1. shader中RenderQueue
    –[[
    Background:1000
    Geometry:2000
    AlphaTest:2450
    Transparent:3000
    Overlay:4000

    值越大 越先渲染 越靠后显示
    ]]

  2. 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)
    ]]

  3. 遮挡溶解效果
    –[[
    https://blog.csdn.net/puppet_master/article/details/73478905?spm=1001.2014.3001.5501
    ]]

  4. 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

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值