Serialize empty JSON object when material has all default parameters. Fixes #294 .
diff --git a/tests/tester.cc b/tests/tester.cc
index 012b54d..bc5f819 100644
--- a/tests/tester.cc
+++ b/tests/tester.cc
@@ -412,6 +412,28 @@
   REQUIRE(true == ret);
 }
 
+TEST_CASE("serialize-empty-material", "[issue-294]") {
+
+  tinygltf::Model m;
+
+  tinygltf::Material mat;
+  mat.pbrMetallicRoughness.baseColorFactor = {1.0f, 1.0f, 1.0f, 1.0f}; // default baseColorFactor
+  m.materials.push_back(mat);
+
+  std::stringstream os;
+
+  tinygltf::TinyGLTF ctx;
+  ctx.WriteGltfSceneToStream(&m, os, false, false);
+
+  // use nlohmann json(included inside of tiny_gltf.h)
+  json j = json::parse(os.str());
+
+  REQUIRE(1 == j["materials"].size());
+  REQUIRE(j["asset"].is_null());
+  REQUIRE(j["materials"][0].is_object());
+
+}
+
 #ifndef TINYGLTF_NO_FS
 TEST_CASE("expandpath-utf-8", "[pr-226]") {
 
diff --git a/tiny_gltf.h b/tiny_gltf.h
index 88e1093..00875f0 100644
--- a/tiny_gltf.h
+++ b/tiny_gltf.h
@@ -26,6 +26,7 @@
 // THE SOFTWARE.
 
 // Version:
+//  - v2.4.3 Fix null object output when when material has all default parameters.
 //  - v2.4.2 Decode percent-encoded URI.
 //  - v2.4.1 Fix some glTF object class does not have `extensions` and/or
 //  `extras` property.
@@ -7225,6 +7226,15 @@
     for (unsigned int i = 0; i < model->materials.size(); ++i) {
       json material;
       SerializeGltfMaterial(model->materials[i], material);
+
+      if (JsonIsNull(material)) {
+        // Issue 294.
+        // `material` does not have any required parameters
+        // so the result may be null(unmodified) when all material parameters have default value.
+        //
+        // null is not allowed thus we create an empty JSON object.
+        JsonSetObject(material);
+      }
       JsonPushBack(materials, std::move(material));
     }
     JsonAddMember(o, "materials", std::move(materials));