dissolveit
Version:
A customizable dissolve effect component for React Three Fiber applications
145 lines (113 loc) • 4.79 kB
Markdown
for React Three Fiber applications, featuring noise-based transitions with glowing edges.
```bash
npm install dissolveit
```
- Smooth dissolve transitions with customizable parameters
- Support for both fade-in and fade-out animations
- Compatible with any Three.js geometry
- Customizable colors and animation duration
This package requires the following peer dependencies:
```json
{
"@react-three/fiber": ">=8.0.0",
"@react-three/drei": ">=9.0.0",
"three": ">=0.150.0",
"react": ">=18.0.0",
"gl-noise": ">=1.6.0",
"maath": ">=0.5.0"
}
```
```jsx
import { useState } from "react";
import "./App.css";
import { Canvas } from "@react-three/fiber";
import { DissolveEffect } from "dissolveit";
import { OrbitControls } from "@react-three/drei";
import { EffectComposer, Bloom } from "@react-three/postprocessing";
import { Environment } from "@react-three/drei";
function App() {
const [isFading, setIsFading] = useState(true);
return (
<div className="app">
<Canvas camera={{ position: [3, 3, 5], fov: 42 }}>
<color attach="background" args={["#ececec"]} />
<OrbitControls />
<ambientLight />
{/* <spotLight position={[10, 10, 10]} /> */}
<Environment preset="sunset" />
<EffectComposer>
<Bloom luminanceThreshold={2} intensity={1.25} mipmapBlur />
</EffectComposer>
<mesh position={[0, 0, 0]}>
<boxGeometry args={[1, 1, 1]} />
<DissolveEffect
fadeIn={isFading}
fadeOut={!isFading}
color="#FFD700"
thickness={0.1}
intensity={10}
/>
</mesh>
</Canvas>
<button
style={{ position: "absolute", bottom: 20, left: 20 }}
onClick={() => {
setIsFading(!isFading);
console.log("Is Fading:", !isFading);
}}
>
Toggle Fade
</button>
</div>
);
}
export default App;
```
| Prop | Type | Default | Description |
| -------------- | ---------------------- | ---------------------- | --------------------------------------------------- |
| `geometry` | `THREE.BufferGeometry` | `undefined` | Optional geometry to use with the effect |
| `baseMaterial` | `THREE.Material` | `MeshStandardMaterial` | Base material to apply the effect to |
| `fadeIn` | `boolean` | `false` | Controls fade-in animation |
| `fadeOut` | `boolean` | `false` | Controls fade-out animation |
| `color` | `string` | Required | Color of the dissolve edge effect (e.g., "#FFD700") |
| `thickness` | `number` | `0.1` | Thickness of the dissolve edge |
| `intensity` | `number` | `50` | Intensity of the edge glow |
| `duration` | `number` | `1.2` | Duration of the fade animation in seconds |
| `onFadeOut` | `() => void` | `undefined` | Callback function triggered when fade-out completes |
```jsx
import { Canvas } from "@react-three/fiber";
import { EffectComposer, Bloom } from "@react-three/postprocessing";
import { DissolveEffect } from "r3f-dissolve-effect";
function App() {
return (
<Canvas>
<EffectComposer>
<Bloom luminanceThreshold={2} intensity={1.25} mipmapBlur />
</EffectComposer>
<mesh>
<boxGeometry />
<DissolveEffect fadeIn={true} color="#FFD700" />
</mesh>
</Canvas>
);
}
```
[ ](https://dissolve-demo.vercel.app/)
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

This project is licensed under the MIT License - see the [LICENSE](LICENSE.md) file for details.
Built with [React Three Fiber](https://github.com/pmndrs/react-three-fiber) and [Three.js](https://threejs.org/).
For issues and feature requests, please use the [GitHub issue tracker](https://github.com/Rohan-Raidani/dissolveit/issues).
A customizable dissolve effect component