Unity内置Shader解读7——Lightmapped

1.Shader在什么情况下使用

Lightmapped通常用在烘焙贴图,就是比如Unity烘焙出来的结果,需要渲染的话烘焙的贴图就得用这个shader。
Lightmapped系列基本就下面几个,基本都在旧的上面加了一张Lightmapped贴图采样,然后混合,因此只分析一个基础的,VertexLit系列比较难我们放最后讨论。


image.png

2.Shader的价值(用的多不多),Shader的难度

旧版烘焙能用到吧,这个系列应该用的比较多。

3.代码详细注释

Shader "Legacy Shaders/Lightmapped/Bumped Diffuse" {
  Properties {
    _Color ("Main Color", Color) = (1,1,1,1)
    _MainTex ("Base (RGB)", 2D) = "white" {}
    _BumpMap ("Normalmap", 2D) = "bump" {}
    _LightMap ("Lightmap (RGB)", 2D) = "black" {}//烘焙的贴图
  }

  SubShader {
    LOD 300
    Tags { "RenderType" = "Opaque" }
    CGPROGRAM
    #pragma surface surf Lambert nodynlightmap
    struct Input {
      float2 uv_MainTex;
      float2 uv_BumpMap;
      float2 uv2_LightMap;
    };
    sampler2D _MainTex;
    sampler2D _BumpMap;
    sampler2D _LightMap;
    fixed4 _Color;
    void surf (Input IN, inout SurfaceOutput o)
    {
      o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Color;
      //采样烘焙的贴图
      half4 lm = tex2D (_LightMap, IN.uv2_LightMap);
      //用Emission来渲染两者相乘的结果,因此不太需要之前的提亮操作
      o.Emission = lm.rgb*o.Albedo.rgb;
      //透明混合
      o.Alpha = lm.a * _Color.a;
      o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
    }
    ENDCG
  }
  FallBack "Legacy Shaders/Lightmapped/Diffuse"
}

4.Shader编写思路,用到的知识点

用Emission来渲染两者相乘的结果,如果我们自己写,应该有很多种写法,反正都是两张图混合颜色嘛。

你可能感兴趣的:(Unity内置Shader解读7——Lightmapped)