原文地址

在CG中,基于Per-Pixel的算法经常会涉及到Tangent Space的坐标变换,比如Bump Mapping,需要将Object Space的Light Vector转换到Tangent Space,然后在和该Pixel上的Normal Vector进行计算,因为Normal Vector是在Tangent Space中的。

像上面的Bump Mapping,对于Normal Texture,如果Normal Vector(这里的Normal Vector不是指Vertex上的)是设计在Mesh的Object Space中的话,一方面,Mesh的复杂度导致Normal Vector不方便设计;另外,如果Mesh的形状发生改变,那么原来的Normal Vector将不能够适用。所以,将Normal Vector的设计就放在统一的一个空间里面(Tangent Space)中,然后通过一个Triangle Surface上的几何信息,进行几何变化,最后在同一个坐标空间来使用。
对于一个Normal Texture的图示,他里面所有像素上的Normal Vector都在u,v,n坐标系上的,这也就是Tangent Space:
当将一个Normal Texture贴到Mesh上后,单考虑一个Vertex,他对应于Normal Texture上的一个点(具体在哪由这个Vertex的Texture Address u-v指定),而他的法向量就对应了Tangent Space中的n,经过该Vertex,垂直于n可以构造出Tangent Space中的u-v平面,这实际上也就在Object Space中构造出了Tangent Space。如图所示,V1为该顶点,淡蓝色矩形框平面为对应的u-v平面:
在Object Space和Tangent Space两个坐标系下进行坐标变换必须找到这两个坐标系之间的过渡矩阵。
根据变换等式
<xo, yo, zo>*T = <xt, yt, zt>
<x0, y0, z0>  : 为Object Space中的基向量,实际上就是一个单位矩阵
T             : 过渡矩阵
<xt, yt, zt>  : 为Tangent Space的基向量
可见T = <xt, yt, zt>构成的矩阵,所以这里要求的就是这三个基向量
zt这里就是这个Vertex上的n。xt,yt分别对应于u,v两个基向量,这是后面要求的两个向量。
根据一个Triangle上面的贴图,可以构建这个模型:
记:
Vertex1 : V1(x1, y1, z1), T1(u1, v1), N1(nx1, ny1, nz1)
Vertex2 : V2(x2, y2, z2), T2(u2, v2), N2(nx2, ny2, nz2)
Vertex3 : V3(x3, y3, z3), T3(u3, v3), N3(nx3, ny3, nz3)
记:
T21 = T2-T1 = (u21, v21)
T31 = T3-T1 = (u31, v31)
V21 = V2-V1
V31 = V3-V1

则有
V21_ = V21-V21*N1*N1                        V21*N1*N1是V21在u-v平面上的投影向量
V31_ = V31-V31*N1*N1
V21_和V31_分别为V21和V31在u-v平面上的投影向量
在图中的
v21 = Len(V21)*Nor(V21_)
v31 = Len(V31)*Nor(V31_)
Len()为计算对应向量的长度,Nor()为单位化对应向量,v21 和v31 分别为将V21和V31"拉到"u-v平面上去的向量。
根据在tangent space和Object Space两个空间是同构的,可以列出下面的等式:
u*u21 + v*v21 = v21
u*u31 + v*v31 = v31
解该方程,得到u,v,并单位化两个向量
通过上面的过程也就得到了<u,v,n>--->过渡矩阵T。
得到过渡矩阵T后,就可以任意的转化两个坐标系中的坐标。
其他:
1:<u,v,n>并不一定是标准正交基,所以T的转置矩阵并不一定等于T的逆矩阵。u,v的关系如何这要取决于上面的三个顶点的T1,T2,T3。
2:上面的计算过程是基于Vertex的,可以采用基于一个Triangle的计算方法,过程和上面是一致的,不同点在于这个时候u,v平面和Triangle平面重合。
3:在DirectX中有D3DXComputeTangent API对计算这三个基向量的支持。但是在他的描述中使用的是Tangent Vector(也就是u),Binormal Vector(也就是v)和Normal Vector(也就是n),且B = N Cross T

