Skip to content

Commit f886330

Browse files
USDZ Loader - texture scale + offset + rotation (#26861)
1 parent cb64471 commit f886330

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

examples/jsm/loaders/USDZLoader.js

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
SRGBColorSpace,
1414
TextureLoader,
1515
Object3D,
16+
Vector2
1617
} from 'three';
1718

1819
import * as fflate from '../libs/fflate.module.js';
@@ -489,6 +490,30 @@ class USDZLoader extends Loader {
489490

490491
}
491492

493+
function setTextureParams( map, data_value ) {
494+
495+
// rotation, scale and translation
496+
497+
if ( data_value[ 'float inputs:rotation' ] ) {
498+
499+
map.rotation = parseFloat( data_value[ 'float inputs:rotation' ] );
500+
501+
}
502+
503+
if ( data_value[ 'float2 inputs:scale' ] ) {
504+
505+
map.repeat = new Vector2().fromArray( JSON.parse( '[' + data_value[ 'float2 inputs:scale' ].replace( /[()]*/g, '' ) + ']' ) );
506+
507+
}
508+
509+
if ( data_value[ 'float2 inputs:translation' ] ) {
510+
511+
map.offset = new Vector2().fromArray( JSON.parse( '[' + data_value[ 'float2 inputs:translation' ].replace( /[()]*/g, '' ) + ']' ) );
512+
513+
}
514+
515+
}
516+
492517
function buildMaterial( data ) {
493518

494519
const material = new MeshPhysicalMaterial();
@@ -507,6 +532,12 @@ class USDZLoader extends Loader {
507532
material.map = buildTexture( sampler );
508533
material.map.colorSpace = SRGBColorSpace;
509534

535+
if ( 'def Shader "Transform2d_diffuse"' in data ) {
536+
537+
setTextureParams( material.map, data[ 'def Shader "Transform2d_diffuse"' ] );
538+
539+
}
540+
510541
} else if ( 'color3f inputs:diffuseColor' in surface ) {
511542

512543
const color = surface[ 'color3f inputs:diffuseColor' ].replace( /[()]*/g, '' );
@@ -523,6 +554,12 @@ class USDZLoader extends Loader {
523554
material.emissiveMap.colorSpace = SRGBColorSpace;
524555
material.emissive.set( 0xffffff );
525556

557+
if ( 'def Shader "Transform2d_emissive"' in data ) {
558+
559+
setTextureParams( material.emissiveMap, data[ 'def Shader "Transform2d_emissive"' ] );
560+
561+
}
562+
526563
} else if ( 'color3f inputs:emissiveColor' in surface ) {
527564

528565
const color = surface[ 'color3f inputs:emissiveColor' ].replace( /[()]*/g, '' );
@@ -538,6 +575,12 @@ class USDZLoader extends Loader {
538575
material.normalMap = buildTexture( sampler );
539576
material.normalMap.colorSpace = NoColorSpace;
540577

578+
if ( 'def Shader "Transform2d_normal"' in data ) {
579+
580+
setTextureParams( material.normalMap, data[ 'def Shader "Transform2d_normal"' ] );
581+
582+
}
583+
541584
}
542585

543586
if ( 'float inputs:roughness.connect' in surface ) {
@@ -549,6 +592,12 @@ class USDZLoader extends Loader {
549592
material.roughnessMap = buildTexture( sampler );
550593
material.roughnessMap.colorSpace = NoColorSpace;
551594

595+
if ( 'def Shader "Transform2d_roughness"' in data ) {
596+
597+
setTextureParams( material.roughnessMap, data[ 'def Shader "Transform2d_roughness"' ] );
598+
599+
}
600+
552601
} else if ( 'float inputs:roughness' in surface ) {
553602

554603
material.roughness = parseFloat( surface[ 'float inputs:roughness' ] );
@@ -564,6 +613,12 @@ class USDZLoader extends Loader {
564613
material.metalnessMap = buildTexture( sampler );
565614
material.metalnessMap.colorSpace = NoColorSpace;
566615

616+
if ( 'def Shader "Transform2d_metallic"' in data ) {
617+
618+
setTextureParams( material.metalnessMap, data[ 'def Shader "Transform2d_metallic"' ] );
619+
620+
}
621+
567622
} else if ( 'float inputs:metallic' in surface ) {
568623

569624
material.metalness = parseFloat( surface[ 'float inputs:metallic' ] );
@@ -579,6 +634,12 @@ class USDZLoader extends Loader {
579634
material.clearcoatMap = buildTexture( sampler );
580635
material.clearcoatMap.colorSpace = NoColorSpace;
581636

637+
if ( 'def Shader "Transform2d_clearcoat"' in data ) {
638+
639+
setTextureParams( material.clearcoatMap, data[ 'def Shader "Transform2d_clearcoat"' ] );
640+
641+
}
642+
582643
} else if ( 'float inputs:clearcoat' in surface ) {
583644

584645
material.clearcoat = parseFloat( surface[ 'float inputs:clearcoat' ] );
@@ -594,6 +655,12 @@ class USDZLoader extends Loader {
594655
material.clearcoatRoughnessMap = buildTexture( sampler );
595656
material.clearcoatRoughnessMap.colorSpace = NoColorSpace;
596657

658+
if ( 'def Shader "Transform2d_clearcoatRoughness"' in data ) {
659+
660+
setTextureParams( material.clearcoatRoughnessMap, data[ 'def Shader "Transform2d_clearcoatRoughness"' ] );
661+
662+
}
663+
597664
} else if ( 'float inputs:clearcoatRoughness' in surface ) {
598665

599666
material.clearcoatRoughness = parseFloat( surface[ 'float inputs:clearcoatRoughness' ] );
@@ -614,6 +681,12 @@ class USDZLoader extends Loader {
614681
material.aoMap = buildTexture( sampler );
615682
material.aoMap.colorSpace = NoColorSpace;
616683

684+
if ( 'def Shader "Transform2d_occlusion"' in data ) {
685+
686+
setTextureParams( material.aoMap, data[ 'def Shader "Transform2d_occlusion"' ] );
687+
688+
}
689+
617690
}
618691

619692
}

0 commit comments

Comments
 (0)