From 1c3d8934901820632360c8abfd9260a0b4ab12ab Mon Sep 17 00:00:00 2001 From: Raanan Weber Date: Wed, 30 Oct 2024 16:07:51 +0100 Subject: [PATCH 1/3] Adding KHR_node_visibility --- .../2.0/Extensions/KHR_node_visibility.ts | 68 +++++++++++++++++++ .../loaders/src/glTF/2.0/Extensions/index.ts | 1 + 2 files changed, 69 insertions(+) create mode 100644 packages/dev/loaders/src/glTF/2.0/Extensions/KHR_node_visibility.ts diff --git a/packages/dev/loaders/src/glTF/2.0/Extensions/KHR_node_visibility.ts b/packages/dev/loaders/src/glTF/2.0/Extensions/KHR_node_visibility.ts new file mode 100644 index 00000000000..c1a738b7e9a --- /dev/null +++ b/packages/dev/loaders/src/glTF/2.0/Extensions/KHR_node_visibility.ts @@ -0,0 +1,68 @@ +import type { AbstractMesh } from "core/Meshes/abstractMesh"; +import type { GLTFLoader } from "../glTFLoader"; +import type { IGLTFLoaderExtension } from "../glTFLoaderExtension"; +import { registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExtensionRegistry"; + +const NAME = "KHR_node_visibility"; + +declare module "../../glTFFileLoader" { + // eslint-disable-next-line jsdoc/require-jsdoc + export interface GLTFLoaderExtensionOptions { + /** + * Defines options for the KHR_node_visibility extension. + */ + // NOTE: Don't use NAME here as it will break the UMD type declarations. + ["KHR_node_visibility"]: {}; + } +} + +/** + * Loader extension for KHR_node_visibility + */ +// eslint-disable-next-line @typescript-eslint/naming-convention +export class KHR_node_visibility implements IGLTFLoaderExtension { + /** + * The name of this extension. + */ + public readonly name = NAME; + /** + * Defines whether this extension is enabled. + */ + public enabled: boolean; + + private _loader: GLTFLoader; + + /** + * @internal + */ + constructor(loader: GLTFLoader) { + this._loader = loader; + this.enabled = loader.isExtensionUsed(NAME); + } + + public async onReady(): Promise { + this._loader.gltf.nodes?.forEach((node) => { + node._primitiveBabylonMeshes?.forEach((mesh) => { + mesh.inheritVisibility = true; + }); + // When the JSON Pointer is used we need to change both the transform node and the primitive meshes to the new value. + if (node.extensions?.KHR_node_visibility) { + if (node.extensions?.KHR_node_visibility.visible === false) { + if (node._babylonTransformNode) { + (node._babylonTransformNode as AbstractMesh).isVisible = false; + } + node._primitiveBabylonMeshes?.forEach((mesh) => { + mesh.isVisible = false; + }); + } + } + }); + } + + public dispose() { + (this._loader as any) = null; + } +} + +unregisterGLTFExtension(NAME); +registerGLTFExtension(NAME, true, (loader) => new KHR_node_visibility(loader)); diff --git a/packages/dev/loaders/src/glTF/2.0/Extensions/index.ts b/packages/dev/loaders/src/glTF/2.0/Extensions/index.ts index 1cd54557d92..81af328b07a 100644 --- a/packages/dev/loaders/src/glTF/2.0/Extensions/index.ts +++ b/packages/dev/loaders/src/glTF/2.0/Extensions/index.ts @@ -29,4 +29,5 @@ export * from "./MSFT_lod"; export * from "./MSFT_minecraftMesh"; export * from "./MSFT_sRGBFactors"; export * from "./KHR_interactivity"; +export * from "./KHR_node_visibility"; export * from "./ExtrasAsMetadata"; From b6bbc8f89af538837cfa1882c120e71d31657ef2 Mon Sep 17 00:00:00 2001 From: Raanan Weber Date: Wed, 30 Oct 2024 17:36:05 +0100 Subject: [PATCH 2/3] vis test --- .../ReferenceImages/gltfNodeVisibility.png | Bin 0 -> 15463 bytes .../tools/tests/test/visualization/config.json | 5 +++++ 2 files changed, 5 insertions(+) create mode 100644 packages/tools/tests/test/visualization/ReferenceImages/gltfNodeVisibility.png diff --git a/packages/tools/tests/test/visualization/ReferenceImages/gltfNodeVisibility.png b/packages/tools/tests/test/visualization/ReferenceImages/gltfNodeVisibility.png new file mode 100644 index 0000000000000000000000000000000000000000..2adc8d298e0dd55018c611e84c8e60dedac7da45 GIT binary patch literal 15463 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
?sK8-J; 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 Tr|Ggd&J-#aH5D@zt_S=N_!J7X literal 0 HcmV?d00001 diff --git a/packages/tools/tests/test/visualization/config.json b/packages/tools/tests/test/visualization/config.json index 23a6943d29a..cb5ec65b820 100644 --- a/packages/tools/tests/test/visualization/config.json +++ b/packages/tools/tests/test/visualization/config.json @@ -960,6 +960,11 @@ "playgroundId": "#WGZLGJ#3009", "referenceImage": "gltfTextureLinearInterpolation.png" }, + { + "title": "GLTF Node visibility test", + "playgroundId": "#80DN99#3", + "referenceImage": "gltfNodeVisibility.png" + }, { "title": "Asset Containers", "playgroundId": "#P3U079#19", From cbf402758898498f7f04bc1e3b81124d913a3455 Mon Sep 17 00:00:00 2001 From: Raanan Weber Date: Wed, 30 Oct 2024 18:38:45 +0100 Subject: [PATCH 3/3] update dynamic --- packages/dev/loaders/src/glTF/2.0/Extensions/dynamic.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/dev/loaders/src/glTF/2.0/Extensions/dynamic.ts b/packages/dev/loaders/src/glTF/2.0/Extensions/dynamic.ts index 810ba0bf2a9..f7b405abc39 100644 --- a/packages/dev/loaders/src/glTF/2.0/Extensions/dynamic.ts +++ b/packages/dev/loaders/src/glTF/2.0/Extensions/dynamic.ts @@ -165,4 +165,9 @@ export function registerBuiltInGLTFExtensions() { const { MSFT_sRGBFactors } = await import("./MSFT_sRGBFactors"); return new MSFT_sRGBFactors(loader); }); + + registerGLTFExtension("KHR_node_visibility", true, async (loader) => { + const { KHR_node_visibility } = await import("./KHR_node_visibility"); + return new KHR_node_visibility(loader); + }); }