zoukankan      html  css  js  c++  java
  • 转 lightmap

    小记一下用法与问题,时更

    surface shader就不用操心了,自带lightmap计算

    主要是vertex fragment shader部分

    Unity5 bake light map有三种情况:

    1.Non-directional

    2.directional

    3.directional specular

     

    Non-directional

    这种计算最为简单,消耗也最少,

    注意不会烘焙上normal map的信息,只是模型顶点法线计算得的diffuse结果

    首先需要声明lightmap变量

    sampler2D unity_Lightmap;
    
    float4 unity_LightmapST;



    重复声明异常(unity 5.4),在UnityCG.cginc已经声明过了,就不用再声明

    需要在appdata中用一个新的坐标变量来计算lightmap的uv,否则开始可能正确,但是博主在把模型generate lightmap uv后再烘焙,uv全部都是错的了。

            structappdata {
    
                float4vertex : POSITION;
    
                float4tangent : TANGENT;
    
                float3normal : NORMAL;
    
                float2texcoord : TEXCOORD0;
    
                float2texcoord2 : TEXCOORD1;
    
                fixed4color : COLOR;
    
            };



    然后vertex部分的struct声明(名字随意)

    float2 uv_lightmap : TEXCOORD1;

    vertex shader生成计算lightmap uv

    o.uv_lightmap =v.texcoord2.xy *unity_LightmapST.xy + unity_LightmapST.zw;



    在fragment shader中获取lightmap数据的方法,得到的是三元向量,如果未烘焙默认值为0:

    DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap,i.uv_lightmap))



    判断是否烘焙,这样就可以分为两种算法,没有lightmap就实时算,有lightmap就用

            #ifdefLIGHTMAP_ON
    
    DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap,i.uv_lightmap))。。。。lightmap相关计算
    
            #endif


    烘焙lightmap后,shader获取的阴影自阴影信息为1,光照方向为0(与光的Baking模式设置有关,realtime(有)/mixed(有)/baked(无))

    directional specular

    这种会产生两种lightmap,一种是带normal map的diffuse信息也就是普通的light map,一种是direction map也就是光照方向,我们可以使用烘焙的光照方向来计算specular及其他

    应该是这样可以得到direction map,但是博主试过会报错

     UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd,unity_Lightmap,1);

     ---wolf96 2017/1/11

  • 相关阅读:
    写给所有的IT民工们
    如何不重启系统加载.SYS文件
    六十八个经典故事
    利用C#重启远程计算机
    无为无不为
    男人心里到底藏着哪些秘密?
    Microsoft好员工的十个标准
    javascript版的日期输入控件
    书写NDIS过滤钩子驱动实现ip包过滤
    男人25岁前的忠告#必阅
  • 原文地址:https://www.cnblogs.com/rexzhao/p/7339778.html
Copyright © 2011-2022 走看看