• 《Unity Shader 入门精要》笔记03


    Unity内置的变换矩阵

    UNITY_MATRIX_MVP当前的模型观察投影矩阵,用于将顶点/方向矢量从模型空间变换到裁剪空间
    UNITY_MATRIX_MV当前的模型观察矩阵,用于将顶点/方向矢量从模型空间变换到观察空间
    UNITY_MATRIX_V当前的观察矩阵,用于将顶点/方向矢量从世界空间变换到观察空间
    UNITY_MATRIX_P当前的投影矩阵,用于将顶点/方向矢量从观察空间变换到裁剪空间
    UNITY_MATRIX_VP当前的观察投影矩阵,用于将顶点/方向矢量从世界空间变换到裁剪空间
    UNITY_MATRIX_T_MVUNITY_MATRIX_MV的转置矩阵
    UNITY_MATRIX_IT_MVUNITY_MATRIX_MV的逆转置矩阵,用于将法线从模型空间变换到观察空间,也可用于得到UNITY_MATRIX_MV的逆矩阵
    _Object2World当前的模型矩阵,用于将顶点/方向矢量从模型空间变换到世界空间
    _World2Object_Object2World的逆矩阵,用于将顶点/方向矢量从世界空间变换到模型空间
    (2022.3.9f1是unity_WorldToObject 、unity_ObjectToWorld)在这里插入代码片

    //为了把顶点或方向矢量从观察空间变换到模型空间,可以使用如下代码
    
    //方法一:使用transpose函数对UNITY_MATRIX_IT_MV进行转置
    //得到UNITY_MATRIX_MV的逆矩阵,然后进行矩阵乘法
    //把观察空间中的点或方向矢量变换到模型空间中
    float4 modelPos = mul(transpose(UNITY_MATRIX_IT_MV), viewPos);
    
    //方法二:不直接使用转置函数transpose,而是交换mul参数的位置,使用矩阵乘法
    //本质和方法一是完全一样的
    float4 modelPos = mul(viewPose, UNITY_MATRIX_IT_MV)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    摄像机和屏幕参数

    float3 _WorldSpaceCameraPos

    该摄像机在世界空间中的位置

    float4 _ProjectionParams

    x = 1.0(或-1.0,如果正在使用一个反转的投影矩阵进行渲染,y = Near, z = Far, w = 1.0 + 1.0/Far,其中Near和Far分别是近裁剪平面和远裁剪平面和摄像机的距离)

    float4 _ZBufferParams

    x = 1 - Far/Near, y = Far/Near, z = x/Far, w = y/Far,该变量用于线性化Z缓存中的深度值

    float4 unity_OrthoParams

    x = width, y - height, z没有定义, w = 1.0(该摄像机是正交摄像机)或w = 0.0(该摄像机是透视摄像机),其中width和height是正交投影摄像机的宽度和高度

    float4x4 unity_CameraProjection

    该摄像机的投影矩阵

    float4x4 unity_CameraInvProjection

    该摄像机的投影矩阵的逆矩阵

    float4 unity_CameraWorldClipPlanes[6]

    该摄像机的6个裁剪平面在世界空间下的等式,按如下顺序:左、右、下、上、近、远裁剪平面

    点积:
    假设有一个矢量a(平行光)和另一个矢量b
    可以通过点积来得到b在a方向上投影(标量)
    公式1:a·b = (ax,ay,az) · (bx,by,bz) = axbx+ayby+azbz
    公式2:a·b = |a||b|cosθ


    叉积:
    会得到同时垂直于这两个矢量的新矢量(矢量)
    常用于计算垂直于一个平面/三角形的矢量
    可以用来判断三角面片的朝向
    公式1:a x b = (ax,ay,az) x (bx,by,bz) = (aybz - azby, azbx-axbz, axby - aybx)
    模计算:|a x b| = |a||b|sinθ


    mul函数:矩阵乘法
    参数的位置将决定是按列矩阵还是行矩阵进行乘法
    列矩阵和矩阵m进行右乘 mul(m,v) 行矩阵和矩阵m进行左乘 mul(v,m)

  • 相关阅读:
    微服务实战 04 springCloud 集成 Sentinel 实战
    java-php-python-ssm学习自律养成小程序后台计算机毕业设计
    Kafka为什么这么快?它的高性能是如何实现的?
    flutter系列之:flutter中常用的ListView layout详解
    PHP常用的数组函数
    openresty+consul配置实现原理
    基于Git和Nginx搭建自己的私人图床,告别图片404
    2022.8.30 OpenCV 课程作业
    转岗项目经理后,我是如何管理项目的。
    [最长回文字符串]manacher马拉车
  • 原文地址:https://blog.csdn.net/Retrovich/article/details/133637412