Unity编写Shader内置各种矩阵和方法介绍

news2025/6/19 3:51:02

返回目录

大家好,我是阿赵。
这里记录一下Unity编写Shader内置各种矩阵和方法

一、Unity内置转换矩阵

1、MVP类矩阵

UNITY_MATRIX_MVP:Current model * view * projection matrix.
UNITY_MATRIX_MV:Current model * view matrix.
UNITY_MATRIX_V:Current view matrix.
UNITY_MATRIX_P:Current projection matrix.
UNITY_MATRIX_VP:Current view * projection matrix.
其中:
M:model(模型)
V:view(试图)
P:projection(投影)
所以上面那堆矩阵,其实就是这三种矩阵的排列组合。
注意:
mul(UNITY_MATRIX_MVP,v.pos)等价于UnityObjectToClipPos(v.pos),unity会自动替换

模型空间和世界空间转换
unity_ObjectToWorld:Current model matrix.
unity_WorldToObject:Inverse of current world matrix.
上面的矩阵里面没有包含单独的M矩阵,其实M矩阵就是unity_ObjectToWorld,只是格式不一样了,unity_WorldToObject是它的逆矩阵。

2、Transpos矩阵

Transpos:转置
由于法线和切线不是单纯的点坐标,而是有方向的向量。如果模型在非等比例缩放时,方向向量会发生变化,所以不能用普通的MV矩阵转换,要用T(transpos)矩阵
UNITY_MATRIX_T_MV
注意这个矩阵需要右乘,可以将法线向量从模型空间转换到观察空间:
float3 viewNormal = mul(v.normal,(float3x3)UNITY_MATRIX_T_MV);
逆矩阵:
UNITY_MATRIX_IT_MV

二、摄像机和屏幕

1、_WorldSpaceCameraPos

类型:float3
说明:World space position of the camera.摄像机的世界空间坐标

2、_ProjectionParams

类型:float4
说明:x is 1.0 (or –1.0 if currently rendering with a flipped projection matrix), y is the camera’s near plane, z is the camera’s far plane and w is 1/FarPlane.
投影参数
x:1(如果当前渲染有一个翻转的投影矩阵是,这个值就变成-1)
y:摄像机的近端裁剪面
z:摄像机的远端裁剪面
w:1/远端裁剪面

3、_ScreenParams

类型:float4
说明:x is the width of the camera’s target texture in pixels
, y is the height of the camera’s target texture in pixels, z is 1.0 + 1.0/width and w is 1.0 + 1.0/height.
屏幕参数
假如摄像机设置了目标贴图(target texture,是指在摄像机上面挂了渲染输出的RenderTexture)
x:目标贴图的宽度(width)
y:目标贴图的高度(height)
z:1.0 + 1.0/width
w:1.0 + 1.0/height

4、_ZBufferParams

类型:float4
说明:Used to linearize Z buffer values. x is (1-far/near), y is (far/near), z is (x/far) and w is (y/far).
用来线性化Z缓存的值
x: (1-far/near)
y:(far/near)
z:(x/far)
w: (y/far)

5、unity_OrthoParams

类型:float4
说明:x is orthographic camera’s width, y is orthographic camera’s height, z is unused and w is 1.0 when camera is orthographic, 0.0 when perspective.
正交摄像机参数
x:正交摄像机的宽度
y:正交摄像机的高度
z:没用用
w:如果摄像机是正交,值为1,如果摄像机是透视,值为0

6、unity_CameraProjection

类型:float4x4
说明:Camera’s projection matrix.
摄像机的投影矩阵

7、unity_CameraInvProjection

类型:float4x4
说明:Inverse of camera’s projection matrix.
摄像机投影矩阵的逆矩阵

8、unity_CameraWorldClipPlanes[6]

类型:float4
说明:Camera frustum plane world space equations, in this order: left, right, bottom, top, near, far.
摄像机视锥六个面的世界空间方程,按顺序是:左、右、下、上、近、远

三、时间

1、_Time

类型:float4
说明:Time since level load (t/20, t, t2, t3), use to animate things inside the shaders.
从场景加载完之后经过的时间,一般用来在shader里面做动画
x:t/20
y:t
z:t2
w:t
3

2、_SinTime

类型:float4
说明:Sine of time: (t/8, t/4, t/2, t).
时间的正弦函数值
x:t/8
y:t/4
z:t/2
w:t

3、_CosTime

类型:float4
说明:Cosine of time: (t/8, t/4, t/2, t).
时间的余弦函数值
x:t/8
y:t/4
z:t/2
w:t

4、unity_DeltaTime

