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 ...
随机推荐
- newcoder 小A的柱状图(单调栈)题解
题目描述 柱状图是有一些宽度相等的矩形下端对齐以后横向排列的图形,但是小A的柱状图却不是一个规范的柱状图,它的每个矩形下端的宽度可以是不相同的一些整数,分别为a[i] 每个矩形的高度是h[i] ,现在 ...
- Python入门 函数式编程
高阶函数 map/reduce from functools import reduce def fn(x, y): return x * 10 + y def char2num(s): digits ...
- FastJson中JSONObject用法及常用方法总结
本文为博主原创,未经允许不得转载: 最近一直有用到解析各种数据,主要是用FastJson进行数据解析,其中一个重要的类为JSONObject,今天有时间,所以进行总结一下: JSONobject是Fa ...
- windows上使用foremost
做CTF题需要这工具来提取文件里的隐藏文件, 网上大部分是linux版本,之前好不容易找了一个exe文件结果还不能用.找了很长时间终于找到了: https://github.com/raddyfiy/ ...
- asp.net mvc session锁问题
一.会话状态Session Session用于服务器端状态管理,使用Session之后,每个客户端都可以将实际的数据保存在服务器上,对于每个客户端的数据,将会生成一个对应的唯一的key(保存在客户端) ...
- 新建node工程
之前各种node工程都是东抄抄,西抄抄的. 用ng的cli之后,发现非常舒服.所以把node新建工程的种种记录一下. node+babel, 直接按es6标准写就好了, 不需要一定写ts再转码了( ...
- 第 8 章 容器网络 - 062 - 如何使用 flannel host-gw backend?
flannel host-gw backend flannel 支持多种 backend:(1)vxlan backend:(2)host-gw: 与 vxlan 不同,host-gw 不会封装数据包 ...
- linux iso 下载地址
Centos 5.3 下载地址: http://www.karan.org/mock/5.3/CentOS-5.3-i386-bin-1to6.torrent http://www.karan.or ...
- 超轻量级Json框架SmartObject
最近我在codeplex上发了一个项目SmartObject(基于framework4.5,目前是1.0版本).用法如下: // HowToUse using Spider.Data; //json ...
- memory.h
1.功能:提供内存操作函数 2.函数: extern void *memchr(const void *buffer, int ch, size_t count); extern void *memc ...