From 30428d8ee41765062e7a4b4c79e8dde3da507f7c Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Tue, 30 Oct 2018 11:19:20 -0400 Subject: [PATCH 1/2] Treat alpha of 0 as 1 --- lib/loadMtl.js | 9 +++- .../data/box-transparent/box-transparent.mtl | 12 +++++ .../data/box-transparent/box-transparent.obj | 46 +++++++++++++++++++ specs/lib/loadMtlSpec.js | 9 ++++ 4 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 specs/data/box-transparent/box-transparent.mtl create mode 100644 specs/data/box-transparent/box-transparent.obj diff --git a/lib/loadMtl.js b/lib/loadMtl.js index 8a7aa96..ac17648 100644 --- a/lib/loadMtl.js +++ b/lib/loadMtl.js @@ -63,10 +63,10 @@ function loadMtl(mtlPath) { material.specularShininess = parseFloat(value); } else if (/^d /i.test(line)) { value = line.substring(2).trim(); - material.alpha = parseFloat(value); + material.alpha = correctAlpha(parseFloat(value)); } else if (/^Tr /i.test(line)) { value = line.substring(3).trim(); - material.alpha = 1.0 - parseFloat(value); + material.alpha = correctAlpha(1.0 - parseFloat(value)); } else if (/^map_Ka /i.test(line)) { material.ambientTexture = normalizeTexturePath(line.substring(7).trim(), mtlDirectory); } else if (/^map_Ke /i.test(line)) { @@ -90,6 +90,11 @@ function loadMtl(mtlPath) { }); } +function correctAlpha(alpha) { + // An alpha of 0.0 usually implies a problem in the export, change to 1.0 instead + return alpha === 0.0 ? 1.0 : alpha; +} + function normalizeTexturePath(texturePath, mtlDirectory) { // Removes texture options from texture name // Assumes no spaces in texture name diff --git a/specs/data/box-transparent/box-transparent.mtl b/specs/data/box-transparent/box-transparent.mtl new file mode 100644 index 0000000..97102f0 --- /dev/null +++ b/specs/data/box-transparent/box-transparent.mtl @@ -0,0 +1,12 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl Material +Ns 96.078431 +Ka 0.100000 0.000000 0.000000 +Kd 0.640000 0.640000 0.640000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.100000 +Ni 1.000000 +d 0.000000 +illum 2 diff --git a/specs/data/box-transparent/box-transparent.obj b/specs/data/box-transparent/box-transparent.obj new file mode 100644 index 0000000..1f5a36f --- /dev/null +++ b/specs/data/box-transparent/box-transparent.obj @@ -0,0 +1,46 @@ +# Blender v2.78 (sub 0) OBJ File: '' +# www.blender.org +mtllib box-transparent.mtl +o Cube +v -1.000000 -1.000000 1.000000 +v -1.000000 1.000000 1.000000 +v -1.000000 -1.000000 -1.000000 +v -1.000000 1.000000 -1.000000 +v 1.000000 -1.000000 1.000000 +v 1.000000 1.000000 1.000000 +v 1.000000 -1.000000 -1.000000 +v 1.000000 1.000000 -1.000000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +usemtl Material +s off +f 1/1/1 2/2/1 4/3/1 3/4/1 +f 3/5/2 4/6/2 8/7/2 7/8/2 +f 7/9/3 8/10/3 6/11/3 5/12/3 +f 5/13/4 6/14/4 2/15/4 1/16/4 +f 3/5/5 7/17/5 5/18/5 1/16/5 +f 8/19/6 4/6/6 2/15/6 6/20/6 diff --git a/specs/lib/loadMtlSpec.js b/specs/lib/loadMtlSpec.js index 9d13473..53fc226 100644 --- a/specs/lib/loadMtlSpec.js +++ b/specs/lib/loadMtlSpec.js @@ -4,6 +4,7 @@ var loadMtl = require('../../lib/loadMtl'); var complexMaterialUrl = 'specs/data/box-complex-material/box-complex-material.mtl'; var multipleMaterialsUrl = 'specs/data/box-multiple-materials/box-multiple-materials.mtl'; +var transparentMaterialUrl = 'specs/data/box-transparent/box-transparent.mtl'; function getImagePath(objPath, relativePath) { return path.normalize(path.join(path.dirname(objPath), relativePath)); @@ -40,4 +41,12 @@ describe('loadMtl', function() { expect(materials.Blue.diffuseColor).toEqual([0.0, 0.0, 0.64, 1.0]); }), done).toResolve(); }); + + it('alpha of 0.0 is treated as 1.0', function(done) { + expect(loadMtl(transparentMaterialUrl) + .then(function(materials) { + var material = materials.Material; + expect(material.alpha).toBe(1.0); + }), done).toResolve(); + }); }); From 2b1beab94fa8be113a238b1c0df6320032170d7d Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Tue, 30 Oct 2018 11:35:53 -0400 Subject: [PATCH 2/2] Update CHANGES.md --- CHANGES.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 85f0199..70eb28e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,10 @@ Change Log ========== +### 1.3.5 ????-??-?? + +* Improved handling of materials with alpha. If the alpha value is 0.0 it is now treated as 1.0. [#164](https://github.com/AnalyticalGraphicsInc/obj2gltf/pull/164) + ### 1.3.4 2018-10-16 * Improved parsing models with concave or n-sided faces. [#158](https://github.com/AnalyticalGraphicsInc/obj2gltf/pull/158)