tsl-textures 1.6.0 → 1.8.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/rough-clay.js +58 -0
- package/src/runny-eggs.js +96 -0
- package/src/tsl-utils.js +14 -2
package/package.json
CHANGED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
|
|
2
|
+
// TSL-Textures: Rough clay
|
|
3
|
+
|
|
4
|
+
|
|
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';
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
var surfacePos = Fn( ([ pos, normal, bump, curvature ]) => {
|
|
12
|
+
|
|
13
|
+
var k1 = mx_worley_noise_float( pos.add( noise( pos ).mul( curvature ) ) ).add( 0.8 ).pow( 5 ).toVar();
|
|
14
|
+
k1.addAssign( k1.pow( 0.5 ) );
|
|
15
|
+
//k1.addAssign( noise(pos.mul(noiseScale.add(8))).add(1).pow(2).mul(noiseBump) );
|
|
16
|
+
return pos.add( normal.mul( k1 ).mul( bump ) );
|
|
17
|
+
|
|
18
|
+
} );
|
|
19
|
+
|
|
20
|
+
var roughClay = Fn( ( params ) => {
|
|
21
|
+
|
|
22
|
+
var eps = 0.001;
|
|
23
|
+
|
|
24
|
+
var bump = params.bump.div( 50 ).toVar();
|
|
25
|
+
|
|
26
|
+
var position = positionLocal.mul( exp( params.scale.div( 2 ) ) ).add( params.seed.sin().mul( 10 ) ).toVar( ),
|
|
27
|
+
normal = normalLocal.normalize().toVar(),
|
|
28
|
+
tangent = tangentLocal.normalize().mul( eps ).toVar(),
|
|
29
|
+
bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
|
|
30
|
+
|
|
31
|
+
var pos = surfacePos( position, normal, bump, params.curvature );
|
|
32
|
+
var posU = surfacePos( position.add( tangent ), normal, bump, params.curvature );
|
|
33
|
+
var posV = surfacePos( position.add( bitangent ), normal, bump, params.curvature );
|
|
34
|
+
|
|
35
|
+
var dU = sub( posU, pos ),
|
|
36
|
+
dV = sub( posV, pos );
|
|
37
|
+
|
|
38
|
+
return transformNormalToView( cross( dU, dV ).normalize() );
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
} );
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
roughClay.defaults = {
|
|
46
|
+
$name: 'Rough clay',
|
|
47
|
+
$normalNode: true,
|
|
48
|
+
|
|
49
|
+
scale: 2,
|
|
50
|
+
bump: 0.5,
|
|
51
|
+
curvature: 0.2,
|
|
52
|
+
|
|
53
|
+
seed: 0,
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
export { roughClay };
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
|
|
2
|
+
// TSL-Textures: Runny eggs
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
import { Color } from 'three';
|
|
7
|
+
import { cross, exp, Fn, mix, mx_worley_noise_float, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView } from 'three/tsl';
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
var runnyEggs = Fn( ( params ) => {
|
|
12
|
+
|
|
13
|
+
var pos = positionGeometry.mul( exp( params.scale.div( 1 ) ) ).add( params.seed.sin().mul( 10 ) ).toVar( );
|
|
14
|
+
|
|
15
|
+
var sizeYolk = params.sizeYolk.oneMinus();
|
|
16
|
+
var sizeWhite = params.sizeWhite.oneMinus();
|
|
17
|
+
|
|
18
|
+
var n = mx_worley_noise_float( pos ).toVar();
|
|
19
|
+
var whites = n.add( sizeWhite ).pow( 8 ).oneMinus().clamp( -0.5, 1 );
|
|
20
|
+
var yolks = n.add( sizeYolk ).pow( 18 ).oneMinus().clamp( 0, 1 ).pow( 0.4 ).clamp( 0, 1 );
|
|
21
|
+
|
|
22
|
+
return mix( params.colorBackground, mix( params.colorWhite, params.colorYolk, yolks ), whites );
|
|
23
|
+
|
|
24
|
+
} );
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
var surfacePos = Fn( ([ pos, normal, bump, sizeYolk, sizeWhite ]) => {
|
|
28
|
+
|
|
29
|
+
var n = mx_worley_noise_float( pos ).toVar();
|
|
30
|
+
var whites = n.add( sizeWhite ).pow( 8 ).oneMinus();
|
|
31
|
+
var yolks = n.add( sizeYolk ).pow( 18 ).oneMinus().clamp( 0, 1 );
|
|
32
|
+
|
|
33
|
+
var k = mix( 0, mix( 0, 1, yolks ), whites );
|
|
34
|
+
|
|
35
|
+
return pos.add( normal.mul( k ).mul( bump ) );
|
|
36
|
+
|
|
37
|
+
} );
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
runnyEggs.normal = Fn( ( params ) => {
|
|
41
|
+
|
|
42
|
+
var eps = 0.001;
|
|
43
|
+
var bump = 0.05;
|
|
44
|
+
|
|
45
|
+
var position = positionGeometry.mul( exp( params.scale.div( 1 ) ) ).add( params.seed.sin().mul( 10 ) ).toVar( ),
|
|
46
|
+
normal = normalLocal.normalize().toVar(),
|
|
47
|
+
tangent = tangentLocal.normalize().mul( eps ).toVar(),
|
|
48
|
+
bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
|
|
49
|
+
|
|
50
|
+
var sizeYolk = params.sizeYolk.oneMinus();
|
|
51
|
+
var sizeWhite = params.sizeWhite.oneMinus();
|
|
52
|
+
|
|
53
|
+
var pos = surfacePos( position, normal, bump, sizeYolk, sizeWhite );
|
|
54
|
+
var posU = surfacePos( position.add( tangent ), normal, bump, sizeYolk, sizeWhite );
|
|
55
|
+
var posV = surfacePos( position.add( bitangent ), normal, bump, sizeYolk, sizeWhite );
|
|
56
|
+
|
|
57
|
+
var dU = sub( posU, pos ),
|
|
58
|
+
dV = sub( posV, pos );
|
|
59
|
+
|
|
60
|
+
return transformNormalToView( cross( dU, dV ).normalize() );
|
|
61
|
+
|
|
62
|
+
} );
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
runnyEggs.roughness = Fn( ( params ) => {
|
|
66
|
+
|
|
67
|
+
var pos = positionGeometry.mul( exp( params.scale.div( 1 ) ) ).add( params.seed.sin().mul( 10 ) ).toVar( );
|
|
68
|
+
|
|
69
|
+
var sizeYolk = params.sizeYolk.oneMinus();
|
|
70
|
+
|
|
71
|
+
var n = mx_worley_noise_float( pos ).toVar();
|
|
72
|
+
var yolks = n.add( sizeYolk ).pow( 18 ).clamp( 0, 1 );
|
|
73
|
+
|
|
74
|
+
return yolks;
|
|
75
|
+
|
|
76
|
+
} );
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
runnyEggs.defaults = {
|
|
80
|
+
$name: 'Runny eggs',
|
|
81
|
+
|
|
82
|
+
scale: 1,
|
|
83
|
+
|
|
84
|
+
sizeYolk: 0.2,
|
|
85
|
+
sizeWhite: 0.7,
|
|
86
|
+
|
|
87
|
+
colorYolk: new Color( 'orange' ),
|
|
88
|
+
colorWhite: new Color( 'white' ),
|
|
89
|
+
colorBackground: new Color( 'lightgray' ),
|
|
90
|
+
|
|
91
|
+
seed: 0,
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
export { runnyEggs };
|
package/src/tsl-utils.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
import { add, cos, cross, float, Fn, If, log2, mat4, max, min, mul, positionLocal, pow, remap, select, sin, smoothstep, sub, uniform, vec3, vec4 } from 'three/tsl';
|
|
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
12
|
import { 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
|
|
|
@@ -363,6 +363,17 @@ const overlayPlanar = Fn( ( params )=>{
|
|
|
363
363
|
|
|
364
364
|
|
|
365
365
|
|
|
366
|
+
const normalVector = Fn( ([ pos ])=>{
|
|
367
|
+
|
|
368
|
+
var dU = dFdx( pos ),
|
|
369
|
+
dV = dFdy( pos );
|
|
370
|
+
|
|
371
|
+
return transformNormalToView( cross( dU, dV ).normalize() );
|
|
372
|
+
|
|
373
|
+
} );
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
|
|
366
377
|
export
|
|
367
378
|
{
|
|
368
379
|
mx_noise_float as noise
|
|
@@ -384,5 +395,6 @@ export
|
|
|
384
395
|
matTrans,
|
|
385
396
|
matScale,
|
|
386
397
|
selectPlanar,
|
|
387
|
-
overlayPlanar
|
|
398
|
+
overlayPlanar,
|
|
399
|
+
normalVector
|
|
388
400
|
};
|