pc平台下lightmap的质量选取导致的宏变化

准备烘焙环境:
在这里插入图片描述
用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。

发布了646 篇原创文章 · 获赞 107 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/wodownload2/article/details/105174636