tsl-textures 2.5.1 → 3.0.1

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.
Files changed (59) hide show
  1. package/dist/cjs/tsl-textures.js +2449 -1426
  2. package/dist/cjs/tsl-textures.min.js +2 -2
  3. package/dist/tsl-textures.js +2435 -1421
  4. package/dist/tsl-textures.min.js +2 -2
  5. package/package.json +1 -1
  6. package/src/brain.js +72 -21
  7. package/src/bricks.js +56 -23
  8. package/src/camouflage.js +39 -20
  9. package/src/caustics.js +39 -14
  10. package/src/cave-art.js +39 -13
  11. package/src/circle-decor.js +39 -13
  12. package/src/circles.js +36 -16
  13. package/src/clouds.js +69 -28
  14. package/src/concrete.js +57 -23
  15. package/src/cork.js +54 -35
  16. package/src/crumpled-fabric.js +39 -14
  17. package/src/dalmatian-spots.js +37 -12
  18. package/src/darth-maul.js +43 -15
  19. package/src/dyson-sphere.js +61 -18
  20. package/src/entangled.js +36 -12
  21. package/src/fordite.js +36 -12
  22. package/src/gas-giant.js +42 -16
  23. package/src/grid.js +45 -17
  24. package/src/isolayers.js +41 -15
  25. package/src/isolines.js +36 -10
  26. package/src/karst-rock.js +31 -8
  27. package/src/marble.js +36 -11
  28. package/src/melter.js +0 -1
  29. package/src/neon-lights.js +51 -23
  30. package/src/perlin-noise.js +66 -0
  31. package/src/photosphere.js +34 -11
  32. package/src/planet.js +66 -30
  33. package/src/polka-dots.js +42 -17
  34. package/src/processed-wood.js +42 -16
  35. package/src/protozoa.js +51 -16
  36. package/src/reticular-veins.js +37 -11
  37. package/src/roman-paving.js +30 -8
  38. package/src/rotator.js +71 -27
  39. package/src/rough-clay.js +50 -22
  40. package/src/runny-eggs.js +120 -44
  41. package/src/rust.js +81 -19
  42. package/src/satin.js +27 -20
  43. package/src/scaler.js +61 -26
  44. package/src/scepter-head.js +46 -20
  45. package/src/scream.js +29 -19
  46. package/src/stars.js +36 -11
  47. package/src/static-noise.js +36 -9
  48. package/src/supersphere.js +63 -26
  49. package/src/tiger-fur.js +41 -14
  50. package/src/translator.js +67 -24
  51. package/src/tsl-textures.js +2 -1
  52. package/src/tsl-utils.js +172 -623
  53. package/src/turbulent-smoke.js +38 -13
  54. package/src/voronoi-cells.js +44 -26
  55. package/src/water-drops.js +55 -22
  56. package/src/watermelon.js +43 -18
  57. package/src/wood.js +48 -15
  58. package/src/zebra-lines.js +38 -12
  59. package/src/simplex-noise.js +0 -41
package/src/tiger-fur.js CHANGED
@@ -4,14 +4,15 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { exp, mix, positionGeometry, vec3 } from 'three/tsl';
8
- import { noise, prepare, TSLFn } from './tsl-utils.js';
7
+ import { exp, Fn, mix, positionGeometry, vec3 } from 'three/tsl';
8
+ import { noise } from './tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var defaults = {
13
13
  $name: 'Tiger fur',
14
14
 
15
+ position: positionGeometry,
15
16
  scale: 2,
16
17
  lengths: 4,
17
18
  blur: 0.3,
