Unity内置Shader解读7——Lightmapped

这篇博客详细介绍了Unity中Lightmapped BumpedDiffuse Shader的使用场景,它主要应用于烘焙贴图。Shader在旧版烘焙流程中较为常见,通过采样烘焙贴图和Normalmap进行混合,实现光照效果。代码分析部分展示了如何通过Emission通道将两张贴图的颜色相乘并渲染。此外,还讨论了不同Shader系列的差异和编写思路,涉及的知识点包括纹理采样、颜色混合和Normalmap处理等。

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来渲染两者相乘的结果,如果我们自己写,应该有很多种写法,反正都是两张图混合颜色嘛。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值