一、需要提前了解的

无论是用哪种图形接口,又或是游戏引擎,入门的数学公式和逻辑就是那一套:

  1. 基础线代公式汇总:https://blog.csdn.net/Jaihk662/article/details/103811465
  2. 欧拉角:https://blog.csdn.net/Jaihk662/article/details/106519595
  3. 基本空间:https://blog.csdn.net/Jaihk662/article/details/106237306
  4. 法向量/切线空间:https://blog.csdn.net/Jaihk662/article/details/106640285 & https://blog.csdn.net/Jaihk662/article/details/107917594

顺序有关,①③是必须掌握的,没有办法

想要深入了解的话线性代数的话推荐3B1B的视频,讲的非常好:https://www.bilibili.com/video/BV1ys411472E

二、Unity内置变换矩阵

  • UNITY_MATRIX_MVP:模型 x 观察 x 投影矩阵,将目标由模型空间变换到裁剪空间
  • UNITY_MATRIX_MV:模型 x 观察矩阵,将目标由模型空间变换到观察空间
  • UNlTY_MATRIX_VP:观察 x 投影矩阵,将目标由世界空间变换到裁剪空间
  • UNlTY_MATRIX_V:观察矩阵
  • UNITY_MATRIX_P:投影矩阵
  • unity_ObjectToWorld:模型矩阵
  • unity_WorldToObject:模型矩阵的逆矩阵
  • UNlTY_MATRIX_T_MV:UNITY_MATRIX_MV 的转置矩阵,只要没有平移变换,那么这个矩阵就可以当作逆矩阵来参与计算。注意缩放的话要除以缩放倍数,因为此时 UNITY_MATRIX_MV 不是标准的正交矩阵
  • UNlTY_MATRIX_IT_MV:UNITY_MATRIX_MV 的逆转置矩阵,用于将法线从模型空间变换到观察空间,再次转置就直接是 UNITY_MATRIX_MV 的逆矩阵了

三、Unity内置的摄像机屏幕参数

  • _WorldSpaceCameraPos(float3):摄像机在世界空间的位置
  • _ProjectionParams(float4):摄像机投影矩阵参数,x为1或-1(投影矩阵是否翻转),y为近平面到摄像机的距离,z为远平面到摄像机的距离,w = 1 + 1/z
  • _ScreenParams(float4):x = width, y = height,  z = 1 + 1/width, w = 1 + 1/height,其中 width 和 height 分别是该摄像机渲染目标(render target)的像素宽高
  • _ZBufferParams(float4):x = 1 - Far/Near, y = Far/Near, z = x/Far, w = y/Far,用于线性化 Z 缓存中的深度值,方便计算
  • unity_OrthoParams(float4):x 和 y 是正交投影的宽和高,w表示当前是否是正交摄像机(1or0),z无用
  • unity_CameraProjection(float4x4):摄像机投影矩阵
  • unity_CameralnvProjection(float4x4):摄像机投影矩阵的逆矩阵
  • unity_CameraWorldClipPlanes[6]:相机6个裁剪平面的世界空间方程(ax+by+cz+d),按顺序为:左、右、底部、顶部、近、远

屏幕坐标的获取:

一种是在片元着色器的输入中声明 VPOS(HLSL) 或 WPOS(CG) 语义,一个参考如下:

fixed4 frag(float4 sp: VPOS): SV_Target
{return fixed4(sp.xy/_ScreenParams.xy, 0.0, 1, 0);
}

VPOS/WPOS 语义定义的输入是一个 float4 类型的变量,其值和 GLSL 内建变量 gl_FragCoord 的值相似,其中小数部分恒为(0.5, 0.5),整数部分就是数第几个像素点了,若屏幕分辨率为 2560 x 1440,x, y 的取值范围就为(0.5, 0.5, 2560.5, 1440.5);z坐标为当前片元的深度信息,远裁剪平面处 z 为 1,近平面处 z 为 0;w 分量范围为  ,Near 和 Far 对应了在 Camera 组件中远近平面到摄像机的距离;如果使用的是正交投影,那么 w 分量的值恒为 1

还有一种方法是通过 Unity 提供的 ComputeScreenPos 函数,这个函数在 UnityCG.cginc 中被定义,不过这种方法获得的 xy 值需要手动进行齐次除法(除以 )的操作,z值的范围是[-Near, Far],w值的范围是[Near, Far],正好是裁剪空间中的 zw 值,这样如果使用的是正交投影,那么 z 值范围就是 [-1, 1],w 值恒为 1

