Unity Shader 矩阵基本信息
基本信息
mul函数
mul函数,是表示矩阵M和向量V进行点乘,得到一个向量Z,这个向量Z就是对向量V进行矩阵变换后得到的值。
HLSL的mul函数接受mul(V, M)或mul(M, V),要注意通常HLSL要依DirectX计算(V * M)使用mul(V, M)的形式.
特别需要小心的是,V如果是float3,前后行列不等,违反HLSL规范,但shader编译也不报错,直接当成float4(V, 0)处理,而不是当成float4(V, 1).即mul(float3, M)中的float3被当成向量,而不是顶点.
Unity3d 中,若是OpenGL,用的应该是GLSL,mul方法是(M,V)。
矩阵
内置的矩阵(float4x4):
| 名称 | 说明 |
|---|---|
| UNITY_MATRIX_MVP | 当前模型视图投影矩阵 |
| UNITY_MATRIX_MV | 当前模型视图矩阵 |
| UNITY_MATRIX_V | 当前视图矩阵 |
| UNITY_MATRIX_P | 当前的投影矩阵 |
| UNITY_MATRIX_VP | 当前视图投影矩阵 |
| UNITY_MATRIX_T_MV | 模型视图矩阵的转置 |
| UNITY_MATRIX_IT_MV | 模型视图矩阵的逆转置 |
| _Object2World | 当前模型矩阵 |
| _World2Object | 当前世界矩阵的逆矩阵 |
这里要特别说明一下UnityObjectToClipPos(v.vertex)) 方法,官方网站上说明,在写Instanced Shader时,通常情况下并不用在意顶点空间转换,因为所有内建的矩阵名字在Instanced Shader中都是被重定义过的,如果直接使用UNITY_MATRIX_MVP,会引入一个额外的矩阵乘法运算,所以推荐使用UnityObjectToClipPos / UnityObjectToViewPos函数,它们会把这一次额外的矩阵乘法优化为向量-矩阵乘法。
相机
| 名称 | 类型 | 数值 |
|---|---|---|
| _WorldSpaceCameraPos | float3 | 世界空间相机的位置 |
| _ProjectionParams | float4 | x = 1.0(或如果当前使用翻转投影矩阵渲染则为-1.0),y是相机的近平面,z是相机的远平面,w是1 / FarPlane |
| _ScreenParams | float4 | x是相机的渲染目标在像素里的宽度,y是相机的渲染目标在像素里的高度,z是1.0 + 1.0 /宽度和w是1.0 + 1.0 /高度 |
| _ZBufferParams | float4 | 用于线性化Z缓冲区的值。x(1-far /near),y(far/near)、z(x /far)和w(y /far) |
| unity_OrthoParams | float4 | x是正交的相机的宽度,y是正交的相机的高度,z是未使用的,为正交的相机时w为1.0,透视相机时w为0.0 |
| unity_CameraProjection | float4x4 | 摄像机的投影矩阵 |
| unity_CameraInvProjection | float4x4 | 摄像机的投影矩阵的逆矩阵 |
| unity_CameraWorldClipPlanes[6] | float4 | 相机锥平面世界空间方程,按顺序为:左、右、底部、顶部、近、远 |
光照
| 名称 | 类型 | 数值 |
|---|---|---|
| _LightColor0(Lighting.cginc中声明) | fixed4 | 光照颜色 |
| _worldspacelightpos0 | float4 | 方向光:(世界空间方向,0)。其他光:(世界空间位置,1) |
| _LightMatrix0(AutoLight.cginc声明) | float4x4 | world-to-light矩阵。用于样品cookie 和衰减纹理 |
| unity_4LightPosX0、unity_4LightPosY0 unity_4lightposz0 | float4 | (仅ForwardBase通道)前四个不重要的点光源的世界空间坐标 |
| unity_4lightatten0 | float4 | (仅ForwardBase通道)前四个不重要的点光源的衰减系数 |
| unity_lightcolor | half4[4] | (仅ForwardBase通过)前四个不重要的点光源的颜色数组 |
在Shader的光照通道里的延迟着色和延迟光照(在unitydeferredlibrary.cginc):
| 名称 | 类型 | 数值 |
|---|---|---|
| _LightColor | float4 | 光照颜色 |
| _LightMatrix0 | float4x4 | world-to-light矩阵。用于样品cookie 和衰减纹理 |
多光源下,最多8个光源在顶点通道,排序为从最亮的开始
| 名称 | 类型 | 数值 |
|---|---|---|
| unity_LightColor | half4[8] | 光照颜色数组 |
| unity_LightPosition | float4[8] | 视图空间光源的位置。方向光源的坐标是(-方向,0);(位置,1)用于点/点指示灯,点光源,聚光灯的坐标是(位置,1) |
| unity_LightAtten | half4[8] | 光源衰减的系数。X是cos(spotAngle/2)或非聚光灯为-1;Y为1/COS(spotangle / 4)或非聚光灯为-1;Z是衰减的二次方;W是正方形光源的范围 |
| unity_SpotDirection | float4[8] | 视图空间聚光灯的位置;(0,0,1,0)则非聚光灯。 |
Unity Shader 矩阵基本信息的更多相关文章
- 【我的书】Unity Shader的书 — 文件夹(2015.12.21更新)
写在前面 感谢全部点进来看的朋友.没错.我眼下打算写一本关于Unity Shader的书. 出书的目的有以下几个: 总结我接触Unity Shader以来的历程,给其它人一个借鉴.我非常明确学Shad ...
- Unity Shader 知识点总结(二)
紧接着上一篇文章的shader入门知识的总结,本文主要总结shader中的纹理贴图.透明度混合.顶点动画.后期特效处理等操作.如果有什么地方有错,请指出更正,谢谢.本文的代码主要来自开源书:unity ...
- 【我的书】Unity Shader的书 — 目录(2016.5.19最后一次更新)
写在前面 感谢所有点进来看的朋友.没错,我目前打算写一本关于Unity Shader的书. 出书的目的有下面几个: 总结我接触Unity Shader以来的历程,给其他人一个借鉴.我非常明白学Shad ...
- 【Unity Shader】---常用帮助函数、结构体和全局变量
[Unity Shader]---常用帮助函数.结构体和全局变量 一.内置包含文件 Unity中有类似于C++的包含文件.cginc,在编写Shader时我们可以使用#include指令把这些文件包含 ...
- 小强学渲染之Unity Shader编程HelloWorld
第一个简单的顶点vert/片元frag着色器 1)打开Unity 5.6编辑器,新建一个场景后ctrl+s保存命名为Scene_5.默认创建的场景是包含了一摄像机,一平行光,且场景背景是一天空盒而 ...
- Unity Shader 入门精要学习 (冯乐乐 著)
第1篇 基础篇 第1章 欢迎来到Shader的世界 第2章 渲染流水线 第3章 Unity Shader 基础 第4章 学习Shader所需的数学基础 第2篇 初级篇 第5章 开始Unity Shad ...
- 【Unity Shader】从NDC(归一化的设备坐标)坐标转换到世界坐标的数学原理
从NDC(归一化的设备坐标)坐标转换到世界坐标要点 参考资料 How to go from device coordinates back to worldspace http://feepingcr ...
- 【Unity Shader】(九) ------ 高级纹理之渲染纹理及镜子与玻璃效果的实现
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...
- 【Unity Shader】(七) ------ 复杂的光照(下)
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Sha ...
随机推荐
- Linux PWM framework简介和API描述【转】
本文转载自:https://blog.csdn.net/mike8825/article/details/51656400 1. 前言 PWM是Pulse Width Modulation(脉冲宽度调 ...
- (转)GANs and Divergence Minimization
GANs and Divergence Minimization 2018-12-22 09:38:27 This blog is copied from: https://colinraff ...
- C# 计算位置居中
(item.Height / 2 - lab.Height / 2)
- _spellmod
-- 技能修改 -- 小技巧:可以针对技能进行修改 (进行会对其进行更新,增加技能开关) `comment` 备注 `spellId` 技能ID `reqId`需求ID `dmgMod`伤害倍数 `h ...
- 多路径multipath配置,udev绑定
多路径multipath配置 以root用户登录 1.查看共享磁盘是否挂载成功 #fdisk -l 2.生成配置文件 #mpathconf --enable 修改配置文件权限 #chmod 644 / ...
- mysql 常用sql语句
权限 撤销权限revoke all on *.* from 'root'@'192.168.0.197' ; 撤销权限revoke all on *.* from 'xx_db' @'%'; 给指定用 ...
- Linux 独立启动方式安装 Archiva
为了方便起见,我们假设你的 archiva 安装到目录 /opt 下面. 下载安装程序 进入 Archiva 的项目的下载页面中,请单击链接:https://archiva.apache.org/do ...
- part4:素数判别
法一: √n判别 这个的话就是暴力了吧,不过只能判别单个数是不是质数,而且很大的话会爆 //没有代码qwq(不想写 法二:埃式筛法 O(nloglogn)判别 直接代码好不啦: ],n,num; ]; ...
- 『计算机视觉』R-FCN:Object Detection via Region-based Fully Convolutional Networks
一.网络介绍 参考文章:R-FCN详解 论文地址:Object Detection via Region-based Fully Convolutional Networks R-FCN是Faster ...
- p6spy简介
在公司项目中运用了这项技术,一开始不清楚这是干啥用的,在网上查找资料有所一定的了解,但是应该不够全面,希望可以评论指出. p6spy是数据库动态监控的一种框架,它可以使得数据库数据无缝拦截和操作,而不 ...