Tangent Space的基向量计算方法相关推荐

  1. [译]为任意网格计算tangent空间的基向量

    +BIT祝威+悄悄在此留下版了个权的信息说: [译]为任意网格计算tangent空间的基向量 Computing Tangent Space Basis Vectors for an Arbitrar ...

  2. 切线空间(Tangent Space)

    1. 线性变换 2. 切线空间(坐标系) 2.1 切线空间的构成 2.2 切线空间中光照计算及其弊端 Reference 1. 线性变换 在掌握切线空间之前我们先来简单了解线性变换与向量空间.矩阵的关 ...

  3. [图形学]切向空间(Tangent Space)

    2009年3月17日 阅读评论 发表评论     这个应该算是补遗漏,去年在MSN Space上写过一篇关于凹凸贴图的,当时写了半天其实写的一点也不明白,呵呵,因为有很多细节其实我也没搞太清楚,现在这 ...

  4. Minkowski space

    In mathematical physics, Minkowski space (or Minkowski spacetime) (/mɪŋˈkɔːfski, -ˈkɒf-/[1]) is a co ...

  5. Unity 中的坐标系

    参考 1.Shadow Map 原理和改进 2.[OpenGL]02 - OpenGL中的坐标系 3.矩阵理论 (这个是京东地址) 4.维基百科(文中的数学概念出处) 5.msdn mul 6.msd ...

  6. Unity Shader法线贴图(Normal Map)及其原理

    简介 以前经常听说"模型不好看啊,怎么办啊?"答曰"加法线","做了个高模,准备烘一下法线贴图","有的美术特别屌,直接画法线贴图 ...

  7. manifold learning 流形学习 zz

  8. 【多视图几何】TUM 课程 第2章 刚体运动

    课程的 YouTube 地址为:https://www.youtube.com/playlist?list=PLTBdjV_4f-EJn6udZ34tht9EVIW7lbeo4 .视频评论区可以找到课 ...

  9. 冯乐乐 unity_Unity常用矩阵运算的推导补遗——切线空间

    在上一篇文章中,我写了一些关于Unity中各个坐标空间及其转换矩阵是如何得到的,说实在的,我是那种"记忆需要依靠外部装置存储"类.如同<攻壳机动队>的电子脑一样的人,每 ...

  10. 毛发及眼球的渲染技术

    前言 这是关于角色渲染技术的第二篇,前一篇关于皮肤的渲染方法可见这里. 实际上为了逼真地还原一个角色,除了渲染技术外,在很多游戏中还使用了动画.物理仿真等其他方面的技术,这些技术也非常重要.譬如今年的 ...

最新文章

  1. golang 网页解析 goquer包 简介
  2. Git系列之(七) 常用指令 git reset
  3. Orleans解决并发之痛(三):集群
  4. PAT甲级1017 (模拟排序)
  5. shell 字符串变量比对_Linux Shell 字符串操作(长度/查找/替换)详解
  6. 内存表与 InnoDB表对比
  7. 第七代电子计算机,基于全新第七代智能英特尔®酷睿™处理器的最佳PC全面来袭...
  8. python - list 列表推导式
  9. swoole 连接mysql_Swoole 优雅的实现 MySQL 连接池
  10. 设计模式二十四讲之《状态模式》
  11. 什么是虚拟主机管理系统?
  12. 星巴克与阿里巴巴合作咖啡外卖
  13. 关于华为交换机堆叠问题
  14. 如何区分嵌入式系统和嵌入式操作系统
  15. Web前端第一季(HTML):三:课时 7 : 106-设置文档类型和网页编码+课时 8 : 107-段落标签和标题标签+课时 9 : 108-标签的属性和段落的对齐属性
  16. 自学玩编程需要具备哪些能力
  17. 2006年最受瞩目的七大IT技术(1)
  18. 【CANoe之CAPL基础学习_如何正常在总线上中发送CAN消息】
  19. joomla!读取数据库操作,使用JDatabase
  20. 优化器(Optimizer)(二)

热门文章

  1. 用好这 43 款 Chrome 插件,让你开发学习一下子好轻松!
  2. Robust performance of virtual sensing methods for active noise control 翻译
  3. Python:计算机视觉实现视频的AI换脸(最基础)
  4. android修改HOLO对话框风格
  5. PDCA循环和GTD时间管理
  6. vue获取剪切板内容_Vue实现剪贴板复制功能
  7. 【译学】数据分析手册学习09:举例说明 - 定量定性数据分析的程序和方法 Procedures and Methods
  8. 华为路由器:首次登陆配置Console、Telnet登录、Web登录
  9. 相机标定—— 张正友标定法(2)
  10. Excel定义函数自动填充