美文网首页
Unity内置Shader解读7——Lightmapped

Unity内置Shader解读7——Lightmapped

作者: ShawnWeasley | 来源:发表于2021-05-06 08:41 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/wkgvrltx.html