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