码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 《Unity Shader 入门精要》笔记03


    UnityShader的内置变量(数学篇)

    • Unity内置的变换矩阵
    • 摄像机和屏幕参数
      • float3 _WorldSpaceCameraPos
      • float4 _ProjectionParams
      • float4 _ZBufferParams
      • float4 unity_OrthoParams
      • float4x4 unity_CameraProjection
      • float4x4 unity_CameraInvProjection
      • float4 unity_CameraWorldClipPlanes[6]

    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)

  • 相关阅读:
    4年测试工作经验,跳槽之后面试20余家公司的总结
    单个独立按键依次输入控制数据
    搬走地下空间开发利用“绊脚石” 中地数码取得地下空间透明化技术突破
    Java泛型接口以及案例说明(四)
    【金九银十必问面试题】不得不说的的限流算法 ——令牌桶限流算法 ,如何让面试官眼前一亮!
    树的统计问题
    ubuntu20.04 + kiosk + chrome打造一体机系统
    人工智能基础_机器学习007_高斯分布_概率计算_最小二乘法推导_得出损失函数---人工智能工作笔记0047
    Leetcode 1619. 删除某些元素后的数组均值
    全真模拟题!PMP提分必练
  • 原文地址:https://blog.csdn.net/Retrovich/article/details/133637412
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号