threlte logo
@threlte/extras

<Sparkles>

This component is a port of the component <Sparkles> from drei.

Adds shader-based particles to your scene.

<script lang="ts">
  import { Canvas } from '@threlte/core'
  import Scene from './Scene.svelte'
</script>

<div>
  <Canvas>
    <Scene />
  </Canvas>
</div>

<style>
  div {
    height: 100%;
  }
</style>
<script lang="ts">
  import Sphere from './Sphere.svelte'
  import { T } from '@threlte/core'
  import { Environment, OrbitControls } from '@threlte/extras'
</script>

<T.PerspectiveCamera
  makeDefault
  position={[0, 5, 12]}
  fov={30}
>
  <OrbitControls
    enableDamping
    autoRotateSpeed={0.85}
    zoomSpeed={0.75}
    minPolarAngle={Math.PI / 2.5}
    maxPolarAngle={Math.PI / 2.55}
  />
</T.PerspectiveCamera>

<Environment
  url="https://dl.polyhaven.org/file/ph-assets/HDRIs/hdr/2k/evening_road_01_2k.hdr"
  isBackground={false}
/>

<T.GridHelper />

<Sphere
  color="white"
  amount={50}
  emissive="green"
  position={[1, 1, -1]}
/>
<Sphere
  color="white"
  amount={30}
  emissive="purple"
  position={[-1.5, 0.5, -2]}
  size={0.5}
/>
<Sphere
  color="lightpink"
  amount={20}
  emissive="orange"
  position={[-1, 0.25, 1]}
  size={0.25}
/>
<script lang="ts">
  import { T } from '@threlte/core'
  import { Sparkles } from '@threlte/extras'

  interface Props {
    size?: number
    amount?: number
    color?: string
    emissive?: string
    [key: string]: any
  }

  let { size = 1, count = 100, color = 'white', emissive = 'white', ...rest }: Props = $props()
</script>

<T.Mesh {...rest}>
  <T.SphereGeometry args={[size, 64, 64]} />
  <T.MeshStandardMaterial
    roughness={0}
    metalness={0.1}
    {color}
    emissive={emissive || color}
    envMapIntensity={0.2}
  />
  <Sparkles
    {count}
    scale={size * 2}
    size={6}
    speed={0.4}
    color="white"
  />
</T.Mesh>

Component Signature

Props

name
type
required
default
description

color
ColorRepresentation | Float32Array
no
100
Color of the particles.

count
number
no
100
Number of particles.

noise
number | [number, number, number] | Float32Array
no
Movement factor

opacity
number | Float32Array
no
100
Opacity of particles

scale
number | [number, number, number]
no
Number of particles.

size
number | Float32Array
no
randomized (between 0 and 1)
The space the particles occupy.

speed
number | Float32Array
no
1
Speed of particles.