• 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
    }
    改变自己
  • 相关阅读:
    基于动态IP的Internet视频监控解决方案(作者:吴晓晖)
    Avid
    Silverlight 自定义控件的继承问题
    VOD三种VOD视频点播技术的简介和比较
    服务器主流存储:SAS存储知识问答
    获取oracle系统数据的sql
    C#去除字符串空格的几种方法
    利用Windows Media实现IP组播
    两种宽带接入方式HFC与ADSL的比较
    C#中用XMLDocument写文件时,去掉XMLNS属性
  • 原文地址:https://www.cnblogs.com/sun-shadow/p/4761998.html
Copyright © 2020-2023  润新知