@babylonjs/viewer 5.0.0-alpha.7 → 5.0.0-beta.2

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.
Files changed (54) hide show
  1. package/configuration/configurationCompatibility.js +1 -1
  2. package/configuration/configurationContainer.js +1 -1
  3. package/configuration/globals.js +1 -1
  4. package/configuration/index.js +2 -2
  5. package/configuration/interfaces/groundConfiguration.js.map +1 -1
  6. package/configuration/interfaces/index.js +15 -15
  7. package/configuration/loader.js +4 -2
  8. package/configuration/loader.js.map +1 -1
  9. package/configuration/mappers.js +2 -2
  10. package/configuration/mappers.js.map +1 -1
  11. package/configuration/renderOnlyLoader.js +6 -6
  12. package/configuration/types/default.js +2 -2
  13. package/configuration/types/extended.js +1 -1
  14. package/configuration/types/index.js +6 -6
  15. package/configuration/types/index.js.map +1 -1
  16. package/helper/index.d.ts +1 -1
  17. package/helper/index.js +1 -1
  18. package/helper/index.js.map +1 -1
  19. package/index.js +13 -13
  20. package/initializer.js +3 -3
  21. package/labs/environmentSerializer.js +3 -3
  22. package/labs/environmentSerializer.js.map +1 -1
  23. package/labs/texture.js +4 -4
  24. package/labs/texture.js.map +1 -1
  25. package/labs/viewerLabs.js +5 -5
  26. package/loader/modelLoader.js +6 -6
  27. package/loader/modelLoader.js.map +1 -1
  28. package/loader/plugins/extendedMaterialLoaderPlugin.js +1 -1
  29. package/loader/plugins/index.js +5 -5
  30. package/loader/plugins/telemetryLoaderPlugin.js +2 -2
  31. package/managers/observablesManager.js +1 -1
  32. package/managers/sceneManager.js +28 -28
  33. package/managers/sceneManager.js.map +1 -1
  34. package/managers/telemetryManager.js +1 -1
  35. package/model/viewerModel.js +11 -11
  36. package/optimizer/custom/extended.js +1 -1
  37. package/optimizer/custom/index.js +1 -1
  38. package/package.json +6 -6
  39. package/renderOnlyIndex.js +11 -11
  40. package/renderOnlyIndex.js.map +1 -1
  41. package/templating/plugins/hdButtonPlugin.js +3 -1
  42. package/templating/plugins/hdButtonPlugin.js.map +1 -1
  43. package/templating/plugins/printButton.js +4 -2
  44. package/templating/plugins/printButton.js.map +1 -1
  45. package/templating/templateManager.js +5 -5
  46. package/templating/templateManager.js.map +1 -1
  47. package/viewer/defaultViewer.js +13 -11
  48. package/viewer/defaultViewer.js.map +1 -1
  49. package/viewer/renderOnlyViewer.js +3 -1
  50. package/viewer/renderOnlyViewer.js.map +1 -1
  51. package/viewer/viewer.js +14 -14
  52. package/viewer/viewerManager.js +1 -1
  53. package/viewer/viewerWithTemplate.js +4 -2
  54. package/viewer/viewerWithTemplate.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"texture.js","sourceRoot":"","sources":["../../../../sourceES6/viewer/src/labs/texture.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scene } from \"@babylonjs/core/scene\";\r\nimport { CubeTexture } from \"@babylonjs/core/Materials/Textures/cubeTexture\";\r\nimport { InternalTexture, InternalTextureSource } from \"@babylonjs/core/Materials/Textures/internalTexture\";\r\nimport { Scalar } from \"@babylonjs/core/Maths/math.scalar\";\r\nimport { BaseTexture } from \"@babylonjs/core/Materials/Textures/baseTexture\";\r\nimport { Texture } from \"@babylonjs/core/Materials/Textures/texture\";\r\n\r\n/**\r\n * WebGL Pixel Formats\r\n */\r\nexport const enum PixelFormat {\r\n DEPTH_COMPONENT = 0x1902,\r\n ALPHA = 0x1906,\r\n RGB = 0x1907,\r\n RGBA = 0x1908,\r\n LUMINANCE = 0x1909,\r\n LUMINANCE_ALPHA = 0x190a,\r\n}\r\n\r\n/**\r\n * WebGL Pixel Types\r\n */\r\nexport const enum PixelType {\r\n UNSIGNED_BYTE = 0x1401,\r\n UNSIGNED_SHORT_4_4_4_4 = 0x8033,\r\n UNSIGNED_SHORT_5_5_5_1 = 0x8034,\r\n UNSIGNED_SHORT_5_6_5 = 0x8363,\r\n}\r\n\r\n/**\r\n * WebGL Texture Magnification Filter\r\n */\r\nexport const enum TextureMagFilter {\r\n NEAREST = 0x2600,\r\n LINEAR = 0x2601,\r\n}\r\n\r\n/**\r\n * WebGL Texture Minification Filter\r\n */\r\nexport const enum TextureMinFilter {\r\n NEAREST = 0x2600,\r\n LINEAR = 0x2601,\r\n NEAREST_MIPMAP_NEAREST = 0x2700,\r\n LINEAR_MIPMAP_NEAREST = 0x2701,\r\n NEAREST_MIPMAP_LINEAR = 0x2702,\r\n LINEAR_MIPMAP_LINEAR = 0x2703,\r\n}\r\n\r\n/**\r\n * WebGL Texture Wrap Modes\r\n */\r\nexport const enum TextureWrapMode {\r\n REPEAT = 0x2901,\r\n CLAMP_TO_EDGE = 0x812f,\r\n MIRRORED_REPEAT = 0x8370,\r\n}\r\n\r\n/**\r\n * Raw texture data and descriptor sufficient for WebGL texture upload\r\n */\r\nexport interface TextureData {\r\n /**\r\n * Width of image\r\n */\r\n width: number;\r\n /**\r\n * Height of image\r\n */\r\n height: number;\r\n /**\r\n * Format of pixels in data\r\n */\r\n format: PixelFormat;\r\n /**\r\n * Row byte alignment of pixels in data\r\n */\r\n alignment: number;\r\n /**\r\n * Pixel data\r\n */\r\n data: ArrayBufferView;\r\n}\r\n\r\n/**\r\n * Wraps sampling parameters for a WebGL texture\r\n */\r\nexport interface SamplingParameters {\r\n /**\r\n * Magnification mode when upsampling from a WebGL texture\r\n */\r\n magFilter?: TextureMagFilter;\r\n /**\r\n * Minification mode when upsampling from a WebGL texture\r\n */\r\n minFilter?: TextureMinFilter;\r\n /**\r\n * X axis wrapping mode when sampling out of a WebGL texture bounds\r\n */\r\n wrapS?: TextureWrapMode;\r\n /**\r\n * Y axis wrapping mode when sampling out of a WebGL texture bounds\r\n */\r\n wrapT?: TextureWrapMode;\r\n /**\r\n * Anisotropic filtering samples\r\n */\r\n maxAnisotropy?: number;\r\n}\r\n\r\n/**\r\n * Represents a valid WebGL texture source for use in texImage2D\r\n */\r\nexport type TextureSource = TextureData | ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement;\r\n\r\n/**\r\n * A generic set of texture mipmaps (where index 0 has the largest dimension)\r\n */\r\nexport type Mipmaps<T> = Array<T>;\r\n\r\n/**\r\n * A set of 6 cubemap arranged in the order [+x, -x, +y, -y, +z, -z]\r\n */\r\nexport type Faces<T> = Array<T>;\r\n\r\n/**\r\n * A set of texture mipmaps specifically for 2D textures in WebGL (where index 0 has the largest dimension)\r\n */\r\nexport type Mipmaps2D = Mipmaps<TextureSource>;\r\n\r\n/**\r\n * A set of texture mipmaps specifically for cubemap textures in WebGL (where index 0 has the largest dimension)\r\n */\r\nexport type MipmapsCube = Mipmaps<Faces<TextureSource>>;\r\n\r\n/**\r\n * A minimal WebGL cubemap descriptor\r\n */\r\nexport class TextureCube {\r\n\r\n /**\r\n * Returns the width of a face of the texture or 0 if not available\r\n */\r\n public get Width(): number {\r\n return (this.source && this.source[0] && this.source[0][0]) ? this.source[0][0].width : 0;\r\n }\r\n\r\n /**\r\n * Returns the height of a face of the texture or 0 if not available\r\n */\r\n public get Height(): number {\r\n return (this.source && this.source[0] && this.source[0][0]) ? this.source[0][0].height : 0;\r\n }\r\n\r\n /**\r\n * constructor\r\n * @param internalFormat WebGL pixel format for the texture on the GPU\r\n * @param type WebGL pixel type of the supplied data and texture on the GPU\r\n * @param source An array containing mipmap levels of faces, where each mipmap level is an array of faces and each face is a TextureSource object\r\n */\r\n constructor(public internalFormat: PixelFormat, public type: PixelType, public source: MipmapsCube = []) { }\r\n}\r\n\r\n/**\r\n * A static class providing methods to aid working with Bablyon textures.\r\n */\r\nexport class TextureUtils {\r\n\r\n /**\r\n * A prefix used when storing a babylon texture object reference on a Spectre texture object\r\n */\r\n public static BabylonTextureKeyPrefix = '__babylonTexture_';\r\n\r\n /**\r\n * Controls anisotropic filtering for deserialized textures.\r\n */\r\n public static MaxAnisotropy = 4;\r\n\r\n /**\r\n * Returns a BabylonCubeTexture instance from a Spectre texture cube, subject to sampling parameters.\r\n * If such a texture has already been requested in the past, this texture will be returned, otherwise a new one will be created.\r\n * The advantage of this is to enable working with texture objects without the need to initialize on the GPU until desired.\r\n * @param scene A Babylon Scene instance\r\n * @param textureCube A Spectre TextureCube object\r\n * @param parameters WebGL texture sampling parameters\r\n * @param automaticMipmaps Pass true to enable automatic mipmap generation where possible (requires power of images)\r\n * @param environment Specifies that the texture will be used as an environment\r\n * @param singleLod Specifies that the texture will be a singleLod (for environment)\r\n * @return Babylon cube texture\r\n */\r\n public static GetBabylonCubeTexture(scene: Scene, textureCube: TextureCube, automaticMipmaps: boolean, environment = false, singleLod = false): CubeTexture {\r\n if (!textureCube) { throw new Error(\"no texture cube provided\"); }\r\n\r\n var parameters: SamplingParameters;\r\n if (environment) {\r\n parameters = singleLod ? TextureUtils._EnvironmentSingleMipSampling : TextureUtils._EnvironmentSampling;\r\n }\r\n else {\r\n parameters = {\r\n magFilter: TextureMagFilter.NEAREST,\r\n minFilter: TextureMinFilter.NEAREST,\r\n wrapS: TextureWrapMode.CLAMP_TO_EDGE,\r\n wrapT: TextureWrapMode.CLAMP_TO_EDGE\r\n };\r\n }\r\n\r\n let key = TextureUtils.BabylonTextureKeyPrefix + parameters.magFilter + '' + parameters.minFilter + '' + parameters.wrapS + '' + parameters.wrapT;\r\n\r\n let babylonTexture: CubeTexture = (<any>textureCube)[key];\r\n\r\n if (!babylonTexture) {\r\n\r\n //initialize babylon texture\r\n babylonTexture = new CubeTexture('', scene);\r\n if (environment) {\r\n babylonTexture.lodGenerationOffset = TextureUtils.EnvironmentLODOffset;\r\n babylonTexture.lodGenerationScale = TextureUtils.EnvironmentLODScale;\r\n }\r\n\r\n babylonTexture.gammaSpace = false;\r\n\r\n let internalTexture = new InternalTexture(scene.getEngine(), InternalTextureSource.CubeRaw);\r\n let glTexture = internalTexture._hardwareTexture?.underlyingResource;\r\n //babylon properties\r\n internalTexture.isCube = true;\r\n internalTexture.generateMipMaps = false;\r\n\r\n babylonTexture._texture = internalTexture;\r\n\r\n TextureUtils.ApplySamplingParameters(babylonTexture, parameters);\r\n\r\n let maxMipLevel = automaticMipmaps ? 0 : textureCube.source.length - 1;\r\n let texturesUploaded = 0;\r\n\r\n var textureComplete = function() {\r\n return texturesUploaded === ((maxMipLevel + 1) * 6);\r\n };\r\n\r\n var uploadFace = function(i: number, level: number, face: TextureSource) {\r\n if (!glTexture) { return; }\r\n\r\n if (i === 0 && level === 0) {\r\n internalTexture.width = face.width;\r\n internalTexture.height = face.height;\r\n }\r\n\r\n let gl = (<any>(scene.getEngine()))._gl;\r\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, glTexture);\r\n scene.getEngine()._unpackFlipY(false);\r\n if (face instanceof HTMLElement || face instanceof ImageData) {\r\n gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level, textureCube.internalFormat, textureCube.internalFormat, textureCube.type, <any>face);\r\n } else {\r\n let textureData = <TextureData>face;\r\n gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level, textureCube.internalFormat, textureData.width, textureData.height, 0, textureData.format, textureCube.type, textureData.data);\r\n }\r\n\r\n texturesUploaded++;\r\n\r\n if (textureComplete()) {\r\n //generate mipmaps\r\n if (automaticMipmaps) {\r\n let w = face.width;\r\n let h = face.height;\r\n let isPot = (((w !== 0) && (w & (w - 1))) === 0) && (((h !== 0) && (h & (h - 1))) === 0);\r\n if (isPot) {\r\n gl.generateMipmap(gl.TEXTURE_CUBE_MAP);\r\n }\r\n }\r\n\r\n // Upload Separate lods in case there is no support for texture lod.\r\n if (environment && !scene.getEngine().getCaps().textureLOD && !singleLod) {\r\n const mipSlices = 3;\r\n for (let i = 0; i < mipSlices; i++) {\r\n let lodKey = TextureUtils.BabylonTextureKeyPrefix + 'lod' + i;\r\n let lod: CubeTexture = (<any>textureCube)[lodKey];\r\n\r\n //initialize lod texture if it doesn't already exist\r\n if (lod == null && textureCube.Width) {\r\n //compute LOD from even spacing in smoothness (matching shader calculation)\r\n let smoothness = i / (mipSlices - 1);\r\n let roughness = 1 - smoothness;\r\n const kMinimumVariance = 0.0005;\r\n let alphaG = roughness * roughness + kMinimumVariance;\r\n let microsurfaceAverageSlopeTexels = alphaG * textureCube.Width;\r\n\r\n let environmentSpecularLOD = TextureUtils.EnvironmentLODScale * (Scalar.Log2(microsurfaceAverageSlopeTexels)) + TextureUtils.EnvironmentLODOffset;\r\n\r\n let maxLODIndex = textureCube.source.length - 1;\r\n let mipmapIndex = Math.min(Math.max(Math.round(environmentSpecularLOD), 0), maxLODIndex);\r\n\r\n lod = TextureUtils.GetBabylonCubeTexture(scene, new TextureCube(PixelFormat.RGBA, PixelType.UNSIGNED_BYTE, [textureCube.source[mipmapIndex]]), false, true, true);\r\n\r\n if (i === 0) {\r\n internalTexture._lodTextureLow = lod;\r\n }\r\n else if (i === 1) {\r\n internalTexture._lodTextureMid = lod;\r\n }\r\n else {\r\n internalTexture._lodTextureHigh = lod;\r\n }\r\n\r\n (<any>textureCube)[lodKey] = lod;\r\n }\r\n }\r\n }\r\n\r\n internalTexture.isReady = true;\r\n }\r\n\r\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, null);\r\n scene.getEngine().resetTextureCache();\r\n };\r\n\r\n for (let i = 0; i <= maxMipLevel; i++) {\r\n let faces = textureCube.source[i];\r\n for (let j = 0; j < faces.length; j++) {\r\n let face = faces[j];\r\n if (face instanceof HTMLImageElement && !face.complete) {\r\n face.addEventListener('load', () => {\r\n uploadFace(j, i, face);\r\n }, false);\r\n } else {\r\n uploadFace(j, i, face);\r\n }\r\n }\r\n }\r\n\r\n scene.getEngine().resetTextureCache();\r\n\r\n babylonTexture.isReady = () => {\r\n return textureComplete();\r\n };\r\n\r\n (<any>textureCube)[key] = babylonTexture;\r\n }\r\n\r\n return babylonTexture;\r\n }\r\n\r\n /**\r\n * Applies Spectre SamplingParameters to a Babylon texture by directly setting texture parameters on the internal WebGLTexture as well as setting Babylon fields\r\n * @param babylonTexture Babylon texture to apply texture to (requires the Babylon texture has an initialize _texture field)\r\n * @param parameters Spectre SamplingParameters to apply\r\n */\r\n public static ApplySamplingParameters(babylonTexture: BaseTexture, parameters: SamplingParameters) {\r\n let scene = babylonTexture.getScene();\r\n if (!scene) { return; }\r\n let gl = (<any>(scene.getEngine()))._gl;\r\n\r\n let target = babylonTexture.isCube ? gl.TEXTURE_CUBE_MAP : gl.TEXTURE_2D;\r\n\r\n let internalTexture = babylonTexture._texture;\r\n if (!internalTexture) { return; }\r\n let glTexture = internalTexture._hardwareTexture?.underlyingResource;\r\n gl.bindTexture(target, glTexture);\r\n\r\n if (parameters.magFilter != null) { gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, parameters.magFilter); }\r\n if (parameters.minFilter != null) { gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, parameters.minFilter); }\r\n if (parameters.wrapS != null) { gl.texParameteri(target, gl.TEXTURE_WRAP_S, parameters.wrapS); }\r\n if (parameters.wrapT != null) { gl.texParameteri(target, gl.TEXTURE_WRAP_T, parameters.wrapT); }\r\n\r\n //set babylon wrap modes from sampling parameter\r\n switch (parameters.wrapS) {\r\n case TextureWrapMode.REPEAT: babylonTexture.wrapU = Texture.WRAP_ADDRESSMODE; break;\r\n case TextureWrapMode.CLAMP_TO_EDGE: babylonTexture.wrapU = Texture.CLAMP_ADDRESSMODE; break;\r\n case TextureWrapMode.MIRRORED_REPEAT: babylonTexture.wrapU = Texture.MIRROR_ADDRESSMODE; break;\r\n default: babylonTexture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n\r\n switch (parameters.wrapT) {\r\n case TextureWrapMode.REPEAT: babylonTexture.wrapV = Texture.WRAP_ADDRESSMODE; break;\r\n case TextureWrapMode.CLAMP_TO_EDGE: babylonTexture.wrapV = Texture.CLAMP_ADDRESSMODE; break;\r\n case TextureWrapMode.MIRRORED_REPEAT: babylonTexture.wrapV = Texture.MIRROR_ADDRESSMODE; break;\r\n default: babylonTexture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n\r\n if (parameters.maxAnisotropy != null && parameters.maxAnisotropy > 1) {\r\n let anisotropicExt = gl.getExtension('EXT_texture_filter_anisotropic');\r\n if (anisotropicExt) {\r\n let maxAnisotropicSamples = gl.getParameter(anisotropicExt.MAX_TEXTURE_MAX_ANISOTROPY_EXT);\r\n let maxAnisotropy = Math.min(parameters.maxAnisotropy, maxAnisotropicSamples);\r\n gl.texParameterf(target, anisotropicExt.TEXTURE_MAX_ANISOTROPY_EXT, maxAnisotropy);\r\n babylonTexture.anisotropicFilteringLevel = maxAnisotropy;\r\n }\r\n }\r\n\r\n gl.bindTexture(target, null);\r\n scene.getEngine().resetTextureCache();\r\n }\r\n\r\n private static _EnvironmentSampling: SamplingParameters = {\r\n magFilter: TextureMagFilter.LINEAR,\r\n minFilter: TextureMinFilter.LINEAR_MIPMAP_LINEAR,\r\n wrapS: TextureWrapMode.CLAMP_TO_EDGE,\r\n wrapT: TextureWrapMode.CLAMP_TO_EDGE,\r\n maxAnisotropy: 1\r\n };\r\n\r\n private static _EnvironmentSingleMipSampling: SamplingParameters = {\r\n magFilter: TextureMagFilter.LINEAR,\r\n minFilter: TextureMinFilter.LINEAR,\r\n wrapS: TextureWrapMode.CLAMP_TO_EDGE,\r\n wrapT: TextureWrapMode.CLAMP_TO_EDGE,\r\n maxAnisotropy: 1\r\n };\r\n\r\n //from \"/Internal/Lighting.EnvironmentFilterScale\" in Engine/*/Configuration.cpp\r\n /**\r\n * Environment preprocessing dedicated value (Internal Use or Advanced only).\r\n */\r\n public static EnvironmentLODScale = 0.8;\r\n /**\r\n * Environment preprocessing dedicated value (Internal Use or Advanced only)..\r\n */\r\n public static EnvironmentLODOffset = 1.0;\r\n}"]}
