Skip to content

Roots ​

The roots effect procedurally grows root and branch systems upward from the bottom of the canvas. Each root system begins at a single point and grows with slight random deviations, branching as it goes. Lines are drawn as smooth quadratic bezier curves, with thicker trunks tapering to thin tips.

Examples ​

Basic

Default root systems growing from the bottom.

<template>
    <EffectDemo>
        <canvas ref="canvasRef"></canvas>
    </EffectDemo>
</template>

<script
    setup
    lang="ts">
    import { onMounted, onUnmounted, ref } from 'vue';
    import { createRoots } from '@basmilius/sparkle';

    const canvasRef = ref<HTMLCanvasElement>();
    let sim: ReturnType<typeof createRoots> | null = null;

    onMounted(() => {
        if (canvasRef.value) {
            sim = createRoots({ scale: 1 });
            sim.mount(canvasRef.value).start();
        }
    });

    onUnmounted(() => {
        sim?.destroy();
        sim = null;
    });
</script>

Configuration ​

typescript
import { createRoots } from '@basmilius/sparkle';

const roots = createRoots({
    count: 5,
    speed: 1,
    color: '#4a3728',
    branchProbability: 0.3,
    maxSegments: 200,
    scale: 1
});
roots.mount(canvas).start();

Number of Root Systems ​

typescript
createRoots({ count: 2 }); // two sparse trees
createRoots({ count: 10 }); // a dense forest

Branching ​

Control how often roots split:

typescript
createRoots({ branchProbability: 0.1 }); // few branches, sparse
createRoots({ branchProbability: 0.8 }); // highly branched, bushy

Color ​

typescript
createRoots({ color: '#2d4a1e' }); // dark green roots
createRoots({ color: '#6b4f3a' }); // warm brown roots

Complexity ​

typescript
createRoots({ maxSegments: 100 }); // short, quick growth
createRoots({ maxSegments: 400 }); // long, sprawling growth