UNPKG

threepipe

Version:

A modern 3D viewer framework built on top of three.js, written in TypeScript, designed to make creating high-quality, modular, and extensible 3D experiences on the web simple and enjoyable.

65 lines 3.04 kB
/** * Displacement Map Extension * * displacementTexture and displacementScale are added to the material * * Specification: https://threepipe.org/docs/gltf-extensions/WEBGI_materials_displacementmap.html */ export class GLTFMaterialsDisplacementMapExtension { } GLTFMaterialsDisplacementMapExtension.WebGiMaterialsDisplacementMapExtension = 'WEBGI_materials_displacementmap'; GLTFMaterialsDisplacementMapExtension.Import = (parser) => new GLTFMaterialsDisplacementMapExtensionImport(parser); GLTFMaterialsDisplacementMapExtension.Export = (writer) => new GLTFMaterialsDisplacementMapExtensionExport(writer); // see GLTFDracoExportPlugin GLTFMaterialsDisplacementMapExtension.Textures = { displacementTexture: 'R', }; class GLTFMaterialsDisplacementMapExtensionImport { constructor(parser) { this.parser = parser; this.name = GLTFMaterialsDisplacementMapExtension.WebGiMaterialsDisplacementMapExtension; } 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.displacementScale !== undefined) { materialParams.displacementScale = extension.displacementScale; } if (extension.displacementBias !== undefined) { materialParams.displacementBias = extension.displacementBias; } if (extension.displacementTexture !== undefined) { pending.push(parser.assignTexture(materialParams, 'displacementMap', extension.displacementTexture)); } return Promise.all(pending); } } class GLTFMaterialsDisplacementMapExtensionExport { constructor(writer) { this.writer = writer; this.name = GLTFMaterialsDisplacementMapExtension.WebGiMaterialsDisplacementMapExtension; } writeMaterial(material, materialDef) { if (!material.isMeshStandardMaterial || material.displacementScale === 0) return; const writer = this.writer; const extensionsUsed = writer.extensionsUsed; const extensionDef = {}; extensionDef.displacementScale = material.displacementScale; extensionDef.displacementBias = material.displacementBias; if (material.displacementMap && writer.checkEmptyMap(material.displacementMap)) { const displacementMapDef = { index: writer.processTexture(material.displacementMap) }; writer.applyTextureTransform(displacementMapDef, material.displacementMap); extensionDef.displacementTexture = displacementMapDef; } materialDef.extensions = materialDef.extensions || {}; materialDef.extensions[this.name] = extensionDef; extensionsUsed[this.name] = true; } } //# sourceMappingURL=GLTFMaterialsDisplacementMapExtension.js.map