zoukankan      html  css  js  c++  java
  • 第58天shader混合命令、颜色运算、顶点/片元着色、属性类型、语义、坐标空间、Unity内置矩阵、纹理采样、Cg函数

    混合命令(Blend)

    语法

    Blend <SrcFactor> <DstFactor>

    SrcFactor, DstFactor叫做混合因子

    最终的混合结果

    新颜色 * SrcFactor + 旧颜色 * DstFactor

    新颜色:当前Pass块计算出来的颜色

    旧颜色:当前颜色缓冲区的颜色或上一个Pass块计算出的颜色

    混合因子的参数

    One:1

    Zero:0

    SrcColor:当前计算出来的颜色

    SrcAlpha:当前计算出来的透明度

    DstColor:当前颜色缓冲区的颜色或上一个Pass块计算的颜色

    DstAlpha:当前颜色缓冲区的透明度或上一个Pass块计算的透明度

    OneMinusSrcColor:1 - SrcColor

    OneMinusSrcAlpha:1 - SrcAlpha

    OneMinusDstColor:1 - DstColor

    OneMinusDstAlpha:1 - DstAlpha

    例如:Blend One One

    假设当前Pass计算的颜色是(1,0,0,1),上一个Pass块计算的颜色是(0,1,0,1)

    混合结果 = (1,0,0,1) * 1 + (0,1,0,1) * 1 = (1,1,0,1)

    颜色运算法则

    color1:(r1, g1, b1, a1)

    color2:(r2, g2, b2, a2)

    color1 + color2  :(r1 + r2, g1 + g2, b1 + b2, a1 + a2)

    color1 - color2 :(r1 - r2, g1 - g2, b1 - b2, a1 - a2)

    color1 * color2:(r1 * r2, g1 * g2, b1 * b2, a1 * a2)

    1 - color1:(1 - r1, 1- g1, 1 - b1, 1 - a1)

    1 + color1:(1 + r1, 1 + g1, 1 + b1, 1 + a1)

    1 * color1:(1 * r1, 1 * g1, 1 * b1, 1 * a1)

    多个Pass块

    所有的Pass都会执行,如果没有特殊的Blend命令,那么最终颜色以最后一个Pass计算出来的为准

    顶点/片元着色器

    语法使用的Cg语言的规范,Unity支持HLSL语言

    组成

    顶点函数

    片元函数

    渲染管线

    应用程序阶段(CPU)

    CPU与内存通信获取物体的顶点数据(顶点坐标,法线,切线,纹理坐标(uv坐标))

    顶点坐标,法线,切线都是物体本身的模型空间下物体坐标系

    将数据组成一个图元传递到GPU中,进入几何阶段

    几何阶段(GPU)

    变换坐标:将模型空间下的顶点坐标转换到裁剪与屏幕空间

          通过矩阵进行转换

    对CPU传递来的数据处理完毕后,传递下一个光栅化阶段

    顶点函数在几何阶段由GPU自动调用

    光栅化阶段(GPU)

    根据上一个阶段传递来的数据,计算最终像素颜色

    片元函数在光栅化阶段由GPU自动调用

    属性类型与Cg类型的对应关系

    属性Color

    fixed4  float4

    属性Vector

    fixed4  float4

    属性float

    float

    属性Range

    float

    属性2D

    sampler2D

    属性Cube

    samplerCUBE

    语义

    应用程序到顶点函数的语义

    修饰顶点函数的参数的

    POSITION

    模型空间下的顶点坐标

    float4

    NORMAL

    模型空间下的顶点的法线

    float3

    TANGENT

    模型空间下的顶点的切线

    float4

    TEXCOORD<0-N>

    顶点的纹理坐标,也叫UV坐标

    TEXCOORD0:第1套纹理坐标

    float2

    UV坐标的取值范围:0-1

    COLOR

    顶点颜色

    fixed4

    顶点函数到片元函数的语义

    修饰顶点函数的返回值与片元函数的参数的

    SV_POSITION

    裁剪与屏幕空间下的坐标

    必须语义,顶点函数的返回值必须有该语义

    float4

    NORMAL

    通常是指法线

    非必须语义

    float3

    COLOR0

    通常指颜色

    非必须语义

    fixed4

    COLOR1

    通常指颜色

    非必须语义

    fixed4

    TEXCOORD<0-N>

    纹理坐标

    非必须语义

    片元函数的输出语义

    修饰片元函数的返回值

    SV_Target:渲染目标的颜色

    坐标空间

    模型坐标空间

    模型轴心点为原点

    轴向受模型的角度所影响

    世界坐标空间

    世界的中心点为原点

    观察坐标空间

    摄像机为原点

    轴向受摄像机的角度所影响

    Unity中的观察坐标系是右手坐标系

    原点是摄像机,x轴正方向摄像机的右方,y轴正方向摄像机的上方,z轴正方向是摄像机的后方

    裁剪与屏幕坐标空间

    切线空间

    Unity的内置矩阵

    UNITY_MATRIX_MVP

    模型空间 -> 屏幕空间

    UNITY_MATRIX_M

    模型空间 -> 世界空间

    UNITY_MATRIX_V

    世界空间 -> 观察空间

    UNITY_MATRIX_P

    观察空间 -> 屏幕空间

    UNITY_MATRIX_MV

    模型空间 -> 观察空间

    UNITY_MATRIX_VP

    世界空间 -> 屏幕空间

    纹理采样

    模型的顶点都有一套或多套纹理坐标,也叫UV坐标

    图片都有一个纹理坐标系,图片的左下角为纹理坐标系的(0,0)点,图片的右上角为(1,1),图片的右下角(1,0),图片的左上角(0,1),图片的中心位置(0.5,0.5)

    所谓纹理采样,就是使用模型的顶点的UV坐标,去图片的纹理坐标系中查找对应的图片的位置,该纹理的颜色就是采样得到的颜色,那么该顶点就应该显示采样得到的颜色

    Tiling

    对顶点UV的缩放

    与顶点的UV做乘法运算

    Offset

    对顶点UV的偏移

    与顶点的UV做加法运算

    2方连续与4方连续

    2方连续贴图

    左右两侧能进行无缝衔接的贴图

    上下两侧能进行无缝衔接的贴图

    4方连续贴图

    左右两侧,上下两侧同时能进行无缝衔接的贴图

    Cg函数

    几何函数

     数学函数

     

    纹理函数

  • 相关阅读:
    C语言博客作业04--数组
    DS博客作业04--树大作业
    Java课程设计
    JAVA课设-五子棋-团队博客
    yue
    Java扫雷设计
    java课设--五子棋
    软件工程-个人总结
    JAVA课程设计个人博客
    JAVA第09次实验(IO流)
  • 原文地址:https://www.cnblogs.com/yifengs/p/14574537.html
Copyright © 2011-2022 走看看