材质表面参数接通:新增 emissiveFactor(无 emissive 贴图时的发光入口,glTF 语义)入 UBO/YAML/缓存键/两 shader;Transmission/Thickness 未勾 Transparent 时禁用编辑(不透明段 shader 不读)

This commit is contained in:
2026-10-09 00:04:55 +08:00
parent 235482733c
commit 6447b5c0fa
6 changed files with 42 additions and 8 deletions
@@ -57,6 +57,10 @@ namespace Engine {
glm::vec4 surface{1.5f, 0.0f, 1.0f, 0.0f};
// 杂项语义:x = unlit(KHR_materials_unlit,shader 早退直出 albedo)
glm::vec4 misc{0.0f, 0.0f, 0.0f, 0.0f};
// glTF emissiveFactor:自发光颜色(rgb;黑 = 不发光)。emissive
// 槽默认兜底纹理是纯黑,无贴图时 Emissive Strength 乘出来恒黑
// ——无贴图想要发光就调这里(rgb × 贴图 × surface.z)
glm::vec4 emissiveFactor{0.0f, 0.0f, 0.0f, 0.0f};
// 每槽 KHR_texture_transform(glTF2 每个 textureInfo 独立声明
// offset/scale/rotation——烘焙单份顶点 UV 无法表达"一材质多槽
// 各异变换",收敛为 shader 侧线性式 uv' = A·uv + t,作用在本引擎
+4 -1
View File
@@ -84,7 +84,10 @@ namespace Engine
",s:" + std::to_string(params.surface.x) +
"," + std::to_string(params.surface.y) +
"," + std::to_string(params.surface.z) +
"," + std::to_string(params.surface.w);
"," + std::to_string(params.surface.w) +
",e:" + std::to_string(params.emissiveFactor.x) +
"," + std::to_string(params.emissiveFactor.y) +
"," + std::to_string(params.emissiveFactor.z);
// per-slot UV 变换 + unlit 入键:同一张贴图配不同变换是不同材质
//(KHR_texture_transform 测试模型:一张棋盘格被 82 个材质以不同
// 变换共享,键漏了会串成同一份)
+4
View File
@@ -84,6 +84,8 @@ namespace Engine
EmitVec4(out, data.params.baseColor);
out << YAML::Key << "Surface" << YAML::Value;
EmitVec4(out, data.params.surface);
out << YAML::Key << "EmissiveFactor" << YAML::Value;
EmitVec4(out, data.params.emissiveFactor);
out << YAML::Key << "Misc" << YAML::Value;
EmitVec4(out, data.params.misc);
// per-slot UV 变换(KHR_texture_transform):6 槽各 A(4 分量) + T
@@ -145,6 +147,8 @@ namespace Engine
m["BaseColor"], MaterialParams{}.baseColor);
out.params.surface = ReadVec4(
m["Surface"], MaterialParams{}.surface);
out.params.emissiveFactor = ReadVec4(
m["EmissiveFactor"], MaterialParams{}.emissiveFactor);
out.params.misc = ReadVec4(
m["Misc"], MaterialParams{}.misc);
for (u32 slot = 0; slot < Material::kSlotCount; ++slot) {