升级水插件
This commit is contained in:
@@ -29,6 +29,8 @@ namespace WaveHarmonic.Crest.Editor.Build
|
||||
false;
|
||||
#endif
|
||||
|
||||
static readonly string[] s_ShadowCollectorKeywords = { "SHADOWS_SINGLE_CASCADE", "SHADOWS_SPLIT_SPHERES", "SHADOWS_SOFT" };
|
||||
|
||||
public void OnProcessShader(Shader shader, ShaderSnippetData snippet, IList<ShaderCompilerData> data)
|
||||
{
|
||||
// Not one of our shaders.
|
||||
@@ -49,6 +51,8 @@ namespace WaveHarmonic.Crest.Editor.Build
|
||||
return;
|
||||
}
|
||||
|
||||
// NOTE: There is no point checking against sub-shader count.
|
||||
|
||||
_VariantCount += data.Count;
|
||||
|
||||
// Strip BIRP sub-shader if not using BIRP, as Unity only strips HDRP/URP sub-shaders.
|
||||
@@ -61,34 +65,36 @@ namespace WaveHarmonic.Crest.Editor.Build
|
||||
|
||||
for (var i = data.Count - 1; i >= 0; --i)
|
||||
{
|
||||
var strip = false;
|
||||
var keywords = data[i].shaderKeywordSet.GetShaderKeywords();
|
||||
var isLightingPass = snippet.passType is PassType.ForwardBase or PassType.ForwardAdd;
|
||||
var isTransparent = keywords.Any(x => x.name == "_BUILTIN_SURFACE_TYPE_TRANSPARENT");
|
||||
var isTransparentShadowReceiver = keywords.Any(x => x.name == "_BUILTIN_TRANSPARENT_RECEIVES_SHADOWS");
|
||||
|
||||
foreach (var keyword in keywords)
|
||||
// Invalid combination.
|
||||
if (isLightingPass && !isTransparent && isTransparentShadowReceiver)
|
||||
{
|
||||
var name = keyword.name;
|
||||
var strip =
|
||||
// Main light shadows. Never used.
|
||||
name.StartsWithNoAlloc("_MAIN_LIGHT_") ||
|
||||
// Additional lights. Never used. Although, vertex lighting keyword is set.
|
||||
name.StartsWithNoAlloc("_ADDITIONAL_LIGHT") ||
|
||||
// Never used. Used in deferred pass, but not defined in deferred pass.
|
||||
keyword.name is "LIGHTMAP_SHADOW_MIXING" or "SHADOWS_SHADOWMASK" ||
|
||||
// Never used.
|
||||
keyword.name is "_SCREEN_SPACE_OCCLUSION" or "_SHADOWS_SOFT" or "_CASTING_PUNCTUAL_LIGHT_SHADOW" ||
|
||||
// BIRP does not support this feature (URP does).
|
||||
keyword.name is "_GBUFFER_NORMALS_OCT" ||
|
||||
// TODO: check LightMode instead of pass name.
|
||||
// Shadow keywords are not enabled for transparent objects, except if casting.
|
||||
isTransparent && snippet.passName == "ShadowCaster" && keyword.name.Contains("SHADOW");
|
||||
strip = true;
|
||||
}
|
||||
|
||||
if (strip)
|
||||
if (!strip)
|
||||
{
|
||||
foreach (var keyword in keywords)
|
||||
{
|
||||
_VariantCountStripped++;
|
||||
data.RemoveAt(i);
|
||||
break;
|
||||
var name = keyword.name;
|
||||
strip =
|
||||
// Invalid combination.
|
||||
isLightingPass && (!isTransparent || !isTransparentShadowReceiver) && s_ShadowCollectorKeywords.Contains(keyword.name);
|
||||
|
||||
if (strip) break;
|
||||
}
|
||||
}
|
||||
|
||||
if (strip)
|
||||
{
|
||||
_VariantCountStripped++;
|
||||
data.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,6 +223,14 @@ namespace WaveHarmonic.Crest.Editor.Build
|
||||
}
|
||||
}
|
||||
|
||||
if (!RenderPipelineHelper.IsLegacy)
|
||||
{
|
||||
if (shader.name.StartsWithNoAlloc("Hidden/Crest/Legacy/"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -273,8 +287,8 @@ namespace WaveHarmonic.Crest.Editor.Build
|
||||
return false;
|
||||
}
|
||||
|
||||
// There will be at least three sub-shaders if one per render pipeline.
|
||||
if (shader.subshaderCount <= 2)
|
||||
// There will be at least two sub-shaders if other render pipelines.
|
||||
if (shader.subshaderCount <= 1)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user