tsl-textures
Version:
A collection of Three.js Shading Language (TSL) textures
82 lines (41 loc) • 1.52 kB
JavaScript
// TSL-Textures: Voronoi Cells
import { Color } from 'three';
import { exp, Fn, Loop, mix, positionGeometry } from 'three/tsl';
import { noise, prepare } from './tsl-utils.js';
var _rust = Fn( ( params )=>{
var pos = positionGeometry.mul( exp( params.scale.div( 4 ).add( -1 ) ) ).add( params.seed ).toVar( );
var amount = params.amount.mul( noise( pos.mul( params.amount.div( 2 ).add( 4 ) ) ).add( 4 ) ).toVar();
var k = noise( pos ).toVar();
Loop( params.iterations, ()=>{
pos.mulAssign( 2 );
k.addAssign( noise( pos ) );
} );
k.subAssign( noise( pos.mul( 2 ) ).abs() );
k.assign( k.sub( amount ).clamp( 0, 15 ) );
return k;
} );
var rust = Fn( ( params )=>{
params = prepare( { ...rust.defaults, ...params } );
var k = _rust( params ).mul( 1.25 ).pow( 0.5 );
var pos = positionGeometry.mul( exp( params.scale.add( params.noiseScale.mul( 3 ), 2 ) ) );
k.addAssign( params.noise.mul( noise( pos ).abs().add( 0.1 ).pow( 2 ) ) );
return mix( params.color, params.background, k );
} );
rust.opacity = Fn( ( params )=>{
params = prepare( { ...rust.defaults, ...params } );
var k = _rust( params ).mul( params.opacity.add( 0.2 ) );
return k.oneMinus();
} );
rust.defaults = {
$name: 'rust',
scale: 2,
iterations: 8,
amount: -0.3,
opacity: 0.5,
noise: 0.5,
noiseScale: 0.5,
color: new Color( 0xC08000 ),
background: new Color( 0x000020 ),
seed: 0,
};
export { rust };