法线贴图的拆包

在法线贴图导入到Unity后,可以设置为Normal map类型,这一步操作Unity会根据平台来看看是否对法线贴图进行压缩,随后中需要使用UnpackNormal函数来映射为法线。

inline fixed3 UnpackNormalDXT5nm (fixed4 packednormal)
{    
    fixed3 normal;    
    normal.xy = packednormal.wy * 2 - 1;    
    normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));//根号(1-(x^2 + y^2))
    return normal;
}

inline fixed3 UnpackNormal(fixed4 packednormal)
{
    #if defined(UNITY_NO_DXT5nm)    
        return packednormal.xyz * 2 - 1;
    #else    
        return UnpackNormalDXT5nm(packednormal);
    #endif
}


法线可以压缩,只用两个通道就可以的原因在于:

一、法线是一个单位向量,也就是x^2+y^2+z^2=1

二、法线是一个只有正方向的向量


首页 我的博客
粤ICP备17103704号