@@ -26,24 +27,50 @@ var defaults = {
26
27
 
27
28
 
28
29
 
29
- var tigerFur = TSLFn( ( params )=>{
30
+ var tigerFurRaw = Fn( ([ position, scale, lengths, blur, strength, hairs, color, bottomColor, seed ])=>{
30
31
 
31
- params = prepare( params, defaults );
32
+ var xscale = scale.div( 2 ).add( 1 ).toVar();
33
+ var pos = position.mul( exp( xscale ) ).add( seed ).toVar( );
32
34
 
33
- var scale = params.scale.div( 2 ).add( 1 ).toVar();
34
- var pos = positionGeometry.mul( exp( scale ) ).add( params.seed ).toVar( );
35
-
36
- var len = params.lengths.add( 5 ).reciprocal().toVar();
37
- var hairs = params.hairs.mul( 0.3 ).toVar();
38
- var k = noise( pos.mul( scale, vec3( 1, len, len ) ) );
35
+ var len = lengths.add( 5 ).reciprocal().toVar();
36
+ var hairs = hairs.mul( 0.3 ).toVar();
37
+ var k = noise( pos.mul( xscale, vec3( 1, len, len ) ) );
39
38
  k = k.add( noise( pos.mul( vec3( 25, 1, 1 ) ) ).add( 1 ).mul( hairs ) );
40
- k = k.add( params.strength.sub( 0.5 ) ).smoothstep( params.blur.negate(), params.blur ).oneMinus();
39
+ k = k.add( strength.sub( 0.5 ) ).smoothstep( blur.negate(), blur ).oneMinus();
40
+
41
+ var n = position.y.add( hairs.sub( 0.5 ) ).smoothstep( -1, 0.5 );
42
+
43
+ return mix( bottomColor, color, n ).mul( k );
44
+
45
+ } ).setLayout( {
46
+ name: 'tigerFurRaw',
47
+ type: 'vec3',
48
+ inputs: [
49
+ { name: 'position', type: 'vec3' },
50
+ { name: 'scale', type: 'float' },
51
+ { name: 'lengths', type: 'float' },
52
+ { name: 'blur', type: 'float' },
53
+ { name: 'strength', type: 'float' },
54
+ { name: 'hairs', type: 'float' },
55
+ { name: 'color', type: 'vec3' },
56
+ { name: 'bottomColor', type: 'vec3' },
57
+ { name: 'seed', type: 'float' },
58
+ ] }
59
+ );
60
+
61
+
62
+
63
+ function tigerFur( params={} ) {
64
+
65
+ var { position, scale, lengths, blur, strength, hairs, color, bottomColor, seed } = { ...defaults, ...params };
66
+
67
+ return tigerFurRaw( position, scale, lengths, blur, strength, hairs, color, bottomColor, seed );
68
+
69
+ }
41
70
 
42
- var n = positionGeometry.y.add( hairs.sub( 0.5 ) ).smoothstep( -1, 0.5 );
43
71
 
44
- return mix( params.bottomColor, params.color, n ).mul( k );
45
72
 
46
- }, defaults );
73
+ tigerFur.defaults = defaults;
47
74
 
48
75
 
49
76
 
package/src/translator.js CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
 
6
6
  import { Vector2, Vector3 } from "three";
7
- import { cross, Fn, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView, vec4 } from 'three/tsl';
8
- import { matTrans, prepare, selectPlanar, TSLFn } from './tsl-utils.js';
7
+ import { cross, Fn, normalLocal, positionGeometry, tangentLocal } from 'three/tsl';
8
+ import { approximateNormal, selectPlanar } from './tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -24,49 +24,92 @@ var defaults = {
24
24
 
25
25
 
26
26
 
27
- var surfacePos = Fn( ([ pos, params ])=>{
27
+ var surfacePos = Fn( ([ pos, distance, selectorAngles, selectorCenter, selectorWidth ])=>{
28
28
 
29
- var zone = selectPlanar( pos, params.selectorAngles, params.selectorCenter, params.selectorWidth );
29
+ var zone = selectPlanar( pos, selectorAngles, selectorCenter, selectorWidth );
30
30
 
31
- var T = matTrans( params.distance.mul( zone ) );
31
+ return pos.add( distance.mul( zone ) );
32
32
 
33
- return T.mul( vec4( pos, 1 ) ).xyz;
33
+ } ).setLayout( {
34
+ name: 'surfacePos',
35
+ type: 'vec3',
36
+ inputs: [
37
+ { name: 'pos', type: 'vec3' },
38
+ { name: 'distance', type: 'vec3' },
39
+ { name: 'selectorAngles', type: 'vec2' },
40
+ { name: 'selectorCenter', type: 'vec3' },
41
+ { name: 'selectorWidth', type: 'float' },
42
+ ]
43
+ } );
44
+
45
+
46
+
47
+ var translatorRaw = Fn( ([ distance, selectorAngles, selectorCenter, selectorWidth ])=>{
34
48
 
49
+ return surfacePos( positionGeometry, distance, selectorAngles, selectorCenter, selectorWidth );
50
+
51
+ } ).setLayout( {
52
+ name: 'translatorRaw',
53
+ type: 'vec3',
54
+ inputs: [
55
+ { name: 'distance', type: 'vec3' },
56
+ { name: 'selectorAngles', type: 'vec2' },
57
+ { name: 'selectorCenter', type: 'vec3' },
58
+ { name: 'selectorWidth', type: 'float' },
59
+ ]
35
60
  } );
36
61
 
37
62
 
38
63
 
39
- var translator = TSLFn( ( params )=>{
64
+ var translatorNormalRaw = Fn( ([ distance, selectorAngles, selectorCenter, selectorWidth ])=>{
40
65
 
41
- params = prepare( params, defaults );
66
+ var EPS = 0.01;
42
67
 
43
- return surfacePos( positionGeometry, params );
68
+ var position = positionGeometry,
69
+ normal = normalLocal.normalize().toVar(),
70
+ tangent = tangentLocal.normalize().mul( EPS ).toVar(),
71
+ bitangent = cross( normal, tangent ).normalize().mul( EPS ).toVar();
72
+
73
+ var pos = surfacePos( position, distance, selectorAngles, selectorCenter, selectorWidth );
74
+ var posU = surfacePos( position.add( tangent ), distance, selectorAngles, selectorCenter, selectorWidth );
75
+ var posV = surfacePos( position.add( bitangent ), distance, selectorAngles, selectorCenter, selectorWidth );
76
+
77
+ return approximateNormal( pos, posU, posV );
78
+
79
+ } ).setLayout( {
80
+ name: 'translatorNormalRaw',
81
+ type: 'vec3',
82
+ inputs: [
83
+ { name: 'distance', type: 'vec3' },
84
+ { name: 'selectorAngles', type: 'vec2' },
85
+ { name: 'selectorCenter', type: 'vec3' },
86
+ { name: 'selectorWidth', type: 'float' },
87
+ ]
88
+ } );
44
89
 
45
- }, defaults );
46
90
 
47
91
 
92
+ function translator( params={} ) {
48
93
 
49
- translator.normal = TSLFn( ( params ) => {
94
+ var { distance, selectorAngles, selectorCenter, selectorWidth } = { ...defaults, ...params };
50
95
 
51
- params = prepare( params, defaults );
96
+ return translatorRaw( distance, selectorAngles, selectorCenter, selectorWidth );
52
97
 
53
- var eps = 0.01;
98
+ }
54
99
 
55
- var position = positionGeometry,
56
- normal = normalLocal.normalize().toVar(),
57
- tangent = tangentLocal.normalize().mul( eps ).toVar(),
58
- bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
59
100
 
60
- var pos = surfacePos( position, params );
61
- var posU = surfacePos( position.add( tangent ), params );
62
- var posV = surfacePos( position.add( bitangent ), params );
63
101
 
64
- var dU = sub( posU, pos ),
65
- dV = sub( posV, pos );
102
+ translator.normal = function ( params={} ) {
103
+
104
+ var { distance, selectorAngles, selectorCenter, selectorWidth } = { ...defaults, ...params };
105
+
106
+ return translatorNormalRaw( distance, selectorAngles, selectorCenter, selectorWidth );
107
+
108
+ };
109
+
66
110
 
67
- return transformNormalToView( cross( dU, dV ).normalize() );
68
111
 
69
- }, defaults );
112
+ translator.defaults = defaults;
70
113
 
71
114
 
72
115
 
@@ -1,4 +1,5 @@
1
1
  
2
+ window.__TSL_TEXTURES__ = 3.0;
2
3
 
3
4
  export * from './tsl-utils.js';
4
5
 
@@ -22,6 +23,7 @@ export { karstRock } from './karst-rock.js';
22
23
  export { marble } from './marble.js';
23
24
  //export { melter } from './melter.js';
24
25
  export { neonLights } from './neon-lights.js';
26
+ export { perlinNoise } from './perlin-noise.js';
25
27
  export { photosphere } from './photosphere.js';
26
28
  export { planet } from './planet.js';
27
29
  export { polkaDots } from './polka-dots.js';
@@ -35,7 +37,6 @@ export { satin } from './satin.js';
35
37
  export { scaler } from './scaler.js';
36
38
  export { scepterHead } from './scepter-head.js';
37
39
  export { scream } from './scream.js';
38
- export { simplexNoise } from './simplex-noise.js';
39
40
  export { stars } from './stars.js';
40
41
  export { staticNoise } from './static-noise.js';
41
42
  export { supersphere } from './supersphere.js';