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.82 kB
/** * Bump Map Extension * * bumpTexture and bumpScale are added to the material * * Specification: https://webgi.xyz/docs/gltf-extensions/WEBGI_materials_bumpmap.html */ export class GLTFMaterialsBumpMapExtension { } GLTFMaterialsBumpMapExtension.WebGiMaterialsBumpMapExtension = 'WEBGI_materials_bumpmap'; GLTFMaterialsBumpMapExtension.Import = (parser) => new GLTFMaterialsBumpMapExtensionImport(parser); GLTFMaterialsBumpMapExtension.Export = (writer) => new GLTFMaterialsBumpMapExtensionExport(writer); // see GLTFDracoExportPlugin GLTFMaterialsBumpMapExtension.Textures = { bumpTexture: 'R', }; class GLTFMaterialsBumpMapExtensionImport { constructor(parser) { this.parser = parser; this.name = GLTFMaterialsBumpMapExtension.WebGiMaterialsBumpMapExtension; } // 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.bumpScale !== undefined) { materialParams.bumpScale = extension.bumpScale; } if (extension.bumpTexture !== undefined) { pending.push(parser.assignTexture(materialParams, 'bumpMap', extension.bumpTexture)); } return Promise.all(pending); } } class GLTFMaterialsBumpMapExtensionExport { constructor(writer) { this.writer = writer; this.name = GLTFMaterialsBumpMapExtension.WebGiMaterialsBumpMapExtension; } writeMaterial(material, materialDef) { if (!material.isMeshStandardMaterial || material.bumpScale === 0) return; const writer = this.writer; const extensionsUsed = writer.extensionsUsed; const extensionDef = {}; extensionDef.bumpScale = material.bumpScale; if (material.bumpMap) { const bumpMapDef = { index: writer.processTexture(material.bumpMap) }; writer.applyTextureTransform(bumpMapDef, material.bumpMap); extensionDef.bumpTexture = bumpMapDef; } materialDef.extensions = materialDef.extensions || {}; materialDef.extensions[this.name] = extensionDef; extensionsUsed[this.name] = true; } } //# sourceMappingURL=GLTFMaterialsBumpMapExtension.js.map