UNPKG

threepipe

Version:

A 3D viewer framework built on top of three.js in TypeScript with a focus on quality rendering, modularity and extensibility.

71 lines 2.92 kB
/** * Light Map Extension * * lightMapTexture and lightMapIntensity are added to the material * * Specification: https://webgi.xyz/docs/gltf-extensions/WEBGI_materials_lightmap.html */ export class GLTFMaterialsLightMapExtension { } GLTFMaterialsLightMapExtension.WebGiMaterialsLightMapExtension = 'WEBGI_materials_lightmap'; GLTFMaterialsLightMapExtension.Import = (parser) => new GLTFMaterialsLightMapExtensionImport(parser); GLTFMaterialsLightMapExtension.Export = (writer) => new GLTFMaterialsLightMapExtensionExport(writer); // see GLTFDracoExportPlugin GLTFMaterialsLightMapExtension.Textures = { lightMapTexture: 'RGB', }; class GLTFMaterialsLightMapExtensionImport { constructor(parser) { this.parser = parser; this.name = GLTFMaterialsLightMapExtension.WebGiMaterialsLightMapExtension; } // getMaterialType(materialIndex: number) { // todo: required? // // const parser = this.parser // const materialDef = parser.json.materials[ materialIndex ] // // if (!materialDef.extensions || !materialDef.extensions[ this.name ]) return null // // return MeshPhysicalMaterial // // } async extendMaterialParams(materialIndex, materialParams) { const parser = this.parser; const materialDef = parser.json.materials[materialIndex]; if (!materialDef.extensions || !materialDef.extensions[this.name]) { return Promise.resolve(); } const pending = []; const extension = materialDef.extensions[this.name]; if (extension.lightMapIntensity !== undefined) { materialParams.lightMapIntensity = extension.lightMapIntensity; } if (extension.lightMapTexture !== undefined) { pending.push(parser.assignTexture(materialParams, 'lightMap', extension.lightMapTexture)); } return Promise.all(pending); } } class GLTFMaterialsLightMapExtensionExport { constructor(writer) { this.writer = writer; this.name = GLTFMaterialsLightMapExtension.WebGiMaterialsLightMapExtension; } writeMaterial(material, materialDef) { if (!material.isMeshStandardMaterial || material.lightMapIntensity === 0) return; const writer = this.writer; const extensionsUsed = writer.extensionsUsed; const extensionDef = {}; extensionDef.lightMapIntensity = material.lightMapIntensity; if (material.lightMap) { const lightMapDef = { index: writer.processTexture(material.lightMap) }; writer.applyTextureTransform(lightMapDef, material.lightMap); extensionDef.lightMapTexture = lightMapDef; } materialDef.extensions = materialDef.extensions || {}; materialDef.extensions[this.name] = extensionDef; extensionsUsed[this.name] = true; } } //# sourceMappingURL=GLTFMaterialsLightMapExtension.js.map