@@ -13,6 +13,7 @@ import {
1313 SRGBColorSpace ,
1414 TextureLoader ,
1515 Object3D ,
16+ Vector2
1617} from 'three' ;
1718
1819import * 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