类型:float4
说明:Delta time: (dt, 1/dt, smoothDt, 1/smoothDt).
时间增量
dt 表示从上一帧到当前帧时间,以秒为单位
smoothDt 表示一个平稳的deltaTime,根据前N帧的时间加权平均的值。
x:dt
y:1/dt
z:smoothDt
w:1/smoothDt

四、灯光

Light parameters are passed to shaders in different ways depending on which Rendering Path
is used, and which LightMode Pass Tag is used in the shader.
光参数以不同的方式传递给着色器,这取决于使用的渲染路径,以及在着色器中使用的光模式传递标签。

1、Forward rendering (ForwardBase and ForwardAdd pass types):

前向渲染

1._LightColor0

类型:fixed4
说明:在UnityLightingCommon.cginc声明(旧版本是在Lighting.cginc声明),灯光的颜色

2._WorldSpaceLightPos0

类型:float4
说明:Directional lights: (world space direction, 0). Other lights: (world space position, 1).
当场景里面的是直射光时,这个是float4(灯光在世界空间的方向,0)
当场景里面是其他类型灯光时,这个是float4(灯光的世界空间位置坐标,1)

3.unity_WorldToLight

类型:float4x4
说明:World-to-light matrix. Used to sample cookie & attenuation textures.
在AutoLight.cginc声明,World-to-light矩阵。用于对cookie和衰减纹理进行取样

4.unity_4LightPosX0

unity_4LightPosY0
unity_4LightPosZ0
类型:float4
说明:(ForwardBase pass only) world space positions of first four non-important point lights.
只有在ForwardBase pass才会有,前4个不重要的点光源的世界空间位置

5.unity_4LightAtten0

类型:float4
说明:(ForwardBase pass only) attenuation factors of first four non-important point lights.
只有在ForwardBase pass才会有,前4个不重要的点光源的衰减因子

6.unity_LightColor

类型:half4[4](注意是数组)
说明:(ForwardBase pass only) colors of of first four non-important point lights.
只有在ForwardBase pass才会有,前4个不重要的点光源的灯光颜色

7.unity_WorldToShadow

类型:float4x4[4](注意是矩阵的数组)
说明:World-to-shadow matrices. One matrix for spot lights, up to four for directional light cascades.
World-to-shadow的矩阵数组,如果是聚光灯则只有一个矩阵,如果是直射光,则有4个矩阵

2、Deferred shading and deferred lighting, used in the lighting pass shader (all declared in UnityDeferredLibrary.cginc)

延迟着色和延迟光照,所有都是在UnityDeferredLibrary.cginc里面声明

1._LightColor

类型:float4
说明:灯光颜色

2.unity_WorldToLight

类型:float4x4
说明:World-to-light matrix. Used to sample cookie & attenuation textures.
World-to-light矩阵。用于对cookie和衰减纹理进行取样

3.unity_WorldToShadow

类型:float4x4[4](注意是矩阵的数组)
说明:World-to-shadow matrices. One matrix for spot lights, up to four for directional light cascades.
World-to-shadow的矩阵数组,如果是聚光灯则只有一个矩阵,如果是直射光,则有4个矩阵

3、Vertex-lit rendering (Vertex pass type)

顶点光照渲染

1.unity_LightColor

类型:half4[8]
说明:灯光颜色.

2.unity_LightPosition

类型:float4[8]
说明:View-space light positions. (-direction,0) for directional lights; (position,1) for point/spot lights.
观察空间的灯光位置
如果是直射光,是 float4(-direction,0)
如果是点光源或者聚光灯,则是float4(position,1)

3.unity_LightAtten

类型:half4[8]
说明:Light attenuation factors. x is cos(spotAngle/2) or –1 for non-spot lights; y is 1/cos(spotAngle/4) or 1 for non-spot lights; z is quadratic attenuation; w is squared light range.
灯光的衰减因子
x:如果是聚光灯cos(spotAngle/2),如果不是聚光灯是-1
y:如果是聚光灯1/cos(spotAngle/4),如果不是聚光灯是
z:二次衰减
w:灯光范围的平方

4.unity_SpotDirection

类型:float4[8]
说明:View-space spot light positions; (0,0,1,0) for non-spot lights.
观察空间的聚光灯位置,如果不是聚光灯,则值是 (0,0,1,0)

五、Lightmaps

1、unity_Lightmap

类型:Texture2D
说明:Contains lightmap information.
使用的Lightmap贴图,包含Lightmap信息

2、unity_LightmapST

类型:float4[8]
说明:Scales and translates the UV information to the correct range to sample the lightmap texture.
采样Lightmap的UV信息

六、雾和全局光

1.unity_AmbientSky

类型:fixed4
说明:Sky ambient lighting color in gradient ambient lighting case.
当环境光选择gradient时的天空环境光颜色
在这里插入图片描述

2.unity_AmbientEquator

