Skip to content
This repository was archived by the owner on Aug 21, 2024. It is now read-only.

Commit 1b58146

Browse files
authored
gltf-transform: fix assigning resource-specific compression parms (#9496)
1 parent 7ca8113 commit 1b58146

File tree

6 files changed

+27
-6
lines changed

6 files changed

+27
-6
lines changed

packages/engine/src/assets/classes/ModelTransform.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import { OpaqueType } from '@etherealengine/common/src/interfaces/OpaqueType'
3030
export type ResourceID = OpaqueType<'ResourceID'> & string
3131

3232
export type ParameterOverride<T> = OpaqueType<'ParameterOverride'> & {
33+
isParameterOverride: true
3334
enabled: boolean
3435
parameters: T
3536
}
@@ -39,7 +40,7 @@ export function extractParameters<T>(parameters: ParameterOverride<T>) {
3940
if (typeof parameters.parameters === 'object' && !Array.isArray(parameters.parameters)) {
4041
return Object.fromEntries(
4142
Object.entries(parameters.parameters as object).map(([key, value]: [string, ParameterOverride<any>]) => {
42-
if (value.__opaqueType === 'ParameterOverride') {
43+
if (value.isParameterOverride) {
4344
if (value.enabled) return [key, extractParameters(value)]
4445
else return []
4546
} else return [key, value]
@@ -48,7 +49,7 @@ export function extractParameters<T>(parameters: ParameterOverride<T>) {
4849
} else if (Array.isArray(parameters.parameters)) {
4950
return [
5051
...parameters.parameters.map((value) => {
51-
if (value.__opaqueType === 'ParameterOverride') {
52+
if (value.isParameterOverride) {
5253
if (value.enabled) return [extractParameters(value)]
5354
else return []
5455
} else return [value]

packages/engine/src/assets/compression/ModelTransformFunctions.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ import { baseName, pathJoin } from '@etherealengine/common/src/utils/miscUtils'
6161
import { fileBrowserPath } from '@etherealengine/engine/src/schemas/media/file-browser.schema'
6262
import { Engine } from '../../ecs/classes/Engine'
6363
import { EEMaterial, EEMaterialExtension } from './extensions/EE_MaterialTransformer'
64-
import { EEResourceID } from './extensions/EE_ResourceIDTransformer'
64+
import { EEResourceID, EEResourceIDExtension } from './extensions/EE_ResourceIDTransformer'
6565
import ModelTransformLoader from './ModelTransformLoader'
6666

6767
import config from '@etherealengine/common/src/config'
@@ -537,6 +537,13 @@ export async function transformModel(args: ModelTransformParameters) {
537537
.listExtensionsUsed()
538538
.find((ext) => ext.extensionName === 'EE_material') as EEMaterialExtension
539539
if (eeMaterialExtension) {
540+
for (let i = 0; i < eeMaterialExtension.textures.length; i++) {
541+
const texture = eeMaterialExtension.textures[i]
542+
const extensions = eeMaterialExtension.textureExtensions[i]
543+
for (const extension of extensions) {
544+
texture.setExtension(extension.extensionName, extension)
545+
}
546+
}
540547
textures.push(...eeMaterialExtension.textures)
541548
}
542549

@@ -548,7 +555,7 @@ export async function transformModel(args: ModelTransformParameters) {
548555
if (!oldImg) continue
549556
const oldSize = texture.getSize()
550557
if (!oldSize) continue
551-
const resourceId = texture.getExtension<EEResourceID>('EEResourceID')?.resourceId
558+
const resourceId = texture.getExtension<EEResourceID>(EEResourceIDExtension.EXTENSION_NAME)?.resourceId
552559
const resourceParms = parms.resources.images.find(
553560
(resource) => resource.enabled && resource.resourceId === resourceId
554561
)

packages/engine/src/assets/compression/ModelTransformLoader.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import { MeshoptDecoder, MeshoptEncoder } from 'meshoptimizer'
4545
import { FileLoader } from 'three'
4646

4747
import { EEMaterialExtension } from './extensions/EE_MaterialTransformer'
48+
import { EEResourceIDExtension } from './extensions/EE_ResourceIDTransformer'
4849
import { MOZLightmapExtension } from './extensions/MOZ_LightmapTransformer'
4950

5051
const transformHistory: string[] = []
@@ -65,6 +66,7 @@ export default async function ModelTransformLoader() {
6566
KHRTextureBasisu,
6667
KHRTextureTransform,
6768
MOZLightmapExtension,
69+
EEResourceIDExtension,
6870
EEMaterialExtension
6971
])
7072
io.registerDependencies({

packages/engine/src/assets/compression/extensions/EE_MaterialTransformer.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ export class EEMaterialExtension extends Extension {
194194
public static readonly EXTENSION_NAME = EXTENSION_NAME
195195

196196
textures: Texture[] = []
197+
textureExtensions: ExtensionProperty[][] = []
197198

198199
textureInfoMap: Map<string, TextureInfo> = new Map()
199200
materialInfoMap: Map<string, string[]> = new Map()
@@ -239,6 +240,7 @@ export class EEMaterialExtension extends Extension {
239240
texture.setExtras({ uuid })
240241
textureUuidIndex++
241242
this.textures.push(texture)
243+
this.textureExtensions.push(texture.listExtensions())
242244
}
243245
if (texture && value.extensions?.KHR_texture_transform) {
244246
const extensionData = value.extensions.KHR_texture_transform

packages/engine/src/assets/compression/extensions/EE_ResourceIDTransformer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import {
3535

3636
import { ResourceID } from '@etherealengine/engine/src/assets/classes/ModelTransform'
3737

38-
const EXTENSION_NAME = 'EE_resourceID'
38+
const EXTENSION_NAME = 'EE_resourceId'
3939

4040
interface IEEResourceID extends IProperty {
4141
resourceId: ResourceID

packages/engine/src/scene/functions/loaders/ModelFunctions.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,16 @@ export function getModelResources(entity: Entity): ResourceTransforms {
7171
}
7272
return {
7373
resourceId: geometry.uuid as ResourceID,
74+
isParameterOverride: true,
7475
enabled: true,
7576
parameters: {
7677
weld: {
78+
isParameterOverride: true,
7779
enabled: false,
7880
parameters: 0.0001
7981
},
8082
dracoCompression: {
83+
isParameterOverride: true,
8184
enabled: false,
8285
parameters: dracoParms
8386
}
@@ -106,26 +109,32 @@ export function getModelResources(entity: Entity): ResourceTransforms {
106109
const result: ImageTransformParameters[] = images.map((image) => {
107110
return {
108111
resourceId: image.id as ResourceID,
112+
isParameterOverride: true,
109113
enabled: false,
110114
parameters: {
111115
flipY: {
112116
enabled: false,
117+
isParameterOverride: true,
113118
parameters: false
114119
},
115120
maxTextureSize: {
116121
enabled: true,
117-
parameters: 2048
122+
isParameterOverride: true,
123+
parameters: 1024
118124
},
119125
textureFormat: {
120126
enabled: true,
127+
isParameterOverride: true,
121128
parameters: 'ktx2'
122129
},
123130
textureCompressionType: {
124131
enabled: false,
132+
isParameterOverride: true,
125133
parameters: 'etc1'
126134
},
127135
textureCompressionQuality: {
128136
enabled: false,
137+
isParameterOverride: true,
129138
parameters: 128
130139
}
131140
}

0 commit comments

Comments
 (0)