@onerjs/serializers 8.45.9 → 8.46.1
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/3MF/3mfSerializer.js.map +1 -1
- package/3MF/core/model/3mf.builder.d.ts +4 -7
- package/3MF/core/model/3mf.builder.js +2 -1
- package/3MF/core/model/3mf.builder.js.map +1 -1
- package/3MF/core/model/3mf.d.ts +1 -2
- package/3MF/core/model/3mf.js +1 -1
- package/3MF/core/model/3mf.js.map +1 -1
- package/3MF/core/model/3mf.opc.d.ts +2 -2
- package/3MF/core/model/3mf.opc.interfaces.d.ts +1 -1
- package/3MF/core/model/3mf.opc.interfaces.js.map +1 -1
- package/3MF/core/model/3mf.opc.js +1 -1
- package/3MF/core/model/3mf.opc.js.map +1 -1
- package/3MF/core/model/3mf.serializer.d.ts +1 -2
- package/3MF/core/model/3mf.serializer.js.map +1 -1
- package/3MF/core/xml/xml.builder.bytes.d.ts +1 -1
- package/3MF/core/xml/xml.builder.bytes.js.map +1 -1
- package/3MF/core/xml/xml.builder.d.ts +1 -1
- package/3MF/core/xml/xml.builder.js.map +1 -1
- package/3MF/core/xml/xml.builder.string.d.ts +1 -1
- package/3MF/core/xml/xml.builder.string.js.map +1 -1
- package/3MF/core/xml/xml.interfaces.d.ts +1 -1
- package/3MF/core/xml/xml.interfaces.js.map +1 -1
- package/3MF/core/xml/xml.serializer.format.d.ts +1 -1
- package/3MF/core/xml/xml.serializer.format.js.map +1 -1
- package/BVH/bvhSerializer.d.ts +1 -1
- package/BVH/bvhSerializer.js.map +1 -1
- package/OBJ/objSerializer.d.ts +1 -1
- package/OBJ/objSerializer.js.map +1 -1
- package/USDZ/usdzExporter.d.ts +2 -2
- package/USDZ/usdzExporter.js.map +1 -1
- package/exportUtils.d.ts +1 -1
- package/exportUtils.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_mesh_gpu_instancing.d.ts +5 -5
- package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_texture_avif.d.ts +1 -1
- package/glTF/2.0/Extensions/EXT_texture_avif.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_texture_webp.d.ts +1 -1
- package/glTF/2.0/Extensions/EXT_texture_webp.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_draco_mesh_compression.d.ts +3 -3
- package/glTF/2.0/Extensions/KHR_draco_mesh_compression.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 +3 -3
- package/glTF/2.0/Extensions/KHR_materials_dispersion.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_emissive_strength.d.ts +3 -3
- 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 +3 -3
- 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_openpbr.d.ts +3 -3
- package/glTF/2.0/Extensions/KHR_materials_openpbr.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 +3 -3
- package/glTF/2.0/Extensions/KHR_materials_unlit.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_texture_basisu.d.ts +1 -1
- package/glTF/2.0/Extensions/KHR_texture_basisu.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_texture_transform.d.ts +3 -3
- package/glTF/2.0/Extensions/KHR_texture_transform.js.map +1 -1
- package/glTF/2.0/bufferManager.d.ts +2 -2
- package/glTF/2.0/bufferManager.js.map +1 -1
- package/glTF/2.0/dataWriter.d.ts +1 -1
- package/glTF/2.0/dataWriter.js.map +1 -1
- package/glTF/2.0/glTFAnimation.d.ts +5 -6
- package/glTF/2.0/glTFAnimation.js.map +1 -1
- package/glTF/2.0/glTFData.js.map +1 -1
- package/glTF/2.0/glTFExporter.d.ts +7 -7
- package/glTF/2.0/glTFExporter.js.map +1 -1
- package/glTF/2.0/glTFExporterExtension.d.ts +8 -8
- package/glTF/2.0/glTFExporterExtension.js.map +1 -1
- package/glTF/2.0/glTFMaterialExporter.d.ts +5 -5
- package/glTF/2.0/glTFMaterialExporter.js.map +1 -1
- package/glTF/2.0/glTFMorphTargetsUtilities.d.ts +4 -4
- package/glTF/2.0/glTFMorphTargetsUtilities.js.map +1 -1
- package/glTF/2.0/glTFSerializer.d.ts +4 -4
- package/glTF/2.0/glTFSerializer.js.map +1 -1
- package/glTF/2.0/glTFUtilities.d.ts +7 -9
- package/glTF/2.0/glTFUtilities.js.map +1 -1
- package/legacy/legacy-3mfSerializer.js +3 -3
- package/legacy/legacy-3mfSerializer.js.map +1 -1
- package/legacy/legacy-bvhSerializer.js +3 -3
- package/legacy/legacy-bvhSerializer.js.map +1 -1
- package/legacy/legacy-glTF2Serializer.js +5 -4
- package/legacy/legacy-glTF2Serializer.js.map +1 -1
- package/legacy/legacy-objSerializer.js +3 -3
- package/legacy/legacy-objSerializer.js.map +1 -1
- package/legacy/legacy-stlSerializer.js +3 -3
- package/legacy/legacy-stlSerializer.js.map +1 -1
- package/legacy/legacy-usdzSerializer.js +3 -3
- package/legacy/legacy-usdzSerializer.js.map +1 -1
- package/legacy/legacy.js +0 -1
- package/legacy/legacy.js.map +1 -1
- package/package.json +4 -4
- package/stl/stlSerializer.js.map +1 -1
package/USDZ/usdzExporter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usdzExporter.js","sourceRoot":"","sources":["../../../../dev/serializers/src/USDZ/usdzExporter.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport type { Camera } from \"core/Cameras/camera\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Material } from \"core/Materials/material\";\r\nimport { PBRBaseMaterial } from \"core/Materials/PBR/pbrBaseMaterial\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport type { Texture } from \"core/Materials/Textures/texture\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { Matrix, Vector2 } from \"core/Maths/math.vector\";\r\nimport type { Geometry } from \"core/Meshes/geometry\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport { DumpTools } from \"core/Misc/dumpTools\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { FloatArray, Nullable } from \"core/types\";\r\nimport { IsNoopNode } from \"../exportUtils\";\r\nimport { GetTextureDataAsync } from \"core/Misc/textureTools\";\r\n\r\n/**\r\n * Ported from https://github.com/mrdoob/three.js/blob/master/examples/jsm/exporters/USDZExporter.js\r\n * Thanks a lot to the three.js team for their amazing work!\r\n */\r\n\r\n// FFlate access\r\ndeclare const fflate: any;\r\n\r\n/**\r\n * Options for the USDZ export\r\n */\r\nexport interface IUSDZExportOptions {\r\n /**\r\n * URL to load the fflate library from\r\n */\r\n fflateUrl?: string;\r\n /**\r\n * Include anchoring properties in the USDZ file\r\n */\r\n includeAnchoringProperties?: boolean;\r\n /**\r\n * Anchoring type (plane by default)\r\n */\r\n anchoringType?: string;\r\n /**\r\n * Plane anchoring alignment (horizontal by default)\r\n */\r\n planeAnchoringAlignment?: string;\r\n /**\r\n * Model file name (model.usda by default)\r\n */\r\n modelFileName?: string;\r\n /**\r\n * Precision to use for number (5 by default)\r\n */\r\n precision?: number;\r\n /**\r\n * Export the camera (false by default)\r\n */\r\n exportCamera?: boolean;\r\n /**\r\n * Camera sensor width (35 by default)\r\n */\r\n cameraSensorWidth?: number;\r\n}\r\n\r\nfunction BuildHeader() {\r\n return `#usda 1.0\r\n (\r\n customLayerData = {\r\n string creator = \"Babylon.js USDZExportAsync\"\r\n }\r\n defaultPrim = \"Root\"\r\n metersPerUnit = 1\r\n upAxis = \"Y\"\r\n )`;\r\n}\r\n\r\nfunction BuildRootAndSceneStart(options: IUSDZExportOptions) {\r\n const alignment =\r\n options.includeAnchoringProperties === true\r\n ? `\r\n\t\ttoken preliminary:anchoring:type = \"${options.anchoringType}\"\r\n\t\ttoken preliminary:planeAnchoring:alignment = \"${options.planeAnchoringAlignment}\"`\r\n : \"\";\r\n return `def Xform \"Root\"\r\n {\r\n def Scope \"Scenes\" (\r\n kind = \"sceneLibrary\"\r\n )\r\n {\r\n def Xform \"Scene\" (\r\n customData = {\r\n bool preliminary_collidesWithEnvironment = 0\r\n string sceneName = \"Scene\"\r\n }\r\n sceneName = \"Scene\"\r\n )\r\n {${alignment}\r\n `;\r\n}\r\n\r\nfunction BuildSceneEnd() {\r\n return `\r\n }\r\n }`;\r\n}\r\n\r\nfunction BuildRootEnd() {\r\n return `\r\n }`;\r\n}\r\n\r\nfunction BuildMeshVertexCount(geometry: Geometry) {\r\n const count = geometry.getIndices()?.length ? geometry.getTotalIndices() : geometry.getTotalVertices();\r\n\r\n return Array(count / 3)\r\n .fill(3)\r\n .join(\", \");\r\n}\r\n\r\nfunction BuildMeshVertexIndices(geometry: Geometry) {\r\n const indices = geometry.getIndices();\r\n const count = indices?.length ?? geometry.getTotalVertices();\r\n\r\n const array: number[] = [];\r\n if (indices !== null) {\r\n for (let i = 0; i < count; i++) {\r\n array.push(indices[i]);\r\n }\r\n } else {\r\n for (let i = 0; i < count; i++) {\r\n array.push(i);\r\n }\r\n }\r\n\r\n return array.join(\", \");\r\n}\r\n\r\nfunction BuildVector3Array(attribute: FloatArray, options: IUSDZExportOptions, stride = 3, convertToRightHanded = false) {\r\n const array: string[] = [];\r\n\r\n for (let i = 0; i < attribute.length / stride; i++) {\r\n const x = attribute[i * stride] * (convertToRightHanded ? -1 : 1);\r\n const y = attribute[i * stride + 1];\r\n const z = attribute[i * stride + 2];\r\n\r\n array.push(`(${x.toPrecision(options.precision)}, ${y.toPrecision(options.precision)}, ${z.toPrecision(options.precision)})`);\r\n }\r\n\r\n return array.join(\", \");\r\n}\r\n\r\nfunction BuildVector2Array(attribute: FloatArray, options: IUSDZExportOptions) {\r\n const array: string[] = [];\r\n\r\n for (let i = 0; i < attribute.length / 2; i++) {\r\n const x = attribute[i * 2];\r\n const y = attribute[i * 2 + 1];\r\n\r\n array.push(`(${x.toPrecision(options.precision)}, ${(1 - y).toPrecision(options.precision)})`);\r\n }\r\n\r\n return array.join(\", \");\r\n}\r\n\r\nfunction BuildAdditionalAttributes(geometry: Geometry, options: IUSDZExportOptions) {\r\n let string = \"\";\r\n\r\n for (let i = 0; i < 4; i++) {\r\n const id = i > 0 ? i : \"\";\r\n const uvAttribute = geometry.getVerticesData(VertexBuffer.UVKind + (id ? id + 1 : \"\")); // UV names go like \"uv\", \"uv2\", \"uv3\", etc.\r\n\r\n if (uvAttribute) {\r\n string += `\r\n\t\ttexCoord2f[] primvars:st${id} = [${BuildVector2Array(uvAttribute, options)}] (\r\n\t\t\tinterpolation = \"vertex\"\r\n\t\t)`;\r\n }\r\n }\r\n\r\n // vertex colors\r\n\r\n const colorAttribute = geometry.getVerticesData(VertexBuffer.ColorKind);\r\n\r\n if (colorAttribute) {\r\n string += `\r\n\tcolor3f[] primvars:displayColor = [${BuildVector3Array(colorAttribute, options, colorAttribute.length / geometry.getTotalVertices())}] (\r\n\t\tinterpolation = \"vertex\"\r\n\t\t)`;\r\n }\r\n\r\n return string;\r\n}\r\n\r\nfunction BuildMesh(geometry: Geometry, options: IUSDZExportOptions, windingOrder: string, convertToRightHanded: boolean) {\r\n const name = \"Geometry\";\r\n const position = geometry.getVerticesData(VertexBuffer.PositionKind);\r\n const normal = geometry.getVerticesData(VertexBuffer.NormalKind);\r\n\r\n if (!position || !normal) {\r\n return;\r\n }\r\n\r\n return `\r\n\tdef Mesh \"${name}\"\r\n\t{\r\n uniform token orientation = \"${windingOrder}\"\r\n\t\tint[] faceVertexCounts = [${BuildMeshVertexCount(geometry)}]\r\n\t\tint[] faceVertexIndices = [${BuildMeshVertexIndices(geometry)}]\r\n\t\tnormal3f[] normals = [${BuildVector3Array(normal, options, undefined, convertToRightHanded)}] (\r\n\t\t\tinterpolation = \"vertex\"\r\n\t\t)\r\n\t\tpoint3f[] points = [${BuildVector3Array(position, options, undefined, convertToRightHanded)}]\r\n ${BuildAdditionalAttributes(geometry, options)}\r\n\t\tuniform token subdivisionScheme = \"none\"\r\n\t}\r\n`;\r\n}\r\n\r\nfunction BuildMeshObject(geometry: Geometry, options: IUSDZExportOptions, windingOrder: string, convertToRightHanded: boolean) {\r\n const meshObject = BuildMesh(geometry, options, windingOrder, convertToRightHanded);\r\n return `\r\n def \"Geometry\"\r\n {\r\n ${meshObject}\r\n }\r\n `;\r\n}\r\n\r\nfunction BuildUSDFileAsString(dataToInsert: string) {\r\n let output = BuildHeader();\r\n output += dataToInsert;\r\n return fflate.strToU8(output);\r\n}\r\n\r\nfunction BuildMatrix(matrix: Matrix) {\r\n const array = matrix.m as number[];\r\n\r\n return `( ${BuildMatrixRow(array, 0)}, ${BuildMatrixRow(array, 4)}, ${BuildMatrixRow(array, 8)}, ${BuildMatrixRow(array, 12)} )`;\r\n}\r\n\r\nfunction BuildMatrixRow(array: number[], offset: number) {\r\n return `(${array[offset + 0]}, ${array[offset + 1]}, ${array[offset + 2]}, ${array[offset + 3]})`;\r\n}\r\n\r\nfunction BuildXform(mesh: Mesh, matrix: Matrix) {\r\n const name = \"Object_\" + mesh.uniqueId;\r\n const transform = BuildMatrix(matrix);\r\n\r\n return `def Xform \"${name}\" (\r\n\tprepend references = @./geometries/Geometry_${mesh.geometry!.uniqueId}.usda@</Geometry>\r\n\tprepend apiSchemas = [\"MaterialBindingAPI\"]\r\n)\r\n{\r\n\tmatrix4d xformOp:transform = ${transform}\r\n\tuniform token[] xformOpOrder = [\"xformOp:transform\"]\t\r\n\r\n rel material:binding = </Root/Materials/Material_${mesh.material!.uniqueId}>\r\n}\r\n\r\n`;\r\n}\r\n\r\nfunction BuildMaterials(materials: { [key: string]: Material }, textureToExports: { [key: string]: BaseTexture }, options: IUSDZExportOptions) {\r\n const array: string[] = [];\r\n\r\n for (const uuid in materials) {\r\n const material = materials[uuid];\r\n\r\n array.push(BuildMaterial(material, textureToExports, options));\r\n }\r\n\r\n return `\r\n def \"Materials\"\r\n{\r\n${array.join(\"\")}\r\n}\r\n\r\n`;\r\n}\r\n\r\nfunction BuildWrapping(wrapping: number) {\r\n switch (wrapping) {\r\n case Constants.TEXTURE_CLAMP_ADDRESSMODE:\r\n return \"clamp\";\r\n case Constants.TEXTURE_MIRROR_ADDRESSMODE:\r\n return \"mirror\";\r\n case Constants.TEXTURE_WRAP_ADDRESSMODE:\r\n default:\r\n return \"repeat\";\r\n }\r\n}\r\n\r\nfunction BuildColor4(color: Color3) {\r\n return `(${color.r}, ${color.g}, ${color.b}, 1.0)`;\r\n}\r\n\r\nfunction BuildVector2(vector: Vector2) {\r\n return `(${vector.x}, ${vector.y})`;\r\n}\r\n\r\nfunction BuildColor(color: Color3) {\r\n return `(${color.r}, ${color.g}, ${color.b})`;\r\n}\r\n\r\nfunction BuildTexture(\r\n texture: Texture,\r\n material: Material,\r\n mapType: string,\r\n color: Nullable<Color3>,\r\n textureToExports: { [key: string]: BaseTexture },\r\n options: IUSDZExportOptions\r\n) {\r\n const id = texture.getInternalTexture()!.uniqueId + \"_\" + texture.invertY;\r\n\r\n textureToExports[id] = texture;\r\n\r\n const uv = texture.coordinatesIndex > 0 ? \"st\" + texture.coordinatesIndex : \"st\";\r\n const repeat = new Vector2(texture.uScale, texture.vScale);\r\n const offset = new Vector2(texture.uOffset, texture.vOffset);\r\n const rotation = texture.wAng;\r\n\r\n // rotation is around the wrong point. after rotation we need to shift offset again so that we're rotating around the right spot\r\n const xRotationOffset = Math.sin(rotation);\r\n const yRotationOffset = Math.cos(rotation);\r\n\r\n // texture coordinates start in the opposite corner, need to correct\r\n offset.y = 1 - offset.y - repeat.y;\r\n\r\n offset.x += xRotationOffset * repeat.x;\r\n offset.y += (1 - yRotationOffset) * repeat.y;\r\n\r\n return `\r\n def Shader \"PrimvarReader_${mapType}\"\r\n {\r\n uniform token info:id = \"UsdPrimvarReader_float2\"\r\n float2 inputs:fallback = (0.0, 0.0)\r\n token inputs:varname = \"${uv}\"\r\n float2 outputs:result\r\n }\r\n\r\n def Shader \"Transform2d_${mapType}\"\r\n {\r\n uniform token info:id = \"UsdTransform2d\"\r\n token inputs:in.connect = </Root/Materials/Material_${material.uniqueId}/PrimvarReader_${mapType}.outputs:result>\r\n float inputs:rotation = ${(rotation * (180 / Math.PI)).toFixed(options.precision)}\r\n float2 inputs:scale = ${BuildVector2(repeat)}\r\n float2 inputs:translation = ${BuildVector2(offset)}\r\n float2 outputs:result\r\n }\r\n\r\n def Shader \"Texture_${texture.uniqueId}_${mapType}\"\r\n {\r\n uniform token info:id = \"UsdUVTexture\"\r\n asset inputs:file = @textures/Texture_${id}.png@\r\n float2 inputs:st.connect = </Root/Materials/Material_${material.uniqueId}/Transform2d_${mapType}.outputs:result>\r\n ${color ? \"float4 inputs:scale = \" + BuildColor4(color) : \"\"}\r\n token inputs:sourceColorSpace = \"${texture.gammaSpace ? \"sRGB\" : \"raw\"}\"\r\n token inputs:wrapS = \"${BuildWrapping(texture.wrapU)}\"\r\n token inputs:wrapT = \"${BuildWrapping(texture.wrapV)}\"\r\n float outputs:r\r\n float outputs:g\r\n float outputs:b\r\n float3 outputs:rgb\r\n ${material.needAlphaBlending() || material.needAlphaTesting() ? \"float outputs:a\" : \"\"}\r\n }`;\r\n}\r\n\r\nfunction ExtractTextureInformations(material: Material) {\r\n const defaults = {\r\n diffuseMap: null,\r\n diffuse: null,\r\n alphaCutOff: 0,\r\n emissiveMap: null,\r\n emissive: null,\r\n normalMap: null,\r\n roughnessMap: null,\r\n roughnessChannel: \"a\",\r\n roughness: 0,\r\n metalnessMap: null,\r\n metalnessChannel: \"r\",\r\n metalness: 0,\r\n aoMap: null,\r\n aoMapChannel: \"rgb\",\r\n aoMapIntensity: 0,\r\n alphaMap: null,\r\n ior: 1,\r\n clearCoatEnabled: false,\r\n clearCoat: 0,\r\n clearCoatMap: null,\r\n clearCoatRoughness: 0,\r\n clearCoatRoughnessMap: null,\r\n };\r\n\r\n if (material instanceof StandardMaterial) {\r\n return {\r\n ...defaults,\r\n diffuseMap: material.diffuseTexture,\r\n diffuse: material.diffuseColor,\r\n alphaCutOff: material.alphaCutOff,\r\n emissiveMap: material.emissiveTexture,\r\n emissive: material.emissiveColor,\r\n roughness: 1,\r\n alphaMap: material.opacityTexture,\r\n };\r\n }\r\n if (material instanceof PBRBaseMaterial) {\r\n return {\r\n ...defaults,\r\n diffuseMap: material._albedoTexture,\r\n diffuse: material._albedoColor,\r\n alphaCutOff: material._alphaCutOff,\r\n emissiveMap: material._emissiveTexture,\r\n emissive: material._emissiveColor,\r\n normalMap: material._bumpTexture,\r\n roughnessMap: material._metallicTexture,\r\n roughnessChannel: material._useRoughnessFromMetallicTextureAlpha ? \"a\" : \"g\",\r\n roughness: material._roughness ?? 1,\r\n metalnessMap: material._metallicTexture,\r\n metalnessChannel: material._useMetallnessFromMetallicTextureBlue ? \"b\" : \"r\",\r\n metalness: material._metallic ?? 0,\r\n aoMap: material._ambientTexture,\r\n aoMapChannel: material._useAmbientInGrayScale ? \"r\" : \"rgb\",\r\n aoMapIntensity: material._ambientTextureStrength,\r\n alphaMap: material._opacityTexture,\r\n ior: material.subSurface.indexOfRefraction,\r\n clearCoatEnabled: material.clearCoat.isEnabled,\r\n clearCoat: material.clearCoat.intensity,\r\n clearCoatMap: material.clearCoat.texture,\r\n clearCoatRoughness: material.clearCoat.roughness,\r\n clearCoatRoughnessMap: material.clearCoat.useRoughnessFromMainTexture ? material.clearCoat.texture : material.clearCoat.textureRoughness,\r\n };\r\n }\r\n return defaults;\r\n}\r\n\r\nfunction BuildMaterial(material: Material, textureToExports: { [key: string]: BaseTexture }, options: IUSDZExportOptions) {\r\n // https://graphics.pixar.com/usd/docs/UsdPreviewSurface-Proposal.html\r\n\r\n const pad = \"\t\t\t\";\r\n const inputs = [];\r\n const samplers = [];\r\n\r\n const {\r\n diffuseMap,\r\n diffuse,\r\n alphaCutOff,\r\n emissiveMap,\r\n emissive,\r\n normalMap,\r\n roughnessMap,\r\n roughnessChannel,\r\n roughness,\r\n metalnessMap,\r\n metalnessChannel,\r\n metalness,\r\n aoMap,\r\n aoMapChannel,\r\n aoMapIntensity,\r\n alphaMap,\r\n ior,\r\n clearCoatEnabled,\r\n clearCoat,\r\n clearCoatMap,\r\n clearCoatRoughness,\r\n clearCoatRoughnessMap,\r\n } = ExtractTextureInformations(material);\r\n\r\n if (diffuseMap !== null) {\r\n inputs.push(`${pad}color3f inputs:diffuseColor.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${diffuseMap.uniqueId}_diffuse.outputs:rgb>`);\r\n\r\n if (material.needAlphaBlending()) {\r\n inputs.push(`${pad}float inputs:opacity.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${diffuseMap.uniqueId}_diffuse.outputs:a>`);\r\n } else if (material.needAlphaTesting()) {\r\n inputs.push(`${pad}float inputs:opacity.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${diffuseMap.uniqueId}_diffuse.outputs:a>`);\r\n inputs.push(`${pad}float inputs:opacityThreshold = ${alphaCutOff}`);\r\n }\r\n\r\n samplers.push(BuildTexture(diffuseMap as Texture, material, \"diffuse\", diffuse, textureToExports, options));\r\n } else {\r\n inputs.push(`${pad}color3f inputs:diffuseColor = ${BuildColor(diffuse || Color3.White())}`);\r\n }\r\n\r\n if (emissiveMap !== null) {\r\n inputs.push(`${pad}color3f inputs:emissiveColor.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${emissiveMap.uniqueId}_emissive.outputs:rgb>`);\r\n\r\n samplers.push(BuildTexture(emissiveMap as Texture, material, \"emissive\", emissive, textureToExports, options));\r\n } else if (emissive && emissive.toLuminance() > 0) {\r\n inputs.push(`${pad}color3f inputs:emissiveColor = ${BuildColor(emissive)}`);\r\n }\r\n\r\n if (normalMap !== null) {\r\n inputs.push(`${pad}normal3f inputs:normal.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${normalMap.uniqueId}_normal.outputs:rgb>`);\r\n\r\n samplers.push(BuildTexture(normalMap as Texture, material, \"normal\", null, textureToExports, options));\r\n }\r\n\r\n if (aoMap !== null) {\r\n inputs.push(`${pad}float inputs:occlusion.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${aoMap.uniqueId}_occlusion.outputs:${aoMapChannel}>`);\r\n\r\n samplers.push(BuildTexture(aoMap as Texture, material, \"occlusion\", new Color3(aoMapIntensity, aoMapIntensity, aoMapIntensity), textureToExports, options));\r\n }\r\n\r\n if (roughnessMap !== null) {\r\n inputs.push(\r\n `${pad}float inputs:roughness.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${roughnessMap.uniqueId}_roughness.outputs:${roughnessChannel}>`\r\n );\r\n\r\n samplers.push(BuildTexture(roughnessMap as Texture, material, \"roughness\", new Color3(roughness, roughness, roughness), textureToExports, options));\r\n } else {\r\n inputs.push(`${pad}float inputs:roughness = ${roughness}`);\r\n }\r\n\r\n if (metalnessMap !== null) {\r\n inputs.push(`${pad}float inputs:metallic.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${metalnessMap.uniqueId}_metallic.outputs:${metalnessChannel}>`);\r\n\r\n samplers.push(BuildTexture(metalnessMap as Texture, material, \"metallic\", new Color3(metalness, metalness, metalness), textureToExports, options));\r\n } else {\r\n inputs.push(`${pad}float inputs:metallic = ${metalness}`);\r\n }\r\n\r\n if (alphaMap !== null) {\r\n inputs.push(`${pad}float inputs:opacity.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${alphaMap.uniqueId}_opacity.outputs:r>`);\r\n inputs.push(`${pad}float inputs:opacityThreshold = 0.0001`);\r\n\r\n samplers.push(BuildTexture(alphaMap as Texture, material, \"opacity\", null, textureToExports, options));\r\n } else {\r\n inputs.push(`${pad}float inputs:opacity = ${material.alpha}`);\r\n }\r\n\r\n if (clearCoatEnabled) {\r\n if (clearCoatMap !== null) {\r\n inputs.push(`${pad}float inputs:clearcoat.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${clearCoatMap.uniqueId}_clearcoat.outputs:r>`);\r\n samplers.push(BuildTexture(clearCoatMap as Texture, material, \"clearcoat\", new Color3(clearCoat, clearCoat, clearCoat), textureToExports, options));\r\n } else {\r\n inputs.push(`${pad}float inputs:clearcoat = ${clearCoat}`);\r\n }\r\n\r\n if (clearCoatRoughnessMap !== null) {\r\n inputs.push(\r\n `${pad}float inputs:clearcoatRoughness.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${clearCoatRoughnessMap.uniqueId}_clearcoatRoughness.outputs:g>`\r\n );\r\n samplers.push(\r\n BuildTexture(\r\n clearCoatRoughnessMap as Texture,\r\n material,\r\n \"clearcoatRoughness\",\r\n new Color3(clearCoatRoughness, clearCoatRoughness, clearCoatRoughness),\r\n textureToExports,\r\n options\r\n )\r\n );\r\n } else {\r\n inputs.push(`${pad}float inputs:clearcoatRoughness = ${clearCoatRoughness}`);\r\n }\r\n }\r\n\r\n inputs.push(`${pad}float inputs:ior = ${ior}`);\r\n\r\n return `\r\n\tdef Material \"Material_${material.uniqueId}\"\r\n\t{\r\n\t\tdef Shader \"PreviewSurface\"\r\n\t\t{\r\n\t\t\tuniform token info:id = \"UsdPreviewSurface\"\r\n${inputs.join(\"\\n\")}\r\n\t\t\tint inputs:useSpecularWorkflow = 0\r\n\t\t\ttoken outputs:surface\r\n\t\t}\r\n\r\n\t\ttoken outputs:surface.connect = </Root/Materials/Material_${material.uniqueId}/PreviewSurface.outputs:surface>\r\n\r\n${samplers.join(\"\\n\")}\r\n\r\n\t}\r\n`;\r\n}\r\n\r\nfunction BuildCamera(camera: Camera, options: IUSDZExportOptions) {\r\n const name = \"Camera_\" + camera.uniqueId;\r\n const matrix = Matrix.RotationY(Math.PI).multiply(camera.getWorldMatrix()); // work towards positive z\r\n\r\n const transform = BuildMatrix(matrix);\r\n\r\n if (camera.mode === Constants.ORTHOGRAPHIC_CAMERA) {\r\n return `def Camera \"${name}\"\r\n\t\t{\r\n\t\t\tmatrix4d xformOp:transform = ${transform}\r\n\t\t\tuniform token[] xformOpOrder = [\"xformOp:transform\"]\r\n\r\n\t\t\tfloat2 clippingRange = (${camera.minZ.toPrecision(options.precision)}, ${camera.maxZ.toPrecision(options.precision)})\r\n\t\t\tfloat horizontalAperture = ${((Math.abs(camera.orthoLeft || 1) + Math.abs(camera.orthoRight || 1)) * 10).toPrecision(options.precision)}\r\n\t\t\tfloat verticalAperture = ${((Math.abs(camera.orthoTop || 1) + Math.abs(camera.orthoBottom || 1)) * 10).toPrecision(options.precision)}\r\n\t\t\ttoken projection = \"orthographic\"\r\n\t\t}\r\n\t\r\n\t`;\r\n } else {\r\n const aspect = camera.getEngine().getAspectRatio(camera);\r\n const sensorwidth = options.cameraSensorWidth || 35;\r\n\r\n return `def Camera \"${name}\"\r\n\t\t{\r\n\t\t\tmatrix4d xformOp:transform = ${transform}\r\n\t\t\tuniform token[] xformOpOrder = [\"xformOp:transform\"]\r\n\r\n\t\t\tfloat2 clippingRange = (${camera.minZ.toPrecision(options.precision)}, ${camera.maxZ.toPrecision(options.precision)})\r\n\t\t\tfloat focalLength = ${(sensorwidth / (2 * Math.tan(camera.fov * 0.5))).toPrecision(options.precision)}\r\n token projection = \"perspective\"\r\n\t\t\tfloat horizontalAperture = ${(sensorwidth * aspect).toPrecision(options.precision)}\r\n\t\t\tfloat verticalAperture = ${(sensorwidth / aspect).toPrecision(options.precision)} \r\n\t\t}\r\n\t\r\n\t`;\r\n }\r\n}\r\n\r\nfunction ExtractMeshInformations(mesh: Mesh) {\r\n mesh.computeWorldMatrix(true);\r\n const matrix = mesh.getWorldMatrix().clone();\r\n const sceneIsRightHanded = mesh.getScene().useRightHandedSystem;\r\n let sideOrientation = mesh.material?._getEffectiveOrientation(mesh) ?? mesh.sideOrientation;\r\n let convertToRightHanded = !sceneIsRightHanded;\r\n\r\n // Search for a root conversion node from the glTF loader in the mesh's ancestors.\r\n let current = mesh.parent;\r\n while (current) {\r\n if (IsNoopNode(current, sceneIsRightHanded) && current.parent === null) {\r\n if (!sceneIsRightHanded) {\r\n // If it's a RH->LH node, cancel out its inversion effect on the mesh's matrix and winding order.\r\n matrix.multiplyToRef(current.getWorldMatrix().invert(), matrix);\r\n sideOrientation = sideOrientation === Material.ClockWiseSideOrientation ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;\r\n }\r\n convertToRightHanded = false;\r\n break;\r\n }\r\n current = current.parent;\r\n }\r\n\r\n if (matrix.determinant() < 0) {\r\n // RealityKit doesn't seem to automatically flip faces of a mesh with negative scale, like other engines do (including us).\r\n Tools.Warn(`Mesh ${mesh.name} has a negative scale, which may look incorrect in destinations like QuickLook.`);\r\n }\r\n\r\n return {\r\n matrix,\r\n windingOrder: sideOrientation === Material.ClockWiseSideOrientation ? \"leftHanded\" : \"rightHanded\",\r\n convertToRightHanded,\r\n };\r\n}\r\n\r\n/**\r\n *\r\n * @param scene scene to export\r\n * @param options options to configure the export\r\n * @param meshPredicate predicate to filter the meshes to export\r\n * @returns a uint8 array containing the USDZ file\r\n * @see [Simple sphere](https://playground.babylonjs.com/#H2G5XW#6)\r\n * @see [Red sphere](https://playground.babylonjs.com/#H2G5XW#7)\r\n * @see [Boombox](https://playground.babylonjs.com/#5N3RWK#5)\r\n */\r\nexport async function USDZExportAsync(scene: Scene, options: Partial<IUSDZExportOptions>, meshPredicate?: (m: Mesh) => boolean): Promise<Uint8Array> {\r\n const localOptions = {\r\n fflateUrl: \"https://unpkg.com/fflate@0.8.2\",\r\n includeAnchoringProperties: true,\r\n anchoringType: \"plane\",\r\n planeAnchoringAlignment: \"horizontal\",\r\n modelFileName: \"model.usda\",\r\n precision: 5,\r\n exportCamera: false,\r\n cameraSensorWidth: 35,\r\n ...options,\r\n };\r\n\r\n // Get the fflate library\r\n if (typeof fflate === \"undefined\") {\r\n await Tools.LoadScriptAsync(localOptions.fflateUrl);\r\n }\r\n\r\n // Start the export\r\n const files: { [key: string]: any } = {};\r\n\r\n // model file should be first in USDZ archive so we init it here\r\n files[localOptions.modelFileName] = null;\r\n\r\n let output = BuildHeader();\r\n output += BuildRootAndSceneStart(localOptions);\r\n\r\n const materialToExports: { [key: string]: Material } = {};\r\n\r\n // Meshes\r\n for (const abstractMesh of scene.meshes) {\r\n if (abstractMesh.getTotalVertices() === 0) {\r\n continue;\r\n }\r\n const mesh = abstractMesh as Mesh;\r\n const geometry = mesh.geometry;\r\n const material = mesh.material;\r\n\r\n if (!material || !geometry || (meshPredicate && !meshPredicate(mesh))) {\r\n continue;\r\n }\r\n\r\n const supportedMaterials = [\"StandardMaterial\", \"PBRMaterial\", \"PBRMetallicRoughnessMaterial\"];\r\n\r\n if (supportedMaterials.indexOf(material.getClassName()) !== -1) {\r\n const geometryFileName = \"geometries/Geometry_\" + geometry.uniqueId + \".usda\";\r\n const { matrix, windingOrder, convertToRightHanded } = ExtractMeshInformations(mesh);\r\n\r\n if (!(geometryFileName in files)) {\r\n const meshObject = BuildMeshObject(geometry, localOptions, windingOrder, convertToRightHanded);\r\n files[geometryFileName] = BuildUSDFileAsString(meshObject);\r\n }\r\n\r\n if (!(material.uniqueId in materialToExports)) {\r\n materialToExports[material.uniqueId] = material;\r\n }\r\n\r\n output += BuildXform(mesh, matrix);\r\n } else {\r\n Tools.Warn(\"USDZExportAsync does not support this material type: \" + material.getClassName());\r\n }\r\n }\r\n\r\n // Camera\r\n if (scene.activeCamera && localOptions.exportCamera) {\r\n output += BuildCamera(scene.activeCamera, localOptions);\r\n }\r\n\r\n // Close scene\r\n output += BuildSceneEnd();\r\n\r\n // Materials\r\n const textureToExports: { [key: string]: BaseTexture } = {};\r\n output += BuildMaterials(materialToExports, textureToExports, localOptions);\r\n\r\n // Close root\r\n output += BuildRootEnd();\r\n\r\n // Compress\r\n files[localOptions.modelFileName] = fflate.strToU8(output);\r\n\r\n // Textures\r\n for (const id in textureToExports) {\r\n const texture = textureToExports[id];\r\n\r\n const size = texture.getSize();\r\n // eslint-disable-next-line no-await-in-loop\r\n const textureData = await GetTextureDataAsync(texture);\r\n\r\n // eslint-disable-next-line no-await-in-loop\r\n const fileContent = await DumpTools.DumpDataAsync(size.width, size.height, textureData, \"image/png\", undefined, false, true);\r\n\r\n files[`textures/Texture_${id}.png`] = new Uint8Array(fileContent as ArrayBuffer).slice(); // This is to avoid getting a link and not a copy\r\n }\r\n\r\n // 64 byte alignment\r\n // https://github.com/101arrowz/fflate/issues/39#issuecomment-777263109\r\n\r\n let offset = 0;\r\n\r\n for (const filename in files) {\r\n const file = files[filename];\r\n if (!file) {\r\n continue;\r\n }\r\n const headerSize = 34 + filename.length;\r\n\r\n offset += headerSize;\r\n\r\n const offsetMod64 = offset & 63;\r\n\r\n if (offsetMod64 !== 4) {\r\n const padLength = 64 - offsetMod64;\r\n const padding = new Uint8Array(padLength);\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n files[filename] = [file, { extra: { 12345: padding } }];\r\n }\r\n\r\n offset = file.length;\r\n }\r\n\r\n return fflate.zipSync(files, { level: 0 });\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"usdzExporter.js","sourceRoot":"","sources":["../../../../dev/serializers/src/USDZ/usdzExporter.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport { type Camera } from \"core/Cameras/camera\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Material } from \"core/Materials/material\";\r\nimport { PBRBaseMaterial } from \"core/Materials/PBR/pbrBaseMaterial\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { type Texture } from \"core/Materials/Textures/texture\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { Matrix, Vector2 } from \"core/Maths/math.vector\";\r\nimport { type Geometry } from \"core/Meshes/geometry\";\r\nimport { type Mesh } from \"core/Meshes/mesh\";\r\nimport { DumpTools } from \"core/Misc/dumpTools\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { type Scene } from \"core/scene\";\r\nimport { type FloatArray, type Nullable } from \"core/types\";\r\nimport { IsNoopNode } from \"../exportUtils\";\r\nimport { GetTextureDataAsync } from \"core/Misc/textureTools\";\r\n\r\n/**\r\n * Ported from https://github.com/mrdoob/three.js/blob/master/examples/jsm/exporters/USDZExporter.js\r\n * Thanks a lot to the three.js team for their amazing work!\r\n */\r\n\r\n// FFlate access\r\ndeclare const fflate: any;\r\n\r\n/**\r\n * Options for the USDZ export\r\n */\r\nexport interface IUSDZExportOptions {\r\n /**\r\n * URL to load the fflate library from\r\n */\r\n fflateUrl?: string;\r\n /**\r\n * Include anchoring properties in the USDZ file\r\n */\r\n includeAnchoringProperties?: boolean;\r\n /**\r\n * Anchoring type (plane by default)\r\n */\r\n anchoringType?: string;\r\n /**\r\n * Plane anchoring alignment (horizontal by default)\r\n */\r\n planeAnchoringAlignment?: string;\r\n /**\r\n * Model file name (model.usda by default)\r\n */\r\n modelFileName?: string;\r\n /**\r\n * Precision to use for number (5 by default)\r\n */\r\n precision?: number;\r\n /**\r\n * Export the camera (false by default)\r\n */\r\n exportCamera?: boolean;\r\n /**\r\n * Camera sensor width (35 by default)\r\n */\r\n cameraSensorWidth?: number;\r\n}\r\n\r\nfunction BuildHeader() {\r\n return `#usda 1.0\r\n (\r\n customLayerData = {\r\n string creator = \"Babylon.js USDZExportAsync\"\r\n }\r\n defaultPrim = \"Root\"\r\n metersPerUnit = 1\r\n upAxis = \"Y\"\r\n )`;\r\n}\r\n\r\nfunction BuildRootAndSceneStart(options: IUSDZExportOptions) {\r\n const alignment =\r\n options.includeAnchoringProperties === true\r\n ? `\r\n\t\ttoken preliminary:anchoring:type = \"${options.anchoringType}\"\r\n\t\ttoken preliminary:planeAnchoring:alignment = \"${options.planeAnchoringAlignment}\"`\r\n : \"\";\r\n return `def Xform \"Root\"\r\n {\r\n def Scope \"Scenes\" (\r\n kind = \"sceneLibrary\"\r\n )\r\n {\r\n def Xform \"Scene\" (\r\n customData = {\r\n bool preliminary_collidesWithEnvironment = 0\r\n string sceneName = \"Scene\"\r\n }\r\n sceneName = \"Scene\"\r\n )\r\n {${alignment}\r\n `;\r\n}\r\n\r\nfunction BuildSceneEnd() {\r\n return `\r\n }\r\n }`;\r\n}\r\n\r\nfunction BuildRootEnd() {\r\n return `\r\n }`;\r\n}\r\n\r\nfunction BuildMeshVertexCount(geometry: Geometry) {\r\n const count = geometry.getIndices()?.length ? geometry.getTotalIndices() : geometry.getTotalVertices();\r\n\r\n return Array(count / 3)\r\n .fill(3)\r\n .join(\", \");\r\n}\r\n\r\nfunction BuildMeshVertexIndices(geometry: Geometry) {\r\n const indices = geometry.getIndices();\r\n const count = indices?.length ?? geometry.getTotalVertices();\r\n\r\n const array: number[] = [];\r\n if (indices !== null) {\r\n for (let i = 0; i < count; i++) {\r\n array.push(indices[i]);\r\n }\r\n } else {\r\n for (let i = 0; i < count; i++) {\r\n array.push(i);\r\n }\r\n }\r\n\r\n return array.join(\", \");\r\n}\r\n\r\nfunction BuildVector3Array(attribute: FloatArray, options: IUSDZExportOptions, stride = 3, convertToRightHanded = false) {\r\n const array: string[] = [];\r\n\r\n for (let i = 0; i < attribute.length / stride; i++) {\r\n const x = attribute[i * stride] * (convertToRightHanded ? -1 : 1);\r\n const y = attribute[i * stride + 1];\r\n const z = attribute[i * stride + 2];\r\n\r\n array.push(`(${x.toPrecision(options.precision)}, ${y.toPrecision(options.precision)}, ${z.toPrecision(options.precision)})`);\r\n }\r\n\r\n return array.join(\", \");\r\n}\r\n\r\nfunction BuildVector2Array(attribute: FloatArray, options: IUSDZExportOptions) {\r\n const array: string[] = [];\r\n\r\n for (let i = 0; i < attribute.length / 2; i++) {\r\n const x = attribute[i * 2];\r\n const y = attribute[i * 2 + 1];\r\n\r\n array.push(`(${x.toPrecision(options.precision)}, ${(1 - y).toPrecision(options.precision)})`);\r\n }\r\n\r\n return array.join(\", \");\r\n}\r\n\r\nfunction BuildAdditionalAttributes(geometry: Geometry, options: IUSDZExportOptions) {\r\n let string = \"\";\r\n\r\n for (let i = 0; i < 4; i++) {\r\n const id = i > 0 ? i : \"\";\r\n const uvAttribute = geometry.getVerticesData(VertexBuffer.UVKind + (id ? id + 1 : \"\")); // UV names go like \"uv\", \"uv2\", \"uv3\", etc.\r\n\r\n if (uvAttribute) {\r\n string += `\r\n\t\ttexCoord2f[] primvars:st${id} = [${BuildVector2Array(uvAttribute, options)}] (\r\n\t\t\tinterpolation = \"vertex\"\r\n\t\t)`;\r\n }\r\n }\r\n\r\n // vertex colors\r\n\r\n const colorAttribute = geometry.getVerticesData(VertexBuffer.ColorKind);\r\n\r\n if (colorAttribute) {\r\n string += `\r\n\tcolor3f[] primvars:displayColor = [${BuildVector3Array(colorAttribute, options, colorAttribute.length / geometry.getTotalVertices())}] (\r\n\t\tinterpolation = \"vertex\"\r\n\t\t)`;\r\n }\r\n\r\n return string;\r\n}\r\n\r\nfunction BuildMesh(geometry: Geometry, options: IUSDZExportOptions, windingOrder: string, convertToRightHanded: boolean) {\r\n const name = \"Geometry\";\r\n const position = geometry.getVerticesData(VertexBuffer.PositionKind);\r\n const normal = geometry.getVerticesData(VertexBuffer.NormalKind);\r\n\r\n if (!position || !normal) {\r\n return;\r\n }\r\n\r\n return `\r\n\tdef Mesh \"${name}\"\r\n\t{\r\n uniform token orientation = \"${windingOrder}\"\r\n\t\tint[] faceVertexCounts = [${BuildMeshVertexCount(geometry)}]\r\n\t\tint[] faceVertexIndices = [${BuildMeshVertexIndices(geometry)}]\r\n\t\tnormal3f[] normals = [${BuildVector3Array(normal, options, undefined, convertToRightHanded)}] (\r\n\t\t\tinterpolation = \"vertex\"\r\n\t\t)\r\n\t\tpoint3f[] points = [${BuildVector3Array(position, options, undefined, convertToRightHanded)}]\r\n ${BuildAdditionalAttributes(geometry, options)}\r\n\t\tuniform token subdivisionScheme = \"none\"\r\n\t}\r\n`;\r\n}\r\n\r\nfunction BuildMeshObject(geometry: Geometry, options: IUSDZExportOptions, windingOrder: string, convertToRightHanded: boolean) {\r\n const meshObject = BuildMesh(geometry, options, windingOrder, convertToRightHanded);\r\n return `\r\n def \"Geometry\"\r\n {\r\n ${meshObject}\r\n }\r\n `;\r\n}\r\n\r\nfunction BuildUSDFileAsString(dataToInsert: string) {\r\n let output = BuildHeader();\r\n output += dataToInsert;\r\n return fflate.strToU8(output);\r\n}\r\n\r\nfunction BuildMatrix(matrix: Matrix) {\r\n const array = matrix.m as number[];\r\n\r\n return `( ${BuildMatrixRow(array, 0)}, ${BuildMatrixRow(array, 4)}, ${BuildMatrixRow(array, 8)}, ${BuildMatrixRow(array, 12)} )`;\r\n}\r\n\r\nfunction BuildMatrixRow(array: number[], offset: number) {\r\n return `(${array[offset + 0]}, ${array[offset + 1]}, ${array[offset + 2]}, ${array[offset + 3]})`;\r\n}\r\n\r\nfunction BuildXform(mesh: Mesh, matrix: Matrix) {\r\n const name = \"Object_\" + mesh.uniqueId;\r\n const transform = BuildMatrix(matrix);\r\n\r\n return `def Xform \"${name}\" (\r\n\tprepend references = @./geometries/Geometry_${mesh.geometry!.uniqueId}.usda@</Geometry>\r\n\tprepend apiSchemas = [\"MaterialBindingAPI\"]\r\n)\r\n{\r\n\tmatrix4d xformOp:transform = ${transform}\r\n\tuniform token[] xformOpOrder = [\"xformOp:transform\"]\t\r\n\r\n rel material:binding = </Root/Materials/Material_${mesh.material!.uniqueId}>\r\n}\r\n\r\n`;\r\n}\r\n\r\nfunction BuildMaterials(materials: { [key: string]: Material }, textureToExports: { [key: string]: BaseTexture }, options: IUSDZExportOptions) {\r\n const array: string[] = [];\r\n\r\n for (const uuid in materials) {\r\n const material = materials[uuid];\r\n\r\n array.push(BuildMaterial(material, textureToExports, options));\r\n }\r\n\r\n return `\r\n def \"Materials\"\r\n{\r\n${array.join(\"\")}\r\n}\r\n\r\n`;\r\n}\r\n\r\nfunction BuildWrapping(wrapping: number) {\r\n switch (wrapping) {\r\n case Constants.TEXTURE_CLAMP_ADDRESSMODE:\r\n return \"clamp\";\r\n case Constants.TEXTURE_MIRROR_ADDRESSMODE:\r\n return \"mirror\";\r\n case Constants.TEXTURE_WRAP_ADDRESSMODE:\r\n default:\r\n return \"repeat\";\r\n }\r\n}\r\n\r\nfunction BuildColor4(color: Color3) {\r\n return `(${color.r}, ${color.g}, ${color.b}, 1.0)`;\r\n}\r\n\r\nfunction BuildVector2(vector: Vector2) {\r\n return `(${vector.x}, ${vector.y})`;\r\n}\r\n\r\nfunction BuildColor(color: Color3) {\r\n return `(${color.r}, ${color.g}, ${color.b})`;\r\n}\r\n\r\nfunction BuildTexture(\r\n texture: Texture,\r\n material: Material,\r\n mapType: string,\r\n color: Nullable<Color3>,\r\n textureToExports: { [key: string]: BaseTexture },\r\n options: IUSDZExportOptions\r\n) {\r\n const id = texture.getInternalTexture()!.uniqueId + \"_\" + texture.invertY;\r\n\r\n textureToExports[id] = texture;\r\n\r\n const uv = texture.coordinatesIndex > 0 ? \"st\" + texture.coordinatesIndex : \"st\";\r\n const repeat = new Vector2(texture.uScale, texture.vScale);\r\n const offset = new Vector2(texture.uOffset, texture.vOffset);\r\n const rotation = texture.wAng;\r\n\r\n // rotation is around the wrong point. after rotation we need to shift offset again so that we're rotating around the right spot\r\n const xRotationOffset = Math.sin(rotation);\r\n const yRotationOffset = Math.cos(rotation);\r\n\r\n // texture coordinates start in the opposite corner, need to correct\r\n offset.y = 1 - offset.y - repeat.y;\r\n\r\n offset.x += xRotationOffset * repeat.x;\r\n offset.y += (1 - yRotationOffset) * repeat.y;\r\n\r\n return `\r\n def Shader \"PrimvarReader_${mapType}\"\r\n {\r\n uniform token info:id = \"UsdPrimvarReader_float2\"\r\n float2 inputs:fallback = (0.0, 0.0)\r\n token inputs:varname = \"${uv}\"\r\n float2 outputs:result\r\n }\r\n\r\n def Shader \"Transform2d_${mapType}\"\r\n {\r\n uniform token info:id = \"UsdTransform2d\"\r\n token inputs:in.connect = </Root/Materials/Material_${material.uniqueId}/PrimvarReader_${mapType}.outputs:result>\r\n float inputs:rotation = ${(rotation * (180 / Math.PI)).toFixed(options.precision)}\r\n float2 inputs:scale = ${BuildVector2(repeat)}\r\n float2 inputs:translation = ${BuildVector2(offset)}\r\n float2 outputs:result\r\n }\r\n\r\n def Shader \"Texture_${texture.uniqueId}_${mapType}\"\r\n {\r\n uniform token info:id = \"UsdUVTexture\"\r\n asset inputs:file = @textures/Texture_${id}.png@\r\n float2 inputs:st.connect = </Root/Materials/Material_${material.uniqueId}/Transform2d_${mapType}.outputs:result>\r\n ${color ? \"float4 inputs:scale = \" + BuildColor4(color) : \"\"}\r\n token inputs:sourceColorSpace = \"${texture.gammaSpace ? \"sRGB\" : \"raw\"}\"\r\n token inputs:wrapS = \"${BuildWrapping(texture.wrapU)}\"\r\n token inputs:wrapT = \"${BuildWrapping(texture.wrapV)}\"\r\n float outputs:r\r\n float outputs:g\r\n float outputs:b\r\n float3 outputs:rgb\r\n ${material.needAlphaBlending() || material.needAlphaTesting() ? \"float outputs:a\" : \"\"}\r\n }`;\r\n}\r\n\r\nfunction ExtractTextureInformations(material: Material) {\r\n const defaults = {\r\n diffuseMap: null,\r\n diffuse: null,\r\n alphaCutOff: 0,\r\n emissiveMap: null,\r\n emissive: null,\r\n normalMap: null,\r\n roughnessMap: null,\r\n roughnessChannel: \"a\",\r\n roughness: 0,\r\n metalnessMap: null,\r\n metalnessChannel: \"r\",\r\n metalness: 0,\r\n aoMap: null,\r\n aoMapChannel: \"rgb\",\r\n aoMapIntensity: 0,\r\n alphaMap: null,\r\n ior: 1,\r\n clearCoatEnabled: false,\r\n clearCoat: 0,\r\n clearCoatMap: null,\r\n clearCoatRoughness: 0,\r\n clearCoatRoughnessMap: null,\r\n };\r\n\r\n if (material instanceof StandardMaterial) {\r\n return {\r\n ...defaults,\r\n diffuseMap: material.diffuseTexture,\r\n diffuse: material.diffuseColor,\r\n alphaCutOff: material.alphaCutOff,\r\n emissiveMap: material.emissiveTexture,\r\n emissive: material.emissiveColor,\r\n roughness: 1,\r\n alphaMap: material.opacityTexture,\r\n };\r\n }\r\n if (material instanceof PBRBaseMaterial) {\r\n return {\r\n ...defaults,\r\n diffuseMap: material._albedoTexture,\r\n diffuse: material._albedoColor,\r\n alphaCutOff: material._alphaCutOff,\r\n emissiveMap: material._emissiveTexture,\r\n emissive: material._emissiveColor,\r\n normalMap: material._bumpTexture,\r\n roughnessMap: material._metallicTexture,\r\n roughnessChannel: material._useRoughnessFromMetallicTextureAlpha ? \"a\" : \"g\",\r\n roughness: material._roughness ?? 1,\r\n metalnessMap: material._metallicTexture,\r\n metalnessChannel: material._useMetallnessFromMetallicTextureBlue ? \"b\" : \"r\",\r\n metalness: material._metallic ?? 0,\r\n aoMap: material._ambientTexture,\r\n aoMapChannel: material._useAmbientInGrayScale ? \"r\" : \"rgb\",\r\n aoMapIntensity: material._ambientTextureStrength,\r\n alphaMap: material._opacityTexture,\r\n ior: material.subSurface.indexOfRefraction,\r\n clearCoatEnabled: material.clearCoat.isEnabled,\r\n clearCoat: material.clearCoat.intensity,\r\n clearCoatMap: material.clearCoat.texture,\r\n clearCoatRoughness: material.clearCoat.roughness,\r\n clearCoatRoughnessMap: material.clearCoat.useRoughnessFromMainTexture ? material.clearCoat.texture : material.clearCoat.textureRoughness,\r\n };\r\n }\r\n return defaults;\r\n}\r\n\r\nfunction BuildMaterial(material: Material, textureToExports: { [key: string]: BaseTexture }, options: IUSDZExportOptions) {\r\n // https://graphics.pixar.com/usd/docs/UsdPreviewSurface-Proposal.html\r\n\r\n const pad = \"\t\t\t\";\r\n const inputs = [];\r\n const samplers = [];\r\n\r\n const {\r\n diffuseMap,\r\n diffuse,\r\n alphaCutOff,\r\n emissiveMap,\r\n emissive,\r\n normalMap,\r\n roughnessMap,\r\n roughnessChannel,\r\n roughness,\r\n metalnessMap,\r\n metalnessChannel,\r\n metalness,\r\n aoMap,\r\n aoMapChannel,\r\n aoMapIntensity,\r\n alphaMap,\r\n ior,\r\n clearCoatEnabled,\r\n clearCoat,\r\n clearCoatMap,\r\n clearCoatRoughness,\r\n clearCoatRoughnessMap,\r\n } = ExtractTextureInformations(material);\r\n\r\n if (diffuseMap !== null) {\r\n inputs.push(`${pad}color3f inputs:diffuseColor.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${diffuseMap.uniqueId}_diffuse.outputs:rgb>`);\r\n\r\n if (material.needAlphaBlending()) {\r\n inputs.push(`${pad}float inputs:opacity.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${diffuseMap.uniqueId}_diffuse.outputs:a>`);\r\n } else if (material.needAlphaTesting()) {\r\n inputs.push(`${pad}float inputs:opacity.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${diffuseMap.uniqueId}_diffuse.outputs:a>`);\r\n inputs.push(`${pad}float inputs:opacityThreshold = ${alphaCutOff}`);\r\n }\r\n\r\n samplers.push(BuildTexture(diffuseMap as Texture, material, \"diffuse\", diffuse, textureToExports, options));\r\n } else {\r\n inputs.push(`${pad}color3f inputs:diffuseColor = ${BuildColor(diffuse || Color3.White())}`);\r\n }\r\n\r\n if (emissiveMap !== null) {\r\n inputs.push(`${pad}color3f inputs:emissiveColor.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${emissiveMap.uniqueId}_emissive.outputs:rgb>`);\r\n\r\n samplers.push(BuildTexture(emissiveMap as Texture, material, \"emissive\", emissive, textureToExports, options));\r\n } else if (emissive && emissive.toLuminance() > 0) {\r\n inputs.push(`${pad}color3f inputs:emissiveColor = ${BuildColor(emissive)}`);\r\n }\r\n\r\n if (normalMap !== null) {\r\n inputs.push(`${pad}normal3f inputs:normal.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${normalMap.uniqueId}_normal.outputs:rgb>`);\r\n\r\n samplers.push(BuildTexture(normalMap as Texture, material, \"normal\", null, textureToExports, options));\r\n }\r\n\r\n if (aoMap !== null) {\r\n inputs.push(`${pad}float inputs:occlusion.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${aoMap.uniqueId}_occlusion.outputs:${aoMapChannel}>`);\r\n\r\n samplers.push(BuildTexture(aoMap as Texture, material, \"occlusion\", new Color3(aoMapIntensity, aoMapIntensity, aoMapIntensity), textureToExports, options));\r\n }\r\n\r\n if (roughnessMap !== null) {\r\n inputs.push(\r\n `${pad}float inputs:roughness.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${roughnessMap.uniqueId}_roughness.outputs:${roughnessChannel}>`\r\n );\r\n\r\n samplers.push(BuildTexture(roughnessMap as Texture, material, \"roughness\", new Color3(roughness, roughness, roughness), textureToExports, options));\r\n } else {\r\n inputs.push(`${pad}float inputs:roughness = ${roughness}`);\r\n }\r\n\r\n if (metalnessMap !== null) {\r\n inputs.push(`${pad}float inputs:metallic.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${metalnessMap.uniqueId}_metallic.outputs:${metalnessChannel}>`);\r\n\r\n samplers.push(BuildTexture(metalnessMap as Texture, material, \"metallic\", new Color3(metalness, metalness, metalness), textureToExports, options));\r\n } else {\r\n inputs.push(`${pad}float inputs:metallic = ${metalness}`);\r\n }\r\n\r\n if (alphaMap !== null) {\r\n inputs.push(`${pad}float inputs:opacity.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${alphaMap.uniqueId}_opacity.outputs:r>`);\r\n inputs.push(`${pad}float inputs:opacityThreshold = 0.0001`);\r\n\r\n samplers.push(BuildTexture(alphaMap as Texture, material, \"opacity\", null, textureToExports, options));\r\n } else {\r\n inputs.push(`${pad}float inputs:opacity = ${material.alpha}`);\r\n }\r\n\r\n if (clearCoatEnabled) {\r\n if (clearCoatMap !== null) {\r\n inputs.push(`${pad}float inputs:clearcoat.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${clearCoatMap.uniqueId}_clearcoat.outputs:r>`);\r\n samplers.push(BuildTexture(clearCoatMap as Texture, material, \"clearcoat\", new Color3(clearCoat, clearCoat, clearCoat), textureToExports, options));\r\n } else {\r\n inputs.push(`${pad}float inputs:clearcoat = ${clearCoat}`);\r\n }\r\n\r\n if (clearCoatRoughnessMap !== null) {\r\n inputs.push(\r\n `${pad}float inputs:clearcoatRoughness.connect = </Root/Materials/Material_${material.uniqueId}/Texture_${clearCoatRoughnessMap.uniqueId}_clearcoatRoughness.outputs:g>`\r\n );\r\n samplers.push(\r\n BuildTexture(\r\n clearCoatRoughnessMap as Texture,\r\n material,\r\n \"clearcoatRoughness\",\r\n new Color3(clearCoatRoughness, clearCoatRoughness, clearCoatRoughness),\r\n textureToExports,\r\n options\r\n )\r\n );\r\n } else {\r\n inputs.push(`${pad}float inputs:clearcoatRoughness = ${clearCoatRoughness}`);\r\n }\r\n }\r\n\r\n inputs.push(`${pad}float inputs:ior = ${ior}`);\r\n\r\n return `\r\n\tdef Material \"Material_${material.uniqueId}\"\r\n\t{\r\n\t\tdef Shader \"PreviewSurface\"\r\n\t\t{\r\n\t\t\tuniform token info:id = \"UsdPreviewSurface\"\r\n${inputs.join(\"\\n\")}\r\n\t\t\tint inputs:useSpecularWorkflow = 0\r\n\t\t\ttoken outputs:surface\r\n\t\t}\r\n\r\n\t\ttoken outputs:surface.connect = </Root/Materials/Material_${material.uniqueId}/PreviewSurface.outputs:surface>\r\n\r\n${samplers.join(\"\\n\")}\r\n\r\n\t}\r\n`;\r\n}\r\n\r\nfunction BuildCamera(camera: Camera, options: IUSDZExportOptions) {\r\n const name = \"Camera_\" + camera.uniqueId;\r\n const matrix = Matrix.RotationY(Math.PI).multiply(camera.getWorldMatrix()); // work towards positive z\r\n\r\n const transform = BuildMatrix(matrix);\r\n\r\n if (camera.mode === Constants.ORTHOGRAPHIC_CAMERA) {\r\n return `def Camera \"${name}\"\r\n\t\t{\r\n\t\t\tmatrix4d xformOp:transform = ${transform}\r\n\t\t\tuniform token[] xformOpOrder = [\"xformOp:transform\"]\r\n\r\n\t\t\tfloat2 clippingRange = (${camera.minZ.toPrecision(options.precision)}, ${camera.maxZ.toPrecision(options.precision)})\r\n\t\t\tfloat horizontalAperture = ${((Math.abs(camera.orthoLeft || 1) + Math.abs(camera.orthoRight || 1)) * 10).toPrecision(options.precision)}\r\n\t\t\tfloat verticalAperture = ${((Math.abs(camera.orthoTop || 1) + Math.abs(camera.orthoBottom || 1)) * 10).toPrecision(options.precision)}\r\n\t\t\ttoken projection = \"orthographic\"\r\n\t\t}\r\n\t\r\n\t`;\r\n } else {\r\n const aspect = camera.getEngine().getAspectRatio(camera);\r\n const sensorwidth = options.cameraSensorWidth || 35;\r\n\r\n return `def Camera \"${name}\"\r\n\t\t{\r\n\t\t\tmatrix4d xformOp:transform = ${transform}\r\n\t\t\tuniform token[] xformOpOrder = [\"xformOp:transform\"]\r\n\r\n\t\t\tfloat2 clippingRange = (${camera.minZ.toPrecision(options.precision)}, ${camera.maxZ.toPrecision(options.precision)})\r\n\t\t\tfloat focalLength = ${(sensorwidth / (2 * Math.tan(camera.fov * 0.5))).toPrecision(options.precision)}\r\n token projection = \"perspective\"\r\n\t\t\tfloat horizontalAperture = ${(sensorwidth * aspect).toPrecision(options.precision)}\r\n\t\t\tfloat verticalAperture = ${(sensorwidth / aspect).toPrecision(options.precision)} \r\n\t\t}\r\n\t\r\n\t`;\r\n }\r\n}\r\n\r\nfunction ExtractMeshInformations(mesh: Mesh) {\r\n mesh.computeWorldMatrix(true);\r\n const matrix = mesh.getWorldMatrix().clone();\r\n const sceneIsRightHanded = mesh.getScene().useRightHandedSystem;\r\n let sideOrientation = mesh.material?._getEffectiveOrientation(mesh) ?? mesh.sideOrientation;\r\n let convertToRightHanded = !sceneIsRightHanded;\r\n\r\n // Search for a root conversion node from the glTF loader in the mesh's ancestors.\r\n let current = mesh.parent;\r\n while (current) {\r\n if (IsNoopNode(current, sceneIsRightHanded) && current.parent === null) {\r\n if (!sceneIsRightHanded) {\r\n // If it's a RH->LH node, cancel out its inversion effect on the mesh's matrix and winding order.\r\n matrix.multiplyToRef(current.getWorldMatrix().invert(), matrix);\r\n sideOrientation = sideOrientation === Material.ClockWiseSideOrientation ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;\r\n }\r\n convertToRightHanded = false;\r\n break;\r\n }\r\n current = current.parent;\r\n }\r\n\r\n if (matrix.determinant() < 0) {\r\n // RealityKit doesn't seem to automatically flip faces of a mesh with negative scale, like other engines do (including us).\r\n Tools.Warn(`Mesh ${mesh.name} has a negative scale, which may look incorrect in destinations like QuickLook.`);\r\n }\r\n\r\n return {\r\n matrix,\r\n windingOrder: sideOrientation === Material.ClockWiseSideOrientation ? \"leftHanded\" : \"rightHanded\",\r\n convertToRightHanded,\r\n };\r\n}\r\n\r\n/**\r\n *\r\n * @param scene scene to export\r\n * @param options options to configure the export\r\n * @param meshPredicate predicate to filter the meshes to export\r\n * @returns a uint8 array containing the USDZ file\r\n * @see [Simple sphere](https://playground.babylonjs.com/#H2G5XW#6)\r\n * @see [Red sphere](https://playground.babylonjs.com/#H2G5XW#7)\r\n * @see [Boombox](https://playground.babylonjs.com/#5N3RWK#5)\r\n */\r\nexport async function USDZExportAsync(scene: Scene, options: Partial<IUSDZExportOptions>, meshPredicate?: (m: Mesh) => boolean): Promise<Uint8Array> {\r\n const localOptions = {\r\n fflateUrl: \"https://unpkg.com/fflate@0.8.2\",\r\n includeAnchoringProperties: true,\r\n anchoringType: \"plane\",\r\n planeAnchoringAlignment: \"horizontal\",\r\n modelFileName: \"model.usda\",\r\n precision: 5,\r\n exportCamera: false,\r\n cameraSensorWidth: 35,\r\n ...options,\r\n };\r\n\r\n // Get the fflate library\r\n if (typeof fflate === \"undefined\") {\r\n await Tools.LoadScriptAsync(localOptions.fflateUrl);\r\n }\r\n\r\n // Start the export\r\n const files: { [key: string]: any } = {};\r\n\r\n // model file should be first in USDZ archive so we init it here\r\n files[localOptions.modelFileName] = null;\r\n\r\n let output = BuildHeader();\r\n output += BuildRootAndSceneStart(localOptions);\r\n\r\n const materialToExports: { [key: string]: Material } = {};\r\n\r\n // Meshes\r\n for (const abstractMesh of scene.meshes) {\r\n if (abstractMesh.getTotalVertices() === 0) {\r\n continue;\r\n }\r\n const mesh = abstractMesh as Mesh;\r\n const geometry = mesh.geometry;\r\n const material = mesh.material;\r\n\r\n if (!material || !geometry || (meshPredicate && !meshPredicate(mesh))) {\r\n continue;\r\n }\r\n\r\n const supportedMaterials = [\"StandardMaterial\", \"PBRMaterial\", \"PBRMetallicRoughnessMaterial\"];\r\n\r\n if (supportedMaterials.indexOf(material.getClassName()) !== -1) {\r\n const geometryFileName = \"geometries/Geometry_\" + geometry.uniqueId + \".usda\";\r\n const { matrix, windingOrder, convertToRightHanded } = ExtractMeshInformations(mesh);\r\n\r\n if (!(geometryFileName in files)) {\r\n const meshObject = BuildMeshObject(geometry, localOptions, windingOrder, convertToRightHanded);\r\n files[geometryFileName] = BuildUSDFileAsString(meshObject);\r\n }\r\n\r\n if (!(material.uniqueId in materialToExports)) {\r\n materialToExports[material.uniqueId] = material;\r\n }\r\n\r\n output += BuildXform(mesh, matrix);\r\n } else {\r\n Tools.Warn(\"USDZExportAsync does not support this material type: \" + material.getClassName());\r\n }\r\n }\r\n\r\n // Camera\r\n if (scene.activeCamera && localOptions.exportCamera) {\r\n output += BuildCamera(scene.activeCamera, localOptions);\r\n }\r\n\r\n // Close scene\r\n output += BuildSceneEnd();\r\n\r\n // Materials\r\n const textureToExports: { [key: string]: BaseTexture } = {};\r\n output += BuildMaterials(materialToExports, textureToExports, localOptions);\r\n\r\n // Close root\r\n output += BuildRootEnd();\r\n\r\n // Compress\r\n files[localOptions.modelFileName] = fflate.strToU8(output);\r\n\r\n // Textures\r\n for (const id in textureToExports) {\r\n const texture = textureToExports[id];\r\n\r\n const size = texture.getSize();\r\n // eslint-disable-next-line no-await-in-loop\r\n const textureData = await GetTextureDataAsync(texture);\r\n\r\n // eslint-disable-next-line no-await-in-loop\r\n const fileContent = await DumpTools.DumpDataAsync(size.width, size.height, textureData, \"image/png\", undefined, false, true);\r\n\r\n files[`textures/Texture_${id}.png`] = new Uint8Array(fileContent as ArrayBuffer).slice(); // This is to avoid getting a link and not a copy\r\n }\r\n\r\n // 64 byte alignment\r\n // https://github.com/101arrowz/fflate/issues/39#issuecomment-777263109\r\n\r\n let offset = 0;\r\n\r\n for (const filename in files) {\r\n const file = files[filename];\r\n if (!file) {\r\n continue;\r\n }\r\n const headerSize = 34 + filename.length;\r\n\r\n offset += headerSize;\r\n\r\n const offsetMod64 = offset & 63;\r\n\r\n if (offsetMod64 !== 4) {\r\n const padLength = 64 - offsetMod64;\r\n const padding = new Uint8Array(padLength);\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n files[filename] = [file, { extra: { 12345: padding } }];\r\n }\r\n\r\n offset = file.length;\r\n }\r\n\r\n return fflate.zipSync(files, { level: 0 });\r\n}\r\n"]}
|
package/exportUtils.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Matrix } from "@onerjs/core/Maths/math.vector.js";
|
|
2
|
-
import type
|
|
2
|
+
import { type Node } from "@onerjs/core/node.js";
|
|
3
3
|
/**
|
|
4
4
|
* Matrix that converts handedness on the X-axis. Used to convert from LH to RH and vice versa.
|
|
5
5
|
* @internal
|
package/exportUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportUtils.js","sourceRoot":"","sources":["../../../dev/serializers/src/exportUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"exportUtils.js","sourceRoot":"","sources":["../../../dev/serializers/src/exportUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGxD;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAEpH;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAU,EAAE,oBAA6B;IAChE,IAAI,CAAC,CAAC,IAAI,YAAY,aAAa,CAAC,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,YAAY;IACZ,IAAI,oBAAoB,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,EAAE,CAAC;YAC9D,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,uBAAuB,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,EAAE,CAAC;YAC9D,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,WAAW;IACX,IAAI,IAAI,YAAY,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["import { Matrix, Quaternion, TmpVectors, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Epsilon } from \"core/Maths/math.constants\";\r\nimport { TransformNode } from \"core/Meshes/transformNode\";\r\nimport { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { type Node } from \"core/node\";\r\n\r\n/**\r\n * Matrix that converts handedness on the X-axis. Used to convert from LH to RH and vice versa.\r\n * @internal\r\n */\r\nexport const ConvertHandednessMatrix = Matrix.Compose(new Vector3(-1, 1, 1), Quaternion.Identity(), Vector3.Zero());\r\n\r\n/**\r\n * Checks if a node is a \"noop\" transform node, usually inserted by the glTF loader to correct handedness.\r\n * @internal\r\n */\r\nexport function IsNoopNode(node: Node, useRightHandedSystem: boolean): boolean {\r\n if (!(node instanceof TransformNode)) {\r\n return false;\r\n }\r\n\r\n // Transform\r\n if (useRightHandedSystem) {\r\n const matrix = node.getWorldMatrix();\r\n if (!matrix.equalsWithEpsilon(Matrix.IdentityReadOnly, Epsilon)) {\r\n return false;\r\n }\r\n } else {\r\n const matrix = node.getWorldMatrix().multiplyToRef(ConvertHandednessMatrix, TmpVectors.Matrix[0]);\r\n if (!matrix.equalsWithEpsilon(Matrix.IdentityReadOnly, Epsilon)) {\r\n return false;\r\n }\r\n }\r\n\r\n // Geometry\r\n if (node instanceof AbstractMesh && node.geometry) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
3
|
-
import type
|
|
4
|
-
import type
|
|
1
|
+
import { type Nullable } from "@onerjs/core/types.js";
|
|
2
|
+
import { type Node } from "@onerjs/core/node.js";
|
|
3
|
+
import { type INode } from "babylonjs-gltf2interface";
|
|
4
|
+
import { type IGLTFExporterExtensionV2 } from "../glTFExporterExtension.js";
|
|
5
5
|
import { GLTFExporter } from "../glTFExporter.js";
|
|
6
6
|
/**
|
|
7
7
|
* [Specification](https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/EXT_lights_area/README.md)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EXT_lights_area.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/EXT_lights_area.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { Vector3, Quaternion, TmpVectors } from \"core/Maths/math.vector\";\r\nimport { Light } from \"core/Lights/light\";\r\nimport type { Node } from \"core/node\";\r\nimport type { INode, IEXTLightsArea_LightReference, IEXTLightsArea_Light, IEXTLightsArea } from \"babylonjs-gltf2interface\";\r\nimport { EXTLightsArea_LightType } from \"babylonjs-gltf2interface\";\r\nimport type { IGLTFExporterExtensionV2 } from \"../glTFExporterExtension\";\r\nimport { GLTFExporter } from \"../glTFExporter\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { ConvertToRightHandedPosition, OmitDefaultValues, CollapseChildIntoParent, IsChildCollapsible } from \"../glTFUtilities\";\r\nimport type { RectAreaLight } from \"core/Lights/rectAreaLight\";\r\n\r\nconst NAME = \"EXT_lights_area\";\r\nconst DEFAULTS: Omit<IEXTLightsArea_Light, \"type\"> = {\r\n name: \"\",\r\n color: [1, 1, 1],\r\n intensity: 1,\r\n size: 1,\r\n};\r\nconst RECTDEFAULTS: NonNullable<IEXTLightsArea_Light[\"rect\"]> = {\r\n aspect: 1,\r\n};\r\nconst LIGHTDIRECTION = Vector3.Backward();\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/EXT_lights_area/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class EXT_lights_area implements IGLTFExporterExtensionV2 {\r\n /** The name of this extension. */\r\n public readonly name = NAME;\r\n\r\n /** Defines whether this extension is enabled. */\r\n public enabled = true;\r\n\r\n /** Defines whether this extension is required */\r\n public required = false;\r\n\r\n /** Reference to the glTF exporter */\r\n private _exporter: GLTFExporter;\r\n\r\n private _lights: IEXTLightsArea;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(exporter: GLTFExporter) {\r\n this._exporter = exporter;\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._lights as any) = null;\r\n }\r\n\r\n /** @internal */\r\n public get wasUsed() {\r\n return !!this._lights;\r\n }\r\n\r\n /** @internal */\r\n public onExporting(): void {\r\n this._exporter._glTF.extensions![NAME] = this._lights;\r\n }\r\n /**\r\n * Define this method to modify the default behavior when exporting a node\r\n * @param context The context when exporting the node\r\n * @param node glTF node\r\n * @param babylonNode BabylonJS node\r\n * @param nodeMap Node mapping of babylon node to glTF node index\r\n * @param convertToRightHanded Flag to convert the values to right-handed\r\n * @returns nullable INode promise\r\n */\r\n public async postExportNodeAsync(context: string, node: INode, babylonNode: Node, nodeMap: Map<Node, number>, convertToRightHanded: boolean): Promise<Nullable<INode>> {\r\n return await new Promise((resolve) => {\r\n if (!(babylonNode instanceof Light)) {\r\n resolve(node);\r\n return;\r\n }\r\n\r\n const lightType = babylonNode.getTypeID() == Light.LIGHTTYPEID_RECT_AREALIGHT ? EXTLightsArea_LightType.RECT : null;\r\n if (!lightType) {\r\n Logger.Warn(`${context}: Light ${babylonNode.name} is not supported in ${NAME}`);\r\n resolve(node);\r\n return;\r\n }\r\n\r\n const areaLight = babylonNode as RectAreaLight;\r\n\r\n if (areaLight.falloffType !== Light.FALLOFF_GLTF) {\r\n Logger.Warn(`${context}: Light falloff for ${babylonNode.name} does not match the ${NAME} specification!`);\r\n }\r\n\r\n // Set the node's translation and rotation here, since lights are not handled in exportNodeAsync\r\n if (!areaLight.position.equalsToFloats(0, 0, 0)) {\r\n const translation = TmpVectors.Vector3[0].copyFrom(areaLight.position);\r\n if (convertToRightHanded) {\r\n ConvertToRightHandedPosition(translation);\r\n }\r\n node.translation = translation.asArray();\r\n }\r\n\r\n // Represent the Babylon light's direction as a quaternion\r\n // relative to glTF lights' forward direction, (0, 0, -1).\r\n const direction = Vector3.Forward();\r\n if (convertToRightHanded) {\r\n ConvertToRightHandedPosition(direction);\r\n }\r\n\r\n const lightRotationQuaternion = Quaternion.FromUnitVectorsToRef(LIGHTDIRECTION, direction, TmpVectors.Quaternion[0]);\r\n if (!Quaternion.IsIdentity(lightRotationQuaternion)) {\r\n node.rotation = lightRotationQuaternion.asArray();\r\n }\r\n\r\n const light: IEXTLightsArea_Light = {\r\n type: lightType,\r\n name: areaLight.name,\r\n color: areaLight.diffuse.asArray(),\r\n intensity: areaLight.intensity,\r\n size: areaLight.height,\r\n rect: {\r\n aspect: areaLight.width / areaLight.height,\r\n },\r\n };\r\n OmitDefaultValues(light, DEFAULTS);\r\n\r\n if (light.rect) {\r\n OmitDefaultValues(light.rect, RECTDEFAULTS);\r\n }\r\n\r\n this._lights ||= {\r\n lights: [],\r\n };\r\n this._lights.lights.push(light);\r\n\r\n const lightReference: IEXTLightsArea_LightReference = {\r\n light: this._lights.lights.length - 1,\r\n };\r\n\r\n // Assign the light to its parent node, if possible, to condense the glTF\r\n // Why and when: the glTF loader generates a new parent TransformNode for each light node, which we should undo on export\r\n const parentBabylonNode = babylonNode.parent;\r\n\r\n if (parentBabylonNode && IsChildCollapsible(areaLight, parentBabylonNode)) {\r\n const parentNodeIndex = nodeMap.get(parentBabylonNode);\r\n if (parentNodeIndex) {\r\n // Combine the light's transformation with the parent's\r\n const parentNode = this._exporter._nodes[parentNodeIndex];\r\n CollapseChildIntoParent(node, parentNode);\r\n parentNode.extensions ||= {};\r\n parentNode.extensions[NAME] = lightReference;\r\n\r\n // Do not export the original node\r\n resolve(null);\r\n return;\r\n }\r\n }\r\n\r\n node.extensions ||= {};\r\n node.extensions[NAME] = lightReference;\r\n resolve(node);\r\n });\r\n }\r\n}\r\n\r\nGLTFExporter.RegisterExtension(NAME, (exporter) => new EXT_lights_area(exporter));\r\n"]}
|
|
1
|
+
{"version":3,"file":"EXT_lights_area.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/EXT_lights_area.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { Vector3, Quaternion, TmpVectors } from \"core/Maths/math.vector\";\r\nimport { Light } from \"core/Lights/light\";\r\nimport { type Node } from \"core/node\";\r\nimport { type INode, type IEXTLightsArea_LightReference, type IEXTLightsArea_Light, type IEXTLightsArea, EXTLightsArea_LightType } from \"babylonjs-gltf2interface\";\r\nimport { type IGLTFExporterExtensionV2 } from \"../glTFExporterExtension\";\r\nimport { GLTFExporter } from \"../glTFExporter\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { ConvertToRightHandedPosition, OmitDefaultValues, CollapseChildIntoParent, IsChildCollapsible } from \"../glTFUtilities\";\r\nimport { type RectAreaLight } from \"core/Lights/rectAreaLight\";\r\n\r\nconst NAME = \"EXT_lights_area\";\r\nconst DEFAULTS: Omit<IEXTLightsArea_Light, \"type\"> = {\r\n name: \"\",\r\n color: [1, 1, 1],\r\n intensity: 1,\r\n size: 1,\r\n};\r\nconst RECTDEFAULTS: NonNullable<IEXTLightsArea_Light[\"rect\"]> = {\r\n aspect: 1,\r\n};\r\nconst LIGHTDIRECTION = Vector3.Backward();\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/EXT_lights_area/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class EXT_lights_area implements IGLTFExporterExtensionV2 {\r\n /** The name of this extension. */\r\n public readonly name = NAME;\r\n\r\n /** Defines whether this extension is enabled. */\r\n public enabled = true;\r\n\r\n /** Defines whether this extension is required */\r\n public required = false;\r\n\r\n /** Reference to the glTF exporter */\r\n private _exporter: GLTFExporter;\r\n\r\n private _lights: IEXTLightsArea;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(exporter: GLTFExporter) {\r\n this._exporter = exporter;\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._lights as any) = null;\r\n }\r\n\r\n /** @internal */\r\n public get wasUsed() {\r\n return !!this._lights;\r\n }\r\n\r\n /** @internal */\r\n public onExporting(): void {\r\n this._exporter._glTF.extensions![NAME] = this._lights;\r\n }\r\n /**\r\n * Define this method to modify the default behavior when exporting a node\r\n * @param context The context when exporting the node\r\n * @param node glTF node\r\n * @param babylonNode BabylonJS node\r\n * @param nodeMap Node mapping of babylon node to glTF node index\r\n * @param convertToRightHanded Flag to convert the values to right-handed\r\n * @returns nullable INode promise\r\n */\r\n public async postExportNodeAsync(context: string, node: INode, babylonNode: Node, nodeMap: Map<Node, number>, convertToRightHanded: boolean): Promise<Nullable<INode>> {\r\n return await new Promise((resolve) => {\r\n if (!(babylonNode instanceof Light)) {\r\n resolve(node);\r\n return;\r\n }\r\n\r\n const lightType = babylonNode.getTypeID() == Light.LIGHTTYPEID_RECT_AREALIGHT ? EXTLightsArea_LightType.RECT : null;\r\n if (!lightType) {\r\n Logger.Warn(`${context}: Light ${babylonNode.name} is not supported in ${NAME}`);\r\n resolve(node);\r\n return;\r\n }\r\n\r\n const areaLight = babylonNode as RectAreaLight;\r\n\r\n if (areaLight.falloffType !== Light.FALLOFF_GLTF) {\r\n Logger.Warn(`${context}: Light falloff for ${babylonNode.name} does not match the ${NAME} specification!`);\r\n }\r\n\r\n // Set the node's translation and rotation here, since lights are not handled in exportNodeAsync\r\n if (!areaLight.position.equalsToFloats(0, 0, 0)) {\r\n const translation = TmpVectors.Vector3[0].copyFrom(areaLight.position);\r\n if (convertToRightHanded) {\r\n ConvertToRightHandedPosition(translation);\r\n }\r\n node.translation = translation.asArray();\r\n }\r\n\r\n // Represent the Babylon light's direction as a quaternion\r\n // relative to glTF lights' forward direction, (0, 0, -1).\r\n const direction = Vector3.Forward();\r\n if (convertToRightHanded) {\r\n ConvertToRightHandedPosition(direction);\r\n }\r\n\r\n const lightRotationQuaternion = Quaternion.FromUnitVectorsToRef(LIGHTDIRECTION, direction, TmpVectors.Quaternion[0]);\r\n if (!Quaternion.IsIdentity(lightRotationQuaternion)) {\r\n node.rotation = lightRotationQuaternion.asArray();\r\n }\r\n\r\n const light: IEXTLightsArea_Light = {\r\n type: lightType,\r\n name: areaLight.name,\r\n color: areaLight.diffuse.asArray(),\r\n intensity: areaLight.intensity,\r\n size: areaLight.height,\r\n rect: {\r\n aspect: areaLight.width / areaLight.height,\r\n },\r\n };\r\n OmitDefaultValues(light, DEFAULTS);\r\n\r\n if (light.rect) {\r\n OmitDefaultValues(light.rect, RECTDEFAULTS);\r\n }\r\n\r\n this._lights ||= {\r\n lights: [],\r\n };\r\n this._lights.lights.push(light);\r\n\r\n const lightReference: IEXTLightsArea_LightReference = {\r\n light: this._lights.lights.length - 1,\r\n };\r\n\r\n // Assign the light to its parent node, if possible, to condense the glTF\r\n // Why and when: the glTF loader generates a new parent TransformNode for each light node, which we should undo on export\r\n const parentBabylonNode = babylonNode.parent;\r\n\r\n if (parentBabylonNode && IsChildCollapsible(areaLight, parentBabylonNode)) {\r\n const parentNodeIndex = nodeMap.get(parentBabylonNode);\r\n if (parentNodeIndex) {\r\n // Combine the light's transformation with the parent's\r\n const parentNode = this._exporter._nodes[parentNodeIndex];\r\n CollapseChildIntoParent(node, parentNode);\r\n parentNode.extensions ||= {};\r\n parentNode.extensions[NAME] = lightReference;\r\n\r\n // Do not export the original node\r\n resolve(null);\r\n return;\r\n }\r\n }\r\n\r\n node.extensions ||= {};\r\n node.extensions[NAME] = lightReference;\r\n resolve(node);\r\n });\r\n }\r\n}\r\n\r\nGLTFExporter.RegisterExtension(NAME, (exporter) => new EXT_lights_area(exporter));\r\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
3
|
-
import type
|
|
1
|
+
import { type INode } from "babylonjs-gltf2interface";
|
|
2
|
+
import { type IGLTFExporterExtensionV2 } from "../glTFExporterExtension.js";
|
|
3
|
+
import { type BufferManager } from "../bufferManager.js";
|
|
4
4
|
import { GLTFExporter } from "../glTFExporter.js";
|
|
5
|
-
import type
|
|
6
|
-
import type
|
|
5
|
+
import { type Nullable } from "@onerjs/core/types.js";
|
|
6
|
+
import { type Node } from "@onerjs/core/node.js";
|
|
7
7
|
import "@onerjs/core/Meshes/thinInstanceMesh.js";
|
|
8
8
|
/**
|
|
9
9
|
* [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Vendor/EXT_mesh_gpu_instancing/README.md)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EXT_mesh_gpu_instancing.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.ts"],"names":[],"mappings":"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","sourcesContent":["import type { INode, IEXTMeshGpuInstancing } from \"babylonjs-gltf2interface\";\r\nimport { AccessorType, AccessorComponentType } from \"babylonjs-gltf2interface\";\r\nimport type { IGLTFExporterExtensionV2 } from \"../glTFExporterExtension\";\r\nimport type { BufferManager } from \"../bufferManager\";\r\nimport { GLTFExporter } from \"../glTFExporter\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { Node } from \"core/node\";\r\nimport { Mesh } from \"core/Meshes/mesh\";\r\nimport \"core/Meshes/thinInstanceMesh\";\r\nimport { TmpVectors, Quaternion, Vector3 } from \"core/Maths/math.vector\";\r\nimport { ConvertToRightHandedPosition, ConvertToRightHandedRotation } from \"../glTFUtilities\";\r\n\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\nconst NAME = \"EXT_mesh_gpu_instancing\";\r\n\r\nfunction ColorBufferToRGBAToRGB(colorBuffer: Float32Array, instanceCount: number) {\r\n const colorBufferRgb = new Float32Array(instanceCount * 3);\r\n\r\n for (let i = 0; i < instanceCount; i++) {\r\n colorBufferRgb[i * 3 + 0] = colorBuffer[i * 4 + 0];\r\n colorBufferRgb[i * 3 + 1] = colorBuffer[i * 4 + 1];\r\n colorBufferRgb[i * 3 + 2] = colorBuffer[i * 4 + 2];\r\n }\r\n return colorBufferRgb;\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Vendor/EXT_mesh_gpu_instancing/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class EXT_mesh_gpu_instancing implements IGLTFExporterExtensionV2 {\r\n /** Name of this extension */\r\n public readonly name = NAME;\r\n\r\n /** Defines whether this extension is enabled */\r\n public enabled = true;\r\n\r\n /** Defines whether this extension is required */\r\n public required = false;\r\n\r\n /**\r\n * Internal state to emit warning about instance color alpha once\r\n */\r\n private _instanceColorWarned = false;\r\n\r\n private _exporter: GLTFExporter;\r\n\r\n private _wasUsed = false;\r\n\r\n constructor(exporter: GLTFExporter) {\r\n this._exporter = exporter;\r\n }\r\n\r\n public dispose() {}\r\n\r\n /** @internal */\r\n public get wasUsed() {\r\n return this._wasUsed;\r\n }\r\n\r\n /**\r\n * After node is exported\r\n * @param context the GLTF context when loading the asset\r\n * @param node the node exported\r\n * @param babylonNode the corresponding babylon node\r\n * @param nodeMap map from babylon node id to node index\r\n * @param convertToRightHanded true if we need to convert data from left hand to right hand system.\r\n * @param bufferManager buffer manager\r\n * @returns nullable promise, resolves with the node\r\n */\r\n public async postExportNodeAsync(\r\n context: string,\r\n node: Nullable<INode>,\r\n babylonNode: Node,\r\n nodeMap: Map<Node, number>,\r\n convertToRightHanded: boolean,\r\n bufferManager: BufferManager\r\n ): Promise<Nullable<INode>> {\r\n return await new Promise((resolve) => {\r\n if (node && babylonNode instanceof Mesh) {\r\n if (babylonNode.hasThinInstances && this._exporter) {\r\n this._wasUsed = true;\r\n\r\n const noTranslation = Vector3.Zero();\r\n const noRotation = Quaternion.Identity();\r\n const noScale = Vector3.One();\r\n\r\n // retrieve all the instance world matrix\r\n const matrix = babylonNode.thinInstanceGetWorldMatrices();\r\n\r\n const iwt = TmpVectors.Vector3[2];\r\n const iwr = TmpVectors.Quaternion[1];\r\n const iws = TmpVectors.Vector3[3];\r\n\r\n let hasAnyInstanceWorldTranslation = false;\r\n let hasAnyInstanceWorldRotation = false;\r\n let hasAnyInstanceWorldScale = false;\r\n\r\n // prepare temp buffers\r\n const translationBuffer = new Float32Array(babylonNode.thinInstanceCount * 3);\r\n const rotationBuffer = new Float32Array(babylonNode.thinInstanceCount * 4);\r\n const scaleBuffer = new Float32Array(babylonNode.thinInstanceCount * 3);\r\n\r\n let i = 0;\r\n for (const m of matrix) {\r\n m.decompose(iws, iwr, iwt);\r\n\r\n if (convertToRightHanded) {\r\n ConvertToRightHandedPosition(iwt);\r\n ConvertToRightHandedRotation(iwr);\r\n }\r\n\r\n // fill the temp buffer\r\n translationBuffer.set(iwt.asArray(), i * 3);\r\n rotationBuffer.set(iwr.normalize().asArray(), i * 4); // ensure the quaternion is normalized\r\n scaleBuffer.set(iws.asArray(), i * 3);\r\n\r\n // this is where we decide if there is any transformation\r\n hasAnyInstanceWorldTranslation = hasAnyInstanceWorldTranslation || !iwt.equalsWithEpsilon(noTranslation);\r\n hasAnyInstanceWorldRotation = hasAnyInstanceWorldRotation || !iwr.equalsWithEpsilon(noRotation);\r\n hasAnyInstanceWorldScale = hasAnyInstanceWorldScale || !iws.equalsWithEpsilon(noScale);\r\n\r\n i++;\r\n }\r\n\r\n const extension: IEXTMeshGpuInstancing = {\r\n attributes: {},\r\n };\r\n\r\n // do we need to write TRANSLATION ?\r\n if (hasAnyInstanceWorldTranslation) {\r\n extension.attributes[\"TRANSLATION\"] = this._buildAccessor(translationBuffer, AccessorType.VEC3, babylonNode.thinInstanceCount, bufferManager);\r\n }\r\n // do we need to write ROTATION ?\r\n if (hasAnyInstanceWorldRotation) {\r\n // we decided to stay on FLOAT for now see https://github.com/BabylonJS/Babylon.js/pull/12495\r\n extension.attributes[\"ROTATION\"] = this._buildAccessor(rotationBuffer, AccessorType.VEC4, babylonNode.thinInstanceCount, bufferManager);\r\n }\r\n // do we need to write SCALE ?\r\n if (hasAnyInstanceWorldScale) {\r\n extension.attributes[\"SCALE\"] = this._buildAccessor(scaleBuffer, AccessorType.VEC3, babylonNode.thinInstanceCount, bufferManager);\r\n }\r\n let colorBuffer = babylonNode._userThinInstanceBuffersStorage?.data?.instanceColor;\r\n if (colorBuffer) {\r\n const instanceCount = babylonNode.thinInstanceCount;\r\n const accessorType = AccessorType.VEC3;\r\n if (babylonNode.hasVertexAlpha && colorBuffer.length === instanceCount * 4) {\r\n if (!this._instanceColorWarned) {\r\n Logger.Warn(\"EXT_mesh_gpu_instancing: Exporting instance colors as RGB, alpha channel of instance color is not exported\");\r\n this._instanceColorWarned = true;\r\n }\r\n colorBuffer = ColorBufferToRGBAToRGB(colorBuffer, instanceCount);\r\n } else if (colorBuffer.length === instanceCount * 4) {\r\n colorBuffer = ColorBufferToRGBAToRGB(colorBuffer, instanceCount);\r\n }\r\n if (colorBuffer.length === instanceCount * 3) {\r\n extension.attributes[\"_COLOR_0\"] = this._buildAccessor(colorBuffer, accessorType, instanceCount, bufferManager);\r\n }\r\n }\r\n\r\n /* eslint-enable @typescript-eslint/naming-convention*/\r\n node.extensions = node.extensions || {};\r\n node.extensions[NAME] = extension;\r\n }\r\n }\r\n resolve(node);\r\n });\r\n }\r\n\r\n private _buildAccessor(buffer: Float32Array, type: AccessorType, count: number, bufferManager: BufferManager): number {\r\n // build the buffer view\r\n const bv = bufferManager.createBufferView(buffer);\r\n\r\n // finally build the accessor\r\n const accessor = bufferManager.createAccessor(bv, type, AccessorComponentType.FLOAT, count);\r\n this._exporter._accessors.push(accessor);\r\n return this._exporter._accessors.length - 1;\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nGLTFExporter.RegisterExtension(NAME, (exporter) => new EXT_mesh_gpu_instancing(exporter));\r\n"]}
|
|
1
|
+
{"version":3,"file":"EXT_mesh_gpu_instancing.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.ts"],"names":[],"mappings":"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","sourcesContent":["import { type INode, type IEXTMeshGpuInstancing, AccessorType, AccessorComponentType } from \"babylonjs-gltf2interface\";\r\nimport { type IGLTFExporterExtensionV2 } from \"../glTFExporterExtension\";\r\nimport { type BufferManager } from \"../bufferManager\";\r\nimport { GLTFExporter } from \"../glTFExporter\";\r\nimport { type Nullable } from \"core/types\";\r\nimport { type Node } from \"core/node\";\r\nimport { Mesh } from \"core/Meshes/mesh\";\r\nimport \"core/Meshes/thinInstanceMesh\";\r\nimport { TmpVectors, Quaternion, Vector3 } from \"core/Maths/math.vector\";\r\nimport { ConvertToRightHandedPosition, ConvertToRightHandedRotation } from \"../glTFUtilities\";\r\n\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\nconst NAME = \"EXT_mesh_gpu_instancing\";\r\n\r\nfunction ColorBufferToRGBAToRGB(colorBuffer: Float32Array, instanceCount: number) {\r\n const colorBufferRgb = new Float32Array(instanceCount * 3);\r\n\r\n for (let i = 0; i < instanceCount; i++) {\r\n colorBufferRgb[i * 3 + 0] = colorBuffer[i * 4 + 0];\r\n colorBufferRgb[i * 3 + 1] = colorBuffer[i * 4 + 1];\r\n colorBufferRgb[i * 3 + 2] = colorBuffer[i * 4 + 2];\r\n }\r\n return colorBufferRgb;\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Vendor/EXT_mesh_gpu_instancing/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class EXT_mesh_gpu_instancing implements IGLTFExporterExtensionV2 {\r\n /** Name of this extension */\r\n public readonly name = NAME;\r\n\r\n /** Defines whether this extension is enabled */\r\n public enabled = true;\r\n\r\n /** Defines whether this extension is required */\r\n public required = false;\r\n\r\n /**\r\n * Internal state to emit warning about instance color alpha once\r\n */\r\n private _instanceColorWarned = false;\r\n\r\n private _exporter: GLTFExporter;\r\n\r\n private _wasUsed = false;\r\n\r\n constructor(exporter: GLTFExporter) {\r\n this._exporter = exporter;\r\n }\r\n\r\n public dispose() {}\r\n\r\n /** @internal */\r\n public get wasUsed() {\r\n return this._wasUsed;\r\n }\r\n\r\n /**\r\n * After node is exported\r\n * @param context the GLTF context when loading the asset\r\n * @param node the node exported\r\n * @param babylonNode the corresponding babylon node\r\n * @param nodeMap map from babylon node id to node index\r\n * @param convertToRightHanded true if we need to convert data from left hand to right hand system.\r\n * @param bufferManager buffer manager\r\n * @returns nullable promise, resolves with the node\r\n */\r\n public async postExportNodeAsync(\r\n context: string,\r\n node: Nullable<INode>,\r\n babylonNode: Node,\r\n nodeMap: Map<Node, number>,\r\n convertToRightHanded: boolean,\r\n bufferManager: BufferManager\r\n ): Promise<Nullable<INode>> {\r\n return await new Promise((resolve) => {\r\n if (node && babylonNode instanceof Mesh) {\r\n if (babylonNode.hasThinInstances && this._exporter) {\r\n this._wasUsed = true;\r\n\r\n const noTranslation = Vector3.Zero();\r\n const noRotation = Quaternion.Identity();\r\n const noScale = Vector3.One();\r\n\r\n // retrieve all the instance world matrix\r\n const matrix = babylonNode.thinInstanceGetWorldMatrices();\r\n\r\n const iwt = TmpVectors.Vector3[2];\r\n const iwr = TmpVectors.Quaternion[1];\r\n const iws = TmpVectors.Vector3[3];\r\n\r\n let hasAnyInstanceWorldTranslation = false;\r\n let hasAnyInstanceWorldRotation = false;\r\n let hasAnyInstanceWorldScale = false;\r\n\r\n // prepare temp buffers\r\n const translationBuffer = new Float32Array(babylonNode.thinInstanceCount * 3);\r\n const rotationBuffer = new Float32Array(babylonNode.thinInstanceCount * 4);\r\n const scaleBuffer = new Float32Array(babylonNode.thinInstanceCount * 3);\r\n\r\n let i = 0;\r\n for (const m of matrix) {\r\n m.decompose(iws, iwr, iwt);\r\n\r\n if (convertToRightHanded) {\r\n ConvertToRightHandedPosition(iwt);\r\n ConvertToRightHandedRotation(iwr);\r\n }\r\n\r\n // fill the temp buffer\r\n translationBuffer.set(iwt.asArray(), i * 3);\r\n rotationBuffer.set(iwr.normalize().asArray(), i * 4); // ensure the quaternion is normalized\r\n scaleBuffer.set(iws.asArray(), i * 3);\r\n\r\n // this is where we decide if there is any transformation\r\n hasAnyInstanceWorldTranslation = hasAnyInstanceWorldTranslation || !iwt.equalsWithEpsilon(noTranslation);\r\n hasAnyInstanceWorldRotation = hasAnyInstanceWorldRotation || !iwr.equalsWithEpsilon(noRotation);\r\n hasAnyInstanceWorldScale = hasAnyInstanceWorldScale || !iws.equalsWithEpsilon(noScale);\r\n\r\n i++;\r\n }\r\n\r\n const extension: IEXTMeshGpuInstancing = {\r\n attributes: {},\r\n };\r\n\r\n // do we need to write TRANSLATION ?\r\n if (hasAnyInstanceWorldTranslation) {\r\n extension.attributes[\"TRANSLATION\"] = this._buildAccessor(translationBuffer, AccessorType.VEC3, babylonNode.thinInstanceCount, bufferManager);\r\n }\r\n // do we need to write ROTATION ?\r\n if (hasAnyInstanceWorldRotation) {\r\n // we decided to stay on FLOAT for now see https://github.com/BabylonJS/Babylon.js/pull/12495\r\n extension.attributes[\"ROTATION\"] = this._buildAccessor(rotationBuffer, AccessorType.VEC4, babylonNode.thinInstanceCount, bufferManager);\r\n }\r\n // do we need to write SCALE ?\r\n if (hasAnyInstanceWorldScale) {\r\n extension.attributes[\"SCALE\"] = this._buildAccessor(scaleBuffer, AccessorType.VEC3, babylonNode.thinInstanceCount, bufferManager);\r\n }\r\n let colorBuffer = babylonNode._userThinInstanceBuffersStorage?.data?.instanceColor;\r\n if (colorBuffer) {\r\n const instanceCount = babylonNode.thinInstanceCount;\r\n const accessorType = AccessorType.VEC3;\r\n if (babylonNode.hasVertexAlpha && colorBuffer.length === instanceCount * 4) {\r\n if (!this._instanceColorWarned) {\r\n Logger.Warn(\"EXT_mesh_gpu_instancing: Exporting instance colors as RGB, alpha channel of instance color is not exported\");\r\n this._instanceColorWarned = true;\r\n }\r\n colorBuffer = ColorBufferToRGBAToRGB(colorBuffer, instanceCount);\r\n } else if (colorBuffer.length === instanceCount * 4) {\r\n colorBuffer = ColorBufferToRGBAToRGB(colorBuffer, instanceCount);\r\n }\r\n if (colorBuffer.length === instanceCount * 3) {\r\n extension.attributes[\"_COLOR_0\"] = this._buildAccessor(colorBuffer, accessorType, instanceCount, bufferManager);\r\n }\r\n }\r\n\r\n /* eslint-enable @typescript-eslint/naming-convention*/\r\n node.extensions = node.extensions || {};\r\n node.extensions[NAME] = extension;\r\n }\r\n }\r\n resolve(node);\r\n });\r\n }\r\n\r\n private _buildAccessor(buffer: Float32Array, type: AccessorType, count: number, bufferManager: BufferManager): number {\r\n // build the buffer view\r\n const bv = bufferManager.createBufferView(buffer);\r\n\r\n // finally build the accessor\r\n const accessor = bufferManager.createAccessor(bv, type, AccessorComponentType.FLOAT, count);\r\n this._exporter._accessors.push(accessor);\r\n return this._exporter._accessors.length - 1;\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nGLTFExporter.RegisterExtension(NAME, (exporter) => new EXT_mesh_gpu_instancing(exporter));\r\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type IGLTFExporterExtensionV2 } from "../glTFExporterExtension.js";
|
|
2
2
|
import { GLTFExporter } from "../glTFExporter.js";
|
|
3
3
|
/**
|
|
4
4
|
* [Proposed Specification](https://github.com/KhronosGroup/glTF/blob/5cb7518cf9a1bfb8268320026961b21caf5a4aac/extensions/2.0/Vendor/EXT_texture_avif/README.md)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EXT_texture_avif.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/EXT_texture_avif.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"EXT_texture_avif.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/EXT_texture_avif.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,MAAM,IAAI,GAAG,kBAAkB,CAAC;AAEhC;;;GAGG;AACH,gEAAgE;AAChE,MAAM,OAAO,gBAAgB;IASzB,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAID,YAAY,QAAsB;QAdlB,SAAI,GAAG,IAAI,CAAC;QAErB,YAAO,GAAG,IAAI,CAAC;QAEf,aAAQ,GAAG,IAAI,CAAC;QAEf,aAAQ,GAAG,KAAK,CAAC;QASrB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC9B,CAAC;IAEM,OAAO,KAAI,CAAC;IAEZ,iBAAiB,CAAC,CAAS,EAAE,WAAuC;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;QAClC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,GAAI,CAAC,CAAC;QACjE,IAAI,cAAc,0CAAuB,EAAE,CAAC;YACxC,OAAO;QACX,CAAC;QAED,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;QAC3B,OAAO,CAAC,UAAU,KAAlB,OAAO,CAAC,UAAU,GAAK,EAAE,EAAC;QAC1B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG;YACvB,MAAM,EAAE,UAAU;SACrB,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;CACJ;AAED,YAAY,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC","sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n/* eslint-disable babylonjs/available */\nimport { type IGLTFExporterExtensionV2 } from \"../glTFExporterExtension\";\nimport { GLTFExporter } from \"../glTFExporter\";\nimport { GetMimeType } from \"core/Misc/fileTools\";\nimport { ImageMimeType } from \"babylonjs-gltf2interface\";\n\nconst NAME = \"EXT_texture_avif\";\n\n/**\n * [Proposed Specification](https://github.com/KhronosGroup/glTF/blob/5cb7518cf9a1bfb8268320026961b21caf5a4aac/extensions/2.0/Vendor/EXT_texture_avif/README.md)\n * @experimental\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class EXT_texture_avif implements IGLTFExporterExtensionV2 {\n public readonly name = NAME;\n\n public enabled = true;\n\n public required = true;\n\n private _wasUsed = false;\n\n public get wasUsed() {\n return this._wasUsed;\n }\n\n private _exporter: GLTFExporter;\n\n constructor(exporter: GLTFExporter) {\n this._exporter = exporter;\n }\n\n public dispose() {}\n\n public postExportTexture(_: string, textureInfo: BABYLON.GLTF2.ITextureInfo): void {\n const texture = this._exporter._textures[textureInfo.index];\n const imageIndex = texture.source;\n if (imageIndex === undefined) {\n return;\n }\n\n const image = this._exporter._images[imageIndex];\n const sourceMimeType = image.mimeType || GetMimeType(image.uri!);\n if (sourceMimeType !== ImageMimeType.AVIF) {\n return;\n }\n\n texture.source = undefined;\n texture.extensions ||= {};\n texture.extensions[NAME] = {\n source: imageIndex,\n };\n\n this._wasUsed = true;\n }\n}\n\nGLTFExporter.RegisterExtension(NAME, (exporter) => new EXT_texture_avif(exporter));\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type IGLTFExporterExtensionV2 } from "../glTFExporterExtension.js";
|
|
2
2
|
import { GLTFExporter } from "../glTFExporter.js";
|
|
3
3
|
/**
|
|
4
4
|
* [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Vendor/EXT_texture_webp/README.md)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EXT_texture_webp.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/EXT_texture_webp.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"EXT_texture_webp.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/EXT_texture_webp.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,MAAM,IAAI,GAAG,kBAAkB,CAAC;AAEhC;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,gBAAgB;IASzB,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAID,YAAY,QAAsB;QAdlB,SAAI,GAAG,IAAI,CAAC;QAErB,YAAO,GAAG,IAAI,CAAC;QAEf,aAAQ,GAAG,IAAI,CAAC;QAEf,aAAQ,GAAG,KAAK,CAAC;QASrB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC9B,CAAC;IAEM,OAAO,KAAI,CAAC;IAEZ,iBAAiB,CAAC,CAAS,EAAE,WAAuC;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;QAClC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,GAAI,CAAC,CAAC;QACjE,IAAI,cAAc,0CAAuB,EAAE,CAAC;YACxC,OAAO;QACX,CAAC;QAED,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;QAC3B,OAAO,CAAC,UAAU,KAAlB,OAAO,CAAC,UAAU,GAAK,EAAE,EAAC;QAC1B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG;YACvB,MAAM,EAAE,UAAU;SACrB,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;CACJ;AAED,YAAY,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC","sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n/* eslint-disable babylonjs/available */\nimport { type IGLTFExporterExtensionV2 } from \"../glTFExporterExtension\";\nimport { GLTFExporter } from \"../glTFExporter\";\nimport { GetMimeType } from \"core/Misc/fileTools\";\nimport { ImageMimeType } from \"babylonjs-gltf2interface\";\n\nconst NAME = \"EXT_texture_webp\";\n\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Vendor/EXT_texture_webp/README.md)\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class EXT_texture_webp implements IGLTFExporterExtensionV2 {\n public readonly name = NAME;\n\n public enabled = true;\n\n public required = true;\n\n private _wasUsed = false;\n\n public get wasUsed() {\n return this._wasUsed;\n }\n\n private _exporter: GLTFExporter;\n\n constructor(exporter: GLTFExporter) {\n this._exporter = exporter;\n }\n\n public dispose() {}\n\n public postExportTexture(_: string, textureInfo: BABYLON.GLTF2.ITextureInfo): void {\n const texture = this._exporter._textures[textureInfo.index];\n const imageIndex = texture.source;\n if (imageIndex === undefined) {\n return;\n }\n\n const image = this._exporter._images[imageIndex];\n const sourceMimeType = image.mimeType || GetMimeType(image.uri!);\n if (sourceMimeType !== ImageMimeType.WEBP) {\n return;\n }\n\n texture.source = undefined;\n texture.extensions ||= {};\n texture.extensions[NAME] = {\n source: imageIndex,\n };\n\n this._wasUsed = true;\n }\n}\n\nGLTFExporter.RegisterExtension(NAME, (exporter) => new EXT_texture_webp(exporter));\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type IGLTFExporterExtensionV2 } from "../glTFExporterExtension.js";
|
|
2
2
|
import { GLTFExporter } from "../glTFExporter.js";
|
|
3
|
-
import type
|
|
4
|
-
import type
|
|
3
|
+
import { type IAccessor, type IMeshPrimitive } from "babylonjs-gltf2interface";
|
|
4
|
+
import { type BufferManager } from "../bufferManager.js";
|
|
5
5
|
/**
|
|
6
6
|
* [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_draco_mesh_compression/README.md)
|
|
7
7
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KHR_draco_mesh_compression.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/KHR_draco_mesh_compression.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IGLTFExporterExtensionV2 } from \"../glTFExporterExtension\";\nimport { GLTFExporter } from \"../glTFExporter\";\nimport { MeshPrimitiveMode } from \"babylonjs-gltf2interface\";\nimport type { IAccessor, IBufferView, IKHRDracoMeshCompression, IMeshPrimitive } from \"babylonjs-gltf2interface\";\nimport type { BufferManager } from \"../bufferManager\";\nimport { DracoEncoder } from \"core/Meshes/Compression/dracoEncoder\";\nimport { GetTypedArrayData, GetTypeByteLength } from \"core/Buffers/bufferUtils\";\nimport { GetAccessorElementCount } from \"../glTFUtilities\";\nimport type { DracoAttributeName, IDracoAttributeData, IDracoEncoderOptions } from \"core/Meshes/Compression/dracoEncoder.types\";\nimport { Logger } from \"core/Misc/logger\";\nimport type { Nullable } from \"core/types\";\n\nconst NAME = \"KHR_draco_mesh_compression\";\n\nfunction GetDracoAttributeName(glTFName: string): DracoAttributeName {\n if (glTFName === \"POSITION\") {\n return \"POSITION\";\n } else if (glTFName === \"NORMAL\") {\n return \"NORMAL\";\n } else if (glTFName.startsWith(\"COLOR\")) {\n return \"COLOR\";\n } else if (glTFName.startsWith(\"TEXCOORD\")) {\n return \"TEX_COORD\";\n }\n return \"GENERIC\";\n}\n\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_draco_mesh_compression/README.md)\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class KHR_draco_mesh_compression implements IGLTFExporterExtensionV2 {\n /** Name of this extension */\n public readonly name = NAME;\n\n /** Defines whether this extension is enabled */\n public enabled;\n\n /** KHR_draco_mesh_compression is required, as uncompressed fallback data is not yet implemented. */\n public required = true;\n\n /** BufferViews used for Draco data, which may be eligible for removal after Draco encoding */\n private _bufferViewsUsed: Set<IBufferView> = new Set();\n\n /** Accessors that were replaced with Draco data, which may be eligible for removal after Draco encoding */\n private _accessorsUsed: Set<IAccessor> = new Set();\n\n /** Promise pool for Draco encoding work */\n private _encodePromises: Promise<void>[] = [];\n\n private _wasUsed = false;\n\n /** @internal */\n public get wasUsed() {\n return this._wasUsed;\n }\n\n /** @internal */\n constructor(exporter: GLTFExporter) {\n this.enabled = exporter.options.meshCompressionMethod === \"Draco\" && DracoEncoder.DefaultAvailable;\n }\n\n /** @internal */\n public dispose() {}\n\n /** @internal */\n public postExportMeshPrimitive(primitive: IMeshPrimitive, bufferManager: BufferManager, accessors: IAccessor[]): void {\n if (!this.enabled) {\n return;\n }\n\n if (primitive.mode !== MeshPrimitiveMode.TRIANGLES && primitive.mode !== MeshPrimitiveMode.TRIANGLE_STRIP) {\n Logger.Warn(\"Cannot compress primitive with mode \" + primitive.mode + \".\");\n return;\n }\n\n // Collect bufferViews and accessors used by this primitive\n const primitiveBufferViews: IBufferView[] = [];\n const primitiveAccessors: IAccessor[] = [];\n\n // Prepare indices for Draco encoding\n let indices: Nullable<Uint32Array | Uint16Array> = null;\n if (primitive.indices !== undefined) {\n const accessor = accessors[primitive.indices];\n const bufferView = bufferManager.getBufferView(accessor);\n // Per exportIndices, indices must be either Uint16Array or Uint32Array\n indices = bufferManager.getData(bufferView).slice() as Uint32Array | Uint16Array;\n\n primitiveBufferViews.push(bufferView);\n primitiveAccessors.push(accessor);\n }\n\n // Prepare attributes for Draco encoding\n const attributes: IDracoAttributeData[] = [];\n for (const [name, accessorIndex] of Object.entries(primitive.attributes)) {\n const accessor = accessors[accessorIndex];\n const bufferView = bufferManager.getBufferView(accessor);\n\n const size = GetAccessorElementCount(accessor.type);\n const data = GetTypedArrayData(\n bufferManager.getData(bufferView),\n size,\n accessor.componentType,\n accessor.byteOffset || 0,\n bufferView.byteStride || GetTypeByteLength(accessor.componentType) * size,\n accessor.count,\n true\n );\n\n attributes.push({ kind: name, dracoName: GetDracoAttributeName(name), size: GetAccessorElementCount(accessor.type), data: data });\n\n primitiveBufferViews.push(bufferView);\n primitiveAccessors.push(accessor);\n }\n\n // Use sequential encoding to preserve vertex order for cases like morph targets\n const options: IDracoEncoderOptions = {\n method: primitive.targets ? \"MESH_SEQUENTIAL_ENCODING\" : \"MESH_EDGEBREAKER_ENCODING\",\n };\n\n const promise = DracoEncoder.Default._encodeAsync(attributes, indices, options)\n // eslint-disable-next-line github/no-then\n .then((encodedData) => {\n const dracoInfo: IKHRDracoMeshCompression = {\n bufferView: -1, // bufferView will be set to a real index later, when we write the binary and decide bufferView ordering\n attributes: encodedData.attributeIds,\n };\n const bufferView = bufferManager.createBufferView(encodedData.data);\n bufferManager.setBufferView(dracoInfo, bufferView);\n\n for (const bufferView of primitiveBufferViews) {\n this._bufferViewsUsed.add(bufferView);\n }\n for (const accessor of primitiveAccessors) {\n this._accessorsUsed.add(accessor);\n }\n\n primitive.extensions ||= {};\n primitive.extensions[NAME] = dracoInfo;\n })\n // eslint-disable-next-line github/no-then\n .catch((error) => {\n Logger.Error(\"KHR_draco_mesh_compression: Failed to export Draco-encoded primitive. Resulting glTF may be invalid. \" + error.message);\n });\n\n this._encodePromises.push(promise);\n\n this._wasUsed = true;\n }\n\n /** @internal */\n public async preGenerateBinaryAsync(bufferManager: BufferManager): Promise<void> {\n if (!this.enabled) {\n return;\n }\n\n await Promise.all(this._encodePromises);\n\n // Cull obsolete bufferViews that were replaced with Draco data\n this._bufferViewsUsed.forEach((bufferView) => {\n const references = bufferManager.getPropertiesWithBufferView(bufferView);\n const onlyUsedByEncodedPrimitives = references.every((object) => {\n return this._accessorsUsed.has(object as IAccessor); // has() can handle any object, but TS doesn't know that\n });\n if (onlyUsedByEncodedPrimitives) {\n bufferManager.removeBufferView(bufferView);\n }\n });\n\n this._bufferViewsUsed.clear();\n this._accessorsUsed.clear();\n }\n}\n\nGLTFExporter.RegisterExtension(NAME, (exporter) => new KHR_draco_mesh_compression(exporter));\n"]}
|
|
1
|
+
{"version":3,"file":"KHR_draco_mesh_compression.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/KHR_draco_mesh_compression.ts"],"names":[],"mappings":"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","sourcesContent":["import { type IGLTFExporterExtensionV2 } from \"../glTFExporterExtension\";\nimport { GLTFExporter } from \"../glTFExporter\";\nimport { MeshPrimitiveMode, type IAccessor, type IBufferView, type IKHRDracoMeshCompression, type IMeshPrimitive } from \"babylonjs-gltf2interface\";\nimport { type BufferManager } from \"../bufferManager\";\nimport { DracoEncoder } from \"core/Meshes/Compression/dracoEncoder\";\nimport { GetTypedArrayData, GetTypeByteLength } from \"core/Buffers/bufferUtils\";\nimport { GetAccessorElementCount } from \"../glTFUtilities\";\nimport { type DracoAttributeName, type IDracoAttributeData, type IDracoEncoderOptions } from \"core/Meshes/Compression/dracoEncoder.types\";\nimport { Logger } from \"core/Misc/logger\";\nimport { type Nullable } from \"core/types\";\n\nconst NAME = \"KHR_draco_mesh_compression\";\n\nfunction GetDracoAttributeName(glTFName: string): DracoAttributeName {\n if (glTFName === \"POSITION\") {\n return \"POSITION\";\n } else if (glTFName === \"NORMAL\") {\n return \"NORMAL\";\n } else if (glTFName.startsWith(\"COLOR\")) {\n return \"COLOR\";\n } else if (glTFName.startsWith(\"TEXCOORD\")) {\n return \"TEX_COORD\";\n }\n return \"GENERIC\";\n}\n\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_draco_mesh_compression/README.md)\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class KHR_draco_mesh_compression implements IGLTFExporterExtensionV2 {\n /** Name of this extension */\n public readonly name = NAME;\n\n /** Defines whether this extension is enabled */\n public enabled;\n\n /** KHR_draco_mesh_compression is required, as uncompressed fallback data is not yet implemented. */\n public required = true;\n\n /** BufferViews used for Draco data, which may be eligible for removal after Draco encoding */\n private _bufferViewsUsed: Set<IBufferView> = new Set();\n\n /** Accessors that were replaced with Draco data, which may be eligible for removal after Draco encoding */\n private _accessorsUsed: Set<IAccessor> = new Set();\n\n /** Promise pool for Draco encoding work */\n private _encodePromises: Promise<void>[] = [];\n\n private _wasUsed = false;\n\n /** @internal */\n public get wasUsed() {\n return this._wasUsed;\n }\n\n /** @internal */\n constructor(exporter: GLTFExporter) {\n this.enabled = exporter.options.meshCompressionMethod === \"Draco\" && DracoEncoder.DefaultAvailable;\n }\n\n /** @internal */\n public dispose() {}\n\n /** @internal */\n public postExportMeshPrimitive(primitive: IMeshPrimitive, bufferManager: BufferManager, accessors: IAccessor[]): void {\n if (!this.enabled) {\n return;\n }\n\n if (primitive.mode !== MeshPrimitiveMode.TRIANGLES && primitive.mode !== MeshPrimitiveMode.TRIANGLE_STRIP) {\n Logger.Warn(\"Cannot compress primitive with mode \" + primitive.mode + \".\");\n return;\n }\n\n // Collect bufferViews and accessors used by this primitive\n const primitiveBufferViews: IBufferView[] = [];\n const primitiveAccessors: IAccessor[] = [];\n\n // Prepare indices for Draco encoding\n let indices: Nullable<Uint32Array | Uint16Array> = null;\n if (primitive.indices !== undefined) {\n const accessor = accessors[primitive.indices];\n const bufferView = bufferManager.getBufferView(accessor);\n // Per exportIndices, indices must be either Uint16Array or Uint32Array\n indices = bufferManager.getData(bufferView).slice() as Uint32Array | Uint16Array;\n\n primitiveBufferViews.push(bufferView);\n primitiveAccessors.push(accessor);\n }\n\n // Prepare attributes for Draco encoding\n const attributes: IDracoAttributeData[] = [];\n for (const [name, accessorIndex] of Object.entries(primitive.attributes)) {\n const accessor = accessors[accessorIndex];\n const bufferView = bufferManager.getBufferView(accessor);\n\n const size = GetAccessorElementCount(accessor.type);\n const data = GetTypedArrayData(\n bufferManager.getData(bufferView),\n size,\n accessor.componentType,\n accessor.byteOffset || 0,\n bufferView.byteStride || GetTypeByteLength(accessor.componentType) * size,\n accessor.count,\n true\n );\n\n attributes.push({ kind: name, dracoName: GetDracoAttributeName(name), size: GetAccessorElementCount(accessor.type), data: data });\n\n primitiveBufferViews.push(bufferView);\n primitiveAccessors.push(accessor);\n }\n\n // Use sequential encoding to preserve vertex order for cases like morph targets\n const options: IDracoEncoderOptions = {\n method: primitive.targets ? \"MESH_SEQUENTIAL_ENCODING\" : \"MESH_EDGEBREAKER_ENCODING\",\n };\n\n const promise = DracoEncoder.Default._encodeAsync(attributes, indices, options)\n // eslint-disable-next-line github/no-then\n .then((encodedData) => {\n const dracoInfo: IKHRDracoMeshCompression = {\n bufferView: -1, // bufferView will be set to a real index later, when we write the binary and decide bufferView ordering\n attributes: encodedData.attributeIds,\n };\n const bufferView = bufferManager.createBufferView(encodedData.data);\n bufferManager.setBufferView(dracoInfo, bufferView);\n\n for (const bufferView of primitiveBufferViews) {\n this._bufferViewsUsed.add(bufferView);\n }\n for (const accessor of primitiveAccessors) {\n this._accessorsUsed.add(accessor);\n }\n\n primitive.extensions ||= {};\n primitive.extensions[NAME] = dracoInfo;\n })\n // eslint-disable-next-line github/no-then\n .catch((error) => {\n Logger.Error(\"KHR_draco_mesh_compression: Failed to export Draco-encoded primitive. Resulting glTF may be invalid. \" + error.message);\n });\n\n this._encodePromises.push(promise);\n\n this._wasUsed = true;\n }\n\n /** @internal */\n public async preGenerateBinaryAsync(bufferManager: BufferManager): Promise<void> {\n if (!this.enabled) {\n return;\n }\n\n await Promise.all(this._encodePromises);\n\n // Cull obsolete bufferViews that were replaced with Draco data\n this._bufferViewsUsed.forEach((bufferView) => {\n const references = bufferManager.getPropertiesWithBufferView(bufferView);\n const onlyUsedByEncodedPrimitives = references.every((object) => {\n return this._accessorsUsed.has(object as IAccessor); // has() can handle any object, but TS doesn't know that\n });\n if (onlyUsedByEncodedPrimitives) {\n bufferManager.removeBufferView(bufferView);\n }\n });\n\n this._bufferViewsUsed.clear();\n this._accessorsUsed.clear();\n }\n}\n\nGLTFExporter.RegisterExtension(NAME, (exporter) => new KHR_draco_mesh_compression(exporter));\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
3
|
-
import type
|
|
4
|
-
import type
|
|
1
|
+
import { type Nullable } from "@onerjs/core/types.js";
|
|
2
|
+
import { type Node } from "@onerjs/core/node.js";
|
|
3
|
+
import { type INode } from "babylonjs-gltf2interface";
|
|
4
|
+
import { type IGLTFExporterExtensionV2 } from "../glTFExporterExtension.js";
|
|
5
5
|
import { GLTFExporter } from "../glTFExporter.js";
|
|
6
6
|
/**
|
|
7
7
|
* [Specification](https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_lights_punctual/README.md)
|