tsl-textures 1.7.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -40,6 +40,7 @@ Uses [protozoa.js](https://boytchev.github.io/tsl-textures/docs/protozoa.html)
40
40
  texture to create a dynamic blob with microorganisms floating innside. A space
41
41
  station is constructed arounnd the blob. The surface of the station is made of
42
42
  a Dyson sphere texture from [dyson-texture.js](https://boytchev.github.io/tsl-textures/docs/dyson-sphere.html).
43
+ Click on the image for a live demo.
43
44
 
44
45
  [<img src="https://boytchev.github.io/tsl-textures/examples/example-protozoa.jpg">](https://boytchev.github.io/tsl-textures/examples/example-protozoa.html)
45
46
 
@@ -50,6 +51,31 @@ Uses [rotator.js](https://boytchev.github.io/tsl-textures/docs/rotator.html)
50
51
  texture that applies soft matrices on model vertices. This allows to make
51
52
  gradual rotation that looks like stretching skin and flexing muscles. The
52
53
  animation does not use skinning or morphing, the model is not preprocessed
53
- in any way, and no additional vertex data is added.
54
+ in any way, and no additional vertex data is added. Click on the image
55
+ for a live demo.
54
56
 
55
57
  [<img src="https://boytchev.github.io/tsl-textures/examples/example-neck-massage.jpg">](https://boytchev.github.io/tsl-textures/examples/example-neck-massage.html)
58
+
59
+
60
+ #### Example "Watermelon supersphere"
61
+
62
+ Uses [supersphere.js](https://boytchev.github.io/tsl-textures/docs/supersphere.html)
63
+ texture to generate the shape of a [supersphere](https://mathworld.wolfram.com/Supersphere.html)
64
+ and [watermelon.js](https://boytchev.github.io/tsl-textures/docs/watermelon.html)
65
+ texture to color the surface in a watermelon pattern. Both the shape and the pattern
66
+ are continuously changing. Click on the image for a live demo.
67
+
68
+ [<img src="https://boytchev.github.io/tsl-textures/examples/example-watermelon-supersphere.jpg">](https://boytchev.github.io/tsl-textures/examples/example-watermelon-supersphere.html)
69
+
70
+
71
+ #### Example "Texture in motion"
72
+
73
+ Uses [dyson-sphere.js](https://boytchev.github.io/tsl-textures/docs/dyson-sphere.html),
74
+ [camouflage.js](https://boytchev.github.io/tsl-textures/docs/camouflage.html),
75
+ [dalmatian-spots.js](https://boytchev.github.io/tsl-textures/docs/dalmatian-spots.html) and
76
+ [planet.js](https://boytchev.github.io/tsl-textures/docs/planet.html) textures
77
+ and applies them on the elements of an animated GLTF model. Textures are blended
78
+ via a TSL function. Click on the image for a live demo. (Note: non-WebGPU browsers
79
+ might need 30+ seconds to start up.)
80
+
81
+ [<img src="https://boytchev.github.io/tsl-textures/examples/example-texture-in-motion.jpg">](https://boytchev.github.io/tsl-textures/examples/example-texture-in-motion.html)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tsl-textures",
3
- "version": "1.7.0",
3
+ "version": "1.9.0",
4
4
  "description": "A collection of Three.js Shading Language (TSL) textures ",
5
5
  "main": "index.js",
6
6
  "repository": {
package/src/camouflage.js CHANGED
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { exp, Fn, If, positionLocal, round, vec3 } from 'three/tsl';
7
+ import { exp, Fn, If, positionGeometry, round, vec3 } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var camouflage = Fn( ( params )=>{
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed ).toVar( );
14
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
15
 
16
16
  var color = vec3( 0, 0, 0 ).toVar( );
17
17
 
package/src/cave-art.js CHANGED
@@ -4,13 +4,13 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { abs, add, exp, float, Fn, If, mix, or, positionLocal, pow2, sub } from 'three/tsl';
7
+ import { abs, add, exp, float, Fn, If, mix, or, positionGeometry, pow2, sub } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
  var caveArt = Fn( ( params ) => {
12
12
 
13
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed ).toVar( );
13
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
14
14
 
15
15
  var k1 = noise( pos, 4 ).sin().toVar();
16
16
  var k2 = noise( pos.mul( 1.5 ), 4 ).cos().toVar();
package/src/circles.js CHANGED
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { acos, clamp, exp, float, Fn, positionLocal, select, sin } from 'three/tsl';
7
+ import { acos, clamp, exp, float, Fn, positionGeometry, select, sin } from 'three/tsl';
8
8
  import { hsl, toHsl } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var circles = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.normalize().toVar( );
14
+ var pos = positionGeometry.normalize().toVar( );
15
15
 
16
16
  var angle = acos( clamp( pos.y, -1, 1 ) ).mul( 20 );
17
17
 
package/src/clouds.js CHANGED
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { clamp, exp, Fn, min, mix, mul, positionLocal, vec4 } from 'three/tsl';
7
+ import { clamp, exp, Fn, min, mix, mul, positionGeometry, vec4 } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var _clouds = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.toVar(),
14
+ var pos = positionGeometry.toVar(),
15
15
  scale = exp( params.scale.div( 1.5 ).sub( 0.5 ) ).toVar(),
16
16
  density = params.density.remap( 0, 1, -0.15, 0.15 ).toVar();
17
17
 
package/src/concrete.js CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
 
5
5
 
6
- import { abs, cos, cross, exp, Fn, normalLocal, positionLocal, pow, remap, sin, sub, tangentLocal, transformNormalToView, vec3 } from 'three/tsl';
6
+ import { abs, cos, cross, exp, Fn, normalLocal, positionGeometry, pow, remap, sin, sub, tangentLocal, transformNormalToView, vec3 } from 'three/tsl';
7
7
  import { noise } from 'tsl-textures/tsl-utils.js';
8
8
 
9
9
 
@@ -22,7 +22,7 @@ var concrete = Fn( ( params ) => {
22
22
 
23
23
  var eps = 0.001;
24
24
 
25
- var position = positionLocal.mul( exp( params.scale.div( 2 ).add( 2 ) ) ).toVar( ),
25
+ var position = positionGeometry.mul( exp( params.scale.div( 2 ).add( 2 ) ) ).toVar( ),
26
26
  normal = normalLocal.normalize().toVar(),
27
27
  tangent = tangentLocal.normalize().mul( eps ).toVar(),
28
28
  bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
package/src/cork.js CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { exp, float, Fn, If, Loop, mix, positionLocal, vec3 } from 'three/tsl';
7
+ import { exp, float, Fn, If, Loop, mix, positionGeometry, vec3 } from 'three/tsl';
8
8
  import { noise, vnoise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
@@ -18,7 +18,7 @@ var cellCenter = Fn( ([ cell ])=>{
18
18
 
19
19
  var cork = Fn( ( params )=>{
20
20
 
21
- var pos = positionLocal.mul( exp( params.scale.div( 1.5 ).add( 1 ) ) ).add( params.seed ).toVar( );
21
+ var pos = positionGeometry.mul( exp( params.scale.div( 1.5 ).add( 1 ) ) ).add( params.seed ).toVar( );
22
22
 
23
23
  var midCell = pos.round().toVar();
24
24
 
@@ -4,13 +4,13 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { exp, float, Fn, Loop, mix, positionLocal } from 'three/tsl';
7
+ import { exp, float, Fn, Loop, mix, positionGeometry } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
  var dalmatianSpots = Fn( ( params )=>{
12
12
 
13
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed ).sub( 1000 ).toVar( );
13
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).sub( 1000 ).toVar( );
14
14
 
15
15
  var k = float( 1 ).toVar();
16
16
 
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { exp, float, Fn, Loop, mix, positionLocal, vec3 } from 'three/tsl';
7
+ import { exp, float, Fn, Loop, mix, positionGeometry, vec3 } from 'three/tsl';
8
8
 
9
9
 
10
10
 
@@ -61,7 +61,7 @@ var noiseg = Fn( ([ pos ])=>{
61
61
 
62
62
  var dysonSphere = Fn( ( params )=>{
63
63
 
64
- var pos = positionLocal.mul( exp( params.scale.div( 2 ).add( 0.5 ) ) ).add( params.seed ).toVar( );
64
+ var pos = positionGeometry.mul( exp( params.scale.div( 2 ).add( 0.5 ) ) ).add( params.seed ).toVar( );
65
65
 
66
66
  var res = vec3().toVar();
67
67
  var factor = float( 1 ).toVar();
package/src/entangled.js CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { abs, exp, float, floor, Fn, Loop, max, mix, mul, oneMinus, positionLocal, pow, sin } from 'three/tsl';
7
+ import { abs, exp, float, floor, Fn, Loop, max, mix, mul, oneMinus, positionGeometry, pow, sin } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
@@ -12,7 +12,7 @@ import { noise } from 'tsl-textures/tsl-utils.js';
12
12
  var entangled = Fn( ( params ) => {
13
13
 
14
14
  var scale = exp( params.scale.div( 2 ) ).toVar( );
15
- var pos = positionLocal.add( params.seed ).toVar( );
15
+ var pos = positionGeometry.add( params.seed ).toVar( );
16
16
  var k = float( -10000 ).toVar( );
17
17
  var k1 = float( 0 ).toVar( );
18
18
 
package/src/fordite.js CHANGED
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { exp, Fn, mul, positionLocal, sin, vec3 } from 'three/tsl';
7
+ import { exp, Fn, mul, positionGeometry, sin, vec3 } from 'three/tsl';
8
8
  import { hsl, noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var fordite = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed ).toVar( );
14
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
15
 
16
16
  var k = noise(
17
17
  vec3(
package/src/gas-giant.js CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { exp, Fn, mix, positionLocal, vec3 } from 'three/tsl';
7
+ import { exp, Fn, mix, positionGeometry, vec3 } from 'three/tsl';
8
8
  import { hsl, noise, toHsl } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
@@ -12,7 +12,7 @@ import { hsl, noise, toHsl } from 'tsl-textures/tsl-utils.js';
12
12
  var gasGiant = Fn( ( params )=>{
13
13
 
14
14
  var scale = params.scale.div( 2 ).add( 1 ).toVar();
15
- var pos = positionLocal.mul( exp( scale ) ).add( params.seed ).toVar( );
15
+ var pos = positionGeometry.mul( exp( scale ) ).add( params.seed ).toVar( );
16
16
 
17
17
  // turbulence strength
18
18
  var turbulence = params.turbulence.mul(
package/src/grid.js CHANGED
@@ -4,13 +4,13 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { abs, add, div, equirectUV, Fn, min, mix, mul, oneMinus, positionLocal, pow, remapClamp, round, sin, smoothstep, sub } from 'three/tsl';
7
+ import { abs, add, div, equirectUV, Fn, min, mix, mul, oneMinus, positionGeometry, pow, remapClamp, round, sin, smoothstep, sub } from 'three/tsl';
8
8
 
9
9
 
10
10
 
11
11
  var grid = Fn( ( params ) => {
12
12
 
13
- var uv = equirectUV( positionLocal.normalize() ).toVar(),
13
+ var uv = equirectUV( positionGeometry.normalize() ).toVar(),
14
14
  a = mul( uv.x, 2*Math.PI ),
15
15
  b = mul( uv.y, Math.PI ).toVar();
16
16
 
package/src/isolines.js CHANGED
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { add, exp, Fn, mix, oneMinus, positionLocal, sin, smoothstep, sub } from 'three/tsl';
7
+ import { add, exp, Fn, mix, oneMinus, positionGeometry, sin, smoothstep, sub } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var isolines = Fn( ( params )=>{
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed ).toVar( );
14
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
15
 
16
16
  var k = noise( pos ).mul( params.density );
17
17
 
package/src/karst-rock.js CHANGED
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { exp, Fn, mix, positionLocal } from 'three/tsl';
7
+ import { exp, Fn, mix, positionGeometry } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var karstRock = Fn( ( params )=>{
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed.sin().mul( 5 ) ).toVar( );
14
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed.sin().mul( 5 ) ).toVar( );
15
15
 
16
16
  var pos2 = pos.add( noise( pos.mul( 2 ) ) ).toVar();
17
17
 
package/src/marble.js CHANGED
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { add, div, exp, Fn, If, mix, mul, oneMinus, positionLocal, pow } from 'three/tsl';
7
+ import { add, div, exp, Fn, If, mix, mul, oneMinus, positionGeometry, pow } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var marble = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed ).toVar( );
14
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
15
 
16
16
  var k = add(
17
17
  noise( pos ),
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { abs, exp, Fn, oneMinus, positionLocal, select, sqrt, vec3 } from 'three/tsl';
7
+ import { abs, exp, Fn, oneMinus, positionGeometry, select, sqrt, vec3 } from 'three/tsl';
8
8
  import { hsl, noise, toHsl } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var neonLights = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal;//.mul( exp( params.scale ) ).add( params.seed ).toVar( );
14
+ var pos = positionGeometry;//.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
15
 
16
16
  var scale = exp( params.scale.remap( 0, 4, 2, -2 ) ).toVar();
17
17
  var thinness = exp( params.thinness.remap( 0, 1, 1.5, 0 ) ).toVar();
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { exp, Fn, Loop, mix, positionLocal, vec3 } from 'three/tsl';
7
+ import { exp, Fn, Loop, mix, positionGeometry, vec3 } from 'three/tsl';
8
8
  import { applyEuler, noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
@@ -12,7 +12,7 @@ import { applyEuler, noise } from 'tsl-textures/tsl-utils.js';
12
12
  var photosphere = Fn( ( params ) => {
13
13
 
14
14
  var scale = exp( params.scale.add( 1 ) ).toVar( );
15
- var pos = positionLocal.toVar( );
15
+ var pos = positionGeometry.toVar( );
16
16
 
17
17
  var vec = vec3( pos ).toVar();
18
18
 
package/src/planet.js CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { exp, float, Fn, If, Loop, mix, mul, positionLocal, remap, smoothstep, vec3 } from 'three/tsl';
7
+ import { exp, float, Fn, If, Loop, mix, mul, positionGeometry, remap, smoothstep, vec3 } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
@@ -19,7 +19,7 @@ var planet = Fn( ( params )=>{
19
19
 
20
20
  Loop( params.iterations.add( 10 ), ()=>{
21
21
 
22
- k.addAssign( mul( power, noise( positionLocal.mul( scale ).add( params.seed ) ) ) );
22
+ k.addAssign( mul( power, noise( positionGeometry.mul( scale ).add( params.seed ) ) ) );
23
23
  sum.addAssign( power );
24
24
  scale.mulAssign( 1.5 );
25
25
  power.mulAssign( 0.8 );
package/src/polka-dots.js CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { acos, add, distance, exp, float, Fn, Loop, max, min, mix, mod, mul, oneMinus, positionLocal, pow, smoothstep, } from 'three/tsl';
7
+ import { acos, add, distance, exp, float, Fn, Loop, max, min, mix, mod, mul, oneMinus, positionGeometry, pow, smoothstep, } from 'three/tsl';
8
8
  import { spherical } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
@@ -16,7 +16,7 @@ var goldenRatio = ( 1+5**0.5 )/2;
16
16
  var polkaDots = Fn( ( params ) => {
17
17
 
18
18
  var cnt = pow( 10, params.count ).toVar();
19
- var vec = positionLocal.normalize().toVar();
19
+ var vec = positionGeometry.normalize().toVar();
20
20
 
21
21
  var besti = oneMinus( vec.y ).mul( cnt ).sub( 1 ).div( 2 );
22
22
 
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { add, cos, exp, Fn, mix, positionLocal, radians, sin, sub, vec3 } from 'three/tsl';
7
+ import { add, cos, exp, Fn, mix, positionGeometry, radians, sin, sub, vec3 } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
@@ -13,9 +13,9 @@ var processedWood = Fn( ( params )=>{
13
13
 
14
14
  var angle = radians( params.angle ).toVar();
15
15
  var posLocal = vec3(
16
- sub( positionLocal.x.mul( cos( angle ) ), positionLocal.y.mul( sin( angle ) ) ),
17
- add( positionLocal.x.mul( sin( angle ) ), positionLocal.y.mul( cos( angle ) ) ),
18
- positionLocal.z,
16
+ sub( positionGeometry.x.mul( cos( angle ) ), positionGeometry.y.mul( sin( angle ) ) ),
17
+ add( positionGeometry.x.mul( sin( angle ) ), positionGeometry.y.mul( cos( angle ) ) ),
18
+ positionGeometry.z,
19
19
  ).toVar();
20
20
 
21
21
  var scale = params.scale.div( 2 ).add( 1 ).toVar();
package/src/protozoa.js CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { exp, float, Fn, Loop, matcapUV, mix, positionLocal, vec3 } from 'three/tsl';
7
+ import { exp, float, Fn, Loop, matcapUV, mix, positionGeometry, vec3 } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
@@ -19,7 +19,7 @@ var pnoise = Fn( ([ pos, fat ])=>{
19
19
 
20
20
  var protozoa = Fn( ( params )=>{
21
21
 
22
- var pos = positionLocal.mul( exp( params.scale.sub( 1 ) ) ).add( params.seed ).toVar( );
22
+ var pos = positionGeometry.mul( exp( params.scale.sub( 1 ) ) ).add( params.seed ).toVar( );
23
23
 
24
24
  var matcap = vec3( matcapUV, matcapUV.length() ).toVar();
25
25
 
package/src/rotator.js CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { Vector2, Vector3 } from "three";
7
- import { cross, Fn, normalLocal, positionLocal, sub, tangentLocal, transformNormalToView, vec4 } from 'three/tsl';
7
+ import { cross, Fn, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView, vec4 } from 'three/tsl';
8
8
  import { matRotYXZ, matTrans, selectPlanar } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
@@ -25,7 +25,7 @@ var surfacePos = Fn( ([ pos, params ])=>{
25
25
 
26
26
  var rotator = Fn( ( params )=>{
27
27
 
28
- return surfacePos( positionLocal, params );
28
+ return surfacePos( positionGeometry, params );
29
29
 
30
30
  } );
31
31
 
@@ -35,7 +35,7 @@ rotator.normal = Fn( ( params ) => {
35
35
 
36
36
  var eps = 0.01;
37
37
 
38
- var position = positionLocal,
38
+ var position = positionGeometry,
39
39
  normal = normalLocal.normalize().toVar(),
40
40
  tangent = tangentLocal.normalize().mul( eps ).toVar(),
41
41
  bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
package/src/rough-clay.js CHANGED
@@ -1,9 +1,9 @@
1
1
  
2
- // TSL-Textures: Neon Lights
2
+ // TSL-Textures: Rough clay
3
3
 
4
4
 
5
5
 
6
- import { cross, exp, Fn, mx_worley_noise_float, normalLocal, positionLocal, sub, tangentLocal, transformNormalToView } from 'three/tsl';
6
+ import { cross, exp, Fn, mx_worley_noise_float, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView } from 'three/tsl';
7
7
  import { noise } from 'tsl-textures/tsl-utils.js';
8
8
 
9
9
 
@@ -23,7 +23,7 @@ var roughClay = Fn( ( params ) => {
23
23
 
24
24
  var bump = params.bump.div( 50 ).toVar();
25
25
 
26
- var position = positionLocal.mul( exp( params.scale.div( 2 ) ) ).add( params.seed.sin().mul( 10 ) ).toVar( ),
26
+ var position = positionGeometry.mul( exp( params.scale.div( 2 ) ) ).add( params.seed.sin().mul( 10 ) ).toVar( ),
27
27
  normal = normalLocal.normalize().toVar(),
28
28
  tangent = tangentLocal.normalize().mul( eps ).toVar(),
29
29
  bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
@@ -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/rust.js CHANGED
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { exp, Fn, Loop, mix, positionLocal } from 'three/tsl';
7
+ import { exp, Fn, Loop, mix, positionGeometry } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var _rust = Fn( ( params )=>{
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale.div( 4 ).add( -1 ) ) ).add( params.seed ).toVar( );
14
+ var pos = positionGeometry.mul( exp( params.scale.div( 4 ).add( -1 ) ) ).add( params.seed ).toVar( );
15
15
 
16
16
  var amount = params.amount.mul( noise( pos.mul( params.amount.div( 2 ).add( 4 ) ) ).add( 4 ) ).toVar();
17
17
 
@@ -37,7 +37,7 @@ var rust = Fn( ( params )=>{
37
37
 
38
38
  var k = _rust( params ).mul( 1.25 ).pow( 0.5 );
39
39
 
40
- var pos = positionLocal.mul( exp( params.scale.add( params.noiseScale.mul( 3 ), 2 ) ) );
40
+ var pos = positionGeometry.mul( exp( params.scale.add( params.noiseScale.mul( 3 ), 2 ) ) );
41
41
 
42
42
  k.addAssign( params.noise.mul( noise( pos ).abs().add( 0.1 ).pow( 2 ) ) );
43
43
 
package/src/satin.js CHANGED
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { abs, exp, Fn, mix, positionLocal, pow, vec3 } from 'three/tsl';
7
+ import { abs, exp, Fn, mix, positionGeometry, pow, vec3 } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var satin = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.toVar( );
14
+ var pos = positionGeometry.toVar( );
15
15
 
16
16
  var scale = exp( params.scale.div( 3 ) ).toVar();
17
17
 
package/src/scaler.js CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { Vector2, Vector3 } from "three";
7
- import { cross, Fn, mix, normalLocal, positionLocal, sub, tangentLocal, transformNormalToView, vec3, vec4 } from 'three/tsl';
7
+ import { cross, Fn, mix, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView, vec3, vec4 } from 'three/tsl';
8
8
  import { matScale, matTrans, selectPlanar } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
@@ -25,7 +25,7 @@ var surfacePos = Fn( ([ pos, params ])=>{
25
25
 
26
26
  var scaler = Fn( ( params )=>{
27
27
 
28
- return surfacePos( positionLocal, params );
28
+ return surfacePos( positionGeometry, params );
29
29
 
30
30
  } );
31
31
 
@@ -35,7 +35,7 @@ scaler.normal = Fn( ( params ) => {
35
35
 
36
36
  var eps = 0.01;
37
37
 
38
- var position = positionLocal,
38
+ var position = positionGeometry,
39
39
  normal = normalLocal.normalize().toVar(),
40
40
  tangent = tangentLocal.normalize().mul( eps ).toVar(),
41
41
  bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { abs, add, cos, floor, Fn, max, mix, mod, mul, positionLocal, remapClamp, sign, tan, vec3 } from 'three/tsl';
7
+ import { abs, add, cos, floor, Fn, max, mix, mod, mul, positionGeometry, remapClamp, sign, tan, vec3 } from 'three/tsl';
8
8
  import { hsl, noise, remapExp, toHsl } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var scepterHead = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal;
14
+ var pos = positionGeometry;
15
15
 
16
16
  var fx = pos.x.mul( remapExp( params.xFactor, 0, 100, 1.35, 30 ) ).toVar( ),
17
17
  fy = pos.y.mul( remapExp( params.yFactor, 0, 100, 1.35, 30 ) ).toVar( ),
package/src/scream.js CHANGED
@@ -4,18 +4,18 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { add, cos, exp, Fn, mix, positionLocal, sin } from 'three/tsl';
7
+ import { add, cos, exp, Fn, mix, positionGeometry, sin } from 'three/tsl';
8
8
  import { hsl, noise, toHsl } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var scream = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed ).toVar( );
14
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed ).toVar( );
15
15
 
16
16
  var k = noise( add( sin( pos.xyz ), cos( pos.yzx ) ) );
17
17
 
18
- pos.assign( positionLocal.mul( exp( params.scale ).mul( k ) ).add( params.seed ) );
18
+ pos.assign( positionGeometry.mul( exp( params.scale ).mul( k ) ).add( params.seed ) );
19
19
 
20
20
  var k = noise( add( sin( pos.xyz ), cos( pos.yzx ) ).mul( 2 ) );
21
21
 
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { clamp, exp, Fn, mix, positionLocal } from 'three/tsl';
7
+ import { clamp, exp, Fn, mix, positionGeometry } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var simplexNoise = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale ) ).add( params.seed );
14
+ var pos = positionGeometry.mul( exp( params.scale ) ).add( params.seed );
15
15
 
16
16
  var k = clamp( 0, 1, noise( pos ).mul( 0.5, exp( params.contrast ) ).add( 0.5, params.balance ) );
17
17
 
package/src/stars.js CHANGED
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { abs, add, exp, Fn, mix, positionLocal, select } from 'three/tsl';
7
+ import { abs, add, exp, Fn, mix, positionGeometry, select } from 'three/tsl';
8
8
  import { hsl, noise, toHsl } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var stars = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale.div( 2 ).add( 3 ) ) ).add( params.seed ).toVar( );
14
+ var pos = positionGeometry.mul( exp( params.scale.div( 2 ).add( 3 ) ) ).add( params.seed ).toVar( );
15
15
 
16
16
  var k = abs( noise( pos ) ).pow( 10 ).mul( 10 );
17
17
 
@@ -3,7 +3,7 @@
3
3
 
4
4
 
5
5
 
6
- import { cross, float, Fn, normalLocal, positionLocal, sub, tangentLocal, transformNormalToView } from 'three/tsl';
6
+ import { cross, float, Fn, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView } from 'three/tsl';
7
7
 
8
8
 
9
9
 
@@ -25,7 +25,7 @@ var surfacePos = Fn( ([ pos, params ])=>{
25
25
 
26
26
  var supersphere = Fn( ( params )=>{
27
27
 
28
- return surfacePos( positionLocal, params );
28
+ return surfacePos( positionGeometry, params );
29
29
 
30
30
  } );
31
31
 
@@ -35,7 +35,7 @@ supersphere.normal = Fn( ( params ) => {
35
35
 
36
36
  var eps = 0.01;
37
37
 
38
- var position = positionLocal,
38
+ var position = positionGeometry,
39
39
  normal = normalLocal.normalize().toVar(),
40
40
  tangent = tangentLocal.normalize().mul( eps ).toVar(),
41
41
  bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
package/src/tiger-fur.js CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { exp, Fn, mix, positionLocal, vec3 } from 'three/tsl';
7
+ import { exp, Fn, mix, positionGeometry, vec3 } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
@@ -12,7 +12,7 @@ import { noise } from 'tsl-textures/tsl-utils.js';
12
12
  var tigerFur = Fn( ( params )=>{
13
13
 
14
14
  var scale = params.scale.div( 2 ).add( 1 ).toVar();
15
- var pos = positionLocal.mul( exp( scale ) ).add( params.seed ).toVar( );
15
+ var pos = positionGeometry.mul( exp( scale ) ).add( params.seed ).toVar( );
16
16
 
17
17
  var len = params.length.add( 5 ).reciprocal().toVar();
18
18
  var hairs = params.hairs.mul( 0.3 ).toVar();
@@ -20,7 +20,7 @@ var tigerFur = Fn( ( params )=>{
20
20
  k = k.add( noise( pos.mul( vec3( 25, 1, 1 ) ) ).add( 1 ).mul( hairs ) );
21
21
  k = k.add( params.strength.sub( 0.5 ) ).smoothstep( params.blur.negate(), params.blur ).oneMinus();
22
22
 
23
- var n = positionLocal.y.add( hairs.sub( 0.5 ) ).smoothstep( -1, 0.5 );
23
+ var n = positionGeometry.y.add( hairs.sub( 0.5 ) ).smoothstep( -1, 0.5 );
24
24
 
25
25
  return mix( params.bottomColor, params.color, n ).mul( k );
26
26
 
package/src/translator.js CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { Vector2, Vector3 } from "three";
7
- import { cross, Fn, normalLocal, positionLocal, sub, tangentLocal, transformNormalToView, vec4 } from 'three/tsl';
7
+ import { cross, Fn, normalLocal, positionGeometry, sub, tangentLocal, transformNormalToView, vec4 } from 'three/tsl';
8
8
  import { matTrans, selectPlanar } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
@@ -23,7 +23,7 @@ var surfacePos = Fn( ([ pos, params ])=>{
23
23
 
24
24
  var translator = Fn( ( params )=>{
25
25
 
26
- return surfacePos( positionLocal, params );
26
+ return surfacePos( positionGeometry, params );
27
27
 
28
28
  } );
29
29
 
@@ -33,7 +33,7 @@ translator.normal = Fn( ( params ) => {
33
33
 
34
34
  var eps = 0.01;
35
35
 
36
- var position = positionLocal,
36
+ var position = positionGeometry,
37
37
  normal = normalLocal.normalize().toVar(),
38
38
  tangent = tangentLocal.normalize().mul( eps ).toVar(),
39
39
  bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
package/src/tsl-utils.js CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- import { add, cos, cross, dFdx, dFdy, float, Fn, If, log2, mat4, max, min, mul, positionLocal, pow, remap, select, sin, smoothstep, sub, transformNormalToView, uniform, vec3, vec4 } from 'three/tsl';
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
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
 
@@ -349,7 +349,7 @@ const selectPlanar = Fn( ([ pos, selAngles, selCenter, selWidth ])=>{
349
349
  const overlayPlanar = Fn( ( params )=>{
350
350
 
351
351
  var zone = selectPlanar(
352
- positionLocal,
352
+ positionGeometry,
353
353
  params.selectorAngles,
354
354
  params.selectorCenter,
355
355
  params.selectorWidth
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { exp, float, Fn, If, Loop, mix, positionLocal, vec3 } from 'three/tsl';
7
+ import { exp, float, Fn, If, Loop, mix, positionGeometry, vec3 } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
@@ -18,7 +18,7 @@ var cellCenter = Fn( ([ cell ])=>{
18
18
 
19
19
  var voronoiCells = Fn( ( params )=>{
20
20
 
21
- var pos = positionLocal.mul( exp( params.scale.div( 2 ).add( 0.5 ) ) ).add( params.seed ).toVar( );
21
+ var pos = positionGeometry.mul( exp( params.scale.div( 2 ).add( 0.5 ) ) ).add( params.seed ).toVar( );
22
22
 
23
23
  var midCell = pos.round().toVar();
24
24
 
@@ -3,7 +3,7 @@
3
3
 
4
4
 
5
5
 
6
- import { cos, cross, exp, Fn, normalLocal, positionLocal, remap, sin, sub, tangentLocal, transformNormalToView, vec3 } from 'three/tsl';
6
+ import { cos, cross, exp, Fn, normalLocal, positionGeometry, remap, sin, sub, tangentLocal, transformNormalToView, vec3 } from 'three/tsl';
7
7
  import { noise } from 'tsl-textures/tsl-utils.js';
8
8
 
9
9
 
@@ -22,7 +22,7 @@ var waterDrops = Fn( ( params ) => {
22
22
 
23
23
  var eps = 0.001;
24
24
 
25
- var position = positionLocal.mul( exp( params.scale.div( 1 ).add( 1 ) ) ).toVar( ),
25
+ var position = positionGeometry.mul( exp( params.scale.div( 1 ).add( 1 ) ) ).toVar( ),
26
26
  normal = normalLocal.normalize().toVar(),
27
27
  tangent = tangentLocal.normalize().mul( eps ).toVar(),
28
28
  bitangent = cross( normal, tangent ).normalize().mul( eps ).toVar();
package/src/watermelon.js CHANGED
@@ -4,16 +4,16 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { equirectUV, exp, Fn, mix, positionLocal, vec3 } from 'three/tsl';
7
+ import { equirectUV, exp, Fn, mix, positionGeometry, vec3 } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var watermelon = Fn( ( params )=>{
13
13
 
14
- var pos = positionLocal.mul( exp( params.scale.div( 4 ).add( 2 ) ) ).add( params.seed ).toVar( );
14
+ var pos = positionGeometry.mul( exp( params.scale.div( 4 ).add( 2 ) ) ).add( params.seed ).toVar( );
15
15
 
16
- var uv = equirectUV( positionLocal.normalize() ).toVar(),
16
+ var uv = equirectUV( positionGeometry.normalize() ).toVar(),
17
17
  a = uv.x.mul( params.stripes.round(), 2*Math.PI ).add( noise( pos.mul( vec3( 1, 0, 1 ) ) ).mul( 2 ) );
18
18
 
19
19
  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,7 +4,7 @@
4
4
 
5
5
 
6
6
  import { Color } from 'three';
7
- import { add, cos, exp, float, Fn, Loop, mix, mul, positionLocal, radians, reciprocal, sin, sub, vec3 } from 'three/tsl';
7
+ import { add, cos, exp, float, Fn, Loop, mix, mul, positionGeometry, radians, reciprocal, sin, sub, vec3 } from 'three/tsl';
8
8
  import { noise } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
@@ -13,9 +13,9 @@ var wood = Fn( ( params ) => {
13
13
 
14
14
  var angle = radians( params.angle ).toVar();
15
15
  var posLocal = vec3(
16
- sub( positionLocal.x.mul( cos( angle ) ), positionLocal.y.mul( sin( angle ) ) ),
17
- add( positionLocal.x.mul( sin( angle ) ), positionLocal.y.mul( cos( angle ) ) ),
18
- positionLocal.z,
16
+ sub( positionGeometry.x.mul( cos( angle ) ), positionGeometry.y.mul( sin( angle ) ) ),
17
+ add( positionGeometry.x.mul( sin( angle ) ), positionGeometry.y.mul( cos( angle ) ) ),
18
+ positionGeometry.z,
19
19
  ).toVar();
20
20
 
21
21
 
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
  import { Color } from "three";
7
- import { acos, clamp, exp, Fn, mix, positionLocal, sin } from 'three/tsl';
7
+ import { acos, clamp, exp, Fn, mix, positionGeometry, sin } from 'three/tsl';
8
8
  import { spherical } from 'tsl-textures/tsl-utils.js';
9
9
 
10
10
 
11
11
 
12
12
  var zebraLines = Fn( ( params ) => {
13
13
 
14
- var pos = positionLocal.normalize().toVar( );
14
+ var pos = positionGeometry.normalize().toVar( );
15
15
 
16
16
  var dir = spherical( params.phi, params.theta ).toVar();
17
17