UNPKG

tsl-textures

Version:

A collection of Three.js Shading Language (TSL) textures

86 lines (47 loc) 1.71 kB
// TSL-Textures: Cork import { Color } from 'three'; import { exp, float, Fn, If, Loop, mix, positionGeometry, vec3 } from 'three/tsl'; import { noise, prepare, vnoise } from './tsl-utils.js'; var cellCenter = Fn( ([ cell ])=>{ return cell.add( vnoise( cell ) ); } ); var cork = Fn( ( params )=>{ params = prepare( { ...cork.defaults, ...params } ); var pos = positionGeometry.mul( exp( params.scale.div( 1.5 ).add( 1 ) ) ).add( params.seed ).toVar( ); var midCell = pos.round().toVar(); var minCell = midCell.toVar(); var minDist = float( 1 ).toVar(); var cell = vec3().toVar(); var dist = float().toVar(); var i = float( 0 ).toVar(); Loop( 27, () => { var ix = i.mod( 3 ).sub( 1 ); var iy = i.div( 3 ).floor().mod( 3 ).sub( 1 ); var iz = i.div( 9 ).floor().sub( 1 ); cell.assign( midCell.add( vec3( ix, iy, iz ) ) ); dist.assign( pos.distance( cellCenter( cell ) ) ); dist.addAssign( noise( pos.add( cell ) ).div( params.straight.exp() ) ); If( dist.lessThan( minDist ), ()=>{ minDist.assign( dist ); minCell.assign( cell ); } ); i.addAssign( 1 ); } ); var n = noise( minCell.mul( Math.PI ) ).toVar(); var r = noise( pos.mul( 12 ) ).toVar(); r.assign( r.sign().mul( r.abs().pow3() ) ); r.addAssign( noise( pos.mul( 40 ) ).div( 3 ) ); var k = n.add( 1 ).div( 2 ); var color = mix( params.color, params.background, k.add( r.mul( params.noise ) ) ).toVar(); return color; } ); cork.defaults = { $name: 'Cork', scale: 1, straight: 1, noise: 0.3, color: new Color( 0xfff0c0 ), background: new Color( 0xd08060 ), seed: 0, }; export { cork };