zoukankan      html  css  js  c++  java
  • u3d_shader_surface_shader_3

    参考http://my.oschina.net/u/138823/blog/181131

    加了个凹凸贴图:

    抱歉把女神苏菲做成这样。

    一:Normal Texture的制作:

    1.首先是Normal Map的制作,直接在U3D里选取纹理Type为Normal类型即可

    二:UnpackNormal:

    2. o.Normal = UnpackNormal(tex2D(_BumpMap,mIn.uv_BumpMap));对normal tex进行数据的读取,并转化到对应的二维空间

    具体参考http://forum.unity3d.com/threads/unpacknormal-fixed4-packednormal-role.101163/内容。

    将法线坐标从0到1转化到-1到1之间;其中法线纹理又区分不同的硬件使用情况

    o(︶︿︶)o ,刚开始疑惑为什么以下:    

                o.Albedo =    tex2D(_MainTex,mIn.uv_MainTex).rgb;
                o.Normal = UnpackNormal(tex2D(_BumpMap,mIn.uv_BumpMap));

    Albedo漫反射没有使用UnpackNormal进行坐标转换,(我理解错误:以为UnpackNormal进行了纹理坐标系到二维空间坐标系的转换)

    inline fixed3 UnpackNormalDXT5nm (fixed4 packednormal)
    {
        fixed3 normal;
        normal.xy = packednormal.wy * 2 - 1;//RGBA中,x保存在a中,y保存在g中,从A和G中获取发现数据xy;然后再求z值
    #if defined(SHADER_API_FLASH)
        // Flash does not have efficient saturate(), and dot() seems to require an extra register.
        normal.z = sqrt(1 - normal.x*normal.x - normal.y * normal.y);
    #else
        normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
    #endif
        return normal;
    }
    
    inline fixed3 UnpackNormal(fixed4 packednormal)
    {
    #if defined(UNITY_NO_DXT5nm)
        return packednormal.xyz * 2 - 1;    //
    #else
        return UnpackNormalDXT5nm(packednormal);
    #endif
    }
    改变自己
  • 相关阅读:
    uniapp开发微信小程序
    requests自动登录禅道并提交bug 测试
    [转载]使用CPU时间戳进行高精度计时
    lu面
    音量控制面板项目说明
    【转载】粤语翻译工具
    专业操盘手的买卖法则
    自动刷新查询火车票脚本
    股东权益和权益比
    异形魔方SQ1的暴力解法
  • 原文地址:https://www.cnblogs.com/sun-shadow/p/4761998.html
Copyright © 2011-2022 走看看