tsl-textures 1.8.0 → 1.10.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
@@ -40,6 +40,7 @@ Uses [protozoa.js](https://boytchev.github.io/tsl-textures/docs/protozoa.html)
40
40
  texture to create a dynamic blob with microorganisms floating innside. A space
41
41
  station is constructed arounnd the blob. The surface of the station is made of
42
42
  a Dyson sphere texture from [dyson-texture.js](https://boytchev.github.io/tsl-textures/docs/dyson-sphere.html).
43
+ Click on the image for a live demo.
43
44
 
44
45
  [<img src="https://boytchev.github.io/tsl-textures/examples/example-protozoa.jpg">](https://boytchev.github.io/tsl-textures/examples/example-protozoa.html)
45
46
 
@@ -50,6 +51,31 @@ Uses [rotator.js](https://boytchev.github.io/tsl-textures/docs/rotator.html)
50
51
  texture that applies soft matrices on model vertices. This allows to make
51
52
  gradual rotation that looks like stretching skin and flexing muscles. The
52
53
  animation does not use skinning or morphing, the model is not preprocessed
53
- in any way, and no additional vertex data is added.
54
+ in any way, and no additional vertex data is added. Click on the image
55
+ for a live demo.
54
56
 
55
57
  [<img src="https://boytchev.github.io/tsl-textures/examples/example-neck-massage.jpg">](https://boytchev.github.io/tsl-textures/examples/example-neck-massage.html)
58
+
59
+
60
+ #### Example "Watermelon supersphere"
61
+
62
+ Uses [supersphere.js](https://boytchev.github.io/tsl-textures/docs/supersphere.html)
63
+ texture to generate the shape of a [supersphere](https://mathworld.wolfram.com/Supersphere.html)
64
+ and [watermelon.js](https://boytchev.github.io/tsl-textures/docs/watermelon.html)
65
+ texture to color the surface in a watermelon pattern. Both the shape and the pattern
66
+ are continuously changing. Click on the image for a live demo.
67
+
68
+ [<img src="https://boytchev.github.io/tsl-textures/examples/example-watermelon-supersphere.jpg">](https://boytchev.github.io/tsl-textures/examples/example-watermelon-supersphere.html)
69
+
70
+
71
+ #### Example "Texture in motion"
72
+
73
+ Uses [dyson-sphere.js](https://boytchev.github.io/tsl-textures/docs/dyson-sphere.html),
74
+ [camouflage.js](https://boytchev.github.io/tsl-textures/docs/camouflage.html),
75
+ [dalmatian-spots.js](https://boytchev.github.io/tsl-textures/docs/dalmatian-spots.html) and
76
+ [planet.js](https://boytchev.github.io/tsl-textures/docs/planet.html) textures
77
+ and applies them on the elements of an animated GLTF model. Textures are blended
78
+ via a TSL function. Click on the image for a live demo. (Note: non-WebGPU browsers
79
+ might need 30+ seconds to start up.)
80
+
81
+ [<img src="https://boytchev.github.io/tsl-textures/examples/example-texture-in-motion.jpg">](https://boytchev.github.io/tsl-textures/examples/example-texture-in-motion.html)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tsl-textures",
3
- "version": "1.8.0",
3
+ "version": "1.10.0",
4
4
  "description": "A collection of Three.js Shading Language (TSL) textures ",
5
5
  "main": "index.js",
6
6
  "repository": {
package/src/camouflage.js CHANGED
@@ -4,14 +4,16 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { exp, Fn, If, positionLocal, round, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { exp, Fn, If, positionGeometry, round, vec3 } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var camouflage = Fn( ( params )=>{
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed ).toVar( );
14
+ params = prepare( { ...camouflage.defaults, ...params } );
15
+
16
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
17
 
16
18
  var color = vec3( 0, 0, 0 ).toVar( );
17
19
 
package/src/cave-art.js CHANGED
@@ -4,13 +4,15 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { abs, add, exp, float, Fn, If, mix, or, positionLocal, pow2, sub } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { abs, add, exp, float, Fn, If, mix, or, positionGeometry, pow2, sub } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
  var caveArt = Fn( ( params ) => {
12
12
 
13
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed ).toVar( );
13
+ params = prepare( { ...caveArt.defaults, ...params } );
14
+
15
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
14
16
 
15
17
  var k1 = noise( pos, 4 ).sin().toVar();
16
18
  var k2 = noise( pos.mul( 1.5 ), 4 ).cos().toVar();
package/src/circles.js CHANGED
@@ -4,14 +4,16 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { acos, clamp, exp, float, Fn, positionLocal, select, sin } from 'three/tsl';
8
- import { hsl, toHsl } from 'tsl-textures/tsl-utils.js';
7
+ import { acos, clamp, exp, float, Fn, positionGeometry, select, sin } from 'three/tsl';
8
+ import { hsl, prepare, toHsl } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var circles = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.normalize().toVar( );
14
+ params = prepare( { ...circles.defaults, ...params } );
15
+
16
+ var pos = positionGeometry.normalize().toVar( );
15
17
 
16
18
  var angle = acos( clamp( pos.y, -1, 1 ) ).mul( 20 );
17
19
 
@@ -21,10 +23,10 @@ var circles = Fn( ( params ) => {
21
23
 
22
24
  var k = float( params.seed.sin().mul( 100 ) ).toVar();
23
25
 
24
- for ( var n=0; n<=10; n++ ) {
26
+ for ( var n=0; n<=10; n++ ) {
25
27
 
26
28
  k.addAssign( sin( x.mul( 2**n ).sub( Math.PI*n/2 ) ).mul( -n*( n+1 )/2 ) );
27
-
29
+
28
30
  }
29
31
 
30
32
  k.assign( k.div( 200 ).clamp( -2, 2 ) );
@@ -39,7 +41,7 @@ var circles = Fn( ( params ) => {
39
41
  hue.assign( huei.add( huef ) );
40
42
 
41
43
  return hsl( hue.div( 10 ), HSL.y, HSL.z );
42
-
44
+
43
45
  } );
44
46
 
45
47
 
package/src/clouds.js CHANGED
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { clamp, exp, Fn, min, mix, mul, positionLocal, vec4 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { clamp, exp, Fn, min, mix, mul, positionGeometry, vec4 } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var _clouds = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.toVar(),
14
+ var pos = positionGeometry.toVar(),
15
15
  scale = exp( params.scale.div( 1.5 ).sub( 0.5 ) ).toVar(),
16
16
  density = params.density.remap( 0, 1, -0.15, 0.15 ).toVar();
17
17
 
@@ -29,6 +29,8 @@ var _clouds = Fn( ( params ) => {
29
29
 
30
30
  var clouds = Fn( ( params ) => {
31
31
 
32
+ params = prepare( { ...clouds.defaults, ...params } );
33
+
32
34
  return _clouds( params ).rgb;
33
35
 
34
36
  } );
@@ -37,6 +39,8 @@ var clouds = Fn( ( params ) => {
37
39
 
38
40
  clouds.opacity = Fn( ( params ) => {
39
41
 
42
+ params = prepare( { ...clouds.defaults, ...params } );
43
+
40
44
  return _clouds( params ).a;
41
45
 
42
46
  } );
package/src/concrete.js CHANGED
@@ -3,8 +3,8 @@
3
3
 
4
4
 
5
5
 
6
- import { abs, cos, cross, exp, Fn, normalLocal, positionLocal, pow, remap, sin, sub, tangentLocal, transformNormalToView, vec3 } from 'three/tsl';
7
- import { noise } from 'tsl-textures/tsl-utils.js';
6
+ import { abs, cos, cross, exp, Fn, normalLocal, positionGeometry, pow, remap, sin, sub, tangentLocal, transformNormalToView, vec3 } from 'three/tsl';
7
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
8
8
 
9
9
 
10
10
 
@@ -20,9 +20,11 @@ var surfacePos = Fn( ([ pos, normal, bump, density, seed ]) => {
20
20
 
21
21
  var concrete = Fn( ( params ) => {
22
22
 
23
+ params = prepare( { ...concrete.defaults, ...params } );
24
+
23
25
  var eps = 0.001;
24
26
 
25
- var position = positionLocal.mul( exp( params.scale.div( 2 ).add( 2 ) ) ).toVar( ),
27
+ var position = positionGeometry.mul( exp( params.scale.div( 2 ).add( 2 ) ) ).toVar( ),
26
28
  normal = normalLocal.normalize().toVar(),
27
29
  tangent = tangentLocal.normalize().mul( eps ).toVar(),
28
30
  bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
package/src/cork.js CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { exp, float, Fn, If, Loop, mix, positionLocal, vec3 } from 'three/tsl';
8
- import { noise, vnoise } from 'tsl-textures/tsl-utils.js';
7
+ import { exp, float, Fn, If, Loop, mix, positionGeometry, vec3 } from 'three/tsl';
8
+ import { noise, prepare, vnoise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -18,7 +18,9 @@ var cellCenter = Fn( ([ cell ])=>{
18
18
 
19
19
  var cork = Fn( ( params )=>{
20
20
 
21
- var pos = positionLocal.mul( exp( params.scale.div( 1.5 ).add( 1 ) ) ).add( params.seed ).toVar( );
21
+ params = prepare( { ...cork.defaults, ...params } );
22
+
23
+ var pos = positionGeometry.mul( exp( params.scale.div( 1.5 ).add( 1 ) ) ).add( params.seed ).toVar( );
22
24
 
23
25
  var midCell = pos.round().toVar();
24
26
 
@@ -4,13 +4,15 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { exp, float, Fn, Loop, mix, positionLocal } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { exp, float, Fn, Loop, mix, positionGeometry } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
  var dalmatianSpots = Fn( ( params )=>{
12
12
 
13
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed ).sub( 1000 ).toVar( );
13
+ params = prepare( { ...dalmatianSpots.defaults, ...params } );
14
+
15
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).sub( 1000 ).toVar( );
14
16
 
15
17
  var k = float( 1 ).toVar();
16
18
 
@@ -0,0 +1,58 @@
1
+ 
2
+ // TSL-Textures: Darth Maul
3
+
4
+
5
+
6
+ import { Color, Vector3 } from "three";
7
+ import { abs, exp, Fn, mix, positionGeometry, pow, select, vec3 } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
+
10
+
11
+
12
+ var darthMaul = Fn( ( params ) => {
13
+
14
+ params = prepare( { ...darthMaul.defaults, ...params } );
15
+
16
+ var dX = vec3( params.shift.x, 0, 0 );
17
+
18
+ var position = positionGeometry.add( params.shift ).mul( exp( params.scale.div( 1.5 ).sub( 1 ) ) ).sub( params.shift ).mul( vec3( 1, 1/2, 1/2 ) ).toVar( );
19
+
20
+ var s = select( positionGeometry.y.mul( params.angle.radians().cos() ).add( positionGeometry.z.mul( params.angle.radians().sin() ) ).greaterThan( params.distance ), 1, 0 );
21
+
22
+ // implement symmetry
23
+ position.x.assign( position.x.add( params.shift.x ).abs() );
24
+ position.y.addAssign( params.seed );
25
+ position.z.mulAssign( params.shift.z );
26
+
27
+ var n = noise( position ).toVar();
28
+
29
+ var k = n.sin().mul( n.mul( params.complexity.mul( 2 ).add( 1 ).exp() ).sin() ).remap( 0, 0.2, 1, -1 ).greaterThan( params.balance ).select( 0, 1 );
30
+
31
+ var c = select( position.x.greaterThan( noise( position.mul( 2.3 ) ).abs().mul( 0.5 ).add( 0.02 ) ), 1, 0 );
32
+
33
+ return mix( params.background, params.color, k.mul( s ).mul( c ).clamp( 0, 1 ) );
34
+
35
+ } );
36
+
37
+
38
+
39
+ darthMaul.defaults = {
40
+ $name: 'Darth Maul',
41
+
42
+ scale: 2,
43
+ shift: new Vector3( 0, 0, 0 ),
44
+ complexity: 0,
45
+
46
+ angle: 60,
47
+ distance: 1.9,
48
+
49
+ color: new Color( 0xD02020 ),
50
+ background: new Color( 0x000000 ),
51
+ balance: 0,
52
+
53
+ seed: 0,
54
+ };
55
+
56
+
57
+
58
+ export { darthMaul };
@@ -4,7 +4,8 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { exp, float, Fn, Loop, mix, positionLocal, vec3 } from 'three/tsl';
7
+ import { exp, float, Fn, Loop, mix, positionGeometry, vec3 } from 'three/tsl';
8
+ import { prepare } from 'tsl-textures/tsl-utils.js';
8
9
 
9
10
 
10
11
 
@@ -61,7 +62,9 @@ var noiseg = Fn( ([ pos ])=>{
61
62
 
62
63
  var dysonSphere = Fn( ( params )=>{
63
64
 
64
- var pos = positionLocal.mul( exp( params.scale.div( 2 ).add( 0.5 ) ) ).add( params.seed ).toVar( );
65
+ params = prepare( { ...dysonSphere.defaults, ...params } );
66
+
67
+ var pos = positionGeometry.mul( exp( params.scale.div( 2 ).add( 0.5 ) ) ).add( params.seed ).toVar( );
65
68
 
66
69
  var res = vec3().toVar();
67
70
  var factor = float( 1 ).toVar();
package/src/entangled.js CHANGED
@@ -4,15 +4,17 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { abs, exp, float, floor, Fn, Loop, max, mix, mul, oneMinus, positionLocal, pow, sin } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { abs, exp, float, floor, Fn, Loop, max, mix, mul, oneMinus, positionGeometry, pow, sin } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var entangled = Fn( ( params ) => {
13
13
 
14
+ params = prepare( { ...entangled.defaults, ...params } );
15
+
14
16
  var scale = exp( params.scale.div( 2 ) ).toVar( );
15
- var pos = positionLocal.add( params.seed ).toVar( );
17
+ var pos = positionGeometry.add( params.seed ).toVar( );
16
18
  var k = float( -10000 ).toVar( );
17
19
  var k1 = float( 0 ).toVar( );
18
20
 
package/src/fordite.js CHANGED
@@ -4,14 +4,16 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { exp, Fn, mul, positionLocal, sin, vec3 } from 'three/tsl';
8
- import { hsl, noise } from 'tsl-textures/tsl-utils.js';
7
+ import { exp, Fn, mul, positionGeometry, sin, vec3 } from 'three/tsl';
8
+ import { hsl, noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var fordite = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed ).toVar( );
14
+ params = prepare( { ...fordite.defaults, ...params } );
15
+
16
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
17
 
16
18
  var k = noise(
17
19
  vec3(
package/src/gas-giant.js CHANGED
@@ -4,15 +4,17 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { exp, Fn, mix, positionLocal, vec3 } from 'three/tsl';
8
- import { hsl, noise, toHsl } from 'tsl-textures/tsl-utils.js';
7
+ import { exp, Fn, mix, positionGeometry, vec3 } from 'three/tsl';
8
+ import { hsl, noise, prepare, toHsl } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var gasGiant = Fn( ( params )=>{
13
13
 
14
+ params = prepare( { ...gasGiant.defaults, ...params } );
15
+
14
16
  var scale = params.scale.div( 2 ).add( 1 ).toVar();
15
- var pos = positionLocal.mul( exp( scale ) ).add( params.seed ).toVar( );
17
+ var pos = positionGeometry.mul( exp( scale ) ).add( params.seed ).toVar( );
16
18
 
17
19
  // turbulence strength
18
20
  var turbulence = params.turbulence.mul(
package/src/grid.js CHANGED
@@ -4,13 +4,16 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { abs, add, div, equirectUV, Fn, min, mix, mul, oneMinus, positionLocal, pow, remapClamp, round, sin, smoothstep, sub } from 'three/tsl';
7
+ import { abs, add, div, equirectUV, Fn, min, mix, mul, oneMinus, positionGeometry, pow, remapClamp, round, sin, smoothstep, sub } from 'three/tsl';
8
+ import { prepare } from 'tsl-textures/tsl-utils.js';
8
9
 
9
10
 
10
11
 
11
12
  var grid = Fn( ( params ) => {
12
13
 
13
- var uv = equirectUV( positionLocal.normalize() ).toVar(),
14
+ params = prepare( { ...grid.defaults, ...params } );
15
+
16
+ var uv = equirectUV( positionGeometry.normalize() ).toVar(),
14
17
  a = mul( uv.x, 2*Math.PI ),
15
18
  b = mul( uv.y, Math.PI ).toVar();
16
19
 
package/src/isolines.js CHANGED
@@ -4,14 +4,16 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { add, exp, Fn, mix, oneMinus, positionLocal, sin, smoothstep, sub } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { add, exp, Fn, mix, oneMinus, positionGeometry, sin, smoothstep, sub } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var isolines = Fn( ( params )=>{
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed ).toVar( );
14
+ params = prepare( { ...isolines.defaults, ...params } );
15
+
16
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
17
 
16
18
  var k = noise( pos ).mul( params.density );
17
19
 
package/src/karst-rock.js CHANGED
@@ -4,14 +4,16 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { exp, Fn, mix, positionLocal } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { exp, Fn, mix, positionGeometry } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var karstRock = Fn( ( params )=>{
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed.sin().mul( 5 ) ).toVar( );
14
+ params = prepare( { ...karstRock.defaults, ...params } );
15
+
16
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed.sin().mul( 5 ) ).toVar( );
15
17
 
16
18
  var pos2 = pos.add( noise( pos.mul( 2 ) ) ).toVar();
17
19
 
package/src/marble.js CHANGED
@@ -4,14 +4,16 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { add, div, exp, Fn, If, mix, mul, oneMinus, positionLocal, pow } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { add, div, exp, Fn, If, mix, mul, oneMinus, positionGeometry, pow } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var marble = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed ).toVar( );
14
+ params = prepare( { ...marble.defaults, ...params } );
15
+
16
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
17
 
16
18
  var k = add(
17
19
  noise( pos ),
@@ -4,14 +4,16 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { abs, exp, Fn, oneMinus, positionLocal, select, sqrt, vec3 } from 'three/tsl';
8
- import { hsl, noise, toHsl } from 'tsl-textures/tsl-utils.js';
7
+ import { abs, exp, Fn, oneMinus, positionGeometry, select, sqrt, vec3 } from 'three/tsl';
8
+ import { hsl, noise, prepare, toHsl } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var neonLights = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal;//.mul( exp( params.scale ) ).add( params.seed ).toVar( );
14
+ params = prepare( { ...neonLights.defaults, ...params } );
15
+
16
+ var pos = positionGeometry;//.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
17
 
16
18
  var scale = exp( params.scale.remap( 0, 4, 2, -2 ) ).toVar();
17
19
  var thinness = exp( params.thinness.remap( 0, 1, 1.5, 0 ) ).toVar();
@@ -4,15 +4,17 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { exp, Fn, Loop, mix, positionLocal, vec3 } from 'three/tsl';
8
- import { applyEuler, noise } from 'tsl-textures/tsl-utils.js';
7
+ import { exp, Fn, Loop, mix, positionGeometry, vec3 } from 'three/tsl';
8
+ import { applyEuler, noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var photosphere = Fn( ( params ) => {
13
13
 
14
+ params = prepare( { ...photosphere.defaults, ...params } );
15
+
14
16
  var scale = exp( params.scale.add( 1 ) ).toVar( );
15
- var pos = positionLocal.toVar( );
17
+ var pos = positionGeometry.toVar( );
16
18
 
17
19
  var vec = vec3( pos ).toVar();
18
20
 
package/src/planet.js CHANGED
@@ -4,14 +4,16 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { exp, float, Fn, If, Loop, mix, mul, positionLocal, remap, smoothstep, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { exp, float, Fn, If, Loop, mix, mul, positionGeometry, remap, smoothstep, vec3 } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
 
13
13
  var planet = Fn( ( params )=>{
14
14
 
15
+ params = prepare( { ...planet.defaults, ...params } );
16
+
15
17
  var k = float( 0 ).toVar(),
16
18
  sum = float( 0 ).toVar(),
17
19
  scale = exp( params.scale.sub( 2 ) ).toVar(),
@@ -19,7 +21,7 @@ var planet = Fn( ( params )=>{
19
21
 
20
22
  Loop( params.iterations.add( 10 ), ()=>{
21
23
 
22
- k.addAssign( mul( power, noise( positionLocal.mul( scale ).add( params.seed ) ) ) );
24
+ k.addAssign( mul( power, noise( positionGeometry.mul( scale ).add( params.seed ) ) ) );
23
25
  sum.addAssign( power );
24
26
  scale.mulAssign( 1.5 );
25
27
  power.mulAssign( 0.8 );
package/src/polka-dots.js CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { acos, add, distance, exp, float, Fn, Loop, max, min, mix, mod, mul, oneMinus, positionLocal, pow, smoothstep, } from 'three/tsl';
8
- import { spherical } from 'tsl-textures/tsl-utils.js';
7
+ import { acos, add, distance, exp, float, Fn, Loop, max, min, mix, mod, mul, oneMinus, positionGeometry, pow, smoothstep, } from 'three/tsl';
8
+ import { prepare, spherical } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -15,8 +15,10 @@ var goldenRatio = ( 1+5**0.5 )/2;
15
15
 
16
16
  var polkaDots = Fn( ( params ) => {
17
17
 
18
+ params = prepare( { ...polkaDots.defaults, ...params } );
19
+
18
20
  var cnt = pow( 10, params.count ).toVar();
19
- var vec = positionLocal.normalize().toVar();
21
+ var vec = positionGeometry.normalize().toVar();
20
22
 
21
23
  var besti = oneMinus( vec.y ).mul( cnt ).sub( 1 ).div( 2 );
22
24
 
@@ -4,18 +4,20 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { add, cos, exp, Fn, mix, positionLocal, radians, sin, sub, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { add, cos, exp, Fn, mix, positionGeometry, radians, sin, sub, vec3 } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var processedWood = Fn( ( params )=>{
13
13
 
14
+ params = prepare( { ...processedWood.defaults, ...params } );
15
+
14
16
  var angle = radians( params.angle ).toVar();
15
17
  var posLocal = vec3(
16
- sub( positionLocal.x.mul( cos( angle ) ), positionLocal.y.mul( sin( angle ) ) ),
17
- add( positionLocal.x.mul( sin( angle ) ), positionLocal.y.mul( cos( angle ) ) ),
18
- positionLocal.z,
18
+ sub( positionGeometry.x.mul( cos( angle ) ), positionGeometry.y.mul( sin( angle ) ) ),
19
+ add( positionGeometry.x.mul( sin( angle ) ), positionGeometry.y.mul( cos( angle ) ) ),
20
+ positionGeometry.z,
19
21
  ).toVar();
20
22
 
21
23
  var scale = params.scale.div( 2 ).add( 1 ).toVar();
package/src/protozoa.js CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { exp, float, Fn, Loop, matcapUV, mix, positionLocal, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { exp, float, Fn, Loop, matcapUV, mix, positionGeometry, vec3 } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -19,7 +19,9 @@ var pnoise = Fn( ([ pos, fat ])=>{
19
19
 
20
20
  var protozoa = Fn( ( params )=>{
21
21
 
22
- var pos = positionLocal.mul( exp( params.scale.sub( 1 ) ) ).add( params.seed ).toVar( );
22
+ params = prepare( { ...protozoa.defaults, ...params } );
23
+
24
+ var pos = positionGeometry.mul( exp( params.scale.sub( 1 ) ) ).add( params.seed ).toVar( );
23
25
 
24
26
  var matcap = vec3( matcapUV, matcapUV.length() ).toVar();
25
27
 
package/src/rotator.js CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
 
6
6
  import { Vector2, Vector3 } from "three";
7
- import { cross, Fn, normalLocal, positionLocal, sub, tangentLocal, transformNormalToView, vec4 } from 'three/tsl';
8
- import { matRotYXZ, matTrans, selectPlanar } from 'tsl-textures/tsl-utils.js';
7
+ import { cross, Fn, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView, vec4 } from 'three/tsl';
8
+ import { matRotYXZ, matTrans, prepare, selectPlanar } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -25,7 +25,9 @@ var surfacePos = Fn( ([ pos, params ])=>{
25
25
 
26
26
  var rotator = Fn( ( params )=>{
27
27
 
28
- return surfacePos( positionLocal, params );
28
+ params = prepare( { ...rotator.defaults, ...params } );
29
+
30
+ return surfacePos( positionGeometry, params );
29
31
 
30
32
  } );
31
33
 
@@ -33,9 +35,11 @@ var rotator = Fn( ( params )=>{
33
35
 
34
36
  rotator.normal = Fn( ( params ) => {
35
37
 
38
+ params = prepare( { ...rotator.defaults, ...params } );
39
+
36
40
  var eps = 0.01;
37
41
 
38
- var position = positionLocal,
42
+ var position = positionGeometry,
39
43
  normal = normalLocal.normalize().toVar(),
40
44
  tangent = tangentLocal.normalize().mul( eps ).toVar(),
41
45
  bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
package/src/rough-clay.js CHANGED
@@ -3,8 +3,8 @@
3
3
 
4
4
 
5
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';
6
+ import { cross, exp, Fn, mx_worley_noise_float, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView } from 'three/tsl';
7
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
8
8
 
9
9
 
10
10
 
@@ -19,11 +19,13 @@ var surfacePos = Fn( ([ pos, normal, bump, curvature ]) => {
19
19
 
20
20
  var roughClay = Fn( ( params ) => {
21
21
 
22
+ params = prepare( { ...roughClay.defaults, ...params } );
23
+
22
24
  var eps = 0.001;
23
25
 
24
26
  var bump = params.bump.div( 50 ).toVar();
25
27
 
26
- var position = positionLocal.mul( exp( params.scale.div( 2 ) ) ).add( params.seed.sin().mul( 10 ) ).toVar( ),
28
+ var position = positionGeometry.mul( exp( params.scale.div( 2 ) ) ).add( params.seed.sin().mul( 10 ) ).toVar( ),
27
29
  normal = normalLocal.normalize().toVar(),
28
30
  tangent = tangentLocal.normalize().mul( eps ).toVar(),
29
31
  bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
package/src/runny-eggs.js CHANGED
@@ -5,11 +5,14 @@
5
5
 
6
6
  import { Color } from 'three';
7
7
  import { cross, exp, Fn, mix, mx_worley_noise_float, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView } from 'three/tsl';
8
+ import { prepare } from 'tsl-textures/tsl-utils.js';
8
9
 
9
10
 
10
11
 
11
12
  var runnyEggs = Fn( ( params ) => {
12
13
 
14
+ params = prepare( { ...runnyEggs.defaults, ...params } );
15
+
13
16
  var pos = positionGeometry.mul( exp( params.scale.div( 1 ) ) ).add( params.seed.sin().mul( 10 ) ).toVar( );
14
17
 
15
18
  var sizeYolk = params.sizeYolk.oneMinus();
@@ -39,6 +42,8 @@ var surfacePos = Fn( ([ pos, normal, bump, sizeYolk, sizeWhite ]) => {
39
42
 
40
43
  runnyEggs.normal = Fn( ( params ) => {
41
44
 
45
+ params = prepare( { ...runnyEggs.defaults, ...params } );
46
+
42
47
  var eps = 0.001;
43
48
  var bump = 0.05;
44
49
 
@@ -64,6 +69,8 @@ runnyEggs.normal = Fn( ( params ) => {
64
69
 
65
70
  runnyEggs.roughness = Fn( ( params ) => {
66
71
 
72
+ params = prepare( { ...runnyEggs.defaults, ...params } );
73
+
67
74
  var pos = positionGeometry.mul( exp( params.scale.div( 1 ) ) ).add( params.seed.sin().mul( 10 ) ).toVar( );
68
75
 
69
76
  var sizeYolk = params.sizeYolk.oneMinus();
package/src/rust.js CHANGED
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { exp, Fn, Loop, mix, positionLocal } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { exp, Fn, Loop, mix, positionGeometry } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var _rust = Fn( ( params )=>{
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale.div( 4 ).add( -1 ) ) ).add( params.seed ).toVar( );
14
+ var pos = positionGeometry.mul( exp( params.scale.div( 4 ).add( -1 ) ) ).add( params.seed ).toVar( );
15
15
 
16
16
  var amount = params.amount.mul( noise( pos.mul( params.amount.div( 2 ).add( 4 ) ) ).add( 4 ) ).toVar();
17
17
 
@@ -35,9 +35,11 @@ var _rust = Fn( ( params )=>{
35
35
 
36
36
  var rust = Fn( ( params )=>{
37
37
 
38
+ params = prepare( { ...rust.defaults, ...params } );
39
+
38
40
  var k = _rust( params ).mul( 1.25 ).pow( 0.5 );
39
41
 
40
- var pos = positionLocal.mul( exp( params.scale.add( params.noiseScale.mul( 3 ), 2 ) ) );
42
+ var pos = positionGeometry.mul( exp( params.scale.add( params.noiseScale.mul( 3 ), 2 ) ) );
41
43
 
42
44
  k.addAssign( params.noise.mul( noise( pos ).abs().add( 0.1 ).pow( 2 ) ) );
43
45
 
@@ -49,6 +51,8 @@ var rust = Fn( ( params )=>{
49
51
 
50
52
  rust.opacity = Fn( ( params )=>{
51
53
 
54
+ params = prepare( { ...rust.defaults, ...params } );
55
+
52
56
  var k = _rust( params ).mul( params.opacity.add( 0.2 ) );
53
57
 
54
58
  return k.oneMinus();
package/src/satin.js CHANGED
@@ -4,14 +4,16 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { abs, exp, Fn, mix, positionLocal, pow, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { abs, exp, Fn, mix, positionGeometry, pow, vec3 } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var satin = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.toVar( );
14
+ params = prepare( { ...satin.defaults, ...params } );
15
+
16
+ var pos = positionGeometry.toVar( );
15
17
 
16
18
  var scale = exp( params.scale.div( 3 ) ).toVar();
17
19
 
package/src/scaler.js CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
 
6
6
  import { Vector2, Vector3 } from "three";
7
- import { cross, Fn, mix, normalLocal, positionLocal, sub, tangentLocal, transformNormalToView, vec3, vec4 } from 'three/tsl';
8
- import { matScale, matTrans, selectPlanar } from 'tsl-textures/tsl-utils.js';
7
+ import { cross, Fn, mix, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView, vec3, vec4 } from 'three/tsl';
8
+ import { matScale, matTrans, prepare, selectPlanar } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -25,7 +25,9 @@ var surfacePos = Fn( ([ pos, params ])=>{
25
25
 
26
26
  var scaler = Fn( ( params )=>{
27
27
 
28
- return surfacePos( positionLocal, params );
28
+ params = prepare( { ...scaler.defaults, ...params } );
29
+
30
+ return surfacePos( positionGeometry, params );
29
31
 
30
32
  } );
31
33
 
@@ -33,9 +35,11 @@ var scaler = Fn( ( params )=>{
33
35
 
34
36
  scaler.normal = Fn( ( params ) => {
35
37
 
38
+ params = prepare( { ...scaler.defaults, ...params } );
39
+
36
40
  var eps = 0.01;
37
41
 
38
- var position = positionLocal,
42
+ var position = positionGeometry,
39
43
  normal = normalLocal.normalize().toVar(),
40
44
  tangent = tangentLocal.normalize().mul( eps ).toVar(),
41
45
  bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
@@ -4,14 +4,16 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { abs, add, cos, floor, Fn, max, mix, mod, mul, positionLocal, remapClamp, sign, tan, vec3 } from 'three/tsl';
8
- import { hsl, noise, remapExp, toHsl } from 'tsl-textures/tsl-utils.js';
7
+ import { abs, add, cos, floor, Fn, max, mix, mod, mul, positionGeometry, remapClamp, sign, tan, vec3 } from 'three/tsl';
8
+ import { hsl, noise, prepare, remapExp, toHsl } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var scepterHead = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal;
14
+ params = prepare( { ...scepterHead.defaults, ...params } );
15
+
16
+ var pos = positionGeometry;
15
17
 
16
18
  var fx = pos.x.mul( remapExp( params.xFactor, 0, 100, 1.35, 30 ) ).toVar( ),
17
19
  fy = pos.y.mul( remapExp( params.yFactor, 0, 100, 1.35, 30 ) ).toVar( ),
package/src/scream.js CHANGED
@@ -4,18 +4,20 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { add, cos, exp, Fn, mix, positionLocal, sin } from 'three/tsl';
8
- import { hsl, noise, toHsl } from 'tsl-textures/tsl-utils.js';
7
+ import { add, cos, exp, Fn, mix, positionGeometry, sin } from 'three/tsl';
8
+ import { hsl, noise, prepare, toHsl } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var scream = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed ).toVar( );
14
+ params = prepare( { ...scream.defaults, ...params } );
15
+
16
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
17
 
16
18
  var k = noise( add( sin( pos.xyz ), cos( pos.yzx ) ) );
17
19
 
18
- pos.assign( positionLocal.mul( exp( params.scale ).mul( k ) ).add( params.seed ) );
20
+ pos.assign( positionGeometry.mul( exp( params.scale ).mul( k ) ).add( params.seed ) );
19
21
 
20
22
  var k = noise( add( sin( pos.xyz ), cos( pos.yzx ) ).mul( 2 ) );
21
23
 
@@ -4,14 +4,16 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { clamp, exp, Fn, mix, positionLocal } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { clamp, exp, Fn, mix, positionGeometry } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var simplexNoise = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed );
14
+ params = prepare( { ...simplexNoise.defaults, ...params } );
15
+
16
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed );
15
17
 
16
18
  var k = clamp( 0, 1, noise( pos ).mul( 0.5, exp( params.contrast ) ).add( 0.5, params.balance ) );
17
19
 
package/src/stars.js CHANGED
@@ -4,14 +4,17 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { abs, add, exp, Fn, mix, positionLocal, select } from 'three/tsl';
8
- import { hsl, noise, toHsl } from 'tsl-textures/tsl-utils.js';
7
+ import { abs, add, exp, Fn, mix, positionGeometry, select } from 'three/tsl';
8
+ import { hsl, noise, prepare, toHsl } from 'tsl-textures/tsl-utils.js';
9
+
9
10
 
10
11
 
11
12
 
12
13
  var stars = Fn( ( params ) => {
13
14
 
14
- var pos = positionLocal.mul( exp( params.scale.div( 2 ).add( 3 ) ) ).add( params.seed ).toVar( );
15
+ params = prepare( { ...stars.defaults, ...params } );
16
+
17
+ var pos = positionGeometry.mul( exp( params.scale.div( 2 ).add( 3 ) ) ).add( params.seed ).toVar( );
15
18
 
16
19
  var k = abs( noise( pos ) ).pow( 10 ).mul( 10 );
17
20
 
@@ -22,7 +25,7 @@ var stars = Fn( ( params ) => {
22
25
  var col = toHsl( mix( params.background, params.color, k ) );
23
26
 
24
27
  return hsl( add( col.x, dS ), col.y, col.z );
25
-
28
+
26
29
  } );
27
30
 
28
31
 
@@ -3,7 +3,8 @@
3
3
 
4
4
 
5
5
 
6
- import { cross, float, Fn, normalLocal, positionLocal, sub, tangentLocal, transformNormalToView } from 'three/tsl';
6
+ import { cross, float, Fn, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView } from 'three/tsl';
7
+ import { prepare } from 'tsl-textures/tsl-utils.js';
7
8
 
8
9
 
9
10
 
@@ -25,7 +26,9 @@ var surfacePos = Fn( ([ pos, params ])=>{
25
26
 
26
27
  var supersphere = Fn( ( params )=>{
27
28
 
28
- return surfacePos( positionLocal, params );
29
+ params = prepare( { ...supersphere.defaults, ...params } );
30
+
31
+ return surfacePos( positionGeometry, params );
29
32
 
30
33
  } );
31
34
 
@@ -33,9 +36,11 @@ var supersphere = Fn( ( params )=>{
33
36
 
34
37
  supersphere.normal = Fn( ( params ) => {
35
38
 
39
+ params = prepare( { ...supersphere.defaults, ...params } );
40
+
36
41
  var eps = 0.01;
37
42
 
38
- var position = positionLocal,
43
+ var position = positionGeometry,
39
44
  normal = normalLocal.normalize().toVar(),
40
45
  tangent = tangentLocal.normalize().mul( eps ).toVar(),
41
46
  bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
package/src/tiger-fur.js CHANGED
@@ -4,15 +4,17 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { exp, Fn, mix, positionLocal, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { exp, Fn, mix, positionGeometry, vec3 } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var tigerFur = Fn( ( params )=>{
13
13
 
14
+ params = prepare( { ...tigerFur.defaults, ...params } );
15
+
14
16
  var scale = params.scale.div( 2 ).add( 1 ).toVar();
15
- var pos = positionLocal.mul( exp( scale ) ).add( params.seed ).toVar( );
17
+ var pos = positionGeometry.mul( exp( scale ) ).add( params.seed ).toVar( );
16
18
 
17
19
  var len = params.length.add( 5 ).reciprocal().toVar();
18
20
  var hairs = params.hairs.mul( 0.3 ).toVar();
@@ -20,7 +22,7 @@ var tigerFur = Fn( ( params )=>{
20
22
  k = k.add( noise( pos.mul( vec3( 25, 1, 1 ) ) ).add( 1 ).mul( hairs ) );
21
23
  k = k.add( params.strength.sub( 0.5 ) ).smoothstep( params.blur.negate(), params.blur ).oneMinus();
22
24
 
23
- var n = positionLocal.y.add( hairs.sub( 0.5 ) ).smoothstep( -1, 0.5 );
25
+ var n = positionGeometry.y.add( hairs.sub( 0.5 ) ).smoothstep( -1, 0.5 );
24
26
 
25
27
  return mix( params.bottomColor, params.color, n ).mul( k );
26
28
 
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, positionLocal, sub, tangentLocal, transformNormalToView, vec4 } from 'three/tsl';
8
- import { matTrans, selectPlanar } from 'tsl-textures/tsl-utils.js';
7
+ import { cross, Fn, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView, vec4 } from 'three/tsl';
8
+ import { matTrans, prepare, selectPlanar } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -23,7 +23,9 @@ var surfacePos = Fn( ([ pos, params ])=>{
23
23
 
24
24
  var translator = Fn( ( params )=>{
25
25
 
26
- return surfacePos( positionLocal, params );
26
+ params = prepare( { ...translator.defaults, ...params } );
27
+
28
+ return surfacePos( positionGeometry, params );
27
29
 
28
30
  } );
29
31
 
@@ -31,9 +33,11 @@ var translator = Fn( ( params )=>{
31
33
 
32
34
  translator.normal = Fn( ( params ) => {
33
35
 
36
+ params = prepare( { ...translator.defaults, ...params } );
37
+
34
38
  var eps = 0.01;
35
39
 
36
- var position = positionLocal,
40
+ var position = positionGeometry,
37
41
  normal = normalLocal.normalize().toVar(),
38
42
  tangent = tangentLocal.normalize().mul( eps ).toVar(),
39
43
  bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
package/src/tsl-utils.js CHANGED
@@ -8,8 +8,8 @@
8
8
 
9
9
 
10
10
 
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
- import { Vector3 } from 'three';
11
+ import { add, cos, cross, dFdx, dFdy, float, Fn, If, log2, mat4, max, min, mul, positionGeometry, pow, remap, select, sin, smoothstep, sub, transformNormalToView, uniform, vec3, vec4 } from 'three/tsl';
12
+ import { Color, 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
 
15
15
 
@@ -349,7 +349,7 @@ const selectPlanar = Fn( ([ pos, selAngles, selCenter, selWidth ])=>{
349
349
  const overlayPlanar = Fn( ( params )=>{
350
350
 
351
351
  var zone = selectPlanar(
352
- positionLocal,
352
+ positionGeometry,
353
353
  params.selectorAngles,
354
354
  params.selectorCenter,
355
355
  params.selectorWidth
@@ -373,6 +373,90 @@ const normalVector = Fn( ([ pos ])=>{
373
373
  } );
374
374
 
375
375
 
376
+ var banner = null;
377
+ var bannerCounter = 10;
378
+ async function showFallbackWarning( ) {
379
+
380
+ if ( navigator.gpu != undefined ) {
381
+
382
+ var adapter = await navigator.gpu.requestAdapter();
383
+ if ( adapter ) return;
384
+
385
+ }
386
+
387
+ var html = `
388
+ <div style="font-size:1.25em; font-weight:bold;">PLEASE, WAIT</div>
389
+ <div style="font-size:0.85em; font-weight:100;" >NO WEBGPU &mdash; TRYING WEBGL2</div>
390
+ <div id="counter"></div>
391
+ `;
392
+
393
+ banner = document.createElement( 'div' );
394
+ banner.innerHTML = html;
395
+
396
+ banner.style.left = 'calc(50% - 8em)';
397
+ banner.style.width = '16em';
398
+
399
+ banner.style.fontFamily = 'Bahnschrifts, Arial';
400
+ banner.style.position = 'absolute';
401
+ banner.style.bottom = '20px';
402
+ banner.style.padding = '12px 6px';
403
+ banner.style.border = '1px solid white';
404
+ banner.style.borderRadius = '4px';
405
+ banner.style.background = 'rgba(0,0,0,0.5)';
406
+ banner.style.color = 'white';
407
+ banner.style.textAlign = 'center';
408
+ banner.style.opacity = '0.8';
409
+ banner.style.outline = 'none';
410
+ banner.style.zIndex = '999';
411
+
412
+ document.body.appendChild( banner );
413
+
414
+ }
415
+
416
+
417
+
418
+ function hideFallbackWarning( ) {
419
+
420
+ if ( banner ) {
421
+
422
+ if ( bannerCounter>0 )
423
+ bannerCounter--;
424
+ else {
425
+
426
+ banner.style.display = 'none';
427
+ // document.removeChild( banner );
428
+ banner = null;
429
+
430
+ }
431
+
432
+ }
433
+
434
+ }
435
+
436
+
437
+
438
+ // converts all numeric, color and vector properties to nodes
439
+ function prepare( params ) {
440
+
441
+ for ( var name of Object.keys( params ) ) {
442
+
443
+ if ( typeof params[ name ] === 'number' )
444
+ params[ name ] = float( params[ name ]);
445
+ else
446
+ if ( params[ name ] instanceof Color )
447
+ params[ name ] = vec3( params[ name ].r, params[ name ].g, params[ name ].b );
448
+ else
449
+ if ( params[ name ] instanceof Vector3 )
450
+ params[ name ] = vec3( params[ name ].x, params[ name ].y, params[ name ].z );
451
+
452
+ }
453
+
454
+ return params;
455
+
456
+ }
457
+
458
+
459
+
376
460
 
377
461
  export
378
462
  {
@@ -396,5 +480,8 @@ export
396
480
  matScale,
397
481
  selectPlanar,
398
482
  overlayPlanar,
399
- normalVector
483
+ showFallbackWarning,
484
+ hideFallbackWarning,
485
+ normalVector,
486
+ prepare
400
487
  };
@@ -4,8 +4,8 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { exp, float, Fn, If, Loop, mix, positionLocal, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { exp, float, Fn, If, Loop, mix, positionGeometry, vec3 } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -18,7 +18,9 @@ var cellCenter = Fn( ([ cell ])=>{
18
18
 
19
19
  var voronoiCells = Fn( ( params )=>{
20
20
 
21
- var pos = positionLocal.mul( exp( params.scale.div( 2 ).add( 0.5 ) ) ).add( params.seed ).toVar( );
21
+ params = prepare( { ...voronoiCells.defaults, ...params } );
22
+
23
+ var pos = positionGeometry.mul( exp( params.scale.div( 2 ).add( 0.5 ) ) ).add( params.seed ).toVar( );
22
24
 
23
25
  var midCell = pos.round().toVar();
24
26
 
@@ -3,8 +3,8 @@
3
3
 
4
4
 
5
5
 
6
- import { cos, cross, exp, Fn, normalLocal, positionLocal, remap, sin, sub, tangentLocal, transformNormalToView, vec3 } from 'three/tsl';
7
- import { noise } from 'tsl-textures/tsl-utils.js';
6
+ import { cos, cross, exp, Fn, normalLocal, positionGeometry, remap, sin, sub, tangentLocal, transformNormalToView, vec3 } from 'three/tsl';
7
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
8
8
 
9
9
 
10
10
 
@@ -20,9 +20,11 @@ var surfacePos = Fn( ([ pos, normal, bump, density, seed ]) => {
20
20
 
21
21
  var waterDrops = Fn( ( params ) => {
22
22
 
23
+ params = prepare( { ...waterDrops.defaults, ...params } );
24
+
23
25
  var eps = 0.001;
24
26
 
25
- var position = positionLocal.mul( exp( params.scale.div( 1 ).add( 1 ) ) ).toVar( ),
27
+ var position = positionGeometry.mul( exp( params.scale.div( 1 ).add( 1 ) ) ).toVar( ),
26
28
  normal = normalLocal.normalize().toVar(),
27
29
  tangent = tangentLocal.normalize().mul( eps ).toVar(),
28
30
  bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
package/src/watermelon.js CHANGED
@@ -4,16 +4,18 @@
4
4
 
5
5
 
6
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';
7
+ import { equirectUV, exp, Fn, mix, positionGeometry, vec3 } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var watermelon = Fn( ( params )=>{
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale.div( 4 ).add( 2 ) ) ).add( params.seed ).toVar( );
14
+ params = prepare( { ...watermelon.defaults, ...params } );
15
15
 
16
- var uv = equirectUV( positionLocal.normalize() ).toVar(),
16
+ var pos = positionGeometry.mul( exp( params.scale.div( 4 ).add( 2 ) ) ).add( params.seed ).toVar( );
17
+
18
+ var uv = equirectUV( positionGeometry.normalize() ).toVar(),
17
19
  a = uv.x.mul( params.stripes.round(), 2*Math.PI ).add( noise( pos.mul( vec3( 1, 0, 1 ) ) ).mul( 2 ) );
18
20
 
19
21
  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 ) )
package/src/wood.js CHANGED
@@ -4,18 +4,20 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { add, cos, exp, float, Fn, Loop, mix, mul, positionLocal, radians, reciprocal, sin, sub, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { add, cos, exp, float, Fn, Loop, mix, mul, positionGeometry, radians, reciprocal, sin, sub, vec3 } from 'three/tsl';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var wood = Fn( ( params ) => {
13
13
 
14
+ params = prepare( { ...wood.defaults, ...params } );
15
+
14
16
  var angle = radians( params.angle ).toVar();
15
17
  var posLocal = vec3(
16
- sub( positionLocal.x.mul( cos( angle ) ), positionLocal.y.mul( sin( angle ) ) ),
17
- add( positionLocal.x.mul( sin( angle ) ), positionLocal.y.mul( cos( angle ) ) ),
18
- positionLocal.z,
18
+ sub( positionGeometry.x.mul( cos( angle ) ), positionGeometry.y.mul( sin( angle ) ) ),
19
+ add( positionGeometry.x.mul( sin( angle ) ), positionGeometry.y.mul( cos( angle ) ) ),
20
+ positionGeometry.z,
19
21
  ).toVar();
20
22
 
21
23
 
@@ -4,14 +4,16 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { acos, clamp, exp, Fn, mix, positionLocal, sin } from 'three/tsl';
8
- import { spherical } from 'tsl-textures/tsl-utils.js';
7
+ import { acos, clamp, exp, Fn, mix, positionGeometry, sin } from 'three/tsl';
8
+ import { prepare, spherical } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var zebraLines = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.normalize().toVar( );
14
+ params = prepare( { ...zebraLines.defaults, ...params } );
15
+
16
+ var pos = positionGeometry.normalize().toVar( );
15
17
 
16
18
  var dir = spherical( params.phi, params.theta ).toVar();
17
19