tsl-textures 1.9.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tsl-textures",
3
- "version": "1.9.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
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from 'three';
7
7
  import { exp, Fn, If, positionGeometry, round, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
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
+ params = prepare( { ...camouflage.defaults, ...params } );
15
+
14
16
  var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
17
 
16
18
  var color = vec3( 0, 0, 0 ).toVar( );
package/src/cave-art.js CHANGED
@@ -5,11 +5,13 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { abs, add, exp, float, Fn, If, mix, or, positionGeometry, pow2, sub } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
  var caveArt = Fn( ( params ) => {
12
12
 
13
+ params = prepare( { ...caveArt.defaults, ...params } );
14
+
13
15
  var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
14
16
 
15
17
  var k1 = noise( pos, 4 ).sin().toVar();
package/src/circles.js CHANGED
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { acos, clamp, exp, float, Fn, positionGeometry, select, sin } from 'three/tsl';
8
- import { hsl, toHsl } from 'tsl-textures/tsl-utils.js';
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
+ params = prepare( { ...circles.defaults, ...params } );
15
+
14
16
  var pos = positionGeometry.normalize().toVar( );
15
17
 
16
18
  var angle = acos( clamp( pos.y, -1, 1 ) ).mul( 20 );
@@ -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
@@ -5,7 +5,7 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { clamp, exp, Fn, min, mix, mul, positionGeometry, vec4 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -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
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { abs, cos, cross, exp, Fn, normalLocal, positionGeometry, pow, remap, sin, sub, tangentLocal, transformNormalToView, vec3 } from 'three/tsl';
7
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
8
8
 
9
9
 
10
10
 
@@ -20,6 +20,8 @@ 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
27
  var position = positionGeometry.mul( exp( params.scale.div( 2 ).add( 2 ) ) ).toVar( ),
package/src/cork.js CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  import { Color } from 'three';
7
7
  import { exp, float, Fn, If, Loop, mix, positionGeometry, vec3 } from 'three/tsl';
8
- import { noise, vnoise } from 'tsl-textures/tsl-utils.js';
8
+ import { noise, prepare, vnoise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -18,6 +18,8 @@ var cellCenter = Fn( ([ cell ])=>{
18
18
 
19
19
  var cork = Fn( ( params )=>{
20
20
 
21
+ params = prepare( { ...cork.defaults, ...params } );
22
+
21
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();
@@ -5,11 +5,13 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { exp, float, Fn, Loop, mix, positionGeometry } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
  var dalmatianSpots = Fn( ( params )=>{
12
12
 
13
+ params = prepare( { ...dalmatianSpots.defaults, ...params } );
14
+
13
15
  var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).sub( 1000 ).toVar( );
14
16
 
15
17
  var k = float( 1 ).toVar();
@@ -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 };
@@ -5,6 +5,7 @@
5
5
 
6
6
  import { Color } from 'three';
7
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,6 +62,8 @@ var noiseg = Fn( ([ pos ])=>{
61
62
 
62
63
  var dysonSphere = Fn( ( params )=>{
63
64
 
65
+ params = prepare( { ...dysonSphere.defaults, ...params } );
66
+
64
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();
package/src/entangled.js CHANGED
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { abs, exp, float, floor, Fn, Loop, max, mix, mul, oneMinus, positionGeometry, pow, sin } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
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
17
  var pos = positionGeometry.add( params.seed ).toVar( );
16
18
  var k = float( -10000 ).toVar( );
package/src/fordite.js CHANGED
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from 'three';
7
7
  import { exp, Fn, mul, positionGeometry, sin, vec3 } from 'three/tsl';
8
- import { hsl, noise } from 'tsl-textures/tsl-utils.js';
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
+ params = prepare( { ...fordite.defaults, ...params } );
15
+
14
16
  var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
17
 
16
18
  var k = noise(
package/src/gas-giant.js CHANGED
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { exp, Fn, mix, positionGeometry, vec3 } from 'three/tsl';
8
- import { hsl, noise, toHsl } from 'tsl-textures/tsl-utils.js';
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
17
  var pos = positionGeometry.mul( exp( scale ) ).add( params.seed ).toVar( );
16
18
 
package/src/grid.js CHANGED
@@ -5,11 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
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
 
14
+ params = prepare( { ...grid.defaults, ...params } );
15
+
13
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();
package/src/isolines.js CHANGED
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { add, exp, Fn, mix, oneMinus, positionGeometry, sin, smoothstep, sub } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
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
+ params = prepare( { ...isolines.defaults, ...params } );
15
+
14
16
  var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
17
 
16
18
  var k = noise( pos ).mul( params.density );
package/src/karst-rock.js CHANGED
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { exp, Fn, mix, positionGeometry } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
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
+ params = prepare( { ...karstRock.defaults, ...params } );
15
+
14
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();
package/src/marble.js CHANGED
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { add, div, exp, Fn, If, mix, mul, oneMinus, positionGeometry, pow } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
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
+ params = prepare( { ...marble.defaults, ...params } );
15
+
14
16
  var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
17
 
16
18
  var k = add(
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { abs, exp, Fn, oneMinus, positionGeometry, select, sqrt, vec3 } from 'three/tsl';
8
- import { hsl, noise, toHsl } from 'tsl-textures/tsl-utils.js';
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
+ params = prepare( { ...neonLights.defaults, ...params } );
15
+
14
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();
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { exp, Fn, Loop, mix, positionGeometry, vec3 } from 'three/tsl';
8
- import { applyEuler, noise } from 'tsl-textures/tsl-utils.js';
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
17
  var pos = positionGeometry.toVar( );
16
18
 
package/src/planet.js CHANGED
@@ -5,13 +5,15 @@
5
5
 
6
6
  import { Color } from 'three';
7
7
  import { exp, float, Fn, If, Loop, mix, mul, positionGeometry, remap, smoothstep, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
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(),
package/src/polka-dots.js CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { acos, add, distance, exp, float, Fn, Loop, max, min, mix, mod, mul, oneMinus, positionGeometry, pow, smoothstep, } from 'three/tsl';
8
- import { spherical } from 'tsl-textures/tsl-utils.js';
8
+ import { prepare, spherical } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -15,6 +15,8 @@ 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
21
  var vec = positionGeometry.normalize().toVar();
20
22
 
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { add, cos, exp, Fn, mix, positionGeometry, radians, sin, sub, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
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
18
  sub( positionGeometry.x.mul( cos( angle ) ), positionGeometry.y.mul( sin( angle ) ) ),
package/src/protozoa.js CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { exp, float, Fn, Loop, matcapUV, mix, positionGeometry, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -19,6 +19,8 @@ var pnoise = Fn( ([ pos, fat ])=>{
19
19
 
20
20
  var protozoa = Fn( ( params )=>{
21
21
 
22
+ params = prepare( { ...protozoa.defaults, ...params } );
23
+
22
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();
package/src/rotator.js CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  import { Vector2, Vector3 } from "three";
7
7
  import { cross, Fn, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView, vec4 } from 'three/tsl';
8
- import { matRotYXZ, matTrans, selectPlanar } from 'tsl-textures/tsl-utils.js';
8
+ import { matRotYXZ, matTrans, prepare, selectPlanar } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -25,6 +25,8 @@ var surfacePos = Fn( ([ pos, params ])=>{
25
25
 
26
26
  var rotator = Fn( ( params )=>{
27
27
 
28
+ params = prepare( { ...rotator.defaults, ...params } );
29
+
28
30
  return surfacePos( positionGeometry, params );
29
31
 
30
32
  } );
@@ -33,6 +35,8 @@ 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
42
  var position = positionGeometry,
package/src/rough-clay.js CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { cross, exp, Fn, mx_worley_noise_float, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView } from 'three/tsl';
7
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
8
8
 
9
9
 
10
10
 
@@ -19,6 +19,8 @@ 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();
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
@@ -5,7 +5,7 @@
5
5
 
6
6
  import { Color } from 'three';
7
7
  import { exp, Fn, Loop, mix, positionGeometry } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -35,6 +35,8 @@ 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
42
  var pos = positionGeometry.mul( exp( params.scale.add( params.noiseScale.mul( 3 ), 2 ) ) );
@@ -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
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { abs, exp, Fn, mix, positionGeometry, pow, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
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
+ params = prepare( { ...satin.defaults, ...params } );
15
+
14
16
  var pos = positionGeometry.toVar( );
15
17
 
16
18
  var scale = exp( params.scale.div( 3 ) ).toVar();
package/src/scaler.js CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  import { Vector2, Vector3 } from "three";
7
7
  import { cross, Fn, mix, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView, vec3, vec4 } from 'three/tsl';
8
- import { matScale, matTrans, selectPlanar } from 'tsl-textures/tsl-utils.js';
8
+ import { matScale, matTrans, prepare, selectPlanar } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -25,6 +25,8 @@ var surfacePos = Fn( ([ pos, params ])=>{
25
25
 
26
26
  var scaler = Fn( ( params )=>{
27
27
 
28
+ params = prepare( { ...scaler.defaults, ...params } );
29
+
28
30
  return surfacePos( positionGeometry, params );
29
31
 
30
32
  } );
@@ -33,6 +35,8 @@ 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
42
  var position = positionGeometry,
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { abs, add, cos, floor, Fn, max, mix, mod, mul, positionGeometry, remapClamp, sign, tan, vec3 } from 'three/tsl';
8
- import { hsl, noise, remapExp, toHsl } from 'tsl-textures/tsl-utils.js';
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
+ params = prepare( { ...scepterHead.defaults, ...params } );
15
+
14
16
  var pos = positionGeometry;
15
17
 
16
18
  var fx = pos.x.mul( remapExp( params.xFactor, 0, 100, 1.35, 30 ) ).toVar( ),
package/src/scream.js CHANGED
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { add, cos, exp, Fn, mix, positionGeometry, sin } from 'three/tsl';
8
- import { hsl, noise, toHsl } from 'tsl-textures/tsl-utils.js';
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
+ params = prepare( { ...scream.defaults, ...params } );
15
+
14
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 ) ) );
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { clamp, exp, Fn, mix, positionGeometry } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
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
+ params = prepare( { ...simplexNoise.defaults, ...params } );
15
+
14
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 ) );
package/src/stars.js CHANGED
@@ -5,12 +5,15 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { abs, add, exp, Fn, mix, positionGeometry, select } from 'three/tsl';
8
- import { hsl, noise, toHsl } from 'tsl-textures/tsl-utils.js';
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
 
15
+ params = prepare( { ...stars.defaults, ...params } );
16
+
14
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 );
@@ -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
 
@@ -4,6 +4,7 @@
4
4
 
5
5
 
6
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,6 +26,8 @@ var surfacePos = Fn( ([ pos, params ])=>{
25
26
 
26
27
  var supersphere = Fn( ( params )=>{
27
28
 
29
+ params = prepare( { ...supersphere.defaults, ...params } );
30
+
28
31
  return surfacePos( positionGeometry, params );
29
32
 
30
33
  } );
@@ -33,6 +36,8 @@ 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
43
  var position = positionGeometry,
package/src/tiger-fur.js CHANGED
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { exp, Fn, mix, positionGeometry, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
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
17
  var pos = positionGeometry.mul( exp( scale ) ).add( params.seed ).toVar( );
16
18
 
package/src/translator.js CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  import { Vector2, Vector3 } from "three";
7
7
  import { cross, Fn, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView, vec4 } from 'three/tsl';
8
- import { matTrans, selectPlanar } from 'tsl-textures/tsl-utils.js';
8
+ import { matTrans, prepare, selectPlanar } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -23,6 +23,8 @@ var surfacePos = Fn( ([ pos, params ])=>{
23
23
 
24
24
  var translator = Fn( ( params )=>{
25
25
 
26
+ params = prepare( { ...translator.defaults, ...params } );
27
+
26
28
  return surfacePos( positionGeometry, params );
27
29
 
28
30
  } );
@@ -31,6 +33,8 @@ 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
40
  var position = positionGeometry,
package/src/tsl-utils.js CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
 
11
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 { Vector3 } from 'three';
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
 
@@ -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
  };
@@ -5,7 +5,7 @@
5
5
 
6
6
  import { Color } from 'three';
7
7
  import { exp, float, Fn, If, Loop, mix, positionGeometry, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
8
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
@@ -18,6 +18,8 @@ var cellCenter = Fn( ([ cell ])=>{
18
18
 
19
19
  var voronoiCells = Fn( ( params )=>{
20
20
 
21
+ params = prepare( { ...voronoiCells.defaults, ...params } );
22
+
21
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();
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { cos, cross, exp, Fn, normalLocal, positionGeometry, remap, sin, sub, tangentLocal, transformNormalToView, vec3 } from 'three/tsl';
7
- import { noise } from 'tsl-textures/tsl-utils.js';
7
+ import { noise, prepare } from 'tsl-textures/tsl-utils.js';
8
8
 
9
9
 
10
10
 
@@ -20,6 +20,8 @@ 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
27
  var position = positionGeometry.mul( exp( params.scale.div( 1 ).add( 1 ) ) ).toVar( ),
package/src/watermelon.js CHANGED
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from 'three';
7
7
  import { equirectUV, exp, Fn, mix, positionGeometry, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
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
+ params = prepare( { ...watermelon.defaults, ...params } );
15
+
14
16
  var pos = positionGeometry.mul( exp( params.scale.div( 4 ).add( 2 ) ) ).add( params.seed ).toVar( );
15
17
 
16
18
  var uv = equirectUV( positionGeometry.normalize() ).toVar(),
package/src/wood.js CHANGED
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from 'three';
7
7
  import { add, cos, exp, float, Fn, Loop, mix, mul, positionGeometry, radians, reciprocal, sin, sub, vec3 } from 'three/tsl';
8
- import { noise } from 'tsl-textures/tsl-utils.js';
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
18
  sub( positionGeometry.x.mul( cos( angle ) ), positionGeometry.y.mul( sin( angle ) ) ),
@@ -5,12 +5,14 @@
5
5
 
6
6
  import { Color } from "three";
7
7
  import { acos, clamp, exp, Fn, mix, positionGeometry, sin } from 'three/tsl';
8
- import { spherical } from 'tsl-textures/tsl-utils.js';
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
+ params = prepare( { ...zebraLines.defaults, ...params } );
15
+
14
16
  var pos = positionGeometry.normalize().toVar( );
15
17
 
16
18
  var dir = spherical( params.phi, params.theta ).toVar();