tsl-textures 0.2.0 → 0.3.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 +1 -1
- package/src/camouflage.js +1 -1
- package/src/cave-art.js +54 -0
- package/src/entangled.js +49 -0
- package/src/fordite.js +2 -2
- package/src/isolines.js +1 -1
- package/src/marble.js +1 -1
- package/src/stars.js +44 -0
- package/src/tsl-utils.js +70 -3
- package/src/zebra-lines.js +48 -0
package/package.json
CHANGED
package/src/camouflage.js
CHANGED
package/src/cave-art.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
|
|
2
|
+
// TSL-Textures: Cave Art
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
import { Color } from "three";
|
|
7
|
+
import { abs, add, exp, float, If, mix, or, positionLocal, pow2, sub, tslFn } from 'three/nodes';
|
|
8
|
+
import { noise } from 'tsl-textures/tsl-utils.js';
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
var caveArt = tslFn( ( params ) => {
|
|
12
|
+
|
|
13
|
+
var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed ).toVar( );
|
|
14
|
+
|
|
15
|
+
var k1 = noise( pos ).mul( 4 ).sin().toVar();
|
|
16
|
+
var k2 = noise( pos.mul( 1.5 ) ).mul( 4 ).cos().toVar();
|
|
17
|
+
|
|
18
|
+
var thinness = exp( sub( float( 3 ), params.thinness ) );
|
|
19
|
+
var k = sub( thinness, pow2( abs( add( k1, k2 ) ) ).mul( 20 ) ).toVar();
|
|
20
|
+
|
|
21
|
+
If( or( k1.greaterThan( k2 ), k.lessThan( 0 ) ), ()=>{
|
|
22
|
+
|
|
23
|
+
k.assign( 0 );
|
|
24
|
+
|
|
25
|
+
} );
|
|
26
|
+
|
|
27
|
+
If( k.lessThanEqual( 0 ), ()=>{
|
|
28
|
+
|
|
29
|
+
k.assign( params.noise.mul( pow2( noise( pos.mul( 30 ) ) ) ) );
|
|
30
|
+
|
|
31
|
+
} );
|
|
32
|
+
|
|
33
|
+
return mix( params.background, params.color, k );
|
|
34
|
+
|
|
35
|
+
} );
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
caveArt.defaults = {
|
|
40
|
+
$name: 'Cave art',
|
|
41
|
+
|
|
42
|
+
scale: 2,
|
|
43
|
+
thinness: 2,
|
|
44
|
+
noise: 0.3,
|
|
45
|
+
|
|
46
|
+
color: new Color( 0xD34545 ),
|
|
47
|
+
background: new Color( 0xFFF8F0 ),
|
|
48
|
+
|
|
49
|
+
seed: 0,
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
export { caveArt };
|
package/src/entangled.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
|
|
2
|
+
// TSL-Textures: Entangled
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
import { Color } from "three";
|
|
7
|
+
import { abs, exp, float, floor, loop, max, mix, mul, oneMinus, positionLocal, pow, sin, tslFn } from 'three/nodes';
|
|
8
|
+
import { noise } from 'tsl-textures/tsl-utils.js';
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var entangled = tslFn( ( params ) => {
|
|
13
|
+
|
|
14
|
+
var scale = exp( params.scale.div( 2 ) ).toVar( );
|
|
15
|
+
var pos = positionLocal.add( params.seed ).toVar( );
|
|
16
|
+
var k = float( -10000 ).toVar( );
|
|
17
|
+
var k1 = float( 0 ).toVar( );
|
|
18
|
+
|
|
19
|
+
loop( floor( float( params.density ) ), ()=> {
|
|
20
|
+
|
|
21
|
+
k1.assign( sin( noise( mul( pos, scale ) ).mul( 3*Math.PI ) ) );
|
|
22
|
+
k.assign( max( k, k1 ) );
|
|
23
|
+
scale.mulAssign( 1.2 );
|
|
24
|
+
|
|
25
|
+
} );
|
|
26
|
+
|
|
27
|
+
k.assign( oneMinus( pow( abs( k ), 5 ) ).mul( 6 ) );
|
|
28
|
+
|
|
29
|
+
return mix( params.color, params.background, k );
|
|
30
|
+
|
|
31
|
+
} );
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
entangled.defaults = {
|
|
36
|
+
$name: 'Entangled',
|
|
37
|
+
|
|
38
|
+
scale: 2,
|
|
39
|
+
density: 10,
|
|
40
|
+
|
|
41
|
+
color: new Color( 0x002040 ),
|
|
42
|
+
background: new Color( 0xFFFFFF ),
|
|
43
|
+
|
|
44
|
+
seed: 0,
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
export { entangled };
|
package/src/fordite.js
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
import { Color } from 'three';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { exp, mul, positionLocal, sin, tslFn, vec3 } from 'three/nodes';
|
|
8
|
+
import { hsl, noise } from 'tsl-textures/tsl-utils.js';
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
package/src/isolines.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
import { Color } from "three";
|
|
7
|
-
import {
|
|
7
|
+
import { add, exp, mix, oneMinus, positionLocal, sin, smoothstep, sub, tslFn } from 'three/nodes';
|
|
8
8
|
import { noise } from 'tsl-textures/tsl-utils.js';
|
|
9
9
|
|
|
10
10
|
|
package/src/marble.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
import { Color } from "three";
|
|
7
|
-
import {
|
|
7
|
+
import { add, div, exp, If, mix, mul, oneMinus, positionLocal, pow, tslFn } from 'three/nodes';
|
|
8
8
|
import { noise } from 'tsl-textures/tsl-utils.js';
|
|
9
9
|
|
|
10
10
|
|
package/src/stars.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
|
|
2
|
+
// TSL-Textures: Stars
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
import { Color } from "three";
|
|
7
|
+
import { abs, add, cond, exp, mix, positionLocal, tslFn } from 'three/nodes';
|
|
8
|
+
import { hsl, noise, toHsl } from 'tsl-textures/tsl-utils.js';
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var stars = tslFn( ( params ) => {
|
|
13
|
+
|
|
14
|
+
var pos = positionLocal.mul( exp( params.scale.div( 2 ).add( 3 ) ) ).add( params.seed ).toVar( );
|
|
15
|
+
|
|
16
|
+
var k = abs( noise( pos ) ).pow( 10 ).mul( 10 );
|
|
17
|
+
|
|
18
|
+
k = k.mul( exp( params.density.sub( 2 ) ) );
|
|
19
|
+
|
|
20
|
+
var dS = cond( k.greaterThan( 0.1 ), params.variation.mul( noise( pos ) ), 0 );
|
|
21
|
+
|
|
22
|
+
var col = toHsl( mix( params.background, params.color, k ) );
|
|
23
|
+
|
|
24
|
+
return hsl( add( col.x, dS ), col.y, col.z );
|
|
25
|
+
|
|
26
|
+
} );
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
stars.defaults = {
|
|
31
|
+
$name: 'Stars',
|
|
32
|
+
|
|
33
|
+
scale: 2,
|
|
34
|
+
density: 2,
|
|
35
|
+
variation: 0,
|
|
36
|
+
|
|
37
|
+
color: new Color( 0xfff5f0 ),
|
|
38
|
+
background: new Color( 0x000060 ),
|
|
39
|
+
|
|
40
|
+
seed: 0,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
export { stars };
|
package/src/tsl-utils.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { MathUtils } from 'three';
|
|
6
|
-
import {
|
|
6
|
+
import { add, cond, cos, float, If, max, min, sin, sub, tslFn, uniform, vec3 } from 'three/nodes';
|
|
7
7
|
import { mx_perlin_noise_float as noise } from 'three/addons/nodes/materialx/lib/mx_noise.js';
|
|
8
8
|
|
|
9
9
|
|
|
@@ -53,7 +53,7 @@ hslHelper.setLayout( {
|
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
// convert from hsl to rgb
|
|
57
57
|
const hsl = tslFn( ([ h, s, l ]) => {
|
|
58
58
|
|
|
59
59
|
h = h.fract().add( 1 ).fract();
|
|
@@ -79,6 +79,50 @@ hsl.setLayout( {
|
|
|
79
79
|
} );
|
|
80
80
|
|
|
81
81
|
|
|
82
|
+
// convert from rgb to hsl
|
|
83
|
+
const toHsl = tslFn( ([ rgb ]) => {
|
|
84
|
+
|
|
85
|
+
var R = float( rgb.x ).toVar(),
|
|
86
|
+
G = float( rgb.y ).toVar(),
|
|
87
|
+
B = float( rgb.z ).toVar();
|
|
88
|
+
|
|
89
|
+
var mx = max( R, max( G, B ) ).toVar();
|
|
90
|
+
var mn = min( R, min( G, B ) ).toVar();
|
|
91
|
+
|
|
92
|
+
var H = float( 0 ).toVar(),
|
|
93
|
+
S = float( 0 ).toVar(),
|
|
94
|
+
L = add( mx, mn ).div( 2 );
|
|
95
|
+
|
|
96
|
+
If( mn.notEqual( mx ), ()=>{
|
|
97
|
+
|
|
98
|
+
const delta = sub( mx, mn ).toVar();
|
|
99
|
+
|
|
100
|
+
S.assign( cond( L.lessThanEqual( 0.5 ), delta.div( add( mn, mx ) ), delta.div( sub( 2, add( mn, mx ) ) ) ) );
|
|
101
|
+
If( mx.equal( R ), ()=>{
|
|
102
|
+
|
|
103
|
+
H.assign( sub( G, B ).div( delta ).add( cond( G.lessThanEqual( B ), 6, 0 ) ) );
|
|
104
|
+
|
|
105
|
+
} )
|
|
106
|
+
.elseif( mx.equal( G ), ()=>{
|
|
107
|
+
|
|
108
|
+
H.assign( sub( B, R ).div( delta ).add( 2 ) );
|
|
109
|
+
|
|
110
|
+
} )
|
|
111
|
+
.else( ()=>{
|
|
112
|
+
|
|
113
|
+
H.assign( sub( R, G ).div( delta ).add( 4 ) );
|
|
114
|
+
|
|
115
|
+
} );
|
|
116
|
+
H.divAssign( 6 );
|
|
117
|
+
|
|
118
|
+
} );
|
|
119
|
+
return vec3( H, S, L );
|
|
120
|
+
|
|
121
|
+
} );
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
82
126
|
|
|
83
127
|
// make all elements dynamic (i.e. uniform)
|
|
84
128
|
function dynamic( params ) {
|
|
@@ -98,11 +142,34 @@ function dynamic( params ) {
|
|
|
98
142
|
|
|
99
143
|
|
|
100
144
|
|
|
145
|
+
// convert phi-theta angles to position on unit sphere
|
|
146
|
+
const spherical = tslFn( ([ phi, theta ]) => {
|
|
147
|
+
|
|
148
|
+
return vec3(
|
|
149
|
+
sin( theta ).mul( sin( phi ) ),
|
|
150
|
+
cos( phi ),
|
|
151
|
+
cos( theta ).mul( sin( phi ) )
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
} );
|
|
155
|
+
|
|
156
|
+
spherical.setLayout( {
|
|
157
|
+
name: 'spherical',
|
|
158
|
+
type: 'vec3',
|
|
159
|
+
inputs: [
|
|
160
|
+
{ name: 'phi', type: 'float' },
|
|
161
|
+
{ name: 'theta', type: 'float' },
|
|
162
|
+
]
|
|
163
|
+
} );
|
|
164
|
+
|
|
165
|
+
|
|
101
166
|
export
|
|
102
167
|
{
|
|
103
168
|
map,
|
|
104
169
|
mapExp,
|
|
105
170
|
noise,
|
|
106
171
|
hsl,
|
|
107
|
-
|
|
172
|
+
toHsl,
|
|
173
|
+
dynamic,
|
|
174
|
+
spherical
|
|
108
175
|
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
|
|
2
|
+
// TSL-Textures: Zebra Lines
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
import { Color } from "three";
|
|
7
|
+
import { acos, clamp, exp, mix, positionLocal, sin, tslFn } from 'three/nodes';
|
|
8
|
+
import { spherical } from 'tsl-textures/tsl-utils.js';
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var zebraLines = tslFn( ( params ) => {
|
|
13
|
+
|
|
14
|
+
var pos = positionLocal.normalize().toVar( );
|
|
15
|
+
|
|
16
|
+
var dir = spherical( params.phi, params.theta ).toVar();
|
|
17
|
+
|
|
18
|
+
var angle = acos( clamp( dir.dot( pos ), -1, 1 ) );
|
|
19
|
+
|
|
20
|
+
var scale = exp( params.scale.add( 1 ) ).toVar();
|
|
21
|
+
|
|
22
|
+
var k = sin( angle.mul( scale ) ).sub( params.thinness.sub( 0.5 ).mul( 2 ) );
|
|
23
|
+
|
|
24
|
+
k = clamp( k.mul( 1000 ).div( scale ), -1, 1 ).mul( 0.5 ).add( 0.5 );
|
|
25
|
+
|
|
26
|
+
return mix( params.background, params.color, k );
|
|
27
|
+
|
|
28
|
+
} );
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
zebraLines.defaults = {
|
|
33
|
+
$name: 'Zebra lines',
|
|
34
|
+
|
|
35
|
+
scale: 2,
|
|
36
|
+
thinness: 0.5,
|
|
37
|
+
phi: 0,
|
|
38
|
+
theta: 0,
|
|
39
|
+
|
|
40
|
+
color: new Color( 0x0 ),
|
|
41
|
+
background: new Color( 0xFFFFFF ),
|
|
42
|
+
|
|
43
|
+
// no seed for zebra lines
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
export { zebraLines };
|