@maxolib/tsl-lib
v0.1.0
Published
TypeScript library for Three.js Shader Language (TSL) utilities for React Three Fiber projects
Maintainers
Readme
TSL-Lib
A comprehensive TypeScript library for Three.js Shader Language (TSL) utilities designed for React Three Fiber projects. This library provides a collection of shader functions including easing, noise, mathematical operations, color utilities, and pattern generators.
🚀 Features
- Easing Functions: 30+ easing functions (quad, cubic, sine, expo, elastic, bounce, etc.)
- Noise Functions: Value noise, gradient noise, simplex noise, Voronoi, FBM, turbulence, and cellular noise
- Math Utilities: Remap, smoothstep, rotate2D, SDFs (circle, rectangle, hexagon, star), and more
- Color Functions: RGB/HSV/HSL conversions, hue/saturation/brightness adjustments, blend modes
- Pattern Generators: Grid, checkerboard, stripes, dots, waves, bricks, Voronoi cells, Truchet tiles
📦 Installation
npm install tsl-lib
# or
yarn add tsl-lib
# or
pnpm add tsl-libPeer Dependencies:
This library requires three version 0.160.0 or higher (with TSL support).
npm install three@latest🎯 Usage
Basic Example
import { useRef } from 'react';
import { Canvas, useFrame } from '@react-three/fiber';
import { float, uniform, vec2, vec4, Fn } from 'three/tsl';
import { MeshBasicNodeMaterial } from 'three/webgpu';
import { easeInOutCubic, valueNoise2D, remap } from 'tsl-lib';
function AnimatedMesh() {
const materialRef = useRef();
const time = uniform(0);
useFrame((state) => {
time.value = state.clock.elapsedTime;
});
// Create a custom shader using TSL
const material = new MeshBasicNodeMaterial();
material.colorNode = Fn(() => {
const uv = vec2(/* your uv coordinates */);
const t = easeInOutCubic(time.value.mod(1.0));
const noise = valueNoise2D(uv.mul(5.0).add(time.value));
const color = remap(noise, float(0.0), float(1.0), float(0.2), float(0.8));
return vec4(color, color, color, 1.0);
})();
return (
<mesh>
<boxGeometry />
<primitive object={material} attach="material" />
</mesh>
);
}
export default function App() {
return (
<Canvas>
<AnimatedMesh />
</Canvas>
);
}Easing Functions Example
import { easeInOutQuad, easeInOutElastic, easeOutBounce } from 'tsl-lib/easing';
import { float } from 'three/tsl';
// In your shader code
const t = float(time).fract(); // 0 to 1
const smoothValue = easeInOutQuad(t);
const elasticValue = easeInOutElastic(t);
const bounceValue = easeOutBounce(t);Noise Functions Example
import {
valueNoise2D,
gradientNoise2D,
fbm2D,
voronoiNoise2D
} from 'tsl-lib/noise';
import { vec2 } from 'three/tsl';
const uv = vec2(/* coordinates */);
// Simple noise
const noise1 = valueNoise2D(uv.mul(10.0));
// Fractal Brownian Motion
const fbm = fbm2D(uv, 6, 2.0, 0.5); // 6 octaves
// Voronoi
const voronoi = voronoiNoise2D(uv.mul(5.0));Math Utilities Example
import { remap, rotate2D, circleSDF, smootherstep } from 'tsl-lib/math';
import { vec2, float } from 'three/tsl';
const uv = vec2(/* coordinates */);
// Remap value from one range to another
const remapped = remap(uv.x, float(0.0), float(1.0), float(-1.0), float(1.0));
// Rotate point
const rotated = rotate2D(uv, float(Math.PI / 4));
// Signed distance function for circle
const sdf = circleSDF(uv, vec2(0.5, 0.5), float(0.2));
const circle = smootherstep(float(-0.01), float(0.01), sdf);Color Functions Example
import {
rgbToHsv,
hsvToRgb,
adjustHue,
adjustSaturation,
overlay
} from 'tsl-lib/color';
import { vec3 } from 'three/tsl';
const baseColor = vec3(0.8, 0.3, 0.5);
// Convert to HSV and adjust
const hsv = rgbToHsv(baseColor);
const adjustedColor = adjustHue(baseColor, float(0.1));
const saturated = adjustSaturation(baseColor, float(1.5));
// Blend modes
const blendColor = vec3(0.2, 0.6, 0.9);
const result = overlay(baseColor, blendColor);Pattern Generators Example
import {
checkerboard,
concentricCircles,
voronoiCells,
truchetTiles
} from 'tsl-lib/patterns';
import { vec2 } from 'three/tsl';
const uv = vec2(/* coordinates */);
const checker = checkerboard(uv, float(10.0));
const circles = concentricCircles(uv, vec2(0.5, 0.5), float(20.0));
const cells = voronoiCells(uv, float(5.0));
const truchet = truchetTiles(uv, float(8.0));📚 API Reference
Easing Functions
All easing functions take a single parameter t (0-1) and return an eased value:
easeLinear,easeInQuad,easeOutQuad,easeInOutQuadeaseInCubic,easeOutCubic,easeInOutCubiceaseInQuart,easeOutQuart,easeInOutQuarteaseInQuint,easeOutQuint,easeInOutQuinteaseInSine,easeOutSine,easeInOutSineeaseInExpo,easeOutExpo,easeInOutExpoeaseInCirc,easeOutCirc,easeInOutCirceaseInBack,easeOutBack,easeInOutBackeaseInElastic,easeOutElastic,easeInOutElasticeaseInBounce,easeOutBounce,easeInOutBounce
Noise Functions
random(vec2)- Simple random from 2D coordinatesvalueNoise2D(vec2)- Value noisegradientNoise2D(vec2)- Perlin-like gradient noisesimplexNoise2D(vec2)- Simplex noisevoronoiNoise2D(vec2)- Voronoi/cellular noisefbm2D(vec2, octaves, lacunarity, gain)- Fractal Brownian Motionturbulence2D(vec2, octaves)- Turbulence noisecellularNoise2D(vec2)- Cellular/Worley noise
Math Utilities
remap(value, inMin, inMax, outMin, outMax)- Remap value between rangessmootherstep(edge0, edge1, x)- Improved smoothsteprotate2D(point, angle)- Rotate 2D pointcircleSDF(point, center, radius)- Circle signed distancerectangleSDF(point, center, size)- Rectangle signed distancehexagonSDF(point, radius)- Hexagon signed distance- And many more...
Color Functions
rgbToHsv(rgb),hsvToRgb(hsv)- Color space conversionsrgbToHsl(rgb),hslToRgb(hsl)- HSL conversionsadjustHue(rgb, adjustment)- Adjust hueadjustSaturation(rgb, adjustment)- Adjust saturationadjustBrightness(rgb, adjustment)- Adjust brightness- Blend modes:
overlay,screen,colorDodge,colorBurn,softLight
Pattern Generators
gridPattern(uv, scale)- Grid linescheckerboard(uv, scale)- Checkerboard patternstripes(uv, scale)- Stripe patternconcentricCircles(uv, center, scale)- Concentric circlesdots(uv, scale, radius)- Dot patternvoronoiCells(uv, scale)- Voronoi cellstruchetTiles(uv, scale)- Truchet tile pattern
🛠️ Development
# Install dependencies
npm install
# Build the library
npm run build
# Watch mode for development
npm run dev
# Type checking
npm run type-check🌟 Use Cases
- Procedural textures and materials
- Animated shader effects
- Particle systems
- Post-processing effects
- Dynamic backgrounds
- Generative art
- Game development
- WebGL/WebGPU visualizations
📖 Examples
Check out the /examples directory (coming soon) for complete working examples with React Three Fiber.
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
📄 License
MIT © [Your Name]
🔗 Links
💡 Tips
- Performance: TSL functions are compiled to GLSL/WGSL, so they run on the GPU
- Type Safety: Full TypeScript support with proper type definitions
- Tree Shaking: Import only what you need for optimal bundle size
- Composability: Combine multiple functions to create complex effects
Built with ❤️ for the Three.js and React Three Fiber community
