shader基础
shader空间坐标介绍
未完成的空间转换表
数据类型
名称 shader中的变量名 数据类型 说明
vertex POSITION float4 顶点在空间中的位置
normal NORMAL float4 垂直于顶点的直线
tengent TANGENT float4 与顶点的法线垂直
Direction float3 顶点在空间中的朝向
Destance float3 两点之间的距离
texcoord TEXCOORD0 float4 处理贴图的UV坐标
模型空间
输出空间 模型空间 世界空间 观察空间 裁剪空间
坐标 mul(unity_ObjectToWorld, v.vertex) = mul(UNITY_MATRIX_M, 方向或坐标) float4 UnityObjectToViewPos(float4) = mul(UNITY_MATRIX_MV,顶点或方向) mul(UNITY_MATRIX_MVP, 顶点或方向)
方向 float3 UnityObjectToWorldDir(float3) :把方向矢量从模型空间变换到世界空间中
法线 float3 UnityObjectToWorldNormal(float3) 把法线方向从模型空间转换到世界空间中 mul(UNITY_MATRIX_IT_MV, 顶点或方向)
灯光 float3 ObjSpaceLightDir(float3)-float4 ObjectSpaceLightDir(float4):输入模型空间的顶点坐标,返回模型空间中从该点到光源的光照方向。需前向渲染中、且还没归一化
相机 float3 ObjSpaceViewDir(float4 v) 输入一个模型空间中的顶点位置,返回模型空间中从该点到摄像机的观察方向。 float3 WorldSpaceViewDir(float4 v) 输入一个模型空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向。
世界空间
输出空间 模型空间 世界空间 观察空间 裁剪空间 齐次空间
坐标 mul(unity_WorldToObject, 坐标或方向) =mul(UNITY_MATRIX_I_M, 坐标或方向) mul(UNITY_MATRIX_V, 坐标或方向) float4 UnityWorldToClipPos(float4)
方向 float3 Unity WorldToObjectDir(float3 dir)-float3 UnityWorldToObjectDir(float3)把方向矢量从世界空间变换到模型空间中
法线
灯光 float3 UnityWorldSpaceLightDir(float4 v) -float3 WorldSpaceLightDir(float4 v) 仅可用于前向渲染中。输入一个世界空间中的顶点位置,返回世界空间中从该点到光源的光照方向。没有被归一化
相机 float3 UnityWorldSpaceViewDir(float4 v) 输入一个世界空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向
观察空间
输出空间 模型空间 世界空间 观察空间 裁剪空间 齐次空间
坐标 mul(UNITY_MATRIX_T_MV,顶点或方向) mul(UNITY_MATRIX_I_V, 顶点或方向) float4 UnityViewToClipPos(float4 ) = mul(UNITY_MATRIX_P, 顶点或方向)
方向
法线
灯光
相机
两种写法

unity5.6以下版本写法记作“old”:mul(v.vertex,UNITY_MATRIX_MVP)
unity5.6以上版本写法记作“new”:UnityObjectToClipPos(v.vertex)

//将顶点从模型空间转换为裁剪空间float3 vec;//模型空间转为裁剪空间vec = UnityObjectToClipPos(v.vertex);// vec =  UnityObjectToClipPos(float4(v.vertex), 1.0));//模型空间转换为观察空间vec =  UnityObjectToViewPos(v.vertex);// vec =  mul(UNITY_MATRIX_MV, float4(v.vertex), 1.0)).xyz;//从世界空间转到观察空间vec =  UnityWorldToViewPos(v.vertex);//模型空间转换到世界空间vec =  UnityObjectToWorldDir(v.vertex);//观察空间转为裁剪空间vec =  UnityViewToClipPos(v.vertex);//世界空间转到裁剪空间vec =  UnityWorldToClipPos(v.vertex);//法线//法线从模型空间转换到世界空间vec =  UnityObjectToWorldNormal(v.vertex);//世界空间转到模型空间vec =  UnityWorldToObjectDir(v.vertex);//摄像机相关//输入一个object空间顶点位置,返回世界空间中从该点到摄像机的观察方向。vec =  WorldSpaceViewDir(v.vertex); //输入一个object空间顶点位置,返回object空间中从该点到摄像机的观察方向。vec =  ObjSpaceViewDir (v.vertex);//灯光//仅用于前向渲染,输入一个object空间顶点的位置,返回世界空间中从该点到光源的光照方向vec =  WorldSpaceLightDir (v.vertex);//仅用于前向渲染,输入一个object空间顶点的位置,返回object空间中从该点到光源的光照方向vec = ObjSpaceLightDir (v.vertex);
自定义工具函数 随机函数
//获取随机噪点值,这里使用的因子是原x+时间长度
float noise = random(o.pos.x +  _Time.y * 0.4);
//噪点/随机数发生器
float random (float n) {return frac(sin(dot(n, float2(12.9898,78.233)))*43758.5453123);
}
法线、切线、副切线\副法线

物体与摄像机的方向、距离

距离

// 将坐标转换到裁剪空间
float3 posView = mul(UNITY_MATRIX_MV,v.vertex).xyz;
// 物体与镜头距离
float distance = length(posView);

方向

//将顶点从模型空间转换到世界空间
float4 worldPos = mul(unity_ObjectToWorld, v.vertex);
//获取世界空间中,顶点到相机的方向
o.viewDir = normalize(UnityWorldSpaceViewDir(worldPos));

