Explorar o código

Merge pull request #8430 from Popov72/gltf-khr-unlit-export

Add support for KHR_materials_unlit to GLTF serializer
sebavan %!s(int64=5) %!d(string=hai) anos
pai
achega
0b718560b0

+ 4 - 0
dist/preview release/what's new.md

@@ -103,6 +103,10 @@
 - Use min/max values from position accessors (when available) to set the bounding box of meshes ([Popov72](https://github.com/Popov72))
 - Added missing "pluginExtension" parameter to SceneLoader.ImportAnimations. ([phenry20](https://github.com/phenry20))
 
+### Serializers
+
+- Added support for KHR_materials_unlit to glTF serializer ([Popov72](https://github.com/Popov72))
+
 ### Navigation
 
 - export/load prebuilt binary navigation mesh ([cedricguillemet](https://github.com/cedricguillemet))

+ 61 - 0
serializers/src/glTF/2.0/Extensions/KHR_materials_unlit.ts

@@ -0,0 +1,61 @@
+import { IMaterial } from "babylonjs-gltf2interface";
+import { IGLTFExporterExtensionV2 } from "../glTFExporterExtension";
+import { _Exporter } from "../glTFExporter";
+import { Material } from 'babylonjs/Materials/material';
+import { PBRMaterial } from 'babylonjs/Materials/PBR/pbrMaterial';
+import { StandardMaterial } from 'babylonjs/Materials/standardMaterial';
+
+const NAME = "KHR_materials_unlit";
+
+/**
+ * @hidden
+ */
+export class KHR_materials_unlit implements IGLTFExporterExtensionV2 {
+    /** Name of this extension */
+    public readonly name = NAME;
+
+    /** Defines whether this extension is enabled */
+    public enabled = true;
+
+    /** Defines whether this extension is required */
+    public required = false;
+
+    private _wasUsed = false;
+
+    constructor(exporter: _Exporter) {
+    }
+
+    /** @hidden */
+    public get wasUsed() {
+        return this._wasUsed;
+    }
+
+    public dispose() {
+    }
+
+    public postExportMaterialAsync?(context: string, node: IMaterial, babylonMaterial: Material): Promise<IMaterial> {
+        return new Promise((resolve, reject) => {
+            let unlitMaterial = false;
+
+            if (babylonMaterial instanceof PBRMaterial) {
+                unlitMaterial = babylonMaterial.unlit;
+            } else if (babylonMaterial instanceof StandardMaterial) {
+                unlitMaterial = babylonMaterial.disableLighting;
+            }
+
+            if (unlitMaterial) {
+                this._wasUsed = true;
+
+                if (node.extensions == null) {
+                    node.extensions = {};
+                }
+
+                node.extensions[NAME] = {};
+            }
+
+            resolve(node);
+        });
+    }
+}
+
+_Exporter.RegisterExtension(NAME, (exporter) => new KHR_materials_unlit(exporter));

+ 2 - 1
serializers/src/glTF/2.0/Extensions/index.ts

@@ -1,3 +1,4 @@
 export * from "./KHR_texture_transform";
 export * from "./KHR_lights_punctual";
-export * from "./KHR_materials_sheen";
+export * from "./KHR_materials_sheen";
+export * from "./KHR_materials_unlit";