|
起因
本来是没有要记录的打算的,但是昨天有同事突然说在Android上FrameDebug到的物体使用的Shader Variant没有任何keyword,以下是Android上的截图
Android的截图
之前还遇到过在FrameDebug中没有Event的! 正常情况下,这个Shader Variant应该有以下的keyword
simplelit, SubShader #0
FOG_LINEAR LIGHTMAP_ON LIGHTMAP_SHADOW_MIXING SHADOWS_SHADOWMASK _ENABLE_GI _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _SHADOWS_SOFT采样工具收集到的变体集基本如下:
- first: {fileID: 4800000, guid: a508dd1fe46c65e43b13d0815c9ca93d, type: 3}
second:
variants:
- keywords:
passType: 8
- keywords: _ALPHATEST_ON
passType: 8
- keywords:
passType: 11
- keywords: _ALPHATEST_ON
passType: 11
- keywords:
passType: 13
- keywords: _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _SHADOWS_SOFT _SHADOW_COLOR_ON
passType: 13
- keywords: LIGHTMAP_ON _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _SHADOWS_SOFT
_SHADOW_COLOR_ON
passType: 13
...
- keywords: FOG_EXP LIGHTMAP_ON _ALPHATEST_ON _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE
_SHADOWS_SOFT
passType: 13
...
- keywords: FOG_EXP LIGHTMAP_ON _ENABLE_GI _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE
_NORMALMAP _SHADOWS_SOFT _SHADOW_COLOR_ON
passType: 13
- keywords: _ALPHATEST_ON _ENABLE_GI _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE
_SHADOWS_SOFT
passType: 13
...
- keywords: FOG_EXP LIGHTMAP_ON _ALPHATEST_ON _ENABLE_DROPMAINHIGHLIGHT _ENABLE_GI
_MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _SHADOWS_SOFT
passType: 13而另外一个ShaderVariant情况就不大一样了!以下是PC上的截图
Standalone的截图
但是Android上使用的keyword组却是以下的样子:
_Lit, SubShader #0
FOG_LINEAR LIGHTMAP_ON SHADOWS_SHADOWMASK _ADDITIONAL_LIGHTS _ENABLE_GI _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MATCAPMODE_MULTIPLY _SHADOWS_SOFT 和PC上的对比,缺少了LIGHTMAP_SHADOW_MIXING!!! 为什么?
原则
- 首先是keyword的顺序不影响选择
- keyword最大交集多优先(交集必须和选择的变体keyword数量一致!)
- ShaderVariantCollection顺序前面优先
下面是例子:
假设是在Forward模式下,已经进行打包编译的keyword组合有一下:
// 按顺序从上到下
1. A B C
2. A B E
3. no keyword正确渲染使用的keyword组合 | 实际调用的keyword组合 | 说明 | A B C | A B C | 正常匹配 | A B | no keyword | 没有匹配的变体 | A B C D | A B C | 调用交集中keyword数量多的变体 | A B C E | A B C | A B C和A B E交集数量一致,但是因为A B C排在前面,优先使用了 | 到这里,基本就能理解为什么出现第一张图的原因了!而且从svc中匹配的结果也是没有最大匹配的交集,所以智能选择no keyword了!
前面也提到遇到UI渲染的时候在FrameDebug里连Event都没有找到,原因就是除了keyword找不到外,连lightmode都没有匹配,即Forward或者Add之类的!! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|