Unity ShaderLab 坐标空间转换及方法相关推荐

  1. Unity Shader入门精要第四章:学习Shader 所需的数学基础--坐标空间

    Unity系列文章目录 文章目录 Unity系列文章目录 前言 一.4.6.1 为什么要使用这么多不同的坐标空间 二.4.6.3 顶点的坐标空间变换过程 4.6.4 模型空间 4.6.6 观察空间 4 ...

  2. Unity Shader中内置的坐标空间与转换矩阵函数

    模型空间(model space)也称为对象空间(object space)或局部空间(local space)是指以模型原点为原点的坐标系. 世界空间(world space)也称全局空间(glob ...

  3. Unity shader 入门之渲染管线三、空间转换

    一个顶点是怎么显示在屏幕上的 开始 妞妞的鼻子是怎么绘制到屏幕上的? 一些重要的空间变换 渲染流水线中顶点的空间变换过程 模型空间 模型空间,有时也被称为对象空间(object space)或局部空间 ...

  4. Shader山下(十六)坐标空间与转换矩阵

    模型空间(model space)也称为对象空间(object space)或局部空间(local space)是指以模型原点为原点的坐标系. 世界空间(world space)也称全局空间(glob ...

  5. Unity Shader学习三:坐标空间的变换

    (注意,由于格式问题,文中如p-c.c-p.c.p这类的为矢量的下标,-1.T为矩阵的上标) 假设现在有一个父坐标空间以及一个子坐标空间,已知父级坐标空间中子级坐标空间的原点位置以及3个单位坐标轴,此 ...

  6. python获取中文字体点阵坐标_Python实现点阵字体读取与转换的方法

    点阵字体是指根据文字的像素点来显示的字体,效果如下: 使用Python读取并显示的过程如下: 根据中文字符获取GB2312编码 通过GB2312编码计算该汉字在点阵字库中的区位和码位 通过区位和码位计 ...

  7. unity向服务器发送xml文件格式,Unity读取Excel文件转换XML格式文件的方法

    Unity读取Excel文件转换XML格式文件的方法 发布时间:2020-06-23 09:34:33 来源:亿速云 阅读:107 作者:清晨 不懂Unity读取Excel文件转换XML格式文件的方法 ...

  8. oracle 表空间转换,Oracle表空间数据文件移动的方法

    实现把用户表空间中的数据文件从某一个路径移动到另一个路径 一.针对可offline的非系统表空间 本例移动oracle的案例表空间(EXAMPLE表空间),将其从 D:\ORADATA\ORCL\ 移 ...

  9. Unity ShaderLab学习总结

    http://www.jianshu.com/p/7b9498e58659 Unity ShaderLab学习总结 作者 DonaldW 关注 2014.07.20 17:17* 字数 4891 阅读 ...

最新文章

  1. 2018-3-25论文(Whale Optimizer Algorithm)+(Gery Wolf Optimizer)笔记二---Introduction 对比
  2. zabbix 监控端口,其他端口和此端口类似
  3. 个人作业——软件产品分析
  4. python爬b站评论_Python爬虫入门教程 32-100 B站博人传评论数据抓取 scrapy
  5. EntityFramework Core 迁移忽略主外键关系
  6. delphi 关闭时缩小到托盘_delphi 实现最小化系统托盘
  7. android camera捕捉,通过android camera2 API捕捉4:3相机图片与16:9传感器阵列相机
  8. NYOJ 300 amp;amp; hdu 2276 Kiki amp; Little Kiki 2 (矩阵高速功率)
  9. access ea 可以联网吗_如何看待EA在STEAM上推出EA Play(原EA Access会员)?
  10. 前端|如何制作调查问卷
  11. css代码body>*是什么意思
  12. freemarker导出word文档中的复选框打钩功能
  13. 双击文件夹弹窗“找不到应用程序”,但是右键点击打开可以
  14. 电子科技大学计算机科学与技术考研复试,电子科技大学计算机科学与工程学院2021考研招生复试工作安排...
  15. 牛客小白月赛28 C-单词记忆方法——dfs
  16. ofo发布“小黄蜂”,想试试一贴即开的新体验吗
  17. statsmodels.formula数据使用predict()
  18. 51proteus仿真:生成方波、正弦波、锯齿波和三角波
  19. [系统安全] 二十六.WannaCry勒索病毒分析 (2)MS17-010漏洞利用及蠕虫解析
  20. 云贝餐饮o2o小程序-V2独立版【更新序列至2.5.1】独家修复商家登录/区域代理/分销商/会员卡/积分商城/文章/DIY (可线传)

热门文章

  1. 《windows 程序设计》中的翻译错误----学习笔记
  2. python爬虫实战之百度新闻爬取
  3. 使用html5+javascript+css实现单机版五子棋---跟电脑打没赢过
  4. linux命令之查看ip地址
  5. 超全面的JavaWeb笔记day01HTML等
  6. 刘涛入职阿里,花名刘一刀,担任聚划算官方优选官
  7. DRM驱动(一)之显示处理器介绍
  8. 亚马逊美国站12岁以下儿童产品 CPSIA测试标准
  9. Bootstrap JS插件使用实例(6)-折叠(手风琴效果)
  10. python爬虫破解百度文库_用Python爬取百度文库0下载券的免费文档详细步骤,附可执行软件...