Browse Source

add overpaint support to geometry exporters

Sukolsak Sakshuwong 3 years ago
parent
commit
5e8cdfe3a7

+ 9 - 0
src/extensions/geo-export/glb-exporter.ts

@@ -132,6 +132,8 @@ export class GlbExporter extends MeshExporter<GlbData> {
         const uColor = values.uColor.ref.value;
         const tColor = values.tColor.ref.value.array;
         const uAlpha = values.uAlpha.ref.value;
+        const dOverpaint = values.dOverpaint.ref.value;
+        const tOverpaint = values.tOverpaint.ref.value.array;
         const dTransparency = values.dTransparency.ref.value;
         const tTransparency = values.tTransparency.ref.value;
 
@@ -171,6 +173,13 @@ export class GlbExporter extends MeshExporter<GlbData> {
                 default: throw new Error('Unsupported color type.');
             }
 
+            if (dOverpaint) {
+                const group = isGeoTexture ? GlbExporter.getGroup(groups, i) : groups[i];
+                const overpaintColor = Color.fromArray(tOverpaint, (instanceIndex * groupCount + group) * 4);
+                const overpaintAlpha = tOverpaint[(instanceIndex * groupCount + group) * 4 + 3] / 255;
+                color = Color.interpolate(color, overpaintColor, overpaintAlpha);
+            }
+
             let alpha = uAlpha;
             if (dTransparency) {
                 const group = isGeoTexture ? GlbExporter.getGroup(groups, i) : groups[i];

+ 9 - 0
src/extensions/geo-export/obj-exporter.ts

@@ -81,6 +81,8 @@ export class ObjExporter extends MeshExporter<ObjData> {
         const colorType = values.dColorType.ref.value;
         const tColor = values.tColor.ref.value.array;
         const uAlpha = values.uAlpha.ref.value;
+        const dOverpaint = values.dOverpaint.ref.value;
+        const tOverpaint = values.tOverpaint.ref.value.array;
         const dTransparency = values.dTransparency.ref.value;
         const tTransparency = values.tTransparency.ref.value;
         const aTransform = values.aTransform.ref.value;
@@ -162,6 +164,13 @@ export class ObjExporter extends MeshExporter<ObjData> {
                     default: throw new Error('Unsupported color type.');
                 }
 
+                if (dOverpaint) {
+                    const group = isGeoTexture ? ObjExporter.getGroup(groups, i) : groups[indices![i]];
+                    const overpaintColor = Color.fromArray(tOverpaint, (instanceIndex * groupCount + group) * 4);
+                    const overpaintAlpha = tOverpaint[(instanceIndex * groupCount + group) * 4 + 3] / 255;
+                    color = Color.interpolate(color, overpaintColor, overpaintAlpha);
+                }
+
                 let alpha = uAlpha;
                 if (dTransparency) {
                     const group = isGeoTexture ? ObjExporter.getGroup(groups, i) : groups[indices![i]];

+ 9 - 0
src/extensions/geo-export/usdz-exporter.ts

@@ -72,6 +72,8 @@ def Material "material${materialKey}"
         const colorType = values.dColorType.ref.value;
         const tColor = values.tColor.ref.value.array;
         const uAlpha = values.uAlpha.ref.value;
+        const dOverpaint = values.dOverpaint.ref.value;
+        const tOverpaint = values.tOverpaint.ref.value.array;
         const dTransparency = values.dTransparency.ref.value;
         const tTransparency = values.tTransparency.ref.value;
         const aTransform = values.aTransform.ref.value;
@@ -165,6 +167,13 @@ def Material "material${materialKey}"
                     default: throw new Error('Unsupported color type.');
                 }
 
+                if (dOverpaint) {
+                    const group = isGeoTexture ? UsdzExporter.getGroup(groups, i) : groups[indices![i]];
+                    const overpaintColor = Color.fromArray(tOverpaint, (instanceIndex * groupCount + group) * 4);
+                    const overpaintAlpha = tOverpaint[(instanceIndex * groupCount + group) * 4 + 3] / 255;
+                    color = Color.interpolate(color, overpaintColor, overpaintAlpha);
+                }
+
                 let alpha = uAlpha;
                 if (dTransparency) {
                     const group = isGeoTexture ? UsdzExporter.getGroup(groups, i) : groups[indices![i]];