Skip to content

Post-processing fluid distortion effects in response to cursor interactions for React-Three-Fiber.

NotificationsYou must be signed in to change notification settings

whatisjery/react-fluid-distortion

Repository files navigation

Version

Fluid Distortion for React Three Fiber

screen capture

Implementing post-processing fluid distortion effects in response to cursor interactions for React-Three-Fiber. Based on the shaders developed by Pavel Dobryakov


From the react-three-fiber documentation :

Warning

Three-fiber is a React renderer, it must pair with a major version of React, just like react-dom, react-native, etc. @react-three/fiber@8 pairs with react@18, @react-three/fiber@9 pairs with react@19.


Try it :

codesandbox

Installation :

npm install @whatisjery/react-fluid-distortion @react-three/drei @react-three/postprocessing postprocessing leva

Example of use :

import { Fluid } from '@whatisjery/react-fluid-distortion';
import { EffectComposer } from '@react-three/postprocessing';
import { Canvas } from '@react-three/fiber';

<Canvas
    style={{
        position: 'fixed',
        top: 0,
        left: 0,
        height: '100vh',
        width: '100vw',
        background: '#000000',
    }}>
    <EffectComposer>
        <Fluid />
        {... other effets}
    </EffectComposer>
</Canvas>;

Display configuration panel :

Show a debug panel to test options more easily.

const config = useConfig();

...

<Fluid {...config} />

Options :

NameTypeDefault ValueDescription
fluidColorhexadecimal#005effSets the fluid color. Effective only when rainbow is set to false.
backgroundColorstring#070410Sets the background color. Effective only when showBackground is true.
showBackgroundbooleanfalseToggles the background color's visibility. If false it becomes transprent.
blendnumber5Blends fluid into the scene when showBackground is true. Valid range: 0.00 to 10.0.
intensitynumber10Sets the fluid intensity. Valid range: 0 to 10.
forcenumber2Multiplies the mouse velocity to increase fluid splatter. Valid range: 0.0 to 20.
distortionnumber2Sets the distortion amount. Valid range: 0.00 to 2.00.
radiusnumber0.3Sets the fluid radius. Valid range: 0.01 to 1.00.
curlnumber10Sets the amount of the curl effect. Valid range: 0.0 to 50.
swirlnumber20Sets the amount of the swirling effect. Valid range: 0 to 20.
velocityDissipationnumber0.99Reduces the fluid velocity over time. Valid range: 0.00 to 1.00.
densitionDissipationnumber0.95Reduces the fluid density over time. Valid range: 0.00 to 1.00.
pressurenumber0.80Controls the reduction of pressure. Valid range: 0.00 to 1.00.
rainbowbooleantrueActivates color mode based on mouse direction. No range applicable as this is a boolean value.

Usage with nextjs

If you're working with an older version of Next.js, you may get this type of error:

TypeError: Cannot read properties of undefined (reading '__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED')

To fix it, you can enable package transpilation in your next.config file. Here’s how:

const nextConfig = {
    transpilePackages: ['@whatisjery/react-fluid-distortion'],
};

module.exports = nextConfig;