1
+ {"version":3,"file":"texture.js","sourceRoot":"","sources":["../../../../sourceES6/viewer/src/labs/texture.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scene } from \"@babylonjs/core/scene\";\r\nimport { CubeTexture } from \"@babylonjs/core/Materials/Textures/cubeTexture\";\r\nimport { InternalTexture, InternalTextureSource } from \"@babylonjs/core/Materials/Textures/internalTexture\";\r\nimport { Scalar } from \"@babylonjs/core/Maths/math.scalar\";\r\nimport { BaseTexture } from \"@babylonjs/core/Materials/Textures/baseTexture\";\r\nimport { Texture } from \"@babylonjs/core/Materials/Textures/texture\";\r\n\r\n/**\r\n * WebGL Pixel Formats\r\n */\r\nexport const enum PixelFormat {\r\n DEPTH_COMPONENT = 0x1902,\r\n ALPHA = 0x1906,\r\n RGB = 0x1907,\r\n RGBA = 0x1908,\r\n LUMINANCE = 0x1909,\r\n LUMINANCE_ALPHA = 0x190a,\r\n}\r\n\r\n/**\r\n * WebGL Pixel Types\r\n */\r\nexport const enum PixelType {\r\n UNSIGNED_BYTE = 0x1401,\r\n UNSIGNED_SHORT_4_4_4_4 = 0x8033,\r\n UNSIGNED_SHORT_5_5_5_1 = 0x8034,\r\n UNSIGNED_SHORT_5_6_5 = 0x8363,\r\n}\r\n\r\n/**\r\n * WebGL Texture Magnification Filter\r\n */\r\nexport const enum TextureMagFilter {\r\n NEAREST = 0x2600,\r\n LINEAR = 0x2601,\r\n}\r\n\r\n/**\r\n * WebGL Texture Minification Filter\r\n */\r\nexport const enum TextureMinFilter {\r\n NEAREST = 0x2600,\r\n LINEAR = 0x2601,\r\n NEAREST_MIPMAP_NEAREST = 0x2700,\r\n LINEAR_MIPMAP_NEAREST = 0x2701,\r\n NEAREST_MIPMAP_LINEAR = 0x2702,\r\n LINEAR_MIPMAP_LINEAR = 0x2703,\r\n}\r\n\r\n/**\r\n * WebGL Texture Wrap Modes\r\n */\r\nexport const enum TextureWrapMode {\r\n REPEAT = 0x2901,\r\n CLAMP_TO_EDGE = 0x812f,\r\n MIRRORED_REPEAT = 0x8370,\r\n}\r\n\r\n/**\r\n * Raw texture data and descriptor sufficient for WebGL texture upload\r\n */\r\nexport interface TextureData {\r\n /**\r\n * Width of image\r\n */\r\n width: number;\r\n /**\r\n * Height of image\r\n */\r\n height: number;\r\n /**\r\n * Format of pixels in data\r\n */\r\n format: PixelFormat;\r\n /**\r\n * Row byte alignment of pixels in data\r\n */\r\n alignment: number;\r\n /**\r\n * Pixel data\r\n */\r\n data: ArrayBufferView;\r\n}\r\n\r\n/**\r\n * Wraps sampling parameters for a WebGL texture\r\n */\r\nexport interface SamplingParameters {\r\n /**\r\n * Magnification mode when upsampling from a WebGL texture\r\n */\r\n magFilter?: TextureMagFilter;\r\n /**\r\n * Minification mode when upsampling from a WebGL texture\r\n */\r\n minFilter?: TextureMinFilter;\r\n /**\r\n * X axis wrapping mode when sampling out of a WebGL texture bounds\r\n */\r\n wrapS?: TextureWrapMode;\r\n /**\r\n * Y axis wrapping mode when sampling out of a WebGL texture bounds\r\n */\r\n wrapT?: TextureWrapMode;\r\n /**\r\n * Anisotropic filtering samples\r\n */\r\n maxAnisotropy?: number;\r\n}\r\n\r\n/**\r\n * Represents a valid WebGL texture source for use in texImage2D\r\n */\r\nexport type TextureSource = TextureData | ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement;\r\n\r\n/**\r\n * A generic set of texture mipmaps (where index 0 has the largest dimension)\r\n */\r\nexport type Mipmaps<T> = Array<T>;\r\n\r\n/**\r\n * A set of 6 cubemap arranged in the order [+x, -x, +y, -y, +z, -z]\r\n */\r\nexport type Faces<T> = Array<T>;\r\n\r\n/**\r\n * A set of texture mipmaps specifically for 2D textures in WebGL (where index 0 has the largest dimension)\r\n */\r\nexport type Mipmaps2D = Mipmaps<TextureSource>;\r\n\r\n/**\r\n * A set of texture mipmaps specifically for cubemap textures in WebGL (where index 0 has the largest dimension)\r\n */\r\nexport type MipmapsCube = Mipmaps<Faces<TextureSource>>;\r\n\r\n/**\r\n * A minimal WebGL cubemap descriptor\r\n */\r\nexport class TextureCube {\r\n\r\n /**\r\n * Returns the width of a face of the texture or 0 if not available\r\n */\r\n public get Width(): number {\r\n return (this.source && this.source[0] && this.source[0][0]) ? this.source[0][0].width : 0;\r\n }\r\n\r\n /**\r\n * Returns the height of a face of the texture or 0 if not available\r\n */\r\n public get Height(): number {\r\n return (this.source && this.source[0] && this.source[0][0]) ? this.source[0][0].height : 0;\r\n }\r\n\r\n /**\r\n * constructor\r\n * @param internalFormat WebGL pixel format for the texture on the GPU\r\n * @param type WebGL pixel type of the supplied data and texture on the GPU\r\n * @param source An array containing mipmap levels of faces, where each mipmap level is an array of faces and each face is a TextureSource object\r\n */\r\n constructor(public internalFormat: PixelFormat, public type: PixelType, public source: MipmapsCube = []) { }\r\n}\r\n\r\n/**\r\n * A static class providing methods to aid working with Bablyon textures.\r\n */\r\nexport class TextureUtils {\r\n\r\n /**\r\n * A prefix used when storing a babylon texture object reference on a Spectre texture object\r\n */\r\n public static BabylonTextureKeyPrefix = '__babylonTexture_';\r\n\r\n /**\r\n * Controls anisotropic filtering for deserialized textures.\r\n */\r\n public static MaxAnisotropy = 4;\r\n\r\n /**\r\n * Returns a BabylonCubeTexture instance from a Spectre texture cube, subject to sampling parameters.\r\n * If such a texture has already been requested in the past, this texture will be returned, otherwise a new one will be created.\r\n * The advantage of this is to enable working with texture objects without the need to initialize on the GPU until desired.\r\n * @param scene A Babylon Scene instance\r\n * @param textureCube A Spectre TextureCube object\r\n * @param parameters WebGL texture sampling parameters\r\n * @param automaticMipmaps Pass true to enable automatic mipmap generation where possible (requires power of images)\r\n * @param environment Specifies that the texture will be used as an environment\r\n * @param singleLod Specifies that the texture will be a singleLod (for environment)\r\n * @return Babylon cube texture\r\n */\r\n public static GetBabylonCubeTexture(scene: Scene, textureCube: TextureCube, automaticMipmaps: boolean, environment = false, singleLod = false): CubeTexture {\r\n if (!textureCube) { throw new Error(\"no texture cube provided\"); }\r\n\r\n var parameters: SamplingParameters;\r\n if (environment) {\r\n parameters = singleLod ? TextureUtils._EnvironmentSingleMipSampling : TextureUtils._EnvironmentSampling;\r\n }\r\n else {\r\n parameters = {\r\n magFilter: TextureMagFilter.NEAREST,\r\n minFilter: TextureMinFilter.NEAREST,\r\n wrapS: TextureWrapMode.CLAMP_TO_EDGE,\r\n wrapT: TextureWrapMode.CLAMP_TO_EDGE\r\n };\r\n }\r\n\r\n let key = TextureUtils.BabylonTextureKeyPrefix + parameters.magFilter + '' + parameters.minFilter + '' + parameters.wrapS + '' + parameters.wrapT;\r\n\r\n let babylonTexture: CubeTexture = (<any>textureCube)[key];\r\n\r\n if (!babylonTexture) {\r\n\r\n //initialize babylon texture\r\n babylonTexture = new CubeTexture('', scene);\r\n if (environment) {\r\n babylonTexture.lodGenerationOffset = TextureUtils.EnvironmentLODOffset;\r\n babylonTexture.lodGenerationScale = TextureUtils.EnvironmentLODScale;\r\n }\r\n\r\n babylonTexture.gammaSpace = false;\r\n\r\n let internalTexture = new InternalTexture(scene.getEngine(), InternalTextureSource.CubeRaw);\r\n let glTexture = internalTexture._hardwareTexture?.underlyingResource;\r\n //babylon properties\r\n internalTexture.isCube = true;\r\n internalTexture.generateMipMaps = false;\r\n\r\n babylonTexture._texture = internalTexture;\r\n\r\n TextureUtils.ApplySamplingParameters(babylonTexture, parameters);\r\n\r\n let maxMipLevel = automaticMipmaps ? 0 : textureCube.source.length - 1;\r\n let texturesUploaded = 0;\r\n\r\n var textureComplete = function () {\r\n return texturesUploaded === ((maxMipLevel + 1) * 6);\r\n };\r\n\r\n var uploadFace = function (i: number, level: number, face: TextureSource) {\r\n if (!glTexture) { return; }\r\n\r\n if (i === 0 && level === 0) {\r\n internalTexture.width = face.width;\r\n internalTexture.height = face.height;\r\n }\r\n\r\n let gl = (<any>(scene.getEngine()))._gl;\r\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, glTexture);\r\n scene.getEngine()._unpackFlipY(false);\r\n if (face instanceof HTMLElement || face instanceof ImageData) {\r\n gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level, textureCube.internalFormat, textureCube.internalFormat, textureCube.type, <any>face);\r\n } else {\r\n let textureData = <TextureData>face;\r\n gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level, textureCube.internalFormat, textureData.width, textureData.height, 0, textureData.format, textureCube.type, textureData.data);\r\n }\r\n\r\n texturesUploaded++;\r\n\r\n if (textureComplete()) {\r\n //generate mipmaps\r\n if (automaticMipmaps) {\r\n let w = face.width;\r\n let h = face.height;\r\n let isPot = (((w !== 0) && (w & (w - 1))) === 0) && (((h !== 0) && (h & (h - 1))) === 0);\r\n if (isPot) {\r\n gl.generateMipmap(gl.TEXTURE_CUBE_MAP);\r\n }\r\n }\r\n\r\n // Upload Separate lods in case there is no support for texture lod.\r\n if (environment && !scene.getEngine().getCaps().textureLOD && !singleLod) {\r\n const mipSlices = 3;\r\n for (let i = 0; i < mipSlices; i++) {\r\n let lodKey = TextureUtils.BabylonTextureKeyPrefix + 'lod' + i;\r\n let lod: CubeTexture = (<any>textureCube)[lodKey];\r\n\r\n //initialize lod texture if it doesn't already exist\r\n if (lod == null && textureCube.Width) {\r\n //compute LOD from even spacing in smoothness (matching shader calculation)\r\n let smoothness = i / (mipSlices - 1);\r\n let roughness = 1 - smoothness;\r\n const kMinimumVariance = 0.0005;\r\n let alphaG = roughness * roughness + kMinimumVariance;\r\n let microsurfaceAverageSlopeTexels = alphaG * textureCube.Width;\r\n\r\n let environmentSpecularLOD = TextureUtils.EnvironmentLODScale * (Scalar.Log2(microsurfaceAverageSlopeTexels)) + TextureUtils.EnvironmentLODOffset;\r\n\r\n let maxLODIndex = textureCube.source.length - 1;\r\n let mipmapIndex = Math.min(Math.max(Math.round(environmentSpecularLOD), 0), maxLODIndex);\r\n\r\n lod = TextureUtils.GetBabylonCubeTexture(scene, new TextureCube(PixelFormat.RGBA, PixelType.UNSIGNED_BYTE, [textureCube.source[mipmapIndex]]), false, true, true);\r\n\r\n if (i === 0) {\r\n internalTexture._lodTextureLow = lod;\r\n }\r\n else if (i === 1) {\r\n internalTexture._lodTextureMid = lod;\r\n }\r\n else {\r\n internalTexture._lodTextureHigh = lod;\r\n }\r\n\r\n (<any>textureCube)[lodKey] = lod;\r\n }\r\n }\r\n }\r\n\r\n internalTexture.isReady = true;\r\n }\r\n\r\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, null);\r\n scene.getEngine().resetTextureCache();\r\n };\r\n\r\n for (let i = 0; i <= maxMipLevel; i++) {\r\n let faces = textureCube.source[i];\r\n for (let j = 0; j < faces.length; j++) {\r\n let face = faces[j];\r\n if (face instanceof HTMLImageElement && !face.complete) {\r\n face.addEventListener('load', () => {\r\n uploadFace(j, i, face);\r\n }, false);\r\n } else {\r\n uploadFace(j, i, face);\r\n }\r\n }\r\n }\r\n\r\n scene.getEngine().resetTextureCache();\r\n\r\n babylonTexture.isReady = () => {\r\n return textureComplete();\r\n };\r\n\r\n (<any>textureCube)[key] = babylonTexture;\r\n }\r\n\r\n return babylonTexture;\r\n }\r\n\r\n /**\r\n * Applies Spectre SamplingParameters to a Babylon texture by directly setting texture parameters on the internal WebGLTexture as well as setting Babylon fields\r\n * @param babylonTexture Babylon texture to apply texture to (requires the Babylon texture has an initialize _texture field)\r\n * @param parameters Spectre SamplingParameters to apply\r\n */\r\n public static ApplySamplingParameters(babylonTexture: BaseTexture, parameters: SamplingParameters) {\r\n let scene = babylonTexture.getScene();\r\n if (!scene) { return; }\r\n let gl = (<any>(scene.getEngine()))._gl;\r\n\r\n let target = babylonTexture.isCube ? gl.TEXTURE_CUBE_MAP : gl.TEXTURE_2D;\r\n\r\n let internalTexture = babylonTexture._texture;\r\n if (!internalTexture) { return; }\r\n let glTexture = internalTexture._hardwareTexture?.underlyingResource;\r\n gl.bindTexture(target, glTexture);\r\n\r\n if (parameters.magFilter != null) { gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, parameters.magFilter); }\r\n if (parameters.minFilter != null) { gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, parameters.minFilter); }\r\n if (parameters.wrapS != null) { gl.texParameteri(target, gl.TEXTURE_WRAP_S, parameters.wrapS); }\r\n if (parameters.wrapT != null) { gl.texParameteri(target, gl.TEXTURE_WRAP_T, parameters.wrapT); }\r\n\r\n //set babylon wrap modes from sampling parameter\r\n switch (parameters.wrapS) {\r\n case TextureWrapMode.REPEAT: babylonTexture.wrapU = Texture.WRAP_ADDRESSMODE; break;\r\n case TextureWrapMode.CLAMP_TO_EDGE: babylonTexture.wrapU = Texture.CLAMP_ADDRESSMODE; break;\r\n case TextureWrapMode.MIRRORED_REPEAT: babylonTexture.wrapU = Texture.MIRROR_ADDRESSMODE; break;\r\n default: babylonTexture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n\r\n switch (parameters.wrapT) {\r\n case TextureWrapMode.REPEAT: babylonTexture.wrapV = Texture.WRAP_ADDRESSMODE; break;\r\n case TextureWrapMode.CLAMP_TO_EDGE: babylonTexture.wrapV = Texture.CLAMP_ADDRESSMODE; break;\r\n case TextureWrapMode.MIRRORED_REPEAT: babylonTexture.wrapV = Texture.MIRROR_ADDRESSMODE; break;\r\n default: babylonTexture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n\r\n if (parameters.maxAnisotropy != null && parameters.maxAnisotropy > 1) {\r\n let anisotropicExt = gl.getExtension('EXT_texture_filter_anisotropic');\r\n if (anisotropicExt) {\r\n let maxAnisotropicSamples = gl.getParameter(anisotropicExt.MAX_TEXTURE_MAX_ANISOTROPY_EXT);\r\n let maxAnisotropy = Math.min(parameters.maxAnisotropy, maxAnisotropicSamples);\r\n gl.texParameterf(target, anisotropicExt.TEXTURE_MAX_ANISOTROPY_EXT, maxAnisotropy);\r\n babylonTexture.anisotropicFilteringLevel = maxAnisotropy;\r\n }\r\n }\r\n\r\n gl.bindTexture(target, null);\r\n scene.getEngine().resetTextureCache();\r\n }\r\n\r\n private static _EnvironmentSampling: SamplingParameters = {\r\n magFilter: TextureMagFilter.LINEAR,\r\n minFilter: TextureMinFilter.LINEAR_MIPMAP_LINEAR,\r\n wrapS: TextureWrapMode.CLAMP_TO_EDGE,\r\n wrapT: TextureWrapMode.CLAMP_TO_EDGE,\r\n maxAnisotropy: 1\r\n };\r\n\r\n private static _EnvironmentSingleMipSampling: SamplingParameters = {\r\n magFilter: TextureMagFilter.LINEAR,\r\n minFilter: TextureMinFilter.LINEAR,\r\n wrapS: TextureWrapMode.CLAMP_TO_EDGE,\r\n wrapT: TextureWrapMode.CLAMP_TO_EDGE,\r\n maxAnisotropy: 1\r\n };\r\n\r\n //from \"/Internal/Lighting.EnvironmentFilterScale\" in Engine/*/Configuration.cpp\r\n /**\r\n * Environment preprocessing dedicated value (Internal Use or Advanced only).\r\n */\r\n public static EnvironmentLODScale = 0.8;\r\n /**\r\n * Environment preprocessing dedicated value (Internal Use or Advanced only)..\r\n */\r\n public static EnvironmentLODOffset = 1.0;\r\n}"]}
@@ -1,8 +1,8 @@
1
- import { EnvironmentDeserializer } from "./environmentSerializer";
2
- import { Vector3, Quaternion, Matrix, TmpVectors } from "@babylonjs/core/Maths/math.vector";
3
- import { SphericalPolynomial } from "@babylonjs/core/Maths/sphericalPolynomial";
4
- import { TextureUtils } from "./texture";
5
- import { Axis } from "@babylonjs/core/Maths/math.axis";
1
+ import { EnvironmentDeserializer } from "./environmentSerializer.js";
2
+ import { Vector3, Quaternion, Matrix, TmpVectors } from "@babylonjs/core/Maths/math.vector.js";
3
+ import { SphericalPolynomial } from "@babylonjs/core/Maths/sphericalPolynomial.js";
4
+ import { TextureUtils } from "./texture.js";
5
+ import { Axis } from "@babylonjs/core/Maths/math.axis.js";
6
6
  /**
7
7
  * The ViewerLabs class will hold functions that are not (!) backwards compatible.
8
8
  * The APIs in all labs-related classes and configuration might change.
@@ -1,9 +1,9 @@
1
- import { GLTFLoaderAnimationStartMode } from "@babylonjs/loaders/glTF/glTFFileLoader";
2
- import { Tools } from '@babylonjs/core/Misc/tools';
3
- import { SceneLoader } from '@babylonjs/core/Loading/sceneLoader';
4
- import { Tags } from '@babylonjs/core/Misc/tags';
5
- import { ModelState, ViewerModel } from '../model/viewerModel';
6
- import { getLoaderPluginByName } from './plugins/';
1
+ import { GLTFLoaderAnimationStartMode } from "@babylonjs/loaders/glTF/glTFFileLoader.js";
2
+ import { Tools } from '@babylonjs/core/Misc/tools.js';
3
+ import { SceneLoader } from '@babylonjs/core/Loading/sceneLoader.js';
4
+ import { Tags } from '@babylonjs/core/Misc/tags.js';
5
+ import { ModelState, ViewerModel } from '../model/viewerModel.js';
6
+ import { getLoaderPluginByName } from './plugins/.js';
7
7
  /**
8
8
  * An instance of the class is in charge of loading the model correctly.
9
9
  * This class will continously be expended with tasks required from the specific loaders Babylon has.
@@ -1 +1 @@
1
- {"version":3,"file":"modelLoader.js","sourceRoot":"","sources":["../../../../sourceES6/viewer/src/loader/modelLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import {GLTFFileLoader, GLTFLoaderAnimationStartMode} from \"@babylonjs/loaders/glTF/glTFFileLoader\"\r\nimport { ISceneLoaderPlugin, ISceneLoaderPluginAsync } from '@babylonjs/core/Loading/sceneLoader';\r\nimport { Tools } from '@babylonjs/core/Misc/tools';\r\nimport { SceneLoader } from '@babylonjs/core/Loading/sceneLoader';\r\nimport { Tags } from '@babylonjs/core/Misc/tags';\r\n\r\nimport { ConfigurationContainer } from '../configuration/configurationContainer';\r\nimport { IModelConfiguration } from '../configuration/interfaces/modelConfiguration';\r\nimport { ObservablesManager } from '../managers/observablesManager';\r\nimport { ModelState, ViewerModel } from '../model/viewerModel';\r\nimport { getLoaderPluginByName, ILoaderPlugin } from './plugins/';\r\n\r\n/**\r\n * An instance of the class is in charge of loading the model correctly.\r\n * This class will continously be expended with tasks required from the specific loaders Babylon has.\r\n *\r\n * A Model loader is unique per (Abstract)Viewer. It is being generated by the viewer\r\n */\r\nexport class ModelLoader {\r\n\r\n private _loadId: number;\r\n private _disposed = false;\r\n\r\n private _loaders: Array<ISceneLoaderPlugin | ISceneLoaderPluginAsync>;\r\n\r\n private _plugins: Array<ILoaderPlugin>;\r\n\r\n private _baseUrl: string;\r\n\r\n public get baseUrl(): string {\r\n return this._baseUrl;\r\n }\r\n\r\n /**\r\n * Create a new Model loader\r\n * @param _viewer the viewer using this model loader\r\n */\r\n constructor(private _observablesManager: ObservablesManager, private _configurationContainer?: ConfigurationContainer) {\r\n this._loaders = [];\r\n this._loadId = 0;\r\n this._plugins = [];\r\n }\r\n\r\n /**\r\n * Adds a new plugin to the loader process.\r\n *\r\n * @param plugin the plugin name or the plugin itself\r\n */\r\n public addPlugin(plugin: ILoaderPlugin | string) {\r\n let actualPlugin: ILoaderPlugin = {};\r\n if (typeof plugin === 'string') {\r\n let loadedPlugin = getLoaderPluginByName(plugin);\r\n if (loadedPlugin) {\r\n actualPlugin = loadedPlugin;\r\n }\r\n } else {\r\n actualPlugin = plugin;\r\n }\r\n if (actualPlugin && this._plugins.indexOf(actualPlugin) === -1) {\r\n this._plugins.push(actualPlugin);\r\n }\r\n }\r\n\r\n /**\r\n * Load a model using predefined configuration\r\n * @param modelConfiguration the modelConfiguration to use to load the model\r\n */\r\n public load(modelConfiguration: IModelConfiguration): ViewerModel {\r\n \r\n const model = new ViewerModel(this._observablesManager, modelConfiguration, this._configurationContainer);\r\n\r\n model.loadId = this._loadId++;\r\n\r\n let filename: any;\r\n if (modelConfiguration.file) {\r\n this._baseUrl = \"file:\";\r\n filename = modelConfiguration.file;\r\n }\r\n else if (modelConfiguration.url) {\r\n filename = Tools.GetFilename(modelConfiguration.url) || modelConfiguration.url;\r\n this._baseUrl = modelConfiguration.root || Tools.GetFolderPath(modelConfiguration.url);\r\n }\r\n\r\n if (!filename || !this._baseUrl) {\r\n model.state = ModelState.ERROR;\r\n Tools.Error(\"No URL provided\");\r\n return model;\r\n }\r\n\r\n let plugin = modelConfiguration.loader;\r\n\r\n let scene = model.rootMesh.getScene();\r\n\r\n model.loader = SceneLoader.ImportMesh(undefined, this._baseUrl, filename, scene, (meshes, particleSystems, skeletons, animationGroups) => {\r\n meshes.forEach((mesh) => {\r\n Tags.AddTagsTo(mesh, \"viewerMesh\");\r\n model.addMesh(mesh);\r\n });\r\n model.particleSystems = particleSystems;\r\n model.skeletons = skeletons;\r\n\r\n for (const animationGroup of animationGroups) {\r\n model.addAnimationGroup(animationGroup);\r\n }\r\n\r\n this._checkAndRun(\"onLoaded\", model);\r\n scene.executeWhenReady(() => {\r\n model.onLoadedObservable.notifyObservers(model);\r\n });\r\n }, (progressEvent) => {\r\n this._checkAndRun(\"onProgress\", progressEvent);\r\n model.onLoadProgressObservable.notifyObserversWithPromise(progressEvent);\r\n }, (scene, m, exception) => {\r\n model.state = ModelState.ERROR;\r\n Tools.Error(\"Load Error: There was an error loading the model. \" + m);\r\n this._checkAndRun(\"onError\", m, exception);\r\n model.onLoadErrorObservable.notifyObserversWithPromise({ message: m, exception: exception });\r\n }, plugin)!;\r\n\r\n if (model.loader.name === \"gltf\") {\r\n let gltfLoader = (<GLTFFileLoader>model.loader);\r\n gltfLoader.animationStartMode = GLTFLoaderAnimationStartMode.NONE;\r\n gltfLoader.compileMaterials = true;\r\n\r\n if (!modelConfiguration.file) {\r\n gltfLoader.rewriteRootURL = (rootURL, responseURL) => {\r\n return modelConfiguration.root || Tools.GetFolderPath(responseURL || modelConfiguration.url || '');\r\n };\r\n }\r\n // if ground is set to \"mirror\":\r\n if (this._configurationContainer\r\n && this._configurationContainer.configuration\r\n && this._configurationContainer.configuration.ground\r\n && typeof this._configurationContainer.configuration.ground === 'object'\r\n && this._configurationContainer.configuration.ground.mirror) {\r\n gltfLoader.useClipPlane = true;\r\n }\r\n Object.keys(gltfLoader).filter((name) => name.indexOf('on') === 0 && name.indexOf('Observable') !== -1).forEach((functionName) => {\r\n gltfLoader[functionName].add((payload) => {\r\n this._checkAndRun(functionName.replace(\"Observable\", ''), payload);\r\n });\r\n });\r\n\r\n gltfLoader.onParsedObservable.add((data) => {\r\n if (data && data.json && data.json['asset']) {\r\n model.loadInfo = data.json['asset'];\r\n }\r\n });\r\n\r\n gltfLoader.onCompleteObservable.add(() => {\r\n model.loaderDone = true;\r\n });\r\n } else {\r\n model.loaderDone = true;\r\n }\r\n\r\n this._checkAndRun(\"onInit\", model.loader, model);\r\n\r\n this._loaders.push(model.loader);\r\n\r\n return model;\r\n }\r\n\r\n public cancelLoad(model: ViewerModel) {\r\n const loader = model.loader || this._loaders[model.loadId];\r\n // ATM only available in the GLTF Loader\r\n if (loader && loader.name === \"gltf\") {\r\n let gltfLoader = (<GLTFFileLoader>loader);\r\n gltfLoader.dispose();\r\n model.state = ModelState.CANCELED;\r\n } else {\r\n Tools.Warn(\"This type of loader cannot cancel the request\");\r\n }\r\n }\r\n\r\n /**\r\n * dispose the model loader.\r\n * If loaders are registered and are in the middle of loading, they will be disposed and the request(s) will be cancelled.\r\n */\r\n public dispose() {\r\n this._loaders.forEach((loader) => {\r\n if (loader.name === \"gltf\") {\r\n (<GLTFFileLoader>loader).dispose();\r\n }\r\n });\r\n this._loaders.length = 0;\r\n this._disposed = true;\r\n }\r\n\r\n private _checkAndRun(functionName: string, ...payload: Array<any>) {\r\n if (this._disposed) { return; }\r\n this._plugins.filter((p) => p[functionName]).forEach((plugin) => {\r\n try {\r\n plugin[functionName].apply(this, payload);\r\n } catch (e) { }\r\n });\r\n }\r\n}"]}
1
+ {"version":3,"file":"modelLoader.js","sourceRoot":"","sources":["../../../../sourceES6/viewer/src/loader/modelLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import { GLTFFileLoader, GLTFLoaderAnimationStartMode } from \"@babylonjs/loaders/glTF/glTFFileLoader\"\r\nimport { ISceneLoaderPlugin, ISceneLoaderPluginAsync } from '@babylonjs/core/Loading/sceneLoader';\r\nimport { Tools } from '@babylonjs/core/Misc/tools';\r\nimport { SceneLoader } from '@babylonjs/core/Loading/sceneLoader';\r\nimport { Tags } from '@babylonjs/core/Misc/tags';\r\n\r\nimport { ConfigurationContainer } from '../configuration/configurationContainer';\r\nimport { IModelConfiguration } from '../configuration/interfaces/modelConfiguration';\r\nimport { ObservablesManager } from '../managers/observablesManager';\r\nimport { ModelState, ViewerModel } from '../model/viewerModel';\r\nimport { getLoaderPluginByName, ILoaderPlugin } from './plugins/';\r\n\r\n/**\r\n * An instance of the class is in charge of loading the model correctly.\r\n * This class will continously be expended with tasks required from the specific loaders Babylon has.\r\n *\r\n * A Model loader is unique per (Abstract)Viewer. It is being generated by the viewer\r\n */\r\nexport class ModelLoader {\r\n\r\n private _loadId: number;\r\n private _disposed = false;\r\n\r\n private _loaders: Array<ISceneLoaderPlugin | ISceneLoaderPluginAsync>;\r\n\r\n private _plugins: Array<ILoaderPlugin>;\r\n\r\n private _baseUrl: string;\r\n\r\n public get baseUrl(): string {\r\n return this._baseUrl;\r\n }\r\n\r\n /**\r\n * Create a new Model loader\r\n * @param _viewer the viewer using this model loader\r\n */\r\n constructor(private _observablesManager: ObservablesManager, private _configurationContainer?: ConfigurationContainer) {\r\n this._loaders = [];\r\n this._loadId = 0;\r\n this._plugins = [];\r\n }\r\n\r\n /**\r\n * Adds a new plugin to the loader process.\r\n *\r\n * @param plugin the plugin name or the plugin itself\r\n */\r\n public addPlugin(plugin: ILoaderPlugin | string) {\r\n let actualPlugin: ILoaderPlugin = {};\r\n if (typeof plugin === 'string') {\r\n let loadedPlugin = getLoaderPluginByName(plugin);\r\n if (loadedPlugin) {\r\n actualPlugin = loadedPlugin;\r\n }\r\n } else {\r\n actualPlugin = plugin;\r\n }\r\n if (actualPlugin && this._plugins.indexOf(actualPlugin) === -1) {\r\n this._plugins.push(actualPlugin);\r\n }\r\n }\r\n\r\n /**\r\n * Load a model using predefined configuration\r\n * @param modelConfiguration the modelConfiguration to use to load the model\r\n */\r\n public load(modelConfiguration: IModelConfiguration): ViewerModel {\r\n\r\n const model = new ViewerModel(this._observablesManager, modelConfiguration, this._configurationContainer);\r\n\r\n model.loadId = this._loadId++;\r\n\r\n let filename: any;\r\n if (modelConfiguration.file) {\r\n this._baseUrl = \"file:\";\r\n filename = modelConfiguration.file;\r\n }\r\n else if (modelConfiguration.url) {\r\n filename = Tools.GetFilename(modelConfiguration.url) || modelConfiguration.url;\r\n this._baseUrl = modelConfiguration.root || Tools.GetFolderPath(modelConfiguration.url);\r\n }\r\n\r\n if (!filename || !this._baseUrl) {\r\n model.state = ModelState.ERROR;\r\n Tools.Error(\"No URL provided\");\r\n return model;\r\n }\r\n\r\n let plugin = modelConfiguration.loader;\r\n\r\n let scene = model.rootMesh.getScene();\r\n\r\n model.loader = SceneLoader.ImportMesh(undefined, this._baseUrl, filename, scene, (meshes, particleSystems, skeletons, animationGroups) => {\r\n meshes.forEach((mesh) => {\r\n Tags.AddTagsTo(mesh, \"viewerMesh\");\r\n model.addMesh(mesh);\r\n });\r\n model.particleSystems = particleSystems;\r\n model.skeletons = skeletons;\r\n\r\n for (const animationGroup of animationGroups) {\r\n model.addAnimationGroup(animationGroup);\r\n }\r\n\r\n this._checkAndRun(\"onLoaded\", model);\r\n scene.executeWhenReady(() => {\r\n model.onLoadedObservable.notifyObservers(model);\r\n });\r\n }, (progressEvent) => {\r\n this._checkAndRun(\"onProgress\", progressEvent);\r\n model.onLoadProgressObservable.notifyObserversWithPromise(progressEvent);\r\n }, (scene, m, exception) => {\r\n model.state = ModelState.ERROR;\r\n Tools.Error(\"Load Error: There was an error loading the model. \" + m);\r\n this._checkAndRun(\"onError\", m, exception);\r\n model.onLoadErrorObservable.notifyObserversWithPromise({ message: m, exception: exception });\r\n }, plugin)!;\r\n\r\n if (model.loader.name === \"gltf\") {\r\n let gltfLoader = (<GLTFFileLoader>model.loader);\r\n gltfLoader.animationStartMode = GLTFLoaderAnimationStartMode.NONE;\r\n gltfLoader.compileMaterials = true;\r\n\r\n if (!modelConfiguration.file) {\r\n gltfLoader.rewriteRootURL = (rootURL, responseURL) => {\r\n return modelConfiguration.root || Tools.GetFolderPath(responseURL || modelConfiguration.url || '');\r\n };\r\n }\r\n // if ground is set to \"mirror\":\r\n if (this._configurationContainer\r\n && this._configurationContainer.configuration\r\n && this._configurationContainer.configuration.ground\r\n && typeof this._configurationContainer.configuration.ground === 'object'\r\n && this._configurationContainer.configuration.ground.mirror) {\r\n gltfLoader.useClipPlane = true;\r\n }\r\n Object.keys(gltfLoader).filter((name) => name.indexOf('on') === 0 && name.indexOf('Observable') !== -1).forEach((functionName) => {\r\n gltfLoader[functionName].add((payload) => {\r\n this._checkAndRun(functionName.replace(\"Observable\", ''), payload);\r\n });\r\n });\r\n\r\n gltfLoader.onParsedObservable.add((data) => {\r\n if (data && data.json && data.json['asset']) {\r\n model.loadInfo = data.json['asset'];\r\n }\r\n });\r\n\r\n gltfLoader.onCompleteObservable.add(() => {\r\n model.loaderDone = true;\r\n });\r\n } else {\r\n model.loaderDone = true;\r\n }\r\n\r\n this._checkAndRun(\"onInit\", model.loader, model);\r\n\r\n this._loaders.push(model.loader);\r\n\r\n return model;\r\n }\r\n\r\n public cancelLoad(model: ViewerModel) {\r\n const loader = model.loader || this._loaders[model.loadId];\r\n // ATM only available in the GLTF Loader\r\n if (loader && loader.name === \"gltf\") {\r\n let gltfLoader = (<GLTFFileLoader>loader);\r\n gltfLoader.dispose();\r\n model.state = ModelState.CANCELED;\r\n } else {\r\n Tools.Warn(\"This type of loader cannot cancel the request\");\r\n }\r\n }\r\n\r\n /**\r\n * dispose the model loader.\r\n * If loaders are registered and are in the middle of loading, they will be disposed and the request(s) will be cancelled.\r\n */\r\n public dispose() {\r\n this._loaders.forEach((loader) => {\r\n if (loader.name === \"gltf\") {\r\n (<GLTFFileLoader>loader).dispose();\r\n }\r\n });\r\n this._loaders.length = 0;\r\n this._disposed = true;\r\n }\r\n\r\n private _checkAndRun(functionName: string, ...payload: Array<any>) {\r\n if (this._disposed) { return; }\r\n this._plugins.filter((p) => p[functionName]).forEach((plugin) => {\r\n try {\r\n plugin[functionName].apply(this, payload);\r\n } catch (e) { }\r\n });\r\n }\r\n}"]}
@@ -1,4 +1,4 @@
1
- import { Constants } from '@babylonjs/core/Engines/constants';
1
+ import { Constants } from '@babylonjs/core/Engines/constants.js';
2
2
  /**
3
3
  * A (PBR) material will be extended using this function.
4
4
  * This function will hold extra default configuration for the viewer, if not implemented in Babylon itself.
@@ -1,8 +1,8 @@
1
- import { TelemetryLoaderPlugin } from "./telemetryLoaderPlugin";
2
- import { MSFTLodLoaderPlugin } from './msftLodLoaderPlugin';
3
- import { ApplyMaterialConfigPlugin } from './applyMaterialConfig';
4
- import { ExtendedMaterialLoaderPlugin } from './extendedMaterialLoaderPlugin';
5
- import { Tools } from "@babylonjs/core/Misc/tools";
1
+ import { TelemetryLoaderPlugin } from "./telemetryLoaderPlugin.js";
2
+ import { MSFTLodLoaderPlugin } from './msftLodLoaderPlugin.js';
3
+ import { ApplyMaterialConfigPlugin } from './applyMaterialConfig.js';
4
+ import { ExtendedMaterialLoaderPlugin } from './extendedMaterialLoaderPlugin.js';
5
+ import { Tools } from "@babylonjs/core/Misc/tools.js";
6
6
  var pluginCache = {};
7
7
  export { TelemetryLoaderPlugin, MSFTLodLoaderPlugin, ApplyMaterialConfigPlugin, ExtendedMaterialLoaderPlugin };
8
8
  /**
@@ -1,5 +1,5 @@
1
- import { telemetryManager } from "../../managers/telemetryManager";
2
- import { PrecisionDate } from "@babylonjs/core/Misc/precisionDate";
1
+ import { telemetryManager } from "../../managers/telemetryManager.js";
2
+ import { PrecisionDate } from "@babylonjs/core/Misc/precisionDate.js";
3
3
  var TelemetryLoaderPlugin = /** @class */ (function () {
4
4
  function TelemetryLoaderPlugin() {
5
5
  }
@@ -1,4 +1,4 @@
1
- import { Observable } from '@babylonjs/core/Misc/observable';
1
+ import { Observable } from '@babylonjs/core/Misc/observable.js';
2
2
  var ObservablesManager = /** @class */ (function () {
3
3
  function ObservablesManager() {
4
4
  this.onSceneInitObservable = new Observable();
@@ -1,29 +1,29 @@
1
- import { getConfigurationKey } from '../configuration';
2
- import { ModelState } from '../model/viewerModel';
3
- import { extendClassWithConfig } from '../helper';
4
- import { ViewerLabs } from '../labs/viewerLabs';
5
- import { getCustomOptimizerByName } from '../optimizer/custom/';
6
- import { deepmerge } from '../helper';
7
- import { Observable } from '@babylonjs/core/Misc/observable';
8
- import { SceneOptimizer, SceneOptimizerOptions } from '@babylonjs/core/Misc/sceneOptimizer';
9
- import { ArcRotateCamera } from '@babylonjs/core/Cameras/arcRotateCamera';
10
- import { Light } from '@babylonjs/core/Lights/light';
11
- import { EnvironmentHelper } from '@babylonjs/core/Helpers/environmentHelper';
12
- import { Color3, Quaternion, Vector3, Axis, Matrix } from '@babylonjs/core/Maths/math';
13
- import { DefaultRenderingPipeline } from '@babylonjs/core/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline';
14
- import { Animation } from '@babylonjs/core/Animations/index';
15
- import { AnimationPropertiesOverride } from '@babylonjs/core/Animations/animationPropertiesOverride';
16
- import { RenderTargetTexture } from '@babylonjs/core/Materials/Textures/renderTargetTexture';
17
- import { PBRMaterial } from '@babylonjs/core/Materials/PBR/pbrMaterial';
18
- import { ShadowLight } from '@babylonjs/core/Lights/shadowLight';
19
- import { CubeTexture } from '@babylonjs/core/Materials/Textures/cubeTexture';
20
- import { HemisphericLight } from '@babylonjs/core/Lights/hemisphericLight';
21
- import { Scalar } from '@babylonjs/core/Maths/math.scalar';
22
- import { Mesh } from '@babylonjs/core/Meshes/mesh';
23
- import { Tags } from '@babylonjs/core/Misc/tags';
24
- import { Scene } from '@babylonjs/core/scene';
25
- import { ShadowGenerator } from '@babylonjs/core/Lights/Shadows/shadowGenerator';
26
- import { Constants } from '@babylonjs/core/Engines/constants';
1
+ import { getConfigurationKey } from '../configuration.js';
2
+ import { ModelState } from '../model/viewerModel.js';
3
+ import { extendClassWithConfig } from '../helper.js';
4
+ import { ViewerLabs } from '../labs/viewerLabs.js';
5
+ import { getCustomOptimizerByName } from '../optimizer/custom/.js';
6
+ import { deepmerge } from '../helper.js';
7
+ import { Observable } from '@babylonjs/core/Misc/observable.js';
8
+ import { SceneOptimizer, SceneOptimizerOptions } from '@babylonjs/core/Misc/sceneOptimizer.js';
9
+ import { ArcRotateCamera } from '@babylonjs/core/Cameras/arcRotateCamera.js';
10
+ import { Light } from '@babylonjs/core/Lights/light.js';
11
+ import { EnvironmentHelper } from '@babylonjs/core/Helpers/environmentHelper.js';
12
+ import { Color3, Quaternion, Vector3, Axis, Matrix } from '@babylonjs/core/Maths/math.js';
13
+ import { DefaultRenderingPipeline } from '@babylonjs/core/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js';
14
+ import { Animation } from '@babylonjs/core/Animations/index.js';
15
+ import { AnimationPropertiesOverride } from '@babylonjs/core/Animations/animationPropertiesOverride.js';
16
+ import { RenderTargetTexture } from '@babylonjs/core/Materials/Textures/renderTargetTexture.js';
17
+ import { PBRMaterial } from '@babylonjs/core/Materials/PBR/pbrMaterial.js';
18
+ import { ShadowLight } from '@babylonjs/core/Lights/shadowLight.js';
19
+ import { CubeTexture } from '@babylonjs/core/Materials/Textures/cubeTexture.js';
20
+ import { HemisphericLight } from '@babylonjs/core/Lights/hemisphericLight.js';
21
+ import { Scalar } from '@babylonjs/core/Maths/math.scalar.js';
22
+ import { CreatePlane } from "@babylonjs/core/Meshes/Builders/planeBuilder.js";
23
+ import { Tags } from '@babylonjs/core/Misc/tags.js';
24
+ import { Scene } from '@babylonjs/core/scene.js';
25
+ import { ShadowGenerator } from '@babylonjs/core/Lights/Shadows/shadowGenerator.js';
26
+ import { Constants } from '@babylonjs/core/Engines/constants.js';
27
27
  var SceneManager = /** @class */ (function () {
28
28
  function SceneManager(_engine, _configurationContainer, _observablesManager) {
29
29
  var _this = this;
@@ -862,7 +862,7 @@ var SceneManager = /** @class */ (function () {
862
862
  var options = {
863
863
  createGround: !!groundConfiguration && this._groundEnabled,
864
864
  createSkybox: !!skyboxConifguration,
865
- setupImageProcessing: false,
865
+ setupImageProcessing: false, // will be done at the scene level!,
866
866
  };
867
867
  // will that cause problems with model ground configuration?
868
868
  /*if (model) {
@@ -1186,7 +1186,7 @@ var SceneManager = /** @class */ (function () {
1186
1186
  }
1187
1187
  if (!this._shadowGroundPlane) {
1188
1188
  if (shadowGenerator.useBlurCloseExponentialShadowMap) {
1189
- var shadowGroundPlane = Mesh.CreatePlane("shadowGroundPlane", 100, this.scene, false);
1189
+ var shadowGroundPlane = CreatePlane("shadowGroundPlane", { size: 100 }, this.scene);
1190
1190
  shadowGroundPlane.useVertexColors = false;
1191
1191
  //material isn't ever used in rendering, just used to set back face culling
1192
1192
  shadowGroundPlane.material = new PBRMaterial('shadowGroundPlaneMaterial', this.scene);