当前位置: 首页 > 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)

http://www.lryc.cn/news/185414.html

相关文章:

  • LINUX系统使用软件异地同步数据(灾备)
  • IDEA Rogstry中找不到compiler.automake.allow.when.app.running问题解决
  • c#设计模式-行为型模式 之 状态模式
  • 使用Docker安装JupyterHub
  • SpringCloudGateway网关整合swagger3+Knife4j3,basePath丢失请求404问题
  • html通过使用图像源的协议(protocol)相对 URL 来防止安全/不安全错误
  • 【SpringBoot】| Thymeleaf 模板引擎
  • Vue Router的进阶
  • 方案:快递站智能视频监控3大亮点汇总
  • Direct3D网格
  • docker安装wiki
  • bigemap在林业勘测规划设计行业的一些应用
  • 设计模式学习
  • Openfire身份认证绕过漏洞
  • 类目体系设计总结
  • gRPC之proto数据验证
  • 计算机竞赛 题目: 基于深度学习的疲劳驾驶检测 深度学习
  • css--踩坑
  • C超市商品信息查询系统
  • 黑马JVM总结(二十七)
  • 软件测试/测试开发丨Python异常处理 学习笔记
  • 026 - STM32学习笔记 - 液晶屏控制(三) - DMA2D快速绘制矩形、直线
  • 【牛客网】OR59 字符串中找出连续最长的数字串
  • 云原生监控系统Prometheus:基于Prometheus构建智能化监控告警系统
  • C++ 学习系列 -- std::list
  • YOLOv8血细胞检测(6):多维协作注意模块MCA | 原创独家创新首发
  • FFmpeg横竖版视频互换背景模糊一键生成
  • Java 华为真题-小朋友分班
  • 机器学习必修课 - 编码分类变量 encoding categorical variables
  • ClickHouse进阶(二十二):clickhouse管理与运维-服务监控