tsl-textures 1.5.0 → 1.7.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/package.json +1 -1
- package/src/rough-clay.js +58 -0
- package/src/supersphere.js +66 -0
- package/src/tsl-utils.js +14 -2
- package/src/watermelon.js +56 -0
package/package.json
CHANGED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
|
|
2
|
+
// TSL-Textures: Neon Lights
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
import { cross, exp, Fn, mx_worley_noise_float, normalLocal, positionLocal, sub, tangentLocal, transformNormalToView } from 'three/tsl';
|
|
7
|
+
import { noise } from 'tsl-textures/tsl-utils.js';
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
var surfacePos = Fn( ([ pos, normal, bump, curvature ]) => {
|
|
12
|
+
|
|
13
|
+
var k1 = mx_worley_noise_float( pos.add( noise( pos ).mul( curvature ) ) ).add( 0.8 ).pow( 5 ).toVar();
|
|
14
|
+
k1.addAssign( k1.pow( 0.5 ) );
|
|
15
|
+
//k1.addAssign( noise(pos.mul(noiseScale.add(8))).add(1).pow(2).mul(noiseBump) );
|
|
16
|
+
return pos.add( normal.mul( k1 ).mul( bump ) );
|
|
17
|
+
|
|
18
|
+
} );
|
|
19
|
+
|
|
20
|
+
var roughClay = Fn( ( params ) => {
|
|
21
|
+
|
|
22
|
+
var eps = 0.001;
|
|
23
|
+
|
|
24
|
+
var bump = params.bump.div( 50 ).toVar();
|
|
25
|
+
|
|
26
|
+
var position = positionLocal.mul( exp( params.scale.div( 2 ) ) ).add( params.seed.sin().mul( 10 ) ).toVar( ),
|
|
27
|
+
normal = normalLocal.normalize().toVar(),
|
|
28
|
+
tangent = tangentLocal.normalize().mul( eps ).toVar(),
|
|
29
|
+
bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
|
|
30
|
+
|
|
31
|
+
var pos = surfacePos( position, normal, bump, params.curvature );
|
|
32
|
+
var posU = surfacePos( position.add( tangent ), normal, bump, params.curvature );
|
|
33
|
+
var posV = surfacePos( position.add( bitangent ), normal, bump, params.curvature );
|
|
34
|
+
|
|
35
|
+
var dU = sub( posU, pos ),
|
|
36
|
+
dV = sub( posV, pos );
|
|
37
|
+
|
|
38
|
+
return transformNormalToView( cross( dU, dV ).normalize() );
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
} );
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
roughClay.defaults = {
|
|
46
|
+
$name: 'Rough clay',
|
|
47
|
+
$normalNode: true,
|
|
48
|
+
|
|
49
|
+
scale: 2,
|
|
50
|
+
bump: 0.5,
|
|
51
|
+
curvature: 0.2,
|
|
52
|
+
|
|
53
|
+
seed: 0,
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
export { roughClay };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
|
|
2
|
+
// TSL-Textures: Supersphere
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
import { cross, float, Fn, normalLocal, positionLocal, sub, tangentLocal, transformNormalToView } from 'three/tsl';
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
var surfacePos = Fn( ([ pos, params ])=>{
|
|
11
|
+
|
|
12
|
+
var exponent = float( 2 ).pow( params.exponent );
|
|
13
|
+
var equPos = pos.div( pos.length() ).toVar();
|
|
14
|
+
|
|
15
|
+
var p = equPos.x.abs().pow( exponent )
|
|
16
|
+
.add( equPos.y.abs().pow( exponent ) )
|
|
17
|
+
.add( equPos.z.abs().pow( exponent ) )
|
|
18
|
+
.pow( float( 1 ).div( exponent ) );
|
|
19
|
+
|
|
20
|
+
return equPos.div( p );
|
|
21
|
+
|
|
22
|
+
} );
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
var supersphere = Fn( ( params )=>{
|
|
27
|
+
|
|
28
|
+
return surfacePos( positionLocal, params );
|
|
29
|
+
|
|
30
|
+
} );
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
supersphere.normal = Fn( ( params ) => {
|
|
35
|
+
|
|
36
|
+
var eps = 0.01;
|
|
37
|
+
|
|
38
|
+
var position = positionLocal,
|
|
39
|
+
normal = normalLocal.normalize().toVar(),
|
|
40
|
+
tangent = tangentLocal.normalize().mul( eps ).toVar(),
|
|
41
|
+
bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
|
|
42
|
+
|
|
43
|
+
var pos = surfacePos( position, params );
|
|
44
|
+
var posU = surfacePos( position.add( tangent ), params );
|
|
45
|
+
var posV = surfacePos( position.add( bitangent ), params );
|
|
46
|
+
|
|
47
|
+
var dU = sub( posU, pos ),
|
|
48
|
+
dV = sub( posV, pos );
|
|
49
|
+
|
|
50
|
+
return transformNormalToView( cross( dU, dV ).normalize() );
|
|
51
|
+
|
|
52
|
+
} );
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
supersphere.defaults = {
|
|
57
|
+
$name: 'Supersphere',
|
|
58
|
+
$positionNode: true,
|
|
59
|
+
|
|
60
|
+
exponent: 3,
|
|
61
|
+
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
export { supersphere };
|
package/src/tsl-utils.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
import { add, cos, cross, float, Fn, If, log2, mat4, max, min, mul, positionLocal, pow, remap, select, sin, smoothstep, sub, uniform, vec3, vec4 } from 'three/tsl';
|
|
11
|
+
import { add, cos, cross, dFdx, dFdy, float, Fn, If, log2, mat4, max, min, mul, positionLocal, pow, remap, select, sin, smoothstep, sub, transformNormalToView, uniform, vec3, vec4 } from 'three/tsl';
|
|
12
12
|
import { Vector3 } from 'three';
|
|
13
13
|
//import { mx_perlin_noise_float as noise } from 'https://cdn.jsdelivr.net/npm/three@0.167.0/src/nodes/materialx/lib/mx_noise.js';
|
|
14
14
|
|
|
@@ -363,6 +363,17 @@ const overlayPlanar = Fn( ( params )=>{
|
|
|
363
363
|
|
|
364
364
|
|
|
365
365
|
|
|
366
|
+
const normalVector = Fn( ([ pos ])=>{
|
|
367
|
+
|
|
368
|
+
var dU = dFdx( pos ),
|
|
369
|
+
dV = dFdy( pos );
|
|
370
|
+
|
|
371
|
+
return transformNormalToView( cross( dU, dV ).normalize() );
|
|
372
|
+
|
|
373
|
+
} );
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
|
|
366
377
|
export
|
|
367
378
|
{
|
|
368
379
|
mx_noise_float as noise
|
|
@@ -384,5 +395,6 @@ export
|
|
|
384
395
|
matTrans,
|
|
385
396
|
matScale,
|
|
386
397
|
selectPlanar,
|
|
387
|
-
overlayPlanar
|
|
398
|
+
overlayPlanar,
|
|
399
|
+
normalVector
|
|
388
400
|
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
|
|
2
|
+
// TSL-Textures: Watermelon
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
import { Color } from 'three';
|
|
7
|
+
import { equirectUV, exp, Fn, mix, positionLocal, vec3 } from 'three/tsl';
|
|
8
|
+
import { noise } from 'tsl-textures/tsl-utils.js';
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var watermelon = Fn( ( params )=>{
|
|
13
|
+
|
|
14
|
+
var pos = positionLocal.mul( exp( params.scale.div( 4 ).add( 2 ) ) ).add( params.seed ).toVar( );
|
|
15
|
+
|
|
16
|
+
var uv = equirectUV( positionLocal.normalize() ).toVar(),
|
|
17
|
+
a = uv.x.mul( params.stripes.round(), 2*Math.PI ).add( noise( pos.mul( vec3( 1, 0, 1 ) ) ).mul( 2 ) );
|
|
18
|
+
|
|
19
|
+
var k = a.sin().add( 0.5 ).div( 2 ).mul( uv.y.remap( 0, 1, -Math.PI, Math.PI ).cos().add( 1.2 ).clamp( 0, 1 ) )
|
|
20
|
+
.add( params.variation.mul( 2, noise( pos.mul( 1.5 ) ).div( 2 ) ) )
|
|
21
|
+
.add( params.variation.mul( 2, noise( pos.mul( 4 ) ).div( 6 ) ) )
|
|
22
|
+
.toVar();
|
|
23
|
+
|
|
24
|
+
k.assign(
|
|
25
|
+
k.mix( k.round(), 0.75 )
|
|
26
|
+
.add( noise( pos.mul( 2 ) ).mul( params.noise, 0.5 ) )
|
|
27
|
+
.add( noise( pos.mul( 3 ) ).mul( params.noise, 1 ) )
|
|
28
|
+
.add( noise( pos.mul( 15 ) ).mul( params.noise, 0.2 ) )
|
|
29
|
+
.clamp( 0, 1 )
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
var color = mix( params.background, params.color, k ).toVar();
|
|
33
|
+
|
|
34
|
+
return color;
|
|
35
|
+
|
|
36
|
+
} );
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
watermelon.defaults = {
|
|
41
|
+
$name: 'Watermelon',
|
|
42
|
+
|
|
43
|
+
scale: 2,
|
|
44
|
+
stripes: 12,
|
|
45
|
+
variation: 0.5,
|
|
46
|
+
noise: 0.25,
|
|
47
|
+
|
|
48
|
+
color: new Color( 'yellowgreen' ),
|
|
49
|
+
background: new Color( 'darkgreen' ),
|
|
50
|
+
|
|
51
|
+
seed: 0,
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
export { watermelon };
|