当前位置: 首页 > news >正文

《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)

摄像机和屏幕参数

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)

相关文章:

《Unity Shader 入门精要》笔记03

UnityShader的内置变量(数学篇) Unity内置的变换矩阵摄像机和屏幕参数float3 _WorldSpaceCameraPosfloat4 _ProjectionParamsfloat4 _ZBufferParamsfloat4 unity_OrthoParamsfloat4x4 unity_CameraProjectionfloat4x4 unity_CameraInvProjectionfloat4 u…...

LINUX系统使用软件异地同步数据(灾备)

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步 一、宝塔环境: 有宝塔软件商城支持,参考:https://www.bt.cn/bbs/thread-98022-1-1.html 二、…...

IDEA Rogstry中找不到compiler.automake.allow.when.app.running问题解决

网上大部分人教我们 先 File > Settings 然后 勾选 Build 下的 Compiler中的 Build project automatically 这些步骤都不会有问题 然后就会让我们 ctrl shift alt / 点 Rogstry 打开后 我人就麻了 根本没有什么 compiler.automake.allow.when.app.running 也不用慌 我们…...

c#设计模式-行为型模式 之 状态模式

🚀简介 状态模式是一种行为设计模式,它允许对象在其内部状态改变时改变其行为,我们可以通过创建一个状态接口和一些实现了该接口的状态类来实现状态模式。然后,我们可以创建一个上下文类,它会根据其当前的状态对象来改…...

使用Docker安装JupyterHub

安装JupyterHub 拉取Jupyter镜像并运行容器 docker run -d -p 8000:8000 --name jupyterhub jupyterhub/jupyterhub jupyterhub # -d:后台运行 # -p 8000:8000:宿主机的8000端口映射容器中的8000端口 # --name jupyterhub:给运行的容器起名…...

SpringCloudGateway网关整合swagger3+Knife4j3,basePath丢失请求404问题

在集成 Spring Cloud Gateway 网关的时候,会出现没有 basePath 的情况,例如定义的 /jeeplus-auth、/jeeplus-system 等微服务前缀导致访问接口404: maven依赖: swagger2于17年停止维护,现在最新的版本为 Swagger3&am…...

html通过使用图像源的协议(protocol)相对 URL 来防止安全/不安全错误

有人知道使用 protocol relative URLs 是否有问题吗&#xff1f;用于图像源以防止混合内容安全警告。 例如链接一张图片: <img src"//domain.com/img.jpg" /> 代替: <img src"http://domain.com/img.jpg" /> or <img src"https…...

【SpringBoot】| Thymeleaf 模板引擎

目录 Thymeleaf 模板引擎 1. 第一个例子 2. 表达式 ①标准变量表达式 ②选择变量表达式&#xff08;星号变量表达式&#xff09; ③链接表达式&#xff08;URL表达式&#xff09; 3. Thymeleaf的属性 ①th:action ②th:method ③th:href ④th:src ⑤th:text ⑥th:…...

Vue Router的进阶

进阶 导航守卫 官方文档上面描述的会比较深奥&#xff0c;而守卫类型也比较多&#xff0c;其中包含了全局前置守卫、全局解析守卫、全局后置钩子、路由独享守卫、组件内守卫。每一种守卫的作用和用法都不相同。这会使得大家去学习的时候觉得比较困难&#xff0c;这边主要介绍…...

方案:快递站智能视频监控3大亮点汇总

快递站智能视频监控方案是一种利用先进的技术和设备&#xff0c;来提升快递站安全管理和快递流程监控的解决方案。具体包括哪些方面呢&#xff1f;今天小编就带大家来看看&#xff01; 1、视频监控系统 在快递站的关键区域安装旭帆科技高清摄像头&#xff0c;如快递仓库、操作…...

Direct3D网格

创建网格 我们可以用D3DXCreateMeshFVF函数创建一个"空"网格对象 &#xff0c;空网格对象是指我们指定了网格的面片总数和顶点总数&#xff0c;然后由该函数为顶点缓存、索引缓存和属性缓存分配大小合适的内存&#xff0c;之后即可手工填入网格数据。 HRESULT WINA…...

docker安装wiki

1.docker pull mediawiki 2.docker run -d --name mywiki -p 8666:80 mediawiki 访问ip:8666,就可以看到配置页面了 3.docker pull mysql docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD123456 -p 3307:3306 mysql 4.在配置页面链接ip:3307,连接数据库&#xff0c;接下…...

bigemap在林业勘测规划设计行业的一些应用

选择Bigemap的原因&#xff1a; 主要注重影像的时效性&#xff0c;软件的影像时效性比其他的更新快&#xff0c;更清晰。 使用场景&#xff1a; 1.林业督查&#xff0c;主要是根据国家下发的图斑&#xff0c;结合测绘局的影像以及bigemap的较新影像对比去年和今年的林地变化。…...

设计模式学习

文章目录 前言设计模式的七大原则单一职责原则开放封闭原则里氏替换原则依赖倒转原则接口隔离原则合成复用原则迪米特原则总结 GoF二十三种设计模式创建型模式&#xff08;五种&#xff09;结构型模式&#xff08;七种&#xff09;行为型模式&#xff08;十一种&#xff09; 游…...

Openfire身份认证绕过漏洞

漏洞详情&#xff1a; Openfire是采用Java编程语言开发的实时协作服务器&#xff0c;Openfire的管理控制台是一个基于Web的应用程序&#xff0c;被发现可以使用路径遍历的方式绕过权限校验。未经身份验证的用户可以访问Openfire管理控制台中的后台页面。同时由于Openfire管理控…...

类目体系设计总结

