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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tsl-textures",
3
- "version": "1.5.0",
3
+ "version": "1.7.0",
4
4
  "description": "A collection of Three.js Shading Language (TSL) textures ",
5
5
  "main": "index.js",
6
6
  "repository": {
@@ -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 };