类型:fixed4
说明:Equator ambient lighting color in gradient ambient lighting case.
当环境光选择gradient时,赤道环境光的颜色

3.unity_AmbientGround

类型:fixed4
说明:Ground ambient lighting color in gradient ambient lighting case.
当环境光选择gradient时,地面的灯光颜色

4.UNITY_LIGHTMODEL_AMBIENT

类型:fixed4
说明:Ambient lighting color (sky color in gradient ambient case). Legacy variable.
环境光颜色,如果是选择gradient时则是天空的颜色,这是旧版本遗留的变量

5.unity_FogColor

类型:fixed4
说明:雾的颜色

6.unity_FogParams

类型:float4
说明:Parameters for fog calculation: (density / sqrt(ln(2)), density / ln(2), –1/(end-start), end/(end-start)). x is useful for Exp2 fog mode, y for Exp mode, z and w for Linear mode.
雾的参数
x:(density / sqrt(ln(2)),在Exp2模式有用
y:density / ln(2),在Exp模式有用
z: –1/(end-start),在线性模式有用
w:end/(end-start)),在线性模式有用

七、Various

1、unity_LODFade

类型:float4
说明:Level-of-detail fade when using LODGroup. x is fade (0…1), y is fade quantized to 16 levels, z and w unused.
当使用LOD组时的细节等级过渡
x:0到1过渡
y:16个等级之间的过渡
z和w没有使用

2、_TextureSampleAdd

类型:float4
说明:Set automatically by Unity for UI only based on whether the texture being used is in Alpha8 format (the value is set to (1,1,1,0)) or not (the value is set to (0,0,0,0)).
只有Unity的UI会自动设置,
如果使用Alpha8格式,值会设置成 (1,1,1,0)
其他情况值会设置成 (0,0,0,0)

八、UnityCG.cginc

最后说一下,一般我们在写Unity的shader时都会把UnityCG.cginc包含。
这个库里面包含了很多好用的内容,可以自己打开看看,这里只举几个例子:

1、UNITY_PI

说明:圆周率π

2、颜色空间转换

inline bool IsGammaSpace()
说明:判断是否Gamma空间

inline half3 GammaToLinearSpace (half3 sRGB)
inline half3 LinearToGammaSpace (half3 linRGB)
说明:Gamma空间和线性空间颜色之间的转换

3、各种空间转换方法

封装好的各种空间转换方法,不需要考虑矩阵是左乘还是右乘,使用方便

1.坐标的空间转换的方法:

UnityWorldToClipPos
UnityViewToClipPos
UnityObjectToViewPos
UnityWorldToViewPos

2.向量的空间转换方法:

UnityObjectToWorldDir
UnityWorldToObjectDir
UnityObjectToWorldNormal

3.灯光方向

UnityWorldSpaceLightDir
ObjSpaceLightDir

4.观察空间

UnityWorldSpaceViewDir
ObjSpaceViewDir

4、各种贴图格式的转换

用得比较多的比如:
UnpackNormal
UnpackNormalWithScale
DecodeLightmap
DecodeHDR

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/411706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

静态库与动态库

库是已经写好的、成熟的、可复用的代码。在我们的开发的应用中经常有一些公共代码是需要反复使用的,就把这些代码编译为库文件。库可以简单看成一组目标文件的集合,将这些目标文件经过压缩打包之后形成的一个可执行代码的二进制文件。库有两种&#xff1…

uniapp页面后退时更改页面内容【uniapp如何区分页面是跳转来的还是后退来的】【伸手党福利】

目录应用场景实现目标分析技术难点解决方法另附:自动登录判断跳转页面ps2 这个案例的实际简单的解决方法应用场景 建立一个自动登录的中间页,如果自动登录,则自动跳转到内部应用。如果自动登录失败,则显示用户名密码输入页。 发现…

文心一言对于宣传文案理解

前言 前段时间对于文心一言开放部分内测邀请,有幸获得邀请内测权限!抱着试一试的态度对其进行了使用,结果还是比较满意的。我们来看一下我所说的满意是否能够达到你的要求!!! 使用逻辑 文心一言的使用还…

静态路由的原理和配置(理论详细实验全面)

第五章:静态路由 目录 第五章:静态路由 5.1路由器的工作原理 5.1.1路由器根据路由表转发数据 5.1.2 路由信息获取的方式 5.2路由选路原则 5.2.1最长匹配原则 5.2.2路由优先级 5.2.3路由度量值 5.3静态路由 5.3.1静态路由实验 5.3.2缺省路由实…

多模态模型技术综述

多模态架构导语1. Image2Text1.1 图像数据集准备1.2 图像to文本的生成模型1.2.1 M2 模型(Meshed—Memory Transformer)Memory-Augmented EncoderMeshed Decoder2. text2Image2.1 生成对抗网络(GAN)2.1.1 文本生成图像基础GAN2.1.2…

