diff --git a/indra/llprimitive/llgltfmaterial.cpp b/indra/llprimitive/llgltfmaterial.cpp
index 6d23cb80399aed27958e82a585ebea24edba87db..ee1931a27ba4216933e3d712e3ccc186648e22a5 100644
--- a/indra/llprimitive/llgltfmaterial.cpp
+++ b/indra/llprimitive/llgltfmaterial.cpp
@@ -61,6 +61,29 @@ LLMatrix3 LLGLTFMaterial::TextureTransform::asMatrix()
     return offset * rotation * scale;
 }
 
+LLGLTFMaterial::LLGLTFMaterial(bool for_override)
+: LLGLTFMaterial()
+{
+    if (for_override)
+    {
+        setBaseColorId(mBaseColorId, for_override);
+        setNormalId(mNormalId, for_override);
+        setMetallicRoughnessId(mMetallicRoughnessId, for_override);
+        setEmissiveId(mEmissiveId, for_override);
+
+        setBaseColorFactor(mBaseColor, for_override);
+        setAlphaCutoff(mAlphaCutoff, for_override);
+        setEmissiveColorFactor(mEmissiveColor, for_override);
+        setMetallicFactor(mMetallicFactor, for_override);
+        setRoughnessFactor(mRoughnessFactor, for_override);
+        setAlphaMode(mAlphaMode, for_override);
+        setDoubleSided(mDoubleSided, for_override);
+
+        // *NOTE: Texture offsets only exist in overrides, so there is no need
+        // to hack in the override value here.
+    }
+}
+
 LLGLTFMaterial::LLGLTFMaterial(const LLGLTFMaterial& rhs)
 {
     *this = rhs;
@@ -588,6 +611,9 @@ void LLGLTFMaterial::applyOverrideUUID(LLUUID& dst_id, const LLUUID& override_id
     }
 }
 
+// Make a static default material override for editing materials
+const LLGLTFMaterial LLGLTFMaterial::sOverrideDefault{true};
+
 void LLGLTFMaterial::applyOverride(const LLGLTFMaterial& override_mat)
 {
     LL_PROFILE_ZONE_SCOPED;
diff --git a/indra/llprimitive/llgltfmaterial.h b/indra/llprimitive/llgltfmaterial.h
index 60116fd423a17b1e7b62fd68e11bed27de37b3b3..2476818b2717476e83c52138d1b690fb146738d0 100644
--- a/indra/llprimitive/llgltfmaterial.h
+++ b/indra/llprimitive/llgltfmaterial.h
@@ -48,6 +48,8 @@ class LLGLTFMaterial : public LLRefCount
 
     // default material for reference
     static const LLGLTFMaterial sDefault;
+    // default material override for reference
+    static const LLGLTFMaterial sOverrideDefault;
 
     struct TextureTransform
     {
@@ -66,6 +68,7 @@ class LLGLTFMaterial : public LLRefCount
     };
 
     LLGLTFMaterial() {}
+    LLGLTFMaterial(bool for_override);
     LLGLTFMaterial(const LLGLTFMaterial& rhs);
 
     LLGLTFMaterial& operator=(const LLGLTFMaterial& rhs);
diff --git a/indra/newview/llmaterialeditor.cpp b/indra/newview/llmaterialeditor.cpp
index a0cb4e1c8f2910b238485af3b628bb8fe1f2dbb0..70b165460a10a5cd559c27a78839075de30b0b58 100644
--- a/indra/newview/llmaterialeditor.cpp
+++ b/indra/newview/llmaterialeditor.cpp
@@ -2385,19 +2385,26 @@ class LLRenderMaterialOverrideFunctor : public LLSelectedNodeFunctor
             // Selection can cover multiple objects, and live editor is
             // supposed to overwrite changed values only
             LLTextureEntry* tep = objectp->getTE(te);
-            LLPointer<LLGLTFMaterial> material = tep->getGLTFRenderMaterial();
 
-            if (material.isNull())
+            if (tep->getGLTFMaterial().isNull())
             {
                 // overrides are not supposed to work or apply if
                 // there is no base material to work from
                 return false;
             }
 
-
+            LLPointer<LLGLTFMaterial> material = tep->getGLTFMaterialOverride();
             // make a copy to not invalidate existing
             // material for multiple objects
-            material = new LLGLTFMaterial(*material);
+            if (material.isNull())
+            {
+                // Start with a material override which does not make any changes
+                material = new LLGLTFMaterial(LLGLTFMaterial::sOverrideDefault);
+            }
+            else
+            {
+                material = new LLGLTFMaterial(*material);
+            }
 
             U32 changed_flags = mEditor->getUnsavedChangesFlags();
             U32 reverted_flags = mEditor->getRevertedChangesFlags();