UnityShader5:基本内置变量相关推荐

  1. awk 内置变量与自定义变量

    点击上方"生信科技爱好者",马上关注真爱,请置顶或星标 作者:ghostwu 原文:https://www.cnblogs.com/ghostwu/p/9085653.html A ...

  2. nginx内置变量 大全

    参考:agentzh 的 Nginx 教程(版本 2016.07.21) 在配置基于nginx服务器的网站时,必然会用到 nginx内置变量  ,下面笔者将它整理成列表,把最新版本的变量列出来,以方便 ...

  3. shell--特殊位置参数变量及常用内置变量

    1.shell中的特殊位置参数变量 $0:获取当前执行的shell脚本的文件名,如果执行脚本包含了路径,那么就包括脚本路径 $n:获取当前执行的shell脚本的第n个参数,n=1..9,当n为0时表示 ...

  4. Nginx 的内置变量

    在配置基于Nginx服务器的网站时,必然会使用到Nginx内置变量配置相关信息,下面将根据网上的相关资料进行整理,以方便在配置Nginx时查询. 内置变量存放在 ngx_http_core_modul ...

  5. awk取文本列_awk命令结构/内置变量/获取文本某行或某列

    awk脚本基本结构 awk 'BEGIN{ print "start" }pattern{ commands }END{ print "end" }' file ...

  6. python的变量对大小写并不敏感_Robot Framework 内置变量

    转自:https://blog.csdn.net/qq_26886929/article/details/53907755 Robot Framework 内部提供了一下直接可用的内置变量 1. 操作 ...

  7. Maven系列三Maven内置变量

    Maven内置变量说明: ${basedir} 项目根目录(即pom.xml文件所在目录) ${project.build.directory} 构建目录,缺省为target目录 ${project. ...

  8. linux make makefile 内置变量 默认变量

    在看uboot的Makefile的时候,发现CURDIR这个变量没有定义就直接用了,于是百度了一下,原来CURDIR是Makefile的一个内置变量,在这里顺便把其他的变量也记录一下. 打印变量值使用 ...

  9. 命令 —— awk内置变量(NF,NR,FS,FILENAME)

    关于awk命令的几个内置变量(NF,NR,FS,FILENAME) 1.NF:支持记录域个数,在记录被读之后再设置例1 [root@redhat wilsontest]# pwd /tmp/wilso ...

  10. Nginx内置变量以及日志格式变量参数详解

    Nginx内置变量以及日志格式变量参数详解 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有 ...

最新文章

  1. pku1182(食物链) hdu3047 Zjnu Stadium
  2. xmind修改默认配置
  3. virtualenv wrapper安装配置
  4. 加ing形式的单词有哪些_高中英语人教版必修5知识研习Unit4重点单词treat
  5. showModalDialog和showModelessDialog缓存问题,参数详解,
  6. CentOS下安装Hbase
  7. 蚂蚁金服与阿里云宣布启动“蚂云计划”
  8. 2014编程之美资格赛
  9. C#中IEnumerableT.Select()、SelectMany()的简单使用
  10. UML顺序图/序列图/时序图
  11. 头回见!95后女大学生买iPhone11出租:租借者想尝鲜或显摆
  12. windows安装python
  13. atitit.新增编辑功能 跟orm的实现 attilax p31
  14. MDM主数据平台使用总结
  15. 数据挖掘——时间序列算法之ARCH模型
  16. layui 教程 = 干货
  17. PyTorch笔记【1】---A卡安装(RX580)无果后,改为N卡(2070)安装。这年头就不要用CPU了来搞AI了
  18. 微信小程序商城 (后台JAVA)
  19. 软件架构-zookeeper快速入门
  20. RPC 框架 Kitex 初体验 (虚拟机环境)

热门文章

  1. python画简便的图-python中简单易学的绘图:用turtle画太极图
  2. 自学python能干些什么副业-学完Python的我,月薪6千,副业2万
  3. python能做什么excel-python处理excel的优势是什么
  4. 学python能做什么-学Python后到底能干什么
  5. 连续数字及数字串识别技术
  6. android 移植 距离感应,Android sensors移植文档
  7. 带网格的_【我看身边的网格化】申港街道:一人一板穿梭楼宇小巷 一网一格解决百姓问题...
  8. JavaScript-声明变量的关键字
  9. 【动态规划】计蒜客:蒜头君闯关(最长递增子序列的变体)
  10. 多核技术对计算机技术的影响,计算机新技术——多核技术.doc