@jaimebboyjt/three-double-texture-materials 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1 +1,172 @@
1
- # Three extended texture material
1
+ ![npm](https://img.shields.io/npm/v/@jaimebboyjt/three-scatter)
2
+
3
+ # Three double texture materials
4
+
5
+ `Three double texture material` (I know, I know, long name right...) is a simple yet in many occasion useful npm pkg that extend your materials in `three.js`, making them possible to add a second texture ,this includes PBR textures like: `normalMap`, `aoMap`, `roughnessMap` etc.
6
+
7
+ Making them possible to easily combine them without a specialized software like `blender`, `substance designer` or `armory paint`. Keep in mind that this tool doesn't replace those softwares
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ npm i @jaimebboyjt/three-double-texture-materials
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ All three classes share the same blending parameters and helper methods. The blending is driven by an internal Perlin noise texture — no extra setup required.
18
+
19
+ ### Common parameters
20
+
21
+ | Parameter | Type | Default | Description |
22
+ |---|---|---|---|
23
+ | `blend` | `number` | `0.5` | Blend point between the two textures (0–1). |
24
+ | `feather` | `number` | `0.1` | Width of the transition edge. Larger values produce a softer blend. |
25
+ | `noiseScale` | `number` | `1` | Tiling scale of the noise texture used for the transition. |
26
+ | `noiseMap` | `Texture \| null` | Perlin (built-in) | Override the default noise texture with your own. |
27
+
28
+ ### Common methods
29
+
30
+ | Method | Description |
31
+ |---|---|
32
+ | `setblend(value: number)` | Update `blend` at runtime (e.g. inside an animation loop). |
33
+ | `setFeather(value: number)` | Update `feather` at runtime. |
34
+ | `setNoiseScale(value: number)` | Update `noiseScale` at runtime. |
35
+
36
+ ---
37
+
38
+ ### DTMeshBasicMaterial
39
+
40
+ Extends `MeshBasicMaterial`. Accepts all standard `MeshBasicMaterialParameters` plus a second color map.
41
+
42
+ | Extra parameter | Type | Description |
43
+ |---|---|---|
44
+ | `secondMap` | `Texture \| null` | Second albedo texture to blend with `map`. |
45
+
46
+ ```js
47
+ import * as THREE from 'three'
48
+ import { DTMeshBasicMaterial } from '@jaimebboyjt/three-double-texture-materials'
49
+
50
+ const loader = new THREE.TextureLoader()
51
+
52
+ const material = new DTMeshBasicMaterial({
53
+ map: loader.load('/textures/grass/albedo.jpg'),
54
+ secondMap: loader.load('/textures/rock/albedo.jpg'),
55
+ blend: 0.5, // blend midpoint
56
+ feather: 0.15, // edge softness
57
+ noiseScale: 2, // noise tiling
58
+ })
59
+
60
+ // Animate the transition at runtime
61
+ function animate() {
62
+ requestAnimationFrame(animate)
63
+ material.setBlend(Math.sin(Date.now() * 0.001) * 0.5 + 0.5)
64
+ renderer.render(scene, camera)
65
+ }
66
+ animate()
67
+ ```
68
+
69
+ ---
70
+
71
+ ### DTMeshStandardMaterial
72
+
73
+ Extends `MeshStandardMaterial`. Accepts all standard `MeshStandardMaterialParameters` plus a full second PBR texture set.
74
+
75
+ | Extra parameter | Type | Description |
76
+ |---|---|---|
77
+ | `secondMap` | `Texture \| null` | Second albedo texture. |
78
+ | `secondNormalMap` | `Texture \| null` | Second normal map. |
79
+ | `secondRoughnessMap` | `Texture \| null` | Second roughness map. |
80
+ | `secondMetalnessMap` | `Texture \| null` | Second metalness map. |
81
+ | `secondAoMap` | `Texture \| null` | Second ambient occlusion map. |
82
+ | `secondDisplacementMap` | `Texture \| null` | Second displacement map. |
83
+
84
+ ```js
85
+ import * as THREE from 'three'
86
+ import { DTMeshStandardMaterial } from '@jaimebboyjt/three-double-texture-materials'
87
+
88
+ const loader = new THREE.TextureLoader()
89
+
90
+ const material = new DTMeshStandardMaterial({
91
+ // First PBR set (standard three.js params)
92
+ map: loader.load('/textures/moss/albedo.jpg'),
93
+ normalMap: loader.load('/textures/moss/normal.jpg'),
94
+ roughnessMap: loader.load('/textures/moss/roughness.jpg'),
95
+ aoMap: loader.load('/textures/moss/ao.jpg'),
96
+
97
+ // Second PBR set
98
+ secondMap: loader.load('/textures/metal/albedo.jpg'),
99
+ secondNormalMap: loader.load('/textures/metal/normal.jpg'),
100
+ secondRoughnessMap: loader.load('/textures/metal/roughness.jpg'),
101
+ secondAoMap: loader.load('/textures/metal/ao.jpg'),
102
+
103
+ blend: 0.5,
104
+ feather: 0.1,
105
+ noiseScale: 1,
106
+ })
107
+ ```
108
+
109
+ ---
110
+
111
+ ### DTMeshPhysicalMaterial
112
+
113
+ Extends `MeshPhysicalMaterial`. Identical second-texture API to `DTMeshStandardMaterial`, with the addition of all `MeshPhysicalMaterialParameters` (clearcoat, transmission, iridescence, etc.).
114
+
115
+ | Extra parameter | Type | Description |
116
+ |---|---|---|
117
+ | `secondMap` | `Texture \| null` | Second albedo texture. |
118
+ | `secondNormalMap` | `Texture \| null` | Second normal map. |
119
+ | `secondRoughnessMap` | `Texture \| null` | Second roughness map. |
120
+ | `secondMetalnessMap` | `Texture \| null` | Second metalness map. |
121
+ | `secondAoMap` | `Texture \| null` | Second ambient occlusion map. |
122
+ | `secondDisplacementMap` | `Texture \| null` | Second displacement map. |
123
+
124
+ ```js
125
+ import * as THREE from 'three'
126
+ import { DTMeshPhysicalMaterial } from '@jaimebboyjt/three-double-texture-materials'
127
+
128
+ const loader = new THREE.TextureLoader()
129
+
130
+ const material = new DTMeshPhysicalMaterial({
131
+ // Physical-only params
132
+ clearcoat: 1,
133
+ clearcoatRoughness: 0.1,
134
+
135
+ // First PBR set
136
+ map: loader.load('/textures/ice/albedo.jpg'),
137
+ normalMap: loader.load('/textures/ice/normal.jpg'),
138
+ roughnessMap: loader.load('/textures/ice/roughness.jpg'),
139
+
140
+ // Second PBR set
141
+ secondMap: loader.load('/textures/rock/albedo.jpg'),
142
+ secondNormalMap: loader.load('/textures/rock/normal.jpg'),
143
+ secondRoughnessMap: loader.load('/textures/rock/roughness.jpg'),
144
+
145
+ blend: 0.4,
146
+ feather: 0.2,
147
+ })
148
+ ```
149
+
150
+ ### DTMeshBasicNodeMaterial
151
+
152
+ Soon
153
+
154
+ ### DTMeshStandardNodeMaterial
155
+
156
+ Soon
157
+
158
+ ### DTMeshPhysicalNodeMaterial
159
+
160
+ Soon
161
+
162
+ ## Contributing
163
+
164
+ We are open to contributions, please read the [contributing guide](/CONTRIBUTING.md) to get started.
165
+
166
+ ## License
167
+
168
+ [MIT](/LICENSE)
169
+
170
+ ## Sponsors
171
+
172
+ Be the first to support this project [here](LINK) ☺️.
@@ -1,34 +1,34 @@
1
- var S = Object.defineProperty;
2
- var h = (t, r, s) => r in t ? S(t, r, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[r] = s;
3
- var a = (t, r, s) => h(t, typeof r != "symbol" ? r + "" : r, s);
4
- import { MeshStandardMaterial as N, DataTexture as v, TextureLoader as b, RepeatWrapping as A, MeshBasicMaterial as C, MeshPhysicalMaterial as x } from "three";
5
- const D = "data:image/png;base64,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";
1
+ var h = Object.defineProperty;
2
+ var S = (l, n, a) => n in l ? h(l, n, { enumerable: !0, configurable: !0, writable: !0, value: a }) : l[n] = a;
3
+ var s = (l, n, a) => S(l, typeof n != "symbol" ? n + "" : n, a);
4
+ import { MeshStandardMaterial as N, DataTexture as v, TextureLoader as D, RepeatWrapping as A, MeshBasicMaterial as C, MeshPhysicalMaterial as x } from "three";
5
+ const g = "data:image/png;base64,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";
6
6
  class E extends N {
7
- constructor(s = {}) {
8
- const { secondMap: d, secondDisplacementMap: i, secondNormalMap: m, secondRoughnessMap: f, secondMetalnessMap: M, secondAoMap: p, noiseMap: o, progress: l, mergedSize: u, noiseScale: c, ...g } = s;
9
- super(g);
10
- a(this, "secondMap");
11
- a(this, "secondDisplacementMap");
12
- a(this, "secondNormalMap");
13
- a(this, "secondRoughnessMap");
14
- a(this, "secondMetalnessMap");
15
- a(this, "secondAoMap");
16
- a(this, "noiseMap");
17
- a(this, "progress");
18
- a(this, "mergedSize");
19
- a(this, "noiseScale");
20
- if (this.secondMap = d || null, this.secondDisplacementMap = i || null, this.secondNormalMap = m || null, this.secondRoughnessMap = f || null, this.secondMetalnessMap = M || null, this.secondAoMap = p || null, o)
7
+ constructor(a = {}) {
8
+ const { secondMap: d, secondDisplacementMap: i, secondNormalMap: f, secondRoughnessMap: m, secondMetalnessMap: M, secondAoMap: u, noiseMap: o, blend: r, feather: c, noiseScale: p, ...b } = a;
9
+ super(b);
10
+ s(this, "secondMap");
11
+ s(this, "secondDisplacementMap");
12
+ s(this, "secondNormalMap");
13
+ s(this, "secondRoughnessMap");
14
+ s(this, "secondMetalnessMap");
15
+ s(this, "secondAoMap");
16
+ s(this, "noiseMap");
17
+ s(this, "blend");
18
+ s(this, "feather");
19
+ s(this, "noiseScale");
20
+ if (this.secondMap = d || null, this.secondDisplacementMap = i || null, this.secondNormalMap = f || null, this.secondRoughnessMap = m || null, this.secondMetalnessMap = M || null, this.secondAoMap = u || null, o)
21
21
  this.noiseMap = o;
22
22
  else {
23
23
  const e = new v(new Uint8Array([255, 255, 255, 255]), 1, 1);
24
- e.needsUpdate = !0, this.noiseMap = e, new b().load(D, (n) => {
25
- this.noiseMap = n, n.wrapS = A, n.wrapT = A, this.userData.shader && (this.userData.shader.uniforms.noiseMap.value = n);
24
+ e.needsUpdate = !0, this.noiseMap = e, new D().load(g, (t) => {
25
+ this.noiseMap = t, t.wrapS = A, t.wrapT = A, this.userData.shader && (this.userData.shader.uniforms.noiseMap.value = t);
26
26
  });
27
27
  }
28
- this.progress = l ?? 0.5, this.mergedSize = u ?? 0.1, this.noiseScale = c ?? 1, this.onBeforeCompile = (e) => {
29
- e.defines = e.defines || {}, this.secondMap && (e.defines.USE_SECOND_MAP = ""), this.secondDisplacementMap && (e.defines.USE_SECOND_DISPLACEMENTMAP = ""), this.secondNormalMap && (e.defines.USE_SECOND_NORMALMAP = ""), this.secondRoughnessMap && (e.defines.USE_SECOND_ROUGHNESSMAP = ""), this.secondMetalnessMap && (e.defines.USE_SECOND_METALNESSMAP = ""), this.secondAoMap && (e.defines.USE_SECOND_AOMAP = ""), e.uniforms.secondMap = { value: this.secondMap }, e.uniforms.secondDisplacementMap = { value: this.secondDisplacementMap }, e.uniforms.secondNormalMap = { value: this.secondNormalMap }, e.uniforms.secondRoughnessMap = { value: this.secondRoughnessMap }, e.uniforms.secondMetalnessMap = { value: this.secondMetalnessMap }, e.uniforms.secondAoMap = { value: this.secondAoMap }, e.uniforms.noiseMap = { value: this.noiseMap }, e.uniforms.progress = { value: this.progress }, e.uniforms.mergedSize = { value: this.mergedSize }, e.uniforms.noiseScale = { value: this.noiseScale }, this.userData.shader = e, e.fragmentShader = `
30
- uniform float progress;
31
- uniform float mergedSize;
28
+ this.blend = r ?? 0.5, this.feather = c ?? 0.1, this.noiseScale = p ?? 1, this.onBeforeCompile = (e) => {
29
+ e.defines = e.defines || {}, this.secondMap && (e.defines.USE_SECOND_MAP = ""), this.secondDisplacementMap && (e.defines.USE_SECOND_DISPLACEMENTMAP = ""), this.secondNormalMap && (e.defines.USE_SECOND_NORMALMAP = ""), this.secondRoughnessMap && (e.defines.USE_SECOND_ROUGHNESSMAP = ""), this.secondMetalnessMap && (e.defines.USE_SECOND_METALNESSMAP = ""), this.secondAoMap && (e.defines.USE_SECOND_AOMAP = ""), e.uniforms.secondMap = { value: this.secondMap }, e.uniforms.secondDisplacementMap = { value: this.secondDisplacementMap }, e.uniforms.secondNormalMap = { value: this.secondNormalMap }, e.uniforms.secondRoughnessMap = { value: this.secondRoughnessMap }, e.uniforms.secondMetalnessMap = { value: this.secondMetalnessMap }, e.uniforms.secondAoMap = { value: this.secondAoMap }, e.uniforms.noiseMap = { value: this.noiseMap }, e.uniforms.blend = { value: this.blend }, e.uniforms.feather = { value: this.feather }, e.uniforms.noiseScale = { value: this.noiseScale }, this.userData.shader = e, e.fragmentShader = `
30
+ uniform float blend;
31
+ uniform float feather;
32
32
  uniform float noiseScale;
33
33
  ${this.secondMap ? "uniform sampler2D secondMap;" : ""}
34
34
  ${this.secondNormalMap ? "uniform sampler2D secondNormalMap;" : ""}
@@ -43,14 +43,14 @@ class E extends N {
43
43
 
44
44
  vec2 blendMasks(vec2 uv) {
45
45
  float noiseVal = sampleNoise(uv);
46
- float maskLo = smoothstep(progress - mergedSize, progress, noiseVal);
47
- float maskHi = smoothstep(progress, progress + mergedSize, noiseVal);
46
+ float maskLo = smoothstep(blend - feather, blend, noiseVal);
47
+ float maskHi = smoothstep(blend, blend + feather, noiseVal);
48
48
  float borderMask = maskLo * (1.0 - maskHi);
49
49
  return vec2(maskHi, borderMask);
50
50
  }
51
51
  ` + e.fragmentShader, e.vertexShader = `
52
- uniform float progress;
53
- uniform float mergedSize;
52
+ uniform float blend;
53
+ uniform float feather;
54
54
  uniform float noiseScale;
55
55
  ${this.secondDisplacementMap ? "uniform sampler2D secondDisplacementMap;" : ""}
56
56
  uniform sampler2D noiseMap;
@@ -61,8 +61,8 @@ class E extends N {
61
61
 
62
62
  vec2 blendMasks(vec2 uv) {
63
63
  float noiseVal = sampleNoise(uv);
64
- float maskLo = smoothstep(progress - mergedSize, progress, noiseVal);
65
- float maskHi = smoothstep(progress, progress + mergedSize, noiseVal);
64
+ float maskLo = smoothstep(blend - feather, blend, noiseVal);
65
+ float maskHi = smoothstep(blend, blend + feather, noiseVal);
66
66
  float borderMask = maskLo * (1.0 - maskHi);
67
67
  return vec2(maskHi, borderMask);
68
68
  }
@@ -77,7 +77,7 @@ class E extends N {
77
77
  float maskHiColor = colorMasks.x;
78
78
  float borderMaskColor = colorMasks.y;
79
79
  vec4 blendedColor = mix(texelColor2, texelColor1, maskHiColor);
80
- vec4 borderColor = mix(texelColor2, texelColor1, mergedSize);
80
+ vec4 borderColor = mix(texelColor2, texelColor1, feather);
81
81
  vec4 finalColor = mix(blendedColor, borderColor, borderMaskColor);
82
82
 
83
83
  diffuseColor *= finalColor;
@@ -196,37 +196,37 @@ class E extends N {
196
196
  );
197
197
  };
198
198
  }
199
- setMerge(s) {
200
- this.progress = s, this.userData.shader && (this.userData.shader.uniforms.progress.value = s);
199
+ setBlend(a) {
200
+ this.blend = a, this.userData.shader && (this.userData.shader.uniforms.blend.value = a);
201
201
  }
202
- setMergedSize(s) {
203
- this.mergedSize = s, this.userData.shader && (this.userData.shader.uniforms.mergedSize.value = s);
202
+ setFeather(a) {
203
+ this.feather = a, this.userData.shader && (this.userData.shader.uniforms.feather.value = a);
204
204
  }
205
- setNoiseScale(s) {
206
- this.noiseScale = s, this.userData.shader && (this.userData.shader.uniforms.noiseScale.value = s);
205
+ setNoiseScale(a) {
206
+ this.noiseScale = a, this.userData.shader && (this.userData.shader.uniforms.noiseScale.value = a);
207
207
  }
208
208
  }
209
209
  class k extends C {
210
- constructor(s = {}) {
211
- const { secondMap: d, noiseMap: i, progress: m, mergedSize: f, noiseScale: M, ...p } = s;
212
- super(p);
213
- a(this, "secondMap");
214
- a(this, "noiseMap");
215
- a(this, "progress");
216
- a(this, "mergedSize");
217
- a(this, "noiseScale");
210
+ constructor(a = {}) {
211
+ const { secondMap: d, noiseMap: i, blend: f, feather: m, noiseScale: M, ...u } = a;
212
+ super(u);
213
+ s(this, "secondMap");
214
+ s(this, "noiseMap");
215
+ s(this, "blend");
216
+ s(this, "feather");
217
+ s(this, "noiseScale");
218
218
  if (this.secondMap = d || null, i)
219
219
  this.noiseMap = i;
220
220
  else {
221
221
  const o = new v(new Uint8Array([255, 255, 255, 255]), 1, 1);
222
- o.needsUpdate = !0, this.noiseMap = o, new b().load(D, (l) => {
223
- this.noiseMap = l, l.wrapS = A, l.wrapT = A, this.userData.shader && (this.userData.shader.uniforms.noiseMap.value = l);
222
+ o.needsUpdate = !0, this.noiseMap = o, new D().load(g, (r) => {
223
+ this.noiseMap = r, r.wrapS = A, r.wrapT = A, this.userData.shader && (this.userData.shader.uniforms.noiseMap.value = r);
224
224
  });
225
225
  }
226
- this.progress = m ?? 0.5, this.mergedSize = f ?? 0.1, this.noiseScale = M ?? 1, this.onBeforeCompile = (o) => {
227
- o.defines = o.defines || {}, this.secondMap && (o.defines.USE_SECOND_MAP = ""), o.uniforms.secondMap = { value: this.secondMap }, o.uniforms.noiseMap = { value: this.noiseMap }, o.uniforms.progress = { value: this.progress }, o.uniforms.mergedSize = { value: this.mergedSize }, o.uniforms.noiseScale = { value: this.noiseScale }, this.userData.shader = o, o.fragmentShader = `
228
- uniform float progress;
229
- uniform float mergedSize;
226
+ this.blend = f ?? 0.5, this.feather = m ?? 0.1, this.noiseScale = M ?? 1, this.onBeforeCompile = (o) => {
227
+ o.defines = o.defines || {}, this.secondMap && (o.defines.USE_SECOND_MAP = ""), o.uniforms.secondMap = { value: this.secondMap }, o.uniforms.noiseMap = { value: this.noiseMap }, o.uniforms.blend = { value: this.blend }, o.uniforms.feather = { value: this.feather }, o.uniforms.noiseScale = { value: this.noiseScale }, this.userData.shader = o, o.fragmentShader = `
228
+ uniform float blend;
229
+ uniform float feather;
230
230
  uniform float noiseScale;
231
231
  ${this.secondMap ? "uniform sampler2D secondMap;" : ""}
232
232
  uniform sampler2D noiseMap;
@@ -237,8 +237,8 @@ class k extends C {
237
237
 
238
238
  vec2 blendMasks(vec2 uv) {
239
239
  float noiseVal = sampleNoise(uv);
240
- float maskLo = smoothstep(progress - mergedSize, progress, noiseVal);
241
- float maskHi = smoothstep(progress, progress + mergedSize, noiseVal);
240
+ float maskLo = smoothstep(blend - feather, blend, noiseVal);
241
+ float maskHi = smoothstep(blend, blend + feather, noiseVal);
242
242
  float borderMask = maskLo * (1.0 - maskHi);
243
243
  return vec2(maskHi, borderMask);
244
244
  }
@@ -265,42 +265,42 @@ class k extends C {
265
265
  );
266
266
  };
267
267
  }
268
- setMerge(s) {
269
- this.progress = s, this.userData.shader && (this.userData.shader.uniforms.progress.value = s);
268
+ setBlend(a) {
269
+ this.blend = a, this.userData.shader && (this.userData.shader.uniforms.blend.value = a);
270
270
  }
271
- setMergedSize(s) {
272
- this.mergedSize = s, this.userData.shader && (this.userData.shader.uniforms.mergedSize.value = s);
271
+ setFeather(a) {
272
+ this.feather = a, this.userData.shader && (this.userData.shader.uniforms.feather.value = a);
273
273
  }
274
- setNoiseScale(s) {
275
- this.noiseScale = s, this.userData.shader && (this.userData.shader.uniforms.noiseScale.value = s);
274
+ setNoiseScale(a) {
275
+ this.noiseScale = a, this.userData.shader && (this.userData.shader.uniforms.noiseScale.value = a);
276
276
  }
277
277
  }
278
- class z extends x {
279
- constructor(s = {}) {
280
- const { secondMap: d, secondDisplacementMap: i, secondNormalMap: m, secondRoughnessMap: f, secondMetalnessMap: M, secondAoMap: p, noiseMap: o, progress: l, mergedSize: u, noiseScale: c, ...g } = s;
281
- super(g);
282
- a(this, "secondMap");
283
- a(this, "secondDisplacementMap");
284
- a(this, "secondNormalMap");
285
- a(this, "secondRoughnessMap");
286
- a(this, "secondMetalnessMap");
287
- a(this, "secondAoMap");
288
- a(this, "noiseMap");
289
- a(this, "progress");
290
- a(this, "mergedSize");
291
- a(this, "noiseScale");
292
- if (this.secondMap = d || null, this.secondDisplacementMap = i || null, this.secondNormalMap = m || null, this.secondRoughnessMap = f || null, this.secondMetalnessMap = M || null, this.secondAoMap = p || null, o)
278
+ class B extends x {
279
+ constructor(a = {}) {
280
+ const { secondMap: d, secondDisplacementMap: i, secondNormalMap: f, secondRoughnessMap: m, secondMetalnessMap: M, secondAoMap: u, noiseMap: o, blend: r, feather: c, noiseScale: p, ...b } = a;
281
+ super(b);
282
+ s(this, "secondMap");
283
+ s(this, "secondDisplacementMap");
284
+ s(this, "secondNormalMap");
285
+ s(this, "secondRoughnessMap");
286
+ s(this, "secondMetalnessMap");
287
+ s(this, "secondAoMap");
288
+ s(this, "noiseMap");
289
+ s(this, "blend");
290
+ s(this, "feather");
291
+ s(this, "noiseScale");
292
+ if (this.secondMap = d || null, this.secondDisplacementMap = i || null, this.secondNormalMap = f || null, this.secondRoughnessMap = m || null, this.secondMetalnessMap = M || null, this.secondAoMap = u || null, o)
293
293
  this.noiseMap = o;
294
294
  else {
295
295
  const e = new v(new Uint8Array([255, 255, 255, 255]), 1, 1);
296
- e.needsUpdate = !0, this.noiseMap = e, new b().load(D, (n) => {
297
- this.noiseMap = n, n.wrapS = A, n.wrapT = A, this.userData.shader && (this.userData.shader.uniforms.noiseMap.value = n);
296
+ e.needsUpdate = !0, this.noiseMap = e, new D().load(g, (t) => {
297
+ this.noiseMap = t, t.wrapS = A, t.wrapT = A, this.userData.shader && (this.userData.shader.uniforms.noiseMap.value = t);
298
298
  });
299
299
  }
300
- this.progress = l ?? 0.5, this.mergedSize = u ?? 0.1, this.noiseScale = c ?? 1, this.onBeforeCompile = (e) => {
301
- e.defines = e.defines || {}, this.secondMap && (e.defines.USE_SECOND_MAP = ""), this.secondDisplacementMap && (e.defines.USE_SECOND_DISPLACEMENTMAP = ""), this.secondNormalMap && (e.defines.USE_SECOND_NORMALMAP = ""), this.secondRoughnessMap && (e.defines.USE_SECOND_ROUGHNESSMAP = ""), this.secondMetalnessMap && (e.defines.USE_SECOND_METALNESSMAP = ""), this.secondAoMap && (e.defines.USE_SECOND_AOMAP = ""), e.uniforms.secondMap = { value: this.secondMap }, e.uniforms.secondDisplacementMap = { value: this.secondDisplacementMap }, e.uniforms.secondNormalMap = { value: this.secondNormalMap }, e.uniforms.secondRoughnessMap = { value: this.secondRoughnessMap }, e.uniforms.secondMetalnessMap = { value: this.secondMetalnessMap }, e.uniforms.secondAoMap = { value: this.secondAoMap }, e.uniforms.noiseMap = { value: this.noiseMap }, e.uniforms.progress = { value: this.progress }, e.uniforms.mergedSize = { value: this.mergedSize }, e.uniforms.noiseScale = { value: this.noiseScale }, this.userData.shader = e, e.fragmentShader = `
302
- uniform float progress;
303
- uniform float mergedSize;
300
+ this.blend = r ?? 0.5, this.feather = c ?? 0.1, this.noiseScale = p ?? 1, this.onBeforeCompile = (e) => {
301
+ e.defines = e.defines || {}, this.secondMap && (e.defines.USE_SECOND_MAP = ""), this.secondDisplacementMap && (e.defines.USE_SECOND_DISPLACEMENTMAP = ""), this.secondNormalMap && (e.defines.USE_SECOND_NORMALMAP = ""), this.secondRoughnessMap && (e.defines.USE_SECOND_ROUGHNESSMAP = ""), this.secondMetalnessMap && (e.defines.USE_SECOND_METALNESSMAP = ""), this.secondAoMap && (e.defines.USE_SECOND_AOMAP = ""), e.uniforms.secondMap = { value: this.secondMap }, e.uniforms.secondDisplacementMap = { value: this.secondDisplacementMap }, e.uniforms.secondNormalMap = { value: this.secondNormalMap }, e.uniforms.secondRoughnessMap = { value: this.secondRoughnessMap }, e.uniforms.secondMetalnessMap = { value: this.secondMetalnessMap }, e.uniforms.secondAoMap = { value: this.secondAoMap }, e.uniforms.noiseMap = { value: this.noiseMap }, e.uniforms.blend = { value: this.blend }, e.uniforms.feather = { value: this.feather }, e.uniforms.noiseScale = { value: this.noiseScale }, this.userData.shader = e, e.fragmentShader = `
302
+ uniform float blend;
303
+ uniform float feather;
304
304
  uniform float noiseScale;
305
305
  ${this.secondMap ? "uniform sampler2D secondMap;" : ""}
306
306
  ${this.secondNormalMap ? "uniform sampler2D secondNormalMap;" : ""}
@@ -315,14 +315,14 @@ class z extends x {
315
315
 
316
316
  vec2 blendMasks(vec2 uv) {
317
317
  float noiseVal = sampleNoise(uv);
318
- float maskLo = smoothstep(progress - mergedSize, progress, noiseVal);
319
- float maskHi = smoothstep(progress, progress + mergedSize, noiseVal);
318
+ float maskLo = smoothstep(blend - feather, blend, noiseVal);
319
+ float maskHi = smoothstep(blend, blend + feather, noiseVal);
320
320
  float borderMask = maskLo * (1.0 - maskHi);
321
321
  return vec2(maskHi, borderMask);
322
322
  }
323
323
  ` + e.fragmentShader, e.vertexShader = `
324
- uniform float progress;
325
- uniform float mergedSize;
324
+ uniform float blend;
325
+ uniform float feather;
326
326
  uniform float noiseScale;
327
327
  ${this.secondDisplacementMap ? "uniform sampler2D secondDisplacementMap;" : ""}
328
328
  uniform sampler2D noiseMap;
@@ -333,8 +333,8 @@ class z extends x {
333
333
 
334
334
  vec2 blendMasks(vec2 uv) {
335
335
  float noiseVal = sampleNoise(uv);
336
- float maskLo = smoothstep(progress - mergedSize, progress, noiseVal);
337
- float maskHi = smoothstep(progress, progress + mergedSize, noiseVal);
336
+ float maskLo = smoothstep(blend - feather, blend, noiseVal);
337
+ float maskHi = smoothstep(blend, blend + feather, noiseVal);
338
338
  float borderMask = maskLo * (1.0 - maskHi);
339
339
  return vec2(maskHi, borderMask);
340
340
  }
@@ -349,7 +349,7 @@ class z extends x {
349
349
  float maskHiColor = colorMasks.x;
350
350
  float borderMaskColor = colorMasks.y;
351
351
  vec4 blendedColor = mix(texelColor2, texelColor1, maskHiColor);
352
- vec4 borderColor = mix(texelColor2, texelColor1, mergedSize);
352
+ vec4 borderColor = mix(texelColor2, texelColor1, feather);
353
353
  vec4 finalColor = mix(blendedColor, borderColor, borderMaskColor);
354
354
 
355
355
  diffuseColor *= finalColor;
@@ -468,18 +468,18 @@ class z extends x {
468
468
  );
469
469
  };
470
470
  }
471
- setMerge(s) {
472
- this.progress = s, this.userData.shader && (this.userData.shader.uniforms.progress.value = s);
471
+ setBlend(a) {
472
+ this.blend = a, this.userData.shader && (this.userData.shader.uniforms.blend.value = a);
473
473
  }
474
- setMergedSize(s) {
475
- this.mergedSize = s, this.userData.shader && (this.userData.shader.uniforms.mergedSize.value = s);
474
+ setFeather(a) {
475
+ this.feather = a, this.userData.shader && (this.userData.shader.uniforms.feather.value = a);
476
476
  }
477
- setNoiseScale(s) {
478
- this.noiseScale = s, this.userData.shader && (this.userData.shader.uniforms.noiseScale.value = s);
477
+ setNoiseScale(a) {
478
+ this.noiseScale = a, this.userData.shader && (this.userData.shader.uniforms.noiseScale.value = a);
479
479
  }
480
480
  }
481
481
  export {
482
482
  k as DTMeshBasicMaterial,
483
- z as DTMeshPhysicalMaterial,
483
+ B as DTMeshPhysicalMaterial,
484
484
  E as DTMeshStandardMaterial
485
485
  };
@@ -1,6 +1,6 @@
1
- (function(n,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],a):(n=typeof globalThis<"u"?globalThis:n||self,a(n["three-double-texture-materials"]={},n.THREE))})(this,function(n,a){"use strict";var N=Object.defineProperty;var x=(n,a,i)=>a in n?N(n,a,{enumerable:!0,configurable:!0,writable:!0,value:i}):n[a]=i;var o=(n,a,i)=>x(n,typeof a!="symbol"?a+"":a,i);const i="data:image/png;base64,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";class b extends a.MeshStandardMaterial{constructor(s={}){const{secondMap:d,secondDisplacementMap:A,secondNormalMap:m,secondRoughnessMap:f,secondMetalnessMap:M,secondAoMap:p,noiseMap:r,progress:l,mergedSize:u,noiseScale:c,...g}=s;super(g);o(this,"secondMap");o(this,"secondDisplacementMap");o(this,"secondNormalMap");o(this,"secondRoughnessMap");o(this,"secondMetalnessMap");o(this,"secondAoMap");o(this,"noiseMap");o(this,"progress");o(this,"mergedSize");o(this,"noiseScale");if(this.secondMap=d||null,this.secondDisplacementMap=A||null,this.secondNormalMap=m||null,this.secondRoughnessMap=f||null,this.secondMetalnessMap=M||null,this.secondAoMap=p||null,r)this.noiseMap=r;else{const e=new a.DataTexture(new Uint8Array([255,255,255,255]),1,1);e.needsUpdate=!0,this.noiseMap=e,new a.TextureLoader().load(i,t=>{this.noiseMap=t,t.wrapS=a.RepeatWrapping,t.wrapT=a.RepeatWrapping,this.userData.shader&&(this.userData.shader.uniforms.noiseMap.value=t)})}this.progress=l??.5,this.mergedSize=u??.1,this.noiseScale=c??1,this.onBeforeCompile=e=>{e.defines=e.defines||{},this.secondMap&&(e.defines.USE_SECOND_MAP=""),this.secondDisplacementMap&&(e.defines.USE_SECOND_DISPLACEMENTMAP=""),this.secondNormalMap&&(e.defines.USE_SECOND_NORMALMAP=""),this.secondRoughnessMap&&(e.defines.USE_SECOND_ROUGHNESSMAP=""),this.secondMetalnessMap&&(e.defines.USE_SECOND_METALNESSMAP=""),this.secondAoMap&&(e.defines.USE_SECOND_AOMAP=""),e.uniforms.secondMap={value:this.secondMap},e.uniforms.secondDisplacementMap={value:this.secondDisplacementMap},e.uniforms.secondNormalMap={value:this.secondNormalMap},e.uniforms.secondRoughnessMap={value:this.secondRoughnessMap},e.uniforms.secondMetalnessMap={value:this.secondMetalnessMap},e.uniforms.secondAoMap={value:this.secondAoMap},e.uniforms.noiseMap={value:this.noiseMap},e.uniforms.progress={value:this.progress},e.uniforms.mergedSize={value:this.mergedSize},e.uniforms.noiseScale={value:this.noiseScale},this.userData.shader=e,e.fragmentShader=`
2
- uniform float progress;
3
- uniform float mergedSize;
1
+ (function(t,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("three")):typeof define=="function"&&define.amd?define(["exports","three"],s):(t=typeof globalThis<"u"?globalThis:t||self,s(t["three-double-texture-materials"]={},t.THREE))})(this,function(t,s){"use strict";var N=Object.defineProperty;var x=(t,s,r)=>s in t?N(t,s,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[s]=r;var o=(t,s,r)=>x(t,typeof s!="symbol"?s+"":s,r);const r="data:image/png;base64,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";class g extends s.MeshStandardMaterial{constructor(a={}){const{secondMap:A,secondDisplacementMap:d,secondNormalMap:f,secondRoughnessMap:m,secondMetalnessMap:M,secondAoMap:u,noiseMap:n,blend:i,feather:c,noiseScale:p,...b}=a;super(b);o(this,"secondMap");o(this,"secondDisplacementMap");o(this,"secondNormalMap");o(this,"secondRoughnessMap");o(this,"secondMetalnessMap");o(this,"secondAoMap");o(this,"noiseMap");o(this,"blend");o(this,"feather");o(this,"noiseScale");if(this.secondMap=A||null,this.secondDisplacementMap=d||null,this.secondNormalMap=f||null,this.secondRoughnessMap=m||null,this.secondMetalnessMap=M||null,this.secondAoMap=u||null,n)this.noiseMap=n;else{const e=new s.DataTexture(new Uint8Array([255,255,255,255]),1,1);e.needsUpdate=!0,this.noiseMap=e,new s.TextureLoader().load(r,l=>{this.noiseMap=l,l.wrapS=s.RepeatWrapping,l.wrapT=s.RepeatWrapping,this.userData.shader&&(this.userData.shader.uniforms.noiseMap.value=l)})}this.blend=i??.5,this.feather=c??.1,this.noiseScale=p??1,this.onBeforeCompile=e=>{e.defines=e.defines||{},this.secondMap&&(e.defines.USE_SECOND_MAP=""),this.secondDisplacementMap&&(e.defines.USE_SECOND_DISPLACEMENTMAP=""),this.secondNormalMap&&(e.defines.USE_SECOND_NORMALMAP=""),this.secondRoughnessMap&&(e.defines.USE_SECOND_ROUGHNESSMAP=""),this.secondMetalnessMap&&(e.defines.USE_SECOND_METALNESSMAP=""),this.secondAoMap&&(e.defines.USE_SECOND_AOMAP=""),e.uniforms.secondMap={value:this.secondMap},e.uniforms.secondDisplacementMap={value:this.secondDisplacementMap},e.uniforms.secondNormalMap={value:this.secondNormalMap},e.uniforms.secondRoughnessMap={value:this.secondRoughnessMap},e.uniforms.secondMetalnessMap={value:this.secondMetalnessMap},e.uniforms.secondAoMap={value:this.secondAoMap},e.uniforms.noiseMap={value:this.noiseMap},e.uniforms.blend={value:this.blend},e.uniforms.feather={value:this.feather},e.uniforms.noiseScale={value:this.noiseScale},this.userData.shader=e,e.fragmentShader=`
2
+ uniform float blend;
3
+ uniform float feather;
4
4
  uniform float noiseScale;
5
5
  ${this.secondMap?"uniform sampler2D secondMap;":""}
6
6
  ${this.secondNormalMap?"uniform sampler2D secondNormalMap;":""}
@@ -15,14 +15,14 @@
15
15
 
16
16
  vec2 blendMasks(vec2 uv) {
17
17
  float noiseVal = sampleNoise(uv);
18
- float maskLo = smoothstep(progress - mergedSize, progress, noiseVal);
19
- float maskHi = smoothstep(progress, progress + mergedSize, noiseVal);
18
+ float maskLo = smoothstep(blend - feather, blend, noiseVal);
19
+ float maskHi = smoothstep(blend, blend + feather, noiseVal);
20
20
  float borderMask = maskLo * (1.0 - maskHi);
21
21
  return vec2(maskHi, borderMask);
22
22
  }
23
23
  `+e.fragmentShader,e.vertexShader=`
24
- uniform float progress;
25
- uniform float mergedSize;
24
+ uniform float blend;
25
+ uniform float feather;
26
26
  uniform float noiseScale;
27
27
  ${this.secondDisplacementMap?"uniform sampler2D secondDisplacementMap;":""}
28
28
  uniform sampler2D noiseMap;
@@ -33,8 +33,8 @@
33
33
 
34
34
  vec2 blendMasks(vec2 uv) {
35
35
  float noiseVal = sampleNoise(uv);
36
- float maskLo = smoothstep(progress - mergedSize, progress, noiseVal);
37
- float maskHi = smoothstep(progress, progress + mergedSize, noiseVal);
36
+ float maskLo = smoothstep(blend - feather, blend, noiseVal);
37
+ float maskHi = smoothstep(blend, blend + feather, noiseVal);
38
38
  float borderMask = maskLo * (1.0 - maskHi);
39
39
  return vec2(maskHi, borderMask);
40
40
  }
@@ -47,7 +47,7 @@
47
47
  float maskHiColor = colorMasks.x;
48
48
  float borderMaskColor = colorMasks.y;
49
49
  vec4 blendedColor = mix(texelColor2, texelColor1, maskHiColor);
50
- vec4 borderColor = mix(texelColor2, texelColor1, mergedSize);
50
+ vec4 borderColor = mix(texelColor2, texelColor1, feather);
51
51
  vec4 finalColor = mix(blendedColor, borderColor, borderMaskColor);
52
52
 
53
53
  diffuseColor *= finalColor;
@@ -147,9 +147,9 @@
147
147
  #endif
148
148
  transformed += normalize( objectNormal ) * ( disp * displacementScale + displacementBias );
149
149
  #endif
150
- `)}}setMerge(s){this.progress=s,this.userData.shader&&(this.userData.shader.uniforms.progress.value=s)}setMergedSize(s){this.mergedSize=s,this.userData.shader&&(this.userData.shader.uniforms.mergedSize.value=s)}setNoiseScale(s){this.noiseScale=s,this.userData.shader&&(this.userData.shader.uniforms.noiseScale.value=s)}}class S extends a.MeshBasicMaterial{constructor(s={}){const{secondMap:d,noiseMap:A,progress:m,mergedSize:f,noiseScale:M,...p}=s;super(p);o(this,"secondMap");o(this,"noiseMap");o(this,"progress");o(this,"mergedSize");o(this,"noiseScale");if(this.secondMap=d||null,A)this.noiseMap=A;else{const r=new a.DataTexture(new Uint8Array([255,255,255,255]),1,1);r.needsUpdate=!0,this.noiseMap=r,new a.TextureLoader().load(i,l=>{this.noiseMap=l,l.wrapS=a.RepeatWrapping,l.wrapT=a.RepeatWrapping,this.userData.shader&&(this.userData.shader.uniforms.noiseMap.value=l)})}this.progress=m??.5,this.mergedSize=f??.1,this.noiseScale=M??1,this.onBeforeCompile=r=>{r.defines=r.defines||{},this.secondMap&&(r.defines.USE_SECOND_MAP=""),r.uniforms.secondMap={value:this.secondMap},r.uniforms.noiseMap={value:this.noiseMap},r.uniforms.progress={value:this.progress},r.uniforms.mergedSize={value:this.mergedSize},r.uniforms.noiseScale={value:this.noiseScale},this.userData.shader=r,r.fragmentShader=`
151
- uniform float progress;
152
- uniform float mergedSize;
150
+ `)}}setBlend(a){this.blend=a,this.userData.shader&&(this.userData.shader.uniforms.blend.value=a)}setFeather(a){this.feather=a,this.userData.shader&&(this.userData.shader.uniforms.feather.value=a)}setNoiseScale(a){this.noiseScale=a,this.userData.shader&&(this.userData.shader.uniforms.noiseScale.value=a)}}class h extends s.MeshBasicMaterial{constructor(a={}){const{secondMap:A,noiseMap:d,blend:f,feather:m,noiseScale:M,...u}=a;super(u);o(this,"secondMap");o(this,"noiseMap");o(this,"blend");o(this,"feather");o(this,"noiseScale");if(this.secondMap=A||null,d)this.noiseMap=d;else{const n=new s.DataTexture(new Uint8Array([255,255,255,255]),1,1);n.needsUpdate=!0,this.noiseMap=n,new s.TextureLoader().load(r,i=>{this.noiseMap=i,i.wrapS=s.RepeatWrapping,i.wrapT=s.RepeatWrapping,this.userData.shader&&(this.userData.shader.uniforms.noiseMap.value=i)})}this.blend=f??.5,this.feather=m??.1,this.noiseScale=M??1,this.onBeforeCompile=n=>{n.defines=n.defines||{},this.secondMap&&(n.defines.USE_SECOND_MAP=""),n.uniforms.secondMap={value:this.secondMap},n.uniforms.noiseMap={value:this.noiseMap},n.uniforms.blend={value:this.blend},n.uniforms.feather={value:this.feather},n.uniforms.noiseScale={value:this.noiseScale},this.userData.shader=n,n.fragmentShader=`
151
+ uniform float blend;
152
+ uniform float feather;
153
153
  uniform float noiseScale;
154
154
  ${this.secondMap?"uniform sampler2D secondMap;":""}
155
155
  uniform sampler2D noiseMap;
@@ -160,12 +160,12 @@
160
160
 
161
161
  vec2 blendMasks(vec2 uv) {
162
162
  float noiseVal = sampleNoise(uv);
163
- float maskLo = smoothstep(progress - mergedSize, progress, noiseVal);
164
- float maskHi = smoothstep(progress, progress + mergedSize, noiseVal);
163
+ float maskLo = smoothstep(blend - feather, blend, noiseVal);
164
+ float maskHi = smoothstep(blend, blend + feather, noiseVal);
165
165
  float borderMask = maskLo * (1.0 - maskHi);
166
166
  return vec2(maskHi, borderMask);
167
167
  }
168
- `+r.fragmentShader,r.fragmentShader=r.fragmentShader.replace("#include <map_fragment>",`
168
+ `+n.fragmentShader,n.fragmentShader=n.fragmentShader.replace("#include <map_fragment>",`
169
169
  #ifdef USE_MAP
170
170
  vec4 texelColor1 = texture2D( map, vMapUv );
171
171
  #ifdef USE_SECOND_MAP
@@ -182,9 +182,9 @@
182
182
  diffuseColor *= texelColor1;
183
183
  #endif
184
184
  #endif
185
- `)}}setMerge(s){this.progress=s,this.userData.shader&&(this.userData.shader.uniforms.progress.value=s)}setMergedSize(s){this.mergedSize=s,this.userData.shader&&(this.userData.shader.uniforms.mergedSize.value=s)}setNoiseScale(s){this.noiseScale=s,this.userData.shader&&(this.userData.shader.uniforms.noiseScale.value=s)}}class h extends a.MeshPhysicalMaterial{constructor(s={}){const{secondMap:d,secondDisplacementMap:A,secondNormalMap:m,secondRoughnessMap:f,secondMetalnessMap:M,secondAoMap:p,noiseMap:r,progress:l,mergedSize:u,noiseScale:c,...g}=s;super(g);o(this,"secondMap");o(this,"secondDisplacementMap");o(this,"secondNormalMap");o(this,"secondRoughnessMap");o(this,"secondMetalnessMap");o(this,"secondAoMap");o(this,"noiseMap");o(this,"progress");o(this,"mergedSize");o(this,"noiseScale");if(this.secondMap=d||null,this.secondDisplacementMap=A||null,this.secondNormalMap=m||null,this.secondRoughnessMap=f||null,this.secondMetalnessMap=M||null,this.secondAoMap=p||null,r)this.noiseMap=r;else{const e=new a.DataTexture(new Uint8Array([255,255,255,255]),1,1);e.needsUpdate=!0,this.noiseMap=e,new a.TextureLoader().load(i,t=>{this.noiseMap=t,t.wrapS=a.RepeatWrapping,t.wrapT=a.RepeatWrapping,this.userData.shader&&(this.userData.shader.uniforms.noiseMap.value=t)})}this.progress=l??.5,this.mergedSize=u??.1,this.noiseScale=c??1,this.onBeforeCompile=e=>{e.defines=e.defines||{},this.secondMap&&(e.defines.USE_SECOND_MAP=""),this.secondDisplacementMap&&(e.defines.USE_SECOND_DISPLACEMENTMAP=""),this.secondNormalMap&&(e.defines.USE_SECOND_NORMALMAP=""),this.secondRoughnessMap&&(e.defines.USE_SECOND_ROUGHNESSMAP=""),this.secondMetalnessMap&&(e.defines.USE_SECOND_METALNESSMAP=""),this.secondAoMap&&(e.defines.USE_SECOND_AOMAP=""),e.uniforms.secondMap={value:this.secondMap},e.uniforms.secondDisplacementMap={value:this.secondDisplacementMap},e.uniforms.secondNormalMap={value:this.secondNormalMap},e.uniforms.secondRoughnessMap={value:this.secondRoughnessMap},e.uniforms.secondMetalnessMap={value:this.secondMetalnessMap},e.uniforms.secondAoMap={value:this.secondAoMap},e.uniforms.noiseMap={value:this.noiseMap},e.uniforms.progress={value:this.progress},e.uniforms.mergedSize={value:this.mergedSize},e.uniforms.noiseScale={value:this.noiseScale},this.userData.shader=e,e.fragmentShader=`
186
- uniform float progress;
187
- uniform float mergedSize;
185
+ `)}}setBlend(a){this.blend=a,this.userData.shader&&(this.userData.shader.uniforms.blend.value=a)}setFeather(a){this.feather=a,this.userData.shader&&(this.userData.shader.uniforms.feather.value=a)}setNoiseScale(a){this.noiseScale=a,this.userData.shader&&(this.userData.shader.uniforms.noiseScale.value=a)}}class S extends s.MeshPhysicalMaterial{constructor(a={}){const{secondMap:A,secondDisplacementMap:d,secondNormalMap:f,secondRoughnessMap:m,secondMetalnessMap:M,secondAoMap:u,noiseMap:n,blend:i,feather:c,noiseScale:p,...b}=a;super(b);o(this,"secondMap");o(this,"secondDisplacementMap");o(this,"secondNormalMap");o(this,"secondRoughnessMap");o(this,"secondMetalnessMap");o(this,"secondAoMap");o(this,"noiseMap");o(this,"blend");o(this,"feather");o(this,"noiseScale");if(this.secondMap=A||null,this.secondDisplacementMap=d||null,this.secondNormalMap=f||null,this.secondRoughnessMap=m||null,this.secondMetalnessMap=M||null,this.secondAoMap=u||null,n)this.noiseMap=n;else{const e=new s.DataTexture(new Uint8Array([255,255,255,255]),1,1);e.needsUpdate=!0,this.noiseMap=e,new s.TextureLoader().load(r,l=>{this.noiseMap=l,l.wrapS=s.RepeatWrapping,l.wrapT=s.RepeatWrapping,this.userData.shader&&(this.userData.shader.uniforms.noiseMap.value=l)})}this.blend=i??.5,this.feather=c??.1,this.noiseScale=p??1,this.onBeforeCompile=e=>{e.defines=e.defines||{},this.secondMap&&(e.defines.USE_SECOND_MAP=""),this.secondDisplacementMap&&(e.defines.USE_SECOND_DISPLACEMENTMAP=""),this.secondNormalMap&&(e.defines.USE_SECOND_NORMALMAP=""),this.secondRoughnessMap&&(e.defines.USE_SECOND_ROUGHNESSMAP=""),this.secondMetalnessMap&&(e.defines.USE_SECOND_METALNESSMAP=""),this.secondAoMap&&(e.defines.USE_SECOND_AOMAP=""),e.uniforms.secondMap={value:this.secondMap},e.uniforms.secondDisplacementMap={value:this.secondDisplacementMap},e.uniforms.secondNormalMap={value:this.secondNormalMap},e.uniforms.secondRoughnessMap={value:this.secondRoughnessMap},e.uniforms.secondMetalnessMap={value:this.secondMetalnessMap},e.uniforms.secondAoMap={value:this.secondAoMap},e.uniforms.noiseMap={value:this.noiseMap},e.uniforms.blend={value:this.blend},e.uniforms.feather={value:this.feather},e.uniforms.noiseScale={value:this.noiseScale},this.userData.shader=e,e.fragmentShader=`
186
+ uniform float blend;
187
+ uniform float feather;
188
188
  uniform float noiseScale;
189
189
  ${this.secondMap?"uniform sampler2D secondMap;":""}
190
190
  ${this.secondNormalMap?"uniform sampler2D secondNormalMap;":""}
@@ -199,14 +199,14 @@
199
199
 
200
200
  vec2 blendMasks(vec2 uv) {
201
201
  float noiseVal = sampleNoise(uv);
202
- float maskLo = smoothstep(progress - mergedSize, progress, noiseVal);
203
- float maskHi = smoothstep(progress, progress + mergedSize, noiseVal);
202
+ float maskLo = smoothstep(blend - feather, blend, noiseVal);
203
+ float maskHi = smoothstep(blend, blend + feather, noiseVal);
204
204
  float borderMask = maskLo * (1.0 - maskHi);
205
205
  return vec2(maskHi, borderMask);
206
206
  }
207
207
  `+e.fragmentShader,e.vertexShader=`
208
- uniform float progress;
209
- uniform float mergedSize;
208
+ uniform float blend;
209
+ uniform float feather;
210
210
  uniform float noiseScale;
211
211
  ${this.secondDisplacementMap?"uniform sampler2D secondDisplacementMap;":""}
212
212
  uniform sampler2D noiseMap;
@@ -217,8 +217,8 @@
217
217
 
218
218
  vec2 blendMasks(vec2 uv) {
219
219
  float noiseVal = sampleNoise(uv);
220
- float maskLo = smoothstep(progress - mergedSize, progress, noiseVal);
221
- float maskHi = smoothstep(progress, progress + mergedSize, noiseVal);
220
+ float maskLo = smoothstep(blend - feather, blend, noiseVal);
221
+ float maskHi = smoothstep(blend, blend + feather, noiseVal);
222
222
  float borderMask = maskLo * (1.0 - maskHi);
223
223
  return vec2(maskHi, borderMask);
224
224
  }
@@ -231,7 +231,7 @@
231
231
  float maskHiColor = colorMasks.x;
232
232
  float borderMaskColor = colorMasks.y;
233
233
  vec4 blendedColor = mix(texelColor2, texelColor1, maskHiColor);
234
- vec4 borderColor = mix(texelColor2, texelColor1, mergedSize);
234
+ vec4 borderColor = mix(texelColor2, texelColor1, feather);
235
235
  vec4 finalColor = mix(blendedColor, borderColor, borderMaskColor);
236
236
 
237
237
  diffuseColor *= finalColor;
@@ -331,4 +331,4 @@
331
331
  #endif
332
332
  transformed += normalize( objectNormal ) * ( disp * displacementScale + displacementBias );
333
333
  #endif
334
- `)}}setMerge(s){this.progress=s,this.userData.shader&&(this.userData.shader.uniforms.progress.value=s)}setMergedSize(s){this.mergedSize=s,this.userData.shader&&(this.userData.shader.uniforms.mergedSize.value=s)}setNoiseScale(s){this.noiseScale=s,this.userData.shader&&(this.userData.shader.uniforms.noiseScale.value=s)}}n.DTMeshBasicMaterial=S,n.DTMeshPhysicalMaterial=h,n.DTMeshStandardMaterial=b,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"})});
334
+ `)}}setBlend(a){this.blend=a,this.userData.shader&&(this.userData.shader.uniforms.blend.value=a)}setFeather(a){this.feather=a,this.userData.shader&&(this.userData.shader.uniforms.feather.value=a)}setNoiseScale(a){this.noiseScale=a,this.userData.shader&&(this.userData.shader.uniforms.noiseScale.value=a)}}t.DTMeshBasicMaterial=h,t.DTMeshPhysicalMaterial=S,t.DTMeshStandardMaterial=g,Object.defineProperty(t,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,9 +1,17 @@
1
1
  {
2
2
  "name": "@jaimebboyjt/three-double-texture-materials",
3
- "version": "0.0.1",
3
+ "version": "0.1.0",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "description": "A Three.js library for combining textures easily",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/JaimeTorrealba/three-double-texture-material.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/JaimeTorrealba/three-double-texture-material/issues"
13
+ },
14
+ "homepage": "https://github.com/JaimeTorrealba/three-double-texture-material",
7
15
  "publishConfig": {
8
16
  "access": "public"
9
17
  },