diff --git a/docs/api/en/textures/Texture.html b/docs/api/en/textures/Texture.html index a2744ff723b4eb..a9ce017f6e386f 100644 --- a/docs/api/en/textures/Texture.html +++ b/docs/api/en/textures/Texture.html @@ -77,6 +77,11 @@

[property:number mapping]

See the [page:Textures texture constants] page for other mapping types.

+

[property:Integer channel]

+

+ Lets you select the uv attribute to map the texture to. `0` for `uv` and `1` for `uv2`. +

+

[property:number wrapS]

This defines how the texture is wrapped horizontally and corresponds to *U* in UV mapping.
@@ -151,39 +156,13 @@

[property:Vector2 offset]

How much a single repetition of the texture is offset from the beginning, in each direction U and V. Typical range is `0.0` to `1.0`.

-

- The below texture types share the `first` uv channel in the engine. The offset (and repeat) setting is evaluated according to - the following priorities and then shared by those textures: -

    -
  1. color map
  2. -
  3. specular map
  4. -
  5. displacement map
  6. -
  7. normal map
  8. -
  9. bump map
  10. -
  11. roughness map
  12. -
  13. metalness map
  14. -
  15. alpha map
  16. -
  17. emissive map
  18. -
  19. clearcoat map
  20. -
  21. clearcoat normal map
  22. -
  23. clearcoat roughnessMap map
  24. -
-

-

- The below texture types share the `second` uv channel in the engine. The offset (and repeat) setting is evaluated according to - the following priorities and then shared by those textures: -

    -
  1. ao map
  2. -
  3. light map
  4. -
-

[property:Vector2 repeat]

How many times the texture is repeated across the surface, in each direction U and V. If repeat is set greater than 1 in either direction, the corresponding Wrap parameter should also be set to [page:Textures THREE.RepeatWrapping] or [page:Textures THREE.MirroredRepeatWrapping] to achieve the desired - tiling effect. Setting different repeat values for textures is restricted in the same way like [page:.offset]. + tiling effect.

[property:number rotation]

diff --git a/docs/api/it/textures/Texture.html b/docs/api/it/textures/Texture.html index 4a47dcd14857b8..f8fc169974988f 100644 --- a/docs/api/it/textures/Texture.html +++ b/docs/api/it/textures/Texture.html @@ -79,6 +79,11 @@

[property:number mapping]

Vedi la pagina [page:Textures texture constants] per altri tipi di mapping.

+

[property:Integer channel]

+

+ Lets you select the uv attribute to map the texture to. `0` for `uv` and `1` for `uv2`. +

+

[property:number wrapS]

Questo definisce come la texture è wrappata orizzontalmente e corrisponde a *U* nel mapping UV.
@@ -152,32 +157,6 @@

[property:Vector2 offset]

Di quanto una singola ripetizione della texture è sfalsata dall'inizio, in ciascuna direzione U e V. L'intervallo tipico è compreso tra `0.0` e `1.0`.

-

- I tipi di texture seguenti condividono il `primo` canale uv nel motore. L'impostazione dell'offset (e della ripetizione) viene valutata - in base alle seguenti priorità e quindi condivisa da tali texture: -

    -
  1. color map
  2. -
  3. specular map
  4. -
  5. displacement map
  6. -
  7. normal map
  8. -
  9. bump map
  10. -
  11. roughness map
  12. -
  13. metalness map
  14. -
  15. alpha map
  16. -
  17. emissive map
  18. -
  19. clearcoat map
  20. -
  21. clearcoat normal map
  22. -
  23. clearcoat roughnessMap map
  24. -
-

-

- I tipi di texture seguenti condividono il `secondo` canale uv nel motore. L'impostazione dell'offset (e della ripetizione) viene valutata - in base alle seguenti priorità e quindi condivisa da tali texture: -

    -
  1. ao map
  2. -
  3. light map
  4. -
-

[property:Vector2 repeat]

@@ -185,7 +164,6 @@

[property:Vector2 repeat]

impostata su un valore maggiore di 1 in entrambe le direzioni, anche il parametro Wrap corrispondente deve essere impostato su [page:Textures THREE.RepeatWrapping] o [page:Textures THREE.MirroredRepeatWrapping] per ottenere l'effetto di piastrellatura desiderato. - L'impostazione di diversi valori di ripetizione per le texture è limitata allo stesso modo di [page:.offset].

[property:number rotation]

diff --git a/docs/api/zh/textures/Texture.html b/docs/api/zh/textures/Texture.html index cb9d330d1b8811..5852707a329f28 100644 --- a/docs/api/zh/textures/Texture.html +++ b/docs/api/zh/textures/Texture.html @@ -71,6 +71,11 @@

[property:number mapping]

请参阅[page:Textures texture constants](映射模式常量)来了解其他映射类型。

+

[property:Integer channel]

+

+ Lets you select the uv attribute to map the texture to. `0` for `uv` and `1` for `uv2`. +

+

[property:number wrapS]

这个值定义了纹理贴图在水平方向上将如何包裹,在UV映射中对应于*U*。
@@ -141,38 +146,12 @@

[property:Vector2 offset]

贴图单次重复中的起始偏移量,分别表示U和V。 一般范围是由`0.0`到`1.0`。

-

- 在此引擎中下列纹理共享`第一套`uv通道。 - 偏移量(以及重复次数)的设置项按照下列纹理进行优先级排列并共享: -

    -
  1. color map
  2. -
  3. specular map
  4. -
  5. displacement map
  6. -
  7. normal map
  8. -
  9. bump map
  10. -
  11. roughness map
  12. -
  13. metalness map
  14. -
  15. alpha map
  16. -
  17. emissive map
  18. -
  19. clearcoat map
  20. -
  21. clearcoat normal map
  22. -
  23. clearcoat roughnessMap map
  24. -
-

-

- 在此引擎中下列纹理类型共享`第二套`uv通道。 - 偏移量(以及重复次数)的设置项按照下列纹理进行优先级排列并共享: -

    -
  1. ao map
  2. -
  3. light map
  4. -
-

[property:Vector2 repeat]

决定纹理在表面的重复次数,两个方向分别表示U和V,如果重复次数在任何方向上设置了超过1的数值, 对应的Wrap需要设置为[page:Textures THREE.RepeatWrapping]或者[page:Textures THREE.MirroredRepeatWrapping]来 - 达到想要的平铺效果。此项设置有和[page:.offset]一样的限制。 + 达到想要的平铺效果。

[property:number rotation]

diff --git a/docs/examples/en/loaders/GLTFLoader.html b/docs/examples/en/loaders/GLTFLoader.html index bd4e6dcdbc710f..84e04d268cefd3 100644 --- a/docs/examples/en/loaders/GLTFLoader.html +++ b/docs/examples/en/loaders/GLTFLoader.html @@ -55,7 +55,7 @@