一、背景 公司窗帘产品在做分类调整&#xff0c;从原先二级类目调整为三级类目&#xff0c;相对于平台电商我们的类目层次结构要简单很多&#xff08;没有定义商品动态属性等&#xff09;&#xff0c;但对于也有上万款SKU的系统来讲,做好基础的分类对于采购、商品促销、数据报…...

gRPC之proto数据验证

1、proto数据验证 本篇将介绍grpc_validator&#xff0c;它可以对gRPC数据的输入和输出进行验证。 这里复用上一篇文章的代码。 1.1 创建proto文件&#xff0c;添加验证规则 这里使用第三方插件go-proto-validators 自动生成验证规则。 地址&#xff1a;https://github.co…...

计算机竞赛 题目: 基于深度学习的疲劳驾驶检测 深度学习

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 &#x1f525; 优…...

css--踩坑

1. 子元素的宽高不生效问题 设置flex布局后&#xff0c;子元素的宽高不生效问题。 如果希望子元素的宽高生效&#xff0c;解决方法&#xff0c;给子元素添加如下属性&#xff1a; flex-shrink: 0; flex-shrink: 0;2. 横向滚动&#xff08;子元素宽度不固定&#xff09; /* tab…...

C超市商品信息查询系统

一、系统界面介绍 1. 超市商品信息查询系统 1、显示商品信息&#xff0c;包括&#xff1a;商品名称、商品种类&#xff08;休闲食品、奶品水饮、生鲜水果&#xff09;、商品价格、商品保质期、商品生产日期&#xff1b; 2、从文件中导入数据、显示、排序、查询的功能。&…...

基于Milvus混合检索与Java SpringBoot的全栈实现

阿里云有数千份产品文档&#xff0c;腾讯云有上万页技术规格&#xff0c;华为云的价格清单每天都在更新&#xff0c;开发者如何在浩如烟海的资料中&#xff0c;3秒内找到“ECS g6.2xlarge在华东区的按量计费价格”&#xff1f;传统关键词搜索解决不了语义理解&#xff0c;纯向量…...

FPGA串行FIR滤波器设计:Verilog实现与资源优化实战

1. 项目概述在数字信号处理&#xff08;DSP&#xff09;的硬件实现领域&#xff0c;FIR&#xff08;有限脉冲响应&#xff09;滤波器因其绝对稳定性和线性相位特性&#xff0c;成为工程师们手中的一把利器。无论是通信系统的信道均衡&#xff0c;还是音频处理中的噪声抑制&…...

搜索广告算法工程师大模型学习--1.计划

大模型时代搜索广告算法专家&#xff1a;理论与数学重构进阶计划 前置约束与学习定调&#xff1a; 核心目标&#xff1a;从传统 NLP 分类思维彻底向大模型生成式思维&#xff08;Generative&#xff09;与搜索广告业务思维&#xff08;Ranking/Retrieval&#xff09;转型。学…...

Taotoken标准OpenAI协议兼容性在实际项目迁移过程中带来的便利

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken标准OpenAI协议兼容性在实际项目迁移过程中带来的便利 1. 项目背景与迁移动因 我们维护着一个内部知识库问答系统&#x…...

167.YOLOv8口罩检测常见问题避坑(loss为NaN/显存溢出/ONNX导出失败实战版)

摘要 目标检测是计算机视觉领域的核心任务之一。YOLO(You Only Look Once)系列模型凭借其端到端、单阶段、高实时性的特性,已成为工业界和学术界最广泛使用的目标检测框架。本文从零开始,系统讲解YOLOv8的核心原理,并给出从数据准备、模型训练、推理验证到ONNX部署的完整…...

基于数据科学的宠物性格分析:从行为量化到性格画像的工程实践

1. 项目概述与核心价值最近在逛GitHub的时候&#xff0c;发现了一个挺有意思的项目&#xff0c;叫petsonality。光看名字&#xff0c;你大概就能猜到它和“宠物”&#xff08;Pets&#xff09;以及“性格”&#xff08;Personality&#xff09;有关。没错&#xff0c;这是一个通…...

Arduino ESP32终极配置指南:5步解决环境搭建难题

Arduino ESP32终极配置指南&#xff1a;5步解决环境搭建难题 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 Arduino ESP32是专为ESP32系列芯片设计的开源开发板支持包&am…...

车载网络测试演进:从CAN总线到TSN与SOA的实战解析

1. 项目概述&#xff1a;一场关于“神经”与“体检”的进化史几年前&#xff0c;我和几个同行在路边摊就着麻小和扎啤&#xff0c;聊起车载以太网测试&#xff0c;那时它还是个新鲜玩意儿&#xff0c;大家讨论的焦点更多是“要不要做”和“怎么做”。几年过去&#xff0c;再回头…...

从白噪声到ARMA谱:平稳随机信号功率谱的实战解析

1. 平稳随机信号功率谱密度的工程意义 第一次接触功率谱密度这个概念时&#xff0c;我也被那一堆数学公式搞得头晕。直到有次在调试通信设备时&#xff0c;发现接收端总是有奇怪的干扰&#xff0c;导师让我做个频谱分析&#xff0c;这才真正明白功率谱密度到底有什么用。简单来…...

保姆级教程:在Ubuntu 22.04上从下载到后台启动Minio对象存储

保姆级教程&#xff1a;在Ubuntu 22.04上从下载到后台启动Minio对象存储 在个人开发或小团队协作中&#xff0c;搭建一个轻量级、兼容S3协议的私有存储环境是许多技术爱好者的刚需。Minio作为一款高性能的对象存储解决方案&#xff0c;凭借其简洁的架构和与Amazon S3的无缝兼容…...