@babylonjs/viewer 5.22.1 → 5.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/labs/environmentSerializer.d.ts +1 -1
- package/labs/environmentSerializer.js +1 -1
- package/labs/environmentSerializer.js.map +1 -1
- package/labs/texture.d.ts +1 -1
- package/labs/texture.js +1 -1
- package/labs/texture.js.map +1 -1
- package/managers/sceneManager.d.ts +1 -1
- package/managers/sceneManager.js +1 -1
- package/managers/sceneManager.js.map +1 -1
- package/managers/telemetryManager.d.ts +1 -1
- package/managers/telemetryManager.js +1 -1
- package/managers/telemetryManager.js.map +1 -1
- package/model/viewerModel.d.ts +1 -1
- package/model/viewerModel.js +1 -1
- package/model/viewerModel.js.map +1 -1
- package/package.json +5 -5
|
@@ -100,7 +100,7 @@ export declare class EnvironmentDeserializer {
|
|
|
100
100
|
/**
|
|
101
101
|
* Parses an arraybuffer into a new PBREnvironment object
|
|
102
102
|
* @param arrayBuffer The arraybuffer of the Spectre environment file
|
|
103
|
-
* @
|
|
103
|
+
* @returns a PBREnvironment object
|
|
104
104
|
*/
|
|
105
105
|
static Parse(arrayBuffer: ArrayBuffer): PBREnvironment;
|
|
106
106
|
/**
|
|
@@ -11,7 +11,7 @@ var EnvironmentDeserializer = /** @class */ (function () {
|
|
|
11
11
|
/**
|
|
12
12
|
* Parses an arraybuffer into a new PBREnvironment object
|
|
13
13
|
* @param arrayBuffer The arraybuffer of the Spectre environment file
|
|
14
|
-
* @
|
|
14
|
+
* @returns a PBREnvironment object
|
|
15
15
|
*/
|
|
16
16
|
EnvironmentDeserializer.Parse = function (arrayBuffer) {
|
|
17
17
|
var environment = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environmentSerializer.js","sourceRoot":"","sources":["../../../../../tools/viewer/src/labs/environmentSerializer.ts"],"names":[],"mappings":"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AAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAChI,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAChI,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAEhI,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAChI,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAChI,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAEhI,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAClG,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { Vector3 } from \"core/Maths/math\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { TextureCube, PixelFormat, PixelType } from \"./texture\";\r\n\r\n/**\r\n * Spherical polynomial coefficients (counter part to spherical harmonic coefficients used in shader irradiance calculation)\r\n * @ignoreChildren\r\n */\r\nexport interface SphericalPolynomalCoefficients {\r\n x: Vector3;\r\n y: Vector3;\r\n z: Vector3;\r\n xx: Vector3;\r\n yy: Vector3;\r\n zz: Vector3;\r\n yz: Vector3;\r\n zx: Vector3;\r\n xy: Vector3;\r\n}\r\n\r\n/**\r\n * Wraps data and maps required for environments with physically based rendering\r\n */\r\nexport interface PBREnvironment {\r\n /**\r\n * Spherical Polynomial Coefficients representing an irradiance map\r\n */\r\n irradiancePolynomialCoefficients: SphericalPolynomalCoefficients;\r\n\r\n /**\r\n * Specular cubemap\r\n */\r\n specularTexture?: TextureCube;\r\n /**\r\n * A scale factor applied to RGB values after reading from environment maps\r\n */\r\n textureIntensityScale: number;\r\n}\r\n\r\n/**\r\n * Environment map representations: layouts, projections and approximations\r\n */\r\nexport type MapType = \"irradiance_sh_coefficients_9\" | \"cubemap_faces\";\r\n\r\n/**\r\n * Image type used for environment map\r\n */\r\nexport type ImageType = \"png\";\r\n\r\n//Payload Descriptor\r\n\r\n/**\r\n * A generic field in JSON that report's its type\r\n */\r\nexport interface TypedObject<T> {\r\n type: T;\r\n}\r\n\r\n/**\r\n * Describes a range of bytes starting at byte pos (inclusive) and finishing at byte pos + length - 1\r\n */\r\nexport interface ByteRange {\r\n pos: number;\r\n length: number;\r\n}\r\n\r\n/**\r\n * Complete Spectre Environment JSON Descriptor\r\n */\r\nexport interface EnvJsonDescriptor {\r\n radiance: TypedObject<MapType>;\r\n irradiance: TypedObject<MapType>;\r\n specular: TypedObject<MapType>;\r\n}\r\n\r\n/**\r\n * Spherical harmonic coefficients to provide an irradiance map\r\n */\r\nexport interface IrradianceSHCoefficients9 extends TypedObject<MapType> {\r\n l00: Array<number>;\r\n\r\n l1_1: Array<number>;\r\n l10: Array<number>;\r\n l11: Array<number>;\r\n\r\n l2_2: Array<number>;\r\n l2_1: Array<number>;\r\n l20: Array<number>;\r\n l21: Array<number>;\r\n l22: Array<number>;\r\n}\r\n\r\n/**\r\n * A generic set of images, where the image content is specified by byte ranges in the mipmaps field\r\n */\r\nexport interface ImageSet<T> extends TypedObject<MapType> {\r\n imageType: ImageType;\r\n width: number;\r\n height: number;\r\n mipmaps: Array<T>;\r\n multiplier: number;\r\n}\r\n\r\n/**\r\n * A set of cubemap faces\r\n */\r\nexport type CubemapFaces = ImageSet<Array<ByteRange>>;\r\n\r\n/**\r\n * A single image containing an atlas of equirectangular-projection maps across all mip levels\r\n */\r\nexport type EquirectangularMipmapAtlas = ImageSet<ByteRange>;\r\n\r\n/**\r\n * A static class proving methods to aid parsing Spectre environment files\r\n */\r\nexport class EnvironmentDeserializer {\r\n /**\r\n * Parses an arraybuffer into a new PBREnvironment object\r\n * @param arrayBuffer The arraybuffer of the Spectre environment file\r\n * @return a PBREnvironment object\r\n */\r\n public static Parse(arrayBuffer: ArrayBuffer): PBREnvironment {\r\n const environment: PBREnvironment = {\r\n //irradiance\r\n irradiancePolynomialCoefficients: {\r\n x: new Vector3(0, 0, 0),\r\n y: new Vector3(0, 0, 0),\r\n z: new Vector3(0, 0, 0),\r\n xx: new Vector3(0, 0, 0),\r\n yy: new Vector3(0, 0, 0),\r\n zz: new Vector3(0, 0, 0),\r\n yz: new Vector3(0, 0, 0),\r\n zx: new Vector3(0, 0, 0),\r\n xy: new Vector3(0, 0, 0),\r\n },\r\n\r\n //specular\r\n textureIntensityScale: 1.0,\r\n };\r\n\r\n //read .env\r\n const littleEndian = false;\r\n\r\n const magicBytes = [0x86, 0x16, 0x87, 0x96, 0xf6, 0xd6, 0x96, 0x36];\r\n\r\n const dataView = new DataView(arrayBuffer);\r\n let pos = 0;\r\n\r\n for (let i = 0; i < magicBytes.length; i++) {\r\n if (dataView.getUint8(pos++) !== magicBytes[i]) {\r\n Tools.Error(\"Not a Spectre environment map\");\r\n }\r\n }\r\n\r\n const version = dataView.getUint16(pos, littleEndian);\r\n pos += 2;\r\n\r\n if (version !== 1) {\r\n Tools.Warn('Unsupported Spectre environment map version \"' + version + '\"');\r\n }\r\n\r\n //read json descriptor - collect characters up to null terminator\r\n let descriptorString = \"\";\r\n let charCode = 0x00;\r\n while ((charCode = dataView.getUint8(pos++))) {\r\n descriptorString += String.fromCharCode(charCode);\r\n }\r\n\r\n const descriptor: EnvJsonDescriptor = JSON.parse(descriptorString);\r\n\r\n const payloadPos = pos;\r\n\r\n //irradiance\r\n switch (descriptor.irradiance.type) {\r\n case \"irradiance_sh_coefficients_9\": {\r\n //irradiance\r\n const harmonics = <IrradianceSHCoefficients9>descriptor.irradiance;\r\n\r\n EnvironmentDeserializer._ConvertSHIrradianceToLambertianRadiance(harmonics);\r\n\r\n //harmonics now represent radiance\r\n EnvironmentDeserializer._ConvertSHToSP(harmonics, environment.irradiancePolynomialCoefficients);\r\n break;\r\n }\r\n default:\r\n Tools.Error(\"Unhandled MapType descriptor.irradiance.type (\" + descriptor.irradiance.type + \")\");\r\n }\r\n\r\n //specular\r\n switch (descriptor.specular.type) {\r\n case \"cubemap_faces\": {\r\n const specularDescriptor = <CubemapFaces>descriptor.specular;\r\n\r\n const specularTexture = (environment.specularTexture = new TextureCube(PixelFormat.RGBA, PixelType.UNSIGNED_BYTE));\r\n environment.textureIntensityScale = specularDescriptor.multiplier != null ? specularDescriptor.multiplier : 1.0;\r\n\r\n const mipmaps = specularDescriptor.mipmaps;\r\n const imageType = specularDescriptor.imageType;\r\n\r\n for (let l = 0; l < mipmaps.length; l++) {\r\n const faceRanges = mipmaps[l];\r\n\r\n specularTexture.source[l] = [];\r\n\r\n for (let i = 0; i < 6; i++) {\r\n const range = faceRanges[i];\r\n const bytes = new Uint8Array(arrayBuffer, payloadPos + range.pos, range.length);\r\n\r\n switch (imageType) {\r\n case \"png\": {\r\n //construct image element from bytes\r\n const image = new Image();\r\n const src = URL.createObjectURL(new Blob([bytes], { type: \"image/png\" }));\r\n image.src = src;\r\n specularTexture.source[l][i] = image;\r\n\r\n break;\r\n }\r\n default:\r\n Tools.Error(\"Unhandled ImageType descriptor.specular.imageType (\" + imageType + \")\");\r\n }\r\n }\r\n }\r\n\r\n break;\r\n }\r\n default:\r\n Tools.Error(\"Unhandled MapType descriptor.specular.type (\" + descriptor.specular.type + \")\");\r\n }\r\n\r\n return environment;\r\n }\r\n\r\n /**\r\n * Convert from irradiance to outgoing radiance for Lambertian BDRF, suitable for efficient shader evaluation.\r\n *\t L = (1/pi) * E * rho\r\n *\r\n * This is done by an additional scale by 1/pi, so is a fairly trivial operation but important conceptually.\r\n * @param harmonics Spherical harmonic coefficients (9)\r\n */\r\n private static _ConvertSHIrradianceToLambertianRadiance(harmonics: any): void {\r\n EnvironmentDeserializer._ScaleSH(harmonics, 1 / Math.PI);\r\n // The resultant SH now represents outgoing radiance, so includes the Lambert 1/pi normalisation factor but without albedo (rho) applied\r\n // (The pixel shader must apply albedo after texture fetches, etc).\r\n }\r\n\r\n /**\r\n * Convert spherical harmonics to spherical polynomial coefficients\r\n * @param harmonics Spherical harmonic coefficients (9)\r\n * @param outPolynomialCoefficents Polynomial coefficients (9) object to store result\r\n */\r\n private static _ConvertSHToSP(harmonics: any, outPolynomialCoefficents: SphericalPolynomalCoefficients) {\r\n const rPi = 1 / Math.PI;\r\n\r\n //x\r\n outPolynomialCoefficents.x.x = 1.02333 * harmonics.l11[0] * rPi;\r\n outPolynomialCoefficents.x.y = 1.02333 * harmonics.l11[1] * rPi;\r\n outPolynomialCoefficents.x.z = 1.02333 * harmonics.l11[2] * rPi;\r\n\r\n outPolynomialCoefficents.y.x = 1.02333 * harmonics.l1_1[0] * rPi;\r\n outPolynomialCoefficents.y.y = 1.02333 * harmonics.l1_1[1] * rPi;\r\n outPolynomialCoefficents.y.z = 1.02333 * harmonics.l1_1[2] * rPi;\r\n\r\n outPolynomialCoefficents.z.x = 1.02333 * harmonics.l10[0] * rPi;\r\n outPolynomialCoefficents.z.y = 1.02333 * harmonics.l10[1] * rPi;\r\n outPolynomialCoefficents.z.z = 1.02333 * harmonics.l10[2] * rPi;\r\n\r\n //xx\r\n outPolynomialCoefficents.xx.x = (0.886277 * harmonics.l00[0] - 0.247708 * harmonics.l20[0] + 0.429043 * harmonics.l22[0]) * rPi;\r\n outPolynomialCoefficents.xx.y = (0.886277 * harmonics.l00[1] - 0.247708 * harmonics.l20[1] + 0.429043 * harmonics.l22[1]) * rPi;\r\n outPolynomialCoefficents.xx.z = (0.886277 * harmonics.l00[2] - 0.247708 * harmonics.l20[2] + 0.429043 * harmonics.l22[2]) * rPi;\r\n\r\n outPolynomialCoefficents.yy.x = (0.886277 * harmonics.l00[0] - 0.247708 * harmonics.l20[0] - 0.429043 * harmonics.l22[0]) * rPi;\r\n outPolynomialCoefficents.yy.y = (0.886277 * harmonics.l00[1] - 0.247708 * harmonics.l20[1] - 0.429043 * harmonics.l22[1]) * rPi;\r\n outPolynomialCoefficents.yy.z = (0.886277 * harmonics.l00[2] - 0.247708 * harmonics.l20[2] - 0.429043 * harmonics.l22[2]) * rPi;\r\n\r\n outPolynomialCoefficents.zz.x = (0.886277 * harmonics.l00[0] + 0.495417 * harmonics.l20[0]) * rPi;\r\n outPolynomialCoefficents.zz.y = (0.886277 * harmonics.l00[1] + 0.495417 * harmonics.l20[1]) * rPi;\r\n outPolynomialCoefficents.zz.z = (0.886277 * harmonics.l00[2] + 0.495417 * harmonics.l20[2]) * rPi;\r\n\r\n //yz\r\n outPolynomialCoefficents.yz.x = 0.858086 * harmonics.l2_1[0] * rPi;\r\n outPolynomialCoefficents.yz.y = 0.858086 * harmonics.l2_1[1] * rPi;\r\n outPolynomialCoefficents.yz.z = 0.858086 * harmonics.l2_1[2] * rPi;\r\n\r\n outPolynomialCoefficents.zx.x = 0.858086 * harmonics.l21[0] * rPi;\r\n outPolynomialCoefficents.zx.y = 0.858086 * harmonics.l21[1] * rPi;\r\n outPolynomialCoefficents.zx.z = 0.858086 * harmonics.l21[2] * rPi;\r\n\r\n outPolynomialCoefficents.xy.x = 0.858086 * harmonics.l2_2[0] * rPi;\r\n outPolynomialCoefficents.xy.y = 0.858086 * harmonics.l2_2[1] * rPi;\r\n outPolynomialCoefficents.xy.z = 0.858086 * harmonics.l2_2[2] * rPi;\r\n }\r\n\r\n /**\r\n * Multiplies harmonic coefficients in place\r\n * @param harmonics Spherical harmonic coefficients (9)\r\n * @param scaleFactor Value to multiply by\r\n */\r\n private static _ScaleSH(harmonics: any, scaleFactor: number) {\r\n harmonics.l00[0] *= scaleFactor;\r\n harmonics.l00[1] *= scaleFactor;\r\n harmonics.l00[2] *= scaleFactor;\r\n harmonics.l1_1[0] *= scaleFactor;\r\n harmonics.l1_1[1] *= scaleFactor;\r\n harmonics.l1_1[2] *= scaleFactor;\r\n harmonics.l10[0] *= scaleFactor;\r\n harmonics.l10[1] *= scaleFactor;\r\n harmonics.l10[2] *= scaleFactor;\r\n harmonics.l11[0] *= scaleFactor;\r\n harmonics.l11[1] *= scaleFactor;\r\n harmonics.l11[2] *= scaleFactor;\r\n harmonics.l2_2[0] *= scaleFactor;\r\n harmonics.l2_2[1] *= scaleFactor;\r\n harmonics.l2_2[2] *= scaleFactor;\r\n harmonics.l2_1[0] *= scaleFactor;\r\n harmonics.l2_1[1] *= scaleFactor;\r\n harmonics.l2_1[2] *= scaleFactor;\r\n harmonics.l20[0] *= scaleFactor;\r\n harmonics.l20[1] *= scaleFactor;\r\n harmonics.l20[2] *= scaleFactor;\r\n harmonics.l21[0] *= scaleFactor;\r\n harmonics.l21[1] *= scaleFactor;\r\n harmonics.l21[2] *= scaleFactor;\r\n harmonics.l22[0] *= scaleFactor;\r\n harmonics.l22[1] *= scaleFactor;\r\n harmonics.l22[2] *= scaleFactor;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"environmentSerializer.js","sourceRoot":"","sources":["../../../../../tools/viewer/src/labs/environmentSerializer.ts"],"names":[],"mappings":"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AAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAChI,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAChI,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAEhI,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAChI,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAChI,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAEhI,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAClG,wBAAwB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { Vector3 } from \"core/Maths/math\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { TextureCube, PixelFormat, PixelType } from \"./texture\";\r\n\r\n/**\r\n * Spherical polynomial coefficients (counter part to spherical harmonic coefficients used in shader irradiance calculation)\r\n * @ignoreChildren\r\n */\r\nexport interface SphericalPolynomalCoefficients {\r\n x: Vector3;\r\n y: Vector3;\r\n z: Vector3;\r\n xx: Vector3;\r\n yy: Vector3;\r\n zz: Vector3;\r\n yz: Vector3;\r\n zx: Vector3;\r\n xy: Vector3;\r\n}\r\n\r\n/**\r\n * Wraps data and maps required for environments with physically based rendering\r\n */\r\nexport interface PBREnvironment {\r\n /**\r\n * Spherical Polynomial Coefficients representing an irradiance map\r\n */\r\n irradiancePolynomialCoefficients: SphericalPolynomalCoefficients;\r\n\r\n /**\r\n * Specular cubemap\r\n */\r\n specularTexture?: TextureCube;\r\n /**\r\n * A scale factor applied to RGB values after reading from environment maps\r\n */\r\n textureIntensityScale: number;\r\n}\r\n\r\n/**\r\n * Environment map representations: layouts, projections and approximations\r\n */\r\nexport type MapType = \"irradiance_sh_coefficients_9\" | \"cubemap_faces\";\r\n\r\n/**\r\n * Image type used for environment map\r\n */\r\nexport type ImageType = \"png\";\r\n\r\n//Payload Descriptor\r\n\r\n/**\r\n * A generic field in JSON that report's its type\r\n */\r\nexport interface TypedObject<T> {\r\n type: T;\r\n}\r\n\r\n/**\r\n * Describes a range of bytes starting at byte pos (inclusive) and finishing at byte pos + length - 1\r\n */\r\nexport interface ByteRange {\r\n pos: number;\r\n length: number;\r\n}\r\n\r\n/**\r\n * Complete Spectre Environment JSON Descriptor\r\n */\r\nexport interface EnvJsonDescriptor {\r\n radiance: TypedObject<MapType>;\r\n irradiance: TypedObject<MapType>;\r\n specular: TypedObject<MapType>;\r\n}\r\n\r\n/**\r\n * Spherical harmonic coefficients to provide an irradiance map\r\n */\r\nexport interface IrradianceSHCoefficients9 extends TypedObject<MapType> {\r\n l00: Array<number>;\r\n\r\n l1_1: Array<number>;\r\n l10: Array<number>;\r\n l11: Array<number>;\r\n\r\n l2_2: Array<number>;\r\n l2_1: Array<number>;\r\n l20: Array<number>;\r\n l21: Array<number>;\r\n l22: Array<number>;\r\n}\r\n\r\n/**\r\n * A generic set of images, where the image content is specified by byte ranges in the mipmaps field\r\n */\r\nexport interface ImageSet<T> extends TypedObject<MapType> {\r\n imageType: ImageType;\r\n width: number;\r\n height: number;\r\n mipmaps: Array<T>;\r\n multiplier: number;\r\n}\r\n\r\n/**\r\n * A set of cubemap faces\r\n */\r\nexport type CubemapFaces = ImageSet<Array<ByteRange>>;\r\n\r\n/**\r\n * A single image containing an atlas of equirectangular-projection maps across all mip levels\r\n */\r\nexport type EquirectangularMipmapAtlas = ImageSet<ByteRange>;\r\n\r\n/**\r\n * A static class proving methods to aid parsing Spectre environment files\r\n */\r\nexport class EnvironmentDeserializer {\r\n /**\r\n * Parses an arraybuffer into a new PBREnvironment object\r\n * @param arrayBuffer The arraybuffer of the Spectre environment file\r\n * @returns a PBREnvironment object\r\n */\r\n public static Parse(arrayBuffer: ArrayBuffer): PBREnvironment {\r\n const environment: PBREnvironment = {\r\n //irradiance\r\n irradiancePolynomialCoefficients: {\r\n x: new Vector3(0, 0, 0),\r\n y: new Vector3(0, 0, 0),\r\n z: new Vector3(0, 0, 0),\r\n xx: new Vector3(0, 0, 0),\r\n yy: new Vector3(0, 0, 0),\r\n zz: new Vector3(0, 0, 0),\r\n yz: new Vector3(0, 0, 0),\r\n zx: new Vector3(0, 0, 0),\r\n xy: new Vector3(0, 0, 0),\r\n },\r\n\r\n //specular\r\n textureIntensityScale: 1.0,\r\n };\r\n\r\n //read .env\r\n const littleEndian = false;\r\n\r\n const magicBytes = [0x86, 0x16, 0x87, 0x96, 0xf6, 0xd6, 0x96, 0x36];\r\n\r\n const dataView = new DataView(arrayBuffer);\r\n let pos = 0;\r\n\r\n for (let i = 0; i < magicBytes.length; i++) {\r\n if (dataView.getUint8(pos++) !== magicBytes[i]) {\r\n Tools.Error(\"Not a Spectre environment map\");\r\n }\r\n }\r\n\r\n const version = dataView.getUint16(pos, littleEndian);\r\n pos += 2;\r\n\r\n if (version !== 1) {\r\n Tools.Warn('Unsupported Spectre environment map version \"' + version + '\"');\r\n }\r\n\r\n //read json descriptor - collect characters up to null terminator\r\n let descriptorString = \"\";\r\n let charCode = 0x00;\r\n while ((charCode = dataView.getUint8(pos++))) {\r\n descriptorString += String.fromCharCode(charCode);\r\n }\r\n\r\n const descriptor: EnvJsonDescriptor = JSON.parse(descriptorString);\r\n\r\n const payloadPos = pos;\r\n\r\n //irradiance\r\n switch (descriptor.irradiance.type) {\r\n case \"irradiance_sh_coefficients_9\": {\r\n //irradiance\r\n const harmonics = <IrradianceSHCoefficients9>descriptor.irradiance;\r\n\r\n EnvironmentDeserializer._ConvertSHIrradianceToLambertianRadiance(harmonics);\r\n\r\n //harmonics now represent radiance\r\n EnvironmentDeserializer._ConvertSHToSP(harmonics, environment.irradiancePolynomialCoefficients);\r\n break;\r\n }\r\n default:\r\n Tools.Error(\"Unhandled MapType descriptor.irradiance.type (\" + descriptor.irradiance.type + \")\");\r\n }\r\n\r\n //specular\r\n switch (descriptor.specular.type) {\r\n case \"cubemap_faces\": {\r\n const specularDescriptor = <CubemapFaces>descriptor.specular;\r\n\r\n const specularTexture = (environment.specularTexture = new TextureCube(PixelFormat.RGBA, PixelType.UNSIGNED_BYTE));\r\n environment.textureIntensityScale = specularDescriptor.multiplier != null ? specularDescriptor.multiplier : 1.0;\r\n\r\n const mipmaps = specularDescriptor.mipmaps;\r\n const imageType = specularDescriptor.imageType;\r\n\r\n for (let l = 0; l < mipmaps.length; l++) {\r\n const faceRanges = mipmaps[l];\r\n\r\n specularTexture.source[l] = [];\r\n\r\n for (let i = 0; i < 6; i++) {\r\n const range = faceRanges[i];\r\n const bytes = new Uint8Array(arrayBuffer, payloadPos + range.pos, range.length);\r\n\r\n switch (imageType) {\r\n case \"png\": {\r\n //construct image element from bytes\r\n const image = new Image();\r\n const src = URL.createObjectURL(new Blob([bytes], { type: \"image/png\" }));\r\n image.src = src;\r\n specularTexture.source[l][i] = image;\r\n\r\n break;\r\n }\r\n default:\r\n Tools.Error(\"Unhandled ImageType descriptor.specular.imageType (\" + imageType + \")\");\r\n }\r\n }\r\n }\r\n\r\n break;\r\n }\r\n default:\r\n Tools.Error(\"Unhandled MapType descriptor.specular.type (\" + descriptor.specular.type + \")\");\r\n }\r\n\r\n return environment;\r\n }\r\n\r\n /**\r\n * Convert from irradiance to outgoing radiance for Lambertian BDRF, suitable for efficient shader evaluation.\r\n *\t L = (1/pi) * E * rho\r\n *\r\n * This is done by an additional scale by 1/pi, so is a fairly trivial operation but important conceptually.\r\n * @param harmonics Spherical harmonic coefficients (9)\r\n */\r\n private static _ConvertSHIrradianceToLambertianRadiance(harmonics: any): void {\r\n EnvironmentDeserializer._ScaleSH(harmonics, 1 / Math.PI);\r\n // The resultant SH now represents outgoing radiance, so includes the Lambert 1/pi normalisation factor but without albedo (rho) applied\r\n // (The pixel shader must apply albedo after texture fetches, etc).\r\n }\r\n\r\n /**\r\n * Convert spherical harmonics to spherical polynomial coefficients\r\n * @param harmonics Spherical harmonic coefficients (9)\r\n * @param outPolynomialCoefficents Polynomial coefficients (9) object to store result\r\n */\r\n private static _ConvertSHToSP(harmonics: any, outPolynomialCoefficents: SphericalPolynomalCoefficients) {\r\n const rPi = 1 / Math.PI;\r\n\r\n //x\r\n outPolynomialCoefficents.x.x = 1.02333 * harmonics.l11[0] * rPi;\r\n outPolynomialCoefficents.x.y = 1.02333 * harmonics.l11[1] * rPi;\r\n outPolynomialCoefficents.x.z = 1.02333 * harmonics.l11[2] * rPi;\r\n\r\n outPolynomialCoefficents.y.x = 1.02333 * harmonics.l1_1[0] * rPi;\r\n outPolynomialCoefficents.y.y = 1.02333 * harmonics.l1_1[1] * rPi;\r\n outPolynomialCoefficents.y.z = 1.02333 * harmonics.l1_1[2] * rPi;\r\n\r\n outPolynomialCoefficents.z.x = 1.02333 * harmonics.l10[0] * rPi;\r\n outPolynomialCoefficents.z.y = 1.02333 * harmonics.l10[1] * rPi;\r\n outPolynomialCoefficents.z.z = 1.02333 * harmonics.l10[2] * rPi;\r\n\r\n //xx\r\n outPolynomialCoefficents.xx.x = (0.886277 * harmonics.l00[0] - 0.247708 * harmonics.l20[0] + 0.429043 * harmonics.l22[0]) * rPi;\r\n outPolynomialCoefficents.xx.y = (0.886277 * harmonics.l00[1] - 0.247708 * harmonics.l20[1] + 0.429043 * harmonics.l22[1]) * rPi;\r\n outPolynomialCoefficents.xx.z = (0.886277 * harmonics.l00[2] - 0.247708 * harmonics.l20[2] + 0.429043 * harmonics.l22[2]) * rPi;\r\n\r\n outPolynomialCoefficents.yy.x = (0.886277 * harmonics.l00[0] - 0.247708 * harmonics.l20[0] - 0.429043 * harmonics.l22[0]) * rPi;\r\n outPolynomialCoefficents.yy.y = (0.886277 * harmonics.l00[1] - 0.247708 * harmonics.l20[1] - 0.429043 * harmonics.l22[1]) * rPi;\r\n outPolynomialCoefficents.yy.z = (0.886277 * harmonics.l00[2] - 0.247708 * harmonics.l20[2] - 0.429043 * harmonics.l22[2]) * rPi;\r\n\r\n outPolynomialCoefficents.zz.x = (0.886277 * harmonics.l00[0] + 0.495417 * harmonics.l20[0]) * rPi;\r\n outPolynomialCoefficents.zz.y = (0.886277 * harmonics.l00[1] + 0.495417 * harmonics.l20[1]) * rPi;\r\n outPolynomialCoefficents.zz.z = (0.886277 * harmonics.l00[2] + 0.495417 * harmonics.l20[2]) * rPi;\r\n\r\n //yz\r\n outPolynomialCoefficents.yz.x = 0.858086 * harmonics.l2_1[0] * rPi;\r\n outPolynomialCoefficents.yz.y = 0.858086 * harmonics.l2_1[1] * rPi;\r\n outPolynomialCoefficents.yz.z = 0.858086 * harmonics.l2_1[2] * rPi;\r\n\r\n outPolynomialCoefficents.zx.x = 0.858086 * harmonics.l21[0] * rPi;\r\n outPolynomialCoefficents.zx.y = 0.858086 * harmonics.l21[1] * rPi;\r\n outPolynomialCoefficents.zx.z = 0.858086 * harmonics.l21[2] * rPi;\r\n\r\n outPolynomialCoefficents.xy.x = 0.858086 * harmonics.l2_2[0] * rPi;\r\n outPolynomialCoefficents.xy.y = 0.858086 * harmonics.l2_2[1] * rPi;\r\n outPolynomialCoefficents.xy.z = 0.858086 * harmonics.l2_2[2] * rPi;\r\n }\r\n\r\n /**\r\n * Multiplies harmonic coefficients in place\r\n * @param harmonics Spherical harmonic coefficients (9)\r\n * @param scaleFactor Value to multiply by\r\n */\r\n private static _ScaleSH(harmonics: any, scaleFactor: number) {\r\n harmonics.l00[0] *= scaleFactor;\r\n harmonics.l00[1] *= scaleFactor;\r\n harmonics.l00[2] *= scaleFactor;\r\n harmonics.l1_1[0] *= scaleFactor;\r\n harmonics.l1_1[1] *= scaleFactor;\r\n harmonics.l1_1[2] *= scaleFactor;\r\n harmonics.l10[0] *= scaleFactor;\r\n harmonics.l10[1] *= scaleFactor;\r\n harmonics.l10[2] *= scaleFactor;\r\n harmonics.l11[0] *= scaleFactor;\r\n harmonics.l11[1] *= scaleFactor;\r\n harmonics.l11[2] *= scaleFactor;\r\n harmonics.l2_2[0] *= scaleFactor;\r\n harmonics.l2_2[1] *= scaleFactor;\r\n harmonics.l2_2[2] *= scaleFactor;\r\n harmonics.l2_1[0] *= scaleFactor;\r\n harmonics.l2_1[1] *= scaleFactor;\r\n harmonics.l2_1[2] *= scaleFactor;\r\n harmonics.l20[0] *= scaleFactor;\r\n harmonics.l20[1] *= scaleFactor;\r\n harmonics.l20[2] *= scaleFactor;\r\n harmonics.l21[0] *= scaleFactor;\r\n harmonics.l21[1] *= scaleFactor;\r\n harmonics.l21[2] *= scaleFactor;\r\n harmonics.l22[0] *= scaleFactor;\r\n harmonics.l22[1] *= scaleFactor;\r\n harmonics.l22[2] *= scaleFactor;\r\n }\r\n}\r\n"]}
|
package/labs/texture.d.ts
CHANGED
|
@@ -161,7 +161,7 @@ export declare class TextureUtils {
|
|
|
161
161
|
* @param automaticMipmaps Pass true to enable automatic mipmap generation where possible (requires power of images)
|
|
162
162
|
* @param environment Specifies that the texture will be used as an environment
|
|
163
163
|
* @param singleLod Specifies that the texture will be a singleLod (for environment)
|
|
164
|
-
* @
|
|
164
|
+
* @returns Babylon cube texture
|
|
165
165
|
*/
|
|
166
166
|
static GetBabylonCubeTexture(scene: Scene, textureCube: TextureCube, automaticMipmaps: boolean, environment?: boolean, singleLod?: boolean): CubeTexture;
|
|
167
167
|
/**
|
package/labs/texture.js
CHANGED
|
@@ -58,7 +58,7 @@ var TextureUtils = /** @class */ (function () {
|
|
|
58
58
|
* @param automaticMipmaps Pass true to enable automatic mipmap generation where possible (requires power of images)
|
|
59
59
|
* @param environment Specifies that the texture will be used as an environment
|
|
60
60
|
* @param singleLod Specifies that the texture will be a singleLod (for environment)
|
|
61
|
-
* @
|
|
61
|
+
* @returns Babylon cube texture
|
|
62
62
|
*/
|
|
63
63
|
TextureUtils.GetBabylonCubeTexture = function (scene, textureCube, automaticMipmaps, environment, singleLod) {
|
|
64
64
|
var _a;
|
package/labs/texture.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"texture.js","sourceRoot":"","sources":["../../../../../tools/viewer/src/labs/texture.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"core/scene\";\r\nimport { CubeTexture } from \"core/Materials/Textures/cubeTexture\";\r\nimport { InternalTexture, InternalTextureSource } from \"core/Materials/Textures/internalTexture\";\r\nimport { Scalar } from \"core/Maths/math.scalar\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { Texture } from \"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 * Returns the width of a face of the texture or 0 if not available\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\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 // eslint-disable-next-line @typescript-eslint/naming-convention\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 * 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 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) {\r\n throw new Error(\"no texture cube provided\");\r\n }\r\n\r\n let parameters: SamplingParameters;\r\n if (environment) {\r\n parameters = singleLod ? TextureUtils._EnvironmentSingleMipSampling : TextureUtils._EnvironmentSampling;\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 const 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 //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 const internalTexture = new InternalTexture(scene.getEngine(), InternalTextureSource.CubeRaw);\r\n const 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 const maxMipLevel = automaticMipmaps ? 0 : textureCube.source.length - 1;\r\n let texturesUploaded = 0;\r\n\r\n const textureComplete = function () {\r\n return texturesUploaded === (maxMipLevel + 1) * 6;\r\n };\r\n\r\n const uploadFace = function (i: number, level: number, face: TextureSource) {\r\n if (!glTexture) {\r\n return;\r\n }\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 const 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 const textureData = <TextureData>face;\r\n gl.texImage2D(\r\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + i,\r\n level,\r\n textureCube.internalFormat,\r\n textureData.width,\r\n textureData.height,\r\n 0,\r\n textureData.format,\r\n textureCube.type,\r\n textureData.data\r\n );\r\n }\r\n\r\n texturesUploaded++;\r\n\r\n if (textureComplete()) {\r\n //generate mipmaps\r\n if (automaticMipmaps) {\r\n const w = face.width;\r\n const h = face.height;\r\n const 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 const 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 const smoothness = i / (mipSlices - 1);\r\n const roughness = 1 - smoothness;\r\n const kMinimumVariance = 0.0005;\r\n const alphaG = roughness * roughness + kMinimumVariance;\r\n const microsurfaceAverageSlopeTexels = alphaG * textureCube.Width;\r\n\r\n const environmentSpecularLOD = TextureUtils.EnvironmentLODScale * Scalar.Log2(microsurfaceAverageSlopeTexels) + TextureUtils.EnvironmentLODOffset;\r\n\r\n const maxLODIndex = textureCube.source.length - 1;\r\n const mipmapIndex = Math.min(Math.max(Math.round(environmentSpecularLOD), 0), maxLODIndex);\r\n\r\n lod = TextureUtils.GetBabylonCubeTexture(\r\n scene,\r\n new TextureCube(PixelFormat.RGBA, PixelType.UNSIGNED_BYTE, [textureCube.source[mipmapIndex]]),\r\n false,\r\n true,\r\n true\r\n );\r\n\r\n if (i === 0) {\r\n internalTexture._lodTextureLow = lod;\r\n } else if (i === 1) {\r\n internalTexture._lodTextureMid = lod;\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 const faces = textureCube.source[i];\r\n for (let j = 0; j < faces.length; j++) {\r\n const face = faces[j];\r\n if (face instanceof HTMLImageElement && !face.complete) {\r\n face.addEventListener(\r\n \"load\",\r\n () => {\r\n uploadFace(j, i, face);\r\n },\r\n false\r\n );\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 const scene = babylonTexture.getScene();\r\n if (!scene) {\r\n return;\r\n }\r\n const gl = (<any>scene.getEngine())._gl;\r\n\r\n const target = babylonTexture.isCube ? gl.TEXTURE_CUBE_MAP : gl.TEXTURE_2D;\r\n\r\n const internalTexture = babylonTexture._texture;\r\n if (!internalTexture) {\r\n return;\r\n }\r\n const glTexture = internalTexture._hardwareTexture?.underlyingResource;\r\n gl.bindTexture(target, glTexture);\r\n\r\n if (parameters.magFilter != null) {\r\n gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, parameters.magFilter);\r\n }\r\n if (parameters.minFilter != null) {\r\n gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, parameters.minFilter);\r\n }\r\n if (parameters.wrapS != null) {\r\n gl.texParameteri(target, gl.TEXTURE_WRAP_S, parameters.wrapS);\r\n }\r\n if (parameters.wrapT != null) {\r\n gl.texParameteri(target, gl.TEXTURE_WRAP_T, parameters.wrapT);\r\n }\r\n\r\n //set babylon wrap modes from sampling parameter\r\n switch (parameters.wrapS) {\r\n case TextureWrapMode.REPEAT:\r\n babylonTexture.wrapU = Texture.WRAP_ADDRESSMODE;\r\n break;\r\n case TextureWrapMode.CLAMP_TO_EDGE:\r\n babylonTexture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n break;\r\n case TextureWrapMode.MIRRORED_REPEAT:\r\n babylonTexture.wrapU = Texture.MIRROR_ADDRESSMODE;\r\n break;\r\n default:\r\n babylonTexture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n\r\n switch (parameters.wrapT) {\r\n case TextureWrapMode.REPEAT:\r\n babylonTexture.wrapV = Texture.WRAP_ADDRESSMODE;\r\n break;\r\n case TextureWrapMode.CLAMP_TO_EDGE:\r\n babylonTexture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n break;\r\n case TextureWrapMode.MIRRORED_REPEAT:\r\n babylonTexture.wrapV = Texture.MIRROR_ADDRESSMODE;\r\n break;\r\n default:\r\n babylonTexture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n\r\n if (parameters.maxAnisotropy != null && parameters.maxAnisotropy > 1) {\r\n const anisotropicExt = gl.getExtension(\"EXT_texture_filter_anisotropic\");\r\n if (anisotropicExt) {\r\n const maxAnisotropicSamples = gl.getParameter(anisotropicExt.MAX_TEXTURE_MAX_ANISOTROPY_EXT);\r\n const 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}\r\n"]}
|
|
1
|
+
{"version":3,"file":"texture.js","sourceRoot":"","sources":["../../../../../tools/viewer/src/labs/texture.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"core/scene\";\r\nimport { CubeTexture } from \"core/Materials/Textures/cubeTexture\";\r\nimport { InternalTexture, InternalTextureSource } from \"core/Materials/Textures/internalTexture\";\r\nimport { Scalar } from \"core/Maths/math.scalar\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { Texture } from \"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 * Returns the width of a face of the texture or 0 if not available\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\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 // eslint-disable-next-line @typescript-eslint/naming-convention\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 * 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 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 * @returns 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) {\r\n throw new Error(\"no texture cube provided\");\r\n }\r\n\r\n let parameters: SamplingParameters;\r\n if (environment) {\r\n parameters = singleLod ? TextureUtils._EnvironmentSingleMipSampling : TextureUtils._EnvironmentSampling;\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 const 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 //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 const internalTexture = new InternalTexture(scene.getEngine(), InternalTextureSource.CubeRaw);\r\n const 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 const maxMipLevel = automaticMipmaps ? 0 : textureCube.source.length - 1;\r\n let texturesUploaded = 0;\r\n\r\n const textureComplete = function () {\r\n return texturesUploaded === (maxMipLevel + 1) * 6;\r\n };\r\n\r\n const uploadFace = function (i: number, level: number, face: TextureSource) {\r\n if (!glTexture) {\r\n return;\r\n }\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 const 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 const textureData = <TextureData>face;\r\n gl.texImage2D(\r\n gl.TEXTURE_CUBE_MAP_POSITIVE_X + i,\r\n level,\r\n textureCube.internalFormat,\r\n textureData.width,\r\n textureData.height,\r\n 0,\r\n textureData.format,\r\n textureCube.type,\r\n textureData.data\r\n );\r\n }\r\n\r\n texturesUploaded++;\r\n\r\n if (textureComplete()) {\r\n //generate mipmaps\r\n if (automaticMipmaps) {\r\n const w = face.width;\r\n const h = face.height;\r\n const 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 const 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 const smoothness = i / (mipSlices - 1);\r\n const roughness = 1 - smoothness;\r\n const kMinimumVariance = 0.0005;\r\n const alphaG = roughness * roughness + kMinimumVariance;\r\n const microsurfaceAverageSlopeTexels = alphaG * textureCube.Width;\r\n\r\n const environmentSpecularLOD = TextureUtils.EnvironmentLODScale * Scalar.Log2(microsurfaceAverageSlopeTexels) + TextureUtils.EnvironmentLODOffset;\r\n\r\n const maxLODIndex = textureCube.source.length - 1;\r\n const mipmapIndex = Math.min(Math.max(Math.round(environmentSpecularLOD), 0), maxLODIndex);\r\n\r\n lod = TextureUtils.GetBabylonCubeTexture(\r\n scene,\r\n new TextureCube(PixelFormat.RGBA, PixelType.UNSIGNED_BYTE, [textureCube.source[mipmapIndex]]),\r\n false,\r\n true,\r\n true\r\n );\r\n\r\n if (i === 0) {\r\n internalTexture._lodTextureLow = lod;\r\n } else if (i === 1) {\r\n internalTexture._lodTextureMid = lod;\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 const faces = textureCube.source[i];\r\n for (let j = 0; j < faces.length; j++) {\r\n const face = faces[j];\r\n if (face instanceof HTMLImageElement && !face.complete) {\r\n face.addEventListener(\r\n \"load\",\r\n () => {\r\n uploadFace(j, i, face);\r\n },\r\n false\r\n );\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 const scene = babylonTexture.getScene();\r\n if (!scene) {\r\n return;\r\n }\r\n const gl = (<any>scene.getEngine())._gl;\r\n\r\n const target = babylonTexture.isCube ? gl.TEXTURE_CUBE_MAP : gl.TEXTURE_2D;\r\n\r\n const internalTexture = babylonTexture._texture;\r\n if (!internalTexture) {\r\n return;\r\n }\r\n const glTexture = internalTexture._hardwareTexture?.underlyingResource;\r\n gl.bindTexture(target, glTexture);\r\n\r\n if (parameters.magFilter != null) {\r\n gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, parameters.magFilter);\r\n }\r\n if (parameters.minFilter != null) {\r\n gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, parameters.minFilter);\r\n }\r\n if (parameters.wrapS != null) {\r\n gl.texParameteri(target, gl.TEXTURE_WRAP_S, parameters.wrapS);\r\n }\r\n if (parameters.wrapT != null) {\r\n gl.texParameteri(target, gl.TEXTURE_WRAP_T, parameters.wrapT);\r\n }\r\n\r\n //set babylon wrap modes from sampling parameter\r\n switch (parameters.wrapS) {\r\n case TextureWrapMode.REPEAT:\r\n babylonTexture.wrapU = Texture.WRAP_ADDRESSMODE;\r\n break;\r\n case TextureWrapMode.CLAMP_TO_EDGE:\r\n babylonTexture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n break;\r\n case TextureWrapMode.MIRRORED_REPEAT:\r\n babylonTexture.wrapU = Texture.MIRROR_ADDRESSMODE;\r\n break;\r\n default:\r\n babylonTexture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n\r\n switch (parameters.wrapT) {\r\n case TextureWrapMode.REPEAT:\r\n babylonTexture.wrapV = Texture.WRAP_ADDRESSMODE;\r\n break;\r\n case TextureWrapMode.CLAMP_TO_EDGE:\r\n babylonTexture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n break;\r\n case TextureWrapMode.MIRRORED_REPEAT:\r\n babylonTexture.wrapV = Texture.MIRROR_ADDRESSMODE;\r\n break;\r\n default:\r\n babylonTexture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n\r\n if (parameters.maxAnisotropy != null && parameters.maxAnisotropy > 1) {\r\n const anisotropicExt = gl.getExtension(\"EXT_texture_filter_anisotropic\");\r\n if (anisotropicExt) {\r\n const maxAnisotropicSamples = gl.getParameter(anisotropicExt.MAX_TEXTURE_MAX_ANISOTROPY_EXT);\r\n const 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}\r\n"]}
|
|
@@ -221,7 +221,7 @@ export declare class SceneManager {
|
|
|
221
221
|
* Gets the shadow map blur kernel according to the light configuration.
|
|
222
222
|
* @param light The light used to generate the shadows
|
|
223
223
|
* @param bufferSize The size of the shadow map
|
|
224
|
-
* @
|
|
224
|
+
* @returns the kernel blur size
|
|
225
225
|
*/
|
|
226
226
|
getBlurKernel(light: IShadowLight, bufferSize: number): number;
|
|
227
227
|
/**
|
package/managers/sceneManager.js
CHANGED
|
@@ -1226,7 +1226,7 @@ var SceneManager = /** @class */ (function () {
|
|
|
1226
1226
|
* Gets the shadow map blur kernel according to the light configuration.
|
|
1227
1227
|
* @param light The light used to generate the shadows
|
|
1228
1228
|
* @param bufferSize The size of the shadow map
|
|
1229
|
-
* @
|
|
1229
|
+
* @returns the kernel blur size
|
|
1230
1230
|
*/
|
|
1231
1231
|
SceneManager.prototype.getBlurKernel = function (light, bufferSize) {
|
|
1232
1232
|
var normalizedBlurKernel = 0.05; // TODO Should come from the config.
|