Extensions

  • KHR_mesh_quantization
  • KHR_lights_punctual1
  • KHR_texture_basisu
  • -
  • KHR_texture_transform2
  • +
  • KHR_texture_transform
  • EXT_texture_webp
  • EXT_meshopt_compression
  • EXT_mesh_gpu_instancing
  • @@ -66,24 +66,16 @@

    Extensions

    1Requires [link:https://threejs.org/docs/#api/en/renderers/WebGLRenderer.physicallyCorrectLights physicallyCorrectLights] to be enabled.

    -

    - 2UV transforms are supported, with several key limitations. Transforms applied to - a texture using the first UV slot (all textures except aoMap and lightMap) must share the same - transform, or no transform at all. The aoMap and lightMap textures cannot be transformed. No - more than one transform may be used per material. See - #[link:https://github.com/mrdoob/three.js/pull/13831 13831] and - #[link:https://github.com/mrdoob/three.js/issues/12788 12788]. -

    - 3You can also manually process the extension after loading in your application. See [link:https://threejs.org/examples/#webgl_loader_gltf_variants Three.js glTF materials variants example]. + 2You can also manually process the extension after loading in your application. See [link:https://threejs.org/examples/#webgl_loader_gltf_variants Three.js glTF materials variants example].

    Code Example

    diff --git a/examples/jsm/loaders/GLTFLoader.js b/examples/jsm/loaders/GLTFLoader.js index d934584cd140b9..c6ab052210d1f8 100644 --- a/examples/jsm/loaders/GLTFLoader.js +++ b/examples/jsm/loaders/GLTFLoader.js @@ -1812,13 +1812,10 @@ class GLTFTextureTransformExtension { extendTexture( texture, transform ) { - if ( transform.texCoord !== undefined ) { - - console.warn( 'THREE.GLTFLoader: Custom UV sets in "' + this.name + '" extension not yet supported.' ); - - } - - if ( transform.offset === undefined && transform.rotation === undefined && transform.scale === undefined ) { + if ( ( transform.texCoord === undefined || transform.texCoord === texture.channel ) + && transform.offset === undefined + && transform.rotation === undefined + && transform.scale === undefined ) { // See https://github.com/mrdoob/three.js/issues/21819. return texture; @@ -1827,6 +1824,12 @@ class GLTFTextureTransformExtension { texture = texture.clone(); + if ( transform.texCoord !== undefined ) { + + texture.channel = transform.texCoord; + + } + if ( transform.offset !== undefined ) { texture.offset.fromArray( transform.offset ); @@ -3122,11 +3125,10 @@ class GLTFParser { if ( ! texture ) return null; - // Materials sample aoMap from UV set 1 and other maps from UV set 0 - this can't be configured - // However, we will copy UV set 0 to UV set 1 on demand for aoMap - if ( mapDef.texCoord !== undefined && mapDef.texCoord != 0 && ! ( mapName === 'aoMap' && mapDef.texCoord == 1 ) ) { + if ( mapDef.texCoord !== undefined && mapDef.texCoord > 0 ) { - console.warn( 'THREE.GLTFLoader: Custom UV set ' + mapDef.texCoord + ' for texture ' + mapName + ' not yet supported.' ); + texture = texture.clone(); + texture.channel = mapDef.texCoord; } @@ -3252,14 +3254,6 @@ class GLTFParser { } - // workarounds for mesh and geometry - - if ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) { - - geometry.setAttribute( 'uv2', geometry.attributes.uv ); - - } - mesh.material = material; } diff --git a/examples/jsm/materials/MeshGouraudMaterial.js b/examples/jsm/materials/MeshGouraudMaterial.js index 033cd0f5df2ca5..8748b39690acb8 100644 --- a/examples/jsm/materials/MeshGouraudMaterial.js +++ b/examples/jsm/materials/MeshGouraudMaterial.js @@ -37,7 +37,6 @@ const GouraudShader = { #include #include - #include #include #include #include @@ -52,7 +51,6 @@ const GouraudShader = { void main() { #include - #include #include #include @@ -221,7 +219,6 @@ const GouraudShader = { #include #include #include - #include #include #include #include diff --git a/examples/jsm/misc/ProgressiveLightMap.js b/examples/jsm/misc/ProgressiveLightMap.js index ee515fd109a499..d2eb6734235af0 100644 --- a/examples/jsm/misc/ProgressiveLightMap.js +++ b/examples/jsm/misc/ProgressiveLightMap.js @@ -36,6 +36,7 @@ class ProgressiveLightMap { const format = /(Android|iPad|iPhone|iPod)/g.test( navigator.userAgent ) ? THREE.HalfFloatType : THREE.FloatType; this.progressiveLightMap1 = new THREE.WebGLRenderTarget( this.res, this.res, { type: format } ); this.progressiveLightMap2 = new THREE.WebGLRenderTarget( this.res, this.res, { type: format } ); + this.progressiveLightMap2.texture.channel = 1; // Inject some spicy new logic into a standard phong material this.uvMat = new THREE.MeshPhongMaterial(); @@ -45,17 +46,18 @@ class ProgressiveLightMap { // Vertex Shader: Set Vertex Positions to the Unwrapped UV Positions shader.vertexShader = '#define USE_LIGHTMAP\n' + + '#define LIGHTMAP_UV uv2\n' + shader.vertexShader.slice( 0, - 1 ) + - ' gl_Position = vec4((uv2 - 0.5) * 2.0, 1.0, 1.0); }'; + ' gl_Position = vec4((LIGHTMAP_UV - 0.5) * 2.0, 1.0, 1.0); }'; // Fragment Shader: Set Pixels to average in the Previous frame's Shadows const bodyStart = shader.fragmentShader.indexOf( 'void main() {' ); shader.fragmentShader = - 'varying vec2 vUv2;\n' + + '#define USE_LIGHTMAP\n' + shader.fragmentShader.slice( 0, bodyStart ) + ' uniform sampler2D previousShadowMap;\n uniform float averagingWindow;\n' + shader.fragmentShader.slice( bodyStart - 1, - 1 ) + - `\nvec3 texelOld = texture2D(previousShadowMap, vUv2).rgb; + `\nvec3 texelOld = texture2D(previousShadowMap, vLightMapUv).rgb; gl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/averagingWindow); }`; diff --git a/examples/jsm/shaders/VelocityShader.js b/examples/jsm/shaders/VelocityShader.js index 624ffe634d446c..a053d927f6ff53 100644 --- a/examples/jsm/shaders/VelocityShader.js +++ b/examples/jsm/shaders/VelocityShader.js @@ -23,7 +23,7 @@ const VelocityShader = { vertexShader: /* glsl */` #define NORMAL -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) +#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) varying vec3 vViewPosition; diff --git a/examples/jsm/utils/PackedPhongMaterial.js b/examples/jsm/utils/PackedPhongMaterial.js index de943a5d8a9363..f71aab8e2d8c6b 100644 --- a/examples/jsm/utils/PackedPhongMaterial.js +++ b/examples/jsm/utils/PackedPhongMaterial.js @@ -37,7 +37,6 @@ class PackedPhongMaterial extends MeshPhongMaterial { ShaderChunk.common, ShaderChunk.uv_pars_vertex, - ShaderChunk.uv2_pars_vertex, ShaderChunk.displacementmap_pars_vertex, ShaderChunk.envmap_pars_vertex, ShaderChunk.color_pars_vertex, @@ -116,13 +115,12 @@ class PackedPhongMaterial extends MeshPhongMaterial { ShaderChunk.uv_vertex, - `#ifdef USE_UV + `#ifdef USE_MAP #ifdef USE_PACKED_UV - vUv = decodeUV(vUv); + vMapUv = decodeUV(vMapUv); #endif #endif`, - ShaderChunk.uv2_vertex, ShaderChunk.color_vertex, ShaderChunk.morphcolor_vertex, diff --git a/examples/models/json/lightmap/lightmap.json b/examples/models/json/lightmap/lightmap.json index 8eeaf85fe130e7..d0e6d22e352f2d 100644 --- a/examples/models/json/lightmap/lightmap.json +++ b/examples/models/json/lightmap/lightmap.json @@ -1 +1 @@ -{"metadata":{"version":4.5,"type":"Object","generator":"Object3D.toJSON"},"geometries":[{"uuid":"0E054665-995F-4348-950F-5A4A82ED1AC3","type":"BufferGeometry","data":{"attributes":{"position":{"itemSize":3,"type":"Float32Array","array":[1.8567899465560913,0.012594800442457199,-0.5449060201644897,1.8567899465560913,0.012594800442457199,0.5449060201644897,1.8567899465560913,1.1024099588394165,-0.5449060201644897,1.8567899465560913,0.012594800442457199,0.5449060201644897,1.8567899465560913,1.1024099588394165,0.5449060201644897,1.8567899465560913,1.1024099588394165,-0.5449060201644897,1.8567899465560913,1.1024099588394165,-0.5449060201644897,2.9465999603271484,1.1024099588394165,-0.5449060201644897,1.8567899465560913,0.012594800442457199,-0.5449060201644897,2.9465999603271484,1.1024099588394165,-0.5449060201644897,2.9465999603271484,0.012594800442457199,-0.5449060201644897,1.8567899465560913,0.012594800442457199,-0.5449060201644897,2.9465999603271484,1.1024099588394165,-0.5449060201644897,2.9465999603271484,1.1024099588394165,0.5449060201644897,2.9465999603271484,0.012594800442457199,-0.5449060201644897,2.9465999603271484,1.1024099588394165,0.5449060201644897,2.9465999603271484,0.012594800442457199,0.5449060201644897,2.9465999603271484,0.012594800442457199,-0.5449060201644897,1.8567899465560913,0.012594800442457199,0.5449060201644897,2.9465999603271484,0.012594800442457199,0.5449060201644897,1.8567899465560913,1.1024099588394165,0.5449060201644897,2.9465999603271484,0.012594800442457199,0.5449060201644897,2.9465999603271484,1.1024099588394165,0.5449060201644897,1.8567899465560913,1.1024099588394165,0.5449060201644897,1.8567899465560913,0.012594800442457199,0.5449060201644897,1.8567899465560913,0.012594800442457199,-0.5449060201644897,2.9465999603271484,0.012594800442457199,0.5449060201644897,1.8567899465560913,0.012594800442457199,-0.5449060201644897,2.9465999603271484,0.012594800442457199,-0.5449060201644897,2.9465999603271484,0.012594800442457199,0.5449060201644897,2.9465999603271484,1.1024099588394165,0.5449060201644897,2.9465999603271484,1.1024099588394165,-0.5449060201644897,1.8567899465560913,1.1024099588394165,0.5449060201644897,2.9465999603271484,1.1024099588394165,-0.5449060201644897,1.8567899465560913,1.1024099588394165,-0.5449060201644897,1.8567899465560913,1.1024099588394165,0.5449060201644897,8.397109985351562,-3.670490116292058e-7,-8.397109985351562,-8.397109985351562,-3.670490116292058e-7,-8.397109985351562,8.397109985351562,3.670490116292058e-7,8.397109985351562,-8.397109985351562,-3.670490116292058e-7,-8.397109985351562,-8.397109985351562,3.670490116292058e-7,8.397109985351562,8.397109985351562,3.670490116292058e-7,8.397109985351562,1,0.018008200451731682,-1,1,0.01800829917192459,1,-1,0.018008200451731682,-1,1,0.01800829917192459,1,-1,0.01800829917192459,1,-1,0.018008200451731682,-1,1,2.018009901046753,-1,-1,2.018009901046753,-1,0.9999989867210388,2.018009901046753,1,-1,2.018009901046753,-1,-1,2.018009901046753,1,0.9999989867210388,2.018009901046753,1,1,0.018008200451731682,-1,1,2.018009901046753,-1,1,0.01800829917192459,1,1,2.018009901046753,-1,0.9999989867210388,2.018009901046753,1,1,0.01800829917192459,1,1,0.01800829917192459,1,0.9999989867210388,2.018009901046753,1,-1,0.01800829917192459,1,0.9999989867210388,2.018009901046753,1,-1,2.018009901046753,1,-1,0.01800829917192459,1,-1,0.01800829917192459,1,-1,2.018009901046753,1,-1,0.018008200451731682,-1,-1,2.018009901046753,1,-1,2.018009901046753,-1,-1,0.018008200451731682,-1,1,2.018009901046753,-1,1,0.018008200451731682,-1,-1,2.018009901046753,-1,1,0.018008200451731682,-1,-1,0.018008200451731682,-1,-1,2.018009901046753,-1],"normalized":false},"normal":{"itemSize":3,"type":"Float32Array","array":[-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,-4.371134920688746e-8,0,1,-4.371134920688746e-8,0,1,-4.371134920688746e-8,0,1,-4.371134920688746e-8,0,1,-4.371134920688746e-8,0,1,-4.371134920688746e-8,0,-1,5.000000058430487e-8,0,-1,5.000000058430487e-8,0,-1,5.000000058430487e-8,0,-1,5.000000058430487e-8,0,-1,5.000000058430487e-8,0,-1,5.000000058430487e-8,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,4.999996008336893e-7,4.999999987376214e-7,1,4.999996008336893e-7,4.999999987376214e-7,1,4.999996008336893e-7,4.999999987376214e-7,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1],"normalized":false},"uv":{"itemSize":2,"type":"Float32Array","array":[1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0],"normalized":false},"uv2":{"itemSize":2,"type":"Float32Array","array":[0.0010010000551119447,0.4989989995956421,0.2489989995956421,0.4989989995956421,0.0010010000551119447,0.2510010004043579,0.2489989995956421,0.4989989995956421,0.2489989995956421,0.2510010004043579,0.0010010000551119447,0.2510010004043579,0.4989989995956421,0.0010010000551119447,0.2510010004043579,0.0010010000551119447,0.4989989995956421,0.2489989995956421,0.2510010004043579,0.0010010000551119447,0.2510010004043579,0.2489989995956421,0.4989989995956421,0.2489989995956421,0.4989989995956421,0.2510010004043579,0.2510010004043579,0.2510010004043579,0.4989989995956421,0.4989989995956421,0.2510010004043579,0.2510010004043579,0.2510010004043579,0.4989989995956421,0.4989989995956421,0.4989989995956421,0.5010010004043579,0.4989989995956421,0.7489989995956421,0.4989989995956421,0.5010010004043579,0.2510010004043579,0.7489989995956421,0.4989989995956421,0.7489989995956421,0.2510010004043579,0.5010010004043579,0.2510010004043579,0.7489989995956421,0.0010010000551119447,0.5010010004043579,0.0010010000551119447,0.7489989995956421,0.2489989995956421,0.5010010004043579,0.0010010000551119447,0.5010010004043579,0.2489989995956421,0.7489989995956421,0.2489989995956421,0.4989989995956421,0.5010010004043579,0.2510010004043579,0.5010010004043579,0.4989989995956421,0.7489989995956421,0.2510010004043579,0.5010010004043579,0.2510010004043579,0.7489989995956421,0.4989989995956421,0.7489989995956421,0.0010010000551119447,0.2489989995956421,0.2489989995956421,0.2489989995956421,0.0010010000551119447,0.0010010000551119447,0.2489989995956421,0.2489989995956421,0.2489989995956421,0.0010010000551119447,0.0010010000551119447,0.0010010000551119447,0.2489989995956421,0.5010010004043579,0.0010010000551119447,0.5010010004043579,0.2489989995956421,0.7489989995956421,0.0010010000551119447,0.5010010004043579,0.0010010000551119447,0.7489989995956421,0.2489989995956421,0.7489989995956421,0.7489989995956421,0.5010010004043579,0.5010010004043579,0.5010010004043579,0.7489989995956421,0.7489989995956421,0.5010010004043579,0.5010010004043579,0.5010010004043579,0.7489989995956421,0.7489989995956421,0.7489989995956421,0.7489989995956421,0.7510010004043579,0.5010010004043579,0.7510010004043579,0.7489989995956421,0.9989989995956421,0.5010010004043579,0.7510010004043579,0.5010010004043579,0.9989989995956421,0.7489989995956421,0.9989989995956421,0.4989989995956421,0.7510010004043579,0.2510010004043579,0.7510010004043579,0.4989989995956421,0.9989989995956421,0.2510010004043579,0.7510010004043579,0.2510010004043579,0.9989989995956421,0.4989989995956421,0.9989989995956421,0.2489989995956421,0.7510010004043579,0.0010010000551119447,0.7510010004043579,0.2489989995956421,0.9989989995956421,0.0010010000551119447,0.7510010004043579,0.0010010000551119447,0.9989989995956421,0.2489989995956421,0.9989989995956421,0.9989989995956421,0.2510010004043579,0.7510010004043579,0.2510010004043579,0.9989989995956421,0.4989989995956421,0.7510010004043579,0.2510010004043579,0.7510010004043579,0.4989989995956421,0.9989989995956421,0.4989989995956421],"normalized":false}},"groups":[{"start":0,"materialIndex":0,"count":36},{"start":36,"materialIndex":1,"count":6},{"start":42,"materialIndex":2,"count":36}]}}],"materials":[{"uuid":"594FAB08-384E-477B-B28D-D7897F143ED3","type":"MeshPhongMaterial","name":"redstone","color":10691347,"emissive":0,"specular":1118481,"shininess":100,"lightMap":"9F2CAC9D-AE10-4D5E-BE29-5105E807C99E","lightMapIntensity":0.75,"bumpMap":"19251D9F-B655-4799-A8F3-8BAF72AEA63F","bumpScale":2,"specularMap":"19251D9F-B655-4799-A8F3-8BAF72AEA63F","depthFunc":3,"depthTest":true,"depthWrite":true},{"uuid":"56FF8500-53BD-4797-A1CD-4E22C54D186B","type":"MeshPhongMaterial","name":"floor","color":10716251,"emissive":0,"specular":1118481,"shininess":100,"lightMap":"9F2CAC9D-AE10-4D5E-BE29-5105E807C99E","lightMapIntensity":0.75,"bumpMap":"19251D9F-B655-4799-A8F3-8BAF72AEA63A","bumpScale":2,"specularMap":"19251D9F-B655-4799-A8F3-8BAF72AEA63A","depthFunc":3,"depthTest":true,"depthWrite":true},{"uuid":"2FA178C3-B009-4BF9-873A-3440898B69FB","type":"MeshPhongMaterial","name":"stone","color":10699809,"emissive":0,"specular":1118481,"shininess":100,"lightMap":"9F2CAC9D-AE10-4D5E-BE29-5105E807C99E","lightMapIntensity":0.75,"bumpMap":"2CA8989D-21DB-4DC8-86CD-3A12904FD296","bumpScale":2,"specularMap":"2CA8989D-21DB-4DC8-86CD-3A12904FD296","depthFunc":3,"depthTest":true,"depthWrite":true}],"textures":[{"uuid":"9F2CAC9D-AE10-4D5E-BE29-5105E807C99E","name":"","mapping":300,"repeat":[1,1],"offset":[0,0],"center":[0,0],"rotation":0,"wrap":[1001,1001],"format":1023,"minFilter":1008,"magFilter":1006,"anisotropy":4,"flipY":true,"image":"1FBD379E-9B4F-44B1-A2C7-E484904BF9D6"},{"uuid":"2CA8989D-21DB-4DC8-86CD-3A12904FD296","name":"","mapping":300,"repeat":[2,2],"offset":[0,0],"center":[0,0],"rotation":0,"wrap":[1000,1000],"format":1023,"minFilter":1008,"magFilter":1006,"anisotropy":4,"flipY":true,"image":"49932CEF-B54D-4D5B-8764-37A87FEFBB8E"},{"uuid":"19251D9F-B655-4799-A8F3-8BAF72AEA63F","name":"","mapping":300,"repeat":[2,2],"offset":[0,0],"center":[0,0],"rotation":0,"wrap":[1000,1000],"format":1023,"minFilter":1008,"magFilter":1006,"anisotropy":4,"flipY":true,"image":"374AADB8-3D5C-4A8F-9B1A-934B06069FBD"},{"uuid":"19251D9F-B655-4799-A8F3-8BAF72AEA63A","name":"","mapping":300,"repeat":[16,16],"offset":[0,0],"center":[0,0],"rotation":0,"wrap":[1000,1000],"format":1023,"minFilter":1008,"magFilter":1006,"anisotropy":4,"flipY":true,"image":"374AADB8-3D5C-4A8F-9B1A-934B06069FBD"}],"images":[{"uuid":"1FBD379E-9B4F-44B1-A2C7-E484904BF9D6","url":"lightmap-ao-shadow.png"},{"uuid":"49932CEF-B54D-4D5B-8764-37A87FEFBB8E","url":"rocks.jpg"},{"uuid":"374AADB8-3D5C-4A8F-9B1A-934B06069FBD","url":"stone.jpg"}],"object":{"uuid":"082B79AF-77C8-4ADA-8C47-7B4EBCCBA958","type":"Mesh","layers":1,"matrix":[100,0,0,0,0,100,0,0,0,0,100,0,0,0,0,1],"geometry":"0E054665-995F-4348-950F-5A4A82ED1AC3","material":["594FAB08-384E-477B-B28D-D7897F143ED3","56FF8500-53BD-4797-A1CD-4E22C54D186B","2FA178C3-B009-4BF9-873A-3440898B69FB"]}} +{"metadata":{"version":4.5,"type":"Object","generator":"Object3D.toJSON"},"geometries":[{"uuid":"0E054665-995F-4348-950F-5A4A82ED1AC3","type":"BufferGeometry","data":{"attributes":{"position":{"itemSize":3,"type":"Float32Array","array":[1.8567899465560913,0.012594800442457199,-0.5449060201644897,1.8567899465560913,0.012594800442457199,0.5449060201644897,1.8567899465560913,1.1024099588394165,-0.5449060201644897,1.8567899465560913,0.012594800442457199,0.5449060201644897,1.8567899465560913,1.1024099588394165,0.5449060201644897,1.8567899465560913,1.1024099588394165,-0.5449060201644897,1.8567899465560913,1.1024099588394165,-0.5449060201644897,2.9465999603271484,1.1024099588394165,-0.5449060201644897,1.8567899465560913,0.012594800442457199,-0.5449060201644897,2.9465999603271484,1.1024099588394165,-0.5449060201644897,2.9465999603271484,0.012594800442457199,-0.5449060201644897,1.8567899465560913,0.012594800442457199,-0.5449060201644897,2.9465999603271484,1.1024099588394165,-0.5449060201644897,2.9465999603271484,1.1024099588394165,0.5449060201644897,2.9465999603271484,0.012594800442457199,-0.5449060201644897,2.9465999603271484,1.1024099588394165,0.5449060201644897,2.9465999603271484,0.012594800442457199,0.5449060201644897,2.9465999603271484,0.012594800442457199,-0.5449060201644897,1.8567899465560913,0.012594800442457199,0.5449060201644897,2.9465999603271484,0.012594800442457199,0.5449060201644897,1.8567899465560913,1.1024099588394165,0.5449060201644897,2.9465999603271484,0.012594800442457199,0.5449060201644897,2.9465999603271484,1.1024099588394165,0.5449060201644897,1.8567899465560913,1.1024099588394165,0.5449060201644897,1.8567899465560913,0.012594800442457199,0.5449060201644897,1.8567899465560913,0.012594800442457199,-0.5449060201644897,2.9465999603271484,0.012594800442457199,0.5449060201644897,1.8567899465560913,0.012594800442457199,-0.5449060201644897,2.9465999603271484,0.012594800442457199,-0.5449060201644897,2.9465999603271484,0.012594800442457199,0.5449060201644897,2.9465999603271484,1.1024099588394165,0.5449060201644897,2.9465999603271484,1.1024099588394165,-0.5449060201644897,1.8567899465560913,1.1024099588394165,0.5449060201644897,2.9465999603271484,1.1024099588394165,-0.5449060201644897,1.8567899465560913,1.1024099588394165,-0.5449060201644897,1.8567899465560913,1.1024099588394165,0.5449060201644897,8.397109985351562,-3.670490116292058e-7,-8.397109985351562,-8.397109985351562,-3.670490116292058e-7,-8.397109985351562,8.397109985351562,3.670490116292058e-7,8.397109985351562,-8.397109985351562,-3.670490116292058e-7,-8.397109985351562,-8.397109985351562,3.670490116292058e-7,8.397109985351562,8.397109985351562,3.670490116292058e-7,8.397109985351562,1,0.018008200451731682,-1,1,0.01800829917192459,1,-1,0.018008200451731682,-1,1,0.01800829917192459,1,-1,0.01800829917192459,1,-1,0.018008200451731682,-1,1,2.018009901046753,-1,-1,2.018009901046753,-1,0.9999989867210388,2.018009901046753,1,-1,2.018009901046753,-1,-1,2.018009901046753,1,0.9999989867210388,2.018009901046753,1,1,0.018008200451731682,-1,1,2.018009901046753,-1,1,0.01800829917192459,1,1,2.018009901046753,-1,0.9999989867210388,2.018009901046753,1,1,0.01800829917192459,1,1,0.01800829917192459,1,0.9999989867210388,2.018009901046753,1,-1,0.01800829917192459,1,0.9999989867210388,2.018009901046753,1,-1,2.018009901046753,1,-1,0.01800829917192459,1,-1,0.01800829917192459,1,-1,2.018009901046753,1,-1,0.018008200451731682,-1,-1,2.018009901046753,1,-1,2.018009901046753,-1,-1,0.018008200451731682,-1,1,2.018009901046753,-1,1,0.018008200451731682,-1,-1,2.018009901046753,-1,1,0.018008200451731682,-1,-1,0.018008200451731682,-1,-1,2.018009901046753,-1],"normalized":false},"normal":{"itemSize":3,"type":"Float32Array","array":[-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,-4.371134920688746e-8,0,1,-4.371134920688746e-8,0,1,-4.371134920688746e-8,0,1,-4.371134920688746e-8,0,1,-4.371134920688746e-8,0,1,-4.371134920688746e-8,0,-1,5.000000058430487e-8,0,-1,5.000000058430487e-8,0,-1,5.000000058430487e-8,0,-1,5.000000058430487e-8,0,-1,5.000000058430487e-8,0,-1,5.000000058430487e-8,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,4.999996008336893e-7,4.999999987376214e-7,1,4.999996008336893e-7,4.999999987376214e-7,1,4.999996008336893e-7,4.999999987376214e-7,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1],"normalized":false},"uv":{"itemSize":2,"type":"Float32Array","array":[1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0],"normalized":false},"uv2":{"itemSize":2,"type":"Float32Array","array":[0.0010010000551119447,0.4989989995956421,0.2489989995956421,0.4989989995956421,0.0010010000551119447,0.2510010004043579,0.2489989995956421,0.4989989995956421,0.2489989995956421,0.2510010004043579,0.0010010000551119447,0.2510010004043579,0.4989989995956421,0.0010010000551119447,0.2510010004043579,0.0010010000551119447,0.4989989995956421,0.2489989995956421,0.2510010004043579,0.0010010000551119447,0.2510010004043579,0.2489989995956421,0.4989989995956421,0.2489989995956421,0.4989989995956421,0.2510010004043579,0.2510010004043579,0.2510010004043579,0.4989989995956421,0.4989989995956421,0.2510010004043579,0.2510010004043579,0.2510010004043579,0.4989989995956421,0.4989989995956421,0.4989989995956421,0.5010010004043579,0.4989989995956421,0.7489989995956421,0.4989989995956421,0.5010010004043579,0.2510010004043579,0.7489989995956421,0.4989989995956421,0.7489989995956421,0.2510010004043579,0.5010010004043579,0.2510010004043579,0.7489989995956421,0.0010010000551119447,0.5010010004043579,0.0010010000551119447,0.7489989995956421,0.2489989995956421,0.5010010004043579,0.0010010000551119447,0.5010010004043579,0.2489989995956421,0.7489989995956421,0.2489989995956421,0.4989989995956421,0.5010010004043579,0.2510010004043579,0.5010010004043579,0.4989989995956421,0.7489989995956421,0.2510010004043579,0.5010010004043579,0.2510010004043579,0.7489989995956421,0.4989989995956421,0.7489989995956421,0.0010010000551119447,0.2489989995956421,0.2489989995956421,0.2489989995956421,0.0010010000551119447,0.0010010000551119447,0.2489989995956421,0.2489989995956421,0.2489989995956421,0.0010010000551119447,0.0010010000551119447,0.0010010000551119447,0.2489989995956421,0.5010010004043579,0.0010010000551119447,0.5010010004043579,0.2489989995956421,0.7489989995956421,0.0010010000551119447,0.5010010004043579,0.0010010000551119447,0.7489989995956421,0.2489989995956421,0.7489989995956421,0.7489989995956421,0.5010010004043579,0.5010010004043579,0.5010010004043579,0.7489989995956421,0.7489989995956421,0.5010010004043579,0.5010010004043579,0.5010010004043579,0.7489989995956421,0.7489989995956421,0.7489989995956421,0.7489989995956421,0.7510010004043579,0.5010010004043579,0.7510010004043579,0.7489989995956421,0.9989989995956421,0.5010010004043579,0.7510010004043579,0.5010010004043579,0.9989989995956421,0.7489989995956421,0.9989989995956421,0.4989989995956421,0.7510010004043579,0.2510010004043579,0.7510010004043579,0.4989989995956421,0.9989989995956421,0.2510010004043579,0.7510010004043579,0.2510010004043579,0.9989989995956421,0.4989989995956421,0.9989989995956421,0.2489989995956421,0.7510010004043579,0.0010010000551119447,0.7510010004043579,0.2489989995956421,0.9989989995956421,0.0010010000551119447,0.7510010004043579,0.0010010000551119447,0.9989989995956421,0.2489989995956421,0.9989989995956421,0.9989989995956421,0.2510010004043579,0.7510010004043579,0.2510010004043579,0.9989989995956421,0.4989989995956421,0.7510010004043579,0.2510010004043579,0.7510010004043579,0.4989989995956421,0.9989989995956421,0.4989989995956421],"normalized":false}},"groups":[{"start":0,"materialIndex":0,"count":36},{"start":36,"materialIndex":1,"count":6},{"start":42,"materialIndex":2,"count":36}]}}],"materials":[{"uuid":"594FAB08-384E-477B-B28D-D7897F143ED3","type":"MeshPhongMaterial","name":"redstone","color":10691347,"emissive":0,"specular":1118481,"shininess":100,"lightMap":"9F2CAC9D-AE10-4D5E-BE29-5105E807C99E","lightMapIntensity":0.75,"bumpMap":"19251D9F-B655-4799-A8F3-8BAF72AEA63F","bumpScale":2,"specularMap":"19251D9F-B655-4799-A8F3-8BAF72AEA63F","depthFunc":3,"depthTest":true,"depthWrite":true},{"uuid":"56FF8500-53BD-4797-A1CD-4E22C54D186B","type":"MeshPhongMaterial","name":"floor","color":10716251,"emissive":0,"specular":1118481,"shininess":100,"lightMap":"9F2CAC9D-AE10-4D5E-BE29-5105E807C99E","lightMapIntensity":0.75,"bumpMap":"19251D9F-B655-4799-A8F3-8BAF72AEA63A","bumpScale":2,"specularMap":"19251D9F-B655-4799-A8F3-8BAF72AEA63A","depthFunc":3,"depthTest":true,"depthWrite":true},{"uuid":"2FA178C3-B009-4BF9-873A-3440898B69FB","type":"MeshPhongMaterial","name":"stone","color":10699809,"emissive":0,"specular":1118481,"shininess":100,"lightMap":"9F2CAC9D-AE10-4D5E-BE29-5105E807C99E","lightMapIntensity":0.75,"bumpMap":"2CA8989D-21DB-4DC8-86CD-3A12904FD296","bumpScale":2,"specularMap":"2CA8989D-21DB-4DC8-86CD-3A12904FD296","depthFunc":3,"depthTest":true,"depthWrite":true}],"textures":[{"uuid":"9F2CAC9D-AE10-4D5E-BE29-5105E807C99E","name":"","mapping":300,"channel":1,"repeat":[1,1],"offset":[0,0],"center":[0,0],"rotation":0,"wrap":[1001,1001],"format":1023,"minFilter":1008,"magFilter":1006,"anisotropy":4,"flipY":true,"image":"1FBD379E-9B4F-44B1-A2C7-E484904BF9D6"},{"uuid":"2CA8989D-21DB-4DC8-86CD-3A12904FD296","name":"","mapping":300,"repeat":[2,2],"offset":[0,0],"center":[0,0],"rotation":0,"wrap":[1000,1000],"format":1023,"minFilter":1008,"magFilter":1006,"anisotropy":4,"flipY":true,"image":"49932CEF-B54D-4D5B-8764-37A87FEFBB8E"},{"uuid":"19251D9F-B655-4799-A8F3-8BAF72AEA63F","name":"","mapping":300,"repeat":[2,2],"offset":[0,0],"center":[0,0],"rotation":0,"wrap":[1000,1000],"format":1023,"minFilter":1008,"magFilter":1006,"anisotropy":4,"flipY":true,"image":"374AADB8-3D5C-4A8F-9B1A-934B06069FBD"},{"uuid":"19251D9F-B655-4799-A8F3-8BAF72AEA63A","name":"","mapping":300,"repeat":[16,16],"offset":[0,0],"center":[0,0],"rotation":0,"wrap":[1000,1000],"format":1023,"minFilter":1008,"magFilter":1006,"anisotropy":4,"flipY":true,"image":"374AADB8-3D5C-4A8F-9B1A-934B06069FBD"}],"images":[{"uuid":"1FBD379E-9B4F-44B1-A2C7-E484904BF9D6","url":"lightmap-ao-shadow.png"},{"uuid":"49932CEF-B54D-4D5B-8764-37A87FEFBB8E","url":"rocks.jpg"},{"uuid":"374AADB8-3D5C-4A8F-9B1A-934B06069FBD","url":"stone.jpg"}],"object":{"uuid":"082B79AF-77C8-4ADA-8C47-7B4EBCCBA958","type":"Mesh","layers":1,"matrix":[100,0,0,0,0,100,0,0,0,0,100,0,0,0,0,1],"geometry":"0E054665-995F-4348-950F-5A4A82ED1AC3","material":["594FAB08-384E-477B-B28D-D7897F143ED3","56FF8500-53BD-4797-A1CD-4E22C54D186B","2FA178C3-B009-4BF9-873A-3440898B69FB"]}} diff --git a/examples/screenshots/webgl_loader_gltf_sheen.jpg b/examples/screenshots/webgl_loader_gltf_sheen.jpg index 0695bc6b6ffb46..b29fd99ccbd90d 100644 Binary files a/examples/screenshots/webgl_loader_gltf_sheen.jpg and b/examples/screenshots/webgl_loader_gltf_sheen.jpg differ diff --git a/examples/screenshots/webgl_nodes_loader_gltf_sheen.jpg b/examples/screenshots/webgl_nodes_loader_gltf_sheen.jpg index 83a204b46373bf..b20319b2c2a975 100644 Binary files a/examples/screenshots/webgl_nodes_loader_gltf_sheen.jpg and b/examples/screenshots/webgl_nodes_loader_gltf_sheen.jpg differ diff --git a/examples/webgl_gpgpu_water.html b/examples/webgl_gpgpu_water.html index 26f7654cc50c16..047b0da30cfae0 100644 --- a/examples/webgl_gpgpu_water.html +++ b/examples/webgl_gpgpu_water.html @@ -187,7 +187,6 @@ #include #include - #include #include #include #include @@ -202,7 +201,6 @@ vec2 cellSize = vec2( 1.0 / WIDTH, 1.0 / WIDTH ); #include - #include #include // # include diff --git a/examples/webgl_materials_physical_clearcoat.html b/examples/webgl_materials_physical_clearcoat.html index ee3202d0e8402a..8e24b7608f4c72 100644 --- a/examples/webgl_materials_physical_clearcoat.html +++ b/examples/webgl_materials_physical_clearcoat.html @@ -77,6 +77,8 @@ const normalMap = textureLoader.load( 'textures/carbon/Carbon_Normal.png' ); normalMap.wrapS = THREE.RepeatWrapping; normalMap.wrapT = THREE.RepeatWrapping; + normalMap.repeat.x = 10; + normalMap.repeat.y = 10; const normalMap2 = textureLoader.load( 'textures/water/Water_1_M_Normal.jpg' ); diff --git a/manual/en/indexed-textures.html b/manual/en/indexed-textures.html index 0cc9431ff2f3dc..9d1ba8bd250ed4 100644 --- a/manual/en/indexed-textures.html +++ b/manual/en/indexed-textures.html @@ -294,7 +294,6 @@

    Indexed Textures for Picking and Color

    #include <common>
     #include <color_pars_fragment>
     #include <uv_pars_fragment>
    -#include <uv2_pars_fragment>
     #include <map_pars_fragment>
     #include <alphamap_pars_fragment>
     #include <aomap_pars_fragment>
    @@ -315,7 +314,7 @@ 

    Indexed Textures for Picking and Color

    #include <specularmap_fragment> ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); #ifdef USE_LIGHTMAP - reflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity; + reflectedLight.indirectDiffuse += texture2D( lightMap, vLightMapUv ).xyz * lightMapIntensity; #else reflectedLight.indirectDiffuse += vec3( 1.0 ); #endif diff --git a/manual/ja/indexed-textures.html b/manual/ja/indexed-textures.html index d94ce3f17ab573..2927238e2c2f47 100644 --- a/manual/ja/indexed-textures.html +++ b/manual/ja/indexed-textures.html @@ -274,7 +274,6 @@

    圧縮テクスチャのピッキングとカラー

    #include <common>
     #include <color_pars_fragment>
     #include <uv_pars_fragment>
    -#include <uv2_pars_fragment>
     #include <map_pars_fragment>
     #include <alphamap_pars_fragment>
     #include <aomap_pars_fragment>
    @@ -295,7 +294,7 @@ 

    圧縮テクスチャのピッキングとカラー

    #include <specularmap_fragment> ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); #ifdef USE_LIGHTMAP - reflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity; + reflectedLight.indirectDiffuse += texture2D( lightMap, vLightMapUv ).xyz * lightMapIntensity; #else reflectedLight.indirectDiffuse += vec3( 1.0 ); #endif diff --git a/manual/ko/indexed-textures.html b/manual/ko/indexed-textures.html index 180beecf84c5c0..3e6ad811495351 100644 --- a/manual/ko/indexed-textures.html +++ b/manual/ko/indexed-textures.html @@ -241,7 +241,6 @@

    피킹과 색상에 인덱스 텍스처 사용하기

    #include <common>
     #include <color_pars_fragment>
     #include <uv_pars_fragment>
    -#include <uv2_pars_fragment>
     #include <map_pars_fragment>
     #include <alphamap_pars_fragment>
     #include <aomap_pars_fragment>
    @@ -262,7 +261,7 @@ 

    피킹과 색상에 인덱스 텍스처 사용하기

    #include <specularmap_fragment> ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); #ifdef USE_LIGHTMAP - reflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity; + reflectedLight.indirectDiffuse += texture2D( lightMap, vLightMapUv ).xyz * lightMapIntensity; #else reflectedLight.indirectDiffuse += vec3( 1.0 ); #endif diff --git a/manual/zh/indexed-textures.html b/manual/zh/indexed-textures.html index e80a696c7f67e2..1e74ca62ead002 100644 --- a/manual/zh/indexed-textures.html +++ b/manual/zh/indexed-textures.html @@ -265,7 +265,6 @@

    使用纹理索引来拾取和着色

    #include <common>
     #include <color_pars_fragment>
     #include <uv_pars_fragment>
    -#include <uv2_pars_fragment>
     #include <map_pars_fragment>
     #include <alphamap_pars_fragment>
     #include <aomap_pars_fragment>
    @@ -286,7 +285,7 @@ 

    使用纹理索引来拾取和着色

    #include <specularmap_fragment> ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); #ifdef USE_LIGHTMAP - reflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity; + reflectedLight.indirectDiffuse += texture2D( lightMap, vLightMapUv ).xyz * lightMapIntensity; #else reflectedLight.indirectDiffuse += vec3( 1.0 ); #endif diff --git a/src/loaders/ObjectLoader.js b/src/loaders/ObjectLoader.js index 80ac46d3ac359f..aacc2478fc2819 100644 --- a/src/loaders/ObjectLoader.js +++ b/src/loaders/ObjectLoader.js @@ -638,6 +638,7 @@ class ObjectLoader extends Loader { if ( data.name !== undefined ) texture.name = data.name; if ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING ); + if ( data.channel !== undefined ) texture.channel = data.channel; if ( data.offset !== undefined ) texture.offset.fromArray( data.offset ); if ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat ); diff --git a/src/renderers/shaders/ShaderChunk.js b/src/renderers/shaders/ShaderChunk.js index e8435e4359944a..dcf52b1893dc68 100644 --- a/src/renderers/shaders/ShaderChunk.js +++ b/src/renderers/shaders/ShaderChunk.js @@ -100,9 +100,6 @@ import transmission_pars_fragment from './ShaderChunk/transmission_pars_fragment import uv_pars_fragment from './ShaderChunk/uv_pars_fragment.glsl.js'; import uv_pars_vertex from './ShaderChunk/uv_pars_vertex.glsl.js'; import uv_vertex from './ShaderChunk/uv_vertex.glsl.js'; -import uv2_pars_fragment from './ShaderChunk/uv2_pars_fragment.glsl.js'; -import uv2_pars_vertex from './ShaderChunk/uv2_pars_vertex.glsl.js'; -import uv2_vertex from './ShaderChunk/uv2_vertex.glsl.js'; import worldpos_vertex from './ShaderChunk/worldpos_vertex.glsl.js'; import * as background from './ShaderLib/background.glsl.js'; @@ -226,9 +223,6 @@ export const ShaderChunk = { uv_pars_fragment: uv_pars_fragment, uv_pars_vertex: uv_pars_vertex, uv_vertex: uv_vertex, - uv2_pars_fragment: uv2_pars_fragment, - uv2_pars_vertex: uv2_pars_vertex, - uv2_vertex: uv2_vertex, worldpos_vertex: worldpos_vertex, background_vert: background.vertex, diff --git a/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js index 81c5796588a2e2..98296ae1fc0dce 100644 --- a/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js @@ -1,7 +1,7 @@ export default /* glsl */` #ifdef USE_ALPHAMAP - diffuseColor.a *= texture2D( alphaMap, vUv ).g; + diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g; #endif `; diff --git a/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js index cd387f215d8d44..8fdac363da1196 100644 --- a/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js @@ -2,7 +2,7 @@ export default /* glsl */` #ifdef USE_AOMAP // reads channel R, compatible with a combined OcclusionRoughnessMetallic (RGB) texture - float ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0; + float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0; reflectedLight.indirectDiffuse *= ambientOcclusion; diff --git a/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js index 2dd93eb94cad19..7ac75145c4a319 100644 --- a/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js @@ -11,12 +11,12 @@ export default /* glsl */` vec2 dHdxy_fwd() { - vec2 dSTdx = dFdx( vUv ); - vec2 dSTdy = dFdy( vUv ); + vec2 dSTdx = dFdx( vBumpMapUv ); + vec2 dSTdy = dFdy( vBumpMapUv ); - float Hll = bumpScale * texture2D( bumpMap, vUv ).x; - float dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll; - float dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll; + float Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x; + float dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll; + float dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll; return vec2( dBx, dBy ); diff --git a/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js b/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js index 85e4116e3c2a9a..b09a2dfc7b1e9e 100644 --- a/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +++ b/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js @@ -1,10 +1,10 @@ export default /* glsl */` #ifdef USE_CLEARCOAT_NORMALMAP - vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0; + vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0; clearcoatMapN.xy *= clearcoatNormalScale; - clearcoatNormal = normalize( tbn * clearcoatMapN ); + clearcoatNormal = normalize( tbn2 * clearcoatMapN ); #endif `; diff --git a/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js index 44f2157d388c39..0f848851c15db1 100644 --- a/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js @@ -6,16 +6,16 @@ export default /* glsl */` #endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP +#ifdef USE_CLEARCOAT_NORMALMAP - uniform sampler2D clearcoatRoughnessMap; + uniform sampler2D clearcoatNormalMap; + uniform vec2 clearcoatNormalScale; #endif -#ifdef USE_CLEARCOAT_NORMALMAP +#ifdef USE_CLEARCOAT_ROUGHNESSMAP - uniform sampler2D clearcoatNormalMap; - uniform vec2 clearcoatNormalScale; + uniform sampler2D clearcoatRoughnessMap; #endif `; diff --git a/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js b/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js index 8cd104e4b05bbb..84ada47906b3b2 100644 --- a/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js +++ b/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js @@ -1,7 +1,7 @@ export default /* glsl */` #ifdef USE_DISPLACEMENTMAP - transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias ); + transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias ); #endif `; diff --git a/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js index 68c4a3c7df38aa..517d32ec6daa5c 100644 --- a/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js @@ -1,7 +1,7 @@ export default /* glsl */` #ifdef USE_EMISSIVEMAP - vec4 emissiveColor = texture2D( emissiveMap, vUv ); + vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv ); totalEmissiveRadiance *= emissiveColor.rgb; diff --git a/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js index 28a7c98787d300..804c348629d747 100644 --- a/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js @@ -1,7 +1,7 @@ export default /* glsl */` #ifdef USE_LIGHTMAP - vec4 lightMapTexel = texture2D( lightMap, vUv2 ); + vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; reflectedLight.indirectDiffuse += lightMapIrradiance; diff --git a/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js b/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js index 940f1d30133051..a9c2925ef60031 100644 --- a/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +++ b/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js @@ -3,7 +3,7 @@ export default /* glsl */` #ifdef USE_LIGHTMAP - vec4 lightMapTexel = texture2D( lightMap, vUv2 ); + vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; irradiance += lightMapIrradiance; diff --git a/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js index 33ffd3724bc4ff..6224a1cc847807 100644 --- a/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js @@ -13,20 +13,20 @@ material.roughness = min( material.roughness, 1.0 ); material.ior = ior; - #ifdef SPECULAR + #ifdef USE_SPECULAR float specularIntensityFactor = specularIntensity; vec3 specularColorFactor = specularColor; - #ifdef USE_SPECULARINTENSITYMAP + #ifdef USE_SPECULAR_COLORMAP - specularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a; + specularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb; #endif - #ifdef USE_SPECULARCOLORMAP + #ifdef USE_SPECULAR_INTENSITYMAP - specularColorFactor *= texture2D( specularColorMap, vUv ).rgb; + specularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a; #endif @@ -58,13 +58,13 @@ material.roughness = min( material.roughness, 1.0 ); #ifdef USE_CLEARCOATMAP - material.clearcoat *= texture2D( clearcoatMap, vUv ).x; + material.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x; #endif #ifdef USE_CLEARCOAT_ROUGHNESSMAP - material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y; + material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y; #endif @@ -82,13 +82,13 @@ material.roughness = min( material.roughness, 1.0 ); #ifdef USE_IRIDESCENCEMAP - material.iridescence *= texture2D( iridescenceMap, vUv ).r; + material.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r; #endif #ifdef USE_IRIDESCENCE_THICKNESSMAP - material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vUv ).g + iridescenceThicknessMinimum; + material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum; #else @@ -102,17 +102,17 @@ material.roughness = min( material.roughness, 1.0 ); material.sheenColor = sheenColor; - #ifdef USE_SHEENCOLORMAP + #ifdef USE_SHEEN_COLORMAP - material.sheenColor *= texture2D( sheenColorMap, vUv ).rgb; + material.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb; #endif material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 ); - #ifdef USE_SHEENROUGHNESSMAP + #ifdef USE_SHEEN_ROUGHNESSMAP - material.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a; + material.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a; #endif diff --git a/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js index 89ebc6f8b34ec0..8ea80ba2246c99 100644 --- a/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js @@ -1,7 +1,7 @@ export default /* glsl */` #ifdef USE_MAP - vec4 sampledDiffuseColor = texture2D( map, vUv ); + vec4 sampledDiffuseColor = texture2D( map, vMapUv ); #ifdef DECODE_VIDEO_TEXTURE diff --git a/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js index 0cac7d113cffad..5e8b5c45027d15 100644 --- a/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js @@ -3,7 +3,7 @@ float metalnessFactor = metalness; #ifdef USE_METALNESSMAP - vec4 texelMetalness = texture2D( metalnessMap, vUv ); + vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv ); // reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture metalnessFactor *= texelMetalness.b; diff --git a/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js b/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js index 4e321b26a99eab..3866ad31cfc1b8 100644 --- a/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +++ b/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js @@ -19,7 +19,7 @@ float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; #endif -#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP ) +#ifdef USE_NORMALMAP_TANGENTSPACE #ifdef USE_TANGENT @@ -27,7 +27,7 @@ float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; #else - mat3 tbn = getTangentFrame( - vViewPosition, normal ); + mat3 tbn = getTangentFrame( - vViewPosition, normal, vNormalMapUv ); #endif @@ -40,6 +40,27 @@ float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; #endif +#ifdef USE_CLEARCOAT_NORMALMAP + + #ifdef USE_TANGENT + + mat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal ); + + #else + + mat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv ); + + #endif + + #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED ) + + tbn2[0] *= faceDirection; + tbn2[1] *= faceDirection; + + #endif + +#endif + // non perturbed normal for clearcoat among others vec3 geometryNormal = normal; diff --git a/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js b/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js index 5230daff049571..0a743db303583f 100644 --- a/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +++ b/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js @@ -1,8 +1,8 @@ export default /* glsl */` -#ifdef OBJECTSPACE_NORMALMAP +#ifdef USE_NORMALMAP_OBJECTSPACE - normal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0; // overrides both flatShading and attribute normals + normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; // overrides both flatShading and attribute normals #ifdef FLIP_SIDED @@ -18,9 +18,9 @@ export default /* glsl */` normal = normalize( normalMatrix * normal ); -#elif defined( TANGENTSPACE_NORMALMAP ) +#elif defined( USE_NORMALMAP_TANGENTSPACE ) - vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0; + vec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; mapN.xy *= normalScale; normal = normalize( tbn * mapN ); diff --git a/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js index 7f77de014e22ff..94d1e937cb24cb 100644 --- a/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js @@ -6,23 +6,23 @@ export default /* glsl */` #endif -#ifdef OBJECTSPACE_NORMALMAP +#ifdef USE_NORMALMAP_OBJECTSPACE uniform mat3 normalMatrix; #endif -#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) ) +#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) ) // Normal Mapping Without Precomputed Tangents // http://www.thetenthplanet.de/archives/1180 - mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm ) { + mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) { vec3 q0 = dFdx( eye_pos.xyz ); vec3 q1 = dFdy( eye_pos.xyz ); - vec2 st0 = dFdx( vUv.st ); - vec2 st1 = dFdy( vUv.st ); + vec2 st0 = dFdx( uv.st ); + vec2 st1 = dFdy( uv.st ); vec3 N = surf_norm; // normalized diff --git a/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js index db5b69872b35de..a9c8833dceb0ab 100644 --- a/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js @@ -3,7 +3,7 @@ float roughnessFactor = roughness; #ifdef USE_ROUGHNESSMAP - vec4 texelRoughness = texture2D( roughnessMap, vUv ); + vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv ); // reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture roughnessFactor *= texelRoughness.g; diff --git a/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js index 9f7cf8383b10b6..a57f36b0fac9ab 100644 --- a/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js @@ -3,7 +3,7 @@ float specularStrength; #ifdef USE_SPECULARMAP - vec4 texelSpecular = texture2D( specularMap, vUv ); + vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv ); specularStrength = texelSpecular.r; #else diff --git a/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js index b5a601233a1da9..5cf90195530627 100644 --- a/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js @@ -9,13 +9,13 @@ export default /* glsl */` #ifdef USE_TRANSMISSIONMAP - material.transmission *= texture2D( transmissionMap, vUv ).r; + material.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r; #endif #ifdef USE_THICKNESSMAP - material.thickness *= texture2D( thicknessMap, vUv ).g; + material.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g; #endif diff --git a/src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl.js deleted file mode 100644 index c9e03d04381403..00000000000000 --- a/src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl.js +++ /dev/null @@ -1,7 +0,0 @@ -export default /* glsl */` -#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP ) - - varying vec2 vUv2; - -#endif -`; diff --git a/src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl.js b/src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl.js deleted file mode 100644 index ac764e0cd7f672..00000000000000 --- a/src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl.js +++ /dev/null @@ -1,10 +0,0 @@ -export default /* glsl */` -#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP ) - - attribute vec2 uv2; - varying vec2 vUv2; - - uniform mat3 uv2Transform; - -#endif -`; diff --git a/src/renderers/shaders/ShaderChunk/uv2_vertex.glsl.js b/src/renderers/shaders/ShaderChunk/uv2_vertex.glsl.js deleted file mode 100644 index d3e56312987c7f..00000000000000 --- a/src/renderers/shaders/ShaderChunk/uv2_vertex.glsl.js +++ /dev/null @@ -1,7 +0,0 @@ -export default /* glsl */` -#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP ) - - vUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy; - -#endif -`; diff --git a/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js index 19c95b24c1166d..2496fbe136c22c 100644 --- a/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js @@ -1,7 +1,114 @@ export default /* glsl */` -#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) ) +#ifdef USE_UV varying vec2 vUv; +#endif +#ifdef USE_MAP + + varying vec2 vMapUv; + +#endif +#ifdef USE_ALPHAMAP + + varying vec2 vAlphaMapUv; + +#endif +#ifdef USE_LIGHTMAP + + varying vec2 vLightMapUv; + +#endif +#ifdef USE_AOMAP + + varying vec2 vAoMapUv; + +#endif +#ifdef USE_BUMPMAP + + varying vec2 vBumpMapUv; + +#endif +#ifdef USE_NORMALMAP + + varying vec2 vNormalMapUv; + +#endif +#ifdef USE_EMISSIVEMAP + + varying vec2 vEmissiveMapUv; + +#endif +#ifdef USE_METALNESSMAP + + varying vec2 vMetalnessMapUv; + +#endif +#ifdef USE_ROUGHNESSMAP + + varying vec2 vRoughnessMapUv; + +#endif +#ifdef USE_CLEARCOATMAP + + varying vec2 vClearcoatMapUv; + +#endif +#ifdef USE_CLEARCOAT_NORMALMAP + + varying vec2 vClearcoatNormalMapUv; + +#endif +#ifdef USE_CLEARCOAT_ROUGHNESSMAP + + varying vec2 vClearcoatRoughnessMapUv; + +#endif +#ifdef USE_IRIDESCENCEMAP + + varying vec2 vIridescenceMapUv; + +#endif +#ifdef USE_IRIDESCENCE_THICKNESSMAP + + varying vec2 vIridescenceThicknessMapUv; + +#endif +#ifdef USE_SHEEN_COLORMAP + + varying vec2 vSheenColorMapUv; + +#endif +#ifdef USE_SHEEN_ROUGHNESSMAP + + varying vec2 vSheenRoughnessMapUv; + +#endif +#ifdef USE_SPECULARMAP + + varying vec2 vSpecularMapUv; + +#endif +#ifdef USE_SPECULAR_COLORMAP + + varying vec2 vSpecularColorMapUv; + +#endif +#ifdef USE_SPECULAR_INTENSITYMAP + + varying vec2 vSpecularIntensityMapUv; + +#endif +#ifdef USE_TRANSMISSIONMAP + + uniform mat3 transmissionMapTransform; + varying vec2 vTransmissionMapUv; + +#endif +#ifdef USE_THICKNESSMAP + + uniform mat3 thicknessMapTransform; + varying vec2 vThicknessMapUv; + #endif `; diff --git a/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js b/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js index 0e6a84c9fc3cb7..1ba9a354db5c19 100644 --- a/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +++ b/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js @@ -1,17 +1,144 @@ export default /* glsl */` #ifdef USE_UV - #ifdef UVS_VERTEX_ONLY + varying vec2 vUv; - vec2 vUv; +#endif +#ifdef USE_UV2 + + attribute vec2 uv2; + +#endif +#ifdef USE_MAP + + uniform mat3 mapTransform; + varying vec2 vMapUv; + +#endif +#ifdef USE_ALPHAMAP + + uniform mat3 alphaMapTransform; + varying vec2 vAlphaMapUv; + +#endif +#ifdef USE_LIGHTMAP + + uniform mat3 lightMapTransform; + varying vec2 vLightMapUv; + +#endif +#ifdef USE_AOMAP + + uniform mat3 aoMapTransform; + varying vec2 vAoMapUv; + +#endif +#ifdef USE_BUMPMAP + + uniform mat3 bumpMapTransform; + varying vec2 vBumpMapUv; + +#endif +#ifdef USE_NORMALMAP + + uniform mat3 normalMapTransform; + varying vec2 vNormalMapUv; + +#endif +#ifdef USE_DISPLACEMENTMAP + + uniform mat3 displacementMapTransform; + varying vec2 vDisplacementMapUv; + +#endif +#ifdef USE_EMISSIVEMAP + + uniform mat3 emissiveMapTransform; + varying vec2 vEmissiveMapUv; + +#endif +#ifdef USE_METALNESSMAP + + uniform mat3 metalnessMapTransform; + varying vec2 vMetalnessMapUv; + +#endif +#ifdef USE_ROUGHNESSMAP + + uniform mat3 roughnessMapTransform; + varying vec2 vRoughnessMapUv; - #else +#endif +#ifdef USE_CLEARCOATMAP + + uniform mat3 clearcoatMapTransform; + varying vec2 vClearcoatMapUv; + +#endif +#ifdef USE_CLEARCOAT_NORMALMAP + + uniform mat3 clearcoatNormalMapTransform; + varying vec2 vClearcoatNormalMapUv; + +#endif +#ifdef USE_CLEARCOAT_ROUGHNESSMAP + + uniform mat3 clearcoatRoughnessMapTransform; + varying vec2 vClearcoatRoughnessMapUv; + +#endif +#ifdef USE_SHEEN_COLORMAP + + uniform mat3 sheenColorMapTransform; + varying vec2 vSheenColorMapUv; + +#endif +#ifdef USE_SHEEN_ROUGHNESSMAP + + uniform mat3 sheenRoughnessMapTransform; + varying vec2 vSheenRoughnessMapUv; + +#endif +#ifdef USE_IRIDESCENCEMAP - varying vec2 vUv; + uniform mat3 iridescenceMapTransform; + varying vec2 vIridescenceMapUv; - #endif +#endif +#ifdef USE_IRIDESCENCE_THICKNESSMAP + + uniform mat3 iridescenceThicknessMapTransform; + varying vec2 vIridescenceThicknessMapUv; + +#endif +#ifdef USE_SPECULARMAP + + uniform mat3 specularMapTransform; + varying vec2 vSpecularMapUv; + +#endif +#ifdef USE_SPECULAR_COLORMAP + + uniform mat3 specularColorMapTransform; + varying vec2 vSpecularColorMapUv; + +#endif +#ifdef USE_SPECULAR_INTENSITYMAP + + uniform mat3 specularIntensityMapTransform; + varying vec2 vSpecularIntensityMapUv; + +#endif +#ifdef USE_TRANSMISSIONMAP + + uniform mat3 transmissionMapTransform; + varying vec2 vTransmissionMapUv; + +#endif +#ifdef USE_THICKNESSMAP - uniform mat3 uvTransform; + uniform mat3 thicknessMapTransform; + varying vec2 vThicknessMapUv; #endif `; diff --git a/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js b/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js index ca031fe1af537b..45e2e4b255fb56 100644 --- a/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +++ b/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js @@ -1,7 +1,117 @@ export default /* glsl */` #ifdef USE_UV - vUv = ( uvTransform * vec3( uv, 1 ) ).xy; + vUv = vec3( uv, 1 ).xy; + +#endif +#ifdef USE_MAP + + vMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_ALPHAMAP + + vAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_LIGHTMAP + + vLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_AOMAP + + vAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_BUMPMAP + + vBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_NORMALMAP + + vNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_DISPLACEMENTMAP + + vDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_EMISSIVEMAP + + vEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_METALNESSMAP + + vMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_ROUGHNESSMAP + + vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_CLEARCOATMAP + + vClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_CLEARCOAT_NORMALMAP + + vClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_CLEARCOAT_ROUGHNESSMAP + + vClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_IRIDESCENCEMAP + + vIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_IRIDESCENCE_THICKNESSMAP + + vIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_SHEEN_COLORMAP + + vSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_SHEEN_ROUGHNESSMAP + + vSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_SPECULARMAP + + vSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_SPECULAR_COLORMAP + + vSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_SPECULAR_INTENSITYMAP + + vSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_TRANSMISSIONMAP + + vTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy; + +#endif +#ifdef USE_THICKNESSMAP + + vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy; #endif `; diff --git a/src/renderers/shaders/ShaderLib.js b/src/renderers/shaders/ShaderLib.js index 3e628c0843d36a..f33fd0ada6be09 100644 --- a/src/renderers/shaders/ShaderLib.js +++ b/src/renderers/shaders/ShaderLib.js @@ -306,33 +306,44 @@ ShaderLib.physical = { { clearcoat: { value: 0 }, clearcoatMap: { value: null }, + clearcoatMapTransform: { value: /*@__PURE__*/ new Matrix3() }, + clearcoatNormalMap: { value: null }, + clearcoatNormalMapTransform: { value: /*@__PURE__*/ new Matrix3() }, + clearcoatNormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) }, clearcoatRoughness: { value: 0 }, clearcoatRoughnessMap: { value: null }, - clearcoatNormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) }, - clearcoatNormalMap: { value: null }, + clearcoatRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }, iridescence: { value: 0 }, iridescenceMap: { value: null }, + iridescenceMapTransform: { value: /*@__PURE__*/ new Matrix3() }, iridescenceIOR: { value: 1.3 }, iridescenceThicknessMinimum: { value: 100 }, iridescenceThicknessMaximum: { value: 400 }, iridescenceThicknessMap: { value: null }, + iridescenceThicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() }, sheen: { value: 0 }, sheenColor: { value: /*@__PURE__*/ new Color( 0x000000 ) }, sheenColorMap: { value: null }, + sheenColorMapTransform: { value: /*@__PURE__*/ new Matrix3() }, sheenRoughness: { value: 1 }, sheenRoughnessMap: { value: null }, + sheenRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }, transmission: { value: 0 }, transmissionMap: { value: null }, + transmissionMapTransform: { value: /*@__PURE__*/ new Matrix3() }, transmissionSamplerSize: { value: /*@__PURE__*/ new Vector2() }, transmissionSamplerMap: { value: null }, thickness: { value: 0 }, thicknessMap: { value: null }, + thicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() }, attenuationDistance: { value: 0 }, attenuationColor: { value: /*@__PURE__*/ new Color( 0x000000 ) }, - specularIntensity: { value: 1 }, - specularIntensityMap: { value: null }, specularColor: { value: /*@__PURE__*/ new Color( 1, 1, 1 ) }, specularColorMap: { value: null }, + specularColorMapTransform: { value: /*@__PURE__*/ new Matrix3() }, + specularIntensity: { value: 1 }, + specularIntensityMap: { value: null }, + specularIntensityMapTransform: { value: /*@__PURE__*/ new Matrix3() } } ] ), diff --git a/src/renderers/shaders/ShaderLib/meshbasic.glsl.js b/src/renderers/shaders/ShaderLib/meshbasic.glsl.js index d5b0199e674c93..8128bda7e82997 100644 --- a/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +++ b/src/renderers/shaders/ShaderLib/meshbasic.glsl.js @@ -1,7 +1,6 @@ export const vertex = /* glsl */` #include #include -#include #include #include #include @@ -13,7 +12,6 @@ export const vertex = /* glsl */` void main() { #include - #include #include #include @@ -55,7 +53,6 @@ uniform float opacity; #include #include #include -#include #include #include #include @@ -86,7 +83,7 @@ void main() { // accumulation (baked indirect lighting only) #ifdef USE_LIGHTMAP - vec4 lightMapTexel = texture2D( lightMap, vUv2 ); + vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; #else diff --git a/src/renderers/shaders/ShaderLib/meshlambert.glsl.js b/src/renderers/shaders/ShaderLib/meshlambert.glsl.js index 4592a156e1ae63..47a23479dc3054 100644 --- a/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +++ b/src/renderers/shaders/ShaderLib/meshlambert.glsl.js @@ -5,7 +5,6 @@ varying vec3 vViewPosition; #include #include -#include #include #include #include @@ -20,7 +19,6 @@ varying vec3 vViewPosition; void main() { #include - #include #include #include @@ -61,7 +59,6 @@ uniform float opacity; #include #include #include -#include #include #include #include diff --git a/src/renderers/shaders/ShaderLib/meshnormal.glsl.js b/src/renderers/shaders/ShaderLib/meshnormal.glsl.js index 1628dad57ac7e6..769e54fefc68a9 100644 --- a/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +++ b/src/renderers/shaders/ShaderLib/meshnormal.glsl.js @@ -1,7 +1,7 @@ export const vertex = /* glsl */` #define NORMAL -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) +#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) varying vec3 vViewPosition; @@ -35,7 +35,7 @@ void main() { #include #include -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) +#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) vViewPosition = - mvPosition.xyz; @@ -49,7 +49,7 @@ export const fragment = /* glsl */` uniform float opacity; -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) +#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) varying vec3 vViewPosition; diff --git a/src/renderers/shaders/ShaderLib/meshphong.glsl.js b/src/renderers/shaders/ShaderLib/meshphong.glsl.js index 54a7b5f80248c4..2beb1ef2c6b67a 100644 --- a/src/renderers/shaders/ShaderLib/meshphong.glsl.js +++ b/src/renderers/shaders/ShaderLib/meshphong.glsl.js @@ -5,7 +5,6 @@ varying vec3 vViewPosition; #include #include -#include #include #include #include @@ -20,7 +19,6 @@ varying vec3 vViewPosition; void main() { #include - #include #include #include @@ -63,7 +61,6 @@ uniform float opacity; #include #include #include -#include #include #include #include diff --git a/src/renderers/shaders/ShaderLib/meshphysical.glsl.js b/src/renderers/shaders/ShaderLib/meshphysical.glsl.js index c688894264188a..d8bc91721b62c5 100644 --- a/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +++ b/src/renderers/shaders/ShaderLib/meshphysical.glsl.js @@ -11,7 +11,6 @@ varying vec3 vViewPosition; #include #include -#include #include #include #include @@ -25,7 +24,6 @@ varying vec3 vViewPosition; void main() { #include - #include #include #include @@ -63,7 +61,7 @@ export const fragment = /* glsl */` #ifdef PHYSICAL #define IOR - #define SPECULAR + #define USE_SPECULAR #endif uniform vec3 diffuse; @@ -76,16 +74,16 @@ uniform float opacity; uniform float ior; #endif -#ifdef SPECULAR +#ifdef USE_SPECULAR uniform float specularIntensity; uniform vec3 specularColor; - #ifdef USE_SPECULARINTENSITYMAP - uniform sampler2D specularIntensityMap; + #ifdef USE_SPECULAR_COLORMAP + uniform sampler2D specularColorMap; #endif - #ifdef USE_SPECULARCOLORMAP - uniform sampler2D specularColorMap; + #ifdef USE_SPECULAR_INTENSITYMAP + uniform sampler2D specularIntensityMap; #endif #endif @@ -105,11 +103,11 @@ uniform float opacity; uniform vec3 sheenColor; uniform float sheenRoughness; - #ifdef USE_SHEENCOLORMAP + #ifdef USE_SHEEN_COLORMAP uniform sampler2D sheenColorMap; #endif - #ifdef USE_SHEENROUGHNESSMAP + #ifdef USE_SHEEN_ROUGHNESSMAP uniform sampler2D sheenRoughnessMap; #endif #endif @@ -121,7 +119,6 @@ varying vec3 vViewPosition; #include #include #include -#include #include #include #include diff --git a/src/renderers/shaders/ShaderLib/meshtoon.glsl.js b/src/renderers/shaders/ShaderLib/meshtoon.glsl.js index 957dd8c93229da..d0edada0d6ae67 100644 --- a/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +++ b/src/renderers/shaders/ShaderLib/meshtoon.glsl.js @@ -5,7 +5,6 @@ varying vec3 vViewPosition; #include #include -#include #include #include #include @@ -19,7 +18,6 @@ varying vec3 vViewPosition; void main() { #include - #include #include #include @@ -59,7 +57,6 @@ uniform float opacity; #include #include #include -#include #include #include #include diff --git a/src/renderers/shaders/UniformsLib.js b/src/renderers/shaders/UniformsLib.js index 6f6864709b8c9a..936f9dd5814c48 100644 --- a/src/renderers/shaders/UniformsLib.js +++ b/src/renderers/shaders/UniformsLib.js @@ -14,10 +14,11 @@ const UniformsLib = { opacity: { value: 1.0 }, map: { value: null }, - uvTransform: { value: /*@__PURE__*/ new Matrix3() }, - uv2Transform: { value: /*@__PURE__*/ new Matrix3() }, + mapTransform: { value: /*@__PURE__*/ new Matrix3() }, alphaMap: { value: null }, + alphaMapTransform: { value: /*@__PURE__*/ new Matrix3() }, + alphaTest: { value: 0 } }, @@ -25,6 +26,7 @@ const UniformsLib = { specularmap: { specularMap: { value: null }, + specularMapTransform: { value: /*@__PURE__*/ new Matrix3() } }, @@ -41,26 +43,23 @@ const UniformsLib = { aomap: { aoMap: { value: null }, - aoMapIntensity: { value: 1 } + aoMapIntensity: { value: 1 }, + aoMapTransform: { value: /*@__PURE__*/ new Matrix3() } }, lightmap: { lightMap: { value: null }, - lightMapIntensity: { value: 1 } - - }, - - emissivemap: { - - emissiveMap: { value: null } + lightMapIntensity: { value: 1 }, + lightMapTransform: { value: /*@__PURE__*/ new Matrix3() } }, bumpmap: { bumpMap: { value: null }, + bumpMapTransform: { value: /*@__PURE__*/ new Matrix3() }, bumpScale: { value: 1 } }, @@ -68,6 +67,7 @@ const UniformsLib = { normalmap: { normalMap: { value: null }, + normalMapTransform: { value: /*@__PURE__*/ new Matrix3() }, normalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) } }, @@ -75,20 +75,30 @@ const UniformsLib = { displacementmap: { displacementMap: { value: null }, + displacementMapTransform: { value: /*@__PURE__*/ new Matrix3() }, displacementScale: { value: 1 }, displacementBias: { value: 0 } }, - roughnessmap: { + emissivemap: { - roughnessMap: { value: null } + emissiveMap: { value: null }, + emissiveMapTransform: { value: /*@__PURE__*/ new Matrix3() } }, metalnessmap: { - metalnessMap: { value: null } + metalnessMap: { value: null }, + metalnessMapTransform: { value: /*@__PURE__*/ new Matrix3() } + + }, + + roughnessmap: { + + roughnessMap: { value: null }, + roughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() } }, @@ -207,9 +217,9 @@ const UniformsLib = { center: { value: /*@__PURE__*/ new Vector2( 0.5, 0.5 ) }, rotation: { value: 0.0 }, map: { value: null }, + mapTransform: { value: /*@__PURE__*/ new Matrix3() }, alphaMap: { value: null }, - alphaTest: { value: 0 }, - uvTransform: { value: /*@__PURE__*/ new Matrix3() } + alphaTest: { value: 0 } } diff --git a/src/renderers/webgl/WebGLMaterials.js b/src/renderers/webgl/WebGLMaterials.js index e26b502033851e..00264adefc2ad1 100644 --- a/src/renderers/webgl/WebGLMaterials.js +++ b/src/renderers/webgl/WebGLMaterials.js @@ -3,6 +3,18 @@ import { getUnlitUniformColorSpace } from '../shaders/UniformsUtils.js'; function WebGLMaterials( renderer, properties ) { + function refreshTransformUniform( map, uniform ) { + + if ( map.matrixAutoUpdate === true ) { + + map.updateMatrix(); + + } + + uniform.value.copy( map.matrix ); + + } + function refreshFogUniforms( uniforms, fog ) { fog.color.getRGB( uniforms.fogColor.value, getUnlitUniformColorSpace( renderer ) ); @@ -120,25 +132,56 @@ function WebGLMaterials( renderer, properties ) { uniforms.map.value = material.map; + refreshTransformUniform( material.map, uniforms.mapTransform ); + } if ( material.alphaMap ) { uniforms.alphaMap.value = material.alphaMap; + refreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform ); + } if ( material.bumpMap ) { uniforms.bumpMap.value = material.bumpMap; + + refreshTransformUniform( material.bumpMap, uniforms.bumpMapTransform ); + uniforms.bumpScale.value = material.bumpScale; - if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + if ( material.side === BackSide ) { + + uniforms.bumpScale.value *= - 1; + + } + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + + refreshTransformUniform( material.normalMap, uniforms.normalMapTransform ); + + uniforms.normalScale.value.copy( material.normalScale ); + + if ( material.side === BackSide ) { + + uniforms.normalScale.value.negate(); + + } } if ( material.displacementMap ) { uniforms.displacementMap.value = material.displacementMap; + + refreshTransformUniform( material.displacementMap, uniforms.displacementMapTransform ); + uniforms.displacementScale.value = material.displacementScale; uniforms.displacementBias.value = material.displacementBias; @@ -148,13 +191,7 @@ function WebGLMaterials( renderer, properties ) { uniforms.emissiveMap.value = material.emissiveMap; - } - - if ( material.normalMap ) { - - uniforms.normalMap.value = material.normalMap; - uniforms.normalScale.value.copy( material.normalScale ); - if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + refreshTransformUniform( material.emissiveMap, uniforms.emissiveMapTransform ); } @@ -162,6 +199,8 @@ function WebGLMaterials( renderer, properties ) { uniforms.specularMap.value = material.specularMap; + refreshTransformUniform( material.specularMap, uniforms.specularMapTransform ); + } if ( material.alphaTest > 0 ) { @@ -193,6 +232,8 @@ function WebGLMaterials( renderer, properties ) { uniforms.lightMapIntensity.value = material.lightMapIntensity * scaleFactor; + refreshTransformUniform( material.lightMap, uniforms.lightMapTransform ); + } if ( material.aoMap ) { @@ -200,163 +241,7 @@ function WebGLMaterials( renderer, properties ) { uniforms.aoMap.value = material.aoMap; uniforms.aoMapIntensity.value = material.aoMapIntensity; - } - - // uv repeat and offset setting priorities - // 1. color map - // 2. specular map - // 3. displacementMap map - // 4. normal map - // 5. bump map - // 6. roughnessMap map - // 7. metalnessMap map - // 8. alphaMap map - // 9. emissiveMap map - // 10. clearcoat map - // 11. clearcoat normal map - // 12. clearcoat roughnessMap map - // 13. iridescence map - // 14. iridescence thickness map - // 15. specular intensity map - // 16. specular tint map - // 17. transmission map - // 18. thickness map - - let uvScaleMap; - - if ( material.map ) { - - uvScaleMap = material.map; - - } else if ( material.specularMap ) { - - uvScaleMap = material.specularMap; - - } else if ( material.displacementMap ) { - - uvScaleMap = material.displacementMap; - - } else if ( material.normalMap ) { - - uvScaleMap = material.normalMap; - - } else if ( material.bumpMap ) { - - uvScaleMap = material.bumpMap; - - } else if ( material.roughnessMap ) { - - uvScaleMap = material.roughnessMap; - - } else if ( material.metalnessMap ) { - - uvScaleMap = material.metalnessMap; - - } else if ( material.alphaMap ) { - - uvScaleMap = material.alphaMap; - - } else if ( material.emissiveMap ) { - - uvScaleMap = material.emissiveMap; - - } else if ( material.clearcoatMap ) { - - uvScaleMap = material.clearcoatMap; - - } else if ( material.clearcoatNormalMap ) { - - uvScaleMap = material.clearcoatNormalMap; - - } else if ( material.clearcoatRoughnessMap ) { - - uvScaleMap = material.clearcoatRoughnessMap; - - } else if ( material.iridescenceMap ) { - - uvScaleMap = material.iridescenceMap; - - } else if ( material.iridescenceThicknessMap ) { - - uvScaleMap = material.iridescenceThicknessMap; - - } else if ( material.specularIntensityMap ) { - - uvScaleMap = material.specularIntensityMap; - - } else if ( material.specularColorMap ) { - - uvScaleMap = material.specularColorMap; - - } else if ( material.transmissionMap ) { - - uvScaleMap = material.transmissionMap; - - } else if ( material.thicknessMap ) { - - uvScaleMap = material.thicknessMap; - - } else if ( material.sheenColorMap ) { - - uvScaleMap = material.sheenColorMap; - - } else if ( material.sheenRoughnessMap ) { - - uvScaleMap = material.sheenRoughnessMap; - - } - - if ( uvScaleMap !== undefined ) { - - // backwards compatibility - if ( uvScaleMap.isWebGLRenderTarget ) { - - uvScaleMap = uvScaleMap.texture; - - } - - if ( uvScaleMap.matrixAutoUpdate === true ) { - - uvScaleMap.updateMatrix(); - - } - - uniforms.uvTransform.value.copy( uvScaleMap.matrix ); - - } - - // uv repeat and offset setting priorities for uv2 - // 1. ao map - // 2. light map - - let uv2ScaleMap; - - if ( material.aoMap ) { - - uv2ScaleMap = material.aoMap; - - } else if ( material.lightMap ) { - - uv2ScaleMap = material.lightMap; - - } - - if ( uv2ScaleMap !== undefined ) { - - // backwards compatibility - if ( uv2ScaleMap.isWebGLRenderTarget ) { - - uv2ScaleMap = uv2ScaleMap.texture; - - } - - if ( uv2ScaleMap.matrixAutoUpdate === true ) { - - uv2ScaleMap.updateMatrix(); - - } - - uniforms.uv2Transform.value.copy( uv2ScaleMap.matrix ); + refreshTransformUniform( material.aoMap, uniforms.aoMapTransform ); } @@ -371,13 +256,7 @@ function WebGLMaterials( renderer, properties ) { uniforms.map.value = material.map; - if ( material.map.matrixAutoUpdate === true ) { - - material.map.updateMatrix(); - - } - - uniforms.uvTransform.value.copy( material.map.matrix ); + refreshTransformUniform( material.map, uniforms.mapTransform ); } @@ -402,6 +281,8 @@ function WebGLMaterials( renderer, properties ) { uniforms.map.value = material.map; + refreshTransformUniform( material.map, uniforms.uvTransform ); + } if ( material.alphaMap ) { @@ -416,34 +297,6 @@ function WebGLMaterials( renderer, properties ) { } - // uv repeat and offset setting priorities - // 1. color map - // 2. alpha map - - let uvScaleMap; - - if ( material.map ) { - - uvScaleMap = material.map; - - } else if ( material.alphaMap ) { - - uvScaleMap = material.alphaMap; - - } - - if ( uvScaleMap !== undefined ) { - - if ( uvScaleMap.matrixAutoUpdate === true ) { - - uvScaleMap.updateMatrix(); - - } - - uniforms.uvTransform.value.copy( uvScaleMap.matrix ); - - } - } function refreshUniformsSprites( uniforms, material ) { @@ -456,6 +309,8 @@ function WebGLMaterials( renderer, properties ) { uniforms.map.value = material.map; + refreshTransformUniform( material.map, uniforms.mapTransform ); + } if ( material.alphaMap ) { @@ -470,34 +325,6 @@ function WebGLMaterials( renderer, properties ) { } - // uv repeat and offset setting priorities - // 1. color map - // 2. alpha map - - let uvScaleMap; - - if ( material.map ) { - - uvScaleMap = material.map; - - } else if ( material.alphaMap ) { - - uvScaleMap = material.alphaMap; - - } - - if ( uvScaleMap !== undefined ) { - - if ( uvScaleMap.matrixAutoUpdate === true ) { - - uvScaleMap.updateMatrix(); - - } - - uniforms.uvTransform.value.copy( uvScaleMap.matrix ); - - } - } function refreshUniformsPhong( uniforms, material ) { @@ -519,18 +346,23 @@ function WebGLMaterials( renderer, properties ) { function refreshUniformsStandard( uniforms, material ) { - uniforms.roughness.value = material.roughness; uniforms.metalness.value = material.metalness; - if ( material.roughnessMap ) { + if ( material.metalnessMap ) { - uniforms.roughnessMap.value = material.roughnessMap; + uniforms.metalnessMap.value = material.metalnessMap; + + refreshTransformUniform( material.metalnessMap, uniforms.metalnessMapTransform ); } - if ( material.metalnessMap ) { + uniforms.roughness.value = material.roughness; - uniforms.metalnessMap.value = material.metalnessMap; + if ( material.roughnessMap ) { + + uniforms.roughnessMap.value = material.roughnessMap; + + refreshTransformUniform( material.roughnessMap, uniforms.roughnessMapTransform ); } @@ -559,12 +391,16 @@ function WebGLMaterials( renderer, properties ) { uniforms.sheenColorMap.value = material.sheenColorMap; + refreshTransformUniform( material.sheenColorMap, uniforms.sheenColorMapTransform ); + } if ( material.sheenRoughnessMap ) { uniforms.sheenRoughnessMap.value = material.sheenRoughnessMap; + refreshTransformUniform( material.sheenRoughnessMap, uniforms.sheenRoughnessMapTransform ); + } } @@ -578,19 +414,26 @@ function WebGLMaterials( renderer, properties ) { uniforms.clearcoatMap.value = material.clearcoatMap; + refreshTransformUniform( material.clearcoatMap, uniforms.clearcoatMapTransform ); + } if ( material.clearcoatRoughnessMap ) { uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap; + refreshTransformUniform( material.clearcoatRoughnessMap, uniforms.clearcoatRoughnessMapTransform ); + } if ( material.clearcoatNormalMap ) { - uniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale ); uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap; + refreshTransformUniform( material.clearcoatNormalMap, uniforms.clearcoatNormalMapTransform ); + + uniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale ); + if ( material.side === BackSide ) { uniforms.clearcoatNormalScale.value.negate(); @@ -612,12 +455,16 @@ function WebGLMaterials( renderer, properties ) { uniforms.iridescenceMap.value = material.iridescenceMap; + refreshTransformUniform( material.iridescenceMap, uniforms.iridescenceMapTransform ); + } if ( material.iridescenceThicknessMap ) { uniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap; + refreshTransformUniform( material.iridescenceThicknessMap, uniforms.iridescenceThicknessMapTransform ); + } } @@ -632,6 +479,8 @@ function WebGLMaterials( renderer, properties ) { uniforms.transmissionMap.value = material.transmissionMap; + refreshTransformUniform( material.transmissionMap, uniforms.transmissionMapTransform ); + } uniforms.thickness.value = material.thickness; @@ -640,6 +489,8 @@ function WebGLMaterials( renderer, properties ) { uniforms.thicknessMap.value = material.thicknessMap; + refreshTransformUniform( material.thicknessMap, uniforms.thicknessMapTransform ); + } uniforms.attenuationDistance.value = material.attenuationDistance; @@ -650,15 +501,19 @@ function WebGLMaterials( renderer, properties ) { uniforms.specularIntensity.value = material.specularIntensity; uniforms.specularColor.value.copy( material.specularColor ); - if ( material.specularIntensityMap ) { + if ( material.specularColorMap ) { - uniforms.specularIntensityMap.value = material.specularIntensityMap; + uniforms.specularColorMap.value = material.specularColorMap; + + refreshTransformUniform( material.specularColorMap, uniforms.specularColorMapTransform ); } - if ( material.specularColorMap ) { + if ( material.specularIntensityMap ) { - uniforms.specularColorMap.value = material.specularColorMap; + uniforms.specularIntensityMap.value = material.specularIntensityMap; + + refreshTransformUniform( material.specularIntensityMap, uniforms.specularIntensityMapTransform ); } diff --git a/src/renderers/webgl/WebGLProgram.js b/src/renderers/webgl/WebGLProgram.js index d4619e77e999ac..0df3c270090670 100644 --- a/src/renderers/webgl/WebGLProgram.js +++ b/src/renderers/webgl/WebGLProgram.js @@ -110,7 +110,7 @@ function getToneMappingFunction( functionName, toneMapping ) { function generateExtensions( parameters ) { const chunks = [ - ( parameters.extensionDerivatives || !! parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '', + ( parameters.extensionDerivatives || !! parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.normalMapTangentSpace || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '', ( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '', ( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '', ( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : '' @@ -454,21 +454,20 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { parameters.instancing ? '#define USE_INSTANCING' : '', parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '', - parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '', - - ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', - ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '', + parameters.useFog && parameters.fog ? '#define USE_FOG' : '', + parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '', parameters.map ? '#define USE_MAP' : '', parameters.envMap ? '#define USE_ENVMAP' : '', parameters.envMap ? '#define ' + envMapModeDefine : '', parameters.lightMap ? '#define USE_LIGHTMAP' : '', parameters.aoMap ? '#define USE_AOMAP' : '', - parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', parameters.bumpMap ? '#define USE_BUMPMAP' : '', parameters.normalMap ? '#define USE_NORMALMAP' : '', - ( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '', - ( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '', + parameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '', + parameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '', + parameters.displacementMap ? '#define USE_DISPLACEMENTMAP' : '', + parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', @@ -477,11 +476,9 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { parameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '', parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '', - parameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '', - parameters.specularMap ? '#define USE_SPECULARMAP' : '', - parameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '', - parameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '', + parameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '', + parameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '', parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', @@ -491,14 +488,47 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '', - parameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '', - parameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '', + parameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '', + parameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '', + + // + + parameters.mapUv ? '#define MAP_UV ' + parameters.mapUv : '', + parameters.alphaMapUv ? '#define ALPHAMAP_UV ' + parameters.alphaMapUv : '', + parameters.lightMapUv ? '#define LIGHTMAP_UV ' + parameters.lightMapUv : '', + parameters.aoMapUv ? '#define AOMAP_UV ' + parameters.aoMapUv : '', + parameters.emissiveMapUv ? '#define EMISSIVEMAP_UV ' + parameters.emissiveMapUv : '', + parameters.bumpMapUv ? '#define BUMPMAP_UV ' + parameters.bumpMapUv : '', + parameters.normalMapUv ? '#define NORMALMAP_UV ' + parameters.normalMapUv : '', + parameters.displacementMapUv ? '#define DISPLACEMENTMAP_UV ' + parameters.displacementMapUv : '', + + parameters.metalnessMapUv ? '#define METALNESSMAP_UV ' + parameters.metalnessMapUv : '', + parameters.roughnessMapUv ? '#define ROUGHNESSMAP_UV ' + parameters.roughnessMapUv : '', + + parameters.clearcoatMapUv ? '#define CLEARCOATMAP_UV ' + parameters.clearcoatMapUv : '', + parameters.clearcoatNormalMapUv ? '#define CLEARCOAT_NORMALMAP_UV ' + parameters.clearcoatNormalMapUv : '', + parameters.clearcoatRoughnessMapUv ? '#define CLEARCOAT_ROUGHNESSMAP_UV ' + parameters.clearcoatRoughnessMapUv : '', + + parameters.iridescenceMapUv ? '#define IRIDESCENCEMAP_UV ' + parameters.iridescenceMapUv : '', + parameters.iridescenceThicknessMapUv ? '#define IRIDESCENCE_THICKNESSMAP_UV ' + parameters.iridescenceThicknessMapUv : '', + + parameters.sheenColorMapUv ? '#define SHEEN_COLORMAP_UV ' + parameters.sheenColorMapUv : '', + parameters.sheenRoughnessMapUv ? '#define SHEEN_ROUGHNESSMAP_UV ' + parameters.sheenRoughnessMapUv : '', + + parameters.specularMapUv ? '#define SPECULARMAP_UV ' + parameters.specularMapUv : '', + parameters.specularColorMapUv ? '#define SPECULAR_COLORMAP_UV ' + parameters.specularColorMapUv : '', + parameters.specularIntensityMapUv ? '#define SPECULAR_INTENSITYMAP_UV ' + parameters.specularIntensityMapUv : '', + + parameters.transmissionMapUv ? '#define TRANSMISSIONMAP_UV ' + parameters.transmissionMapUv : '', + parameters.thicknessMapUv ? '#define THICKNESSMAP_UV ' + parameters.thicknessMapUv : '', + + // parameters.vertexTangents ? '#define USE_TANGENT' : '', parameters.vertexColors ? '#define USE_COLOR' : '', parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '', parameters.vertexUvs ? '#define USE_UV' : '', - parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', + parameters.vertexUvs2 ? '#define USE_UV2' : '', parameters.pointsUvs ? '#define USE_POINTS_UV' : '', @@ -609,8 +639,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { customDefines, - ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', - ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '', + parameters.useFog && parameters.fog ? '#define USE_FOG' : '', + parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '', parameters.map ? '#define USE_MAP' : '', parameters.matcap ? '#define USE_MATCAP' : '', @@ -623,11 +653,11 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { envMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '', parameters.lightMap ? '#define USE_LIGHTMAP' : '', parameters.aoMap ? '#define USE_AOMAP' : '', - parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', parameters.bumpMap ? '#define USE_BUMPMAP' : '', parameters.normalMap ? '#define USE_NORMALMAP' : '', - ( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '', - ( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '', + parameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '', + parameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '', + parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', parameters.clearcoat ? '#define USE_CLEARCOAT' : '', parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', @@ -639,8 +669,9 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '', parameters.specularMap ? '#define USE_SPECULARMAP' : '', - parameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '', - parameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '', + parameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '', + parameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '', + parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', @@ -648,8 +679,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { parameters.alphaTest ? '#define USE_ALPHATEST' : '', parameters.sheen ? '#define USE_SHEEN' : '', - parameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '', - parameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '', + parameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '', + parameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '', parameters.transmission ? '#define USE_TRANSMISSION' : '', parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', @@ -660,8 +691,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { parameters.vertexTangents ? '#define USE_TANGENT' : '', parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '', parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '', - parameters.vertexUvs ? '#define USE_UV' : '', - parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', + parameters.vertexUvs2 ? '#define USE_UV2' : '', parameters.pointsUvs ? '#define USE_POINTS_UV' : '', diff --git a/src/renderers/webgl/WebGLPrograms.js b/src/renderers/webgl/WebGLPrograms.js index acd6bc92395c95..9dfd9bd318d2a3 100644 --- a/src/renderers/webgl/WebGLPrograms.js +++ b/src/renderers/webgl/WebGLPrograms.js @@ -11,9 +11,10 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities const _customShaders = new WebGLShaderCache(); const programs = []; - const isWebGL2 = capabilities.isWebGL2; + const IS_WEBGL2 = capabilities.isWebGL2; const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer; - const vertexTextures = capabilities.vertexTextures; + const SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures; + let precision = capabilities.precision; const shaderIDs = { @@ -34,6 +35,14 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities SpriteMaterial: 'sprite' }; + function getChannel( value ) { + + if ( value === 1 ) return 'uv2'; + + return 'uv'; + + } + function getParameters( material, lights, shadows, scene, object ) { const fog = scene.fog; @@ -97,16 +106,57 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities const currentRenderTarget = renderer.getRenderTarget(); - const useAlphaTest = material.alphaTest > 0; + const IS_INSTANCEDMESH = object.isInstancedMesh === true; + + const HAS_MAP = !! material.map; + const HAS_MATCAP = !! material.matcap; + const HAS_ENVMAP = !! envMap; + const HAS_AOMAP = !! material.aoMap; + const HAS_LIGHTMAP = !! material.lightMap; + const HAS_BUMPMAP = !! material.bumpMap; + const HAS_NORMALMAP = !! material.normalMap; + const HAS_DISPLACEMENTMAP = !! material.displacementMap; + const HAS_EMISSIVEMAP = !! material.emissiveMap; + + const HAS_METALNESSMAP = !! material.metalnessMap; + const HAS_ROUGHNESSMAP = !! material.roughnessMap; + + const HAS_CLEARCOAT = material.clearcoat > 0; + const HAS_IRIDESCENCE = material.iridescence > 0; + const HAS_SHEEN = material.sheen > 0; + const HAS_TRANSMISSION = material.transmission > 0; + + const HAS_CLEARCOATMAP = HAS_CLEARCOAT && !! material.clearcoatMap; + const HAS_CLEARCOAT_NORMALMAP = HAS_CLEARCOAT && !! material.clearcoatNormalMap; + const HAS_CLEARCOAT_ROUGHNESSMAP = HAS_CLEARCOAT && !! material.clearcoatRoughnessMap; + + const HAS_IRIDESCENCEMAP = HAS_IRIDESCENCE && !! material.iridescenceMap; + const HAS_IRIDESCENCE_THICKNESSMAP = HAS_IRIDESCENCE && !! material.iridescenceThicknessMap; + + const HAS_SHEEN_COLORMAP = HAS_SHEEN && !! material.sheenColorMap; + const HAS_SHEEN_ROUGHNESSMAP = HAS_SHEEN && !! material.sheenRoughnessMap; + + const HAS_SPECULARMAP = !! material.specularMap; + const HAS_SPECULAR_COLORMAP = !! material.specularColorMap; + const HAS_SPECULAR_INTENSITYMAP = !! material.specularIntensityMap; + + const HAS_TRANSMISSIONMAP = HAS_TRANSMISSION && !! material.transmissionMap; + const HAS_THICKNESSMAP = HAS_TRANSMISSION && !! material.thicknessMap; + + const HAS_GRADIENTMAP = !! material.gradientMap; + + const HAS_ALPHAMAP = !! material.alphaMap; + + const HAS_ALPHATEST = material.alphaTest > 0; + + const HAS_EXTENSIONS = !! material.extensions; - const useClearcoat = material.clearcoat > 0; - const useIridescence = material.iridescence > 0; - const useSheen = material.sheen > 0; - const useTransmission = material.transmission > 0; + const HAS_ATTRIBUTE_UV = !! geometry.attributes.uv; + const HAS_ATTRIBUTE_UV2 = !! geometry.attributes.uv2; const parameters = { - isWebGL2: isWebGL2, + isWebGL2: IS_WEBGL2, shaderID: shaderID, shaderName: material.type, @@ -123,74 +173,111 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities precision: precision, - instancing: object.isInstancedMesh === true, - instancingColor: object.isInstancedMesh === true && object.instanceColor !== null, + instancing: IS_INSTANCEDMESH, + instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null, - supportsVertexTextures: vertexTextures, + supportsVertexTextures: SUPPORTS_VERTEX_TEXTURES, outputEncoding: ( currentRenderTarget === null ) ? renderer.outputEncoding : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.encoding : LinearEncoding ), - map: !! material.map, - matcap: !! material.matcap, - envMap: !! envMap, - envMapMode: envMap && envMap.mapping, + + map: HAS_MAP, + matcap: HAS_MATCAP, + envMap: HAS_ENVMAP, + envMapMode: HAS_ENVMAP && envMap.mapping, envMapCubeUVHeight: envMapCubeUVHeight, - lightMap: !! material.lightMap, - aoMap: !! material.aoMap, - emissiveMap: !! material.emissiveMap, - bumpMap: !! material.bumpMap, - normalMap: !! material.normalMap, - objectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap, - tangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap, - - decodeVideoTexture: !! material.map && ( material.map.isVideoTexture === true ) && ( material.map.encoding === sRGBEncoding ), - - clearcoat: useClearcoat, - clearcoatMap: useClearcoat && !! material.clearcoatMap, - clearcoatRoughnessMap: useClearcoat && !! material.clearcoatRoughnessMap, - clearcoatNormalMap: useClearcoat && !! material.clearcoatNormalMap, - - iridescence: useIridescence, - iridescenceMap: useIridescence && !! material.iridescenceMap, - iridescenceThicknessMap: useIridescence && !! material.iridescenceThicknessMap, - - sheen: useSheen, - sheenColorMap: useSheen && !! material.sheenColorMap, - sheenRoughnessMap: useSheen && !! material.sheenRoughnessMap, - - transmission: useTransmission, - transmissionMap: useTransmission && !! material.transmissionMap, - thicknessMap: useTransmission && !! material.thicknessMap, - - displacementMap: !! material.displacementMap, - roughnessMap: !! material.roughnessMap, - metalnessMap: !! material.metalnessMap, - specularMap: !! material.specularMap, - specularIntensityMap: !! material.specularIntensityMap, - specularColorMap: !! material.specularColorMap, + aoMap: HAS_AOMAP, + lightMap: HAS_LIGHTMAP, + bumpMap: HAS_BUMPMAP, + normalMap: HAS_NORMALMAP, + displacementMap: SUPPORTS_VERTEX_TEXTURES && HAS_DISPLACEMENTMAP, + emissiveMap: HAS_EMISSIVEMAP, - opaque: material.transparent === false && material.blending === NormalBlending, + normalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap, + normalMapTangentSpace: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap, + + decodeVideoTexture: HAS_MAP && ( material.map.isVideoTexture === true ) && ( material.map.encoding === sRGBEncoding ), + + metalnessMap: HAS_METALNESSMAP, + roughnessMap: HAS_ROUGHNESSMAP, + + clearcoat: HAS_CLEARCOAT, + clearcoatMap: HAS_CLEARCOATMAP, + clearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP, + clearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP, + + iridescence: HAS_IRIDESCENCE, + iridescenceMap: HAS_IRIDESCENCEMAP, + iridescenceThicknessMap: HAS_IRIDESCENCE_THICKNESSMAP, + + sheen: HAS_SHEEN, + sheenColorMap: HAS_SHEEN_COLORMAP, + sheenRoughnessMap: HAS_SHEEN_ROUGHNESSMAP, + + specularMap: HAS_SPECULARMAP, + specularColorMap: HAS_SPECULAR_COLORMAP, + specularIntensityMap: HAS_SPECULAR_INTENSITYMAP, + + transmission: HAS_TRANSMISSION, + transmissionMap: HAS_TRANSMISSIONMAP, + thicknessMap: HAS_THICKNESSMAP, - alphaMap: !! material.alphaMap, - alphaTest: useAlphaTest, + gradientMap: HAS_GRADIENTMAP, - gradientMap: !! material.gradientMap, + opaque: material.transparent === false && material.blending === NormalBlending, + + alphaMap: HAS_ALPHAMAP, + alphaTest: HAS_ALPHATEST, combine: material.combine, - vertexTangents: ( !! material.normalMap && !! geometry.attributes.tangent ), + // + + mapUv: HAS_MAP && getChannel( material.map.channel ), + aoMapUv: HAS_AOMAP && getChannel( material.aoMap.channel ), + lightMapUv: HAS_LIGHTMAP && getChannel( material.lightMap.channel ), + bumpMapUv: HAS_BUMPMAP && getChannel( material.bumpMap.channel ), + normalMapUv: HAS_NORMALMAP && getChannel( material.normalMap.channel ), + displacementMapUv: HAS_DISPLACEMENTMAP && getChannel( material.displacementMap.channel ), + emissiveMapUv: HAS_EMISSIVEMAP && getChannel( material.emissiveMap.channel ), + + metalnessMapUv: HAS_METALNESSMAP && getChannel( material.metalnessMap.channel ), + roughnessMapUv: HAS_ROUGHNESSMAP && getChannel( material.roughnessMap.channel ), + + clearcoatMapUv: HAS_CLEARCOATMAP && getChannel( material.clearcoatMap.channel ), + clearcoatNormalMapUv: HAS_CLEARCOAT_NORMALMAP && getChannel( material.clearcoatNormalMap.channel ), + clearcoatRoughnessMapUv: HAS_CLEARCOAT_ROUGHNESSMAP && getChannel( material.clearcoatRoughnessMap.channel ), + + iridescenceMapUv: HAS_IRIDESCENCEMAP && getChannel( material.iridescenceMap.channel ), + iridescenceThicknessMapUv: HAS_IRIDESCENCE_THICKNESSMAP && getChannel( material.iridescenceThicknessMap.channel ), + + sheenColorMapUv: HAS_SHEEN_COLORMAP && getChannel( material.sheenColorMap.channel ), + sheenRoughnessMapUv: HAS_SHEEN_ROUGHNESSMAP && getChannel( material.sheenRoughnessMap.channel ), + + specularMapUv: HAS_SPECULARMAP && getChannel( material.specularMap.channel ), + specularColorMapUv: HAS_SPECULAR_COLORMAP && getChannel( material.specularColorMap.channel ), + specularIntensityMapUv: HAS_SPECULAR_INTENSITYMAP && getChannel( material.specularIntensityMap.channel ), + + transmissionMapUv: HAS_TRANSMISSIONMAP && getChannel( material.transmissionMap.channel ), + thicknessMapUv: HAS_THICKNESSMAP && getChannel( material.thicknessMap.channel ), + + alphaMapUv: HAS_ALPHAMAP && getChannel( material.alphaMap.channel ), + + // + + vertexTangents: HAS_NORMALMAP && !! geometry.attributes.tangent, vertexColors: material.vertexColors, vertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4, - vertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.iridescenceMap || !! material.iridescenceThicknessMap || !! material.displacementMap || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || !! material.sheenColorMap || !! material.sheenRoughnessMap, - uvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.iridescenceMap || !! material.iridescenceThicknessMap || material.transmission > 0 || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || material.sheen > 0 || !! material.sheenColorMap || !! material.sheenRoughnessMap ) && !! material.displacementMap, + vertexUvs: HAS_ATTRIBUTE_UV, + vertexUvs2: HAS_ATTRIBUTE_UV2, - pointsUvs: object.isPoints === true && !! geometry.attributes.uv && ( !! material.map || !! material.alphaMap ), + pointsUvs: object.isPoints === true && !! geometry.attributes.uv && ( HAS_MAP || HAS_ALPHAMAP ), fog: !! fog, useFog: material.fog === true, fogExp2: ( fog && fog.isFogExp2 ), - flatShading: !! material.flatShading, + flatShading: material.flatShading === true, - sizeAttenuation: material.sizeAttenuation, + sizeAttenuation: material.sizeAttenuation === true, logarithmicDepthBuffer: logarithmicDepthBuffer, skinning: object.isSkinnedMesh === true, @@ -229,19 +316,19 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities doubleSided: material.side === DoubleSide, flipSided: material.side === BackSide, - useDepthPacking: !! material.depthPacking, + useDepthPacking: material.depthPacking >= 0, depthPacking: material.depthPacking || 0, index0AttributeName: material.index0AttributeName, - extensionDerivatives: material.extensions && material.extensions.derivatives, - extensionFragDepth: material.extensions && material.extensions.fragDepth, - extensionDrawBuffers: material.extensions && material.extensions.drawBuffers, - extensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD, + extensionDerivatives: HAS_EXTENSIONS && material.extensions.derivatives === true, + extensionFragDepth: HAS_EXTENSIONS && material.extensions.fragDepth === true, + extensionDrawBuffers: HAS_EXTENSIONS && material.extensions.drawBuffers === true, + extensionShaderTextureLOD: HAS_EXTENSIONS && material.extensions.shaderTextureLOD === true, - rendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ), - rendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ), - rendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ), + rendererExtensionFragDepth: IS_WEBGL2 || extensions.has( 'EXT_frag_depth' ), + rendererExtensionDrawBuffers: IS_WEBGL2 || extensions.has( 'WEBGL_draw_buffers' ), + rendererExtensionShaderTextureLod: IS_WEBGL2 || extensions.has( 'EXT_shader_texture_lod' ), customProgramCacheKey: material.customProgramCacheKey() @@ -297,8 +384,29 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities array.push( parameters.outputEncoding ); array.push( parameters.envMapMode ); array.push( parameters.envMapCubeUVHeight ); + array.push( parameters.mapUv ); + array.push( parameters.alphaMapUv ); + array.push( parameters.lightMapUv ); + array.push( parameters.aoMapUv ); + array.push( parameters.bumpMapUv ); + array.push( parameters.normalMapUv ); + array.push( parameters.displacementMapUv ); + array.push( parameters.emissiveMapUv ); + array.push( parameters.metalnessMapUv ); + array.push( parameters.roughnessMapUv ); + array.push( parameters.clearcoatMapUv ); + array.push( parameters.clearcoatNormalMapUv ); + array.push( parameters.clearcoatRoughnessMapUv ); + array.push( parameters.iridescenceMapUv ); + array.push( parameters.iridescenceThicknessMapUv ); + array.push( parameters.sheenColorMapUv ); + array.push( parameters.sheenRoughnessMapUv ); + array.push( parameters.specularMapUv ); + array.push( parameters.specularColorMapUv ); + array.push( parameters.specularIntensityMapUv ); + array.push( parameters.transmissionMapUv ); + array.push( parameters.thicknessMapUv ); array.push( parameters.combine ); - array.push( parameters.vertexUvs ); array.push( parameters.fogExp2 ); array.push( parameters.sizeAttenuation ); array.push( parameters.morphTargetsCount ); @@ -333,64 +441,30 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities _programLayers.enable( 2 ); if ( parameters.instancingColor ) _programLayers.enable( 3 ); - if ( parameters.map ) - _programLayers.enable( 4 ); if ( parameters.matcap ) - _programLayers.enable( 5 ); + _programLayers.enable( 4 ); if ( parameters.envMap ) + _programLayers.enable( 5 ); + if ( parameters.normalMapObjectSpace ) _programLayers.enable( 6 ); - if ( parameters.lightMap ) + if ( parameters.normalMapTangentSpace ) _programLayers.enable( 7 ); - if ( parameters.aoMap ) + if ( parameters.clearcoat ) _programLayers.enable( 8 ); - if ( parameters.emissiveMap ) + if ( parameters.iridescence ) _programLayers.enable( 9 ); - if ( parameters.bumpMap ) + if ( parameters.alphaTest ) _programLayers.enable( 10 ); - if ( parameters.normalMap ) + if ( parameters.vertexColors ) _programLayers.enable( 11 ); - if ( parameters.objectSpaceNormalMap ) + if ( parameters.vertexAlphas ) _programLayers.enable( 12 ); - if ( parameters.tangentSpaceNormalMap ) + if ( parameters.vertexUvs ) _programLayers.enable( 13 ); - if ( parameters.clearcoat ) + if ( parameters.vertexUvs2 ) _programLayers.enable( 14 ); - if ( parameters.clearcoatMap ) - _programLayers.enable( 15 ); - if ( parameters.clearcoatRoughnessMap ) - _programLayers.enable( 16 ); - if ( parameters.clearcoatNormalMap ) - _programLayers.enable( 17 ); - if ( parameters.iridescence ) - _programLayers.enable( 18 ); - if ( parameters.iridescenceMap ) - _programLayers.enable( 19 ); - if ( parameters.iridescenceThicknessMap ) - _programLayers.enable( 20 ); - if ( parameters.displacementMap ) - _programLayers.enable( 21 ); - if ( parameters.specularMap ) - _programLayers.enable( 22 ); - if ( parameters.roughnessMap ) - _programLayers.enable( 23 ); - if ( parameters.metalnessMap ) - _programLayers.enable( 24 ); - if ( parameters.gradientMap ) - _programLayers.enable( 25 ); - if ( parameters.alphaMap ) - _programLayers.enable( 26 ); - if ( parameters.alphaTest ) - _programLayers.enable( 27 ); - if ( parameters.vertexColors ) - _programLayers.enable( 28 ); - if ( parameters.vertexAlphas ) - _programLayers.enable( 29 ); - if ( parameters.vertexUvs ) - _programLayers.enable( 30 ); if ( parameters.vertexTangents ) - _programLayers.enable( 31 ); - if ( parameters.uvsVertexOnly ) - _programLayers.enable( 32 ); + _programLayers.enable( 15 ); array.push( _programLayers.mask ); _programLayers.disableAll(); @@ -425,28 +499,16 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities _programLayers.enable( 13 ); if ( parameters.dithering ) _programLayers.enable( 14 ); - if ( parameters.specularIntensityMap ) - _programLayers.enable( 15 ); - if ( parameters.specularColorMap ) - _programLayers.enable( 16 ); if ( parameters.transmission ) - _programLayers.enable( 17 ); - if ( parameters.transmissionMap ) - _programLayers.enable( 18 ); - if ( parameters.thicknessMap ) - _programLayers.enable( 19 ); + _programLayers.enable( 15 ); if ( parameters.sheen ) - _programLayers.enable( 20 ); - if ( parameters.sheenColorMap ) - _programLayers.enable( 21 ); - if ( parameters.sheenRoughnessMap ) - _programLayers.enable( 22 ); + _programLayers.enable( 16 ); if ( parameters.decodeVideoTexture ) - _programLayers.enable( 23 ); + _programLayers.enable( 17 ); if ( parameters.opaque ) - _programLayers.enable( 24 ); + _programLayers.enable( 18 ); if ( parameters.pointsUvs ) - _programLayers.enable( 25 ); + _programLayers.enable( 19 ); array.push( _programLayers.mask ); diff --git a/src/textures/Texture.js b/src/textures/Texture.js index bf9fc90e246105..48ba1405a96c94 100644 --- a/src/textures/Texture.js +++ b/src/textures/Texture.js @@ -36,6 +36,7 @@ class Texture extends EventDispatcher { this.mipmaps = []; this.mapping = mapping; + this.channel = 0; this.wrapS = wrapS; this.wrapT = wrapT; @@ -110,6 +111,7 @@ class Texture extends EventDispatcher { this.mipmaps = source.mipmaps.slice( 0 ); this.mapping = source.mapping; + this.channel = source.channel; this.wrapS = source.wrapS; this.wrapT = source.wrapT; @@ -169,6 +171,7 @@ class Texture extends EventDispatcher { image: this.source.toJSON( meta ).uuid, mapping: this.mapping, + channel: this.channel, repeat: [ this.repeat.x, this.repeat.y ], offset: [ this.offset.x, this.offset.y ],