zoukankan      html  css  js  c++  java
  • Unity shader with 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中用一个新的坐标变量来计算lightmapuv,否则开始可能正确,但是博主在把模型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

     

     

     

     

     

     

     

     

  • 相关阅读:
    @@IDENTITY 存储过程
    ASP.NET的Cookie和Session
    数据格式设置表达式
    DataTable类(MSDN)
    用静态变量代替appliction
    C cgi url 编码解码问题
    C#视频头操作
    c#网页抓取
    c语言字符串分隔
    CGI c 上传文件
  • 原文地址:https://www.cnblogs.com/zhanlang96/p/6272317.html
Copyright © 2011-2022 走看看