Tighten builtin pass metadata and remove skybox property fallbacks

This commit is contained in:
2026-04-08 13:13:42 +08:00
parent efdd6bd68f
commit 08c3278e10
9 changed files with 186 additions and 157 deletions

View File

@@ -52,7 +52,7 @@ Shader "Builtin Color Scale Post Process"
Pass
{
Name "ColorScale"
Tags { "LightMode" = "PostProcess" }
Tags { "LightMode" = "ColorScale" }
Cull Off
ZWrite Off
ZTest Always

View File

@@ -109,7 +109,7 @@ Shader "Builtin Final Color"
Pass
{
Name "FinalColor"
Tags { "LightMode" = "FinalOutput" }
Tags { "LightMode" = "FinalColor" }
Cull Off
ZWrite Off
ZTest Always

View File

@@ -233,7 +233,7 @@ Shader "Builtin Forward Lit"
Pass
{
Name "ForwardLit"
Tags { "LightMode" = "ForwardBase" }
Tags { "LightMode" = "ForwardLit" }
HLSLPROGRAM
#pragma target 4.5
#pragma vertex MainVS

View File

@@ -11,79 +11,35 @@ inline Containers::String NormalizeBuiltinPassMetadataValue(const Containers::St
return value.Trim().ToLower();
}
inline bool IsForwardPassName(const Containers::String& value) {
const Containers::String normalized = NormalizeBuiltinPassMetadataValue(value);
return normalized == Containers::String("forward") ||
normalized == Containers::String("forwardbase") ||
normalized == Containers::String("forwardlit") ||
normalized == Containers::String("forwardonly");
}
inline bool IsUnlitPassName(const Containers::String& value) {
const Containers::String normalized = NormalizeBuiltinPassMetadataValue(value);
return normalized == Containers::String("unlit") ||
normalized == Containers::String("forwardunlit") ||
normalized == Containers::String("srpdefaultunlit");
}
inline bool IsDepthOnlyPassName(const Containers::String& value) {
const Containers::String normalized = NormalizeBuiltinPassMetadataValue(value);
return normalized == Containers::String("depthonly") ||
normalized == Containers::String("depth");
}
inline bool IsShadowCasterPassName(const Containers::String& value) {
const Containers::String normalized = NormalizeBuiltinPassMetadataValue(value);
return normalized == Containers::String("shadowcaster") ||
normalized == Containers::String("shadow");
}
inline bool IsObjectIdPassName(const Containers::String& value) {
const Containers::String normalized = NormalizeBuiltinPassMetadataValue(value);
return normalized == Containers::String("objectid") ||
normalized == Containers::String("editorobjectid");
}
inline bool IsSkyboxPassName(const Containers::String& value) {
const Containers::String normalized = NormalizeBuiltinPassMetadataValue(value);
return normalized == Containers::String("skybox");
}
inline bool IsPostProcessPassName(const Containers::String& value) {
const Containers::String normalized = NormalizeBuiltinPassMetadataValue(value);
return normalized == Containers::String("postprocess") ||
normalized == Containers::String("colorscale");
}
inline bool IsFinalColorPassName(const Containers::String& value) {
const Containers::String normalized = NormalizeBuiltinPassMetadataValue(value);
return normalized == Containers::String("finaloutput") ||
normalized == Containers::String("finalcolor");
inline const char* GetBuiltinPassCanonicalName(BuiltinMaterialPass pass) {
switch (pass) {
case BuiltinMaterialPass::ForwardLit:
return "forwardlit";
case BuiltinMaterialPass::Unlit:
return "unlit";
case BuiltinMaterialPass::DepthOnly:
return "depthonly";
case BuiltinMaterialPass::ShadowCaster:
return "shadowcaster";
case BuiltinMaterialPass::ObjectId:
return "objectid";
case BuiltinMaterialPass::Skybox:
return "skybox";
case BuiltinMaterialPass::PostProcess:
return "colorscale";
case BuiltinMaterialPass::FinalColor:
return "finalcolor";
default:
return nullptr;
}
}
inline bool MatchesBuiltinPassName(
const Containers::String& value,
BuiltinMaterialPass pass) {
switch (pass) {
case BuiltinMaterialPass::ForwardLit:
return IsForwardPassName(value);
case BuiltinMaterialPass::Unlit:
return IsUnlitPassName(value);
case BuiltinMaterialPass::DepthOnly:
return IsDepthOnlyPassName(value);
case BuiltinMaterialPass::ShadowCaster:
return IsShadowCasterPassName(value);
case BuiltinMaterialPass::ObjectId:
return IsObjectIdPassName(value);
case BuiltinMaterialPass::Skybox:
return IsSkyboxPassName(value);
case BuiltinMaterialPass::PostProcess:
return IsPostProcessPassName(value);
case BuiltinMaterialPass::FinalColor:
return IsFinalColorPassName(value);
default:
return false;
}
const char* canonicalName = GetBuiltinPassCanonicalName(pass);
return canonicalName != nullptr &&
NormalizeBuiltinPassMetadataValue(value) == Containers::String(canonicalName);
}
inline bool ShaderPassHasExplicitBuiltinMetadata(const Resources::ShaderPass& shaderPass) {

View File

@@ -143,27 +143,6 @@ inline const Resources::Texture* ResolveSkyboxPanoramicTexture(const Resources::
}
}
static const char* kSkyboxTexturePropertyNames[] = {
"_PanoramicTex",
"_Tex",
"_MainTex",
"_SkyboxPanorama",
"panoramicTexture",
"skyboxPanorama",
"skyboxTexture",
"texture"
};
for (const char* propertyName : kSkyboxTexturePropertyNames) {
const Resources::ResourceHandle<Resources::Texture> textureHandle =
material->GetTexture(Containers::String(propertyName));
if (textureHandle.Get() != nullptr &&
textureHandle->IsValid() &&
IsPanoramicSkyboxTextureType(textureHandle->GetTextureType())) {
return textureHandle.Get();
}
}
return nullptr;
}
@@ -181,26 +160,6 @@ inline const Resources::Texture* ResolveSkyboxCubemapTexture(const Resources::Ma
}
}
static const char* kSkyboxTexturePropertyNames[] = {
"_Tex",
"_Cube",
"_SkyboxTexture",
"cubemap",
"skyboxCubemap",
"skyboxTexture",
"texture"
};
for (const char* propertyName : kSkyboxTexturePropertyNames) {
const Resources::ResourceHandle<Resources::Texture> textureHandle =
material->GetTexture(Containers::String(propertyName));
if (textureHandle.Get() != nullptr &&
textureHandle->IsValid() &&
IsCubemapSkyboxTextureType(textureHandle->GetTextureType())) {
return textureHandle.Get();
}
}
return nullptr;
}
@@ -227,19 +186,6 @@ inline Math::Vector4 ResolveSkyboxTint(const Resources::Material* material) {
}
}
static const char* kTintPropertyNames[] = {
"_Tint",
"tint",
"_Color",
"color"
};
for (const char* propertyName : kTintPropertyNames) {
if (material->HasProperty(Containers::String(propertyName))) {
return material->GetFloat4(Containers::String(propertyName));
}
}
return Math::Vector4::One();
}
@@ -256,17 +202,6 @@ inline float ResolveSkyboxExposure(const Resources::Material* material) {
}
}
static const char* kExposurePropertyNames[] = {
"_Exposure",
"exposure"
};
for (const char* propertyName : kExposurePropertyNames) {
if (material->HasProperty(Containers::String(propertyName))) {
return material->GetFloat(Containers::String(propertyName));
}
}
return 1.0f;
}
@@ -283,17 +218,6 @@ inline float ResolveSkyboxRotationDegrees(const Resources::Material* material) {
}
}
static const char* kRotationPropertyNames[] = {
"_Rotation",
"rotation"
};
for (const char* propertyName : kRotationPropertyNames) {
if (material->HasProperty(Containers::String(propertyName))) {
return material->GetFloat(Containers::String(propertyName));
}
}
return 0.0f;
}