// mv_theme.js // Apply consistent colors for manifest viewing. // // Usage: // // const THEMES = { primary: { rgba: [0.10, 0.45, 1.00, 1.0] }, // diagnostic blue accent: { rgba: [0.78, 0.33, 0.10, 1.0] }, // burnt orange-ish }; function applyTheme(mv) { const key = (mv.dataset.theme || "primary").toLowerCase(); const theme = THEMES[key] || THEMES.primary; // Lighting-related material choices that improve face contrast const metallic = 0.0; const roughness = 0.35; for (const mat of mv.model.materials) { mat.pbrMetallicRoughness.setBaseColorFactor(theme.rgba); mat.pbrMetallicRoughness.setMetallicFactor(metallic); mat.pbrMetallicRoughness.setRoughnessFactor(roughness); } } function hook(mv) { if (mv.model) { applyTheme(mv); } else { mv.addEventListener("load", () => applyTheme(mv), { once: true }); } } for (const mv of document.querySelectorAll("model-viewer.mv")) { hook(mv); }