4.1 不定积分的概念与性质

思维导图: 学习目标: 学习不定积分,我会采取以下几个步骤: 1.学习基本的积分表:首先,我会学习基本的积分公式,例如幂函数、指数函数、三角函数、反三角函数等的积分公式。这些公式是不定积分…

enote笔记法之附录1——“语法词”(即“关联词”)(ver0.22)

章节:enote笔记法之附录1——“语法词”(即“关联词”)(ver0.22) 上面的是截屏的完整版,分割线下面的是纯文字版本: 作者姓名(本人的真实姓名):胡佳吉 居…

计及需求侧响应日前、日内两阶段鲁棒备用优化(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

机器学习实战:Python基于K近邻KNN进行分类预测(四)

文章目录1 前言1.1 K近邻的介绍1.2 K近邻的应用2 二维数据集演示2.1 导入函数2.2 导入数据2.3 训练模型及可视化3 莺尾花数据集全数据演示3.1 导入函数3.2 导入数据3.3 训练模型及预测4 模拟数据集演示4.1 导入函数4.2 模拟数据集4.3 建模比较5 马绞痛数据pipeline演示5.1 下载…

App 自动化测试

一、移动端测试基础 1 移动端自动化环境搭建 1.1 java安装 1.2 Android SDK安装 SDK (Software Development Kit) 软件开发工具包是软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。Android SDK 就是 Android 专属的软件开…

ERTEC200P-2 PROFINET设备完全开发手册(5-1)

5.1 非周期通讯 非周期通讯,顾名思义,表示这种通讯并不是在每个通讯周期都要进行的通讯,也叫做异步通讯或者非实时通讯。非周期通讯访问的数据叫做数据记录(record data)。一般情况下,以下三个名词表示的是…

ubuntu下常用命令(嵌入式)

开发环境: ubuntu-14.04.1-desktop-i386 VMware-workstation-full-10.0.2-1744117.1398244508.exe lsb_release -a 查看ubuntu版本 ctrlalta 打开控制台 du -sh 文件/文件夹 查看文件或文件夹的大小 su 或 su root 都是切换到root账户 su 普通用户 切换到普…

CSS2023年面试题汇总~~~~持续更新中!!!!

文章目录1.元素水平垂直居中的方法有哪些?2.flex布局3.position定位4.display:none与visibility:hidden的区别1.元素水平垂直居中的方法有哪些? 利用定位margin:auto利用定位margin:负值利用定位transformtable布局flex布局grid布局 其中2,…

风电的Weibull分布及光电的Beta分布组合研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

二、线程的Thread 类及常见方法【2/12】【多线程】

线程的Thread 类及常见方法2. Thread 类及常见方法2.1 Thread 的常见构造方法2.2 Thread 的几个常见属性2.3 启动一个线程-start()★★★start和run的区别★★★run不会创建线程 是在原来的基础上 执行代码start 创建线程,在新的线程 执行代码2.4 中断一个线程★★★…

常见面试题之Redis篇

1.1.Redis与Memcache的区别? redis支持更丰富的数据类型(支持更复杂的应用场景):Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。memcache支持…

Open Inventor 2023.1 Crack

发行说明 Open Inventor 2023.1(次要版本) 文档于 2023 年 4 月发布。 此版本中包含的增强功能和新功能: Open Inventor 10 版本编号更改体积可视化 单一分辨率的体绘制着色器中与裁剪和 ROI 相关的新功能MeshVizXLM 在 C 中扩展的剪辑线提…

拟牛顿法:python代码实现

文章目录拟牛顿法待优化实例scipy工具包实现BFGS自编Python实现BFGS拟牛顿法 在梯度类算法原理:最速下降法、牛顿法和拟牛顿法中,介绍了梯度类算法求解优化问题的设计思路,并以最速下降法、牛顿法和拟牛顿法为例,描述了具体的算法…

3.9、互斥锁(互斥量)

3.9、互斥锁(互斥量)1.互斥锁(互斥量)的介绍2. 互斥量相关操作函数3.互斥量函数的使用介绍①pthread_mutex_init②pthread_mutex_destroy③pthread_mutex_lock④pthread_mutex_trylock⑤pthread_mutex_unlock3.利用互斥锁实现线程…

计讯物联双网口工业路由器TR321助力货轮冷链监测解决方案高质量落地

政策背景 国务院办公厅印发我国冷链物联流域第一份五年规划——《“十四五”冷链物流发展规划》(以下简称“规划”)。《规划》聚焦冷链物流体系、冷链运输、冷链物流服务、冷链物流创新及冷链物流监管体系等方面,对冷链物流的全流程、全环节…