UNPKG

dissolveit

Version:

A customizable dissolve effect component for React Three Fiber applications

145 lines (113 loc) 4.79 kB
# React Three Fiber Dissolve Effect A customizable dissolve effect component for React Three Fiber applications, featuring noise-based transitions with glowing edges. ## Installation ```bash npm install dissolveit ``` ## Features - 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 ## Requirements 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" } ``` ## Basic Usage ```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; ``` ## Props | 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 | ## Advanced Usage ### With Post-Processing ```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> ); } ``` ## Demonstration site [Demo](https://dissolve-demo.vercel.app/) ## Contributing 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. ## License ![License](https://img.shields.io/badge/License-MIT-yellow.svg) This project is licensed under the MIT License - see the [LICENSE](LICENSE.md) file for details. ## Credits Built with [React Three Fiber](https://github.com/pmndrs/react-three-fiber) and [Three.js](https://threejs.org/). ## Support For issues and feature requests, please use the [GitHub issue tracker](https://github.com/Rohan-Raidani/dissolveit/issues).