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 +27 -1
- package/package.json +1 -1
- package/src/camouflage.js +5 -3
- package/src/cave-art.js +5 -3
- package/src/circles.js +8 -6
- package/src/clouds.js +7 -3
- package/src/concrete.js +5 -3
- package/src/cork.js +5 -3
- package/src/dalmatian-spots.js +5 -3
- package/src/darth-maul.js +58 -0
- package/src/dyson-sphere.js +5 -2
- package/src/entangled.js +5 -3
- package/src/fordite.js +5 -3
- package/src/gas-giant.js +5 -3
- package/src/grid.js +5 -2
- package/src/isolines.js +5 -3
- package/src/karst-rock.js +5 -3
- package/src/marble.js +5 -3
- package/src/neon-lights.js +5 -3
- package/src/photosphere.js +5 -3
- package/src/planet.js +5 -3
- package/src/polka-dots.js +5 -3
- package/src/processed-wood.js +7 -5
- package/src/protozoa.js +5 -3
- package/src/rotator.js +8 -4
- package/src/rough-clay.js +5 -3
- package/src/runny-eggs.js +7 -0
- package/src/rust.js +8 -4
- package/src/satin.js +5 -3
- package/src/scaler.js +8 -4
- package/src/scepter-head.js +5 -3
- package/src/scream.js +6 -4
- package/src/simplex-noise.js +5 -3
- package/src/stars.js +7 -4
- package/src/supersphere.js +8 -3
- package/src/tiger-fur.js +6 -4
- package/src/translator.js +8 -4
- package/src/tsl-utils.js +91 -4
- package/src/voronoi-cells.js +5 -3
- package/src/water-drops.js +5 -3
- package/src/watermelon.js +6 -4
- package/src/wood.js +7 -5
- package/src/zebra-lines.js +5 -3
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
package/src/camouflage.js
CHANGED
|
@@ -4,14 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
import { Color } from 'three';
|
|
7
|
-
import { exp, Fn, If,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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 =
|
|
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,
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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
|
|
package/src/dalmatian-spots.js
CHANGED
|
@@ -4,13 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
import { Color } from "three";
|
|
7
|
-
import { exp, float, Fn, Loop, mix,
|
|
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
|
-
|
|
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 };
|
package/src/dyson-sphere.js
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
import { Color } from 'three';
|
|
7
|
-
import { exp, float, Fn, Loop, mix,
|
|
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
|
-
|
|
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,
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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 ),
|
package/src/neon-lights.js
CHANGED
|
@@ -4,14 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
import { Color } from "three";
|
|
7
|
-
import { abs, exp, Fn, oneMinus,
|
|
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
|
-
|
|
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();
|
package/src/photosphere.js
CHANGED
|
@@ -4,15 +4,17 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
import { Color } from "three";
|
|
7
|
-
import { exp, Fn, Loop, mix,
|
|
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 =
|
|
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,
|
|
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(
|
|
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,
|
|
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 =
|
|
21
|
+
var vec = positionGeometry.normalize().toVar();
|
|
20
22
|
|
|
21
23
|
var besti = oneMinus( vec.y ).mul( cnt ).sub( 1 ).div( 2 );
|
|
22
24
|
|
package/src/processed-wood.js
CHANGED
|
@@ -4,18 +4,20 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
import { Color } from "three";
|
|
7
|
-
import { add, cos, exp, Fn, mix,
|
|
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(
|
|
17
|
-
add(
|
|
18
|
-
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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 =
|
|
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,
|
|
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 =
|
|
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,
|
|
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 =
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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 =
|
|
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/scepter-head.js
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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(
|
|
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
|
|
package/src/simplex-noise.js
CHANGED
|
@@ -4,14 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
import { Color } from "three";
|
|
7
|
-
import { clamp, exp, Fn, mix,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
|
package/src/supersphere.js
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
import { cross, float, Fn, normalLocal,
|
|
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
|
-
|
|
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 =
|
|
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,
|
|
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 =
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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 — 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
|
-
|
|
483
|
+
showFallbackWarning,
|
|
484
|
+
hideFallbackWarning,
|
|
485
|
+
normalVector,
|
|
486
|
+
prepare
|
|
400
487
|
};
|
package/src/voronoi-cells.js
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
import { Color } from 'three';
|
|
7
|
-
import { exp, float, Fn, If, Loop, mix,
|
|
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
|
-
|
|
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
|
|
package/src/water-drops.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
import { cos, cross, exp, Fn, normalLocal,
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
14
|
+
params = prepare( { ...watermelon.defaults, ...params } );
|
|
15
15
|
|
|
16
|
-
var
|
|
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,
|
|
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(
|
|
17
|
-
add(
|
|
18
|
-
|
|
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
|
|
package/src/zebra-lines.js
CHANGED
|
@@ -4,14 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
import { Color } from "three";
|
|
7
|
-
import { acos, clamp, exp, Fn, mix,
|
|
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
|
-
|
|
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
|
|