准备烘焙环境:
用standard的shader,进行烘焙。
使用高质量的lightmap编码,其实也即是对应HDR模式。RGBA16 sFloat
然后我们将一个物体的shader,换成下面的:
Shader "Unlit/SampleLightmap"
{
SubShader
{
Tags { "RenderType"="Opaque" }
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile _ LIGHTMAP_ON
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float2 uv2 : TEXCOORD1;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
float2 lightmapUV : TEXCOORD1;
};
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
o.lightmapUV = v.uv2.xy * unity_LightmapST.xy + unity_LightmapST.zw;
return o;
}
inline half3 DecodeLightmap2(fixed4 color, half4 decodeInstructions)
{
#if defined(UNITY_LIGHTMAP_DLDR_ENCODING)
return half3(1, 0, 0);
#elif defined(UNITY_LIGHTMAP_RGBM_ENCODING)
return half3(0, 1, 0);
#else //defined(UNITY_LIGHTMAP_FULL_HDR)
return half3(0, 0, 1);
#endif
}
inline half3 DecodeLightmap2(fixed4 color)
{
return DecodeLightmap2(color, unity_Lightmap_HDR);
}
fixed4 frag (v2f i) : SV_Target
{
#if defined(LIGHTMAP_ON)
half4 bakedColorTex = UNITY_SAMPLE_TEX2D(unity_Lightmap, i.lightmapUV.xy);
half3 bakedColor = DecodeLightmap2(bakedColorTex);
return fixed4(bakedColor, 1);
#else
return fixed4(0, 1, 0, 1);
#endif
}
ENDCG
}
}
}
走到了这里:
inline half3 DecodeLightmap2(fixed4 color, half4 decodeInstructions)
{
#if defined(UNITY_LIGHTMAP_DLDR_ENCODING)
return half3(1, 0, 0);
#elif defined(UNITY_LIGHTMAP_RGBM_ENCODING)
return half3(0, 1, 0);
#else //defined(UNITY_LIGHTMAP_FULL_HDR)
return half3(0, 0, 1); //高质量模式,走到了这里
#endif
}
换个模式:Low Quality
此时贴图格式变为:RGBA8 sRGB格式
此时走到:
inline half3 DecodeLightmap2(fixed4 color, half4 decodeInstructions)
{
#if defined(UNITY_LIGHTMAP_DLDR_ENCODING)
return half3(1, 0, 0);
#elif defined(UNITY_LIGHTMAP_RGBM_ENCODING)
return half3(0, 1, 0); //低质量走到了这里:Low Quality
#else //defined(UNITY_LIGHTMAP_FULL_HDR)
return half3(0, 0, 1);
#endif
}
下面换成Normal Quality试试:
没变化,也就是收pc下只用了:UNITY_LIGHTMAP_RGBM_ENCODING和UNITY_LIGHTMAP_FULL_HDR
前者对应得是Low/Normal Quality后者对应的是High Quality。