UNPKG

threepipe

Version:

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

65 lines 2.98 kB
/** * Displacement Map Extension * * displacementTexture and displacementScale are added to the material * * Specification: https://webgi.xyz/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) { 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