@@ -3,7 +3,6 @@ import { DataTexture, RGBAFormat, ClampToEdgeWrapping, FloatType, FrontSide, Bac
33const MATERIAL_PIXELS = 45 ;
44const MATERIAL_STRIDE = MATERIAL_PIXELS * 4 ;
55
6- const SIDE_OFFSET = 13 * 4 + 3 ; // s12.a
76const MATTE_OFFSET = 14 * 4 + 0 ; // s14.r
87const SHADOW_OFFSET = 14 * 4 + 1 ; // s14.g
98
@@ -39,45 +38,6 @@ export class MaterialsTexture extends DataTexture {
3938
4039 }
4140
42- setSide ( materialIndex , side ) {
43-
44- const array = this . image . data ;
45- const index = materialIndex * MATERIAL_STRIDE + SIDE_OFFSET ;
46- switch ( side ) {
47-
48- case FrontSide :
49- array [ index ] = 1 ;
50- break ;
51- case BackSide :
52- array [ index ] = - 1 ;
53- break ;
54- case DoubleSide :
55- array [ index ] = 0 ;
56- break ;
57-
58- }
59-
60- }
61-
62- getSide ( materialIndex ) {
63-
64- const array = this . image . data ;
65- const index = materialIndex * MATERIAL_STRIDE + SIDE_OFFSET ;
66- switch ( array [ index ] ) {
67-
68- case 0 :
69- return DoubleSide ;
70- case 1 :
71- return FrontSide ;
72- case - 1 :
73- return BackSide ;
74-
75- }
76-
77- return 0 ;
78-
79- }
80-
8141 setMatte ( materialIndex , matte ) {
8242
8343 const array = this . image . data ;
@@ -336,8 +296,9 @@ export class MaterialsTexture extends DataTexture {
336296 floatArray [ index ++ ] = getField ( m , 'specularIntensity' , 1.0 ) ;
337297 floatArray [ index ++ ] = getTexture ( m , 'specularIntensityMap' ) ;
338298
339- // thickness
340- floatArray [ index ++ ] = getField ( m , 'thickness' , 0.0 ) === 0.0 && getField ( m , 'attenuationDistance' , Infinity ) === Infinity ;
299+ // isThinFilm
300+ const isThinFilm = getField ( m , 'thickness' , 0.0 ) === 0.0 && getField ( m , 'attenuationDistance' , Infinity ) === Infinity ;
301+ floatArray [ index ++ ] = Number ( isThinFilm ) ;
341302 index ++ ;
342303
343304 // sample 12
@@ -364,7 +325,27 @@ export class MaterialsTexture extends DataTexture {
364325 // side & matte
365326 floatArray [ index ++ ] = m . opacity ;
366327 floatArray [ index ++ ] = m . alphaTest ;
367- index ++ ; // side
328+ if ( ! isThinFilm && m . transmission > 0.0 ) {
329+
330+ floatArray [ index ++ ] = 0 ;
331+
332+ } else {
333+
334+ switch ( m . side ) {
335+
336+ case FrontSide :
337+ floatArray [ index ++ ] = 1 ;
338+ break ;
339+ case BackSide :
340+ floatArray [ index ++ ] = - 1 ;
341+ break ;
342+ case DoubleSide :
343+ floatArray [ index ++ ] = 0 ;
344+ break ;
345+
346+ }
347+
348+ }
368349
369350 // sample 14
370351 index ++ ; // matte
0 commit comments