zoukankan      html  css  js  c++  java
  • tangent space /handness

    normal

    tangent

    bitangent

    三者互相垂直。

     组成一个tangent space

    表示一个点 对于原本位置的偏移(扰动)

    考虑到这是为了 normalmap做出虚假的normal来受光

    我目前是这么理解的,下面做下去可以印证这个想法

    保证同一个平面的顶点的切线向量是一样的

    减少光照插值失真

    http://www.gamedev.net/topic/320413-calculating-tangent-vectors-for-normal-bump-mappinghelp-again/

    http://www.cnblogs.com/olswcsr/archive/2010/12/10/1902338.html

    http://www.gamedev.net/topic/347799-mirrored-uvs-and-tangent-space-solved/

    http://blog.csdn.net/mike_zw/article/details/6045668

    ------------------

     http://www.cnblogs.com/ThreeThousandBigWorld/archive/2012/07/16/2593892.html

    ogre

    -------------

    这里会产生一个问题是 UV winding order

    表现是,模型的normalmap结果 在某一半是反掉的

    因为身体对称的部分在同样的uv采样 导致有一半是反的

    maya里面tangentspace 里勾选 uv winding order detected或者ignored

    得到的tangent数值是一样的 那种不对称的(uv竖向)

    得到的binormal数值会改变 detected时uv竖向是对称的 横向是反的

    解决方法 dot(cross(normal, tangent), binormal)<0 tangent=-tangent

    再用这个tangent去算normal 

    大概是这个思路

    ------------------------------------

    上面写的矫正 normalmap的方法是不对的

    the right solution is:

    first we need a matrix (tangent space to world) cuz, the normap normal is in tangent space.

    TBN 

    then mul (normal, TBN)

    这样就解决了 normal map normal 对称的地方 反了的问题因为,采样同一块贴图放在不同位置

    组成tbn的 三个数据是顶点数据 有时间我会上传 这部分 代码 

    在github jorge sss  google (separetable subsurface scatter

    main.fx 这里面有这部分代码

     --------------------------------------------------

    又一次更新 :原理见之前的一篇博文吧

    是很久之前引用的

    http://www.cnblogs.com/minggoddess/archive/2011/04/07/2007637.html

    其实就是normal在tangent space 把它用tbn转到world space 就没有这个手性的问题了

    在introduction to 3d game programming with directx 10里面有

    为什么要用tangent space

    本质上是因为 光照要在统一空间计算  

    因为normalmap在uvspace 即tangent space

    所以其它数据都要转到 tangent space来计算 才会得到正确结果

    有两个反例

    两个mesh从一个地方采样 贴图 比如对称的衣服

    normalmap 采样的话 如果不用tbn矫正 即切到tangent space 就会出现 凹凸相反的问题 一半对 一半不对

    对于有animation的物体 因为uv是稳定的 所以出tangent space normal是兼容的

    http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-13-normal-mapping/

  • 相关阅读:
    python测试开发django-rest-framework-92.反序列化(ModelSerializer)之DecimalField保留2位小数
    python测试开发django-rest-framework-91.反序列化(ModelSerializer)之ChoiceField选项字段校验
    python测试开发django-rest-framework-90.反序列化(ModelSerializer)之唯一字段校验UniqueValidator
    python测试开发django-rest-framework-89.反序列化(ModelSerializer)之read_only和write_only
    python测试开发django-rest-framework-88.反序列化(ModelSerializer)之校验传入参数
    python接口自动化39-JMESPath解析json数据
    sql server全文搜索和filestream
    sql server 2008 filestream
    sql server存储和搜索非结构化数据
    cross server怎么取出自定义头部的Token
  • 原文地址:https://www.cnblogs.com/minggoddess/p/3876556.html
Copyright © 2011-2022 走看看