A fucking insane web-based 3D text distortion engine built with Three.js that turns boring text into animated, distorted masterpieces.
This thing takes your text and absolutely destroys it in the most beautiful way possible:
- 3D Text Rendering - Real font loading with proper geometry
- Distortion Effects - Perlin noise, attractors, Voronoi chaos
- Animation - Smooth, customizable motion
- Export Capabilities - Animated SVG and GIF frame sequences
- Individual Letter Control - Each character is its own 3D object
- Polygon Management - Smart subdivision to prevent geometry explosion
- Color Modes: Rainbow, black, white, random, position-based, noise-based
- Background Colors: Dark, black, white, gray, blue, red
- Thickness Variation: Dynamic depth changes based on noise
- Smooth Animations: Configurable speed and timing
- Perlin Noise: 3D noise distortion with scale control
- Attractors: Magnetic points that pull vertices (up to 30 points, max strength 1000)
- Voronoi: Cellular pattern distortion (up to 30 points, max strength 1000)
- Threshold Clipping: Hard cutoff for extreme distortions
- Resolution: Polygon density per character (3-100)
- 2D/3D Toggle: Render as curves or extruded 3D shapes
- Base Depth: Extrusion thickness for 3D mode
- Smart Polygon Limits: Prevents geometry explosion on curved letters (2000 max per character)
- Multi-line Support: Use
/nfor line breaks - Line Spacing: Vertical spacing control (-0.5 to 2.0)
- Position Controls: X, Y, Z positioning
- Font Loading: Real Three.js font with fallback system
- Animated SVG: 30-frame animations respecting speed settings
- GIF Frames: PNG sequence export for GIF creation (768px max)
- Smart Framing: Auto-crops to text bounds with optimal aspect ratio
- Open the HTML file in a modern browser (fuck IE6)
- Type your text in the input field
- Adjust the chaos with all the sliders and controls
- Watch it dance with the animation toggle
- Export your creation as SVG or GIF frames
- Text Input: Your words of wisdom
- Line Spacing: How much space between lines
- Resolution: More polygons = smoother curves (but heavier)
- X/Y/Z Position: Move your text around in 3D space
- Noise Scale: How wild the Perlin noise gets (0-2.0)
- Attractor Count: Number of magnetic points (1-30)
- Attractor Strength: How strong the pull is (0-1000)
- Voronoi Count: Number of cellular points (1-30)
- Voronoi Strength: Cellular distortion intensity (0-1000)
- Threshold: Hard limit for distortions
- Enable Extrusion: Toggle between 2D curves and 3D shapes
- Base Depth: How thick the 3D extrusion is
- Thickness Variation: Dynamic depth changes
- Color Mode: How to color your text
- Background: Scene background color
- Animation Speed: How fast the chaos moves
- Individual Letter Meshes: Each character is a separate Three.js object
- Polygon-Based System: Smart subdivision based on character complexity
- Global Coordinate System: Proper positioning for multi-character text
- Memory Management: Proper disposal of old geometries
- Polygon Limits: 2000 max per character to prevent browser death
- Smart Subdivision: Only adds detail where needed
- Efficient Rendering: WebGL with fallback options
- Export Optimization: 3 decimal precision for file size control
- SVG: 30 frames, respects animation speed, global coordinate system
- GIF: PNG sequence, smart framing, 768px max width, 30 frames
- Modern Browser: Chrome, Firefox, Safari, Edge
- WebGL Support: For 3D rendering
- ES6 Modules: For Three.js imports
- File Download: For export features
crazy_text_3d.html # The entire fucking application
README.md # This beautiful documentation
- Font Loading: Uses Helvetiker font with fallback system
- Memory Usage: High polygon counts can be heavy
- Export Size: SVG files can get large with complex animations
- Browser Limits: Very high resolution settings might crash older browsers
This monstrosity evolved through:
- FontLoader Issues → ES6 module imports
- Single Mesh → Individual letter meshes
- Polygon Explosion → Smart subdivision limits
- Export Problems → Global coordinate systems
- Performance Issues → Polygon management
- Coordinate Chaos → Proper world space calculations
createIndividualLetterMeshes()- Creates separate meshes per charactercreatePolygonBasedCharacterGeometry()- Smart polygon subdivisionapplyDistortions()- All the beautiful chaosexportAnimatedSVG()- SVG export with global coordinatesexportAnimatedGIF()- Frame sequence export
Want to add more chaos? Fork it and make it even more insane. Just don't break the polygon limits or your browser will cry.
Do whatever the fuck you want with it. It's art.
"Sometimes you need to break text to make it beautiful." 🎨
Built with Three.js, Perlin noise, and way too much caffeine.