@babylonjs/loaders 8.56.2 → 9.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BVH/bvhFileLoader.d.ts +3 -3
- package/BVH/bvhFileLoader.js +1 -1
- package/BVH/bvhFileLoader.js.map +1 -1
- package/BVH/bvhFileLoader.metadata.js.map +1 -1
- package/BVH/bvhLoader.d.ts +4 -4
- package/BVH/bvhLoader.js.map +1 -1
- package/OBJ/mtlFileLoader.d.ts +3 -3
- package/OBJ/mtlFileLoader.js.map +1 -1
- package/OBJ/objFileLoader.d.ts +3 -3
- package/OBJ/objFileLoader.js +1 -1
- package/OBJ/objFileLoader.js.map +1 -1
- package/OBJ/objFileLoader.metadata.js.map +1 -1
- package/OBJ/objLoadingOptions.d.ts +1 -1
- package/OBJ/objLoadingOptions.js.map +1 -1
- package/OBJ/solidParser.d.ts +4 -4
- package/OBJ/solidParser.js.map +1 -1
- package/SPLAT/sog.d.ts +2 -2
- package/SPLAT/sog.js.map +1 -1
- package/SPLAT/splatFileLoader.d.ts +3 -3
- package/SPLAT/splatFileLoader.js +3 -1
- package/SPLAT/splatFileLoader.js.map +1 -1
- package/SPLAT/splatFileLoader.metadata.js.map +1 -1
- package/SPLAT/splatLoadingOptions.d.ts +1 -1
- package/SPLAT/splatLoadingOptions.js.map +1 -1
- package/SPLAT/spz.d.ts +3 -3
- package/SPLAT/spz.js.map +1 -1
- package/STL/stlFileLoader.d.ts +4 -4
- package/STL/stlFileLoader.js.map +1 -1
- package/STL/stlFileLoader.metadata.js.map +1 -1
- package/dynamic.js.map +1 -1
- package/glTF/1.0/glTFBinaryExtension.d.ts +3 -3
- package/glTF/1.0/glTFBinaryExtension.js.map +1 -1
- package/glTF/1.0/glTFLoader.d.ts +6 -6
- package/glTF/1.0/glTFLoader.js +2 -1
- package/glTF/1.0/glTFLoader.js.map +1 -1
- package/glTF/1.0/glTFLoaderInterfaces.d.ts +7 -7
- package/glTF/1.0/glTFLoaderInterfaces.js.map +1 -1
- package/glTF/1.0/glTFLoaderUtils.d.ts +3 -4
- package/glTF/1.0/glTFLoaderUtils.js +1 -1
- package/glTF/1.0/glTFLoaderUtils.js.map +1 -1
- package/glTF/1.0/glTFMaterialsCommonExtension.d.ts +1 -1
- package/glTF/1.0/glTFMaterialsCommonExtension.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_lights_area.d.ts +4 -4
- package/glTF/2.0/Extensions/EXT_lights_area.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_lights_ies.d.ts +4 -4
- package/glTF/2.0/Extensions/EXT_lights_ies.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_lights_image_based.d.ts +4 -4
- package/glTF/2.0/Extensions/EXT_lights_image_based.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.d.ts +4 -4
- package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_meshopt_compression.d.ts +3 -3
- package/glTF/2.0/Extensions/EXT_meshopt_compression.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_texture_avif.d.ts +4 -4
- package/glTF/2.0/Extensions/EXT_texture_avif.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_texture_webp.d.ts +4 -4
- package/glTF/2.0/Extensions/EXT_texture_webp.js.map +1 -1
- package/glTF/2.0/Extensions/ExtrasAsMetadata.d.ts +8 -8
- package/glTF/2.0/Extensions/ExtrasAsMetadata.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_animation_pointer.d.ts +6 -6
- package/glTF/2.0/Extensions/KHR_animation_pointer.data.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_animation_pointer.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_draco_mesh_compression.d.ts +5 -5
- package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_interactivity/flowGraphGLTFDataProvider.d.ts +5 -6
- package/glTF/2.0/Extensions/KHR_interactivity/flowGraphGLTFDataProvider.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_interactivity.d.ts +3 -3
- package/glTF/2.0/Extensions/KHR_interactivity.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_lights_punctual.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_lights_punctual.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_anisotropy.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_anisotropy.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_clearcoat.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_clearcoat.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_coat.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_coat.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_dispersion.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_dispersion.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_emissive_strength.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_fuzz.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_fuzz.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_ior.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_ior.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_iridescence.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_iridescence.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_sheen.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_sheen.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_specular.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_specular.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_transmission.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_transmission.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_unlit.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_unlit.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_variants.d.ts +6 -6
- package/glTF/2.0/Extensions/KHR_materials_variants.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_volume.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_volume.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_volume_scatter.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_materials_volume_scatter.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_mesh_quantization.d.ts +2 -2
- package/glTF/2.0/Extensions/KHR_mesh_quantization.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_node_hoverability.d.ts +2 -2
- package/glTF/2.0/Extensions/KHR_node_hoverability.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_node_selectability.d.ts +2 -2
- package/glTF/2.0/Extensions/KHR_node_selectability.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_node_visibility.d.ts +2 -2
- package/glTF/2.0/Extensions/KHR_node_visibility.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_texture_basisu.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_texture_basisu.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_texture_transform.d.ts +4 -4
- package/glTF/2.0/Extensions/KHR_texture_transform.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_xmp_json_ld.d.ts +2 -2
- package/glTF/2.0/Extensions/KHR_xmp_json_ld.js.map +1 -1
- package/glTF/2.0/Extensions/MSFT_audio_emitter.d.ts +5 -5
- package/glTF/2.0/Extensions/MSFT_audio_emitter.js.map +1 -1
- package/glTF/2.0/Extensions/MSFT_lod.d.ts +7 -7
- package/glTF/2.0/Extensions/MSFT_lod.js.map +1 -1
- package/glTF/2.0/Extensions/MSFT_minecraftMesh.d.ts +4 -4
- package/glTF/2.0/Extensions/MSFT_minecraftMesh.js.map +1 -1
- package/glTF/2.0/Extensions/MSFT_sRGBFactors.d.ts +4 -4
- package/glTF/2.0/Extensions/MSFT_sRGBFactors.js.map +1 -1
- package/glTF/2.0/Extensions/gltfPathToObjectConverter.d.ts +3 -3
- package/glTF/2.0/Extensions/gltfPathToObjectConverter.js.map +1 -1
- package/glTF/2.0/Extensions/objectModelMapping.d.ts +12 -14
- package/glTF/2.0/Extensions/objectModelMapping.js +2 -2
- package/glTF/2.0/Extensions/objectModelMapping.js.map +1 -1
- package/glTF/2.0/glTFLoader.d.ts +18 -19
- package/glTF/2.0/glTFLoader.js.map +1 -1
- package/glTF/2.0/glTFLoaderAnimation.d.ts +2 -2
- package/glTF/2.0/glTFLoaderAnimation.js.map +1 -1
- package/glTF/2.0/glTFLoaderExtension.d.ts +15 -15
- package/glTF/2.0/glTFLoaderExtension.js.map +1 -1
- package/glTF/2.0/glTFLoaderExtensionRegistry.d.ts +2 -2
- package/glTF/2.0/glTFLoaderExtensionRegistry.js.map +1 -1
- package/glTF/2.0/glTFLoaderInterfaces.d.ts +9 -9
- package/glTF/2.0/glTFLoaderInterfaces.js.map +1 -1
- package/glTF/2.0/materialLoadingAdapter.d.ts +5 -5
- package/glTF/2.0/materialLoadingAdapter.js.map +1 -1
- package/glTF/2.0/openpbrMaterialLoadingAdapter.d.ts +5 -5
- package/glTF/2.0/openpbrMaterialLoadingAdapter.js.map +1 -1
- package/glTF/2.0/pbrMaterialLoadingAdapter.d.ts +5 -5
- package/glTF/2.0/pbrMaterialLoadingAdapter.js.map +1 -1
- package/glTF/glTFFileLoader.d.ts +12 -12
- package/glTF/glTFFileLoader.js +1 -1
- package/glTF/glTFFileLoader.js.map +1 -1
- package/glTF/glTFFileLoader.metadata.js.map +1 -1
- package/glTF/glTFValidation.d.ts +1 -1
- package/glTF/glTFValidation.js.map +1 -1
- package/legacy/legacy-bvhFileLoader.js.map +1 -1
- package/legacy/legacy-dynamic.js.map +1 -1
- package/legacy/legacy-glTF.js.map +1 -1
- package/legacy/legacy-glTF1.js.map +1 -1
- package/legacy/legacy-glTF1FileLoader.js +0 -1
- package/legacy/legacy-glTF1FileLoader.js.map +1 -1
- package/legacy/legacy-glTF2.js.map +1 -1
- package/legacy/legacy-glTF2FileLoader.js +0 -1
- package/legacy/legacy-glTF2FileLoader.js.map +1 -1
- package/legacy/legacy-glTFFileLoader.js +0 -1
- package/legacy/legacy-glTFFileLoader.js.map +1 -1
- package/legacy/legacy-objFileLoader.js.map +1 -1
- package/legacy/legacy-stlFileLoader.js.map +1 -1
- package/legacy/legacy.js +0 -1
- package/legacy/legacy.js.map +1 -1
- package/package.json +8 -8
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import {
|
|
3
|
-
import type
|
|
4
|
-
import type
|
|
5
|
-
import type
|
|
6
|
-
import type { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
|
|
1
|
+
import { type IFlowGraphBlockConfiguration, FlowGraphBlock } from "@babylonjs/core/FlowGraph/flowGraphBlock.js";
|
|
2
|
+
import { type IGLTF } from "../../glTFLoaderInterfaces.js";
|
|
3
|
+
import { type FlowGraphDataConnection } from "@babylonjs/core/FlowGraph/flowGraphDataConnection.js";
|
|
4
|
+
import { type AnimationGroup } from "@babylonjs/core/Animations/animationGroup.js";
|
|
5
|
+
import { type TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
|
|
7
6
|
/**
|
|
8
7
|
* a configuration interface for this block
|
|
9
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowGraphGLTFDataProvider.js","sourceRoot":"","sources":["../../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_interactivity/flowGraphGLTFDataProvider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flowGraphGLTFDataProvider.js","sourceRoot":"","sources":["../../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_interactivity/flowGraphGLTFDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAKlG,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAYhE;;;GAGG;AACH,MAAM,OAAO,yBAA0B,SAAQ,cAAc;IAazD,YAAY,MAAoD;QAC5D,KAAK,EAAE,CAAC;QACR,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;QACpF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QAChG,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;QACpE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;IAEe,YAAY;QACxB,OAAO,2BAA2B,CAAC;IACvC,CAAC;CACJ","sourcesContent":["import { type IFlowGraphBlockConfiguration, FlowGraphBlock } from \"core/FlowGraph/flowGraphBlock\";\nimport { type IGLTF } from \"../../glTFLoaderInterfaces\";\nimport { type FlowGraphDataConnection } from \"core/FlowGraph/flowGraphDataConnection\";\nimport { type AnimationGroup } from \"core/Animations/animationGroup\";\nimport { type TransformNode } from \"core/Meshes/transformNode\";\nimport { RichTypeAny } from \"core/FlowGraph/flowGraphRichTypes\";\n\n/**\n * a configuration interface for this block\n */\nexport interface IFlowGraphGLTFDataProviderBlockConfiguration extends IFlowGraphBlockConfiguration {\n /**\n * the glTF object to provide data from\n */\n glTF: IGLTF;\n}\n\n/**\n * a glTF-based FlowGraph block that provides arrays with babylon object, based on the glTF tree\n * Can be used, for example, to get animation index from a glTF animation\n */\nexport class FlowGraphGLTFDataProvider extends FlowGraphBlock {\n /**\n * Output: an array of animation groups\n * Corresponds directly to the glTF animations array\n */\n public readonly animationGroups: FlowGraphDataConnection<AnimationGroup[]>;\n\n /**\n * Output an array of (Transform) nodes\n * Corresponds directly to the glTF nodes array\n */\n public readonly nodes: FlowGraphDataConnection<TransformNode[]>;\n\n constructor(config: IFlowGraphGLTFDataProviderBlockConfiguration) {\n super();\n const glTF = config.glTF;\n const animationGroups = glTF.animations?.map((a) => a._babylonAnimationGroup) || [];\n this.animationGroups = this.registerDataOutput(\"animationGroups\", RichTypeAny, animationGroups);\n const nodes = glTF.nodes?.map((n) => n._babylonTransformNode) || [];\n this.nodes = this.registerDataOutput(\"nodes\", RichTypeAny, nodes);\n }\n\n public override getClassName(): string {\n return \"FlowGraphGLTFDataProvider\";\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
3
|
-
import type
|
|
4
|
-
import type
|
|
1
|
+
import { type IKHRInteractivity_Graph } from "babylonjs-gltf2interface";
|
|
2
|
+
import { type IGLTF } from "../../glTFLoaderInterfaces.js";
|
|
3
|
+
import { type IGLTFToFlowGraphMapping } from "./declarationMapper.js";
|
|
4
|
+
import { type ISerializedFlowGraph, type ISerializedFlowGraphBlock } from "@babylonjs/core/FlowGraph/typeDefinitions.js";
|
|
5
5
|
import { FlowGraphTypes } from "@babylonjs/core/FlowGraph/flowGraphRichTypes.js";
|
|
6
6
|
export interface InteractivityEvent {
|
|
7
7
|
eventId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactivityGraphParser.js","sourceRoot":"","sources":["../../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IKHRInteractivity_Graph, IKHRInteractivity_Node, IKHRInteractivity_OutputSocketReference, IKHRInteractivity_Variable } from \"babylonjs-gltf2interface\";\nimport type { IGLTF } from \"../../glTFLoaderInterfaces\";\nimport type { IGLTFToFlowGraphMapping } from \"./declarationMapper\";\nimport { getMappingForDeclaration, getMappingForFullOperationName } from \"./declarationMapper\";\nimport { Logger } from \"core/Misc/logger\";\nimport type { ISerializedFlowGraph, ISerializedFlowGraphBlock, ISerializedFlowGraphConnection, ISerializedFlowGraphContext } from \"core/FlowGraph/typeDefinitions\";\nimport { RandomGUID } from \"core/Misc/guid\";\nimport type { FlowGraphBlockNames } from \"core/FlowGraph/Blocks/flowGraphBlockNames\";\nimport { FlowGraphConnectionType } from \"core/FlowGraph/flowGraphConnection\";\nimport { FlowGraphTypes } from \"core/FlowGraph/flowGraphRichTypes\";\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport interface InteractivityEvent {\n eventId: string;\n eventData?: {\n eventData: boolean;\n id: string;\n type: string;\n value?: any;\n }[];\n}\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const gltfTypeToBabylonType: {\n [key: string]: { length: number; flowGraphType: FlowGraphTypes; elementType: \"number\" | \"boolean\" };\n} = {\n float: { length: 1, flowGraphType: FlowGraphTypes.Number, elementType: \"number\" },\n bool: { length: 1, flowGraphType: FlowGraphTypes.Boolean, elementType: \"boolean\" },\n float2: { length: 2, flowGraphType: FlowGraphTypes.Vector2, elementType: \"number\" },\n float3: { length: 3, flowGraphType: FlowGraphTypes.Vector3, elementType: \"number\" },\n float4: { length: 4, flowGraphType: FlowGraphTypes.Vector4, elementType: \"number\" },\n float4x4: { length: 16, flowGraphType: FlowGraphTypes.Matrix, elementType: \"number\" },\n float2x2: { length: 4, flowGraphType: FlowGraphTypes.Matrix2D, elementType: \"number\" },\n float3x3: { length: 9, flowGraphType: FlowGraphTypes.Matrix3D, elementType: \"number\" },\n int: { length: 1, flowGraphType: FlowGraphTypes.Integer, elementType: \"number\" },\n};\n\nexport class InteractivityGraphToFlowGraphParser {\n /**\n * Note - the graph should be rejected if the same type is defined twice.\n * We currently don't validate that.\n */\n private _types: { length: number; flowGraphType: FlowGraphTypes; elementType: \"number\" | \"boolean\" }[] = [];\n private _mappings: { flowGraphMapping: IGLTFToFlowGraphMapping; fullOperationName: string }[] = [];\n private _staticVariables: { type: FlowGraphTypes; value: any[] }[] = [];\n private _events: InteractivityEvent[] = [];\n private _internalEventsCounter: number = 0;\n private _nodes: { blocks: ISerializedFlowGraphBlock[]; fullOperationName: string }[] = [];\n\n constructor(\n private _interactivityGraph: IKHRInteractivity_Graph,\n private _gltf: IGLTF,\n public _animationTargetFps: number = 60\n ) {\n // start with types\n this._parseTypes();\n // continue with declarations\n this._parseDeclarations();\n this._parseVariables();\n this._parseEvents();\n this._parseNodes();\n }\n\n public get arrays() {\n return {\n types: this._types,\n mappings: this._mappings,\n staticVariables: this._staticVariables,\n events: this._events,\n nodes: this._nodes,\n };\n }\n\n private _parseTypes() {\n if (!this._interactivityGraph.types) {\n return;\n }\n for (const type of this._interactivityGraph.types) {\n this._types.push(gltfTypeToBabylonType[type.signature]);\n }\n }\n\n private _parseDeclarations() {\n if (!this._interactivityGraph.declarations) {\n return;\n }\n for (const declaration of this._interactivityGraph.declarations) {\n // make sure we have the mapping for this operation\n const mapping = getMappingForDeclaration(declaration);\n // mapping is defined, because we generate an empty mapping if it's not found\n if (!mapping) {\n Logger.Error([\"No mapping found for declaration\", declaration]);\n throw new Error(\"Error parsing declarations\");\n }\n this._mappings.push({\n flowGraphMapping: mapping,\n fullOperationName: declaration.extension ? declaration.op + \":\" + declaration.extension : declaration.op,\n });\n }\n }\n\n private _parseVariables() {\n if (!this._interactivityGraph.variables) {\n return;\n }\n for (const variable of this._interactivityGraph.variables) {\n const parsed = this._parseVariable(variable);\n // set the default values here\n this._staticVariables.push(parsed);\n }\n }\n\n private _parseVariable(variable: IKHRInteractivity_Variable, dataTransform?: (value: any, parser: InteractivityGraphToFlowGraphParser) => any) {\n const type = this._types[variable.type];\n if (!type) {\n Logger.Error([\"No type found for variable\", variable]);\n throw new Error(\"Error parsing variables\");\n }\n if (variable.value) {\n if (variable.value.length !== type.length) {\n Logger.Error([\"Invalid value length for variable\", variable, type]);\n throw new Error(\"Error parsing variables\");\n }\n }\n const value = variable.value || [];\n if (!value.length) {\n switch (type.flowGraphType) {\n case FlowGraphTypes.Boolean:\n value.push(false);\n break;\n case FlowGraphTypes.Integer:\n value.push(0);\n break;\n case FlowGraphTypes.Number:\n value.push(NaN);\n break;\n case FlowGraphTypes.Vector2:\n value.push(NaN, NaN);\n break;\n case FlowGraphTypes.Vector3:\n value.push(NaN, NaN, NaN);\n break;\n case FlowGraphTypes.Vector4:\n case FlowGraphTypes.Matrix2D:\n case FlowGraphTypes.Quaternion:\n value.fill(NaN, 0, 4);\n break;\n case FlowGraphTypes.Matrix:\n value.fill(NaN, 0, 16);\n break;\n case FlowGraphTypes.Matrix3D:\n value.fill(NaN, 0, 9);\n break;\n default:\n break;\n }\n }\n // in case of NaN, Infinity, we need to parse the string to the object itself\n if (type.elementType === \"number\" && typeof value[0] === \"string\") {\n value[0] = parseFloat(value[0]);\n }\n return { type: type.flowGraphType, value: dataTransform ? dataTransform(value, this) : value };\n }\n\n private _parseEvents() {\n if (!this._interactivityGraph.events) {\n return;\n }\n for (const event of this._interactivityGraph.events) {\n const converted: InteractivityEvent = {\n eventId: event.id || \"internalEvent_\" + this._internalEventsCounter++,\n };\n if (event.values) {\n converted.eventData = Object.keys(event.values).map((key) => {\n const eventValue = event.values?.[key];\n if (!eventValue) {\n Logger.Error([\"No value found for event key\", key]);\n throw new Error(\"Error parsing events\");\n }\n const type = this._types[eventValue.type];\n if (!type) {\n Logger.Error([\"No type found for event value\", eventValue]);\n throw new Error(\"Error parsing events\");\n }\n const value = typeof eventValue.value !== \"undefined\" ? this._parseVariable(eventValue) : undefined;\n return {\n id: key,\n type: type.flowGraphType,\n eventData: true,\n value,\n };\n });\n }\n this._events.push(converted);\n }\n }\n\n private _parseNodes() {\n if (!this._interactivityGraph.nodes) {\n return;\n }\n for (const node of this._interactivityGraph.nodes) {\n // some validation\n if (typeof node.declaration !== \"number\") {\n Logger.Error([\"No declaration found for node\", node]);\n throw new Error(\"Error parsing nodes\");\n }\n const mapping = this._mappings[node.declaration];\n if (!mapping) {\n Logger.Error([\"No mapping found for node\", node]);\n throw new Error(\"Error parsing nodes\");\n }\n if (mapping.flowGraphMapping.validation) {\n const validationResult = mapping.flowGraphMapping.validation(node, this._interactivityGraph, this._gltf);\n if (!validationResult.valid) {\n throw new Error(`Error validating interactivity node ${this._interactivityGraph.declarations?.[node.declaration].op} - ${validationResult.error}`);\n }\n }\n const blocks: ISerializedFlowGraphBlock[] = [];\n // create block(s) for this node using the mapping\n for (const blockType of mapping.flowGraphMapping.blocks) {\n const block = this._getEmptyBlock(blockType, mapping.fullOperationName);\n this._parseNodeConfiguration(node, block, mapping.flowGraphMapping, blockType);\n blocks.push(block);\n }\n this._nodes.push({ blocks, fullOperationName: mapping.fullOperationName });\n }\n }\n\n private _getEmptyBlock(className: string, type: string): ISerializedFlowGraphBlock {\n return {\n uniqueId: RandomGUID(),\n className,\n dataInputs: [],\n dataOutputs: [],\n signalInputs: [],\n signalOutputs: [],\n config: {},\n type,\n metadata: {},\n };\n }\n\n private _parseNodeConfiguration(node: IKHRInteractivity_Node, block: ISerializedFlowGraphBlock, nodeMapping: IGLTFToFlowGraphMapping, blockType: FlowGraphBlockNames | string) {\n const gltfConfiguration = node.configuration;\n if (gltfConfiguration) {\n for (const key in gltfConfiguration) {\n const gltfProperty = gltfConfiguration[key];\n if (!gltfProperty) {\n throw new Error(\"Error parsing node configuration\");\n }\n\n const propertyMapping = nodeMapping.configuration?.[key];\n const belongsToBlock = propertyMapping && propertyMapping.toBlock ? propertyMapping.toBlock === blockType : nodeMapping.blocks.indexOf(blockType) === 0;\n if (belongsToBlock) {\n let value = propertyMapping?.defaultValue;\n if (gltfProperty?.value) {\n value = gltfProperty.value;\n }\n\n if (!propertyMapping?.isArray) {\n if (value.length !== 1) {\n Logger.Warn(`Invalid non-array value length: ${value.length}`);\n }\n\n value = value[0];\n }\n\n if (propertyMapping?.dataTransformer) {\n value = propertyMapping.dataTransformer(value, this);\n }\n\n if (value !== undefined) {\n // Update the flow graph block config.\n block.config[propertyMapping?.name || key] = {\n value: value,\n };\n }\n }\n }\n }\n }\n\n private _parseNodeConnections(context: ISerializedFlowGraphContext) {\n for (let i = 0; i < this._nodes.length; i++) {\n // get the corresponding gltf node\n const gltfNode = this._interactivityGraph.nodes?.[i];\n if (!gltfNode) {\n // should never happen but let's still check\n Logger.Error([\"No node found for interactivity node\", this._nodes[i]]);\n throw new Error(\"Error parsing node connections\");\n }\n const flowGraphBlocks = this._nodes[i];\n const outputMapper = this._mappings[gltfNode.declaration];\n // validate\n if (!outputMapper) {\n Logger.Error([\"No mapping found for node\", gltfNode]);\n throw new Error(\"Error parsing node connections\");\n }\n const flowsFromGLTF = gltfNode.flows || {};\n const flowsKeys = Object.keys(flowsFromGLTF).sort(); // sorting as some operations require sorted keys\n // connect the flows\n for (const flowKey of flowsKeys) {\n const flow = flowsFromGLTF[flowKey];\n const flowMapping = outputMapper.flowGraphMapping.outputs?.flows?.[flowKey];\n const socketOutName = flowMapping?.name || flowKey;\n // create a serialized socket\n const socketOut = this._createNewSocketConnection(socketOutName, true);\n const block = (flowMapping && flowMapping.toBlock && flowGraphBlocks.blocks.find((b) => b.className === flowMapping.toBlock)) || flowGraphBlocks.blocks[0];\n block.signalOutputs.push(socketOut);\n // get the input node of this block\n const inputNodeId = flow.node;\n const nodeIn = this._nodes[inputNodeId];\n if (!nodeIn) {\n Logger.Error([\"No node found for input node id\", inputNodeId]);\n throw new Error(\"Error parsing node connections\");\n }\n // get the mapper for the input node - in case it mapped to multiple blocks\n const inputMapper = getMappingForFullOperationName(nodeIn.fullOperationName);\n if (!inputMapper) {\n Logger.Error([\"No mapping found for input node\", nodeIn]);\n throw new Error(\"Error parsing node connections\");\n }\n let flowInMapping = inputMapper.inputs?.flows?.[flow.socket || \"in\"];\n let arrayMapping = false;\n if (!flowInMapping) {\n for (const key in inputMapper.inputs?.flows) {\n if (key.startsWith(\"[\") && key.endsWith(\"]\")) {\n arrayMapping = true;\n flowInMapping = inputMapper.inputs?.flows?.[key];\n }\n }\n }\n const nodeInSocketName = flowInMapping ? (arrayMapping ? flowInMapping.name.replace(\"$1\", flow.socket || \"\") : flowInMapping.name) : flow.socket || \"in\";\n const inputBlock = (flowInMapping && flowInMapping.toBlock && nodeIn.blocks.find((b) => b.className === flowInMapping.toBlock)) || nodeIn.blocks[0];\n // in all of the flow graph input connections, find the one with the same name as the socket\n let socketIn = inputBlock.signalInputs.find((s) => s.name === nodeInSocketName);\n // if the socket doesn't exist, create the input socket for the connection\n if (!socketIn) {\n socketIn = this._createNewSocketConnection(nodeInSocketName);\n inputBlock.signalInputs.push(socketIn);\n }\n // connect the sockets\n socketIn.connectedPointIds.push(socketOut.uniqueId);\n socketOut.connectedPointIds.push(socketIn.uniqueId);\n }\n // connect the values\n const valuesFromGLTF = gltfNode.values || {};\n const valuesKeys = Object.keys(valuesFromGLTF);\n for (const valueKey of valuesKeys) {\n const value = valuesFromGLTF[valueKey];\n let valueMapping = outputMapper.flowGraphMapping.inputs?.values?.[valueKey];\n let arrayMapping = false;\n if (!valueMapping) {\n for (const key in outputMapper.flowGraphMapping.inputs?.values) {\n if (key.startsWith(\"[\") && key.endsWith(\"]\")) {\n arrayMapping = true;\n valueMapping = outputMapper.flowGraphMapping.inputs?.values?.[key];\n }\n }\n }\n const socketInName = valueMapping ? (arrayMapping ? valueMapping.name.replace(\"$1\", valueKey) : valueMapping.name) : valueKey;\n // create a serialized socket\n const socketIn = this._createNewSocketConnection(socketInName);\n const block = (valueMapping && valueMapping.toBlock && flowGraphBlocks.blocks.find((b) => b.className === valueMapping.toBlock)) || flowGraphBlocks.blocks[0];\n block.dataInputs.push(socketIn);\n if ((value as IKHRInteractivity_Variable).value !== undefined) {\n const convertedValue = this._parseVariable(value as IKHRInteractivity_Variable, valueMapping && valueMapping.dataTransformer);\n context._connectionValues[socketIn.uniqueId] = convertedValue;\n } else if (typeof (value as IKHRInteractivity_OutputSocketReference).node !== \"undefined\") {\n const nodeOutId = (value as IKHRInteractivity_OutputSocketReference).node;\n const nodeOutSocketName = (value as IKHRInteractivity_OutputSocketReference).socket || \"value\";\n const nodeOut = this._nodes[nodeOutId];\n if (!nodeOut) {\n Logger.Error([\"No node found for output socket reference\", value]);\n throw new Error(\"Error parsing node connections\");\n }\n const outputMapper = getMappingForFullOperationName(nodeOut.fullOperationName);\n if (!outputMapper) {\n Logger.Error([\"No mapping found for output socket reference\", value]);\n throw new Error(\"Error parsing node connections\");\n }\n let valueMapping = outputMapper.outputs?.values?.[nodeOutSocketName];\n let arrayMapping = false;\n // check if there is an array mapping defined\n if (!valueMapping) {\n // search for a value mapping that has an array mapping\n for (const key in outputMapper.outputs?.values) {\n if (key.startsWith(\"[\") && key.endsWith(\"]\")) {\n arrayMapping = true;\n valueMapping = outputMapper.outputs?.values?.[key];\n }\n }\n }\n const socketOutName = valueMapping ? (arrayMapping ? valueMapping.name.replace(\"$1\", nodeOutSocketName) : valueMapping?.name) : nodeOutSocketName;\n const outBlock = (valueMapping && valueMapping.toBlock && nodeOut.blocks.find((b) => b.className === valueMapping.toBlock)) || nodeOut.blocks[0];\n let socketOut = outBlock.dataOutputs.find((s) => s.name === socketOutName);\n // if the socket doesn't exist, create it\n if (!socketOut) {\n socketOut = this._createNewSocketConnection(socketOutName, true);\n outBlock.dataOutputs.push(socketOut);\n }\n // connect the sockets\n socketIn.connectedPointIds.push(socketOut.uniqueId);\n socketOut.connectedPointIds.push(socketIn.uniqueId);\n } else {\n Logger.Error([\"Invalid value for value connection\", value]);\n throw new Error(\"Error parsing node connections\");\n }\n }\n\n // inter block connections\n if (outputMapper.flowGraphMapping.interBlockConnectors) {\n for (const connector of outputMapper.flowGraphMapping.interBlockConnectors) {\n const input = connector.input;\n const output = connector.output;\n const isVariable = connector.isVariable;\n this._connectFlowGraphNodes(input, output, flowGraphBlocks.blocks[connector.inputBlockIndex], flowGraphBlocks.blocks[connector.outputBlockIndex], isVariable);\n }\n }\n\n if (outputMapper.flowGraphMapping.extraProcessor) {\n const declaration = this._interactivityGraph.declarations?.[gltfNode.declaration];\n if (!declaration) {\n Logger.Error([\"No declaration found for extra processor\", gltfNode]);\n throw new Error(\"Error parsing node connections\");\n }\n flowGraphBlocks.blocks = outputMapper.flowGraphMapping.extraProcessor(\n gltfNode,\n declaration,\n outputMapper.flowGraphMapping,\n this,\n flowGraphBlocks.blocks,\n context,\n this._gltf\n );\n }\n }\n }\n\n private _createNewSocketConnection(name: string, isOutput?: boolean): ISerializedFlowGraphConnection {\n return {\n uniqueId: RandomGUID(),\n name,\n _connectionType: isOutput ? FlowGraphConnectionType.Output : FlowGraphConnectionType.Input,\n connectedPointIds: [],\n };\n }\n\n private _connectFlowGraphNodes(input: string, output: string, serializedInput: ISerializedFlowGraphBlock, serializedOutput: ISerializedFlowGraphBlock, isVariable?: boolean) {\n const inputArray = isVariable ? serializedInput.dataInputs : serializedInput.signalInputs;\n const outputArray = isVariable ? serializedOutput.dataOutputs : serializedOutput.signalOutputs;\n const inputConnection = inputArray.find((s) => s.name === input) || this._createNewSocketConnection(input);\n const outputConnection = outputArray.find((s) => s.name === output) || this._createNewSocketConnection(output, true);\n // of not found add it to the array\n if (!inputArray.find((s) => s.name === input)) {\n inputArray.push(inputConnection);\n }\n if (!outputArray.find((s) => s.name === output)) {\n outputArray.push(outputConnection);\n }\n // connect the sockets\n inputConnection.connectedPointIds.push(outputConnection.uniqueId);\n outputConnection.connectedPointIds.push(inputConnection.uniqueId);\n }\n\n public getVariableName(index: number) {\n return \"staticVariable_\" + index;\n }\n\n public serializeToFlowGraph(): ISerializedFlowGraph {\n const context: ISerializedFlowGraphContext = {\n uniqueId: RandomGUID(),\n _userVariables: {},\n _connectionValues: {},\n };\n this._parseNodeConnections(context);\n for (let i = 0; i < this._staticVariables.length; i++) {\n const variable = this._staticVariables[i];\n context._userVariables[this.getVariableName(i)] = variable;\n }\n\n const allBlocks = this._nodes.reduce((acc, val) => acc.concat(val.blocks), [] as ISerializedFlowGraphBlock[]);\n\n return {\n rightHanded: true,\n allBlocks,\n executionContexts: [context],\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"interactivityGraphParser.js","sourceRoot":"","sources":["../../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.ts"],"names":[],"mappings":"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","sourcesContent":["import { type IKHRInteractivity_Graph, type IKHRInteractivity_Node, type IKHRInteractivity_OutputSocketReference, type IKHRInteractivity_Variable } from \"babylonjs-gltf2interface\";\nimport { type IGLTF } from \"../../glTFLoaderInterfaces\";\nimport { type IGLTFToFlowGraphMapping, getMappingForDeclaration, getMappingForFullOperationName } from \"./declarationMapper\";\nimport { Logger } from \"core/Misc/logger\";\nimport { type ISerializedFlowGraph, type ISerializedFlowGraphBlock, type ISerializedFlowGraphConnection, type ISerializedFlowGraphContext } from \"core/FlowGraph/typeDefinitions\";\nimport { RandomGUID } from \"core/Misc/guid\";\nimport { type FlowGraphBlockNames } from \"core/FlowGraph/Blocks/flowGraphBlockNames\";\nimport { FlowGraphConnectionType } from \"core/FlowGraph/flowGraphConnection\";\nimport { FlowGraphTypes } from \"core/FlowGraph/flowGraphRichTypes\";\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport interface InteractivityEvent {\n eventId: string;\n eventData?: {\n eventData: boolean;\n id: string;\n type: string;\n value?: any;\n }[];\n}\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const gltfTypeToBabylonType: {\n [key: string]: { length: number; flowGraphType: FlowGraphTypes; elementType: \"number\" | \"boolean\" };\n} = {\n float: { length: 1, flowGraphType: FlowGraphTypes.Number, elementType: \"number\" },\n bool: { length: 1, flowGraphType: FlowGraphTypes.Boolean, elementType: \"boolean\" },\n float2: { length: 2, flowGraphType: FlowGraphTypes.Vector2, elementType: \"number\" },\n float3: { length: 3, flowGraphType: FlowGraphTypes.Vector3, elementType: \"number\" },\n float4: { length: 4, flowGraphType: FlowGraphTypes.Vector4, elementType: \"number\" },\n float4x4: { length: 16, flowGraphType: FlowGraphTypes.Matrix, elementType: \"number\" },\n float2x2: { length: 4, flowGraphType: FlowGraphTypes.Matrix2D, elementType: \"number\" },\n float3x3: { length: 9, flowGraphType: FlowGraphTypes.Matrix3D, elementType: \"number\" },\n int: { length: 1, flowGraphType: FlowGraphTypes.Integer, elementType: \"number\" },\n};\n\nexport class InteractivityGraphToFlowGraphParser {\n /**\n * Note - the graph should be rejected if the same type is defined twice.\n * We currently don't validate that.\n */\n private _types: { length: number; flowGraphType: FlowGraphTypes; elementType: \"number\" | \"boolean\" }[] = [];\n private _mappings: { flowGraphMapping: IGLTFToFlowGraphMapping; fullOperationName: string }[] = [];\n private _staticVariables: { type: FlowGraphTypes; value: any[] }[] = [];\n private _events: InteractivityEvent[] = [];\n private _internalEventsCounter: number = 0;\n private _nodes: { blocks: ISerializedFlowGraphBlock[]; fullOperationName: string }[] = [];\n\n constructor(\n private _interactivityGraph: IKHRInteractivity_Graph,\n private _gltf: IGLTF,\n public _animationTargetFps: number = 60\n ) {\n // start with types\n this._parseTypes();\n // continue with declarations\n this._parseDeclarations();\n this._parseVariables();\n this._parseEvents();\n this._parseNodes();\n }\n\n public get arrays() {\n return {\n types: this._types,\n mappings: this._mappings,\n staticVariables: this._staticVariables,\n events: this._events,\n nodes: this._nodes,\n };\n }\n\n private _parseTypes() {\n if (!this._interactivityGraph.types) {\n return;\n }\n for (const type of this._interactivityGraph.types) {\n this._types.push(gltfTypeToBabylonType[type.signature]);\n }\n }\n\n private _parseDeclarations() {\n if (!this._interactivityGraph.declarations) {\n return;\n }\n for (const declaration of this._interactivityGraph.declarations) {\n // make sure we have the mapping for this operation\n const mapping = getMappingForDeclaration(declaration);\n // mapping is defined, because we generate an empty mapping if it's not found\n if (!mapping) {\n Logger.Error([\"No mapping found for declaration\", declaration]);\n throw new Error(\"Error parsing declarations\");\n }\n this._mappings.push({\n flowGraphMapping: mapping,\n fullOperationName: declaration.extension ? declaration.op + \":\" + declaration.extension : declaration.op,\n });\n }\n }\n\n private _parseVariables() {\n if (!this._interactivityGraph.variables) {\n return;\n }\n for (const variable of this._interactivityGraph.variables) {\n const parsed = this._parseVariable(variable);\n // set the default values here\n this._staticVariables.push(parsed);\n }\n }\n\n private _parseVariable(variable: IKHRInteractivity_Variable, dataTransform?: (value: any, parser: InteractivityGraphToFlowGraphParser) => any) {\n const type = this._types[variable.type];\n if (!type) {\n Logger.Error([\"No type found for variable\", variable]);\n throw new Error(\"Error parsing variables\");\n }\n if (variable.value) {\n if (variable.value.length !== type.length) {\n Logger.Error([\"Invalid value length for variable\", variable, type]);\n throw new Error(\"Error parsing variables\");\n }\n }\n const value = variable.value || [];\n if (!value.length) {\n switch (type.flowGraphType) {\n case FlowGraphTypes.Boolean:\n value.push(false);\n break;\n case FlowGraphTypes.Integer:\n value.push(0);\n break;\n case FlowGraphTypes.Number:\n value.push(NaN);\n break;\n case FlowGraphTypes.Vector2:\n value.push(NaN, NaN);\n break;\n case FlowGraphTypes.Vector3:\n value.push(NaN, NaN, NaN);\n break;\n case FlowGraphTypes.Vector4:\n case FlowGraphTypes.Matrix2D:\n case FlowGraphTypes.Quaternion:\n value.fill(NaN, 0, 4);\n break;\n case FlowGraphTypes.Matrix:\n value.fill(NaN, 0, 16);\n break;\n case FlowGraphTypes.Matrix3D:\n value.fill(NaN, 0, 9);\n break;\n default:\n break;\n }\n }\n // in case of NaN, Infinity, we need to parse the string to the object itself\n if (type.elementType === \"number\" && typeof value[0] === \"string\") {\n value[0] = parseFloat(value[0]);\n }\n return { type: type.flowGraphType, value: dataTransform ? dataTransform(value, this) : value };\n }\n\n private _parseEvents() {\n if (!this._interactivityGraph.events) {\n return;\n }\n for (const event of this._interactivityGraph.events) {\n const converted: InteractivityEvent = {\n eventId: event.id || \"internalEvent_\" + this._internalEventsCounter++,\n };\n if (event.values) {\n converted.eventData = Object.keys(event.values).map((key) => {\n const eventValue = event.values?.[key];\n if (!eventValue) {\n Logger.Error([\"No value found for event key\", key]);\n throw new Error(\"Error parsing events\");\n }\n const type = this._types[eventValue.type];\n if (!type) {\n Logger.Error([\"No type found for event value\", eventValue]);\n throw new Error(\"Error parsing events\");\n }\n const value = typeof eventValue.value !== \"undefined\" ? this._parseVariable(eventValue) : undefined;\n return {\n id: key,\n type: type.flowGraphType,\n eventData: true,\n value,\n };\n });\n }\n this._events.push(converted);\n }\n }\n\n private _parseNodes() {\n if (!this._interactivityGraph.nodes) {\n return;\n }\n for (const node of this._interactivityGraph.nodes) {\n // some validation\n if (typeof node.declaration !== \"number\") {\n Logger.Error([\"No declaration found for node\", node]);\n throw new Error(\"Error parsing nodes\");\n }\n const mapping = this._mappings[node.declaration];\n if (!mapping) {\n Logger.Error([\"No mapping found for node\", node]);\n throw new Error(\"Error parsing nodes\");\n }\n if (mapping.flowGraphMapping.validation) {\n const validationResult = mapping.flowGraphMapping.validation(node, this._interactivityGraph, this._gltf);\n if (!validationResult.valid) {\n throw new Error(`Error validating interactivity node ${this._interactivityGraph.declarations?.[node.declaration].op} - ${validationResult.error}`);\n }\n }\n const blocks: ISerializedFlowGraphBlock[] = [];\n // create block(s) for this node using the mapping\n for (const blockType of mapping.flowGraphMapping.blocks) {\n const block = this._getEmptyBlock(blockType, mapping.fullOperationName);\n this._parseNodeConfiguration(node, block, mapping.flowGraphMapping, blockType);\n blocks.push(block);\n }\n this._nodes.push({ blocks, fullOperationName: mapping.fullOperationName });\n }\n }\n\n private _getEmptyBlock(className: string, type: string): ISerializedFlowGraphBlock {\n return {\n uniqueId: RandomGUID(),\n className,\n dataInputs: [],\n dataOutputs: [],\n signalInputs: [],\n signalOutputs: [],\n config: {},\n type,\n metadata: {},\n };\n }\n\n private _parseNodeConfiguration(node: IKHRInteractivity_Node, block: ISerializedFlowGraphBlock, nodeMapping: IGLTFToFlowGraphMapping, blockType: FlowGraphBlockNames | string) {\n const gltfConfiguration = node.configuration;\n if (gltfConfiguration) {\n for (const key in gltfConfiguration) {\n const gltfProperty = gltfConfiguration[key];\n if (!gltfProperty) {\n throw new Error(\"Error parsing node configuration\");\n }\n\n const propertyMapping = nodeMapping.configuration?.[key];\n const belongsToBlock = propertyMapping && propertyMapping.toBlock ? propertyMapping.toBlock === blockType : nodeMapping.blocks.indexOf(blockType) === 0;\n if (belongsToBlock) {\n let value = propertyMapping?.defaultValue;\n if (gltfProperty?.value) {\n value = gltfProperty.value;\n }\n\n if (!propertyMapping?.isArray) {\n if (value.length !== 1) {\n Logger.Warn(`Invalid non-array value length: ${value.length}`);\n }\n\n value = value[0];\n }\n\n if (propertyMapping?.dataTransformer) {\n value = propertyMapping.dataTransformer(value, this);\n }\n\n if (value !== undefined) {\n // Update the flow graph block config.\n block.config[propertyMapping?.name || key] = {\n value: value,\n };\n }\n }\n }\n }\n }\n\n private _parseNodeConnections(context: ISerializedFlowGraphContext) {\n for (let i = 0; i < this._nodes.length; i++) {\n // get the corresponding gltf node\n const gltfNode = this._interactivityGraph.nodes?.[i];\n if (!gltfNode) {\n // should never happen but let's still check\n Logger.Error([\"No node found for interactivity node\", this._nodes[i]]);\n throw new Error(\"Error parsing node connections\");\n }\n const flowGraphBlocks = this._nodes[i];\n const outputMapper = this._mappings[gltfNode.declaration];\n // validate\n if (!outputMapper) {\n Logger.Error([\"No mapping found for node\", gltfNode]);\n throw new Error(\"Error parsing node connections\");\n }\n const flowsFromGLTF = gltfNode.flows || {};\n const flowsKeys = Object.keys(flowsFromGLTF).sort(); // sorting as some operations require sorted keys\n // connect the flows\n for (const flowKey of flowsKeys) {\n const flow = flowsFromGLTF[flowKey];\n const flowMapping = outputMapper.flowGraphMapping.outputs?.flows?.[flowKey];\n const socketOutName = flowMapping?.name || flowKey;\n // create a serialized socket\n const socketOut = this._createNewSocketConnection(socketOutName, true);\n const block = (flowMapping && flowMapping.toBlock && flowGraphBlocks.blocks.find((b) => b.className === flowMapping.toBlock)) || flowGraphBlocks.blocks[0];\n block.signalOutputs.push(socketOut);\n // get the input node of this block\n const inputNodeId = flow.node;\n const nodeIn = this._nodes[inputNodeId];\n if (!nodeIn) {\n Logger.Error([\"No node found for input node id\", inputNodeId]);\n throw new Error(\"Error parsing node connections\");\n }\n // get the mapper for the input node - in case it mapped to multiple blocks\n const inputMapper = getMappingForFullOperationName(nodeIn.fullOperationName);\n if (!inputMapper) {\n Logger.Error([\"No mapping found for input node\", nodeIn]);\n throw new Error(\"Error parsing node connections\");\n }\n let flowInMapping = inputMapper.inputs?.flows?.[flow.socket || \"in\"];\n let arrayMapping = false;\n if (!flowInMapping) {\n for (const key in inputMapper.inputs?.flows) {\n if (key.startsWith(\"[\") && key.endsWith(\"]\")) {\n arrayMapping = true;\n flowInMapping = inputMapper.inputs?.flows?.[key];\n }\n }\n }\n const nodeInSocketName = flowInMapping ? (arrayMapping ? flowInMapping.name.replace(\"$1\", flow.socket || \"\") : flowInMapping.name) : flow.socket || \"in\";\n const inputBlock = (flowInMapping && flowInMapping.toBlock && nodeIn.blocks.find((b) => b.className === flowInMapping.toBlock)) || nodeIn.blocks[0];\n // in all of the flow graph input connections, find the one with the same name as the socket\n let socketIn = inputBlock.signalInputs.find((s) => s.name === nodeInSocketName);\n // if the socket doesn't exist, create the input socket for the connection\n if (!socketIn) {\n socketIn = this._createNewSocketConnection(nodeInSocketName);\n inputBlock.signalInputs.push(socketIn);\n }\n // connect the sockets\n socketIn.connectedPointIds.push(socketOut.uniqueId);\n socketOut.connectedPointIds.push(socketIn.uniqueId);\n }\n // connect the values\n const valuesFromGLTF = gltfNode.values || {};\n const valuesKeys = Object.keys(valuesFromGLTF);\n for (const valueKey of valuesKeys) {\n const value = valuesFromGLTF[valueKey];\n let valueMapping = outputMapper.flowGraphMapping.inputs?.values?.[valueKey];\n let arrayMapping = false;\n if (!valueMapping) {\n for (const key in outputMapper.flowGraphMapping.inputs?.values) {\n if (key.startsWith(\"[\") && key.endsWith(\"]\")) {\n arrayMapping = true;\n valueMapping = outputMapper.flowGraphMapping.inputs?.values?.[key];\n }\n }\n }\n const socketInName = valueMapping ? (arrayMapping ? valueMapping.name.replace(\"$1\", valueKey) : valueMapping.name) : valueKey;\n // create a serialized socket\n const socketIn = this._createNewSocketConnection(socketInName);\n const block = (valueMapping && valueMapping.toBlock && flowGraphBlocks.blocks.find((b) => b.className === valueMapping.toBlock)) || flowGraphBlocks.blocks[0];\n block.dataInputs.push(socketIn);\n if ((value as IKHRInteractivity_Variable).value !== undefined) {\n const convertedValue = this._parseVariable(value as IKHRInteractivity_Variable, valueMapping && valueMapping.dataTransformer);\n context._connectionValues[socketIn.uniqueId] = convertedValue;\n } else if (typeof (value as IKHRInteractivity_OutputSocketReference).node !== \"undefined\") {\n const nodeOutId = (value as IKHRInteractivity_OutputSocketReference).node;\n const nodeOutSocketName = (value as IKHRInteractivity_OutputSocketReference).socket || \"value\";\n const nodeOut = this._nodes[nodeOutId];\n if (!nodeOut) {\n Logger.Error([\"No node found for output socket reference\", value]);\n throw new Error(\"Error parsing node connections\");\n }\n const outputMapper = getMappingForFullOperationName(nodeOut.fullOperationName);\n if (!outputMapper) {\n Logger.Error([\"No mapping found for output socket reference\", value]);\n throw new Error(\"Error parsing node connections\");\n }\n let valueMapping = outputMapper.outputs?.values?.[nodeOutSocketName];\n let arrayMapping = false;\n // check if there is an array mapping defined\n if (!valueMapping) {\n // search for a value mapping that has an array mapping\n for (const key in outputMapper.outputs?.values) {\n if (key.startsWith(\"[\") && key.endsWith(\"]\")) {\n arrayMapping = true;\n valueMapping = outputMapper.outputs?.values?.[key];\n }\n }\n }\n const socketOutName = valueMapping ? (arrayMapping ? valueMapping.name.replace(\"$1\", nodeOutSocketName) : valueMapping?.name) : nodeOutSocketName;\n const outBlock = (valueMapping && valueMapping.toBlock && nodeOut.blocks.find((b) => b.className === valueMapping.toBlock)) || nodeOut.blocks[0];\n let socketOut = outBlock.dataOutputs.find((s) => s.name === socketOutName);\n // if the socket doesn't exist, create it\n if (!socketOut) {\n socketOut = this._createNewSocketConnection(socketOutName, true);\n outBlock.dataOutputs.push(socketOut);\n }\n // connect the sockets\n socketIn.connectedPointIds.push(socketOut.uniqueId);\n socketOut.connectedPointIds.push(socketIn.uniqueId);\n } else {\n Logger.Error([\"Invalid value for value connection\", value]);\n throw new Error(\"Error parsing node connections\");\n }\n }\n\n // inter block connections\n if (outputMapper.flowGraphMapping.interBlockConnectors) {\n for (const connector of outputMapper.flowGraphMapping.interBlockConnectors) {\n const input = connector.input;\n const output = connector.output;\n const isVariable = connector.isVariable;\n this._connectFlowGraphNodes(input, output, flowGraphBlocks.blocks[connector.inputBlockIndex], flowGraphBlocks.blocks[connector.outputBlockIndex], isVariable);\n }\n }\n\n if (outputMapper.flowGraphMapping.extraProcessor) {\n const declaration = this._interactivityGraph.declarations?.[gltfNode.declaration];\n if (!declaration) {\n Logger.Error([\"No declaration found for extra processor\", gltfNode]);\n throw new Error(\"Error parsing node connections\");\n }\n flowGraphBlocks.blocks = outputMapper.flowGraphMapping.extraProcessor(\n gltfNode,\n declaration,\n outputMapper.flowGraphMapping,\n this,\n flowGraphBlocks.blocks,\n context,\n this._gltf\n );\n }\n }\n }\n\n private _createNewSocketConnection(name: string, isOutput?: boolean): ISerializedFlowGraphConnection {\n return {\n uniqueId: RandomGUID(),\n name,\n _connectionType: isOutput ? FlowGraphConnectionType.Output : FlowGraphConnectionType.Input,\n connectedPointIds: [],\n };\n }\n\n private _connectFlowGraphNodes(input: string, output: string, serializedInput: ISerializedFlowGraphBlock, serializedOutput: ISerializedFlowGraphBlock, isVariable?: boolean) {\n const inputArray = isVariable ? serializedInput.dataInputs : serializedInput.signalInputs;\n const outputArray = isVariable ? serializedOutput.dataOutputs : serializedOutput.signalOutputs;\n const inputConnection = inputArray.find((s) => s.name === input) || this._createNewSocketConnection(input);\n const outputConnection = outputArray.find((s) => s.name === output) || this._createNewSocketConnection(output, true);\n // of not found add it to the array\n if (!inputArray.find((s) => s.name === input)) {\n inputArray.push(inputConnection);\n }\n if (!outputArray.find((s) => s.name === output)) {\n outputArray.push(outputConnection);\n }\n // connect the sockets\n inputConnection.connectedPointIds.push(outputConnection.uniqueId);\n outputConnection.connectedPointIds.push(inputConnection.uniqueId);\n }\n\n public getVariableName(index: number) {\n return \"staticVariable_\" + index;\n }\n\n public serializeToFlowGraph(): ISerializedFlowGraph {\n const context: ISerializedFlowGraphContext = {\n uniqueId: RandomGUID(),\n _userVariables: {},\n _connectionValues: {},\n };\n this._parseNodeConnections(context);\n for (let i = 0; i < this._staticVariables.length; i++) {\n const variable = this._staticVariables[i];\n context._userVariables[this.getVariableName(i)] = variable;\n }\n\n const allBlocks = this._nodes.reduce((acc, val) => acc.concat(val.blocks), [] as ISerializedFlowGraphBlock[]);\n\n return {\n rightHanded: true,\n allBlocks,\n executionContexts: [context],\n };\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
3
|
-
import type
|
|
1
|
+
import { type GLTFLoader } from "../glTFLoader.js";
|
|
2
|
+
import { type IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
|
|
3
|
+
import { type Scene } from "@babylonjs/core/scene.js";
|
|
4
4
|
declare module "../../glTFFileLoader.js" {
|
|
5
5
|
interface GLTFLoaderExtensionOptions {
|
|
6
6
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KHR_interactivity.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_interactivity.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { IKHRInteractivity } from \"babylonjs-gltf2interface\";\r\nimport type { GLTFLoader } from \"../glTFLoader\";\r\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { FlowGraphCoordinator } from \"core/FlowGraph/flowGraphCoordinator\";\r\nimport { ParseFlowGraphAsync } from \"core/FlowGraph/flowGraphParser\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\nimport type { GLTFPathToObjectConverter } from \"./gltfPathToObjectConverter\";\r\nimport { AddObjectAccessorToKey, GetPathToObjectConverter } from \"./objectModelMapping\";\r\nimport { InteractivityGraphToFlowGraphParser } from \"./KHR_interactivity/interactivityGraphParser\";\r\nimport { addToBlockFactory } from \"core/FlowGraph/Blocks/flowGraphBlockFactory\";\r\nimport { Quaternion, Vector3 } from \"core/Maths/math.vector\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { IAnimation } from \"../glTFLoaderInterfaces\";\r\n\r\nconst NAME = \"KHR_interactivity\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_interactivity extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_interactivity\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * Loader extension for KHR_interactivity\r\n */\r\nexport class KHR_interactivity implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n private _pathConverter?: GLTFPathToObjectConverter<any, any, any>;\r\n\r\n /**\r\n * @internal\r\n * @param _loader\r\n */\r\n constructor(private _loader: GLTFLoader) {\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n this._pathConverter = GetPathToObjectConverter(this._loader.gltf);\r\n // avoid starting animations automatically.\r\n _loader._skipStartAnimationStep = true;\r\n\r\n // Update object model with new pointers\r\n\r\n const scene = _loader.babylonScene;\r\n if (scene) {\r\n _AddInteractivityObjectModel(scene);\r\n }\r\n }\r\n\r\n public dispose() {\r\n (this._loader as any) = null;\r\n delete this._pathConverter;\r\n }\r\n\r\n // eslint-disable-next-line no-restricted-syntax, @typescript-eslint/no-misused-promises\r\n public async onReady(): Promise<void> {\r\n if (!this._loader.babylonScene || !this._pathConverter) {\r\n return;\r\n }\r\n const scene = this._loader.babylonScene;\r\n const interactivityDefinition = this._loader.gltf.extensions?.KHR_interactivity as IKHRInteractivity;\r\n if (!interactivityDefinition) {\r\n // This can technically throw, but it's not a critical error\r\n return;\r\n }\r\n\r\n const coordinator = new FlowGraphCoordinator({ scene });\r\n coordinator.dispatchEventsSynchronously = false; // glTF interactivity dispatches events asynchronously\r\n const graphs = interactivityDefinition.graphs.map((graph) => {\r\n const parser = new InteractivityGraphToFlowGraphParser(graph, this._loader.gltf, this._loader.parent.targetFps);\r\n return parser.serializeToFlowGraph();\r\n });\r\n // parse each graph async\r\n await Promise.all(graphs.map(async (graph) => await ParseFlowGraphAsync(graph, { coordinator, pathConverter: this._pathConverter })));\r\n\r\n coordinator.start();\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n * populates the object model with the interactivity extension\r\n */\r\nexport function _AddInteractivityObjectModel(scene: Scene) {\r\n // Note - all of those are read-only, as per the specs!\r\n\r\n // active camera rotation\r\n AddObjectAccessorToKey(\"/extensions/KHR_interactivity/?/activeCamera/rotation\", {\r\n get: () => {\r\n if (!scene.activeCamera) {\r\n return new Quaternion(NaN, NaN, NaN, NaN);\r\n }\r\n const quat = Quaternion.FromRotationMatrix(scene.activeCamera.getWorldMatrix()).normalize();\r\n if (!scene.useRightHandedSystem) {\r\n quat.w *= -1; // glTF uses right-handed system, while babylon uses left-handed\r\n quat.x *= -1; // glTF uses right-handed system, while babylon uses left-handed\r\n }\r\n return quat;\r\n },\r\n type: \"Quaternion\",\r\n getTarget: () => scene.activeCamera,\r\n });\r\n // activeCamera position\r\n AddObjectAccessorToKey(\"/extensions/KHR_interactivity/?/activeCamera/position\", {\r\n get: () => {\r\n if (!scene.activeCamera) {\r\n return new Vector3(NaN, NaN, NaN);\r\n }\r\n const pos = scene.activeCamera.getWorldMatrix().getTranslation(); // not global position\r\n if (!scene.useRightHandedSystem) {\r\n pos.x *= -1; // glTF uses right-handed system, while babylon uses left-handed\r\n }\r\n return pos;\r\n },\r\n type: \"Vector3\",\r\n getTarget: () => scene.activeCamera,\r\n });\r\n\r\n // /animations/{} pointers:\r\n AddObjectAccessorToKey(\"/animations/{}/extensions/KHR_interactivity/isPlaying\", {\r\n get: (animation: IAnimation) => {\r\n return animation._babylonAnimationGroup?.isPlaying ?? false;\r\n },\r\n type: \"boolean\",\r\n getTarget: (animation: IAnimation) => {\r\n return animation._babylonAnimationGroup;\r\n },\r\n });\r\n AddObjectAccessorToKey(\"/animations/{}/extensions/KHR_interactivity/minTime\", {\r\n get: (animation: IAnimation) => {\r\n return (animation._babylonAnimationGroup?.from ?? 0) / 60; // fixed factor for duration-to-frames conversion\r\n },\r\n type: \"number\",\r\n getTarget: (animation: IAnimation) => {\r\n return animation._babylonAnimationGroup;\r\n },\r\n });\r\n AddObjectAccessorToKey(\"/animations/{}/extensions/KHR_interactivity/maxTime\", {\r\n get: (animation: IAnimation) => {\r\n return (animation._babylonAnimationGroup?.to ?? 0) / 60; // fixed factor for duration-to-frames conversion\r\n },\r\n type: \"number\",\r\n getTarget: (animation: IAnimation) => {\r\n return animation._babylonAnimationGroup;\r\n },\r\n });\r\n // playhead\r\n AddObjectAccessorToKey(\"/animations/{}/extensions/KHR_interactivity/playhead\", {\r\n get: (animation: IAnimation) => {\r\n return (animation._babylonAnimationGroup?.getCurrentFrame() ?? 0) / 60; // fixed factor for duration-to-frames conversion\r\n },\r\n type: \"number\",\r\n getTarget: (animation: IAnimation) => {\r\n return animation._babylonAnimationGroup;\r\n },\r\n });\r\n //virtualPlayhead - TODO, do we support this property in our animations? getCurrentFrame is the only method we have for this.\r\n AddObjectAccessorToKey(\"/animations/{}/extensions/KHR_interactivity/virtualPlayhead\", {\r\n get: (animation: IAnimation) => {\r\n return (animation._babylonAnimationGroup?.getCurrentFrame() ?? 0) / 60; // fixed factor for duration-to-frames conversion\r\n },\r\n type: \"number\",\r\n getTarget: (animation: IAnimation) => {\r\n return animation._babylonAnimationGroup;\r\n },\r\n });\r\n}\r\n\r\n// Register flow graph blocks. Do it here so they are available when the extension is enabled.\r\naddToBlockFactory(NAME, \"FlowGraphGLTFDataProvider\", async () => {\r\n return (await import(\"./KHR_interactivity/flowGraphGLTFDataProvider\")).FlowGraphGLTFDataProvider;\r\n});\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_interactivity(loader));\r\n"]}
|
|
1
|
+
{"version":3,"file":"KHR_interactivity.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_interactivity.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type IKHRInteractivity } from \"babylonjs-gltf2interface\";\r\nimport { type GLTFLoader } from \"../glTFLoader\";\r\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { FlowGraphCoordinator } from \"core/FlowGraph/flowGraphCoordinator\";\r\nimport { ParseFlowGraphAsync } from \"core/FlowGraph/flowGraphParser\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\nimport { type GLTFPathToObjectConverter } from \"./gltfPathToObjectConverter\";\r\nimport { AddObjectAccessorToKey, GetPathToObjectConverter } from \"./objectModelMapping\";\r\nimport { InteractivityGraphToFlowGraphParser } from \"./KHR_interactivity/interactivityGraphParser\";\r\nimport { addToBlockFactory } from \"core/FlowGraph/Blocks/flowGraphBlockFactory\";\r\nimport { Quaternion, Vector3 } from \"core/Maths/math.vector\";\r\nimport { type Scene } from \"core/scene\";\r\nimport { type IAnimation } from \"../glTFLoaderInterfaces\";\r\n\r\nconst NAME = \"KHR_interactivity\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_interactivity extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_interactivity\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * Loader extension for KHR_interactivity\r\n */\r\nexport class KHR_interactivity implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n private _pathConverter?: GLTFPathToObjectConverter<any, any, any>;\r\n\r\n /**\r\n * @internal\r\n * @param _loader\r\n */\r\n constructor(private _loader: GLTFLoader) {\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n this._pathConverter = GetPathToObjectConverter(this._loader.gltf);\r\n // avoid starting animations automatically.\r\n _loader._skipStartAnimationStep = true;\r\n\r\n // Update object model with new pointers\r\n\r\n const scene = _loader.babylonScene;\r\n if (scene) {\r\n _AddInteractivityObjectModel(scene);\r\n }\r\n }\r\n\r\n public dispose() {\r\n (this._loader as any) = null;\r\n delete this._pathConverter;\r\n }\r\n\r\n // eslint-disable-next-line no-restricted-syntax, @typescript-eslint/no-misused-promises\r\n public async onReady(): Promise<void> {\r\n if (!this._loader.babylonScene || !this._pathConverter) {\r\n return;\r\n }\r\n const scene = this._loader.babylonScene;\r\n const interactivityDefinition = this._loader.gltf.extensions?.KHR_interactivity as IKHRInteractivity;\r\n if (!interactivityDefinition) {\r\n // This can technically throw, but it's not a critical error\r\n return;\r\n }\r\n\r\n const coordinator = new FlowGraphCoordinator({ scene });\r\n coordinator.dispatchEventsSynchronously = false; // glTF interactivity dispatches events asynchronously\r\n const graphs = interactivityDefinition.graphs.map((graph) => {\r\n const parser = new InteractivityGraphToFlowGraphParser(graph, this._loader.gltf, this._loader.parent.targetFps);\r\n return parser.serializeToFlowGraph();\r\n });\r\n // parse each graph async\r\n await Promise.all(graphs.map(async (graph) => await ParseFlowGraphAsync(graph, { coordinator, pathConverter: this._pathConverter })));\r\n\r\n coordinator.start();\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n * populates the object model with the interactivity extension\r\n */\r\nexport function _AddInteractivityObjectModel(scene: Scene) {\r\n // Note - all of those are read-only, as per the specs!\r\n\r\n // active camera rotation\r\n AddObjectAccessorToKey(\"/extensions/KHR_interactivity/?/activeCamera/rotation\", {\r\n get: () => {\r\n if (!scene.activeCamera) {\r\n return new Quaternion(NaN, NaN, NaN, NaN);\r\n }\r\n const quat = Quaternion.FromRotationMatrix(scene.activeCamera.getWorldMatrix()).normalize();\r\n if (!scene.useRightHandedSystem) {\r\n quat.w *= -1; // glTF uses right-handed system, while babylon uses left-handed\r\n quat.x *= -1; // glTF uses right-handed system, while babylon uses left-handed\r\n }\r\n return quat;\r\n },\r\n type: \"Quaternion\",\r\n getTarget: () => scene.activeCamera,\r\n });\r\n // activeCamera position\r\n AddObjectAccessorToKey(\"/extensions/KHR_interactivity/?/activeCamera/position\", {\r\n get: () => {\r\n if (!scene.activeCamera) {\r\n return new Vector3(NaN, NaN, NaN);\r\n }\r\n const pos = scene.activeCamera.getWorldMatrix().getTranslation(); // not global position\r\n if (!scene.useRightHandedSystem) {\r\n pos.x *= -1; // glTF uses right-handed system, while babylon uses left-handed\r\n }\r\n return pos;\r\n },\r\n type: \"Vector3\",\r\n getTarget: () => scene.activeCamera,\r\n });\r\n\r\n // /animations/{} pointers:\r\n AddObjectAccessorToKey(\"/animations/{}/extensions/KHR_interactivity/isPlaying\", {\r\n get: (animation: IAnimation) => {\r\n return animation._babylonAnimationGroup?.isPlaying ?? false;\r\n },\r\n type: \"boolean\",\r\n getTarget: (animation: IAnimation) => {\r\n return animation._babylonAnimationGroup;\r\n },\r\n });\r\n AddObjectAccessorToKey(\"/animations/{}/extensions/KHR_interactivity/minTime\", {\r\n get: (animation: IAnimation) => {\r\n return (animation._babylonAnimationGroup?.from ?? 0) / 60; // fixed factor for duration-to-frames conversion\r\n },\r\n type: \"number\",\r\n getTarget: (animation: IAnimation) => {\r\n return animation._babylonAnimationGroup;\r\n },\r\n });\r\n AddObjectAccessorToKey(\"/animations/{}/extensions/KHR_interactivity/maxTime\", {\r\n get: (animation: IAnimation) => {\r\n return (animation._babylonAnimationGroup?.to ?? 0) / 60; // fixed factor for duration-to-frames conversion\r\n },\r\n type: \"number\",\r\n getTarget: (animation: IAnimation) => {\r\n return animation._babylonAnimationGroup;\r\n },\r\n });\r\n // playhead\r\n AddObjectAccessorToKey(\"/animations/{}/extensions/KHR_interactivity/playhead\", {\r\n get: (animation: IAnimation) => {\r\n return (animation._babylonAnimationGroup?.getCurrentFrame() ?? 0) / 60; // fixed factor for duration-to-frames conversion\r\n },\r\n type: \"number\",\r\n getTarget: (animation: IAnimation) => {\r\n return animation._babylonAnimationGroup;\r\n },\r\n });\r\n //virtualPlayhead - TODO, do we support this property in our animations? getCurrentFrame is the only method we have for this.\r\n AddObjectAccessorToKey(\"/animations/{}/extensions/KHR_interactivity/virtualPlayhead\", {\r\n get: (animation: IAnimation) => {\r\n return (animation._babylonAnimationGroup?.getCurrentFrame() ?? 0) / 60; // fixed factor for duration-to-frames conversion\r\n },\r\n type: \"number\",\r\n getTarget: (animation: IAnimation) => {\r\n return animation._babylonAnimationGroup;\r\n },\r\n });\r\n}\r\n\r\n// Register flow graph blocks. Do it here so they are available when the extension is enabled.\r\naddToBlockFactory(NAME, \"FlowGraphGLTFDataProvider\", async () => {\r\n return (await import(\"./KHR_interactivity/flowGraphGLTFDataProvider\")).FlowGraphGLTFDataProvider;\r\n});\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_interactivity(loader));\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
3
|
-
import type
|
|
4
|
-
import type
|
|
1
|
+
import { type Nullable } from "@babylonjs/core/types.js";
|
|
2
|
+
import { type TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
|
|
3
|
+
import { type INode } from "../glTFLoaderInterfaces.js";
|
|
4
|
+
import { type IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
|
|
5
5
|
import { GLTFLoader } from "../glTFLoader.js";
|
|
6
6
|
declare module "../../glTFFileLoader.js" {
|
|
7
7
|
interface GLTFLoaderExtensionOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KHR_lights_punctual.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_lights_punctual.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"KHR_lights_punctual.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_lights_punctual.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type Nullable } from \"core/types\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { DirectionalLight } from \"core/Lights/directionalLight\";\r\nimport { PointLight } from \"core/Lights/pointLight\";\r\nimport { SpotLight } from \"core/Lights/spotLight\";\r\nimport { Light } from \"core/Lights/light\";\r\nimport { type TransformNode } from \"core/Meshes/transformNode\";\r\n\r\nimport { type IKHRLightsPunctual_LightReference, KHRLightsPunctual_LightType } from \"babylonjs-gltf2interface\";\r\nimport { type INode, type IKHRLightsPunctual_Light } from \"../glTFLoaderInterfaces\";\r\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_lights_punctual\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_lights_punctual extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_lights_punctual\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_lights_punctual/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_lights implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /** hidden */\r\n private _loader: GLTFLoader;\r\n private _lights?: IKHRLightsPunctual_Light[];\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n delete this._lights;\r\n }\r\n\r\n /** @internal */\r\n public onLoading(): void {\r\n const extensions = this._loader.gltf.extensions;\r\n if (extensions && extensions[this.name]) {\r\n const extension = extensions[this.name];\r\n this._lights = extension.lights;\r\n ArrayItem.Assign(this._lights);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public loadNodeAsync(context: string, node: INode, assign: (babylonTransformNode: TransformNode) => void): Nullable<Promise<TransformNode>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRLightsPunctual_LightReference, TransformNode>(context, node, this.name, async (extensionContext, extension) => {\r\n this._loader._allMaterialsDirtyRequired = true;\r\n\r\n return await this._loader.loadNodeAsync(context, node, (babylonMesh) => {\r\n let babylonLight: Light;\r\n\r\n const light = ArrayItem.Get(extensionContext, this._lights, extension.light);\r\n const name = light.name || babylonMesh.name;\r\n\r\n this._loader.babylonScene._blockEntityCollection = !!this._loader._assetContainer;\r\n\r\n switch (light.type) {\r\n case KHRLightsPunctual_LightType.DIRECTIONAL: {\r\n const babylonDirectionalLight = new DirectionalLight(name, Vector3.Backward(), this._loader.babylonScene);\r\n babylonDirectionalLight.position.setAll(0);\r\n babylonLight = babylonDirectionalLight;\r\n break;\r\n }\r\n case KHRLightsPunctual_LightType.POINT: {\r\n babylonLight = new PointLight(name, Vector3.Zero(), this._loader.babylonScene);\r\n break;\r\n }\r\n case KHRLightsPunctual_LightType.SPOT: {\r\n const babylonSpotLight = new SpotLight(name, Vector3.Zero(), Vector3.Backward(), 0, 1, this._loader.babylonScene);\r\n babylonSpotLight.angle = ((light.spot && light.spot.outerConeAngle) || Math.PI / 4) * 2;\r\n babylonSpotLight.innerAngle = ((light.spot && light.spot.innerConeAngle) || 0) * 2;\r\n babylonLight = babylonSpotLight;\r\n break;\r\n }\r\n default: {\r\n this._loader.babylonScene._blockEntityCollection = false;\r\n throw new Error(`${extensionContext}: Invalid light type (${light.type})`);\r\n }\r\n }\r\n\r\n babylonLight._parentContainer = this._loader._assetContainer;\r\n this._loader.babylonScene._blockEntityCollection = false;\r\n light._babylonLight = babylonLight;\r\n\r\n babylonLight.falloffType = Light.FALLOFF_GLTF;\r\n babylonLight.diffuse = light.color ? Color3.FromArray(light.color) : Color3.White();\r\n babylonLight.intensity = light.intensity == undefined ? 1 : light.intensity;\r\n babylonLight.range = light.range == undefined ? Number.MAX_VALUE : light.range;\r\n babylonLight.parent = babylonMesh;\r\n\r\n this._loader._babylonLights.push(babylonLight);\r\n\r\n GLTFLoader.AddPointerMetadata(babylonLight, extensionContext);\r\n\r\n assign(babylonMesh);\r\n });\r\n });\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_lights(loader));\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
3
|
-
import type
|
|
4
|
-
import type
|
|
1
|
+
import { type Nullable } from "@babylonjs/core/types.js";
|
|
2
|
+
import { type Material } from "@babylonjs/core/Materials/material.js";
|
|
3
|
+
import { type IMaterial } from "../glTFLoaderInterfaces.js";
|
|
4
|
+
import { type IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
|
|
5
5
|
import { GLTFLoader } from "../glTFLoader.js";
|
|
6
6
|
declare module "../../glTFFileLoader.js" {
|
|
7
7
|
interface GLTFLoaderExtensionOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KHR_materials_anisotropy.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_anisotropy.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,0BAA0B,CAAC;AAaxC;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,wBAAwB;IAkBjC;;OAEG;IACH,YAAY,MAAkB;QApB9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAO5B;;WAEG;QACI,UAAK,GAAG,GAAG,CAAC;QAQf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,gBAAgB;IACT,OAAO;QACT,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gDAAgD;IACzC,2BAA2B,CAAC,OAAe,EAAE,QAAmB,EAAE,eAAyB;QAC9F,OAAO,UAAU,CAAC,kBAAkB,CAA0B,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE;YAC9H,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAgB,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;YAC5F,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,gBAAgB,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;YACjG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,8BAA8B,CAAC,OAAe,EAAE,UAAmC,EAAE,eAAyB;QACxH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAgB,CAAC;QAE3C,yCAAyC;QACzC,MAAM,gBAAgB,GAAG,UAAU,CAAC,kBAAkB,IAAI,CAAC,CAAC;QAC5D,MAAM,eAAe,GAAG,UAAU,CAAC,kBAAkB,IAAI,CAAC,CAAC;QAE3D,OAAO,CAAC,2BAA2B,GAAG,gBAAgB,CAAC;QACvD,OAAO,CAAC,oBAAoB,GAAG,eAAe,CAAC;QAE/C,yCAAyC;QACzC,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,gCAAgC,IAAI,CAAC,UAAU,CAAC,gCAAgC,CAAC,wBAAwB,EAAE,CAAC;YACxH,OAAO,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;QAED,0BAA0B;QAC1B,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;YAC9B,UAAU,CAAC,iBAAkC,CAAC,YAAY,GAAG,IAAI,CAAC;YACnE,QAAQ,CAAC,IAAI,CACT,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,oBAAoB,EAAE,UAAU,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE;gBACxG,OAAO,CAAC,IAAI,GAAG,GAAG,eAAe,CAAC,IAAI,yBAAyB,CAAC;gBAChE,OAAO,CAAC,sBAAsB,GAAG,OAAO,CAAC;YAC7C,CAAC,CAAC,CACL,CAAC;QACN,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;CACJ;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import type
|
|
1
|
+
{"version":3,"file":"KHR_materials_anisotropy.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_anisotropy.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { type Material } from \"core/Materials/material\";\r\nimport { type IMaterial, type ITextureInfo } from \"../glTFLoaderInterfaces\";\r\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport { type IKHRMaterialsAnisotropy } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_materials_anisotropy\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_materials_anisotropy extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_anisotropy\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_anisotropy)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_anisotropy implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /**\r\n * Defines a number that determines the order the extensions are applied.\r\n */\r\n public order = 195;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRMaterialsAnisotropy>(context, material, this.name, async (extensionContext, extension) => {\r\n const promises = new Array<Promise<any>>();\r\n promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));\r\n promises.push(this._loadAnisotropyPropertiesAsync(extensionContext, extension, babylonMaterial));\r\n await Promise.all(promises);\r\n });\r\n }\r\n\r\n private async _loadAnisotropyPropertiesAsync(context: string, properties: IKHRMaterialsAnisotropy, babylonMaterial: Material): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n const promises = new Array<Promise<any>>();\r\n\r\n // Set non-texture properties immediately\r\n const anisotropyWeight = properties.anisotropyStrength ?? 0;\r\n const anisotropyAngle = properties.anisotropyRotation ?? 0;\r\n\r\n adapter.specularRoughnessAnisotropy = anisotropyWeight;\r\n adapter.geometryTangentAngle = anisotropyAngle;\r\n\r\n // Check if this is glTF-style anisotropy\r\n const extensions = properties.extensions ?? {};\r\n if (!extensions.EXT_materials_anisotropy_openpbr || !extensions.EXT_materials_anisotropy_openpbr.openPbrAnisotropyEnabled) {\r\n adapter.configureGltfStyleAnisotropy(true);\r\n }\r\n\r\n // Load texture if present\r\n if (properties.anisotropyTexture) {\r\n (properties.anisotropyTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/anisotropyTexture`, properties.anisotropyTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Anisotropy Intensity)`;\r\n adapter.geometryTangentTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_anisotropy(loader));\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
3
|
-
import type
|
|
4
|
-
import type
|
|
1
|
+
import { type Nullable } from "@babylonjs/core/types.js";
|
|
2
|
+
import { type Material } from "@babylonjs/core/Materials/material.js";
|
|
3
|
+
import { type IMaterial } from "../glTFLoaderInterfaces.js";
|
|
4
|
+
import { type IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
|
|
5
5
|
import { GLTFLoader } from "../glTFLoader.js";
|
|
6
6
|
declare module "../../glTFFileLoader.js" {
|
|
7
7
|
interface GLTFLoaderExtensionOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KHR_materials_clearcoat.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_clearcoat.ts"],"names":[],"mappings":"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","sourcesContent":["import type
|
|
1
|
+
{"version":3,"file":"KHR_materials_clearcoat.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_clearcoat.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,yBAAyB,CAAC;AAavC;;;GAGG;AACH,gEAAgE;AAChE,MAAM,OAAO,uBAAuB;IAkBhC;;OAEG;IACH,YAAY,MAAkB;QApB9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAO5B;;WAEG;QACI,UAAK,GAAG,GAAG,CAAC;QAQf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,gBAAgB;IACT,OAAO;QACT,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gDAAgD;IACzC,2BAA2B,CAAC,OAAe,EAAE,QAAmB,EAAE,eAAyB;QAC9F,OAAO,UAAU,CAAC,kBAAkB,CAAyB,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE;YAC7H,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAgB,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;YAC5F,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,gBAAgB,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;YAChG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,2FAA2F;IACnF,6BAA6B,CAAC,OAAe,EAAE,UAAkC,EAAE,eAAyB;QAChH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAgB,CAAC;QAE3C,yCAAyC;QACzC,OAAO,CAAC,aAAa,EAAE,CAAC;QACxB,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/F,OAAO,CAAC,aAAa,GAAG,UAAU,CAAC,wBAAwB,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpH,gBAAgB;QAChB,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CACT,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,mBAAmB,EAAE,UAAU,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE;gBACtG,OAAO,CAAC,IAAI,GAAG,GAAG,eAAe,CAAC,IAAI,cAAc,CAAC;gBACrD,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC;YACxC,CAAC,CAAC,CACL,CAAC;QACN,CAAC;QAED,IAAI,UAAU,CAAC,yBAAyB,EAAE,CAAC;YACtC,UAAU,CAAC,yBAA0C,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3E,QAAQ,CAAC,IAAI,CACT,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,4BAA4B,EAAE,UAAU,CAAC,yBAAyB,EAAE,CAAC,OAAO,EAAE,EAAE;gBACxH,OAAO,CAAC,IAAI,GAAG,GAAG,eAAe,CAAC,IAAI,wBAAwB,CAAC;gBAC/D,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC;YAC3C,CAAC,CAAC,CACL,CAAC;QACN,CAAC;QAED,IAAI,UAAU,CAAC,sBAAsB,EAAE,CAAC;YACnC,UAAU,CAAC,sBAAuC,CAAC,YAAY,GAAG,IAAI,CAAC;YACxE,QAAQ,CAAC,IAAI,CACT,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,yBAAyB,EAAE,UAAU,CAAC,sBAAsB,EAAE,CAAC,OAAO,EAAE,EAAE;gBAClH,OAAO,CAAC,IAAI,GAAG,GAAG,eAAe,CAAC,IAAI,qBAAqB,CAAC;gBAC5D,OAAO,CAAC,yBAAyB,GAAG,OAAO,CAAC;gBAC5C,IAAI,UAAU,CAAC,sBAAsB,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC;oBACxD,OAAO,CAAC,8BAA8B,GAAG,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC;gBACrF,CAAC;YACL,CAAC,CAAC,CACL,CAAC;YACF,OAAO,CAAC,sBAAsB,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,oBAAoB,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC,oBAAoB,CAAC,CAAC;QACtI,CAAC;QAED,0CAA0C;QAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAChD,CAAC;CACJ;AACD,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { type Material } from \"core/Materials/material\";\r\nimport { type IMaterial, type ITextureInfo } from \"../glTFLoaderInterfaces\";\r\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport { type IKHRMaterialsClearcoat } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_materials_clearcoat\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_materials_clearcoat extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_clearcoat\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_clearcoat/README.md)\r\n * [Playground Sample](https://www.babylonjs-playground.com/frame.html#7F7PN6#8)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_clearcoat implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /**\r\n * Defines a number that determines the order the extensions are applied.\r\n */\r\n public order = 190;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRMaterialsClearcoat>(context, material, this.name, async (extensionContext, extension) => {\r\n const promises = new Array<Promise<any>>();\r\n promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));\r\n promises.push(this._loadClearCoatPropertiesAsync(extensionContext, extension, babylonMaterial));\r\n await Promise.all(promises);\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n private _loadClearCoatPropertiesAsync(context: string, properties: IKHRMaterialsClearcoat, babylonMaterial: Material): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n const promises = new Array<Promise<any>>();\r\n\r\n // Set non-texture properties immediately\r\n adapter.configureCoat();\r\n adapter.coatWeight = properties.clearcoatFactor !== undefined ? properties.clearcoatFactor : 0;\r\n adapter.coatRoughness = properties.clearcoatRoughnessFactor !== undefined ? properties.clearcoatRoughnessFactor : 0;\r\n\r\n // Load textures\r\n if (properties.clearcoatTexture) {\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/clearcoatTexture`, properties.clearcoatTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (ClearCoat)`;\r\n adapter.coatWeightTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.clearcoatRoughnessTexture) {\r\n (properties.clearcoatRoughnessTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/clearcoatRoughnessTexture`, properties.clearcoatRoughnessTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (ClearCoat Roughness)`;\r\n adapter.coatRoughnessTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.clearcoatNormalTexture) {\r\n (properties.clearcoatNormalTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/clearcoatNormalTexture`, properties.clearcoatNormalTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (ClearCoat Normal)`;\r\n adapter.geometryCoatNormalTexture = texture;\r\n if (properties.clearcoatNormalTexture?.scale != undefined) {\r\n adapter.geometryCoatNormalTextureScale = properties.clearcoatNormalTexture.scale;\r\n }\r\n })\r\n );\r\n adapter.setNormalMapInversions(!babylonMaterial.getScene().useRightHandedSystem, babylonMaterial.getScene().useRightHandedSystem);\r\n }\r\n\r\n // eslint-disable-next-line github/no-then\r\n return Promise.all(promises).then(() => {});\r\n }\r\n}\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_clearcoat(loader));\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
3
|
-
import type
|
|
4
|
-
import type
|
|
1
|
+
import { type Nullable } from "@babylonjs/core/types.js";
|
|
2
|
+
import { type Material } from "@babylonjs/core/Materials/material.js";
|
|
3
|
+
import { type IMaterial } from "../glTFLoaderInterfaces.js";
|
|
4
|
+
import { type IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
|
|
5
5
|
import { GLTFLoader } from "../glTFLoader.js";
|
|
6
6
|
declare module "../../glTFFileLoader.js" {
|
|
7
7
|
interface GLTFLoaderExtensionOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KHR_materials_coat.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_coat.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport type { IMaterial, ITextureInfo } from \"../glTFLoaderInterfaces\";\r\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport type { IKHRMaterialsCoat } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\n\r\nconst NAME = \"KHR_materials_coat\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_materials_coat extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_coat\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/6cb2cb84b504c245c49cf2e9a8ae16d26f72ac97/extensions/2.0/Khronos/KHR_materials_coat/README.md)\r\n * @experimental\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_coat implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /**\r\n * Defines a number that determines the order the extensions are applied.\r\n */\r\n public order = 191;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * Defines whether the KHR_materials_openpbr extension is used, indicating that\r\n * the material should be interpreted as OpenPBR (for coat, this might be necessary\r\n * to interpret anisotropy correctly).\r\n */\r\n private useOpenPBR: boolean = false;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRMaterialsCoat>(context, material, this.name, async (extensionContext, extension) => {\r\n const promises = new Array<Promise<any>>();\r\n promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));\r\n if (material.extensions && material.extensions[\"KHR_materials_openpbr\"]) {\r\n this.useOpenPBR = true;\r\n }\r\n promises.push(this._loadCoatPropertiesAsync(extensionContext, extension, babylonMaterial));\r\n await Promise.all(promises);\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n private _loadCoatPropertiesAsync(context: string, properties: IKHRMaterialsCoat, babylonMaterial: Material): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n const promises = new Array<Promise<any>>();\r\n\r\n // Set non-texture properties immediately\r\n adapter.configureCoat();\r\n adapter.coatWeight = properties.coatFactor !== undefined ? properties.coatFactor : 0;\r\n adapter.coatRoughness = properties.coatRoughnessFactor !== undefined ? properties.coatRoughnessFactor : 0;\r\n\r\n // Load textures\r\n if (properties.coatTexture) {\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/coatTexture`, properties.coatTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Coat)`;\r\n adapter.coatWeightTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.coatRoughnessTexture) {\r\n (properties.coatRoughnessTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/coatRoughnessTexture`, properties.coatRoughnessTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Coat Roughness)`;\r\n adapter.coatRoughnessTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.coatNormalTexture) {\r\n (properties.coatNormalTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/coatNormalTexture`, properties.coatNormalTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Coat Normal)`;\r\n adapter.geometryCoatNormalTexture = texture;\r\n if (properties.coatNormalTexture?.scale != undefined) {\r\n adapter.geometryCoatNormalTextureScale = properties.coatNormalTexture.scale;\r\n }\r\n })\r\n );\r\n adapter.setNormalMapInversions(!babylonMaterial.getScene().useRightHandedSystem, babylonMaterial.getScene().useRightHandedSystem);\r\n }\r\n\r\n adapter.coatDarkening = properties.coatDarkeningFactor !== undefined ? properties.coatDarkeningFactor : 1;\r\n adapter.coatIor = properties.coatIor !== undefined ? properties.coatIor : 1.5;\r\n\r\n const colorFactor = Color3.White();\r\n if (properties.coatColorFactor !== undefined) {\r\n colorFactor.fromArray(properties.coatColorFactor);\r\n }\r\n\r\n adapter.coatColor = colorFactor;\r\n\r\n if (properties.coatColorTexture) {\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/coatColorTexture`, properties.coatColorTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Coat Color)`;\r\n adapter.coatColorTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n // Set non-texture properties immediately\r\n const coatAnisotropyWeight = properties.coatAnisotropyStrength ?? 0;\r\n const coatAnisotropyAngle = properties.coatAnisotropyRotation ?? 0;\r\n\r\n adapter.coatRoughnessAnisotropy = coatAnisotropyWeight;\r\n adapter.geometryCoatTangentAngle = coatAnisotropyAngle;\r\n\r\n // Check if this is glTF-style anisotropy\r\n if (!this.useOpenPBR) {\r\n adapter.configureGltfStyleAnisotropy(true);\r\n }\r\n\r\n // Load texture if present\r\n if (properties.coatAnisotropyTexture) {\r\n (properties.coatAnisotropyTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/coatAnisotropyTexture`, properties.coatAnisotropyTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Coat Anisotropy)`;\r\n adapter.geometryCoatTangentTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n // eslint-disable-next-line github/no-then\r\n return Promise.all(promises).then(() => {});\r\n }\r\n}\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_coat(loader));\r\n"]}
|
|
1
|
+
{"version":3,"file":"KHR_materials_coat.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_coat.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { type Material } from \"core/Materials/material\";\r\nimport { type IMaterial, type ITextureInfo } from \"../glTFLoaderInterfaces\";\r\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport { type IKHRMaterialsCoat } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\n\r\nconst NAME = \"KHR_materials_coat\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_materials_coat extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_coat\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/6cb2cb84b504c245c49cf2e9a8ae16d26f72ac97/extensions/2.0/Khronos/KHR_materials_coat/README.md)\r\n * @experimental\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_coat implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /**\r\n * Defines a number that determines the order the extensions are applied.\r\n */\r\n public order = 191;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * Defines whether the KHR_materials_openpbr extension is used, indicating that\r\n * the material should be interpreted as OpenPBR (for coat, this might be necessary\r\n * to interpret anisotropy correctly).\r\n */\r\n private useOpenPBR: boolean = false;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRMaterialsCoat>(context, material, this.name, async (extensionContext, extension) => {\r\n const promises = new Array<Promise<any>>();\r\n promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));\r\n if (material.extensions && material.extensions[\"KHR_materials_openpbr\"]) {\r\n this.useOpenPBR = true;\r\n }\r\n promises.push(this._loadCoatPropertiesAsync(extensionContext, extension, babylonMaterial));\r\n await Promise.all(promises);\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n private _loadCoatPropertiesAsync(context: string, properties: IKHRMaterialsCoat, babylonMaterial: Material): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n const promises = new Array<Promise<any>>();\r\n\r\n // Set non-texture properties immediately\r\n adapter.configureCoat();\r\n adapter.coatWeight = properties.coatFactor !== undefined ? properties.coatFactor : 0;\r\n adapter.coatRoughness = properties.coatRoughnessFactor !== undefined ? properties.coatRoughnessFactor : 0;\r\n\r\n // Load textures\r\n if (properties.coatTexture) {\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/coatTexture`, properties.coatTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Coat)`;\r\n adapter.coatWeightTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.coatRoughnessTexture) {\r\n (properties.coatRoughnessTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/coatRoughnessTexture`, properties.coatRoughnessTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Coat Roughness)`;\r\n adapter.coatRoughnessTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.coatNormalTexture) {\r\n (properties.coatNormalTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/coatNormalTexture`, properties.coatNormalTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Coat Normal)`;\r\n adapter.geometryCoatNormalTexture = texture;\r\n if (properties.coatNormalTexture?.scale != undefined) {\r\n adapter.geometryCoatNormalTextureScale = properties.coatNormalTexture.scale;\r\n }\r\n })\r\n );\r\n adapter.setNormalMapInversions(!babylonMaterial.getScene().useRightHandedSystem, babylonMaterial.getScene().useRightHandedSystem);\r\n }\r\n\r\n adapter.coatDarkening = properties.coatDarkeningFactor !== undefined ? properties.coatDarkeningFactor : 1;\r\n adapter.coatIor = properties.coatIor !== undefined ? properties.coatIor : 1.5;\r\n\r\n const colorFactor = Color3.White();\r\n if (properties.coatColorFactor !== undefined) {\r\n colorFactor.fromArray(properties.coatColorFactor);\r\n }\r\n\r\n adapter.coatColor = colorFactor;\r\n\r\n if (properties.coatColorTexture) {\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/coatColorTexture`, properties.coatColorTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Coat Color)`;\r\n adapter.coatColorTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n // Set non-texture properties immediately\r\n const coatAnisotropyWeight = properties.coatAnisotropyStrength ?? 0;\r\n const coatAnisotropyAngle = properties.coatAnisotropyRotation ?? 0;\r\n\r\n adapter.coatRoughnessAnisotropy = coatAnisotropyWeight;\r\n adapter.geometryCoatTangentAngle = coatAnisotropyAngle;\r\n\r\n // Check if this is glTF-style anisotropy\r\n if (!this.useOpenPBR) {\r\n adapter.configureGltfStyleAnisotropy(true);\r\n }\r\n\r\n // Load texture if present\r\n if (properties.coatAnisotropyTexture) {\r\n (properties.coatAnisotropyTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/coatAnisotropyTexture`, properties.coatAnisotropyTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Coat Anisotropy)`;\r\n adapter.geometryCoatTangentTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n // eslint-disable-next-line github/no-then\r\n return Promise.all(promises).then(() => {});\r\n }\r\n}\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_coat(loader));\r\n"]}
|