• 关于NormalMap


        通常,NormalMap使用和一般正常的2D贴图相同的图片格式来储存,图片文件所能储存的都是正值,没有负值,不过Norml法线的数值有正有负。解决这个问题的方法是把Normal法线的数值范围由 -1~1转换到0~1,zaibatsu转后的数值放到图片中。PixelShader读取贴图后,再把它重新还原到 -1~1的范围内。

    -1~1 转换到  0~1 的公式: f(x) = 0.5 * x +0.5

      0~1抓换到  -1~1 的公式: f(x) = 2*x-1 或者(x-0.5)*2 (通常用的)

       NormalMap中的法线信息是在一个切线空间(TangentSpace)中的,要想使用贴图中的发现信息由两种做法,一种是把贴图中的发现信息转换到世界坐标系中,第二种是把灯光法线向量转换到切线空间中,这两种都要用到一个 切线矩阵。

       切线矩阵TangentSpace 是一个正交矩阵(注: 关于矩阵中的正交矩阵),如果把贴图中法线向量转换到世界空间中那么 mul(TexNormal,TangentSpace),如果是把灯光法线转换到切线空间就是 mul(TangentSpace,LightNormal),矩阵左乘就相当于矩阵本身的转置,对于正交矩阵而已转置就是逆。

    TangentSpace 的构建:

    float3x3 TangentSpace;

    TangentSpace[0]  = normalize( mul(Tangent , (float3x3)WorldITXf).xyz );

    TangentSpace[1]  = normalize( mul(Binormal, (float3x3)WorldITXf).xyz );

    TangentSpace[2]  = normalize( mul(Normal  , (float3x3)WorldITXf).xyz );
    其中 Tangent 顶点的切线, Binormal 顶点副法线, Normal  顶点法线.

    如何计算这三个向量

    我们只要计算出,Normal,Tangent 就可以计算出 Binormal= cross(Tangent , Normal )

  • 相关阅读:
    bootstrap
    bootstrap
    IDEA 配置maven
    jQuery
    jQuery
    jQuery
    jQuery
    Jquery
    【k8s】Pod-metadata
    【k8s】terminationMessagePolicy
  • 原文地址:https://www.cnblogs.com/ThreeThousandBigWorld/p/2746373.html
Copyright © 2020-2023  润新知