Skip to content

<FakeGlowMaterial>

This component is a port of ektogamat’s <FakeGlowMaterial> r3f component which displays a glowing outline around a mesh using a custom shader, instead of post-processing.

<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 { T } from '@threlte/core'
import { OrbitControls, Grid, FakeGlowMaterial } from '@threlte/extras'
</script>
<T.Group
position.y={2}
position.x={-3}
>
<T.Mesh>
<T.MeshBasicMaterial color="green" />
<T.IcosahedronGeometry args={[2, 4]} />
</T.Mesh>
<T.Mesh>
<FakeGlowMaterial />
<T.IcosahedronGeometry args={[4, 4]} />
</T.Mesh>
</T.Group>
<T.Group
position.y={3}
position.x={3}
>
<T.Mesh>
<T.MeshBasicMaterial color="blue" />
<T.BoxGeometry args={[2, 2, 2]} />
</T.Mesh>
<T.Mesh>
<FakeGlowMaterial glowColor="blue" />
<T.IcosahedronGeometry args={[3, 4]} />
</T.Mesh>
</T.Group>
<T.Group
position.y={6}
position.x={0}
>
<T.Mesh>
<T.MeshBasicMaterial color="red" />
<T.TorusKnotGeometry args={[1, 0.25, 128]} />
</T.Mesh>
<T.Mesh>
<FakeGlowMaterial glowColor="red" />
<T.TorusKnotGeometry args={[1, 0.8, 128]} />
</T.Mesh>
</T.Group>
<T.PerspectiveCamera
makeDefault
position.y={8}
position.z={8}
fov={90}
>
<OrbitControls
enableDamping
enablePan={false}
enableZoom={false}
/>
</T.PerspectiveCamera>
<Grid
position.y={0}
sectionThickness={1}
infiniteGrid
cellColor="#dddddd"
sectionColor="#ffffff"
sectionSize={10}
cellSize={2}
/>
FakeGlowMaterial.svelte
<script lang="ts">
import { T } from '@threlte/core'
import { FakeGlowMaterial } from '@threlte/extras'
</script>
<T.Mesh>
<FakeGlowMaterial glowColor="red" />
<T.IcosahedronGeometry args={[4, 4]} />
</T.Mesh>

This effect is mesh based, meaning you need to provide a mesh for this to work properly. The mesh must also be smooth enough that glsl can calculate the normals properly.

For sharp meshes like a cube, you can use a sphere to simulate the glow, instead of a copy of the cube.

FakeGlowMaterialCube.svelte
<script lang="ts">
import { T } from '@threlte/core'
import { FakeGlowMaterial } from '@threlte/extras'
</script>
<T.Mesh>
<FakeGlowMaterial glowColor="blue" />
<T.BoxGeometry args={[2, 2, 2]} />
</T.Mesh>
<T.Mesh>
<FakeGlowMaterial glowColor="blue" />
<T.IcosahedronGeometry args={[3, 4]} />
</T.Mesh>

<FakeGlowMaterial> extends < T . ShaderMaterial > and supports all its props, snippets, bindings and events.

Props

name
type
required
default
description

falloff
number
no
0.1
Controls the value of the Falloff effect. Ranges from 0.0 to 1.0.

glowColor
ColorRepresentation
no
"green"

glowInternalRadius
number
no
6.0
Controls the internal glow radius. Ranges from -1.0 to 1.0. Set a darker color to get the fresnel effect only.

glowSharpness
number
no
1.0