From e75a61067e2bfe4aad33fd289214f6f839ed9489 Mon Sep 17 00:00:00 2001 From: takuma-hmng8 Date: Sat, 4 Nov 2023 14:45:52 +0900 Subject: [PATCH] create-kit --- app/fx/{Scene.tsx => Demo.tsx} | 25 +- app/fx/{ShaderMaterial.tsx => FxMaterial.tsx} | 20 +- app/fx/index.tsx | 4 +- packages/use-shader-fx/build/use-shader-fx.js | 1600 ----------------- .../use-shader-fx/build/use-shader-fx.js.map | 1 - .../use-shader-fx/build/use-shader-fx.umd.cjs | 613 ------- .../build/use-shader-fx.umd.cjs.map | 1 - .../src/{hooks => hook}/types/index.ts | 0 .../src/{hooks => hook}/useBrush/index.ts | 0 .../{hooks => hook}/useBrush/shader/main.frag | 0 .../{hooks => hook}/useBrush/shader/main.vert | 0 .../src/{hooks => hook}/useBrush/useMesh.ts | 0 .../src/{hooks => hook}/useDuoTone/index.ts | 0 .../useDuoTone/shader/main.frag | 0 .../useDuoTone/shader/main.vert | 0 .../src/{hooks => hook}/useDuoTone/useMesh.ts | 0 .../src/{hooks => hook}/useFlowmap/index.ts | 0 .../useFlowmap/shader/main.frag | 0 .../useFlowmap/shader/main.vert | 0 .../src/{hooks => hook}/useFlowmap/useMesh.ts | 0 .../{hooks => hook}/useFogProjection/index.ts | 0 .../useFogProjection/shader/main.frag | 0 .../useFogProjection/shader/main.vert | 0 .../useFogProjection/useMesh.ts | 0 .../src/{hooks => hook}/useFruid/index.ts | 0 .../materials/useAdvectionMaterial.ts | 0 .../useFruid/materials/useClearMaterial.ts | 0 .../useFruid/materials/useCurlMaterial.ts | 0 .../materials/useDivergenceMaterial.ts | 0 .../materials/useGradientSubtractMaterial.ts | 0 .../useFruid/materials/useInitialMaterial.ts | 0 .../useFruid/materials/usePressureMaterial.ts | 0 .../useFruid/materials/useSplatMaterial.ts | 0 .../materials/useVorticityMaterial.ts | 0 .../useFruid/shaders/advection.frag | 0 .../useFruid/shaders/clear.frag | 0 .../useFruid/shaders/curl.frag | 0 .../useFruid/shaders/divergence.frag | 0 .../useFruid/shaders/gradientSubtract.frag | 0 .../useFruid/shaders/init.frag | 0 .../useFruid/shaders/main.vert | 0 .../useFruid/shaders/pressure.frag | 0 .../useFruid/shaders/splat.frag | 0 .../useFruid/shaders/vorticity.frag | 0 .../src/{hooks => hook}/useFruid/useMesh.ts | 0 .../src/{hooks => hook}/useRipple/index.ts | 0 .../src/{hooks => hook}/useRipple/useMesh.ts | 0 .../{hooks => hook}/useSimpleFruid/index.ts | 0 .../materials/useAdvectionMaterial.ts | 0 .../materials/useCurlMaterial.ts | 0 .../materials/useDivergenceMaterial.ts | 0 .../materials/useInitialMaterial.ts | 0 .../materials/usePressureMaterial.ts | 0 .../materials/useVelocityMaterial.ts | 0 .../materials/useVorticityMaterial.ts | 0 .../useSimpleFruid/shaders/advection.frag | 0 .../useSimpleFruid/shaders/curl.frag | 0 .../useSimpleFruid/shaders/divergence.frag | 0 .../useSimpleFruid/shaders/init.frag | 0 .../useSimpleFruid/shaders/main.vert | 0 .../useSimpleFruid/shaders/map.glsl | 0 .../useSimpleFruid/shaders/pressure.frag | 0 .../shaders/samplePressure.glsl | 0 .../shaders/sampleVelocity.glsl | 0 .../useSimpleFruid/shaders/velocity.frag | 0 .../useSimpleFruid/shaders/vorticity.frag | 0 .../{hooks => hook}/useSimpleFruid/useMesh.ts | 0 .../{hooks => hook}/useTransitionBg/index.ts | 0 .../useTransitionBg/shader/main.frag | 0 .../useTransitionBg/shader/main.vert | 0 .../useTransitionBg/useMesh.ts | 0 .../src/{hooks => hook}/utils/setUniforms.ts | 22 +- .../src/{hooks => hook}/utils/types/index.ts | 0 .../src/{hooks => hook}/utils/useAddMesh.ts | 0 .../src/{hooks => hook}/utils/useCamera.ts | 0 .../src/{hooks => hook}/utils/useDoubleFBO.ts | 0 .../src/{hooks => hook}/utils/useParams.ts | 0 .../src/{hooks => hook}/utils/usePointer.ts | 0 .../{hooks => hook}/utils/useResolution.ts | 0 .../src/{hooks => hook}/utils/useSingleFBO.ts | 0 packages/use-shader-fx/src/index.js | 16 +- .../types/hooks/types/index.d.ts | 28 - .../types/hooks/useBrush/index.d.ts | 32 - .../types/hooks/useBrush/useMesh.d.ts | 7 - .../types/hooks/useDuoTone/index.d.ts | 17 - .../types/hooks/useDuoTone/useMesh.d.ts | 17 - .../types/hooks/useFlowmap/index.d.ts | 24 - .../types/hooks/useFlowmap/useMesh.d.ts | 7 - .../types/hooks/useFogProjection/index.d.ts | 22 - .../types/hooks/useFogProjection/useMesh.d.ts | 2 - .../types/hooks/useFruid/index.d.ts | 31 - .../materials/useAdvectionMaterial.d.ts | 23 - .../useFruid/materials/useClearMaterial.d.ts | 17 - .../useFruid/materials/useCurlMaterial.d.ts | 14 - .../materials/useDivergenceMaterial.d.ts | 14 - .../useGradientSubtractMaterial.d.ts | 17 - .../materials/useInitialMaterial.d.ts | 2 - .../materials/usePressureMaterial.d.ts | 17 - .../useFruid/materials/useSplatMaterial.d.ts | 26 - .../materials/useVorticityMaterial.d.ts | 23 - .../types/hooks/useFruid/useMesh.d.ts | 31 - .../types/hooks/useRipple/index.d.ts | 30 - .../types/hooks/useRipple/useMesh.d.ts | 9 - .../types/hooks/useSimpleFruid/index.d.ts | 31 - .../materials/useAdvectionMaterial.d.ts | 17 - .../materials/useCurlMaterial.d.ts | 14 - .../materials/useDivergenceMaterial.d.ts | 14 - .../materials/useInitialMaterial.d.ts | 2 - .../materials/usePressureMaterial.d.ts | 20 - .../materials/useVelocityMaterial.d.ts | 29 - .../materials/useVorticityMaterial.d.ts | 14 - .../types/hooks/useSimpleFruid/useMesh.d.ts | 23 - .../types/hooks/useTransitionBg/index.d.ts | 22 - .../types/hooks/useTransitionBg/useMesh.d.ts | 40 - .../types/hooks/utils/setUniforms.d.ts | 1 - .../types/hooks/utils/types/index.d.ts | 15 - .../types/hooks/utils/useAddMesh.d.ts | 2 - .../types/hooks/utils/useCamera.d.ts | 3 - .../types/hooks/utils/useDoubleFBO.d.ts | 22 - .../types/hooks/utils/useParams.d.ts | 3 - .../types/hooks/utils/usePointer.d.ts | 11 - .../types/hooks/utils/useResolution.d.ts | 6 - .../types/hooks/utils/useSingleFBO.d.ts | 22 - packages/use-shader-fx/types/index.d.ts | 8 - 124 files changed, 48 insertions(+), 2983 deletions(-) rename app/fx/{Scene.tsx => Demo.tsx} (91%) rename app/fx/{ShaderMaterial.tsx => FxMaterial.tsx} (79%) delete mode 100644 packages/use-shader-fx/build/use-shader-fx.js delete mode 100644 packages/use-shader-fx/build/use-shader-fx.js.map delete mode 100644 packages/use-shader-fx/build/use-shader-fx.umd.cjs delete mode 100644 packages/use-shader-fx/build/use-shader-fx.umd.cjs.map rename packages/use-shader-fx/src/{hooks => hook}/types/index.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useBrush/index.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useBrush/shader/main.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useBrush/shader/main.vert (100%) rename packages/use-shader-fx/src/{hooks => hook}/useBrush/useMesh.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useDuoTone/index.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useDuoTone/shader/main.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useDuoTone/shader/main.vert (100%) rename packages/use-shader-fx/src/{hooks => hook}/useDuoTone/useMesh.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFlowmap/index.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFlowmap/shader/main.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFlowmap/shader/main.vert (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFlowmap/useMesh.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFogProjection/index.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFogProjection/shader/main.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFogProjection/shader/main.vert (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFogProjection/useMesh.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/index.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/materials/useAdvectionMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/materials/useClearMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/materials/useCurlMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/materials/useDivergenceMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/materials/useGradientSubtractMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/materials/useInitialMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/materials/usePressureMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/materials/useSplatMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/materials/useVorticityMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/shaders/advection.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/shaders/clear.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/shaders/curl.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/shaders/divergence.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/shaders/gradientSubtract.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/shaders/init.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/shaders/main.vert (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/shaders/pressure.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/shaders/splat.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/shaders/vorticity.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useFruid/useMesh.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useRipple/index.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useRipple/useMesh.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/index.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/materials/useAdvectionMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/materials/useCurlMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/materials/useDivergenceMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/materials/useInitialMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/materials/usePressureMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/materials/useVelocityMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/materials/useVorticityMaterial.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/shaders/advection.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/shaders/curl.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/shaders/divergence.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/shaders/init.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/shaders/main.vert (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/shaders/map.glsl (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/shaders/pressure.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/shaders/samplePressure.glsl (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/shaders/sampleVelocity.glsl (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/shaders/velocity.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/shaders/vorticity.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useSimpleFruid/useMesh.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useTransitionBg/index.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/useTransitionBg/shader/main.frag (100%) rename packages/use-shader-fx/src/{hooks => hook}/useTransitionBg/shader/main.vert (100%) rename packages/use-shader-fx/src/{hooks => hook}/useTransitionBg/useMesh.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/utils/setUniforms.ts (84%) rename packages/use-shader-fx/src/{hooks => hook}/utils/types/index.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/utils/useAddMesh.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/utils/useCamera.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/utils/useDoubleFBO.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/utils/useParams.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/utils/usePointer.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/utils/useResolution.ts (100%) rename packages/use-shader-fx/src/{hooks => hook}/utils/useSingleFBO.ts (100%) delete mode 100644 packages/use-shader-fx/types/hooks/types/index.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useBrush/index.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useBrush/useMesh.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useDuoTone/index.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useDuoTone/useMesh.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useFlowmap/index.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useFlowmap/useMesh.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useFogProjection/index.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useFogProjection/useMesh.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useFruid/index.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useFruid/materials/useAdvectionMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useFruid/materials/useClearMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useFruid/materials/useCurlMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useFruid/materials/useDivergenceMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useFruid/materials/useGradientSubtractMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useFruid/materials/useInitialMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useFruid/materials/usePressureMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useFruid/materials/useSplatMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useFruid/materials/useVorticityMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useFruid/useMesh.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useRipple/index.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useRipple/useMesh.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useSimpleFruid/index.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useAdvectionMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useCurlMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useDivergenceMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useInitialMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useSimpleFruid/materials/usePressureMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useVelocityMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useVorticityMaterial.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useSimpleFruid/useMesh.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useTransitionBg/index.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/useTransitionBg/useMesh.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/utils/setUniforms.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/utils/types/index.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/utils/useAddMesh.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/utils/useCamera.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/utils/useDoubleFBO.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/utils/useParams.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/utils/usePointer.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/utils/useResolution.d.ts delete mode 100644 packages/use-shader-fx/types/hooks/utils/useSingleFBO.d.ts delete mode 100644 packages/use-shader-fx/types/index.d.ts diff --git a/app/fx/Scene.tsx b/app/fx/Demo.tsx similarity index 91% rename from app/fx/Scene.tsx rename to app/fx/Demo.tsx index ff4ec577..37c071d8 100644 --- a/app/fx/Scene.tsx +++ b/app/fx/Demo.tsx @@ -9,21 +9,24 @@ import { useTransitionBg } from "@/packages/use-shader-fx/src"; import { useDuoTone } from "@/packages/use-shader-fx/src"; import { useFogProjection } from "@/packages/use-shader-fx/src"; import { useFrame, useLoader, extend, useThree } from "@react-three/fiber"; -import { MainShaderMaterial, TMainShaderUniforms } from "./ShaderMaterial"; import { usePerformanceMonitor } from "@react-three/drei"; import { useGUI } from "./gui/useGUI"; import { CONFIG } from "./config"; - -extend({ MainShaderMaterial }); +import { FxMaterial, TFxMaterial } from "./FxMaterial"; +extend({ FxMaterial }); /*=============================================== TODO* - 初期値とGUIの整理 - renderTargetをclean upさせる - cameraとか諸々clean upさせないとか〜〜 +- create kit branchつくる + + +create kit test ===============================================*/ -export const Scene = () => { +export const Demo = () => { const [bg, bg2, ripple, noise] = useLoader(THREE.TextureLoader, [ "thumbnail.jpg", "momo.jpg", @@ -31,7 +34,7 @@ export const Scene = () => { "noise.png", ]); const updateGUI = useGUI(); - const mainShaderRef = useRef(); + const fxMaterialRef = useRef(); const size = useThree((state) => state.size); const dpr = useThree((state) => state.viewport.dpr); @@ -148,11 +151,11 @@ export const Scene = () => { }); } - const main = mainShaderRef.current; - if (main) { - main.u_fx = fx; - main.u_postFx = postFx; - main.isBgActive = CONFIG.transitionBg.active; + const fxMaterial = fxMaterialRef.current; + if (fxMaterial) { + fxMaterial.u_fx = fx; + fxMaterial.u_postFx = postFx; + fxMaterial.isBgActive = CONFIG.transitionBg.active; } updateGUI(); }); @@ -160,7 +163,7 @@ export const Scene = () => { return ( - + ); }; diff --git a/app/fx/ShaderMaterial.tsx b/app/fx/FxMaterial.tsx similarity index 79% rename from app/fx/ShaderMaterial.tsx rename to app/fx/FxMaterial.tsx index cbff3b3d..b46354e3 100644 --- a/app/fx/ShaderMaterial.tsx +++ b/app/fx/FxMaterial.tsx @@ -3,21 +3,13 @@ import vertexShader from "./shader/main.vert"; import fragmentShader from "./shader/main.frag"; import { shaderMaterial } from "@react-three/drei"; -declare global { - namespace JSX { - interface IntrinsicElements { - mainShaderMaterial: any; - } - } -} - -export type TMainShaderUniforms = { +export type TFxMaterial = { u_fx: THREE.Texture | null; u_postFx: THREE.Texture; isBgActive: boolean; }; -export const MainShaderMaterial = shaderMaterial( +export const FxMaterial = shaderMaterial( { u_fx: null, u_postFx: null, @@ -26,3 +18,11 @@ export const MainShaderMaterial = shaderMaterial( vertexShader, fragmentShader ); + +declare global { + namespace JSX { + interface IntrinsicElements { + fxMaterial: any; + } + } +} diff --git a/app/fx/index.tsx b/app/fx/index.tsx index 487d35eb..628bbd10 100644 --- a/app/fx/index.tsx +++ b/app/fx/index.tsx @@ -2,7 +2,7 @@ import { Suspense, useState } from "react"; import { Canvas } from "@react-three/fiber"; -import { Scene } from "./Scene"; +import { Demo } from "./Demo"; import { Perf } from "r3f-perf"; import { PerformanceMonitor } from "@react-three/drei"; @@ -17,7 +17,7 @@ export const Fx = () => { setDpr(Math.round((0.5 + 1.5 * factor) * 10) / 10); }}> - + diff --git a/packages/use-shader-fx/build/use-shader-fx.js b/packages/use-shader-fx/build/use-shader-fx.js deleted file mode 100644 index e16cf26d..00000000 --- a/packages/use-shader-fx/build/use-shader-fx.js +++ /dev/null @@ -1,1600 +0,0 @@ -import * as t from "three"; -import { useMemo as f, useEffect as _, useRef as C, useLayoutEffect as H, useCallback as P } from "react"; -var ae = `varying vec2 vUv; - -void main() { - vUv = uv; - gl_Position = vec4(position, 1.0); -}`, ie = `precision mediump float; - -uniform sampler2D uMap; -uniform sampler2D uTexture; -uniform float uRadius; -uniform float uAlpha; -uniform float uDissipation; -uniform float uMagnification; -uniform vec2 uResolution; -uniform float uSmudge; -uniform float uAspect; -uniform vec2 uMouse; -uniform vec2 uPrevMouse; -uniform vec2 uVelocity; - -uniform float uMotionBlur; -uniform int uMotionSample; - -varying vec2 vUv; - -float isOnLine(vec2 point, vec2 start, vec2 end, float width, float aspect) { - - point.x *= aspect; - start.x *= aspect; - end.x *= aspect; - - - vec2 dir = normalize(end - start); - - vec2 n = vec2(dir.y, -dir.x); - - vec2 p0 = point - start; - - - float distToLine = abs(dot(p0, n)); - float distAlongLine = dot(p0, dir); - float totalLength = length(end - start); - - - float distFromStart = length(point - start); - float distFromEnd = length(point - end); - - bool withinLine = (distToLine < width && distAlongLine > 0.0 && distAlongLine < totalLength) || distFromStart < width || distFromEnd < width; - - return float(withinLine); -} - -vec4 createSmudge(){ - vec2 offsets[9]; - offsets[0] = vec2(-1, -1); offsets[1] = vec2( 0, -1); offsets[2] = vec2( 1, -1); - offsets[3] = vec2(-1, 0); offsets[4] = vec2( 0, 0); offsets[5] = vec2( 1, 0); - offsets[6] = vec2(-1, 1); offsets[7] = vec2( 0, 1); offsets[8] = vec2( 1, 1); - - for(int i = 0; i < 9; i++) { - offsets[i] = (offsets[i] * uSmudge) / uResolution; - } - vec4 smudgedColor = vec4(0.0); - for(int i = 0; i < 9; i++) { - smudgedColor += texture2D(uMap, vUv + offsets[i]); - } - return smudgedColor / 9.0; -} - -vec4 createMotionBlur(vec4 baseColor, vec2 velocity, float motion, int samples) { - vec4 motionBlurredColor = baseColor; - vec2 scaledVelocity = velocity * motion; - for(int i = 1; i < samples; i++) { - float t = float(i) / float(samples - 1); - vec2 offset = t * scaledVelocity / uResolution; - motionBlurredColor += texture2D(uMap, vUv + offset); - } - return motionBlurredColor / float(samples); -} - -void main() { - - vec2 st = vUv * 2.0 - 1.0; - - - vec2 velocity = uVelocity * uResolution; - - - vec4 smudgedColor = createSmudge(); - - - vec4 motionBlurredColor = createMotionBlur(smudgedColor, uVelocity, uMotionBlur,uMotionSample); - - - vec4 bufferColor = motionBlurredColor * uDissipation; - - - float modifiedRadius = uRadius + (length(velocity) * uMagnification); - modifiedRadius = max(0.0,modifiedRadius); - - - - vec3 color = vec3(1.0,1.0,1.0); - - - vec4 textureColor = texture2D(uTexture, vUv); - vec3 finalColor = mix(color, textureColor.rgb, textureColor.a); - - - float onLine = isOnLine(st, uPrevMouse, uMouse, modifiedRadius, uAspect); - - - bufferColor.rgb = mix(bufferColor.rgb, finalColor, onLine); - gl_FragColor = bufferColor; -}`; -const F = (n, u = !1) => { - const r = u ? n.width * u : n.width, e = u ? n.height * u : n.height; - return f( - () => new t.Vector2(r, e), - [r, e] - ); -}, O = (n, u, r) => { - const e = f( - () => new t.Mesh(u, r), - [u, r] - ); - return _(() => { - n.add(e); - }, [n, e]), e; -}, o = (n, u, r) => { - n.uniforms && n.uniforms[u] && r !== void 0 && r !== null ? n.uniforms[u].value = r : console.error( - `Uniform key "${u}" does not exist in the material. or "${u}" is null | undefined` - ); -}, ue = ({ - scene: n, - size: u, - dpr: r -}) => { - const e = f(() => new t.PlaneGeometry(2, 2), []), a = f( - () => new t.ShaderMaterial({ - uniforms: { - uMap: { - value: null - }, - uResolution: { value: new t.Vector2(0, 0) }, - uAspect: { value: 1 }, - uTexture: { value: new t.Texture() }, - uRadius: { value: 0 }, - uAlpha: { value: 0 }, - uSmudge: { value: 0 }, - uDissipation: { value: 0 }, - uMagnification: { value: 0 }, - uMotionBlur: { value: 0 }, - uMotionSample: { value: 10 }, - uMouse: { value: new t.Vector2(0, 0) }, - uPrevMouse: { value: new t.Vector2(0, 0) }, - uVelocity: { value: new t.Vector2(0, 0) } - }, - vertexShader: ae, - fragmentShader: ie - }), - [] - ), i = F(u, r); - return _(() => { - o(a, "uAspect", i.width / i.height), o(a, "uResolution", i.clone()); - }, [i, a]), O(n, e, a), a; -}, le = (n, u) => { - const r = u, e = n / u, [a, i] = [r * e / 2, r / 2]; - return { width: a, height: i, near: -1e3, far: 1e3 }; -}, U = (n) => { - const u = F(n), { width: r, height: e, near: a, far: i } = le( - u.x, - u.y - ); - return f( - () => new t.OrthographicCamera( - -r, - r, - e, - -e, - a, - i - ), - [r, e, a, i] - ); -}, Y = { - minFilter: t.LinearFilter, - magFilter: t.LinearFilter, - type: t.HalfFloatType, - depthBuffer: !1, - stencilBuffer: !1 -}, E = ({ - scene: n, - camera: u, - size: r, - dpr: e = !1, - isSizeUpdate: a = !1 -}) => { - const i = C(), s = F(r, e); - i.current = f( - () => new t.WebGLRenderTarget(s.x, s.y, Y), - // eslint-disable-next-line react-hooks/exhaustive-deps - [] - ), H(() => { - var l; - a && ((l = i.current) == null || l.setSize(s.x, s.y)); - }, [s, a]); - const v = P( - (l, c) => { - const d = i.current; - return l.setRenderTarget(d), c && c({ read: d.texture }), l.render(n, u), l.setRenderTarget(null), l.clear(), d.texture; - }, - [n, u] - ); - return [i.current, v]; -}, A = ({ - scene: n, - camera: u, - size: r, - dpr: e = !1, - isSizeUpdate: a = !1 -}) => { - const i = C({ - read: null, - write: null, - swap: function() { - let c = this.read; - this.read = this.write, this.write = c; - } - }), s = F(r, e), v = f(() => { - const c = new t.WebGLRenderTarget( - s.x, - s.y, - Y - ), d = new t.WebGLRenderTarget( - s.x, - s.y, - Y - ); - return { read: c, write: d }; - }, []); - i.current.read = v.read, i.current.write = v.write, H(() => { - var c, d; - a && ((c = i.current.read) == null || c.setSize(s.x, s.y), (d = i.current.write) == null || d.setSize(s.x, s.y)); - }, [s, a]); - const l = P( - (c, d) => { - var p; - const m = i.current; - return c.setRenderTarget(m.write), d && d({ - read: m.read.texture, - write: m.write.texture - }), c.render(n, u), m.swap(), c.setRenderTarget(null), c.clear(), (p = m.read) == null ? void 0 : p.texture; - }, - [n, u] - ); - return [ - { read: i.current.read, write: i.current.write }, - l - ]; -}, z = () => { - const n = C(new t.Vector2(0, 0)), u = C(new t.Vector2(0, 0)), r = C(0), e = C(new t.Vector2(0, 0)), a = C(!1); - return P((s) => { - const v = performance.now(), l = s.clone(); - r.current === 0 && (r.current = v, n.current = l); - const c = Math.max(1, v - r.current); - r.current = v, e.current.copy(l).sub(n.current).divideScalar(c); - const d = e.current.length() > 0, m = a.current ? n.current.clone() : l; - return !a.current && d && (a.current = !0), n.current = l, { - currentPointer: l, - prevPointer: m, - diffPointer: u.current.subVectors(l, m), - velocity: e.current, - isVelocityUpdate: d - }; - }, []); -}, B = (n) => { - const u = C(n), r = P((e) => { - for (const a in e) { - const i = a; - i in u.current && e[i] !== void 0 && e[i] !== null ? u.current[i] = e[i] : console.error( - `"${String( - i - )}" does not exist in the params. or "${String( - i - )}" is null | undefined` - ); - } - }, []); - return [u.current, r]; -}, Qe = ({ - size: n, - dpr: u -}) => { - const r = f(() => new t.Scene(), []), e = ue({ scene: r, size: n, dpr: u }), a = U(n), i = z(), [s, v] = A({ - scene: r, - camera: a, - size: n - }), [l, c] = B({ - texture: new t.Texture(), - radius: 0, - alpha: 0, - smudge: 0, - dissipation: 0, - magnification: 0, - motionBlur: 0, - motionSample: 10 - }); - return [ - P( - (m, p) => { - const { gl: M, pointer: g } = m; - c(p), o(e, "uTexture", l.texture), o(e, "uRadius", l.radius), o(e, "uAlpha", l.alpha), o(e, "uSmudge", l.smudge), o(e, "uDissipation", l.dissipation), o(e, "uMagnification", l.magnification), o(e, "uMotionBlur", l.motionBlur), o(e, "uMotionSample", l.motionSample); - const { currentPointer: h, prevPointer: w, velocity: V } = i(g); - return o(e, "uMouse", h), o(e, "uPrevMouse", w), o(e, "uVelocity", V), v(M, ({ read: L }) => { - o(e, "uMap", L); - }); - }, - [e, i, v, l, c] - ), - c, - { - scene: r, - material: e, - camera: a, - renderTarget: s - } - ]; -}; -var se = `varying vec2 vUv; - -void main() { - vUv = uv; - gl_Position = vec4(position, 1.0); -}`, ce = `precision mediump float; - -varying vec2 vUv; -uniform sampler2D uTexture; - -uniform vec3 uColor0; -uniform vec3 uColor1; - -void main() { - vec2 uv = vUv; - vec4 texColor = texture2D(uTexture, uv); - float grayscale = dot(texColor.rgb, vec3(0.299, 0.587, 0.114)); - vec3 duotone = mix(uColor0, uColor1, grayscale); - gl_FragColor = vec4(duotone, texColor.a); -}`; -const ve = (n) => { - const u = f(() => new t.PlaneGeometry(2, 2), []), r = f( - () => new t.ShaderMaterial({ - uniforms: { - uTexture: { value: new t.Texture() }, - uColor0: { value: new t.Color(16777215) }, - uColor1: { value: new t.Color(0) } - }, - vertexShader: se, - fragmentShader: ce - }), - [] - ); - return O(n, u, r), r; -}, et = ({ - size: n -}) => { - const u = f(() => new t.Scene(), []), r = ve(u), e = U(n), [a, i] = E({ - scene: u, - camera: e, - size: n - }), [s, v] = B({ - texture: new t.Texture(), - color0: new t.Color(16777215), - color1: new t.Color(0) - }); - return [ - P( - (c, d) => { - const { gl: m } = c; - return v(d), o(r, "uTexture", s.texture), o(r, "uColor0", s.color0), o(r, "uColor1", s.color1), i(m); - }, - [i, r, v, s] - ), - v, - { - scene: u, - material: r, - camera: e, - renderTarget: a - } - ]; -}; -var fe = `varying vec2 vUv; - -void main() { - vUv = uv; - gl_Position = vec4(position, 1.0); -}`, de = `precision mediump float; - -uniform sampler2D uMap; -uniform float uRadius; -uniform float uAlpha; -uniform float uDissipation; -uniform float uMagnification; -uniform vec2 uResolution; - -uniform float uAspect; -uniform vec2 uMouse; -uniform vec2 uVelocity; - -varying vec2 vUv; - -void main() { - - vec2 st = vUv * 2.0 - 1.0; - - vec2 vel = uVelocity * uResolution; - - - vec4 bufferColor = texture2D(uMap, vUv) * uDissipation; - - - vec3 color = vec3(vel * vec2(1, -1), 1.0 - pow(1.0 - min(1.0, length(vel)), 1.0)); - - - - vec2 nMouse = (uMouse + vec2(1.0)) * 0.5; - vec2 cursor = vUv - nMouse; - cursor.x *= uAspect; - - - float modifiedRadius = uRadius + (length(vel) * uMagnification); - modifiedRadius = max(0.0,modifiedRadius); - float finalBrush = smoothstep(modifiedRadius,0.0,length(cursor)) * uAlpha; - - - bufferColor.rgb = mix(bufferColor.rgb, color, vec3(finalBrush)); - - gl_FragColor = bufferColor; -}`; -const me = ({ - scene: n, - size: u, - dpr: r -}) => { - const e = f(() => new t.PlaneGeometry(2, 2), []), a = f( - () => new t.ShaderMaterial({ - uniforms: { - uMap: { value: null }, - uResolution: { value: new t.Vector2(0, 0) }, - uAspect: { value: 1 }, - uRadius: { value: 0 }, - uAlpha: { value: 0 }, - uDissipation: { value: 0 }, - uMagnification: { value: 0 }, - uMouse: { value: new t.Vector2(0, 0) }, - uVelocity: { value: new t.Vector2(0, 0) } - }, - vertexShader: fe, - fragmentShader: de - }), - [] - ), i = F(u, r); - return _(() => { - o(a, "uAspect", i.width / i.height), o(a, "uResolution", i.clone()); - }, [i, a]), O(n, e, a), a; -}, tt = ({ - size: n, - dpr: u -}) => { - const r = f(() => new t.Scene(), []), e = me({ scene: r, size: n, dpr: u }), a = U(n), i = z(), [s, v] = A({ - scene: r, - camera: a, - size: n - }), [l, c] = B({ - radius: 0, - magnification: 0, - alpha: 0, - dissipation: 0 - }); - return [ - P( - (m, p) => { - const { gl: M, pointer: g } = m; - c(p), o(e, "uRadius", l.radius), o(e, "uAlpha", l.alpha), o(e, "uDissipation", l.dissipation), o(e, "uMagnification", l.magnification); - const { currentPointer: h, velocity: w } = i(g); - return o(e, "uMouse", h), o(e, "uVelocity", w), v(M, ({ read: T }) => { - o(e, "uMap", T); - }); - }, - [e, i, v, l, c] - ), - c, - { - scene: r, - material: e, - camera: a, - renderTarget: s - } - ]; -}; -var pe = `varying vec2 vUv; - -void main() { - vUv = uv; - gl_Position = vec4(position, 1.0); -}`, ge = `precision mediump float; - -varying vec2 vUv; -uniform float uTime; -uniform sampler2D uTexture; -uniform float timeStrength; -uniform float distortionStrength; -uniform float fogEdge0; -uniform float fogEdge1; -uniform vec3 fogColor; -uniform int noiseOct; -uniform int fbmOct; - -const float per = 0.5; -const float PI = 3.1415926; - -float interpolate(float a, float b, float x){ - float f = (1.0 - cos(x * PI)) * 0.5; - return a * (1.0 - f) + b * f; -} - -float rnd(vec2 p){ - return fract(sin(dot(p ,vec2(12.9898,78.233))) * 43758.5453); -} - -float irnd(vec2 p){ - vec2 i = floor(p); - vec2 f = fract(p); - vec4 v = vec4(rnd(vec2(i.x,i.y)),rnd(vec2(i.x + 1.0,i.y)),rnd(vec2(i.x,i.y + 1.0)),rnd(vec2(i.x + 1.0, i.y + 1.0))); - return interpolate(interpolate(v.x, v.y, f.x), interpolate(v.z, v.w, f.x), f.y); -} - -float noise(vec2 p, float time){ - float t = 0.0; - for(int i = 0; i < noiseOct; i++){ - float freq = pow(2.0, float(i)); - float amp = pow(per, float(noiseOct - i)); - t += irnd(vec2(p.y / freq + time, p.x / freq + time)) * amp; - } - return t; -} - -float fbm(vec2 x, float time) { - float v = 0.0; - float a = 0.5; - vec2 shift = vec2(100); - mat2 rot = mat2(cos(0.5), sin(0.5), -sin(0.5), cos(0.50)); - float sign = 1.0; - for (int i = 0; i < fbmOct; ++i) { - v += a * noise(x, time * sign); - x = rot * x * 2.0 + shift; - a *= 0.5; - sign *= -1.0; - } - return v; -} - -void main() { - vec2 uv = vUv; - - float noiseMap = fbm(gl_FragCoord.xy ,uTime * timeStrength); - - float noiseTextureMap = noiseMap*2.0-1.0; - uv += noiseTextureMap * distortionStrength; - vec3 textureMap = texture2D(uTexture, uv).rgb; - - float edge0 = fogEdge0; - float edge1 = fogEdge1; - float blendValue = smoothstep(edge0, edge1, noiseMap); - - vec3 outputColor = blendValue * fogColor + (1.0 - blendValue) * textureMap; - gl_FragColor = vec4(outputColor, 1.0); -}`; -const xe = (n) => { - const u = f(() => new t.PlaneGeometry(2, 2), []), r = f( - () => new t.ShaderMaterial({ - uniforms: { - uTime: { value: 0 }, - uTexture: { value: new t.Texture() }, - timeStrength: { value: 0 }, - distortionStrength: { value: 0 }, - fogEdge0: { value: 0 }, - fogEdge1: { value: 0.9 }, - fogColor: { value: new t.Color(16777215) }, - noiseOct: { value: 8 }, - fbmOct: { value: 3 } - }, - vertexShader: pe, - fragmentShader: ge - }), - [] - ); - return O(n, u, r), r; -}, nt = ({ - size: n -}) => { - const u = f(() => new t.Scene(), []), r = xe(u), e = U(n), [a, i] = E({ - scene: u, - camera: e, - size: n - }), [s, v] = B({ - texture: new t.Texture(), - timeStrength: 0, - distortionStrength: 0, - fogEdge0: 0, - fogEdge1: 0.9, - fogColor: new t.Color(16777215), - noiseOct: 8, - fbmOct: 3 - }); - return [ - P( - (c, d) => { - const { gl: m, clock: p } = c; - return v(d), o(r, "uTime", p.getElapsedTime()), o(r, "uTexture", s.texture), o(r, "timeStrength", s.timeStrength), o(r, "distortionStrength", s.distortionStrength), o(r, "fogEdge0", s.fogEdge0), o(r, "fogEdge1", s.fogEdge1), o(r, "fogColor", s.fogColor), o(r, "noiseOct", s.noiseOct), o(r, "fbmOct", s.fbmOct), i(m); - }, - [i, r, v, s] - ), - v, - { - scene: u, - material: r, - camera: e, - renderTarget: a - } - ]; -}; -var D = `precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -varying vec2 vL; -varying vec2 vR; -varying vec2 vT; -varying vec2 vB; -uniform vec2 texelSize; - -void main () { - vUv = uv; - vL = vUv - vec2(texelSize.x, 0.0); - vR = vUv + vec2(texelSize.x, 0.0); - vT = vUv + vec2(0.0, texelSize.y); - vB = vUv - vec2(0.0, texelSize.y); - gl_Position = vec4(position, 1.0); -}`, ye = `precision mediump float; - -void main(){ - gl_FragColor = vec4(0.0); -}`; -const Me = () => f( - () => new t.ShaderMaterial({ - vertexShader: D, - fragmentShader: ye, - depthTest: !1, - depthWrite: !1 - }), - [] -); -var he = `precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -uniform sampler2D uVelocity; -uniform sampler2D uSource; -uniform vec2 texelSize; -uniform float dt; -uniform float dissipation; - -void main () { - vec2 coord = vUv - dt * texture2D(uVelocity, vUv).xy * texelSize; - gl_FragColor = dissipation * texture2D(uSource, coord); - gl_FragColor.a = 1.0; -}`; -const Te = () => f( - () => new t.ShaderMaterial({ - uniforms: { - uVelocity: { value: new t.Texture() }, - uSource: { value: new t.Texture() }, - texelSize: { value: new t.Vector2() }, - dt: { value: 0 }, - dissipation: { value: 0 } - }, - vertexShader: D, - fragmentShader: he - }), - [] -); -var we = `precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -varying vec2 vL; -varying vec2 vR; -varying vec2 vT; -varying vec2 vB; -uniform sampler2D uVelocity; - -vec2 sampleVelocity (in vec2 uv) { - vec2 multiplier = vec2(1.0, 1.0); - if (uv.x < 0.0) { uv.x = 0.0; multiplier.x = -1.0; } - if (uv.x > 1.0) { uv.x = 1.0; multiplier.x = -1.0; } - if (uv.y < 0.0) { uv.y = 0.0; multiplier.y = -1.0; } - if (uv.y > 1.0) { uv.y = 1.0; multiplier.y = -1.0; } - return multiplier * texture2D(uVelocity, uv).xy; -} - -void main () { - float L = sampleVelocity(vL).x; - float R = sampleVelocity(vR).x; - float T = sampleVelocity(vT).y; - float B = sampleVelocity(vB).y; - float div = 0.5 * (R - L + T - B); - gl_FragColor = vec4(div, 0.0, 0.0, 1.0); -}`; -const Se = () => f( - () => new t.ShaderMaterial({ - uniforms: { - uVelocity: { value: null }, - texelSize: { value: new t.Vector2() } - }, - vertexShader: D, - fragmentShader: we - }), - [] -); -var Pe = `precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -varying vec2 vL; -varying vec2 vR; -varying vec2 vT; -varying vec2 vB; -uniform sampler2D uPressure; -uniform sampler2D uDivergence; - -vec2 boundary (in vec2 uv) { - uv = min(max(uv, 0.0), 1.0); - return uv; -} - -void main () { - float L = texture2D(uPressure, boundary(vL)).x; - float R = texture2D(uPressure, boundary(vR)).x; - float T = texture2D(uPressure, boundary(vT)).x; - float B = texture2D(uPressure, boundary(vB)).x; - float C = texture2D(uPressure, vUv).x; - float divergence = texture2D(uDivergence, vUv).x; - float pressure = (L + R + B + T - divergence) * 0.25; - gl_FragColor = vec4(pressure, 0.0, 0.0, 1.0); -}`; -const Ce = () => f( - () => new t.ShaderMaterial({ - uniforms: { - uPressure: { value: null }, - uDivergence: { value: null }, - texelSize: { value: new t.Vector2() } - }, - vertexShader: D, - fragmentShader: Pe - }), - [] -); -var Ve = `precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -varying vec2 vL; -varying vec2 vR; -varying vec2 vT; -varying vec2 vB; -uniform sampler2D uVelocity; - -void main () { - float L = texture2D(uVelocity, vL).y; - float R = texture2D(uVelocity, vR).y; - float T = texture2D(uVelocity, vT).x; - float B = texture2D(uVelocity, vB).x; - float vorticity = R - L - T + B; - gl_FragColor = vec4(vorticity, 0.0, 0.0, 1.0); -}`; -const be = () => f( - () => new t.ShaderMaterial({ - uniforms: { - uVelocity: { value: null }, - texelSize: { value: new t.Vector2() } - }, - vertexShader: D, - fragmentShader: Ve - }), - [] -); -var Re = `precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -varying vec2 vT; -varying vec2 vB; -uniform sampler2D uVelocity; -uniform sampler2D uCurl; -uniform float curl; -uniform float dt; - -void main () { - float T = texture2D(uCurl, vT).x; - float B = texture2D(uCurl, vB).x; - float C = texture2D(uCurl, vUv).x; - vec2 force = vec2(abs(T) - abs(B), 0.0); - force *= 1.0 / length(force + 0.00001) * curl * C; - vec2 vel = texture2D(uVelocity, vUv).xy; - gl_FragColor = vec4(vel + force * dt, 0.0, 1.0); -}`; -const _e = () => f( - () => new t.ShaderMaterial({ - uniforms: { - uVelocity: { value: null }, - uCurl: { value: null }, - curl: { value: 0 }, - dt: { value: 0 }, - texelSize: { value: new t.Vector2() } - }, - vertexShader: D, - fragmentShader: Re - }), - [] -); -var De = `precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -uniform sampler2D uTexture; -uniform float value; - -void main () { - gl_FragColor = value * texture2D(uTexture, vUv); -}`; -const Fe = () => f( - () => new t.ShaderMaterial({ - uniforms: { - uTexture: { value: new t.Texture() }, - value: { value: 0 }, - texelSize: { value: new t.Vector2() } - }, - vertexShader: D, - fragmentShader: De - }), - [] -); -var Ue = `precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -varying vec2 vL; -varying vec2 vR; -varying vec2 vT; -varying vec2 vB; -uniform sampler2D uPressure; -uniform sampler2D uVelocity; - -vec2 boundary (in vec2 uv) { - uv = min(max(uv, 0.0), 1.0); - return uv; -} - -void main () { - float L = texture2D(uPressure, boundary(vL)).x; - float R = texture2D(uPressure, boundary(vR)).x; - float T = texture2D(uPressure, boundary(vT)).x; - float B = texture2D(uPressure, boundary(vB)).x; - vec2 velocity = texture2D(uVelocity, vUv).xy; - velocity.xy -= vec2(R - L, T - B); - gl_FragColor = vec4(velocity, 0.0, 1.0); -}`; -const Be = () => f( - () => new t.ShaderMaterial({ - uniforms: { - uPressure: { value: new t.Texture() }, - uVelocity: { value: new t.Texture() }, - texelSize: { value: new t.Vector2() } - }, - vertexShader: D, - fragmentShader: Ue - }), - [] -); -var Le = `precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -uniform sampler2D uTarget; -uniform float aspectRatio; -uniform vec3 color; -uniform vec2 point; -uniform float radius; - -void main () { - vec2 nPoint = (point + vec2(1.0)) * 0.5; - vec2 p = vUv - nPoint.xy; - p.x *= aspectRatio; - vec3 splat = exp(-dot(p, p) / radius) * color; - vec3 base = texture2D(uTarget, vUv).xyz; - gl_FragColor = vec4(base + splat, 1.0); -}`; -const Oe = () => f( - () => new t.ShaderMaterial({ - uniforms: { - uTarget: { value: new t.Texture() }, - aspectRatio: { value: 0 }, - color: { value: new t.Vector3() }, - point: { value: new t.Vector2() }, - radius: { value: 0 }, - texelSize: { value: new t.Vector2() } - }, - vertexShader: D, - fragmentShader: Le - }), - [] -), $e = ({ - scene: n, - size: u, - dpr: r -}) => { - const e = f(() => new t.PlaneGeometry(2, 2), []), a = Me(), i = a.clone(), s = be(), v = _e(), l = Te(), c = Se(), d = Ce(), m = Fe(), p = Be(), M = Oe(), g = f( - () => ({ - vorticityMaterial: v, - curlMaterial: s, - advectionMaterial: l, - divergenceMaterial: c, - pressureMaterial: d, - clearMaterial: m, - gradientSubtractMaterial: p, - splatMaterial: M - }), - [ - v, - s, - l, - c, - d, - m, - p, - M - ] - ), h = F(u, r); - _(() => { - o( - g.splatMaterial, - "aspectRatio", - h.x / h.y - ); - for (const T of Object.values(g)) - o( - T, - "texelSize", - new t.Vector2(1 / h.x, 1 / h.y) - ); - }, [h, g]); - const w = O(n, e, a); - _(() => { - a.dispose(), w.material = i; - }, [a, w, i]); - const V = P( - (T) => { - w.material = T, w.material.needsUpdate = !0; - }, - [w] - ); - return [g, V]; -}, rt = ({ - size: n, - dpr: u -}) => { - const r = f(() => new t.Scene(), []), [e, a] = $e({ scene: r, size: n, dpr: u }), i = U(n), s = z(), v = f( - () => ({ - scene: r, - camera: i, - size: n, - dpr: u - }), - [r, i, n, u] - ), [l, c] = A(v), [d, m] = A(v), [p, M] = E(v), [g, h] = E(v), [w, V] = A(v), T = C(0), L = C(new t.Vector2(0, 0)), b = C(new t.Vector3(0, 0, 0)), [S, x] = B({ - density_dissipation: 0, - velocity_dissipation: 0, - velocity_acceleration: 0, - pressure_dissipation: 0, - pressure_iterations: 20, - curl_strength: 0, - splat_radius: 1e-3, - fruid_color: new t.Vector3(1, 1, 1) - }); - return [ - P( - (K, N) => { - const { gl: R, pointer: Z, clock: G, size: j } = K; - x(N), T.current === 0 && (T.current = G.getElapsedTime()); - const W = Math.min( - (G.getElapsedTime() - T.current) / 3, - 0.02 - ); - T.current = G.getElapsedTime(); - const X = c(R, ({ read: y }) => { - a(e.advectionMaterial), o(e.advectionMaterial, "uVelocity", y), o(e.advectionMaterial, "uSource", y), o(e.advectionMaterial, "dt", W), o( - e.advectionMaterial, - "dissipation", - S.velocity_dissipation - ); - }), J = m(R, ({ read: y }) => { - a(e.advectionMaterial), o(e.advectionMaterial, "uVelocity", X), o(e.advectionMaterial, "uSource", y), o( - e.advectionMaterial, - "dissipation", - S.density_dissipation - ); - }), { currentPointer: Q, diffPointer: ee, isVelocityUpdate: te, velocity: ne } = s(Z); - te && (c(R, ({ read: y }) => { - a(e.splatMaterial), o(e.splatMaterial, "uTarget", y), o(e.splatMaterial, "point", Q); - const $ = ee.multiply( - L.current.set(j.width, j.height).multiplyScalar(S.velocity_acceleration) - ); - o( - e.splatMaterial, - "color", - b.current.set($.x, $.y, 1) - ), o( - e.splatMaterial, - "radius", - S.splat_radius - ); - }), m(R, ({ read: y }) => { - a(e.splatMaterial), o(e.splatMaterial, "uTarget", y); - const $ = typeof S.fruid_color == "function" ? S.fruid_color(ne) : S.fruid_color; - o(e.splatMaterial, "color", $); - })); - const re = M(R, () => { - a(e.curlMaterial), o(e.curlMaterial, "uVelocity", X); - }); - c(R, ({ read: y }) => { - a(e.vorticityMaterial), o(e.vorticityMaterial, "uVelocity", y), o(e.vorticityMaterial, "uCurl", re), o( - e.vorticityMaterial, - "curl", - S.curl_strength - ), o(e.vorticityMaterial, "dt", W); - }); - const oe = h(R, () => { - a(e.divergenceMaterial), o(e.divergenceMaterial, "uVelocity", X); - }); - V(R, ({ read: y }) => { - a(e.clearMaterial), o(e.clearMaterial, "uTexture", y), o( - e.clearMaterial, - "value", - S.pressure_dissipation - ); - }), a(e.pressureMaterial), o(e.pressureMaterial, "uDivergence", oe); - let k; - for (let y = 0; y < S.pressure_iterations; y++) - k = V(R, ({ read: $ }) => { - o(e.pressureMaterial, "uPressure", $); - }); - return c(R, ({ read: y }) => { - a(e.gradientSubtractMaterial), o( - e.gradientSubtractMaterial, - "uPressure", - k - ), o(e.gradientSubtractMaterial, "uVelocity", y); - }), J; - }, - [ - e, - a, - M, - m, - h, - s, - V, - c, - x, - S - ] - ), - x, - { - scene: r, - materials: e, - camera: i, - renderTarget: { - velocity: l, - density: d, - curl: p, - divergence: g, - pressure: w - } - } - ]; -}, Ae = ({ scale: n, max: u, texture: r, scene: e }) => { - const a = C([]), i = f( - () => new t.PlaneGeometry(n, n), - [n] - ), s = f( - () => new t.MeshBasicMaterial({ - map: r ?? null, - transparent: !0, - blending: t.AdditiveBlending, - depthTest: !1, - depthWrite: !1 - }), - [r] - ); - return _(() => { - for (let v = 0; v < u; v++) { - const l = new t.Mesh(i.clone(), s.clone()); - l.rotateZ(2 * Math.PI * Math.random()), l.visible = !1, e.add(l), a.current.push(l); - } - }, [i, s, e, u]), a.current; -}, ot = ({ - texture: n, - scale: u = 64, - max: r = 100, - size: e -}) => { - const a = f(() => new t.Scene(), []), i = Ae({ - scale: u, - max: r, - texture: n, - scene: a - }), s = U(e), v = z(), [l, c] = E({ - scene: a, - camera: s, - size: e - }), [d, m] = B({ - frequency: 0.01, - rotation: 0.01, - fadeout_speed: 0.9, - scale: 0.15, - alpha: 0.6 - }), p = C(0); - return [ - P( - (g, h) => { - const { gl: w, pointer: V, size: T } = g; - m(h); - const { currentPointer: L, diffPointer: b } = v(V); - if (d.frequency < b.length()) { - const x = i[p.current]; - x.visible = !0, x.position.set( - L.x * (T.width / 2), - L.y * (T.height / 2), - 0 - ), x.scale.x = x.scale.y = 0, x.material.opacity = d.alpha, p.current = (p.current + 1) % r; - } - return i.forEach((x) => { - if (x.visible) { - const q = x.material; - x.rotation.z += d.rotation, q.opacity *= d.fadeout_speed, x.scale.x = d.fadeout_speed * x.scale.x + d.scale, x.scale.y = x.scale.x, q.opacity < 2e-3 && (x.visible = !1); - } - }), c(w); - }, - [c, i, v, r, d, m] - ), - m, - { - scene: a, - camera: s, - meshArr: i, - renderTarget: l - } - ]; -}; -var I = `varying vec2 vUv; - -void main() { - vUv = uv; - gl_Position = vec4(position, 1.0); -}`, Ee = `precision mediump float; - -void main(){ - gl_FragColor = vec4(0.0); -}`; -const ze = () => f( - () => new t.ShaderMaterial({ - vertexShader: I, - fragmentShader: Ee, - depthTest: !1, - depthWrite: !1 - }), - [] -); -var Ie = `precision highp float; - -uniform float viscosity; -uniform float forceRadius; -uniform float forceCoefficient; -uniform vec2 resolution; -uniform sampler2D dataTex; -uniform vec2 pointerPos; -uniform vec2 beforePointerPos; - -#pragma glslify: map = require('./map.glsl') -#pragma glslify: samplePressure = require('./samplePressure.glsl') -#pragma glslify: sampleVelocity = require('./sampleVelocity.glsl') - -varying vec2 vUv; - -void main(){ - vec2 r = resolution; - vec2 uv = gl_FragCoord.xy / r; - vec4 data = texture2D(dataTex, uv); - vec2 v = data.xy; - - vec2 offsetX = vec2(1.0, 0.0); - vec2 offsetY = vec2(0.0, 1.0); - - - float pLeft = samplePressure(dataTex, (gl_FragCoord.xy - offsetX) / r, r); - float pRight = samplePressure(dataTex, (gl_FragCoord.xy + offsetX) / r, r); - float pTop = samplePressure(dataTex, (gl_FragCoord.xy - offsetY) / r, r); - float pBottom = samplePressure(dataTex, (gl_FragCoord.xy + offsetY) / r, r); - - - vec2 mPos = 0.5 * (pointerPos + 1.0) * r; - vec2 mPPos = 0.5 * (beforePointerPos + 1.0) * r; - vec2 mouseV = mPos - mPPos; - float len = length(mPos - uv * r) / forceRadius; - float d = clamp(1.0 - len, 0.0, 1.0) * length(mouseV) * forceCoefficient; - vec2 mforce = d * normalize(mPos - uv * r + mouseV); - - v += vec2(pRight - pLeft, pBottom - pTop) * 0.5; - v += mforce; - v *= viscosity; - - gl_FragColor = vec4(v, data.zw); -}`; -const qe = () => f( - () => new t.ShaderMaterial({ - uniforms: { - resolution: { value: new t.Vector2() }, - dataTex: { value: null }, - pointerPos: { value: null }, - beforePointerPos: { value: null }, - viscosity: { value: 0 }, - forceRadius: { value: 0 }, - forceCoefficient: { value: 0 } - }, - vertexShader: I, - fragmentShader: Ie - }), - [] -); -var Ge = `precision highp float; - -uniform float attenuation; -uniform vec2 resolution; -uniform sampler2D dataTex; - -#pragma glslify: sampleVelocity = require('./sampleVelocity.glsl') -#pragma glslify: samplePressure = require('./samplePressure.glsl') - -varying vec2 vUv; - -vec2 bilerpVelocity(sampler2D tex, vec2 p, vec2 resolution) { - vec4 ij; - ij.xy = floor(p - 0.5) + 0.5; - ij.zw = ij.xy + 1.0; - - vec4 uv = ij / resolution.xyxy; - vec2 d11 = sampleVelocity(tex, uv.xy, resolution); - vec2 d21 = sampleVelocity(tex, uv.zy, resolution); - vec2 d12 = sampleVelocity(tex, uv.xw, resolution); - vec2 d22 = sampleVelocity(tex, uv.zw, resolution); - - vec2 a = p - ij.xy; - - return mix(mix(d11, d21, a.x), mix(d12, d22, a.x), a.y); -} - -void main(){ - vec2 r = resolution; - vec2 p = gl_FragCoord.xy - sampleVelocity(dataTex, gl_FragCoord.xy / r, r); - - gl_FragColor = vec4(bilerpVelocity(dataTex, p, r) * attenuation, samplePressure(dataTex, gl_FragCoord.xy / r, r), 0.0); -}`; -const Xe = () => f( - () => new t.ShaderMaterial({ - uniforms: { - resolution: { value: new t.Vector2(0, 0) }, - dataTex: { value: null }, - attenuation: { value: 0 } - }, - vertexShader: I, - fragmentShader: Ge - }), - [] -); -var Ye = `precision highp float; - -uniform vec2 resolution; -uniform sampler2D dataTex; - -#pragma glslify: sampleVelocity = require('./sampleVelocity.glsl') - -void main(){ - vec2 r = resolution; - vec4 data = texture2D(dataTex, gl_FragCoord.xy / r); - - vec2 offsetX = vec2(1.0, 0.0); - vec2 offsetY = vec2(0.0, 1.0); - - - vec2 vLeft = sampleVelocity(dataTex, (gl_FragCoord.xy - offsetX) / r, r); - vec2 vRight = sampleVelocity(dataTex, (gl_FragCoord.xy + offsetX) / r, r); - vec2 vTop = sampleVelocity(dataTex, (gl_FragCoord.xy - offsetY) / r, r); - vec2 vBottom = sampleVelocity(dataTex, (gl_FragCoord.xy + offsetY) / r, r); - - float divergence = ((vRight.x - vLeft.x) + (vBottom.y - vTop.y)) * 0.5; - - gl_FragColor = vec4(data.xy, data.z, divergence); - -}`; -const je = () => f( - () => new t.ShaderMaterial({ - uniforms: { - resolution: { value: new t.Vector2() }, - dataTex: { value: null } - }, - vertexShader: I, - fragmentShader: Ye - }), - [] -); -var We = `precision highp float; - -uniform float alpha; -uniform float beta; -uniform vec2 resolution; -uniform sampler2D dataTex; - -#pragma glslify: samplePressure = require('./samplePressure.glsl') - -void main(){ - vec2 r = resolution; - vec4 data = texture2D(dataTex, gl_FragCoord.xy / r); - - - float pLeft = samplePressure(dataTex, (gl_FragCoord.xy - vec2(1.0, 0.0)) / r, r); - float pRight = samplePressure(dataTex, (gl_FragCoord.xy + vec2(1.0, 0.0)) / r, r); - float pTop = samplePressure(dataTex, (gl_FragCoord.xy - vec2(0.0, 1.0)) / r, r); - float pBottom = samplePressure(dataTex, (gl_FragCoord.xy + vec2(0.0, 1.0)) / r, r); - - float divergence = data.w; - float pressure = (divergence * alpha + (pLeft + pRight + pTop + pBottom)) * 0.25 * beta; - gl_FragColor = vec4(data.xy, pressure, divergence); -}`; -const ke = () => f( - () => new t.ShaderMaterial({ - uniforms: { - resolution: { value: new t.Vector2() }, - dataTex: { value: null }, - alpha: { value: 0 }, - beta: { value: 0 } - }, - vertexShader: I, - fragmentShader: We - }), - [] -), He = ({ - scene: n, - size: u, - dpr: r -}) => { - const e = f(() => new t.PlaneGeometry(2, 2), []), a = ze(), i = a.clone(), s = qe(), v = Xe(), l = je(), c = ke(), d = f( - () => ({ - velocityMaterial: s, - advectionMaterial: v, - divergenceMaterial: l, - pressureMaterial: c - }), - [ - s, - v, - l, - c - ] - ), m = F(u, r); - _(() => { - for (const g of Object.values(d)) - o(g, "resolution", m); - }, [m, d]); - const p = O(n, e, a); - _(() => { - a.dispose(), p.material = i; - }, [a, p, i]); - const M = P( - (g) => { - p.material = g, p.material.needsUpdate = !0; - }, - [p] - ); - return [d, M]; -}, at = ({ - size: n, - dpr: u -}) => { - const r = f(() => new t.Scene(), []), [e, a] = He({ scene: r, size: n, dpr: u }), i = U(n), s = z(), [v, l] = A({ - scene: r, - camera: i, - size: n, - isSizeUpdate: !0 - }), [c, d] = B({ - pressure_iterations: 20, - attenuation: 1, - alpha: 1, - beta: 1, - viscosity: 0.99, - forceRadius: 90, - forceCoefficient: 1 - }); - return [ - P( - (p, M) => { - const { gl: g, pointer: h } = p; - d(M), o( - e.advectionMaterial, - "attenuation", - c.attenuation - ), o(e.pressureMaterial, "alpha", c.alpha), o(e.pressureMaterial, "beta", c.beta), o(e.velocityMaterial, "viscosity", c.viscosity), o( - e.velocityMaterial, - "forceRadius", - c.forceRadius - ), o( - e.velocityMaterial, - "forceCoefficient", - c.forceCoefficient - ), l(g, ({ read: b }) => { - a(e.divergenceMaterial), o(e.divergenceMaterial, "dataTex", b); - }); - const w = c.pressure_iterations; - for (let b = 0; b < w; b++) - l(g, ({ read: S }) => { - a(e.pressureMaterial), o(e.pressureMaterial, "dataTex", S); - }); - const { currentPointer: V, prevPointer: T } = s(h); - return o(e.velocityMaterial, "pointerPos", V), o( - e.velocityMaterial, - "beforePointerPos", - T - ), l(g, ({ read: b }) => { - a(e.velocityMaterial), o(e.velocityMaterial, "dataTex", b); - }), l(g, ({ read: b }) => { - a(e.advectionMaterial), o(e.advectionMaterial, "dataTex", b); - }); - }, - [ - e, - a, - s, - l, - d, - c - ] - ), - d, - { - scene: r, - materials: e, - camera: i, - renderTarget: v - } - ]; -}; -var Ke = `varying vec2 vUv; - -void main() { - vUv = uv; - gl_Position = vec4(position, 1.0); -}`, Ne = `precision mediump float; - -varying vec2 vUv; -uniform vec2 uResolution; -uniform vec2 uImageResolution; - -uniform sampler2D uTexture0; -uniform sampler2D uTexture1; -uniform sampler2D noise; -uniform float noiseStrength; -uniform float progress; -uniform float dirX; -uniform float dirY; - -void main() { - vec2 bgRatio=vec2( - min((uResolution.x/uResolution.y)/(uImageResolution.x/uImageResolution.y),1.), - min((uResolution.y/uResolution.x)/(uImageResolution.y/uImageResolution.x),1.) - ); - vec2 uv=vec2( - vUv.x*bgRatio.x+(1.-bgRatio.x)*.5, - vUv.y*bgRatio.y+(1.-bgRatio.y)*.5 - ); - - - vec2 noiseMap = texture2D(noise, uv).rg; - noiseMap=noiseMap*2.0-1.0; - uv += noiseMap * noiseStrength; - - - vec2 centeredUV = uv - vec2(0.5); - - - float xOffsetTexture0 = 0.5 - dirX * progress; - float yOffsetTexture0 = 0.5 - dirY * progress; - vec2 samplePosTexture0 = vec2(xOffsetTexture0, yOffsetTexture0) + centeredUV; - - - float xOffsetTexture1 = 0.5 + dirX * (1.0 - progress); - float yOffsetTexture1 = 0.5 + dirY * (1.0 - progress); - vec2 samplePosTexture1 = vec2(xOffsetTexture1, yOffsetTexture1) + centeredUV; - - vec4 color0 = texture2D(uTexture0, samplePosTexture0); - vec4 color1 = texture2D(uTexture1, samplePosTexture1); - - gl_FragColor = mix(color0, color1, progress); - -}`; -const Ze = ({ - scene: n, - size: u, - dpr: r -}) => { - const e = f(() => new t.PlaneGeometry(2, 2), []), a = f( - () => new t.ShaderMaterial({ - uniforms: { - uResolution: { value: new t.Vector2() }, - uImageResolution: { value: new t.Vector2() }, - uTexture0: { value: new t.Texture() }, - uTexture1: { value: new t.Texture() }, - noise: { value: new t.Texture() }, - noiseStrength: { value: 0 }, - progress: { value: 0 }, - dirX: { value: 0 }, - dirY: { value: 0 } - }, - vertexShader: Ke, - fragmentShader: Ne - }), - [] - ), i = F(u, r); - return _(() => { - a.uniforms.uResolution.value = i.clone(); - }, [i, a]), O(n, e, a), a; -}, it = ({ - size: n, - dpr: u -}) => { - const r = f(() => new t.Scene(), []), e = Ze({ scene: r, size: n, dpr: u }), a = U(n), [i, s] = E({ - scene: r, - camera: a, - dpr: u, - size: n, - isSizeUpdate: !0 - }), [v, l] = B({ - texture0: new t.Texture(), - texture1: new t.Texture(), - imageResolution: new t.Vector2(0, 0), - noise: new t.Texture(), - noiseStrength: 0, - progress: 0, - dir: new t.Vector2(0, 0) - }); - return [ - P( - (d, m) => { - const { gl: p } = d; - return l(m), o(e, "uTexture0", v.texture0), o(e, "uTexture1", v.texture1), o(e, "uImageResolution", v.imageResolution), o(e, "noise", v.noise), o(e, "noiseStrength", v.noiseStrength), o(e, "progress", v.progress), o(e, "dirX", v.dir.x), o(e, "dirY", v.dir.y), s(p); - }, - [s, e, v, l] - ), - l, - { - scene: r, - material: e, - camera: a, - renderTarget: i - } - ]; -}; -export { - Qe as useBrush, - et as useDuoTone, - tt as useFlowmap, - nt as useFogProjection, - rt as useFruid, - ot as useRipple, - at as useSimpleFruid, - it as useTransitionBg -}; -//# sourceMappingURL=use-shader-fx.js.map diff --git a/packages/use-shader-fx/build/use-shader-fx.js.map b/packages/use-shader-fx/build/use-shader-fx.js.map deleted file mode 100644 index bb259ab3..00000000 --- a/packages/use-shader-fx/build/use-shader-fx.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"use-shader-fx.js","sources":["../src/hooks/useBrush/shader/main.vert","../src/hooks/useBrush/shader/main.frag","../src/hooks/utils/useResolution.ts","../src/hooks/utils/useAddMesh.ts","../src/hooks/utils/setUniforms.ts","../src/hooks/useBrush/useMesh.ts","../src/hooks/utils/useCamera.ts","../src/hooks/utils/useSingleFBO.ts","../src/hooks/utils/useDoubleFBO.ts","../src/hooks/utils/usePointer.ts","../src/hooks/utils/useParams.ts","../src/hooks/useBrush/index.ts","../src/hooks/useDuoTone/shader/main.vert","../src/hooks/useDuoTone/shader/main.frag","../src/hooks/useDuoTone/useMesh.ts","../src/hooks/useDuoTone/index.ts","../src/hooks/useFlowmap/shader/main.vert","../src/hooks/useFlowmap/shader/main.frag","../src/hooks/useFlowmap/useMesh.ts","../src/hooks/useFlowmap/index.ts","../src/hooks/useFogProjection/shader/main.vert","../src/hooks/useFogProjection/shader/main.frag","../src/hooks/useFogProjection/useMesh.ts","../src/hooks/useFogProjection/index.ts","../src/hooks/useFruid/shaders/main.vert","../src/hooks/useFruid/shaders/init.frag","../src/hooks/useFruid/materials/useInitialMaterial.ts","../src/hooks/useFruid/shaders/advection.frag","../src/hooks/useFruid/materials/useAdvectionMaterial.ts","../src/hooks/useFruid/shaders/divergence.frag","../src/hooks/useFruid/materials/useDivergenceMaterial.ts","../src/hooks/useFruid/shaders/pressure.frag","../src/hooks/useFruid/materials/usePressureMaterial.ts","../src/hooks/useFruid/shaders/curl.frag","../src/hooks/useFruid/materials/useCurlMaterial.ts","../src/hooks/useFruid/shaders/vorticity.frag","../src/hooks/useFruid/materials/useVorticityMaterial.ts","../src/hooks/useFruid/shaders/clear.frag","../src/hooks/useFruid/materials/useClearMaterial.ts","../src/hooks/useFruid/shaders/gradientSubtract.frag","../src/hooks/useFruid/materials/useGradientSubtractMaterial.ts","../src/hooks/useFruid/shaders/splat.frag","../src/hooks/useFruid/materials/useSplatMaterial.ts","../src/hooks/useFruid/useMesh.ts","../src/hooks/useFruid/index.ts","../src/hooks/useRipple/useMesh.ts","../src/hooks/useRipple/index.ts","../src/hooks/useSimpleFruid/shaders/main.vert","../src/hooks/useSimpleFruid/shaders/init.frag","../src/hooks/useSimpleFruid/materials/useInitialMaterial.ts","../src/hooks/useSimpleFruid/shaders/velocity.frag","../src/hooks/useSimpleFruid/materials/useVelocityMaterial.ts","../src/hooks/useSimpleFruid/shaders/advection.frag","../src/hooks/useSimpleFruid/materials/useAdvectionMaterial.ts","../src/hooks/useSimpleFruid/shaders/divergence.frag","../src/hooks/useSimpleFruid/materials/useDivergenceMaterial.ts","../src/hooks/useSimpleFruid/shaders/pressure.frag","../src/hooks/useSimpleFruid/materials/usePressureMaterial.ts","../src/hooks/useSimpleFruid/useMesh.ts","../src/hooks/useSimpleFruid/index.ts","../src/hooks/useTransitionBg/shader/main.vert","../src/hooks/useTransitionBg/shader/main.frag","../src/hooks/useTransitionBg/useMesh.ts","../src/hooks/useTransitionBg/index.ts"],"sourcesContent":["varying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\tgl_Position = vec4(position, 1.0);\n}","precision mediump float;\n\nuniform sampler2D uMap;\nuniform sampler2D uTexture;\nuniform float uRadius;\nuniform float uAlpha;\nuniform float uDissipation;\nuniform float uMagnification;\nuniform vec2 uResolution;\nuniform float uSmudge;\nuniform float uAspect;\nuniform vec2 uMouse;\nuniform vec2 uPrevMouse;\nuniform vec2 uVelocity;\n\nuniform float uMotionBlur;\nuniform int uMotionSample;\n\nvarying vec2 vUv;\n\nfloat isOnLine(vec2 point, vec2 start, vec2 end, float width, float aspect) {\n\t//正円にする\n\tpoint.x *= aspect;\n\tstart.x *= aspect;\n\tend.x *= aspect;\n\n\t//方向の単位ベクトル\n\tvec2 dir = normalize(end - start);\n\t//線分に対して垂直の単位ベクトル\n\tvec2 n = vec2(dir.y, -dir.x);\n\t//方向ベクトル\n\tvec2 p0 = point - start;\n\t\n\t//線上の距離を計算する\n\tfloat distToLine = abs(dot(p0, n));\n\tfloat distAlongLine = dot(p0, dir);\n\tfloat totalLength = length(end - start);\n\n\t//始点と終点の円の半径も範囲に含める\n\tfloat distFromStart = length(point - start);\n\tfloat distFromEnd = length(point - end);\n\t\n\tbool withinLine = (distToLine < width && distAlongLine > 0.0 && distAlongLine < totalLength) || distFromStart < width || distFromEnd < width;\n\n\treturn float(withinLine);\n}\n\nvec4 createSmudge(){\n\tvec2 offsets[9];\n\toffsets[0] = vec2(-1, -1); offsets[1] = vec2( 0, -1); offsets[2] = vec2( 1, -1);\n\toffsets[3] = vec2(-1, 0); offsets[4] = vec2( 0, 0); offsets[5] = vec2( 1, 0);\n\toffsets[6] = vec2(-1, 1); offsets[7] = vec2( 0, 1); offsets[8] = vec2( 1, 1);\n\t// オフセットをテクスチャサイズにスケール\n\tfor(int i = 0; i < 9; i++) {\n\t\toffsets[i] = (offsets[i] * uSmudge) / uResolution;\n\t}\t\n\tvec4 smudgedColor = vec4(0.0);\n\tfor(int i = 0; i < 9; i++) {\n\t\tsmudgedColor += texture2D(uMap, vUv + offsets[i]);\n\t}\n\treturn smudgedColor / 9.0;\n}\n\nvec4 createMotionBlur(vec4 baseColor, vec2 velocity, float motion, int samples) {\n\tvec4 motionBlurredColor = baseColor;\n\tvec2 scaledVelocity = velocity * motion;\n\tfor(int i = 1; i < samples; i++) {\n\t\tfloat t = float(i) / float(samples - 1);\n\t\tvec2 offset = t * scaledVelocity / uResolution;\n\t\tmotionBlurredColor += texture2D(uMap, vUv + offset);\n\t}\n\treturn motionBlurredColor / float(samples);\n}\n\n\nvoid main() {\n\t// UV座標を[-1, 1]の範囲に変換\n\tvec2 st = vUv * 2.0 - 1.0;\n\t\n\t//速度ベクトル\n\tvec2 velocity = uVelocity * uResolution;\n\n\t// 滲みを加える\n\tvec4 smudgedColor = createSmudge();\n\t\n\t//モーションブラー\n\tvec4 motionBlurredColor = createMotionBlur(smudgedColor, uVelocity, uMotionBlur,uMotionSample);\n\n\t//バッファーテクスチャー\n\tvec4 bufferColor = motionBlurredColor * uDissipation;\n\n\t// radius\n\tfloat modifiedRadius = uRadius + (length(velocity) * uMagnification);\n\tmodifiedRadius = max(0.0,modifiedRadius);\n\n\t//\tcolor TODO:カラーに速度を反映させるかどうか、最初のフレームのカラーをどうするか\n\t// vec3 color = vec3(velocity * vec2(1, -1), 1.0 - pow(1.0 - min(1.0, length(velocity)), 1.0));\n\tvec3 color = vec3(1.0,1.0,1.0);\n\n\t//カラーにテクスチャーをマッピングする\n\tvec4 textureColor = texture2D(uTexture, vUv);\n\tvec3 finalColor = mix(color, textureColor.rgb, textureColor.a);\n\n\t//始点と終点の直線上を判定する\n\tfloat onLine = isOnLine(st, uPrevMouse, uMouse, modifiedRadius, uAspect);\n\n\t//最終出力\n\tbufferColor.rgb = mix(bufferColor.rgb, finalColor, onLine);\n\tgl_FragColor = bufferColor;\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport { Size } from \"@react-three/fiber\";\n\n/**\n * @params isDpr Whether to multiply dpr, default:false\n */\nexport const useResolution = (size: Size, dpr: number | false = false) => {\n const _width = dpr ? size.width * dpr : size.width;\n const _height = dpr ? size.height * dpr : size.height;\n const resolution = useMemo(\n () => new THREE.Vector2(_width, _height),\n [_width, _height]\n );\n return resolution;\n};\n","import * as THREE from \"three\";\nimport { useEffect, useMemo } from \"react\";\n\nexport const useAddMesh = (\n scene: THREE.Scene,\n geometry: THREE.PlaneGeometry,\n material: THREE.Material\n) => {\n const mesh = useMemo(\n () => new THREE.Mesh(geometry, material),\n [geometry, material]\n );\n useEffect(() => {\n scene.add(mesh);\n }, [scene, mesh]);\n return mesh;\n};\n","export const setUniform = (\n material: THREE.ShaderMaterial | THREE.RawShaderMaterial,\n key: string,\n value:\n | number\n | THREE.Color\n | THREE.Vector2\n | THREE.Vector3\n | THREE.Vector4\n | THREE.Matrix3\n | THREE.Matrix4\n | THREE.Texture\n | THREE.CubeTexture\n) => {\n if (\n material.uniforms &&\n material.uniforms[key] &&\n value !== undefined &&\n value !== null\n ) {\n material.uniforms[key].value = value;\n } else {\n console.error(\n `Uniform key \"${key}\" does not exist in the material. or \"${key}\" is null | undefined`\n );\n }\n};\n","import * as THREE from \"three\";\nimport vertexShader from \"./shader/main.vert\";\nimport fragmentShader from \"./shader/main.frag\";\nimport { useEffect, useMemo } from \"react\";\nimport { useResolution } from \"../utils/useResolution\";\nimport { useAddMesh } from \"../utils/useAddMesh\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { Size } from \"@react-three/fiber\";\n\nexport const useMesh = ({\n scene,\n size,\n dpr,\n}: {\n scene: THREE.Scene;\n size: Size;\n dpr: number;\n}) => {\n const geometry = useMemo(() => new THREE.PlaneGeometry(2, 2), []);\n const material = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uMap: {\n value: null,\n },\n uResolution: { value: new THREE.Vector2(0, 0) },\n uAspect: { value: 1 },\n uTexture: { value: new THREE.Texture() },\n uRadius: { value: 0.0 },\n uAlpha: { value: 0.0 },\n uSmudge: { value: 0.0 },\n uDissipation: { value: 0.0 },\n uMagnification: { value: 0.0 },\n uMotionBlur: { value: 0.0 },\n uMotionSample: { value: 10 },\n uMouse: { value: new THREE.Vector2(0, 0) },\n uPrevMouse: { value: new THREE.Vector2(0, 0) },\n uVelocity: { value: new THREE.Vector2(0, 0) },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n const resolution = useResolution(size, dpr);\n useEffect(() => {\n setUniform(material, \"uAspect\", resolution.width / resolution.height);\n setUniform(material, \"uResolution\", resolution.clone());\n }, [resolution, material]);\n\n useAddMesh(scene, geometry, material);\n\n return material;\n};\n","import * as THREE from \"three\";\nimport { useResolution } from \"./useResolution\";\nimport { useMemo } from \"react\";\nimport { Size } from \"@react-three/fiber\";\n\nconst getCameraProps = (width: number, height: number) => {\n const frustumSize = height;\n const aspect = width / height;\n const [w, h] = [(frustumSize * aspect) / 2, frustumSize / 2];\n return { width: w, height: h, near: -1000, far: 1000 };\n};\n\nexport const useCamera = (size: Size) => {\n const resolution = useResolution(size);\n const { width, height, near, far } = getCameraProps(\n resolution.x,\n resolution.y\n );\n const camera = useMemo(\n () =>\n new THREE.OrthographicCamera(\n -width,\n width,\n height,\n -height,\n near,\n far\n ),\n [width, height, near, far]\n );\n return camera;\n};\n","import * as THREE from \"three\";\nimport { useCallback, useLayoutEffect, useMemo, useRef } from \"react\";\nimport { useResolution } from \"./useResolution\";\nimport { UseFboProps } from \"./types\";\n\nexport const FBO_OPTION = {\n minFilter: THREE.LinearFilter,\n magFilter: THREE.LinearFilter,\n type: THREE.HalfFloatType,\n depthBuffer: false,\n stencilBuffer: false,\n};\n\ntype FBOUpdateFunction = (\n gl: THREE.WebGLRenderer,\n /** call before FBO is rendered */\n onBeforeRender?: ({ read }: { read: THREE.Texture }) => void\n) => THREE.Texture;\n\ntype Return = [THREE.WebGLRenderTarget, FBOUpdateFunction];\n\n/**\n * @param dpr If dpr is set, dpr will be multiplied, default:false\n * @param isSizeUpdate Whether to resize when resizing occurs. If isDpr is true, set FBO to setSize even if dpr is changed, default:false\n * @returns [THREE.WebGLRenderTarget , updateFBO] -Receives the RenderTarget as the first argument and the update function as the second argument.\n */\nexport const useSingleFBO = ({\n scene,\n camera,\n size,\n dpr = false,\n isSizeUpdate = false,\n}: UseFboProps): Return => {\n const renderTarget = useRef();\n\n const resolution = useResolution(size, dpr);\n renderTarget.current = useMemo(\n () => new THREE.WebGLRenderTarget(resolution.x, resolution.y, FBO_OPTION),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n useLayoutEffect(() => {\n if (isSizeUpdate) {\n renderTarget.current?.setSize(resolution.x, resolution.y);\n }\n }, [resolution, isSizeUpdate]);\n\n const updateRenderTarget: FBOUpdateFunction = useCallback(\n (gl, onBeforeRender) => {\n const fbo = renderTarget.current!;\n gl.setRenderTarget(fbo);\n onBeforeRender && onBeforeRender({ read: fbo.texture });\n gl.render(scene, camera);\n gl.setRenderTarget(null);\n gl.clear();\n return fbo.texture;\n },\n [scene, camera]\n );\n\n return [renderTarget.current, updateRenderTarget];\n};\n","import * as THREE from \"three\";\nimport { useCallback, useLayoutEffect, useMemo, useRef } from \"react\";\nimport { FBO_OPTION } from \"./useSingleFBO\";\nimport { useResolution } from \"./useResolution\";\nimport { DoubleRenderTarget, UseFboProps } from \"./types\";\n\ninterface RenderTarget extends DoubleRenderTarget {\n swap: () => void;\n}\n\ntype FBOUpdateFunction = (\n gl: THREE.WebGLRenderer,\n /** call before FBO is rendered */\n onBeforeRender?: ({\n read,\n write,\n }: {\n read: THREE.Texture;\n write: THREE.Texture;\n }) => void\n) => THREE.Texture;\n\ntype Return = [\n { read: THREE.WebGLRenderTarget; write: THREE.WebGLRenderTarget },\n FBOUpdateFunction\n];\n\n/**\n * @param dpr If dpr is set, dpr will be multiplied, default:false\n * @param isSizeUpdate Whether to resize when resizing occurs. If isDpr is true, set FBO to setSize even if dpr is changed, default:false\n * @returns [{read:THREE.WebGLRenderTarget,write:THREE.WebGLRenderTarget} , updateFBO] -Receives the RenderTarget as the first argument and the update function as the second argument.\n */\nexport const useDoubleFBO = ({\n scene,\n camera,\n size,\n dpr = false,\n isSizeUpdate = false,\n}: UseFboProps): Return => {\n const renderTarget = useRef({\n read: null,\n write: null,\n swap: function () {\n let temp = this.read;\n this.read = this.write;\n this.write = temp;\n },\n });\n\n const resolution = useResolution(size, dpr);\n const initRenderTargets = useMemo(() => {\n const read = new THREE.WebGLRenderTarget(\n resolution.x,\n resolution.y,\n FBO_OPTION\n );\n const write = new THREE.WebGLRenderTarget(\n resolution.x,\n resolution.y,\n FBO_OPTION\n );\n return { read, write };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n renderTarget.current.read = initRenderTargets.read;\n renderTarget.current.write = initRenderTargets.write;\n\n useLayoutEffect(() => {\n if (isSizeUpdate) {\n renderTarget.current.read?.setSize(resolution.x, resolution.y);\n renderTarget.current.write?.setSize(resolution.x, resolution.y);\n }\n }, [resolution, isSizeUpdate]);\n\n const updateRenderTarget: FBOUpdateFunction = useCallback(\n (gl, onBeforeRender) => {\n const fbo = renderTarget.current;\n gl.setRenderTarget(fbo.write);\n onBeforeRender &&\n onBeforeRender({\n read: fbo.read!.texture,\n write: fbo.write!.texture,\n });\n gl.render(scene, camera);\n fbo.swap();\n gl.setRenderTarget(null);\n gl.clear();\n return fbo.read?.texture as THREE.Texture;\n },\n [scene, camera]\n );\n\n return [\n { read: renderTarget.current.read, write: renderTarget.current.write },\n updateRenderTarget,\n ];\n};\n","import * as THREE from \"three\";\nimport { useCallback, useRef } from \"react\";\n\n/**\n * @returns updatePointer frameで呼び出す更新関数を返す\n */\nexport const usePointer = () => {\n const prevPointer = useRef(new THREE.Vector2(0, 0));\n const diffPointer = useRef(new THREE.Vector2(0, 0));\n const lastUpdateTime = useRef(0);\n const velocity = useRef(new THREE.Vector2(0, 0));\n const isMoved = useRef(false);\n\n const updatePointer = useCallback((currentPointer: THREE.Vector2) => {\n const now = performance.now();\n const current = currentPointer.clone();\n\n // first frame\n if (lastUpdateTime.current === 0) {\n lastUpdateTime.current = now;\n prevPointer.current = current;\n }\n const deltaTime = Math.max(1, now - lastUpdateTime.current);\n lastUpdateTime.current = now;\n\n // get velocity\n velocity.current\n .copy(current)\n .sub(prevPointer.current)\n .divideScalar(deltaTime);\n const isUpdate = velocity.current.length() > 0;\n\n //set prev temp pos\n const prevTemp = isMoved.current ? prevPointer.current.clone() : current;\n if (!isMoved.current && isUpdate) {\n isMoved.current = true;\n }\n prevPointer.current = current;\n\n return {\n currentPointer: current,\n prevPointer: prevTemp,\n diffPointer: diffPointer.current.subVectors(current, prevTemp),\n velocity: velocity.current,\n isVelocityUpdate: isUpdate,\n };\n }, []);\n\n return updatePointer;\n};\n","import { useCallback, useRef } from \"react\";\n\ntype Return = [T, (params: Partial) => void];\n\nexport const useParams = (params: T): Return => {\n const paramsRef = useRef(params);\n const setParams = useCallback((updateParams: Partial) => {\n for (const key in updateParams) {\n const paramKey = key as keyof T;\n if (\n paramKey in paramsRef.current &&\n updateParams[paramKey] !== undefined &&\n updateParams[paramKey] !== null\n ) {\n paramsRef.current[paramKey] = updateParams[paramKey]!;\n } else {\n console.error(\n `\"${String(\n paramKey\n )}\" does not exist in the params. or \"${String(\n paramKey\n )}\" is null | undefined`\n );\n }\n }\n }, []);\n return [paramsRef.current, setParams];\n};\n","import * as THREE from \"three\";\nimport { useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { useDoubleFBO } from \"../utils/useDoubleFBO\";\nimport { useCallback, useMemo } from \"react\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { usePointer } from \"../utils/usePointer\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { HooksReturn } from \"../types\";\nimport { useParams } from \"../utils/useParams\";\nimport { DoubleRenderTarget } from \"../utils/types\";\n\nexport type BrushParams = {\n /** ブラシに適用するテクスチャー */\n texture?: THREE.Texture;\n /** size of the stamp, percentage of the size */\n radius?: number;\n /** opacity TODO*これバグってるいので修正 */\n alpha?: number;\n /** 滲み効果の強さ */\n smudge?: number;\n /** 拡散率。1にすると残り続ける */\n dissipation?: number;\n /** 拡大率 */\n magnification?: number;\n /** モーションブラーの強さ */\n motionBlur?: number;\n /** モーションブラーのサンプル数 これを高くするとパフォーマンスへの影響大 */\n motionSample?: number;\n};\n\nexport type BrushObject = {\n scene: THREE.Scene;\n material: THREE.Material;\n camera: THREE.Camera;\n renderTarget: DoubleRenderTarget;\n};\n\nexport const useBrush = ({\n size,\n dpr,\n}: {\n size: Size;\n dpr: number;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const material = useMesh({ scene, size, dpr });\n const camera = useCamera(size);\n const updatePointer = usePointer();\n const [renderTarget, updateRenderTarget] = useDoubleFBO({\n scene,\n camera,\n size,\n });\n\n const [params, setParams] = useParams({\n texture: new THREE.Texture(),\n radius: 0.0,\n alpha: 0.0,\n smudge: 0.0,\n dissipation: 0.0,\n magnification: 0.0,\n motionBlur: 0.0,\n motionSample: 10,\n });\n\n const updateFx = useCallback(\n (props: RootState, updateParams: BrushParams) => {\n const { gl, pointer } = props;\n\n setParams(updateParams);\n\n setUniform(material, \"uTexture\", params.texture!);\n setUniform(material, \"uRadius\", params.radius!);\n setUniform(material, \"uAlpha\", params.alpha!);\n setUniform(material, \"uSmudge\", params.smudge!);\n setUniform(material, \"uDissipation\", params.dissipation!);\n setUniform(material, \"uMagnification\", params.magnification!);\n setUniform(material, \"uMotionBlur\", params.motionBlur!);\n setUniform(material, \"uMotionSample\", params.motionSample!);\n\n const { currentPointer, prevPointer, velocity } =\n updatePointer(pointer);\n setUniform(material, \"uMouse\", currentPointer);\n setUniform(material, \"uPrevMouse\", prevPointer);\n setUniform(material, \"uVelocity\", velocity);\n\n const bufferTexture = updateRenderTarget(gl, ({ read }) => {\n setUniform(material, \"uMap\", read);\n });\n\n return bufferTexture;\n },\n [material, updatePointer, updateRenderTarget, params, setParams]\n );\n\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n material: material,\n camera: camera,\n renderTarget: renderTarget,\n },\n ];\n};\n","varying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\tgl_Position = vec4(position, 1.0);\n}","precision mediump float;\n\nvarying vec2 vUv;\nuniform sampler2D uTexture;\n\nuniform vec3 uColor0;\nuniform vec3 uColor1;\n\nvoid main() {\n\tvec2 uv = vUv;\n\tvec4 texColor = texture2D(uTexture, uv);\n\tfloat grayscale = dot(texColor.rgb, vec3(0.299, 0.587, 0.114));\n\tvec3 duotone = mix(uColor0, uColor1, grayscale);\n\tgl_FragColor = vec4(duotone, texColor.a);\n}","import { useMemo } from \"react\";\nimport * as THREE from \"three\";\nimport vertexShader from \"./shader/main.vert\";\nimport fragmentShader from \"./shader/main.frag\";\nimport { useAddMesh } from \"../utils/useAddMesh\";\n\ntype TUniforms = {\n uTexture: { value: THREE.Texture };\n uColor0: { value: THREE.Color };\n uColor1: { value: THREE.Color };\n};\n\nexport class MetamorphoseMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useMesh = (scene: THREE.Scene) => {\n const geometry = useMemo(() => new THREE.PlaneGeometry(2, 2), []);\n const material = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uTexture: { value: new THREE.Texture() },\n uColor0: { value: new THREE.Color(0xffffff) },\n uColor1: { value: new THREE.Color(0x000000) },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n useAddMesh(scene, geometry, material);\n return material as MetamorphoseMaterial;\n};\n","import { useCallback, useMemo } from \"react\";\nimport * as THREE from \"three\";\nimport { useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { useSingleFBO } from \"../utils/useSingleFBO\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { HooksReturn } from \"../types\";\nimport { useParams } from \"../utils/useParams\";\n\nexport type DuoToneParams = {\n texture?: THREE.Texture;\n color0?: THREE.Color;\n color1?: THREE.Color;\n};\n\nexport type DuoToneObject = {\n scene: THREE.Scene;\n material: THREE.Material;\n camera: THREE.Camera;\n renderTarget: THREE.WebGLRenderTarget;\n};\n\nexport const useDuoTone = ({\n size,\n}: {\n size: Size;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const material = useMesh(scene);\n const camera = useCamera(size);\n const [renderTarget, updateRenderTarget] = useSingleFBO({\n scene,\n camera,\n size,\n });\n\n const [params, setParams] = useParams({\n texture: new THREE.Texture(),\n color0: new THREE.Color(0xffffff),\n color1: new THREE.Color(0x000000),\n });\n\n const updateFx = useCallback(\n (props: RootState, updateParams: DuoToneParams) => {\n const { gl } = props;\n\n setParams(updateParams);\n\n setUniform(material, \"uTexture\", params.texture!);\n setUniform(material, \"uColor0\", params.color0!);\n setUniform(material, \"uColor1\", params.color1!);\n\n const bufferTexture = updateRenderTarget(gl);\n\n return bufferTexture;\n },\n [updateRenderTarget, material, setParams, params]\n );\n\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n material: material,\n camera: camera,\n renderTarget: renderTarget,\n },\n ];\n};\n","varying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\tgl_Position = vec4(position, 1.0);\n}","precision mediump float;\n\nuniform sampler2D uMap;\nuniform float uRadius;\nuniform float uAlpha;\nuniform float uDissipation;\nuniform float uMagnification;\nuniform vec2 uResolution;\n\nuniform float uAspect;\nuniform vec2 uMouse;\nuniform vec2 uVelocity;\n\nvarying vec2 vUv;\n\nvoid main() {\n\n\tvec2 st = vUv * 2.0 - 1.0; // UV座標を[-1, 1]の範囲に変換\n\n\tvec2 vel = uVelocity * uResolution;\n\n\t// buffer color\n\tvec4 bufferColor = texture2D(uMap, vUv) * uDissipation;\n\t\n\t//\tcolor\n\tvec3 color = vec3(vel * vec2(1, -1), 1.0 - pow(1.0 - min(1.0, length(vel)), 1.0));\n\t// vec3 color = vec3(1.0,1.0,1.0);\n\n\t// cursor\n\tvec2 nMouse = (uMouse + vec2(1.0)) * 0.5;\n\tvec2 cursor = vUv - nMouse;\n\tcursor.x *= uAspect;\n\n\t// radius\n\tfloat modifiedRadius = uRadius + (length(vel) * uMagnification);\n\tmodifiedRadius = max(0.0,modifiedRadius);\n\tfloat finalBrush = smoothstep(modifiedRadius,0.0,length(cursor)) * uAlpha;\n\n\t// mix buffer and current color\n\tbufferColor.rgb = mix(bufferColor.rgb, color, vec3(finalBrush));\n\n\tgl_FragColor = bufferColor;\n}","import * as THREE from \"three\";\nimport vertexShader from \"./shader/main.vert\";\nimport fragmentShader from \"./shader/main.frag\";\nimport { useEffect, useMemo } from \"react\";\nimport { useAddMesh } from \"../utils/useAddMesh\";\nimport { useResolution } from \"../utils/useResolution\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { Size } from \"@react-three/fiber\";\n\nexport const useMesh = ({\n scene,\n size,\n dpr,\n}: {\n scene: THREE.Scene;\n size: Size;\n dpr: number;\n}) => {\n const geometry = useMemo(() => new THREE.PlaneGeometry(2, 2), []);\n const material = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uMap: { value: null },\n uResolution: { value: new THREE.Vector2(0, 0) },\n uAspect: { value: 1 },\n uRadius: { value: 0.0 },\n uAlpha: { value: 0.0 },\n uDissipation: { value: 0.0 },\n uMagnification: { value: 0.0 },\n uMouse: { value: new THREE.Vector2(0, 0) },\n uVelocity: { value: new THREE.Vector2(0, 0) },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n const resolution = useResolution(size, dpr);\n\n useEffect(() => {\n setUniform(material, \"uAspect\", resolution.width / resolution.height);\n setUniform(material, \"uResolution\", resolution.clone());\n }, [resolution, material]);\n\n useAddMesh(scene, geometry, material);\n\n return material;\n};\n","import * as THREE from \"three\";\nimport { useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { useDoubleFBO } from \"../utils/useDoubleFBO\";\nimport { useCallback, useMemo } from \"react\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { usePointer } from \"../utils/usePointer\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { HooksReturn } from \"../types\";\nimport { useParams } from \"../utils/useParams\";\nimport { DoubleRenderTarget } from \"../utils/types\";\n\nexport type FlowmapParams = {\n /** size of the stamp, percentage of the size */\n radius?: number;\n /** 拡大率 */\n magnification?: number;\n /** opacity */\n alpha?: number;\n /** 拡散率。1にすると残り続ける */\n dissipation?: number;\n};\n\nexport type FlowmapObject = {\n scene: THREE.Scene;\n material: THREE.Material;\n camera: THREE.Camera;\n renderTarget: DoubleRenderTarget;\n};\n\nexport const useFlowmap = ({\n size,\n dpr,\n}: {\n size: Size;\n dpr: number;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const material = useMesh({ scene, size, dpr });\n const camera = useCamera(size);\n const updatePointer = usePointer();\n const [renderTarget, updateRenderTarget] = useDoubleFBO({\n scene,\n camera,\n size,\n });\n\n const [params, setParams] = useParams({\n radius: 0.0,\n magnification: 0.0,\n alpha: 0.0,\n dissipation: 0.0,\n });\n\n const updateFx = useCallback(\n (props: RootState, updateParams: FlowmapParams) => {\n const { gl, pointer } = props;\n\n setParams(updateParams);\n\n setUniform(material, \"uRadius\", params.radius!);\n setUniform(material, \"uAlpha\", params.alpha!);\n setUniform(material, \"uDissipation\", params.dissipation!);\n setUniform(material, \"uMagnification\", params.magnification!);\n\n const { currentPointer, velocity } = updatePointer(pointer);\n setUniform(material, \"uMouse\", currentPointer);\n setUniform(material, \"uVelocity\", velocity);\n\n const bufferTexture = updateRenderTarget(gl, ({ read }) => {\n setUniform(material, \"uMap\", read);\n });\n\n return bufferTexture;\n },\n [material, updatePointer, updateRenderTarget, params, setParams]\n );\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n material: material,\n camera: camera,\n renderTarget: renderTarget,\n },\n ];\n};\n","varying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\tgl_Position = vec4(position, 1.0);\n}","precision mediump float;\n\nvarying vec2 vUv;\nuniform float uTime;\nuniform sampler2D uTexture;\nuniform float timeStrength;\nuniform float distortionStrength;\nuniform float fogEdge0;\nuniform float fogEdge1;\nuniform vec3 fogColor;\nuniform int noiseOct; //noiseの振幅回数\nuniform int fbmOct; //fbmの振幅回数\n\nconst float per = 0.5;\nconst float PI = 3.1415926;\n\nfloat interpolate(float a, float b, float x){\n float f = (1.0 - cos(x * PI)) * 0.5;\n return a * (1.0 - f) + b * f;\n}\n\nfloat rnd(vec2 p){\n return fract(sin(dot(p ,vec2(12.9898,78.233))) * 43758.5453);\n}\n\nfloat irnd(vec2 p){\n\tvec2 i = floor(p);\n\tvec2 f = fract(p);\n\tvec4 v = vec4(rnd(vec2(i.x,i.y)),rnd(vec2(i.x + 1.0,i.y)),rnd(vec2(i.x,i.y + 1.0)),rnd(vec2(i.x + 1.0, i.y + 1.0)));\n\treturn interpolate(interpolate(v.x, v.y, f.x), interpolate(v.z, v.w, f.x), f.y);\n}\n\nfloat noise(vec2 p, float time){\n\tfloat t = 0.0;\n\tfor(int i = 0; i < noiseOct; i++){\n\t\tfloat freq = pow(2.0, float(i));\n\t\tfloat amp = pow(per, float(noiseOct - i));\n\t\tt += irnd(vec2(p.y / freq + time, p.x / freq + time)) * amp;\n\t}\n\treturn t;\n}\n\nfloat fbm(vec2 x, float time) {\n\tfloat v = 0.0;\n\tfloat a = 0.5;\n\tvec2 shift = vec2(100);\n\tmat2 rot = mat2(cos(0.5), sin(0.5), -sin(0.5), cos(0.50));\n\tfloat sign = 1.0;\n\tfor (int i = 0; i < fbmOct; ++i) {\n\t\tv += a * noise(x, time * sign);\n\t\tx = rot * x * 2.0 + shift;\n\t\ta *= 0.5;\n\t\tsign *= -1.0;\n\t}\n\treturn v;\n}\n\nvoid main() {\n\tvec2 uv = vUv;\n\t\n\tfloat noiseMap = fbm(gl_FragCoord.xy ,uTime * timeStrength);\n\t\n\tfloat noiseTextureMap = noiseMap*2.0-1.0;\n\tuv += noiseTextureMap * distortionStrength;\n\tvec3 textureMap = texture2D(uTexture, uv).rgb;\n\n\tfloat edge0 = fogEdge0;\n\tfloat edge1 = fogEdge1;\n\tfloat blendValue = smoothstep(edge0, edge1, noiseMap);\n\n\tvec3 outputColor = blendValue * fogColor + (1.0 - blendValue) * textureMap;\n\tgl_FragColor = vec4(outputColor, 1.0);\n}\n\n\n","import { useMemo } from \"react\";\nimport * as THREE from \"three\";\nimport vertexShader from \"./shader/main.vert\";\nimport fragmentShader from \"./shader/main.frag\";\nimport { useAddMesh } from \"../utils/useAddMesh\";\n\nexport const useMesh = (scene: THREE.Scene) => {\n const geometry = useMemo(() => new THREE.PlaneGeometry(2, 2), []);\n const material = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uTime: { value: 0.0 },\n uTexture: { value: new THREE.Texture() },\n timeStrength: { value: 0.0 },\n distortionStrength: { value: 0.0 },\n fogEdge0: { value: 0.0 },\n fogEdge1: { value: 0.9 },\n fogColor: { value: new THREE.Color(0xffffff) },\n noiseOct: { value: 8 },\n fbmOct: { value: 3 },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n useAddMesh(scene, geometry, material);\n return material;\n};\n","import { useCallback, useMemo } from \"react\";\nimport * as THREE from \"three\";\nimport { useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { useSingleFBO } from \"../utils/useSingleFBO\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { HooksReturn } from \"../types\";\nimport { useParams } from \"../utils/useParams\";\n\nexport type FogProjectionParams = {\n texture?: THREE.Texture;\n timeStrength?: number;\n distortionStrength?: number;\n fogEdge0?: number;\n fogEdge1?: number;\n fogColor?: THREE.Color;\n noiseOct?: number;\n fbmOct?: number;\n};\n\nexport type FogProjectionObject = {\n scene: THREE.Scene;\n material: THREE.Material;\n camera: THREE.Camera;\n renderTarget: THREE.WebGLRenderTarget;\n};\n\nexport const useFogProjection = ({\n size,\n}: {\n size: Size;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const material = useMesh(scene);\n const camera = useCamera(size);\n const [renderTarget, updateRenderTarget] = useSingleFBO({\n scene,\n camera,\n size,\n });\n\n const [params, setParams] = useParams({\n texture: new THREE.Texture(),\n timeStrength: 0.0,\n distortionStrength: 0.0,\n fogEdge0: 0.0,\n fogEdge1: 0.9,\n fogColor: new THREE.Color(0xffffff),\n noiseOct: 8,\n fbmOct: 3,\n });\n\n const updateFx = useCallback(\n (props: RootState, updateParams: FogProjectionParams) => {\n const { gl, clock } = props;\n setParams(updateParams);\n setUniform(material, \"uTime\", clock.getElapsedTime());\n setUniform(material, \"uTexture\", params.texture!);\n setUniform(material, \"timeStrength\", params.timeStrength!);\n setUniform(material, \"distortionStrength\", params.distortionStrength!);\n setUniform(material, \"fogEdge0\", params.fogEdge0!);\n setUniform(material, \"fogEdge1\", params.fogEdge1!);\n setUniform(material, \"fogColor\", params.fogColor!);\n setUniform(material, \"noiseOct\", params.noiseOct!);\n setUniform(material, \"fbmOct\", params.fbmOct!);\n const bufferTexture = updateRenderTarget(gl);\n return bufferTexture;\n },\n [updateRenderTarget, material, setParams, params]\n );\n\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n material: material,\n camera: camera,\n renderTarget: renderTarget,\n },\n ];\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nvarying vec2 vL;\nvarying vec2 vR;\nvarying vec2 vT;\nvarying vec2 vB;\nuniform vec2 texelSize;\n\nvoid main () {\n\tvUv = uv;\n\tvL = vUv - vec2(texelSize.x, 0.0);\n\tvR = vUv + vec2(texelSize.x, 0.0);\n\tvT = vUv + vec2(0.0, texelSize.y);\n\tvB = vUv - vec2(0.0, texelSize.y);\n\tgl_Position = vec4(position, 1.0);\n}","precision mediump float;\n\nvoid main(){\n\tgl_FragColor = vec4(0.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/init.frag\";\n\nexport const useInitialMaterial = () => {\n const initialMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n depthTest: false,\n depthWrite: false,\n }),\n []\n );\n\n return initialMaterial as THREE.ShaderMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nuniform sampler2D uVelocity;\nuniform sampler2D uSource;\nuniform vec2 texelSize;\nuniform float dt;\nuniform float dissipation;\n\nvoid main () {\n\tvec2 coord = vUv - dt * texture2D(uVelocity, vUv).xy * texelSize;\n\tgl_FragColor = dissipation * texture2D(uSource, coord);\n\tgl_FragColor.a = 1.0;\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/advection.frag\";\n\ntype TUniforms = {\n uVelocity: { value: THREE.Texture };\n uSource: { value: THREE.Texture };\n texelSize: { value: THREE.Vector2 };\n dt: { value: number };\n dissipation: { value: number };\n};\n\nexport class AdvectionMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useAdvectionMaterial = () => {\n const advectionMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uVelocity: { value: new THREE.Texture() },\n uSource: { value: new THREE.Texture() },\n texelSize: { value: new THREE.Vector2() },\n dt: { value: 0.0 },\n dissipation: { value: 0.0 },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return advectionMaterial as AdvectionMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nvarying vec2 vL;\nvarying vec2 vR;\nvarying vec2 vT;\nvarying vec2 vB;\nuniform sampler2D uVelocity;\n\nvec2 sampleVelocity (in vec2 uv) {\n\tvec2 multiplier = vec2(1.0, 1.0);\n\tif (uv.x < 0.0) { uv.x = 0.0; multiplier.x = -1.0; }\n\tif (uv.x > 1.0) { uv.x = 1.0; multiplier.x = -1.0; }\n\tif (uv.y < 0.0) { uv.y = 0.0; multiplier.y = -1.0; }\n\tif (uv.y > 1.0) { uv.y = 1.0; multiplier.y = -1.0; }\n\treturn multiplier * texture2D(uVelocity, uv).xy;\n}\n\nvoid main () {\n\tfloat L = sampleVelocity(vL).x;\n\tfloat R = sampleVelocity(vR).x;\n\tfloat T = sampleVelocity(vT).y;\n\tfloat B = sampleVelocity(vB).y;\n\tfloat div = 0.5 * (R - L + T - B);\n\tgl_FragColor = vec4(div, 0.0, 0.0, 1.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/divergence.frag\";\n\ntype TUniforms = {\n uVelocity: { value: THREE.Texture };\n texelSize: { value: THREE.Vector2 };\n};\n\nexport class DivergenceMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useDivergenceMaterial = () => {\n const divergenceMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uVelocity: { value: null },\n texelSize: { value: new THREE.Vector2() },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return divergenceMaterial as DivergenceMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nvarying vec2 vL;\nvarying vec2 vR;\nvarying vec2 vT;\nvarying vec2 vB;\nuniform sampler2D uPressure;\nuniform sampler2D uDivergence;\n\nvec2 boundary (in vec2 uv) {\n\tuv = min(max(uv, 0.0), 1.0);\n\treturn uv;\n}\n\nvoid main () {\n\tfloat L = texture2D(uPressure, boundary(vL)).x;\n\tfloat R = texture2D(uPressure, boundary(vR)).x;\n\tfloat T = texture2D(uPressure, boundary(vT)).x;\n\tfloat B = texture2D(uPressure, boundary(vB)).x;\n\tfloat C = texture2D(uPressure, vUv).x;\n\tfloat divergence = texture2D(uDivergence, vUv).x;\n\tfloat pressure = (L + R + B + T - divergence) * 0.25;\n\tgl_FragColor = vec4(pressure, 0.0, 0.0, 1.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/pressure.frag\";\n\ntype TUniforms = {\n uPressure: { value: THREE.Texture };\n uDivergence: { value: THREE.Texture };\n texelSize: { value: THREE.Vector2 };\n};\n\nexport class PressureMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const usePressureMaterial = () => {\n const pressureMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uPressure: { value: null },\n uDivergence: { value: null },\n texelSize: { value: new THREE.Vector2() },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return pressureMaterial as PressureMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nvarying vec2 vL;\nvarying vec2 vR;\nvarying vec2 vT;\nvarying vec2 vB;\nuniform sampler2D uVelocity;\n\nvoid main () {\n\tfloat L = texture2D(uVelocity, vL).y;\n\tfloat R = texture2D(uVelocity, vR).y;\n\tfloat T = texture2D(uVelocity, vT).x;\n\tfloat B = texture2D(uVelocity, vB).x;\n\tfloat vorticity = R - L - T + B;\n\tgl_FragColor = vec4(vorticity, 0.0, 0.0, 1.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/curl.frag\";\n\ntype TUniforms = {\n uVelocity: { value: THREE.Texture };\n texelSize: { value: THREE.Vector2 };\n};\n\nexport class CurlMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useCurlMaterial = () => {\n const curlMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uVelocity: { value: null },\n texelSize: { value: new THREE.Vector2() },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return curlMaterial as CurlMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nvarying vec2 vT;\nvarying vec2 vB;\nuniform sampler2D uVelocity;\nuniform sampler2D uCurl;\nuniform float curl;\nuniform float dt;\n\nvoid main () {\n\tfloat T = texture2D(uCurl, vT).x;\n\tfloat B = texture2D(uCurl, vB).x;\n\tfloat C = texture2D(uCurl, vUv).x;\n\tvec2 force = vec2(abs(T) - abs(B), 0.0);\n\tforce *= 1.0 / length(force + 0.00001) * curl * C;\n\tvec2 vel = texture2D(uVelocity, vUv).xy;\n\tgl_FragColor = vec4(vel + force * dt, 0.0, 1.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/vorticity.frag\";\n\ntype TUniforms = {\n uVelocity: { value: THREE.Texture };\n uCurl: { value: THREE.Texture };\n curl: { value: number };\n dt: { value: number };\n texelSize: { value: THREE.Vector2 };\n};\n\nexport class VorticityMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useVorticityMaterial = () => {\n const vorticityMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uVelocity: { value: null },\n uCurl: { value: null },\n curl: { value: 0 },\n dt: { value: 0 },\n texelSize: { value: new THREE.Vector2() },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return vorticityMaterial as VorticityMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nuniform sampler2D uTexture;\nuniform float value;\n\nvoid main () {\n\tgl_FragColor = value * texture2D(uTexture, vUv);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/clear.frag\";\n\ntype TUniforms = {\n uTexture: { value: THREE.Texture };\n value: { value: number };\n texelSize: { value: THREE.Vector2 };\n};\n\nexport class ClearMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useClearMaterial = () => {\n const advectionMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uTexture: { value: new THREE.Texture() },\n value: { value: 0.0 },\n texelSize: { value: new THREE.Vector2() },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return advectionMaterial as ClearMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nvarying vec2 vL;\nvarying vec2 vR;\nvarying vec2 vT;\nvarying vec2 vB;\nuniform sampler2D uPressure;\nuniform sampler2D uVelocity;\n\nvec2 boundary (in vec2 uv) {\n\tuv = min(max(uv, 0.0), 1.0);\n\treturn uv;\n}\n\nvoid main () {\n\tfloat L = texture2D(uPressure, boundary(vL)).x;\n\tfloat R = texture2D(uPressure, boundary(vR)).x;\n\tfloat T = texture2D(uPressure, boundary(vT)).x;\n\tfloat B = texture2D(uPressure, boundary(vB)).x;\n\tvec2 velocity = texture2D(uVelocity, vUv).xy;\n\tvelocity.xy -= vec2(R - L, T - B);\n\tgl_FragColor = vec4(velocity, 0.0, 1.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/gradientSubtract.frag\";\n\ntype TUniforms = {\n uPressure: { value: THREE.Texture };\n uVelocity: { value: THREE.Texture };\n texelSize: { value: THREE.Vector2 };\n};\n\nexport class GradientSubtractMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useGradientSubtractMaterial = () => {\n const gradientSubtractMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uPressure: { value: new THREE.Texture() },\n uVelocity: { value: new THREE.Texture() },\n texelSize: { value: new THREE.Vector2() },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return gradientSubtractMaterial as GradientSubtractMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nuniform sampler2D uTarget;\nuniform float aspectRatio;\nuniform vec3 color;\nuniform vec2 point;\nuniform float radius;\n\nvoid main () {\n\tvec2 nPoint = (point + vec2(1.0)) * 0.5;\n\tvec2 p = vUv - nPoint.xy;\n\tp.x *= aspectRatio;\n\tvec3 splat = exp(-dot(p, p) / radius) * color;\n\tvec3 base = texture2D(uTarget, vUv).xyz;\n\tgl_FragColor = vec4(base + splat, 1.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/splat.frag\";\n\ntype TUniforms = {\n uTarget: { value: THREE.Texture };\n aspectRatio: { value: number };\n color: { value: THREE.Vector3 };\n point: { value: THREE.Vector2 };\n radius: { value: number };\n texelSize: { value: THREE.Vector2 };\n};\n\nexport class SplatMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useSplateMaterial = () => {\n const splatMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uTarget: { value: new THREE.Texture() },\n aspectRatio: { value: 0 },\n color: { value: new THREE.Vector3() },\n point: { value: new THREE.Vector2() },\n radius: { value: 0.0 },\n texelSize: { value: new THREE.Vector2() },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return splatMaterial as SplatMaterial;\n};\n","import * as THREE from \"three\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport { useInitialMaterial } from \"./materials/useInitialMaterial\";\nimport {\n AdvectionMaterial,\n useAdvectionMaterial,\n} from \"./materials/useAdvectionMaterial\";\nimport {\n DivergenceMaterial,\n useDivergenceMaterial,\n} from \"./materials/useDivergenceMaterial\";\nimport {\n PressureMaterial,\n usePressureMaterial,\n} from \"./materials/usePressureMaterial\";\nimport { CurlMaterial, useCurlMaterial } from \"./materials/useCurlMaterial\";\nimport {\n VorticityMaterial,\n useVorticityMaterial,\n} from \"./materials/useVorticityMaterial\";\nimport { useResolution } from \"../utils/useResolution\";\nimport { ClearMaterial, useClearMaterial } from \"./materials/useClearMaterial\";\nimport {\n GradientSubtractMaterial,\n useGradientSubtractMaterial,\n} from \"./materials/useGradientSubtractMaterial\";\nimport { SplatMaterial, useSplateMaterial } from \"./materials/useSplatMaterial\";\nimport { useAddMesh } from \"../utils/useAddMesh\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { Size } from \"@react-three/fiber\";\n\ntype TMaterials =\n | AdvectionMaterial\n | DivergenceMaterial\n | CurlMaterial\n | PressureMaterial\n | ClearMaterial\n | GradientSubtractMaterial\n | SplatMaterial;\n\nexport type FruidMaterials = {\n vorticityMaterial: VorticityMaterial;\n curlMaterial: CurlMaterial;\n advectionMaterial: AdvectionMaterial;\n divergenceMaterial: DivergenceMaterial;\n pressureMaterial: PressureMaterial;\n clearMaterial: ClearMaterial;\n gradientSubtractMaterial: GradientSubtractMaterial;\n splatMaterial: SplatMaterial;\n};\ntype TUseMeshReturnType = [FruidMaterials, (material: TMaterials) => void];\n\n/**\n * Returns the material update function in the second argument\n */\nexport const useMesh = ({\n scene,\n size,\n dpr,\n}: {\n scene: THREE.Scene;\n size: Size;\n dpr: number;\n}): TUseMeshReturnType => {\n const geometry = useMemo(() => new THREE.PlaneGeometry(2, 2), []);\n const initialMaterial = useInitialMaterial();\n const updateMaterial = initialMaterial.clone();\n const curlMaterial = useCurlMaterial();\n const vorticityMaterial = useVorticityMaterial();\n const advectionMaterial = useAdvectionMaterial();\n const divergenceMaterial = useDivergenceMaterial();\n const pressureMaterial = usePressureMaterial();\n const clearMaterial = useClearMaterial();\n const gradientSubtractMaterial = useGradientSubtractMaterial();\n const splatMaterial = useSplateMaterial();\n const materials = useMemo(\n () => ({\n vorticityMaterial,\n curlMaterial,\n advectionMaterial,\n divergenceMaterial,\n pressureMaterial,\n clearMaterial,\n gradientSubtractMaterial,\n splatMaterial,\n }),\n [\n vorticityMaterial,\n curlMaterial,\n advectionMaterial,\n divergenceMaterial,\n pressureMaterial,\n clearMaterial,\n gradientSubtractMaterial,\n splatMaterial,\n ]\n );\n\n const resolution = useResolution(size, dpr);\n useEffect(() => {\n setUniform(\n materials.splatMaterial,\n \"aspectRatio\",\n resolution.x / resolution.y\n );\n for (const material of Object.values(materials)) {\n setUniform(\n material,\n \"texelSize\",\n new THREE.Vector2(1.0 / resolution.x, 1.0 / resolution.y)\n );\n }\n }, [resolution, materials]);\n\n const mesh = useAddMesh(scene, geometry, initialMaterial);\n useEffect(() => {\n initialMaterial.dispose();\n mesh.material = updateMaterial;\n }, [initialMaterial, mesh, updateMaterial]);\n\n const setMeshMaterial = useCallback(\n (material: TMaterials) => {\n mesh.material = material;\n mesh.material.needsUpdate = true;\n },\n [mesh]\n );\n\n return [materials, setMeshMaterial];\n};\n","import * as THREE from \"three\";\nimport { FruidMaterials, useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { useDoubleFBO } from \"../utils/useDoubleFBO\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { usePointer } from \"../utils/usePointer\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { useSingleFBO } from \"../utils/useSingleFBO\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { HooksReturn } from \"../types\";\nimport { useParams } from \"../utils/useParams\";\nimport { DoubleRenderTarget } from \"../utils/types\";\n\nexport type FruidParams = {\n density_dissipation?: number;\n velocity_dissipation?: number;\n velocity_acceleration?: number;\n pressure_dissipation?: number;\n pressure_iterations?: number;\n curl_strength?: number;\n splat_radius?: number;\n fruid_color?: ((velocity: THREE.Vector2) => THREE.Vector3) | THREE.Vector3;\n};\n\nexport type FruidObject = {\n scene: THREE.Scene;\n materials: FruidMaterials;\n camera: THREE.Camera;\n renderTarget: {\n velocity: DoubleRenderTarget;\n density: DoubleRenderTarget;\n curl: THREE.WebGLRenderTarget;\n divergence: THREE.WebGLRenderTarget;\n pressure: DoubleRenderTarget;\n };\n};\n\nexport const useFruid = ({\n size,\n dpr,\n}: {\n size: Size;\n dpr: number;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const [materials, setMeshMaterial] = useMesh({ scene, size, dpr });\n const camera = useCamera(size);\n const updatePointer = usePointer();\n\n const fboProps = useMemo(\n () => ({\n scene,\n camera,\n size,\n dpr,\n }),\n [scene, camera, size, dpr]\n );\n const [velocityFBO, updateVelocityFBO] = useDoubleFBO(fboProps);\n const [densityFBO, updateDensityFBO] = useDoubleFBO(fboProps);\n const [curlFBO, updateCurlFBO] = useSingleFBO(fboProps);\n const [divergenceFBO, updateDivergenceFBO] = useSingleFBO(fboProps);\n const [pressureFBO, updatePressureFBO] = useDoubleFBO(fboProps);\n\n const lastTime = useRef(0);\n const scaledDiffVec = useRef(new THREE.Vector2(0, 0));\n const spaltVec = useRef(new THREE.Vector3(0, 0, 0));\n\n const [params, setParams] = useParams({\n density_dissipation: 0.0,\n velocity_dissipation: 0.0,\n velocity_acceleration: 0.0,\n pressure_dissipation: 0.0,\n pressure_iterations: 20,\n curl_strength: 0.0,\n splat_radius: 0.001,\n fruid_color: new THREE.Vector3(1.0, 1.0, 1.0),\n });\n\n const updateFx = useCallback(\n (props: RootState, updateParams: FruidParams) => {\n const { gl, pointer, clock, size } = props;\n\n setParams(updateParams);\n\n if (lastTime.current === 0) {\n lastTime.current = clock.getElapsedTime();\n }\n const dt = Math.min(\n (clock.getElapsedTime() - lastTime.current) / 3,\n 0.02\n );\n lastTime.current = clock.getElapsedTime();\n\n // update velocity\n const velocityTex = updateVelocityFBO(gl, ({ read }) => {\n setMeshMaterial(materials.advectionMaterial);\n setUniform(materials.advectionMaterial, \"uVelocity\", read);\n setUniform(materials.advectionMaterial, \"uSource\", read);\n setUniform(materials.advectionMaterial, \"dt\", dt);\n setUniform(\n materials.advectionMaterial,\n \"dissipation\",\n params.velocity_dissipation!\n );\n });\n\n // update density\n const densityTex = updateDensityFBO(gl, ({ read }) => {\n setMeshMaterial(materials.advectionMaterial);\n setUniform(materials.advectionMaterial, \"uVelocity\", velocityTex);\n setUniform(materials.advectionMaterial, \"uSource\", read);\n setUniform(\n materials.advectionMaterial,\n \"dissipation\",\n params.density_dissipation!\n );\n });\n\n // update splatting\n const { currentPointer, diffPointer, isVelocityUpdate, velocity } =\n updatePointer(pointer);\n if (isVelocityUpdate) {\n updateVelocityFBO(gl, ({ read }) => {\n setMeshMaterial(materials.splatMaterial);\n setUniform(materials.splatMaterial, \"uTarget\", read);\n setUniform(materials.splatMaterial, \"point\", currentPointer);\n const scaledDiff = diffPointer.multiply(\n scaledDiffVec.current\n .set(size.width, size.height)\n .multiplyScalar(params.velocity_acceleration!)\n );\n setUniform(\n materials.splatMaterial,\n \"color\",\n spaltVec.current.set(scaledDiff.x, scaledDiff.y, 1.0)\n );\n setUniform(\n materials.splatMaterial,\n \"radius\",\n params.splat_radius!\n );\n });\n updateDensityFBO(gl, ({ read }) => {\n setMeshMaterial(materials.splatMaterial);\n setUniform(materials.splatMaterial, \"uTarget\", read);\n const color: THREE.Vector3 =\n typeof params.fruid_color === \"function\"\n ? params.fruid_color(velocity)\n : params.fruid_color!;\n setUniform(materials.splatMaterial, \"color\", color);\n });\n }\n\n // update curl\n const curlTex = updateCurlFBO(gl, () => {\n setMeshMaterial(materials.curlMaterial);\n setUniform(materials.curlMaterial, \"uVelocity\", velocityTex);\n });\n\n // update vorticity\n updateVelocityFBO(gl, ({ read }) => {\n setMeshMaterial(materials.vorticityMaterial);\n setUniform(materials.vorticityMaterial, \"uVelocity\", read);\n setUniform(materials.vorticityMaterial, \"uCurl\", curlTex);\n setUniform(\n materials.vorticityMaterial,\n \"curl\",\n params.curl_strength!\n );\n setUniform(materials.vorticityMaterial, \"dt\", dt);\n });\n\n // update divergence\n const divergenceTex = updateDivergenceFBO(gl, () => {\n setMeshMaterial(materials.divergenceMaterial);\n setUniform(materials.divergenceMaterial, \"uVelocity\", velocityTex);\n });\n\n // update pressure\n updatePressureFBO(gl, ({ read }) => {\n setMeshMaterial(materials.clearMaterial);\n setUniform(materials.clearMaterial, \"uTexture\", read);\n setUniform(\n materials.clearMaterial,\n \"value\",\n params.pressure_dissipation!\n );\n });\n\n // solve pressure iterative (Gauss-Seidel)\n setMeshMaterial(materials.pressureMaterial);\n setUniform(materials.pressureMaterial, \"uDivergence\", divergenceTex);\n let pressureTexTemp: THREE.Texture;\n for (let i = 0; i < params.pressure_iterations!; i++) {\n pressureTexTemp = updatePressureFBO(gl, ({ read }) => {\n setUniform(materials.pressureMaterial, \"uPressure\", read);\n });\n }\n\n // update gradienSubtract\n updateVelocityFBO(gl, ({ read }) => {\n setMeshMaterial(materials.gradientSubtractMaterial);\n setUniform(\n materials.gradientSubtractMaterial,\n \"uPressure\",\n pressureTexTemp\n );\n setUniform(materials.gradientSubtractMaterial, \"uVelocity\", read);\n });\n\n return densityTex;\n },\n [\n materials,\n setMeshMaterial,\n updateCurlFBO,\n updateDensityFBO,\n updateDivergenceFBO,\n updatePointer,\n updatePressureFBO,\n updateVelocityFBO,\n setParams,\n params,\n ]\n );\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n materials: materials,\n camera: camera,\n renderTarget: {\n velocity: velocityFBO,\n density: densityFBO,\n curl: curlFBO,\n divergence: divergenceFBO,\n pressure: pressureFBO,\n },\n },\n ];\n};\n","import { useEffect, useMemo, useRef } from \"react\";\nimport * as THREE from \"three\";\n\ntype TcreateMesh = {\n scale: number;\n max: number;\n texture?: THREE.Texture;\n scene: THREE.Scene;\n};\nexport const useMesh = ({ scale, max, texture, scene }: TcreateMesh) => {\n const meshArr = useRef([]);\n const geometry = useMemo(\n () => new THREE.PlaneGeometry(scale, scale),\n [scale]\n );\n const material = useMemo(\n () =>\n new THREE.MeshBasicMaterial({\n map: texture ?? null,\n transparent: true,\n blending: THREE.AdditiveBlending,\n depthTest: false,\n depthWrite: false,\n }),\n [texture]\n );\n useEffect(() => {\n for (let i = 0; i < max; i++) {\n const mesh = new THREE.Mesh(geometry.clone(), material.clone());\n mesh.rotateZ(2 * Math.PI * Math.random());\n mesh.visible = false;\n scene.add(mesh);\n meshArr.current.push(mesh);\n }\n }, [geometry, material, scene, max]);\n return meshArr.current;\n};\n","import { useCallback, useMemo, useRef } from \"react\";\nimport * as THREE from \"three\";\nimport { useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { useSingleFBO } from \"../utils/useSingleFBO\";\nimport { usePointer } from \"../utils/usePointer\";\nimport { HooksReturn } from \"../types\";\nimport { useParams } from \"../utils/useParams\";\n\nexport type RippleParams = {\n /** rippleが出現する頻度,default:0.01 */\n frequency?: number;\n /** rippleの回転,default:0.01 */\n rotation?: number;\n /** rippleがフェードアウトするスピード,default:0.9 */\n fadeout_speed?: number;\n /** rippleの拡大率,default:0.15 */\n scale?: number;\n /** rippleの透明度,default:0.6 */\n alpha?: number;\n};\n\nexport type RippleObject = {\n scene: THREE.Scene;\n meshArr: THREE.Mesh[];\n camera: THREE.Camera;\n renderTarget: THREE.WebGLRenderTarget;\n};\n\nexport const useRipple = ({\n texture,\n scale = 64,\n max = 100,\n size,\n}: {\n /** texture applied to ripple */\n texture: THREE.Texture;\n /** ripple size, default:64 */\n scale?: number;\n /** ripple max length, default:100 */\n max?: number;\n size: Size;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const meshArr = useMesh({\n scale: scale,\n max: max,\n texture,\n scene,\n });\n const camera = useCamera(size);\n const updatePointer = usePointer();\n const [renderTarget, updateRenderTarget] = useSingleFBO({\n scene,\n camera,\n size,\n });\n\n const [params, setParams] = useParams({\n frequency: 0.01,\n rotation: 0.01,\n fadeout_speed: 0.9,\n scale: 0.15,\n alpha: 0.6,\n });\n\n const currentWave = useRef(0);\n\n const updateFx = useCallback(\n (props: RootState, updateParams: RippleParams) => {\n const { gl, pointer, size } = props;\n\n setParams(updateParams);\n\n const { currentPointer, diffPointer } = updatePointer(pointer);\n if (params.frequency! < diffPointer.length()) {\n const mesh = meshArr[currentWave.current];\n mesh.visible = true;\n mesh.position.set(\n currentPointer.x * (size.width / 2),\n currentPointer.y * (size.height / 2),\n 0\n );\n mesh.scale.x = mesh.scale.y = 0.0;\n (mesh.material as THREE.MeshBasicMaterial).opacity = params.alpha!;\n currentWave.current = (currentWave.current + 1) % max;\n }\n meshArr.forEach((mesh) => {\n if (mesh.visible) {\n const material = mesh.material as THREE.MeshBasicMaterial;\n mesh.rotation.z += params.rotation!;\n material.opacity *= params.fadeout_speed!;\n mesh.scale.x =\n params.fadeout_speed! * mesh.scale.x + params.scale!;\n mesh.scale.y = mesh.scale.x;\n if (material.opacity < 0.002) mesh.visible = false;\n }\n });\n\n const bufferTexture = updateRenderTarget(gl);\n return bufferTexture;\n },\n [updateRenderTarget, meshArr, updatePointer, max, params, setParams]\n );\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n camera: camera,\n meshArr: meshArr,\n renderTarget: renderTarget,\n },\n ];\n};\n","varying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\tgl_Position = vec4(position, 1.0);\n}","precision mediump float;\n\nvoid main(){\n\tgl_FragColor = vec4(0.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/init.frag\";\n\nexport const useInitialMaterial = () => {\n const initialMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n depthTest: false,\n depthWrite: false,\n }),\n []\n );\n\n return initialMaterial as THREE.ShaderMaterial;\n};\n","precision highp float;\n\nuniform float viscosity;\nuniform float forceRadius;\nuniform float forceCoefficient;\nuniform vec2 resolution;\nuniform sampler2D dataTex;\nuniform vec2 pointerPos;\nuniform vec2 beforePointerPos;\n\n#pragma glslify: map = require('./map.glsl')\n#pragma glslify: samplePressure = require('./samplePressure.glsl')\n#pragma glslify: sampleVelocity = require('./sampleVelocity.glsl')\n\nvarying vec2 vUv;\n\nvoid main(){\n\tvec2 r = resolution;\n\tvec2 uv = gl_FragCoord.xy / r;\n\tvec4 data = texture2D(dataTex, uv);\n\tvec2 v = data.xy;\n\n\tvec2 offsetX = vec2(1.0, 0.0);\n\tvec2 offsetY = vec2(0.0, 1.0);\n\n\t// 上下左右の圧力\n\tfloat pLeft = samplePressure(dataTex, (gl_FragCoord.xy - offsetX) / r, r);\n\tfloat pRight = samplePressure(dataTex, (gl_FragCoord.xy + offsetX) / r, r);\n\tfloat pTop = samplePressure(dataTex, (gl_FragCoord.xy - offsetY) / r, r);\n\tfloat pBottom = samplePressure(dataTex, (gl_FragCoord.xy + offsetY) / r, r);\n\n\t// マウス\n\tvec2 mPos = 0.5 * (pointerPos + 1.0) * r;\n\tvec2 mPPos = 0.5 * (beforePointerPos + 1.0) * r;\n\tvec2 mouseV = mPos - mPPos;\n\tfloat len = length(mPos - uv * r) / forceRadius;\n\tfloat d = clamp(1.0 - len, 0.0, 1.0) * length(mouseV) * forceCoefficient;\n\tvec2 mforce = d * normalize(mPos - uv * r + mouseV);\n\n\tv += vec2(pRight - pLeft, pBottom - pTop) * 0.5;\n\tv += mforce;\n\tv *= viscosity;\n\n\tgl_FragColor = vec4(v, data.zw);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/velocity.frag\";\n\ntype TUniforms = {\n resolution: { value: THREE.Vector2 };\n viscosity: { value: number };\n forceRadius: { value: number };\n forceCoefficient: { value: number };\n dataTex: { value: THREE.Texture };\n pointerPos: { value: THREE.Vector2 };\n beforePointerPos: { value: THREE.Vector2 };\n};\n\nexport class VelocityMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useVelocityMaterial = () => {\n const velocityMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n resolution: { value: new THREE.Vector2() },\n dataTex: { value: null },\n pointerPos: { value: null },\n beforePointerPos: { value: null },\n viscosity: { value: 0.0 },\n forceRadius: { value: 0.0 },\n forceCoefficient: { value: 0.0 },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return velocityMaterial as VelocityMaterial;\n};\n","precision highp float;\n\nuniform float attenuation;\nuniform vec2 resolution;\nuniform sampler2D dataTex;\n\n#pragma glslify: sampleVelocity = require('./sampleVelocity.glsl')\n#pragma glslify: samplePressure = require('./samplePressure.glsl')\n\nvarying vec2 vUv;\n\nvec2 bilerpVelocity(sampler2D tex, vec2 p, vec2 resolution) {\n\tvec4 ij; // i0, j0, i1, j1\n\tij.xy = floor(p - 0.5) + 0.5;\n\tij.zw = ij.xy + 1.0;\n\n\tvec4 uv = ij / resolution.xyxy;\n\tvec2 d11 = sampleVelocity(tex, uv.xy, resolution);\n\tvec2 d21 = sampleVelocity(tex, uv.zy, resolution);\n\tvec2 d12 = sampleVelocity(tex, uv.xw, resolution);\n\tvec2 d22 = sampleVelocity(tex, uv.zw, resolution);\n\n\tvec2 a = p - ij.xy;\n\n\treturn mix(mix(d11, d21, a.x), mix(d12, d22, a.x), a.y);\n}\n\nvoid main(){\n\tvec2 r = resolution;\n\tvec2 p = gl_FragCoord.xy - sampleVelocity(dataTex, gl_FragCoord.xy / r, r);\n\n\tgl_FragColor = vec4(bilerpVelocity(dataTex, p, r) * attenuation, samplePressure(dataTex, gl_FragCoord.xy / r, r), 0.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/advection.frag\";\n\ntype TUniforms = {\n resolution: { value: THREE.Vector2 };\n dataTex: { value: THREE.Texture };\n attenuation: { value: number };\n};\n\nexport class AdvectionMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useAdvectionMaterial = () => {\n const advectionMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n resolution: { value: new THREE.Vector2(0, 0) },\n dataTex: { value: null },\n attenuation: { value: 0.0 },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return advectionMaterial as AdvectionMaterial;\n};\n","precision highp float;\n\nuniform vec2 resolution;\nuniform sampler2D dataTex;\n\n#pragma glslify: sampleVelocity = require('./sampleVelocity.glsl')\n\nvoid main(){\n\tvec2 r = resolution;\n\tvec4 data = texture2D(dataTex, gl_FragCoord.xy / r);\n\n\tvec2 offsetX = vec2(1.0, 0.0);\n\tvec2 offsetY = vec2(0.0, 1.0);\n\n\t// 上下左右の速度\n\tvec2 vLeft = sampleVelocity(dataTex, (gl_FragCoord.xy - offsetX) / r, r);\n\tvec2 vRight = sampleVelocity(dataTex, (gl_FragCoord.xy + offsetX) / r, r);\n\tvec2 vTop = sampleVelocity(dataTex, (gl_FragCoord.xy - offsetY) / r, r);\n\tvec2 vBottom = sampleVelocity(dataTex, (gl_FragCoord.xy + offsetY) / r, r);\n\n\tfloat divergence = ((vRight.x - vLeft.x) + (vBottom.y - vTop.y)) * 0.5;\n\n\tgl_FragColor = vec4(data.xy, data.z, divergence);\n\n}\n\n","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/divergence.frag\";\n\ntype TUniforms = {\n resolution: { value: THREE.Vector2 };\n dataTex: { value: THREE.Texture };\n};\n\nexport class DivergenceMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useDivergenceMaterial = () => {\n const divergenceMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n resolution: { value: new THREE.Vector2() },\n dataTex: { value: null },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return divergenceMaterial as DivergenceMaterial;\n};\n","precision highp float;\n\nuniform float alpha;\nuniform float beta;\nuniform vec2 resolution;\nuniform sampler2D dataTex;\n\n#pragma glslify: samplePressure = require('./samplePressure.glsl')\n\nvoid main(){\n\tvec2 r = resolution;\n\tvec4 data = texture2D(dataTex, gl_FragCoord.xy / r);\n\n\t// 上下左右の圧力\n\tfloat pLeft = samplePressure(dataTex, (gl_FragCoord.xy - vec2(1.0, 0.0)) / r, r);\n\tfloat pRight = samplePressure(dataTex, (gl_FragCoord.xy + vec2(1.0, 0.0)) / r, r);\n\tfloat pTop = samplePressure(dataTex, (gl_FragCoord.xy - vec2(0.0, 1.0)) / r, r);\n\tfloat pBottom = samplePressure(dataTex, (gl_FragCoord.xy + vec2(0.0, 1.0)) / r, r);\n\n\tfloat divergence = data.w;\n\tfloat pressure = (divergence * alpha + (pLeft + pRight + pTop + pBottom)) * 0.25 * beta;\n\tgl_FragColor = vec4(data.xy, pressure, divergence);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/pressure.frag\";\n\ntype TUniforms = {\n resolution: { value: THREE.Vector2 };\n dataTex: { value: THREE.Texture };\n alpha: { value: number };\n beta: { value: number };\n};\n\nexport class PressureMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const usePressureMaterial = () => {\n const pressureMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n resolution: { value: new THREE.Vector2() },\n dataTex: { value: null },\n alpha: { value: 0.0 },\n beta: { value: 0.0 },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return pressureMaterial as PressureMaterial;\n};\n","import * as THREE from \"three\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport { useInitialMaterial } from \"./materials/useInitialMaterial\";\nimport {\n VelocityMaterial,\n useVelocityMaterial,\n} from \"./materials/useVelocityMaterial\";\nimport {\n AdvectionMaterial,\n useAdvectionMaterial,\n} from \"./materials/useAdvectionMaterial\";\nimport {\n DivergenceMaterial,\n useDivergenceMaterial,\n} from \"./materials/useDivergenceMaterial\";\nimport {\n PressureMaterial,\n usePressureMaterial,\n} from \"./materials/usePressureMaterial\";\nimport { useResolution } from \"../utils/useResolution\";\nimport { useAddMesh } from \"../utils/useAddMesh\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { Size } from \"@react-three/fiber\";\n\ntype TMaterials =\n | VelocityMaterial\n | AdvectionMaterial\n | DivergenceMaterial\n | PressureMaterial;\n\nexport type SimpleFruidMaterials = {\n velocityMaterial: VelocityMaterial;\n advectionMaterial: AdvectionMaterial;\n divergenceMaterial: DivergenceMaterial;\n pressureMaterial: PressureMaterial;\n};\n\ntype TUseMeshReturnType = [\n SimpleFruidMaterials,\n (material: TMaterials) => void\n];\n\nexport const useMesh = ({\n scene,\n size,\n dpr,\n}: {\n scene: THREE.Scene;\n size: Size;\n dpr: number;\n}): TUseMeshReturnType => {\n const geometry = useMemo(() => new THREE.PlaneGeometry(2, 2), []);\n const initialMaterial = useInitialMaterial();\n const updateMaterial = initialMaterial.clone();\n const velocityMaterial = useVelocityMaterial();\n const advectionMaterial = useAdvectionMaterial();\n const divergenceMaterial = useDivergenceMaterial();\n const pressureMaterial = usePressureMaterial();\n const materials = useMemo(\n () => ({\n velocityMaterial,\n advectionMaterial,\n divergenceMaterial,\n pressureMaterial,\n }),\n [\n velocityMaterial,\n advectionMaterial,\n divergenceMaterial,\n pressureMaterial,\n ]\n );\n\n const resolution = useResolution(size, dpr);\n useEffect(() => {\n for (const material of Object.values(materials)) {\n setUniform(material, \"resolution\", resolution);\n }\n }, [resolution, materials]);\n\n const mesh = useAddMesh(scene, geometry, initialMaterial);\n useEffect(() => {\n initialMaterial.dispose();\n mesh.material = updateMaterial;\n }, [initialMaterial, mesh, updateMaterial]);\n\n const setMeshMaterial = useCallback(\n (material: TMaterials) => {\n mesh.material = material;\n mesh.material.needsUpdate = true;\n },\n [mesh]\n );\n\n return [materials, setMeshMaterial];\n};\n","import * as THREE from \"three\";\nimport { SimpleFruidMaterials, useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { useDoubleFBO } from \"../utils/useDoubleFBO\";\nimport { useCallback, useMemo } from \"react\";\nimport { usePointer } from \"../utils/usePointer\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { useParams } from \"../utils/useParams\";\nimport { HooksReturn } from \"../types\";\nimport { DoubleRenderTarget } from \"../utils/types\";\n\nexport type SimpleFruidParams = {\n /** 圧力のヤコビ法の計算回数 */\n pressure_iterations?: number;\n /** 圧力のステップごとの減衰値 */\n attenuation?: number;\n /** 圧力計算時の係数 */\n alpha?: number;\n /** 圧力計算時の係数 */\n beta?: number;\n /** 粘度 */\n viscosity?: number;\n /** 力を加える円の半径 */\n forceRadius?: number;\n /** 速度の係数 */\n forceCoefficient?: number;\n};\n\nexport type SimpleFruidObject = {\n scene: THREE.Scene;\n materials: SimpleFruidMaterials;\n camera: THREE.Camera;\n renderTarget: DoubleRenderTarget;\n};\n\nexport const useSimpleFruid = ({\n size,\n dpr,\n}: {\n size: Size;\n dpr: number;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const [materials, setMeshMaterial] = useMesh({ scene, size, dpr });\n const camera = useCamera(size);\n const updatePointer = usePointer();\n\n const [renderTarget, updateRenderTarget] = useDoubleFBO({\n scene,\n camera,\n size,\n isSizeUpdate: true,\n });\n\n const [params, setParams] = useParams({\n pressure_iterations: 20,\n attenuation: 1.0,\n alpha: 1.0,\n beta: 1.0,\n viscosity: 0.99,\n forceRadius: 90,\n forceCoefficient: 1.0,\n });\n\n const updateFx = useCallback(\n (props: RootState, updateParams: SimpleFruidParams) => {\n const { gl, pointer } = props;\n\n setParams(updateParams);\n\n setUniform(\n materials.advectionMaterial,\n \"attenuation\",\n params.attenuation!\n );\n setUniform(materials.pressureMaterial, \"alpha\", params.alpha!);\n setUniform(materials.pressureMaterial, \"beta\", params.beta!);\n setUniform(materials.velocityMaterial, \"viscosity\", params.viscosity!);\n setUniform(\n materials.velocityMaterial,\n \"forceRadius\",\n params.forceRadius!\n );\n setUniform(\n materials.velocityMaterial,\n \"forceCoefficient\",\n params.forceCoefficient!\n );\n\n // update divergence\n updateRenderTarget(gl, ({ read }) => {\n setMeshMaterial(materials.divergenceMaterial);\n setUniform(materials.divergenceMaterial, \"dataTex\", read);\n });\n\n // update pressure\n const solverIteration = params.pressure_iterations!;\n for (let i = 0; i < solverIteration; i++) {\n updateRenderTarget(gl, ({ read }) => {\n setMeshMaterial(materials.pressureMaterial);\n setUniform(materials.pressureMaterial, \"dataTex\", read);\n });\n }\n\n // update velocity\n const { currentPointer, prevPointer } = updatePointer(pointer);\n setUniform(materials.velocityMaterial, \"pointerPos\", currentPointer);\n setUniform(\n materials.velocityMaterial,\n \"beforePointerPos\",\n prevPointer\n );\n updateRenderTarget(gl, ({ read }) => {\n setMeshMaterial(materials.velocityMaterial);\n setUniform(materials.velocityMaterial, \"dataTex\", read);\n });\n\n // update advection\n const outPutTexture = updateRenderTarget(gl, ({ read }) => {\n setMeshMaterial(materials.advectionMaterial);\n setUniform(materials.advectionMaterial, \"dataTex\", read);\n });\n\n return outPutTexture;\n },\n [\n materials,\n setMeshMaterial,\n updatePointer,\n updateRenderTarget,\n setParams,\n params,\n ]\n );\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n materials: materials,\n camera: camera,\n renderTarget: renderTarget,\n },\n ];\n};\n","varying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\tgl_Position = vec4(position, 1.0);\n}","precision mediump float;\n\nvarying vec2 vUv;\nuniform vec2 uResolution;\nuniform vec2 uImageResolution;\n\nuniform sampler2D uTexture0;\nuniform sampler2D uTexture1;\nuniform sampler2D noise;\nuniform float noiseStrength;\nuniform float progress;\nuniform float dirX;\nuniform float dirY;\n\nvoid main() {\n\tvec2 bgRatio=vec2(\n\t\tmin((uResolution.x/uResolution.y)/(uImageResolution.x/uImageResolution.y),1.),\n\t\tmin((uResolution.y/uResolution.x)/(uImageResolution.y/uImageResolution.x),1.)\n\t);\n\tvec2 uv=vec2(\n\t\tvUv.x*bgRatio.x+(1.-bgRatio.x)*.5,\n\t\tvUv.y*bgRatio.y+(1.-bgRatio.y)*.5\n\t);\n\n\t// noise\n\tvec2 noiseMap = texture2D(noise, uv).rg;\n\tnoiseMap=noiseMap*2.0-1.0;\n\tuv += noiseMap * noiseStrength;\n\n\t// uvをセンター基準に\n\tvec2 centeredUV = uv - vec2(0.5);\n\t\n\t//texture 0\n\tfloat xOffsetTexture0 = 0.5 - dirX * progress;\n\tfloat yOffsetTexture0 = 0.5 - dirY * progress;\n\tvec2 samplePosTexture0 = vec2(xOffsetTexture0, yOffsetTexture0) + centeredUV;\n\n\t//texture 1\n\tfloat xOffsetTexture1 = 0.5 + dirX * (1.0 - progress);\n\tfloat yOffsetTexture1 = 0.5 + dirY * (1.0 - progress);\n\tvec2 samplePosTexture1 = vec2(xOffsetTexture1, yOffsetTexture1) + centeredUV;\n\n\tvec4 color0 = texture2D(uTexture0, samplePosTexture0);\n\tvec4 color1 = texture2D(uTexture1, samplePosTexture1);\n\n\tgl_FragColor = mix(color0, color1, progress);\n\n}","import { useEffect, useMemo } from \"react\";\nimport * as THREE from \"three\";\nimport { useResolution } from \"../utils/useResolution\";\nimport vertexShader from \"./shader/main.vert\";\nimport fragmentShader from \"./shader/main.frag\";\nimport { useAddMesh } from \"../utils/useAddMesh\";\nimport { Size } from \"@react-three/fiber\";\n\ntype TUniforms = {\n uResolution: { value: THREE.Vector2 };\n uImageResolution: { value: THREE.Vector2 };\n uTexture0: { value: THREE.Texture };\n uTexture1: { value: THREE.Texture };\n noise: { value: THREE.Texture };\n noiseStrength: { value: number };\n progress: { value: number };\n dirX: { value: number };\n dirY: { value: number };\n};\n\nexport class MetamorphoseMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useMesh = ({\n scene,\n size,\n dpr,\n}: {\n scene: THREE.Scene;\n size: Size;\n dpr: number;\n}) => {\n const geometry = useMemo(() => new THREE.PlaneGeometry(2, 2), []);\n const material = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uResolution: { value: new THREE.Vector2() },\n uImageResolution: { value: new THREE.Vector2() },\n uTexture0: { value: new THREE.Texture() },\n uTexture1: { value: new THREE.Texture() },\n noise: { value: new THREE.Texture() },\n noiseStrength: { value: 0.0 },\n progress: { value: 0.0 },\n dirX: { value: 0.0 },\n dirY: { value: 0.0 },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n const resolution = useResolution(size, dpr);\n useEffect(() => {\n material.uniforms.uResolution.value = resolution.clone();\n }, [resolution, material]);\n\n useAddMesh(scene, geometry, material);\n\n return material as MetamorphoseMaterial;\n};\n","import * as THREE from \"three\";\nimport { useCallback, useMemo } from \"react\";\nimport { useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { useSingleFBO } from \"../utils/useSingleFBO\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { HooksReturn } from \"../types\";\nimport { useParams } from \"../utils/useParams\";\n\nexport type TransitionBgParams = {\n texture0?: THREE.Texture;\n texture1?: THREE.Texture;\n imageResolution?: THREE.Vector2;\n noise?: THREE.Texture;\n noiseStrength?: number;\n progress?: number;\n dir?: THREE.Vector2;\n};\n\nexport type TransitionBgObject = {\n scene: THREE.Scene;\n material: THREE.Material;\n camera: THREE.Camera;\n renderTarget: THREE.WebGLRenderTarget;\n};\n\nexport const useTransitionBg = ({\n size,\n dpr,\n}: {\n size: Size;\n dpr: number;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const material = useMesh({ scene, size, dpr });\n const camera = useCamera(size);\n const [renderTarget, updateRenderTarget] = useSingleFBO({\n scene,\n camera,\n dpr,\n size,\n isSizeUpdate: true,\n });\n\n const [params, setParams] = useParams({\n texture0: new THREE.Texture(),\n texture1: new THREE.Texture(),\n imageResolution: new THREE.Vector2(0, 0),\n noise: new THREE.Texture(),\n noiseStrength: 0.0,\n progress: 0.0,\n dir: new THREE.Vector2(0, 0),\n });\n\n const updateFx = useCallback(\n (props: RootState, updateParams: TransitionBgParams) => {\n const { gl } = props;\n\n setParams(updateParams);\n\n setUniform(material, \"uTexture0\", params.texture0!);\n setUniform(material, \"uTexture1\", params.texture1!);\n setUniform(material, \"uImageResolution\", params.imageResolution!);\n setUniform(material, \"noise\", params.noise!);\n setUniform(material, \"noiseStrength\", params.noiseStrength!);\n setUniform(material, \"progress\", params.progress!);\n setUniform(material, \"dirX\", params.dir!.x);\n setUniform(material, \"dirY\", params.dir!.y);\n\n const bufferTexture = updateRenderTarget(gl);\n\n return bufferTexture;\n },\n [updateRenderTarget, material, params, setParams]\n );\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n material: material,\n camera: camera,\n renderTarget: renderTarget,\n },\n ];\n};\n"],"names":["main_default","useResolution","size","dpr","_width","_height","useMemo","THREE","useAddMesh","scene","geometry","material","mesh","useEffect","setUniform","key","value","useMesh","vertexShader","fragmentShader","resolution","getCameraProps","width","height","frustumSize","aspect","w","h","useCamera","near","far","FBO_OPTION","useSingleFBO","camera","isSizeUpdate","renderTarget","useRef","useLayoutEffect","_a","updateRenderTarget","useCallback","gl","onBeforeRender","fbo","useDoubleFBO","temp","initRenderTargets","read","write","_b","usePointer","prevPointer","diffPointer","lastUpdateTime","velocity","isMoved","currentPointer","now","current","deltaTime","isUpdate","prevTemp","useParams","params","paramsRef","setParams","updateParams","paramKey","useBrush","updatePointer","props","pointer","useDuoTone","useFlowmap","useFogProjection","clock","init_default","useInitialMaterial","advection_default","useAdvectionMaterial","divergence_default","useDivergenceMaterial","pressure_default","usePressureMaterial","curl_default","useCurlMaterial","vorticity_default","useVorticityMaterial","clear_default","useClearMaterial","gradientSubtract_default","useGradientSubtractMaterial","splat_default","useSplateMaterial","initialMaterial","updateMaterial","curlMaterial","vorticityMaterial","advectionMaterial","divergenceMaterial","pressureMaterial","clearMaterial","gradientSubtractMaterial","splatMaterial","materials","setMeshMaterial","useFruid","fboProps","velocityFBO","updateVelocityFBO","densityFBO","updateDensityFBO","curlFBO","updateCurlFBO","divergenceFBO","updateDivergenceFBO","pressureFBO","updatePressureFBO","lastTime","scaledDiffVec","spaltVec","dt","velocityTex","densityTex","isVelocityUpdate","scaledDiff","color","curlTex","divergenceTex","pressureTexTemp","i","scale","max","texture","meshArr","useRipple","currentWave","velocity_default","useVelocityMaterial","velocityMaterial","useSimpleFruid","solverIteration","useTransitionBg"],"mappings":"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"} \ No newline at end of file diff --git a/packages/use-shader-fx/build/use-shader-fx.umd.cjs b/packages/use-shader-fx/build/use-shader-fx.umd.cjs deleted file mode 100644 index 75f165e2..00000000 --- a/packages/use-shader-fx/build/use-shader-fx.umd.cjs +++ /dev/null @@ -1,613 +0,0 @@ -(function(w,$){typeof exports=="object"&&typeof module<"u"?$(exports,require("three"),require("react")):typeof define=="function"&&define.amd?define(["exports","three","react"],$):(w=typeof globalThis<"u"?globalThis:w||self,$(w["use-shader-fx"]={},w.THREE,w.React))})(this,function(w,$,a){"use strict";function W(t){const u=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const e=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(u,r,e.get?e:{enumerable:!0,get:()=>t[r]})}}return u.default=t,Object.freeze(u)}const n=W($);var H=`varying vec2 vUv; - -void main() { - vUv = uv; - gl_Position = vec4(position, 1.0); -}`,N=`precision mediump float; - -uniform sampler2D uMap; -uniform sampler2D uTexture; -uniform float uRadius; -uniform float uAlpha; -uniform float uDissipation; -uniform float uMagnification; -uniform vec2 uResolution; -uniform float uSmudge; -uniform float uAspect; -uniform vec2 uMouse; -uniform vec2 uPrevMouse; -uniform vec2 uVelocity; - -uniform float uMotionBlur; -uniform int uMotionSample; - -varying vec2 vUv; - -float isOnLine(vec2 point, vec2 start, vec2 end, float width, float aspect) { - - point.x *= aspect; - start.x *= aspect; - end.x *= aspect; - - - vec2 dir = normalize(end - start); - - vec2 n = vec2(dir.y, -dir.x); - - vec2 p0 = point - start; - - - float distToLine = abs(dot(p0, n)); - float distAlongLine = dot(p0, dir); - float totalLength = length(end - start); - - - float distFromStart = length(point - start); - float distFromEnd = length(point - end); - - bool withinLine = (distToLine < width && distAlongLine > 0.0 && distAlongLine < totalLength) || distFromStart < width || distFromEnd < width; - - return float(withinLine); -} - -vec4 createSmudge(){ - vec2 offsets[9]; - offsets[0] = vec2(-1, -1); offsets[1] = vec2( 0, -1); offsets[2] = vec2( 1, -1); - offsets[3] = vec2(-1, 0); offsets[4] = vec2( 0, 0); offsets[5] = vec2( 1, 0); - offsets[6] = vec2(-1, 1); offsets[7] = vec2( 0, 1); offsets[8] = vec2( 1, 1); - - for(int i = 0; i < 9; i++) { - offsets[i] = (offsets[i] * uSmudge) / uResolution; - } - vec4 smudgedColor = vec4(0.0); - for(int i = 0; i < 9; i++) { - smudgedColor += texture2D(uMap, vUv + offsets[i]); - } - return smudgedColor / 9.0; -} - -vec4 createMotionBlur(vec4 baseColor, vec2 velocity, float motion, int samples) { - vec4 motionBlurredColor = baseColor; - vec2 scaledVelocity = velocity * motion; - for(int i = 1; i < samples; i++) { - float t = float(i) / float(samples - 1); - vec2 offset = t * scaledVelocity / uResolution; - motionBlurredColor += texture2D(uMap, vUv + offset); - } - return motionBlurredColor / float(samples); -} - -void main() { - - vec2 st = vUv * 2.0 - 1.0; - - - vec2 velocity = uVelocity * uResolution; - - - vec4 smudgedColor = createSmudge(); - - - vec4 motionBlurredColor = createMotionBlur(smudgedColor, uVelocity, uMotionBlur,uMotionSample); - - - vec4 bufferColor = motionBlurredColor * uDissipation; - - - float modifiedRadius = uRadius + (length(velocity) * uMagnification); - modifiedRadius = max(0.0,modifiedRadius); - - - - vec3 color = vec3(1.0,1.0,1.0); - - - vec4 textureColor = texture2D(uTexture, vUv); - vec3 finalColor = mix(color, textureColor.rgb, textureColor.a); - - - float onLine = isOnLine(st, uPrevMouse, uMouse, modifiedRadius, uAspect); - - - bufferColor.rgb = mix(bufferColor.rgb, finalColor, onLine); - gl_FragColor = bufferColor; -}`;const _=(t,u=!1)=>{const r=u?t.width*u:t.width,e=u?t.height*u:t.height;return a.useMemo(()=>new n.Vector2(r,e),[r,e])},U=(t,u,r)=>{const e=a.useMemo(()=>new n.Mesh(u,r),[u,r]);return a.useEffect(()=>{t.add(e)},[t,e]),e},o=(t,u,r)=>{t.uniforms&&t.uniforms[u]&&r!==void 0&&r!==null?t.uniforms[u].value=r:console.error(`Uniform key "${u}" does not exist in the material. or "${u}" is null | undefined`)},K=({scene:t,size:u,dpr:r})=>{const e=a.useMemo(()=>new n.PlaneGeometry(2,2),[]),i=a.useMemo(()=>new n.ShaderMaterial({uniforms:{uMap:{value:null},uResolution:{value:new n.Vector2(0,0)},uAspect:{value:1},uTexture:{value:new n.Texture},uRadius:{value:0},uAlpha:{value:0},uSmudge:{value:0},uDissipation:{value:0},uMagnification:{value:0},uMotionBlur:{value:0},uMotionSample:{value:10},uMouse:{value:new n.Vector2(0,0)},uPrevMouse:{value:new n.Vector2(0,0)},uVelocity:{value:new n.Vector2(0,0)}},vertexShader:H,fragmentShader:N}),[]),s=_(u,r);return a.useEffect(()=>{o(i,"uAspect",s.width/s.height),o(i,"uResolution",s.clone())},[s,i]),U(t,e,i),i},Z=(t,u)=>{const r=u,e=t/u,[i,s]=[r*e/2,r/2];return{width:i,height:s,near:-1e3,far:1e3}},D=t=>{const u=_(t),{width:r,height:e,near:i,far:s}=Z(u.x,u.y);return a.useMemo(()=>new n.OrthographicCamera(-r,r,e,-e,i,s),[r,e,i,s])},j={minFilter:n.LinearFilter,magFilter:n.LinearFilter,type:n.HalfFloatType,depthBuffer:!1,stencilBuffer:!1},O=({scene:t,camera:u,size:r,dpr:e=!1,isSizeUpdate:i=!1})=>{const s=a.useRef(),c=_(r,e);s.current=a.useMemo(()=>new n.WebGLRenderTarget(c.x,c.y,j),[]),a.useLayoutEffect(()=>{var l;i&&((l=s.current)==null||l.setSize(c.x,c.y))},[c,i]);const f=a.useCallback((l,v)=>{const d=s.current;return l.setRenderTarget(d),v&&v({read:d.texture}),l.render(t,u),l.setRenderTarget(null),l.clear(),d.texture},[t,u]);return[s.current,f]},L=({scene:t,camera:u,size:r,dpr:e=!1,isSizeUpdate:i=!1})=>{const s=a.useRef({read:null,write:null,swap:function(){let v=this.read;this.read=this.write,this.write=v}}),c=_(r,e),f=a.useMemo(()=>{const v=new n.WebGLRenderTarget(c.x,c.y,j),d=new n.WebGLRenderTarget(c.x,c.y,j);return{read:v,write:d}},[]);s.current.read=f.read,s.current.write=f.write,a.useLayoutEffect(()=>{var v,d;i&&((v=s.current.read)==null||v.setSize(c.x,c.y),(d=s.current.write)==null||d.setSize(c.x,c.y))},[c,i]);const l=a.useCallback((v,d)=>{var p;const m=s.current;return v.setRenderTarget(m.write),d&&d({read:m.read.texture,write:m.write.texture}),v.render(t,u),m.swap(),v.setRenderTarget(null),v.clear(),(p=m.read)==null?void 0:p.texture},[t,u]);return[{read:s.current.read,write:s.current.write},l]},A=()=>{const t=a.useRef(new n.Vector2(0,0)),u=a.useRef(new n.Vector2(0,0)),r=a.useRef(0),e=a.useRef(new n.Vector2(0,0)),i=a.useRef(!1);return a.useCallback(c=>{const f=performance.now(),l=c.clone();r.current===0&&(r.current=f,t.current=l);const v=Math.max(1,f-r.current);r.current=f,e.current.copy(l).sub(t.current).divideScalar(v);const d=e.current.length()>0,m=i.current?t.current.clone():l;return!i.current&&d&&(i.current=!0),t.current=l,{currentPointer:l,prevPointer:m,diffPointer:u.current.subVectors(l,m),velocity:e.current,isVelocityUpdate:d}},[])},F=t=>{const u=a.useRef(t),r=a.useCallback(e=>{for(const i in e){const s=i;s in u.current&&e[s]!==void 0&&e[s]!==null?u.current[s]=e[s]:console.error(`"${String(s)}" does not exist in the params. or "${String(s)}" is null | undefined`)}},[]);return[u.current,r]},J=({size:t,dpr:u})=>{const r=a.useMemo(()=>new n.Scene,[]),e=K({scene:r,size:t,dpr:u}),i=D(t),s=A(),[c,f]=L({scene:r,camera:i,size:t}),[l,v]=F({texture:new n.Texture,radius:0,alpha:0,smudge:0,dissipation:0,magnification:0,motionBlur:0,motionSample:10});return[a.useCallback((m,p)=>{const{gl:M,pointer:g}=m;v(p),o(e,"uTexture",l.texture),o(e,"uRadius",l.radius),o(e,"uAlpha",l.alpha),o(e,"uSmudge",l.smudge),o(e,"uDissipation",l.dissipation),o(e,"uMagnification",l.magnification),o(e,"uMotionBlur",l.motionBlur),o(e,"uMotionSample",l.motionSample);const{currentPointer:h,prevPointer:S,velocity:b}=s(g);return o(e,"uMouse",h),o(e,"uPrevMouse",S),o(e,"uVelocity",b),f(M,({read:B})=>{o(e,"uMap",B)})},[e,s,f,l,v]),v,{scene:r,material:e,camera:i,renderTarget:c}]};var Q=`varying vec2 vUv; - -void main() { - vUv = uv; - gl_Position = vec4(position, 1.0); -}`,ee=`precision mediump float; - -varying vec2 vUv; -uniform sampler2D uTexture; - -uniform vec3 uColor0; -uniform vec3 uColor1; - -void main() { - vec2 uv = vUv; - vec4 texColor = texture2D(uTexture, uv); - float grayscale = dot(texColor.rgb, vec3(0.299, 0.587, 0.114)); - vec3 duotone = mix(uColor0, uColor1, grayscale); - gl_FragColor = vec4(duotone, texColor.a); -}`;const ne=t=>{const u=a.useMemo(()=>new n.PlaneGeometry(2,2),[]),r=a.useMemo(()=>new n.ShaderMaterial({uniforms:{uTexture:{value:new n.Texture},uColor0:{value:new n.Color(16777215)},uColor1:{value:new n.Color(0)}},vertexShader:Q,fragmentShader:ee}),[]);return U(t,u,r),r},te=({size:t})=>{const u=a.useMemo(()=>new n.Scene,[]),r=ne(u),e=D(t),[i,s]=O({scene:u,camera:e,size:t}),[c,f]=F({texture:new n.Texture,color0:new n.Color(16777215),color1:new n.Color(0)});return[a.useCallback((v,d)=>{const{gl:m}=v;return f(d),o(r,"uTexture",c.texture),o(r,"uColor0",c.color0),o(r,"uColor1",c.color1),s(m)},[s,r,f,c]),f,{scene:u,material:r,camera:e,renderTarget:i}]};var re=`varying vec2 vUv; - -void main() { - vUv = uv; - gl_Position = vec4(position, 1.0); -}`,oe=`precision mediump float; - -uniform sampler2D uMap; -uniform float uRadius; -uniform float uAlpha; -uniform float uDissipation; -uniform float uMagnification; -uniform vec2 uResolution; - -uniform float uAspect; -uniform vec2 uMouse; -uniform vec2 uVelocity; - -varying vec2 vUv; - -void main() { - - vec2 st = vUv * 2.0 - 1.0; - - vec2 vel = uVelocity * uResolution; - - - vec4 bufferColor = texture2D(uMap, vUv) * uDissipation; - - - vec3 color = vec3(vel * vec2(1, -1), 1.0 - pow(1.0 - min(1.0, length(vel)), 1.0)); - - - - vec2 nMouse = (uMouse + vec2(1.0)) * 0.5; - vec2 cursor = vUv - nMouse; - cursor.x *= uAspect; - - - float modifiedRadius = uRadius + (length(vel) * uMagnification); - modifiedRadius = max(0.0,modifiedRadius); - float finalBrush = smoothstep(modifiedRadius,0.0,length(cursor)) * uAlpha; - - - bufferColor.rgb = mix(bufferColor.rgb, color, vec3(finalBrush)); - - gl_FragColor = bufferColor; -}`;const ae=({scene:t,size:u,dpr:r})=>{const e=a.useMemo(()=>new n.PlaneGeometry(2,2),[]),i=a.useMemo(()=>new n.ShaderMaterial({uniforms:{uMap:{value:null},uResolution:{value:new n.Vector2(0,0)},uAspect:{value:1},uRadius:{value:0},uAlpha:{value:0},uDissipation:{value:0},uMagnification:{value:0},uMouse:{value:new n.Vector2(0,0)},uVelocity:{value:new n.Vector2(0,0)}},vertexShader:re,fragmentShader:oe}),[]),s=_(u,r);return a.useEffect(()=>{o(i,"uAspect",s.width/s.height),o(i,"uResolution",s.clone())},[s,i]),U(t,e,i),i},ie=({size:t,dpr:u})=>{const r=a.useMemo(()=>new n.Scene,[]),e=ae({scene:r,size:t,dpr:u}),i=D(t),s=A(),[c,f]=L({scene:r,camera:i,size:t}),[l,v]=F({radius:0,magnification:0,alpha:0,dissipation:0});return[a.useCallback((m,p)=>{const{gl:M,pointer:g}=m;v(p),o(e,"uRadius",l.radius),o(e,"uAlpha",l.alpha),o(e,"uDissipation",l.dissipation),o(e,"uMagnification",l.magnification);const{currentPointer:h,velocity:S}=s(g);return o(e,"uMouse",h),o(e,"uVelocity",S),f(M,({read:T})=>{o(e,"uMap",T)})},[e,s,f,l,v]),v,{scene:r,material:e,camera:i,renderTarget:c}]};var ue=`varying vec2 vUv; - -void main() { - vUv = uv; - gl_Position = vec4(position, 1.0); -}`,se=`precision mediump float; - -varying vec2 vUv; -uniform float uTime; -uniform sampler2D uTexture; -uniform float timeStrength; -uniform float distortionStrength; -uniform float fogEdge0; -uniform float fogEdge1; -uniform vec3 fogColor; -uniform int noiseOct; -uniform int fbmOct; - -const float per = 0.5; -const float PI = 3.1415926; - -float interpolate(float a, float b, float x){ - float f = (1.0 - cos(x * PI)) * 0.5; - return a * (1.0 - f) + b * f; -} - -float rnd(vec2 p){ - return fract(sin(dot(p ,vec2(12.9898,78.233))) * 43758.5453); -} - -float irnd(vec2 p){ - vec2 i = floor(p); - vec2 f = fract(p); - vec4 v = vec4(rnd(vec2(i.x,i.y)),rnd(vec2(i.x + 1.0,i.y)),rnd(vec2(i.x,i.y + 1.0)),rnd(vec2(i.x + 1.0, i.y + 1.0))); - return interpolate(interpolate(v.x, v.y, f.x), interpolate(v.z, v.w, f.x), f.y); -} - -float noise(vec2 p, float time){ - float t = 0.0; - for(int i = 0; i < noiseOct; i++){ - float freq = pow(2.0, float(i)); - float amp = pow(per, float(noiseOct - i)); - t += irnd(vec2(p.y / freq + time, p.x / freq + time)) * amp; - } - return t; -} - -float fbm(vec2 x, float time) { - float v = 0.0; - float a = 0.5; - vec2 shift = vec2(100); - mat2 rot = mat2(cos(0.5), sin(0.5), -sin(0.5), cos(0.50)); - float sign = 1.0; - for (int i = 0; i < fbmOct; ++i) { - v += a * noise(x, time * sign); - x = rot * x * 2.0 + shift; - a *= 0.5; - sign *= -1.0; - } - return v; -} - -void main() { - vec2 uv = vUv; - - float noiseMap = fbm(gl_FragCoord.xy ,uTime * timeStrength); - - float noiseTextureMap = noiseMap*2.0-1.0; - uv += noiseTextureMap * distortionStrength; - vec3 textureMap = texture2D(uTexture, uv).rgb; - - float edge0 = fogEdge0; - float edge1 = fogEdge1; - float blendValue = smoothstep(edge0, edge1, noiseMap); - - vec3 outputColor = blendValue * fogColor + (1.0 - blendValue) * textureMap; - gl_FragColor = vec4(outputColor, 1.0); -}`;const le=t=>{const u=a.useMemo(()=>new n.PlaneGeometry(2,2),[]),r=a.useMemo(()=>new n.ShaderMaterial({uniforms:{uTime:{value:0},uTexture:{value:new n.Texture},timeStrength:{value:0},distortionStrength:{value:0},fogEdge0:{value:0},fogEdge1:{value:.9},fogColor:{value:new n.Color(16777215)},noiseOct:{value:8},fbmOct:{value:3}},vertexShader:ue,fragmentShader:se}),[]);return U(t,u,r),r},ce=({size:t})=>{const u=a.useMemo(()=>new n.Scene,[]),r=le(u),e=D(t),[i,s]=O({scene:u,camera:e,size:t}),[c,f]=F({texture:new n.Texture,timeStrength:0,distortionStrength:0,fogEdge0:0,fogEdge1:.9,fogColor:new n.Color(16777215),noiseOct:8,fbmOct:3});return[a.useCallback((v,d)=>{const{gl:m,clock:p}=v;return f(d),o(r,"uTime",p.getElapsedTime()),o(r,"uTexture",c.texture),o(r,"timeStrength",c.timeStrength),o(r,"distortionStrength",c.distortionStrength),o(r,"fogEdge0",c.fogEdge0),o(r,"fogEdge1",c.fogEdge1),o(r,"fogColor",c.fogColor),o(r,"noiseOct",c.noiseOct),o(r,"fbmOct",c.fbmOct),s(m)},[s,r,f,c]),f,{scene:u,material:r,camera:e,renderTarget:i}]};var V=`precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -varying vec2 vL; -varying vec2 vR; -varying vec2 vT; -varying vec2 vB; -uniform vec2 texelSize; - -void main () { - vUv = uv; - vL = vUv - vec2(texelSize.x, 0.0); - vR = vUv + vec2(texelSize.x, 0.0); - vT = vUv + vec2(0.0, texelSize.y); - vB = vUv - vec2(0.0, texelSize.y); - gl_Position = vec4(position, 1.0); -}`,ve=`precision mediump float; - -void main(){ - gl_FragColor = vec4(0.0); -}`;const fe=()=>a.useMemo(()=>new n.ShaderMaterial({vertexShader:V,fragmentShader:ve,depthTest:!1,depthWrite:!1}),[]);var de=`precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -uniform sampler2D uVelocity; -uniform sampler2D uSource; -uniform vec2 texelSize; -uniform float dt; -uniform float dissipation; - -void main () { - vec2 coord = vUv - dt * texture2D(uVelocity, vUv).xy * texelSize; - gl_FragColor = dissipation * texture2D(uSource, coord); - gl_FragColor.a = 1.0; -}`;const me=()=>a.useMemo(()=>new n.ShaderMaterial({uniforms:{uVelocity:{value:new n.Texture},uSource:{value:new n.Texture},texelSize:{value:new n.Vector2},dt:{value:0},dissipation:{value:0}},vertexShader:V,fragmentShader:de}),[]);var pe=`precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -varying vec2 vL; -varying vec2 vR; -varying vec2 vT; -varying vec2 vB; -uniform sampler2D uVelocity; - -vec2 sampleVelocity (in vec2 uv) { - vec2 multiplier = vec2(1.0, 1.0); - if (uv.x < 0.0) { uv.x = 0.0; multiplier.x = -1.0; } - if (uv.x > 1.0) { uv.x = 1.0; multiplier.x = -1.0; } - if (uv.y < 0.0) { uv.y = 0.0; multiplier.y = -1.0; } - if (uv.y > 1.0) { uv.y = 1.0; multiplier.y = -1.0; } - return multiplier * texture2D(uVelocity, uv).xy; -} - -void main () { - float L = sampleVelocity(vL).x; - float R = sampleVelocity(vR).x; - float T = sampleVelocity(vT).y; - float B = sampleVelocity(vB).y; - float div = 0.5 * (R - L + T - B); - gl_FragColor = vec4(div, 0.0, 0.0, 1.0); -}`;const ge=()=>a.useMemo(()=>new n.ShaderMaterial({uniforms:{uVelocity:{value:null},texelSize:{value:new n.Vector2}},vertexShader:V,fragmentShader:pe}),[]);var xe=`precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -varying vec2 vL; -varying vec2 vR; -varying vec2 vT; -varying vec2 vB; -uniform sampler2D uPressure; -uniform sampler2D uDivergence; - -vec2 boundary (in vec2 uv) { - uv = min(max(uv, 0.0), 1.0); - return uv; -} - -void main () { - float L = texture2D(uPressure, boundary(vL)).x; - float R = texture2D(uPressure, boundary(vR)).x; - float T = texture2D(uPressure, boundary(vT)).x; - float B = texture2D(uPressure, boundary(vB)).x; - float C = texture2D(uPressure, vUv).x; - float divergence = texture2D(uDivergence, vUv).x; - float pressure = (L + R + B + T - divergence) * 0.25; - gl_FragColor = vec4(pressure, 0.0, 0.0, 1.0); -}`;const ye=()=>a.useMemo(()=>new n.ShaderMaterial({uniforms:{uPressure:{value:null},uDivergence:{value:null},texelSize:{value:new n.Vector2}},vertexShader:V,fragmentShader:xe}),[]);var Me=`precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -varying vec2 vL; -varying vec2 vR; -varying vec2 vT; -varying vec2 vB; -uniform sampler2D uVelocity; - -void main () { - float L = texture2D(uVelocity, vL).y; - float R = texture2D(uVelocity, vR).y; - float T = texture2D(uVelocity, vT).x; - float B = texture2D(uVelocity, vB).x; - float vorticity = R - L - T + B; - gl_FragColor = vec4(vorticity, 0.0, 0.0, 1.0); -}`;const he=()=>a.useMemo(()=>new n.ShaderMaterial({uniforms:{uVelocity:{value:null},texelSize:{value:new n.Vector2}},vertexShader:V,fragmentShader:Me}),[]);var Te=`precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -varying vec2 vT; -varying vec2 vB; -uniform sampler2D uVelocity; -uniform sampler2D uCurl; -uniform float curl; -uniform float dt; - -void main () { - float T = texture2D(uCurl, vT).x; - float B = texture2D(uCurl, vB).x; - float C = texture2D(uCurl, vUv).x; - vec2 force = vec2(abs(T) - abs(B), 0.0); - force *= 1.0 / length(force + 0.00001) * curl * C; - vec2 vel = texture2D(uVelocity, vUv).xy; - gl_FragColor = vec4(vel + force * dt, 0.0, 1.0); -}`;const we=()=>a.useMemo(()=>new n.ShaderMaterial({uniforms:{uVelocity:{value:null},uCurl:{value:null},curl:{value:0},dt:{value:0},texelSize:{value:new n.Vector2}},vertexShader:V,fragmentShader:Te}),[]);var Se=`precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -uniform sampler2D uTexture; -uniform float value; - -void main () { - gl_FragColor = value * texture2D(uTexture, vUv); -}`;const Ce=()=>a.useMemo(()=>new n.ShaderMaterial({uniforms:{uTexture:{value:new n.Texture},value:{value:0},texelSize:{value:new n.Vector2}},vertexShader:V,fragmentShader:Se}),[]);var be=`precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -varying vec2 vL; -varying vec2 vR; -varying vec2 vT; -varying vec2 vB; -uniform sampler2D uPressure; -uniform sampler2D uVelocity; - -vec2 boundary (in vec2 uv) { - uv = min(max(uv, 0.0), 1.0); - return uv; -} - -void main () { - float L = texture2D(uPressure, boundary(vL)).x; - float R = texture2D(uPressure, boundary(vR)).x; - float T = texture2D(uPressure, boundary(vT)).x; - float B = texture2D(uPressure, boundary(vB)).x; - vec2 velocity = texture2D(uVelocity, vUv).xy; - velocity.xy -= vec2(R - L, T - B); - gl_FragColor = vec4(velocity, 0.0, 1.0); -}`;const Pe=()=>a.useMemo(()=>new n.ShaderMaterial({uniforms:{uPressure:{value:new n.Texture},uVelocity:{value:new n.Texture},texelSize:{value:new n.Vector2}},vertexShader:V,fragmentShader:be}),[]);var Re=`precision mediump float; -precision mediump sampler2D; - -varying vec2 vUv; -uniform sampler2D uTarget; -uniform float aspectRatio; -uniform vec3 color; -uniform vec2 point; -uniform float radius; - -void main () { - vec2 nPoint = (point + vec2(1.0)) * 0.5; - vec2 p = vUv - nPoint.xy; - p.x *= aspectRatio; - vec3 splat = exp(-dot(p, p) / radius) * color; - vec3 base = texture2D(uTarget, vUv).xyz; - gl_FragColor = vec4(base + splat, 1.0); -}`;const Ve=()=>a.useMemo(()=>new n.ShaderMaterial({uniforms:{uTarget:{value:new n.Texture},aspectRatio:{value:0},color:{value:new n.Vector3},point:{value:new n.Vector2},radius:{value:0},texelSize:{value:new n.Vector2}},vertexShader:V,fragmentShader:Re}),[]),_e=({scene:t,size:u,dpr:r})=>{const e=a.useMemo(()=>new n.PlaneGeometry(2,2),[]),i=fe(),s=i.clone(),c=he(),f=we(),l=me(),v=ge(),d=ye(),m=Ce(),p=Pe(),M=Ve(),g=a.useMemo(()=>({vorticityMaterial:f,curlMaterial:c,advectionMaterial:l,divergenceMaterial:v,pressureMaterial:d,clearMaterial:m,gradientSubtractMaterial:p,splatMaterial:M}),[f,c,l,v,d,m,p,M]),h=_(u,r);a.useEffect(()=>{o(g.splatMaterial,"aspectRatio",h.x/h.y);for(const T of Object.values(g))o(T,"texelSize",new n.Vector2(1/h.x,1/h.y))},[h,g]);const S=U(t,e,i);a.useEffect(()=>{i.dispose(),S.material=s},[i,S,s]);const b=a.useCallback(T=>{S.material=T,S.material.needsUpdate=!0},[S]);return[g,b]},De=({size:t,dpr:u})=>{const r=a.useMemo(()=>new n.Scene,[]),[e,i]=_e({scene:r,size:t,dpr:u}),s=D(t),c=A(),f=a.useMemo(()=>({scene:r,camera:s,size:t,dpr:u}),[r,s,t,u]),[l,v]=L(f),[d,m]=L(f),[p,M]=O(f),[g,h]=O(f),[S,b]=L(f),T=a.useRef(0),B=a.useRef(new n.Vector2(0,0)),P=a.useRef(new n.Vector3(0,0,0)),[C,x]=F({density_dissipation:0,velocity_dissipation:0,velocity_acceleration:0,pressure_dissipation:0,pressure_iterations:20,curl_strength:0,splat_radius:.001,fruid_color:new n.Vector3(1,1,1)});return[a.useCallback((Ne,Ke)=>{const{gl:R,pointer:Ze,clock:q,size:G}=Ne;x(Ke),T.current===0&&(T.current=q.getElapsedTime());const X=Math.min((q.getElapsedTime()-T.current)/3,.02);T.current=q.getElapsedTime();const I=v(R,({read:y})=>{i(e.advectionMaterial),o(e.advectionMaterial,"uVelocity",y),o(e.advectionMaterial,"uSource",y),o(e.advectionMaterial,"dt",X),o(e.advectionMaterial,"dissipation",C.velocity_dissipation)}),Je=m(R,({read:y})=>{i(e.advectionMaterial),o(e.advectionMaterial,"uVelocity",I),o(e.advectionMaterial,"uSource",y),o(e.advectionMaterial,"dissipation",C.density_dissipation)}),{currentPointer:Qe,diffPointer:en,isVelocityUpdate:nn,velocity:tn}=c(Ze);nn&&(v(R,({read:y})=>{i(e.splatMaterial),o(e.splatMaterial,"uTarget",y),o(e.splatMaterial,"point",Qe);const E=en.multiply(B.current.set(G.width,G.height).multiplyScalar(C.velocity_acceleration));o(e.splatMaterial,"color",P.current.set(E.x,E.y,1)),o(e.splatMaterial,"radius",C.splat_radius)}),m(R,({read:y})=>{i(e.splatMaterial),o(e.splatMaterial,"uTarget",y);const E=typeof C.fruid_color=="function"?C.fruid_color(tn):C.fruid_color;o(e.splatMaterial,"color",E)}));const rn=M(R,()=>{i(e.curlMaterial),o(e.curlMaterial,"uVelocity",I)});v(R,({read:y})=>{i(e.vorticityMaterial),o(e.vorticityMaterial,"uVelocity",y),o(e.vorticityMaterial,"uCurl",rn),o(e.vorticityMaterial,"curl",C.curl_strength),o(e.vorticityMaterial,"dt",X)});const on=h(R,()=>{i(e.divergenceMaterial),o(e.divergenceMaterial,"uVelocity",I)});b(R,({read:y})=>{i(e.clearMaterial),o(e.clearMaterial,"uTexture",y),o(e.clearMaterial,"value",C.pressure_dissipation)}),i(e.pressureMaterial),o(e.pressureMaterial,"uDivergence",on);let Y;for(let y=0;y{o(e.pressureMaterial,"uPressure",E)});return v(R,({read:y})=>{i(e.gradientSubtractMaterial),o(e.gradientSubtractMaterial,"uPressure",Y),o(e.gradientSubtractMaterial,"uVelocity",y)}),Je},[e,i,M,m,h,c,b,v,x,C]),x,{scene:r,materials:e,camera:s,renderTarget:{velocity:l,density:d,curl:p,divergence:g,pressure:S}}]},Fe=({scale:t,max:u,texture:r,scene:e})=>{const i=a.useRef([]),s=a.useMemo(()=>new n.PlaneGeometry(t,t),[t]),c=a.useMemo(()=>new n.MeshBasicMaterial({map:r??null,transparent:!0,blending:n.AdditiveBlending,depthTest:!1,depthWrite:!1}),[r]);return a.useEffect(()=>{for(let f=0;f{const i=a.useMemo(()=>new n.Scene,[]),s=Fe({scale:u,max:r,texture:t,scene:i}),c=D(e),f=A(),[l,v]=O({scene:i,camera:c,size:e}),[d,m]=F({frequency:.01,rotation:.01,fadeout_speed:.9,scale:.15,alpha:.6}),p=a.useRef(0);return[a.useCallback((g,h)=>{const{gl:S,pointer:b,size:T}=g;m(h);const{currentPointer:B,diffPointer:P}=f(b);if(d.frequency{if(x.visible){const k=x.material;x.rotation.z+=d.rotation,k.opacity*=d.fadeout_speed,x.scale.x=d.fadeout_speed*x.scale.x+d.scale,x.scale.y=x.scale.x,k.opacity<.002&&(x.visible=!1)}}),v(S)},[v,s,f,r,d,m]),m,{scene:i,camera:c,meshArr:s,renderTarget:l}]};var z=`varying vec2 vUv; - -void main() { - vUv = uv; - gl_Position = vec4(position, 1.0); -}`,Be=`precision mediump float; - -void main(){ - gl_FragColor = vec4(0.0); -}`;const Oe=()=>a.useMemo(()=>new n.ShaderMaterial({vertexShader:z,fragmentShader:Be,depthTest:!1,depthWrite:!1}),[]);var Le=`precision highp float; - -uniform float viscosity; -uniform float forceRadius; -uniform float forceCoefficient; -uniform vec2 resolution; -uniform sampler2D dataTex; -uniform vec2 pointerPos; -uniform vec2 beforePointerPos; - -#pragma glslify: map = require('./map.glsl') -#pragma glslify: samplePressure = require('./samplePressure.glsl') -#pragma glslify: sampleVelocity = require('./sampleVelocity.glsl') - -varying vec2 vUv; - -void main(){ - vec2 r = resolution; - vec2 uv = gl_FragCoord.xy / r; - vec4 data = texture2D(dataTex, uv); - vec2 v = data.xy; - - vec2 offsetX = vec2(1.0, 0.0); - vec2 offsetY = vec2(0.0, 1.0); - - - float pLeft = samplePressure(dataTex, (gl_FragCoord.xy - offsetX) / r, r); - float pRight = samplePressure(dataTex, (gl_FragCoord.xy + offsetX) / r, r); - float pTop = samplePressure(dataTex, (gl_FragCoord.xy - offsetY) / r, r); - float pBottom = samplePressure(dataTex, (gl_FragCoord.xy + offsetY) / r, r); - - - vec2 mPos = 0.5 * (pointerPos + 1.0) * r; - vec2 mPPos = 0.5 * (beforePointerPos + 1.0) * r; - vec2 mouseV = mPos - mPPos; - float len = length(mPos - uv * r) / forceRadius; - float d = clamp(1.0 - len, 0.0, 1.0) * length(mouseV) * forceCoefficient; - vec2 mforce = d * normalize(mPos - uv * r + mouseV); - - v += vec2(pRight - pLeft, pBottom - pTop) * 0.5; - v += mforce; - v *= viscosity; - - gl_FragColor = vec4(v, data.zw); -}`;const Ee=()=>a.useMemo(()=>new n.ShaderMaterial({uniforms:{resolution:{value:new n.Vector2},dataTex:{value:null},pointerPos:{value:null},beforePointerPos:{value:null},viscosity:{value:0},forceRadius:{value:0},forceCoefficient:{value:0}},vertexShader:z,fragmentShader:Le}),[]);var $e=`precision highp float; - -uniform float attenuation; -uniform vec2 resolution; -uniform sampler2D dataTex; - -#pragma glslify: sampleVelocity = require('./sampleVelocity.glsl') -#pragma glslify: samplePressure = require('./samplePressure.glsl') - -varying vec2 vUv; - -vec2 bilerpVelocity(sampler2D tex, vec2 p, vec2 resolution) { - vec4 ij; - ij.xy = floor(p - 0.5) + 0.5; - ij.zw = ij.xy + 1.0; - - vec4 uv = ij / resolution.xyxy; - vec2 d11 = sampleVelocity(tex, uv.xy, resolution); - vec2 d21 = sampleVelocity(tex, uv.zy, resolution); - vec2 d12 = sampleVelocity(tex, uv.xw, resolution); - vec2 d22 = sampleVelocity(tex, uv.zw, resolution); - - vec2 a = p - ij.xy; - - return mix(mix(d11, d21, a.x), mix(d12, d22, a.x), a.y); -} - -void main(){ - vec2 r = resolution; - vec2 p = gl_FragCoord.xy - sampleVelocity(dataTex, gl_FragCoord.xy / r, r); - - gl_FragColor = vec4(bilerpVelocity(dataTex, p, r) * attenuation, samplePressure(dataTex, gl_FragCoord.xy / r, r), 0.0); -}`;const Ae=()=>a.useMemo(()=>new n.ShaderMaterial({uniforms:{resolution:{value:new n.Vector2(0,0)},dataTex:{value:null},attenuation:{value:0}},vertexShader:z,fragmentShader:$e}),[]);var ze=`precision highp float; - -uniform vec2 resolution; -uniform sampler2D dataTex; - -#pragma glslify: sampleVelocity = require('./sampleVelocity.glsl') - -void main(){ - vec2 r = resolution; - vec4 data = texture2D(dataTex, gl_FragCoord.xy / r); - - vec2 offsetX = vec2(1.0, 0.0); - vec2 offsetY = vec2(0.0, 1.0); - - - vec2 vLeft = sampleVelocity(dataTex, (gl_FragCoord.xy - offsetX) / r, r); - vec2 vRight = sampleVelocity(dataTex, (gl_FragCoord.xy + offsetX) / r, r); - vec2 vTop = sampleVelocity(dataTex, (gl_FragCoord.xy - offsetY) / r, r); - vec2 vBottom = sampleVelocity(dataTex, (gl_FragCoord.xy + offsetY) / r, r); - - float divergence = ((vRight.x - vLeft.x) + (vBottom.y - vTop.y)) * 0.5; - - gl_FragColor = vec4(data.xy, data.z, divergence); - -}`;const je=()=>a.useMemo(()=>new n.ShaderMaterial({uniforms:{resolution:{value:new n.Vector2},dataTex:{value:null}},vertexShader:z,fragmentShader:ze}),[]);var ke=`precision highp float; - -uniform float alpha; -uniform float beta; -uniform vec2 resolution; -uniform sampler2D dataTex; - -#pragma glslify: samplePressure = require('./samplePressure.glsl') - -void main(){ - vec2 r = resolution; - vec4 data = texture2D(dataTex, gl_FragCoord.xy / r); - - - float pLeft = samplePressure(dataTex, (gl_FragCoord.xy - vec2(1.0, 0.0)) / r, r); - float pRight = samplePressure(dataTex, (gl_FragCoord.xy + vec2(1.0, 0.0)) / r, r); - float pTop = samplePressure(dataTex, (gl_FragCoord.xy - vec2(0.0, 1.0)) / r, r); - float pBottom = samplePressure(dataTex, (gl_FragCoord.xy + vec2(0.0, 1.0)) / r, r); - - float divergence = data.w; - float pressure = (divergence * alpha + (pLeft + pRight + pTop + pBottom)) * 0.25 * beta; - gl_FragColor = vec4(data.xy, pressure, divergence); -}`;const qe=()=>a.useMemo(()=>new n.ShaderMaterial({uniforms:{resolution:{value:new n.Vector2},dataTex:{value:null},alpha:{value:0},beta:{value:0}},vertexShader:z,fragmentShader:ke}),[]),Ie=({scene:t,size:u,dpr:r})=>{const e=a.useMemo(()=>new n.PlaneGeometry(2,2),[]),i=Oe(),s=i.clone(),c=Ee(),f=Ae(),l=je(),v=qe(),d=a.useMemo(()=>({velocityMaterial:c,advectionMaterial:f,divergenceMaterial:l,pressureMaterial:v}),[c,f,l,v]),m=_(u,r);a.useEffect(()=>{for(const g of Object.values(d))o(g,"resolution",m)},[m,d]);const p=U(t,e,i);a.useEffect(()=>{i.dispose(),p.material=s},[i,p,s]);const M=a.useCallback(g=>{p.material=g,p.material.needsUpdate=!0},[p]);return[d,M]},Ge=({size:t,dpr:u})=>{const r=a.useMemo(()=>new n.Scene,[]),[e,i]=Ie({scene:r,size:t,dpr:u}),s=D(t),c=A(),[f,l]=L({scene:r,camera:s,size:t,isSizeUpdate:!0}),[v,d]=F({pressure_iterations:20,attenuation:1,alpha:1,beta:1,viscosity:.99,forceRadius:90,forceCoefficient:1});return[a.useCallback((p,M)=>{const{gl:g,pointer:h}=p;d(M),o(e.advectionMaterial,"attenuation",v.attenuation),o(e.pressureMaterial,"alpha",v.alpha),o(e.pressureMaterial,"beta",v.beta),o(e.velocityMaterial,"viscosity",v.viscosity),o(e.velocityMaterial,"forceRadius",v.forceRadius),o(e.velocityMaterial,"forceCoefficient",v.forceCoefficient),l(g,({read:P})=>{i(e.divergenceMaterial),o(e.divergenceMaterial,"dataTex",P)});const S=v.pressure_iterations;for(let P=0;P{i(e.pressureMaterial),o(e.pressureMaterial,"dataTex",C)});const{currentPointer:b,prevPointer:T}=c(h);return o(e.velocityMaterial,"pointerPos",b),o(e.velocityMaterial,"beforePointerPos",T),l(g,({read:P})=>{i(e.velocityMaterial),o(e.velocityMaterial,"dataTex",P)}),l(g,({read:P})=>{i(e.advectionMaterial),o(e.advectionMaterial,"dataTex",P)})},[e,i,c,l,d,v]),d,{scene:r,materials:e,camera:s,renderTarget:f}]};var Xe=`varying vec2 vUv; - -void main() { - vUv = uv; - gl_Position = vec4(position, 1.0); -}`,Ye=`precision mediump float; - -varying vec2 vUv; -uniform vec2 uResolution; -uniform vec2 uImageResolution; - -uniform sampler2D uTexture0; -uniform sampler2D uTexture1; -uniform sampler2D noise; -uniform float noiseStrength; -uniform float progress; -uniform float dirX; -uniform float dirY; - -void main() { - vec2 bgRatio=vec2( - min((uResolution.x/uResolution.y)/(uImageResolution.x/uImageResolution.y),1.), - min((uResolution.y/uResolution.x)/(uImageResolution.y/uImageResolution.x),1.) - ); - vec2 uv=vec2( - vUv.x*bgRatio.x+(1.-bgRatio.x)*.5, - vUv.y*bgRatio.y+(1.-bgRatio.y)*.5 - ); - - - vec2 noiseMap = texture2D(noise, uv).rg; - noiseMap=noiseMap*2.0-1.0; - uv += noiseMap * noiseStrength; - - - vec2 centeredUV = uv - vec2(0.5); - - - float xOffsetTexture0 = 0.5 - dirX * progress; - float yOffsetTexture0 = 0.5 - dirY * progress; - vec2 samplePosTexture0 = vec2(xOffsetTexture0, yOffsetTexture0) + centeredUV; - - - float xOffsetTexture1 = 0.5 + dirX * (1.0 - progress); - float yOffsetTexture1 = 0.5 + dirY * (1.0 - progress); - vec2 samplePosTexture1 = vec2(xOffsetTexture1, yOffsetTexture1) + centeredUV; - - vec4 color0 = texture2D(uTexture0, samplePosTexture0); - vec4 color1 = texture2D(uTexture1, samplePosTexture1); - - gl_FragColor = mix(color0, color1, progress); - -}`;const We=({scene:t,size:u,dpr:r})=>{const e=a.useMemo(()=>new n.PlaneGeometry(2,2),[]),i=a.useMemo(()=>new n.ShaderMaterial({uniforms:{uResolution:{value:new n.Vector2},uImageResolution:{value:new n.Vector2},uTexture0:{value:new n.Texture},uTexture1:{value:new n.Texture},noise:{value:new n.Texture},noiseStrength:{value:0},progress:{value:0},dirX:{value:0},dirY:{value:0}},vertexShader:Xe,fragmentShader:Ye}),[]),s=_(u,r);return a.useEffect(()=>{i.uniforms.uResolution.value=s.clone()},[s,i]),U(t,e,i),i},He=({size:t,dpr:u})=>{const r=a.useMemo(()=>new n.Scene,[]),e=We({scene:r,size:t,dpr:u}),i=D(t),[s,c]=O({scene:r,camera:i,dpr:u,size:t,isSizeUpdate:!0}),[f,l]=F({texture0:new n.Texture,texture1:new n.Texture,imageResolution:new n.Vector2(0,0),noise:new n.Texture,noiseStrength:0,progress:0,dir:new n.Vector2(0,0)});return[a.useCallback((d,m)=>{const{gl:p}=d;return l(m),o(e,"uTexture0",f.texture0),o(e,"uTexture1",f.texture1),o(e,"uImageResolution",f.imageResolution),o(e,"noise",f.noise),o(e,"noiseStrength",f.noiseStrength),o(e,"progress",f.progress),o(e,"dirX",f.dir.x),o(e,"dirY",f.dir.y),c(p)},[c,e,f,l]),l,{scene:r,material:e,camera:i,renderTarget:s}]};w.useBrush=J,w.useDuoTone=te,w.useFlowmap=ie,w.useFogProjection=ce,w.useFruid=De,w.useRipple=Ue,w.useSimpleFruid=Ge,w.useTransitionBg=He,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})}); -//# sourceMappingURL=use-shader-fx.umd.cjs.map diff --git a/packages/use-shader-fx/build/use-shader-fx.umd.cjs.map b/packages/use-shader-fx/build/use-shader-fx.umd.cjs.map deleted file mode 100644 index 52295012..00000000 --- a/packages/use-shader-fx/build/use-shader-fx.umd.cjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"use-shader-fx.umd.cjs","sources":["../src/hooks/useBrush/shader/main.vert","../src/hooks/useBrush/shader/main.frag","../src/hooks/utils/useResolution.ts","../src/hooks/utils/useAddMesh.ts","../src/hooks/utils/setUniforms.ts","../src/hooks/useBrush/useMesh.ts","../src/hooks/utils/useCamera.ts","../src/hooks/utils/useSingleFBO.ts","../src/hooks/utils/useDoubleFBO.ts","../src/hooks/utils/usePointer.ts","../src/hooks/utils/useParams.ts","../src/hooks/useBrush/index.ts","../src/hooks/useDuoTone/shader/main.vert","../src/hooks/useDuoTone/shader/main.frag","../src/hooks/useDuoTone/useMesh.ts","../src/hooks/useDuoTone/index.ts","../src/hooks/useFlowmap/shader/main.vert","../src/hooks/useFlowmap/shader/main.frag","../src/hooks/useFlowmap/useMesh.ts","../src/hooks/useFlowmap/index.ts","../src/hooks/useFogProjection/shader/main.vert","../src/hooks/useFogProjection/shader/main.frag","../src/hooks/useFogProjection/useMesh.ts","../src/hooks/useFogProjection/index.ts","../src/hooks/useFruid/shaders/main.vert","../src/hooks/useFruid/shaders/init.frag","../src/hooks/useFruid/materials/useInitialMaterial.ts","../src/hooks/useFruid/shaders/advection.frag","../src/hooks/useFruid/materials/useAdvectionMaterial.ts","../src/hooks/useFruid/shaders/divergence.frag","../src/hooks/useFruid/materials/useDivergenceMaterial.ts","../src/hooks/useFruid/shaders/pressure.frag","../src/hooks/useFruid/materials/usePressureMaterial.ts","../src/hooks/useFruid/shaders/curl.frag","../src/hooks/useFruid/materials/useCurlMaterial.ts","../src/hooks/useFruid/shaders/vorticity.frag","../src/hooks/useFruid/materials/useVorticityMaterial.ts","../src/hooks/useFruid/shaders/clear.frag","../src/hooks/useFruid/materials/useClearMaterial.ts","../src/hooks/useFruid/shaders/gradientSubtract.frag","../src/hooks/useFruid/materials/useGradientSubtractMaterial.ts","../src/hooks/useFruid/shaders/splat.frag","../src/hooks/useFruid/materials/useSplatMaterial.ts","../src/hooks/useFruid/useMesh.ts","../src/hooks/useFruid/index.ts","../src/hooks/useRipple/useMesh.ts","../src/hooks/useRipple/index.ts","../src/hooks/useSimpleFruid/shaders/main.vert","../src/hooks/useSimpleFruid/shaders/init.frag","../src/hooks/useSimpleFruid/materials/useInitialMaterial.ts","../src/hooks/useSimpleFruid/shaders/velocity.frag","../src/hooks/useSimpleFruid/materials/useVelocityMaterial.ts","../src/hooks/useSimpleFruid/shaders/advection.frag","../src/hooks/useSimpleFruid/materials/useAdvectionMaterial.ts","../src/hooks/useSimpleFruid/shaders/divergence.frag","../src/hooks/useSimpleFruid/materials/useDivergenceMaterial.ts","../src/hooks/useSimpleFruid/shaders/pressure.frag","../src/hooks/useSimpleFruid/materials/usePressureMaterial.ts","../src/hooks/useSimpleFruid/useMesh.ts","../src/hooks/useSimpleFruid/index.ts","../src/hooks/useTransitionBg/shader/main.vert","../src/hooks/useTransitionBg/shader/main.frag","../src/hooks/useTransitionBg/useMesh.ts","../src/hooks/useTransitionBg/index.ts"],"sourcesContent":["varying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\tgl_Position = vec4(position, 1.0);\n}","precision mediump float;\n\nuniform sampler2D uMap;\nuniform sampler2D uTexture;\nuniform float uRadius;\nuniform float uAlpha;\nuniform float uDissipation;\nuniform float uMagnification;\nuniform vec2 uResolution;\nuniform float uSmudge;\nuniform float uAspect;\nuniform vec2 uMouse;\nuniform vec2 uPrevMouse;\nuniform vec2 uVelocity;\n\nuniform float uMotionBlur;\nuniform int uMotionSample;\n\nvarying vec2 vUv;\n\nfloat isOnLine(vec2 point, vec2 start, vec2 end, float width, float aspect) {\n\t//正円にする\n\tpoint.x *= aspect;\n\tstart.x *= aspect;\n\tend.x *= aspect;\n\n\t//方向の単位ベクトル\n\tvec2 dir = normalize(end - start);\n\t//線分に対して垂直の単位ベクトル\n\tvec2 n = vec2(dir.y, -dir.x);\n\t//方向ベクトル\n\tvec2 p0 = point - start;\n\t\n\t//線上の距離を計算する\n\tfloat distToLine = abs(dot(p0, n));\n\tfloat distAlongLine = dot(p0, dir);\n\tfloat totalLength = length(end - start);\n\n\t//始点と終点の円の半径も範囲に含める\n\tfloat distFromStart = length(point - start);\n\tfloat distFromEnd = length(point - end);\n\t\n\tbool withinLine = (distToLine < width && distAlongLine > 0.0 && distAlongLine < totalLength) || distFromStart < width || distFromEnd < width;\n\n\treturn float(withinLine);\n}\n\nvec4 createSmudge(){\n\tvec2 offsets[9];\n\toffsets[0] = vec2(-1, -1); offsets[1] = vec2( 0, -1); offsets[2] = vec2( 1, -1);\n\toffsets[3] = vec2(-1, 0); offsets[4] = vec2( 0, 0); offsets[5] = vec2( 1, 0);\n\toffsets[6] = vec2(-1, 1); offsets[7] = vec2( 0, 1); offsets[8] = vec2( 1, 1);\n\t// オフセットをテクスチャサイズにスケール\n\tfor(int i = 0; i < 9; i++) {\n\t\toffsets[i] = (offsets[i] * uSmudge) / uResolution;\n\t}\t\n\tvec4 smudgedColor = vec4(0.0);\n\tfor(int i = 0; i < 9; i++) {\n\t\tsmudgedColor += texture2D(uMap, vUv + offsets[i]);\n\t}\n\treturn smudgedColor / 9.0;\n}\n\nvec4 createMotionBlur(vec4 baseColor, vec2 velocity, float motion, int samples) {\n\tvec4 motionBlurredColor = baseColor;\n\tvec2 scaledVelocity = velocity * motion;\n\tfor(int i = 1; i < samples; i++) {\n\t\tfloat t = float(i) / float(samples - 1);\n\t\tvec2 offset = t * scaledVelocity / uResolution;\n\t\tmotionBlurredColor += texture2D(uMap, vUv + offset);\n\t}\n\treturn motionBlurredColor / float(samples);\n}\n\n\nvoid main() {\n\t// UV座標を[-1, 1]の範囲に変換\n\tvec2 st = vUv * 2.0 - 1.0;\n\t\n\t//速度ベクトル\n\tvec2 velocity = uVelocity * uResolution;\n\n\t// 滲みを加える\n\tvec4 smudgedColor = createSmudge();\n\t\n\t//モーションブラー\n\tvec4 motionBlurredColor = createMotionBlur(smudgedColor, uVelocity, uMotionBlur,uMotionSample);\n\n\t//バッファーテクスチャー\n\tvec4 bufferColor = motionBlurredColor * uDissipation;\n\n\t// radius\n\tfloat modifiedRadius = uRadius + (length(velocity) * uMagnification);\n\tmodifiedRadius = max(0.0,modifiedRadius);\n\n\t//\tcolor TODO:カラーに速度を反映させるかどうか、最初のフレームのカラーをどうするか\n\t// vec3 color = vec3(velocity * vec2(1, -1), 1.0 - pow(1.0 - min(1.0, length(velocity)), 1.0));\n\tvec3 color = vec3(1.0,1.0,1.0);\n\n\t//カラーにテクスチャーをマッピングする\n\tvec4 textureColor = texture2D(uTexture, vUv);\n\tvec3 finalColor = mix(color, textureColor.rgb, textureColor.a);\n\n\t//始点と終点の直線上を判定する\n\tfloat onLine = isOnLine(st, uPrevMouse, uMouse, modifiedRadius, uAspect);\n\n\t//最終出力\n\tbufferColor.rgb = mix(bufferColor.rgb, finalColor, onLine);\n\tgl_FragColor = bufferColor;\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport { Size } from \"@react-three/fiber\";\n\n/**\n * @params isDpr Whether to multiply dpr, default:false\n */\nexport const useResolution = (size: Size, dpr: number | false = false) => {\n const _width = dpr ? size.width * dpr : size.width;\n const _height = dpr ? size.height * dpr : size.height;\n const resolution = useMemo(\n () => new THREE.Vector2(_width, _height),\n [_width, _height]\n );\n return resolution;\n};\n","import * as THREE from \"three\";\nimport { useEffect, useMemo } from \"react\";\n\nexport const useAddMesh = (\n scene: THREE.Scene,\n geometry: THREE.PlaneGeometry,\n material: THREE.Material\n) => {\n const mesh = useMemo(\n () => new THREE.Mesh(geometry, material),\n [geometry, material]\n );\n useEffect(() => {\n scene.add(mesh);\n }, [scene, mesh]);\n return mesh;\n};\n","export const setUniform = (\n material: THREE.ShaderMaterial | THREE.RawShaderMaterial,\n key: string,\n value:\n | number\n | THREE.Color\n | THREE.Vector2\n | THREE.Vector3\n | THREE.Vector4\n | THREE.Matrix3\n | THREE.Matrix4\n | THREE.Texture\n | THREE.CubeTexture\n) => {\n if (\n material.uniforms &&\n material.uniforms[key] &&\n value !== undefined &&\n value !== null\n ) {\n material.uniforms[key].value = value;\n } else {\n console.error(\n `Uniform key \"${key}\" does not exist in the material. or \"${key}\" is null | undefined`\n );\n }\n};\n","import * as THREE from \"three\";\nimport vertexShader from \"./shader/main.vert\";\nimport fragmentShader from \"./shader/main.frag\";\nimport { useEffect, useMemo } from \"react\";\nimport { useResolution } from \"../utils/useResolution\";\nimport { useAddMesh } from \"../utils/useAddMesh\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { Size } from \"@react-three/fiber\";\n\nexport const useMesh = ({\n scene,\n size,\n dpr,\n}: {\n scene: THREE.Scene;\n size: Size;\n dpr: number;\n}) => {\n const geometry = useMemo(() => new THREE.PlaneGeometry(2, 2), []);\n const material = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uMap: {\n value: null,\n },\n uResolution: { value: new THREE.Vector2(0, 0) },\n uAspect: { value: 1 },\n uTexture: { value: new THREE.Texture() },\n uRadius: { value: 0.0 },\n uAlpha: { value: 0.0 },\n uSmudge: { value: 0.0 },\n uDissipation: { value: 0.0 },\n uMagnification: { value: 0.0 },\n uMotionBlur: { value: 0.0 },\n uMotionSample: { value: 10 },\n uMouse: { value: new THREE.Vector2(0, 0) },\n uPrevMouse: { value: new THREE.Vector2(0, 0) },\n uVelocity: { value: new THREE.Vector2(0, 0) },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n const resolution = useResolution(size, dpr);\n useEffect(() => {\n setUniform(material, \"uAspect\", resolution.width / resolution.height);\n setUniform(material, \"uResolution\", resolution.clone());\n }, [resolution, material]);\n\n useAddMesh(scene, geometry, material);\n\n return material;\n};\n","import * as THREE from \"three\";\nimport { useResolution } from \"./useResolution\";\nimport { useMemo } from \"react\";\nimport { Size } from \"@react-three/fiber\";\n\nconst getCameraProps = (width: number, height: number) => {\n const frustumSize = height;\n const aspect = width / height;\n const [w, h] = [(frustumSize * aspect) / 2, frustumSize / 2];\n return { width: w, height: h, near: -1000, far: 1000 };\n};\n\nexport const useCamera = (size: Size) => {\n const resolution = useResolution(size);\n const { width, height, near, far } = getCameraProps(\n resolution.x,\n resolution.y\n );\n const camera = useMemo(\n () =>\n new THREE.OrthographicCamera(\n -width,\n width,\n height,\n -height,\n near,\n far\n ),\n [width, height, near, far]\n );\n return camera;\n};\n","import * as THREE from \"three\";\nimport { useCallback, useLayoutEffect, useMemo, useRef } from \"react\";\nimport { useResolution } from \"./useResolution\";\nimport { UseFboProps } from \"./types\";\n\nexport const FBO_OPTION = {\n minFilter: THREE.LinearFilter,\n magFilter: THREE.LinearFilter,\n type: THREE.HalfFloatType,\n depthBuffer: false,\n stencilBuffer: false,\n};\n\ntype FBOUpdateFunction = (\n gl: THREE.WebGLRenderer,\n /** call before FBO is rendered */\n onBeforeRender?: ({ read }: { read: THREE.Texture }) => void\n) => THREE.Texture;\n\ntype Return = [THREE.WebGLRenderTarget, FBOUpdateFunction];\n\n/**\n * @param dpr If dpr is set, dpr will be multiplied, default:false\n * @param isSizeUpdate Whether to resize when resizing occurs. If isDpr is true, set FBO to setSize even if dpr is changed, default:false\n * @returns [THREE.WebGLRenderTarget , updateFBO] -Receives the RenderTarget as the first argument and the update function as the second argument.\n */\nexport const useSingleFBO = ({\n scene,\n camera,\n size,\n dpr = false,\n isSizeUpdate = false,\n}: UseFboProps): Return => {\n const renderTarget = useRef();\n\n const resolution = useResolution(size, dpr);\n renderTarget.current = useMemo(\n () => new THREE.WebGLRenderTarget(resolution.x, resolution.y, FBO_OPTION),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n useLayoutEffect(() => {\n if (isSizeUpdate) {\n renderTarget.current?.setSize(resolution.x, resolution.y);\n }\n }, [resolution, isSizeUpdate]);\n\n const updateRenderTarget: FBOUpdateFunction = useCallback(\n (gl, onBeforeRender) => {\n const fbo = renderTarget.current!;\n gl.setRenderTarget(fbo);\n onBeforeRender && onBeforeRender({ read: fbo.texture });\n gl.render(scene, camera);\n gl.setRenderTarget(null);\n gl.clear();\n return fbo.texture;\n },\n [scene, camera]\n );\n\n return [renderTarget.current, updateRenderTarget];\n};\n","import * as THREE from \"three\";\nimport { useCallback, useLayoutEffect, useMemo, useRef } from \"react\";\nimport { FBO_OPTION } from \"./useSingleFBO\";\nimport { useResolution } from \"./useResolution\";\nimport { DoubleRenderTarget, UseFboProps } from \"./types\";\n\ninterface RenderTarget extends DoubleRenderTarget {\n swap: () => void;\n}\n\ntype FBOUpdateFunction = (\n gl: THREE.WebGLRenderer,\n /** call before FBO is rendered */\n onBeforeRender?: ({\n read,\n write,\n }: {\n read: THREE.Texture;\n write: THREE.Texture;\n }) => void\n) => THREE.Texture;\n\ntype Return = [\n { read: THREE.WebGLRenderTarget; write: THREE.WebGLRenderTarget },\n FBOUpdateFunction\n];\n\n/**\n * @param dpr If dpr is set, dpr will be multiplied, default:false\n * @param isSizeUpdate Whether to resize when resizing occurs. If isDpr is true, set FBO to setSize even if dpr is changed, default:false\n * @returns [{read:THREE.WebGLRenderTarget,write:THREE.WebGLRenderTarget} , updateFBO] -Receives the RenderTarget as the first argument and the update function as the second argument.\n */\nexport const useDoubleFBO = ({\n scene,\n camera,\n size,\n dpr = false,\n isSizeUpdate = false,\n}: UseFboProps): Return => {\n const renderTarget = useRef({\n read: null,\n write: null,\n swap: function () {\n let temp = this.read;\n this.read = this.write;\n this.write = temp;\n },\n });\n\n const resolution = useResolution(size, dpr);\n const initRenderTargets = useMemo(() => {\n const read = new THREE.WebGLRenderTarget(\n resolution.x,\n resolution.y,\n FBO_OPTION\n );\n const write = new THREE.WebGLRenderTarget(\n resolution.x,\n resolution.y,\n FBO_OPTION\n );\n return { read, write };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n renderTarget.current.read = initRenderTargets.read;\n renderTarget.current.write = initRenderTargets.write;\n\n useLayoutEffect(() => {\n if (isSizeUpdate) {\n renderTarget.current.read?.setSize(resolution.x, resolution.y);\n renderTarget.current.write?.setSize(resolution.x, resolution.y);\n }\n }, [resolution, isSizeUpdate]);\n\n const updateRenderTarget: FBOUpdateFunction = useCallback(\n (gl, onBeforeRender) => {\n const fbo = renderTarget.current;\n gl.setRenderTarget(fbo.write);\n onBeforeRender &&\n onBeforeRender({\n read: fbo.read!.texture,\n write: fbo.write!.texture,\n });\n gl.render(scene, camera);\n fbo.swap();\n gl.setRenderTarget(null);\n gl.clear();\n return fbo.read?.texture as THREE.Texture;\n },\n [scene, camera]\n );\n\n return [\n { read: renderTarget.current.read, write: renderTarget.current.write },\n updateRenderTarget,\n ];\n};\n","import * as THREE from \"three\";\nimport { useCallback, useRef } from \"react\";\n\n/**\n * @returns updatePointer frameで呼び出す更新関数を返す\n */\nexport const usePointer = () => {\n const prevPointer = useRef(new THREE.Vector2(0, 0));\n const diffPointer = useRef(new THREE.Vector2(0, 0));\n const lastUpdateTime = useRef(0);\n const velocity = useRef(new THREE.Vector2(0, 0));\n const isMoved = useRef(false);\n\n const updatePointer = useCallback((currentPointer: THREE.Vector2) => {\n const now = performance.now();\n const current = currentPointer.clone();\n\n // first frame\n if (lastUpdateTime.current === 0) {\n lastUpdateTime.current = now;\n prevPointer.current = current;\n }\n const deltaTime = Math.max(1, now - lastUpdateTime.current);\n lastUpdateTime.current = now;\n\n // get velocity\n velocity.current\n .copy(current)\n .sub(prevPointer.current)\n .divideScalar(deltaTime);\n const isUpdate = velocity.current.length() > 0;\n\n //set prev temp pos\n const prevTemp = isMoved.current ? prevPointer.current.clone() : current;\n if (!isMoved.current && isUpdate) {\n isMoved.current = true;\n }\n prevPointer.current = current;\n\n return {\n currentPointer: current,\n prevPointer: prevTemp,\n diffPointer: diffPointer.current.subVectors(current, prevTemp),\n velocity: velocity.current,\n isVelocityUpdate: isUpdate,\n };\n }, []);\n\n return updatePointer;\n};\n","import { useCallback, useRef } from \"react\";\n\ntype Return = [T, (params: Partial) => void];\n\nexport const useParams = (params: T): Return => {\n const paramsRef = useRef(params);\n const setParams = useCallback((updateParams: Partial) => {\n for (const key in updateParams) {\n const paramKey = key as keyof T;\n if (\n paramKey in paramsRef.current &&\n updateParams[paramKey] !== undefined &&\n updateParams[paramKey] !== null\n ) {\n paramsRef.current[paramKey] = updateParams[paramKey]!;\n } else {\n console.error(\n `\"${String(\n paramKey\n )}\" does not exist in the params. or \"${String(\n paramKey\n )}\" is null | undefined`\n );\n }\n }\n }, []);\n return [paramsRef.current, setParams];\n};\n","import * as THREE from \"three\";\nimport { useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { useDoubleFBO } from \"../utils/useDoubleFBO\";\nimport { useCallback, useMemo } from \"react\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { usePointer } from \"../utils/usePointer\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { HooksReturn } from \"../types\";\nimport { useParams } from \"../utils/useParams\";\nimport { DoubleRenderTarget } from \"../utils/types\";\n\nexport type BrushParams = {\n /** ブラシに適用するテクスチャー */\n texture?: THREE.Texture;\n /** size of the stamp, percentage of the size */\n radius?: number;\n /** opacity TODO*これバグってるいので修正 */\n alpha?: number;\n /** 滲み効果の強さ */\n smudge?: number;\n /** 拡散率。1にすると残り続ける */\n dissipation?: number;\n /** 拡大率 */\n magnification?: number;\n /** モーションブラーの強さ */\n motionBlur?: number;\n /** モーションブラーのサンプル数 これを高くするとパフォーマンスへの影響大 */\n motionSample?: number;\n};\n\nexport type BrushObject = {\n scene: THREE.Scene;\n material: THREE.Material;\n camera: THREE.Camera;\n renderTarget: DoubleRenderTarget;\n};\n\nexport const useBrush = ({\n size,\n dpr,\n}: {\n size: Size;\n dpr: number;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const material = useMesh({ scene, size, dpr });\n const camera = useCamera(size);\n const updatePointer = usePointer();\n const [renderTarget, updateRenderTarget] = useDoubleFBO({\n scene,\n camera,\n size,\n });\n\n const [params, setParams] = useParams({\n texture: new THREE.Texture(),\n radius: 0.0,\n alpha: 0.0,\n smudge: 0.0,\n dissipation: 0.0,\n magnification: 0.0,\n motionBlur: 0.0,\n motionSample: 10,\n });\n\n const updateFx = useCallback(\n (props: RootState, updateParams: BrushParams) => {\n const { gl, pointer } = props;\n\n setParams(updateParams);\n\n setUniform(material, \"uTexture\", params.texture!);\n setUniform(material, \"uRadius\", params.radius!);\n setUniform(material, \"uAlpha\", params.alpha!);\n setUniform(material, \"uSmudge\", params.smudge!);\n setUniform(material, \"uDissipation\", params.dissipation!);\n setUniform(material, \"uMagnification\", params.magnification!);\n setUniform(material, \"uMotionBlur\", params.motionBlur!);\n setUniform(material, \"uMotionSample\", params.motionSample!);\n\n const { currentPointer, prevPointer, velocity } =\n updatePointer(pointer);\n setUniform(material, \"uMouse\", currentPointer);\n setUniform(material, \"uPrevMouse\", prevPointer);\n setUniform(material, \"uVelocity\", velocity);\n\n const bufferTexture = updateRenderTarget(gl, ({ read }) => {\n setUniform(material, \"uMap\", read);\n });\n\n return bufferTexture;\n },\n [material, updatePointer, updateRenderTarget, params, setParams]\n );\n\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n material: material,\n camera: camera,\n renderTarget: renderTarget,\n },\n ];\n};\n","varying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\tgl_Position = vec4(position, 1.0);\n}","precision mediump float;\n\nvarying vec2 vUv;\nuniform sampler2D uTexture;\n\nuniform vec3 uColor0;\nuniform vec3 uColor1;\n\nvoid main() {\n\tvec2 uv = vUv;\n\tvec4 texColor = texture2D(uTexture, uv);\n\tfloat grayscale = dot(texColor.rgb, vec3(0.299, 0.587, 0.114));\n\tvec3 duotone = mix(uColor0, uColor1, grayscale);\n\tgl_FragColor = vec4(duotone, texColor.a);\n}","import { useMemo } from \"react\";\nimport * as THREE from \"three\";\nimport vertexShader from \"./shader/main.vert\";\nimport fragmentShader from \"./shader/main.frag\";\nimport { useAddMesh } from \"../utils/useAddMesh\";\n\ntype TUniforms = {\n uTexture: { value: THREE.Texture };\n uColor0: { value: THREE.Color };\n uColor1: { value: THREE.Color };\n};\n\nexport class MetamorphoseMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useMesh = (scene: THREE.Scene) => {\n const geometry = useMemo(() => new THREE.PlaneGeometry(2, 2), []);\n const material = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uTexture: { value: new THREE.Texture() },\n uColor0: { value: new THREE.Color(0xffffff) },\n uColor1: { value: new THREE.Color(0x000000) },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n useAddMesh(scene, geometry, material);\n return material as MetamorphoseMaterial;\n};\n","import { useCallback, useMemo } from \"react\";\nimport * as THREE from \"three\";\nimport { useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { useSingleFBO } from \"../utils/useSingleFBO\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { HooksReturn } from \"../types\";\nimport { useParams } from \"../utils/useParams\";\n\nexport type DuoToneParams = {\n texture?: THREE.Texture;\n color0?: THREE.Color;\n color1?: THREE.Color;\n};\n\nexport type DuoToneObject = {\n scene: THREE.Scene;\n material: THREE.Material;\n camera: THREE.Camera;\n renderTarget: THREE.WebGLRenderTarget;\n};\n\nexport const useDuoTone = ({\n size,\n}: {\n size: Size;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const material = useMesh(scene);\n const camera = useCamera(size);\n const [renderTarget, updateRenderTarget] = useSingleFBO({\n scene,\n camera,\n size,\n });\n\n const [params, setParams] = useParams({\n texture: new THREE.Texture(),\n color0: new THREE.Color(0xffffff),\n color1: new THREE.Color(0x000000),\n });\n\n const updateFx = useCallback(\n (props: RootState, updateParams: DuoToneParams) => {\n const { gl } = props;\n\n setParams(updateParams);\n\n setUniform(material, \"uTexture\", params.texture!);\n setUniform(material, \"uColor0\", params.color0!);\n setUniform(material, \"uColor1\", params.color1!);\n\n const bufferTexture = updateRenderTarget(gl);\n\n return bufferTexture;\n },\n [updateRenderTarget, material, setParams, params]\n );\n\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n material: material,\n camera: camera,\n renderTarget: renderTarget,\n },\n ];\n};\n","varying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\tgl_Position = vec4(position, 1.0);\n}","precision mediump float;\n\nuniform sampler2D uMap;\nuniform float uRadius;\nuniform float uAlpha;\nuniform float uDissipation;\nuniform float uMagnification;\nuniform vec2 uResolution;\n\nuniform float uAspect;\nuniform vec2 uMouse;\nuniform vec2 uVelocity;\n\nvarying vec2 vUv;\n\nvoid main() {\n\n\tvec2 st = vUv * 2.0 - 1.0; // UV座標を[-1, 1]の範囲に変換\n\n\tvec2 vel = uVelocity * uResolution;\n\n\t// buffer color\n\tvec4 bufferColor = texture2D(uMap, vUv) * uDissipation;\n\t\n\t//\tcolor\n\tvec3 color = vec3(vel * vec2(1, -1), 1.0 - pow(1.0 - min(1.0, length(vel)), 1.0));\n\t// vec3 color = vec3(1.0,1.0,1.0);\n\n\t// cursor\n\tvec2 nMouse = (uMouse + vec2(1.0)) * 0.5;\n\tvec2 cursor = vUv - nMouse;\n\tcursor.x *= uAspect;\n\n\t// radius\n\tfloat modifiedRadius = uRadius + (length(vel) * uMagnification);\n\tmodifiedRadius = max(0.0,modifiedRadius);\n\tfloat finalBrush = smoothstep(modifiedRadius,0.0,length(cursor)) * uAlpha;\n\n\t// mix buffer and current color\n\tbufferColor.rgb = mix(bufferColor.rgb, color, vec3(finalBrush));\n\n\tgl_FragColor = bufferColor;\n}","import * as THREE from \"three\";\nimport vertexShader from \"./shader/main.vert\";\nimport fragmentShader from \"./shader/main.frag\";\nimport { useEffect, useMemo } from \"react\";\nimport { useAddMesh } from \"../utils/useAddMesh\";\nimport { useResolution } from \"../utils/useResolution\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { Size } from \"@react-three/fiber\";\n\nexport const useMesh = ({\n scene,\n size,\n dpr,\n}: {\n scene: THREE.Scene;\n size: Size;\n dpr: number;\n}) => {\n const geometry = useMemo(() => new THREE.PlaneGeometry(2, 2), []);\n const material = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uMap: { value: null },\n uResolution: { value: new THREE.Vector2(0, 0) },\n uAspect: { value: 1 },\n uRadius: { value: 0.0 },\n uAlpha: { value: 0.0 },\n uDissipation: { value: 0.0 },\n uMagnification: { value: 0.0 },\n uMouse: { value: new THREE.Vector2(0, 0) },\n uVelocity: { value: new THREE.Vector2(0, 0) },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n const resolution = useResolution(size, dpr);\n\n useEffect(() => {\n setUniform(material, \"uAspect\", resolution.width / resolution.height);\n setUniform(material, \"uResolution\", resolution.clone());\n }, [resolution, material]);\n\n useAddMesh(scene, geometry, material);\n\n return material;\n};\n","import * as THREE from \"three\";\nimport { useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { useDoubleFBO } from \"../utils/useDoubleFBO\";\nimport { useCallback, useMemo } from \"react\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { usePointer } from \"../utils/usePointer\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { HooksReturn } from \"../types\";\nimport { useParams } from \"../utils/useParams\";\nimport { DoubleRenderTarget } from \"../utils/types\";\n\nexport type FlowmapParams = {\n /** size of the stamp, percentage of the size */\n radius?: number;\n /** 拡大率 */\n magnification?: number;\n /** opacity */\n alpha?: number;\n /** 拡散率。1にすると残り続ける */\n dissipation?: number;\n};\n\nexport type FlowmapObject = {\n scene: THREE.Scene;\n material: THREE.Material;\n camera: THREE.Camera;\n renderTarget: DoubleRenderTarget;\n};\n\nexport const useFlowmap = ({\n size,\n dpr,\n}: {\n size: Size;\n dpr: number;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const material = useMesh({ scene, size, dpr });\n const camera = useCamera(size);\n const updatePointer = usePointer();\n const [renderTarget, updateRenderTarget] = useDoubleFBO({\n scene,\n camera,\n size,\n });\n\n const [params, setParams] = useParams({\n radius: 0.0,\n magnification: 0.0,\n alpha: 0.0,\n dissipation: 0.0,\n });\n\n const updateFx = useCallback(\n (props: RootState, updateParams: FlowmapParams) => {\n const { gl, pointer } = props;\n\n setParams(updateParams);\n\n setUniform(material, \"uRadius\", params.radius!);\n setUniform(material, \"uAlpha\", params.alpha!);\n setUniform(material, \"uDissipation\", params.dissipation!);\n setUniform(material, \"uMagnification\", params.magnification!);\n\n const { currentPointer, velocity } = updatePointer(pointer);\n setUniform(material, \"uMouse\", currentPointer);\n setUniform(material, \"uVelocity\", velocity);\n\n const bufferTexture = updateRenderTarget(gl, ({ read }) => {\n setUniform(material, \"uMap\", read);\n });\n\n return bufferTexture;\n },\n [material, updatePointer, updateRenderTarget, params, setParams]\n );\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n material: material,\n camera: camera,\n renderTarget: renderTarget,\n },\n ];\n};\n","varying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\tgl_Position = vec4(position, 1.0);\n}","precision mediump float;\n\nvarying vec2 vUv;\nuniform float uTime;\nuniform sampler2D uTexture;\nuniform float timeStrength;\nuniform float distortionStrength;\nuniform float fogEdge0;\nuniform float fogEdge1;\nuniform vec3 fogColor;\nuniform int noiseOct; //noiseの振幅回数\nuniform int fbmOct; //fbmの振幅回数\n\nconst float per = 0.5;\nconst float PI = 3.1415926;\n\nfloat interpolate(float a, float b, float x){\n float f = (1.0 - cos(x * PI)) * 0.5;\n return a * (1.0 - f) + b * f;\n}\n\nfloat rnd(vec2 p){\n return fract(sin(dot(p ,vec2(12.9898,78.233))) * 43758.5453);\n}\n\nfloat irnd(vec2 p){\n\tvec2 i = floor(p);\n\tvec2 f = fract(p);\n\tvec4 v = vec4(rnd(vec2(i.x,i.y)),rnd(vec2(i.x + 1.0,i.y)),rnd(vec2(i.x,i.y + 1.0)),rnd(vec2(i.x + 1.0, i.y + 1.0)));\n\treturn interpolate(interpolate(v.x, v.y, f.x), interpolate(v.z, v.w, f.x), f.y);\n}\n\nfloat noise(vec2 p, float time){\n\tfloat t = 0.0;\n\tfor(int i = 0; i < noiseOct; i++){\n\t\tfloat freq = pow(2.0, float(i));\n\t\tfloat amp = pow(per, float(noiseOct - i));\n\t\tt += irnd(vec2(p.y / freq + time, p.x / freq + time)) * amp;\n\t}\n\treturn t;\n}\n\nfloat fbm(vec2 x, float time) {\n\tfloat v = 0.0;\n\tfloat a = 0.5;\n\tvec2 shift = vec2(100);\n\tmat2 rot = mat2(cos(0.5), sin(0.5), -sin(0.5), cos(0.50));\n\tfloat sign = 1.0;\n\tfor (int i = 0; i < fbmOct; ++i) {\n\t\tv += a * noise(x, time * sign);\n\t\tx = rot * x * 2.0 + shift;\n\t\ta *= 0.5;\n\t\tsign *= -1.0;\n\t}\n\treturn v;\n}\n\nvoid main() {\n\tvec2 uv = vUv;\n\t\n\tfloat noiseMap = fbm(gl_FragCoord.xy ,uTime * timeStrength);\n\t\n\tfloat noiseTextureMap = noiseMap*2.0-1.0;\n\tuv += noiseTextureMap * distortionStrength;\n\tvec3 textureMap = texture2D(uTexture, uv).rgb;\n\n\tfloat edge0 = fogEdge0;\n\tfloat edge1 = fogEdge1;\n\tfloat blendValue = smoothstep(edge0, edge1, noiseMap);\n\n\tvec3 outputColor = blendValue * fogColor + (1.0 - blendValue) * textureMap;\n\tgl_FragColor = vec4(outputColor, 1.0);\n}\n\n\n","import { useMemo } from \"react\";\nimport * as THREE from \"three\";\nimport vertexShader from \"./shader/main.vert\";\nimport fragmentShader from \"./shader/main.frag\";\nimport { useAddMesh } from \"../utils/useAddMesh\";\n\nexport const useMesh = (scene: THREE.Scene) => {\n const geometry = useMemo(() => new THREE.PlaneGeometry(2, 2), []);\n const material = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uTime: { value: 0.0 },\n uTexture: { value: new THREE.Texture() },\n timeStrength: { value: 0.0 },\n distortionStrength: { value: 0.0 },\n fogEdge0: { value: 0.0 },\n fogEdge1: { value: 0.9 },\n fogColor: { value: new THREE.Color(0xffffff) },\n noiseOct: { value: 8 },\n fbmOct: { value: 3 },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n useAddMesh(scene, geometry, material);\n return material;\n};\n","import { useCallback, useMemo } from \"react\";\nimport * as THREE from \"three\";\nimport { useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { useSingleFBO } from \"../utils/useSingleFBO\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { HooksReturn } from \"../types\";\nimport { useParams } from \"../utils/useParams\";\n\nexport type FogProjectionParams = {\n texture?: THREE.Texture;\n timeStrength?: number;\n distortionStrength?: number;\n fogEdge0?: number;\n fogEdge1?: number;\n fogColor?: THREE.Color;\n noiseOct?: number;\n fbmOct?: number;\n};\n\nexport type FogProjectionObject = {\n scene: THREE.Scene;\n material: THREE.Material;\n camera: THREE.Camera;\n renderTarget: THREE.WebGLRenderTarget;\n};\n\nexport const useFogProjection = ({\n size,\n}: {\n size: Size;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const material = useMesh(scene);\n const camera = useCamera(size);\n const [renderTarget, updateRenderTarget] = useSingleFBO({\n scene,\n camera,\n size,\n });\n\n const [params, setParams] = useParams({\n texture: new THREE.Texture(),\n timeStrength: 0.0,\n distortionStrength: 0.0,\n fogEdge0: 0.0,\n fogEdge1: 0.9,\n fogColor: new THREE.Color(0xffffff),\n noiseOct: 8,\n fbmOct: 3,\n });\n\n const updateFx = useCallback(\n (props: RootState, updateParams: FogProjectionParams) => {\n const { gl, clock } = props;\n setParams(updateParams);\n setUniform(material, \"uTime\", clock.getElapsedTime());\n setUniform(material, \"uTexture\", params.texture!);\n setUniform(material, \"timeStrength\", params.timeStrength!);\n setUniform(material, \"distortionStrength\", params.distortionStrength!);\n setUniform(material, \"fogEdge0\", params.fogEdge0!);\n setUniform(material, \"fogEdge1\", params.fogEdge1!);\n setUniform(material, \"fogColor\", params.fogColor!);\n setUniform(material, \"noiseOct\", params.noiseOct!);\n setUniform(material, \"fbmOct\", params.fbmOct!);\n const bufferTexture = updateRenderTarget(gl);\n return bufferTexture;\n },\n [updateRenderTarget, material, setParams, params]\n );\n\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n material: material,\n camera: camera,\n renderTarget: renderTarget,\n },\n ];\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nvarying vec2 vL;\nvarying vec2 vR;\nvarying vec2 vT;\nvarying vec2 vB;\nuniform vec2 texelSize;\n\nvoid main () {\n\tvUv = uv;\n\tvL = vUv - vec2(texelSize.x, 0.0);\n\tvR = vUv + vec2(texelSize.x, 0.0);\n\tvT = vUv + vec2(0.0, texelSize.y);\n\tvB = vUv - vec2(0.0, texelSize.y);\n\tgl_Position = vec4(position, 1.0);\n}","precision mediump float;\n\nvoid main(){\n\tgl_FragColor = vec4(0.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/init.frag\";\n\nexport const useInitialMaterial = () => {\n const initialMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n depthTest: false,\n depthWrite: false,\n }),\n []\n );\n\n return initialMaterial as THREE.ShaderMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nuniform sampler2D uVelocity;\nuniform sampler2D uSource;\nuniform vec2 texelSize;\nuniform float dt;\nuniform float dissipation;\n\nvoid main () {\n\tvec2 coord = vUv - dt * texture2D(uVelocity, vUv).xy * texelSize;\n\tgl_FragColor = dissipation * texture2D(uSource, coord);\n\tgl_FragColor.a = 1.0;\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/advection.frag\";\n\ntype TUniforms = {\n uVelocity: { value: THREE.Texture };\n uSource: { value: THREE.Texture };\n texelSize: { value: THREE.Vector2 };\n dt: { value: number };\n dissipation: { value: number };\n};\n\nexport class AdvectionMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useAdvectionMaterial = () => {\n const advectionMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uVelocity: { value: new THREE.Texture() },\n uSource: { value: new THREE.Texture() },\n texelSize: { value: new THREE.Vector2() },\n dt: { value: 0.0 },\n dissipation: { value: 0.0 },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return advectionMaterial as AdvectionMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nvarying vec2 vL;\nvarying vec2 vR;\nvarying vec2 vT;\nvarying vec2 vB;\nuniform sampler2D uVelocity;\n\nvec2 sampleVelocity (in vec2 uv) {\n\tvec2 multiplier = vec2(1.0, 1.0);\n\tif (uv.x < 0.0) { uv.x = 0.0; multiplier.x = -1.0; }\n\tif (uv.x > 1.0) { uv.x = 1.0; multiplier.x = -1.0; }\n\tif (uv.y < 0.0) { uv.y = 0.0; multiplier.y = -1.0; }\n\tif (uv.y > 1.0) { uv.y = 1.0; multiplier.y = -1.0; }\n\treturn multiplier * texture2D(uVelocity, uv).xy;\n}\n\nvoid main () {\n\tfloat L = sampleVelocity(vL).x;\n\tfloat R = sampleVelocity(vR).x;\n\tfloat T = sampleVelocity(vT).y;\n\tfloat B = sampleVelocity(vB).y;\n\tfloat div = 0.5 * (R - L + T - B);\n\tgl_FragColor = vec4(div, 0.0, 0.0, 1.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/divergence.frag\";\n\ntype TUniforms = {\n uVelocity: { value: THREE.Texture };\n texelSize: { value: THREE.Vector2 };\n};\n\nexport class DivergenceMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useDivergenceMaterial = () => {\n const divergenceMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uVelocity: { value: null },\n texelSize: { value: new THREE.Vector2() },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return divergenceMaterial as DivergenceMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nvarying vec2 vL;\nvarying vec2 vR;\nvarying vec2 vT;\nvarying vec2 vB;\nuniform sampler2D uPressure;\nuniform sampler2D uDivergence;\n\nvec2 boundary (in vec2 uv) {\n\tuv = min(max(uv, 0.0), 1.0);\n\treturn uv;\n}\n\nvoid main () {\n\tfloat L = texture2D(uPressure, boundary(vL)).x;\n\tfloat R = texture2D(uPressure, boundary(vR)).x;\n\tfloat T = texture2D(uPressure, boundary(vT)).x;\n\tfloat B = texture2D(uPressure, boundary(vB)).x;\n\tfloat C = texture2D(uPressure, vUv).x;\n\tfloat divergence = texture2D(uDivergence, vUv).x;\n\tfloat pressure = (L + R + B + T - divergence) * 0.25;\n\tgl_FragColor = vec4(pressure, 0.0, 0.0, 1.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/pressure.frag\";\n\ntype TUniforms = {\n uPressure: { value: THREE.Texture };\n uDivergence: { value: THREE.Texture };\n texelSize: { value: THREE.Vector2 };\n};\n\nexport class PressureMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const usePressureMaterial = () => {\n const pressureMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uPressure: { value: null },\n uDivergence: { value: null },\n texelSize: { value: new THREE.Vector2() },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return pressureMaterial as PressureMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nvarying vec2 vL;\nvarying vec2 vR;\nvarying vec2 vT;\nvarying vec2 vB;\nuniform sampler2D uVelocity;\n\nvoid main () {\n\tfloat L = texture2D(uVelocity, vL).y;\n\tfloat R = texture2D(uVelocity, vR).y;\n\tfloat T = texture2D(uVelocity, vT).x;\n\tfloat B = texture2D(uVelocity, vB).x;\n\tfloat vorticity = R - L - T + B;\n\tgl_FragColor = vec4(vorticity, 0.0, 0.0, 1.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/curl.frag\";\n\ntype TUniforms = {\n uVelocity: { value: THREE.Texture };\n texelSize: { value: THREE.Vector2 };\n};\n\nexport class CurlMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useCurlMaterial = () => {\n const curlMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uVelocity: { value: null },\n texelSize: { value: new THREE.Vector2() },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return curlMaterial as CurlMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nvarying vec2 vT;\nvarying vec2 vB;\nuniform sampler2D uVelocity;\nuniform sampler2D uCurl;\nuniform float curl;\nuniform float dt;\n\nvoid main () {\n\tfloat T = texture2D(uCurl, vT).x;\n\tfloat B = texture2D(uCurl, vB).x;\n\tfloat C = texture2D(uCurl, vUv).x;\n\tvec2 force = vec2(abs(T) - abs(B), 0.0);\n\tforce *= 1.0 / length(force + 0.00001) * curl * C;\n\tvec2 vel = texture2D(uVelocity, vUv).xy;\n\tgl_FragColor = vec4(vel + force * dt, 0.0, 1.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/vorticity.frag\";\n\ntype TUniforms = {\n uVelocity: { value: THREE.Texture };\n uCurl: { value: THREE.Texture };\n curl: { value: number };\n dt: { value: number };\n texelSize: { value: THREE.Vector2 };\n};\n\nexport class VorticityMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useVorticityMaterial = () => {\n const vorticityMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uVelocity: { value: null },\n uCurl: { value: null },\n curl: { value: 0 },\n dt: { value: 0 },\n texelSize: { value: new THREE.Vector2() },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return vorticityMaterial as VorticityMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nuniform sampler2D uTexture;\nuniform float value;\n\nvoid main () {\n\tgl_FragColor = value * texture2D(uTexture, vUv);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/clear.frag\";\n\ntype TUniforms = {\n uTexture: { value: THREE.Texture };\n value: { value: number };\n texelSize: { value: THREE.Vector2 };\n};\n\nexport class ClearMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useClearMaterial = () => {\n const advectionMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uTexture: { value: new THREE.Texture() },\n value: { value: 0.0 },\n texelSize: { value: new THREE.Vector2() },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return advectionMaterial as ClearMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nvarying vec2 vL;\nvarying vec2 vR;\nvarying vec2 vT;\nvarying vec2 vB;\nuniform sampler2D uPressure;\nuniform sampler2D uVelocity;\n\nvec2 boundary (in vec2 uv) {\n\tuv = min(max(uv, 0.0), 1.0);\n\treturn uv;\n}\n\nvoid main () {\n\tfloat L = texture2D(uPressure, boundary(vL)).x;\n\tfloat R = texture2D(uPressure, boundary(vR)).x;\n\tfloat T = texture2D(uPressure, boundary(vT)).x;\n\tfloat B = texture2D(uPressure, boundary(vB)).x;\n\tvec2 velocity = texture2D(uVelocity, vUv).xy;\n\tvelocity.xy -= vec2(R - L, T - B);\n\tgl_FragColor = vec4(velocity, 0.0, 1.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/gradientSubtract.frag\";\n\ntype TUniforms = {\n uPressure: { value: THREE.Texture };\n uVelocity: { value: THREE.Texture };\n texelSize: { value: THREE.Vector2 };\n};\n\nexport class GradientSubtractMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useGradientSubtractMaterial = () => {\n const gradientSubtractMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uPressure: { value: new THREE.Texture() },\n uVelocity: { value: new THREE.Texture() },\n texelSize: { value: new THREE.Vector2() },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return gradientSubtractMaterial as GradientSubtractMaterial;\n};\n","precision mediump float;\nprecision mediump sampler2D;\n\nvarying vec2 vUv;\nuniform sampler2D uTarget;\nuniform float aspectRatio;\nuniform vec3 color;\nuniform vec2 point;\nuniform float radius;\n\nvoid main () {\n\tvec2 nPoint = (point + vec2(1.0)) * 0.5;\n\tvec2 p = vUv - nPoint.xy;\n\tp.x *= aspectRatio;\n\tvec3 splat = exp(-dot(p, p) / radius) * color;\n\tvec3 base = texture2D(uTarget, vUv).xyz;\n\tgl_FragColor = vec4(base + splat, 1.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/splat.frag\";\n\ntype TUniforms = {\n uTarget: { value: THREE.Texture };\n aspectRatio: { value: number };\n color: { value: THREE.Vector3 };\n point: { value: THREE.Vector2 };\n radius: { value: number };\n texelSize: { value: THREE.Vector2 };\n};\n\nexport class SplatMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useSplateMaterial = () => {\n const splatMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uTarget: { value: new THREE.Texture() },\n aspectRatio: { value: 0 },\n color: { value: new THREE.Vector3() },\n point: { value: new THREE.Vector2() },\n radius: { value: 0.0 },\n texelSize: { value: new THREE.Vector2() },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return splatMaterial as SplatMaterial;\n};\n","import * as THREE from \"three\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport { useInitialMaterial } from \"./materials/useInitialMaterial\";\nimport {\n AdvectionMaterial,\n useAdvectionMaterial,\n} from \"./materials/useAdvectionMaterial\";\nimport {\n DivergenceMaterial,\n useDivergenceMaterial,\n} from \"./materials/useDivergenceMaterial\";\nimport {\n PressureMaterial,\n usePressureMaterial,\n} from \"./materials/usePressureMaterial\";\nimport { CurlMaterial, useCurlMaterial } from \"./materials/useCurlMaterial\";\nimport {\n VorticityMaterial,\n useVorticityMaterial,\n} from \"./materials/useVorticityMaterial\";\nimport { useResolution } from \"../utils/useResolution\";\nimport { ClearMaterial, useClearMaterial } from \"./materials/useClearMaterial\";\nimport {\n GradientSubtractMaterial,\n useGradientSubtractMaterial,\n} from \"./materials/useGradientSubtractMaterial\";\nimport { SplatMaterial, useSplateMaterial } from \"./materials/useSplatMaterial\";\nimport { useAddMesh } from \"../utils/useAddMesh\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { Size } from \"@react-three/fiber\";\n\ntype TMaterials =\n | AdvectionMaterial\n | DivergenceMaterial\n | CurlMaterial\n | PressureMaterial\n | ClearMaterial\n | GradientSubtractMaterial\n | SplatMaterial;\n\nexport type FruidMaterials = {\n vorticityMaterial: VorticityMaterial;\n curlMaterial: CurlMaterial;\n advectionMaterial: AdvectionMaterial;\n divergenceMaterial: DivergenceMaterial;\n pressureMaterial: PressureMaterial;\n clearMaterial: ClearMaterial;\n gradientSubtractMaterial: GradientSubtractMaterial;\n splatMaterial: SplatMaterial;\n};\ntype TUseMeshReturnType = [FruidMaterials, (material: TMaterials) => void];\n\n/**\n * Returns the material update function in the second argument\n */\nexport const useMesh = ({\n scene,\n size,\n dpr,\n}: {\n scene: THREE.Scene;\n size: Size;\n dpr: number;\n}): TUseMeshReturnType => {\n const geometry = useMemo(() => new THREE.PlaneGeometry(2, 2), []);\n const initialMaterial = useInitialMaterial();\n const updateMaterial = initialMaterial.clone();\n const curlMaterial = useCurlMaterial();\n const vorticityMaterial = useVorticityMaterial();\n const advectionMaterial = useAdvectionMaterial();\n const divergenceMaterial = useDivergenceMaterial();\n const pressureMaterial = usePressureMaterial();\n const clearMaterial = useClearMaterial();\n const gradientSubtractMaterial = useGradientSubtractMaterial();\n const splatMaterial = useSplateMaterial();\n const materials = useMemo(\n () => ({\n vorticityMaterial,\n curlMaterial,\n advectionMaterial,\n divergenceMaterial,\n pressureMaterial,\n clearMaterial,\n gradientSubtractMaterial,\n splatMaterial,\n }),\n [\n vorticityMaterial,\n curlMaterial,\n advectionMaterial,\n divergenceMaterial,\n pressureMaterial,\n clearMaterial,\n gradientSubtractMaterial,\n splatMaterial,\n ]\n );\n\n const resolution = useResolution(size, dpr);\n useEffect(() => {\n setUniform(\n materials.splatMaterial,\n \"aspectRatio\",\n resolution.x / resolution.y\n );\n for (const material of Object.values(materials)) {\n setUniform(\n material,\n \"texelSize\",\n new THREE.Vector2(1.0 / resolution.x, 1.0 / resolution.y)\n );\n }\n }, [resolution, materials]);\n\n const mesh = useAddMesh(scene, geometry, initialMaterial);\n useEffect(() => {\n initialMaterial.dispose();\n mesh.material = updateMaterial;\n }, [initialMaterial, mesh, updateMaterial]);\n\n const setMeshMaterial = useCallback(\n (material: TMaterials) => {\n mesh.material = material;\n mesh.material.needsUpdate = true;\n },\n [mesh]\n );\n\n return [materials, setMeshMaterial];\n};\n","import * as THREE from \"three\";\nimport { FruidMaterials, useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { useDoubleFBO } from \"../utils/useDoubleFBO\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { usePointer } from \"../utils/usePointer\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { useSingleFBO } from \"../utils/useSingleFBO\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { HooksReturn } from \"../types\";\nimport { useParams } from \"../utils/useParams\";\nimport { DoubleRenderTarget } from \"../utils/types\";\n\nexport type FruidParams = {\n density_dissipation?: number;\n velocity_dissipation?: number;\n velocity_acceleration?: number;\n pressure_dissipation?: number;\n pressure_iterations?: number;\n curl_strength?: number;\n splat_radius?: number;\n fruid_color?: ((velocity: THREE.Vector2) => THREE.Vector3) | THREE.Vector3;\n};\n\nexport type FruidObject = {\n scene: THREE.Scene;\n materials: FruidMaterials;\n camera: THREE.Camera;\n renderTarget: {\n velocity: DoubleRenderTarget;\n density: DoubleRenderTarget;\n curl: THREE.WebGLRenderTarget;\n divergence: THREE.WebGLRenderTarget;\n pressure: DoubleRenderTarget;\n };\n};\n\nexport const useFruid = ({\n size,\n dpr,\n}: {\n size: Size;\n dpr: number;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const [materials, setMeshMaterial] = useMesh({ scene, size, dpr });\n const camera = useCamera(size);\n const updatePointer = usePointer();\n\n const fboProps = useMemo(\n () => ({\n scene,\n camera,\n size,\n dpr,\n }),\n [scene, camera, size, dpr]\n );\n const [velocityFBO, updateVelocityFBO] = useDoubleFBO(fboProps);\n const [densityFBO, updateDensityFBO] = useDoubleFBO(fboProps);\n const [curlFBO, updateCurlFBO] = useSingleFBO(fboProps);\n const [divergenceFBO, updateDivergenceFBO] = useSingleFBO(fboProps);\n const [pressureFBO, updatePressureFBO] = useDoubleFBO(fboProps);\n\n const lastTime = useRef(0);\n const scaledDiffVec = useRef(new THREE.Vector2(0, 0));\n const spaltVec = useRef(new THREE.Vector3(0, 0, 0));\n\n const [params, setParams] = useParams({\n density_dissipation: 0.0,\n velocity_dissipation: 0.0,\n velocity_acceleration: 0.0,\n pressure_dissipation: 0.0,\n pressure_iterations: 20,\n curl_strength: 0.0,\n splat_radius: 0.001,\n fruid_color: new THREE.Vector3(1.0, 1.0, 1.0),\n });\n\n const updateFx = useCallback(\n (props: RootState, updateParams: FruidParams) => {\n const { gl, pointer, clock, size } = props;\n\n setParams(updateParams);\n\n if (lastTime.current === 0) {\n lastTime.current = clock.getElapsedTime();\n }\n const dt = Math.min(\n (clock.getElapsedTime() - lastTime.current) / 3,\n 0.02\n );\n lastTime.current = clock.getElapsedTime();\n\n // update velocity\n const velocityTex = updateVelocityFBO(gl, ({ read }) => {\n setMeshMaterial(materials.advectionMaterial);\n setUniform(materials.advectionMaterial, \"uVelocity\", read);\n setUniform(materials.advectionMaterial, \"uSource\", read);\n setUniform(materials.advectionMaterial, \"dt\", dt);\n setUniform(\n materials.advectionMaterial,\n \"dissipation\",\n params.velocity_dissipation!\n );\n });\n\n // update density\n const densityTex = updateDensityFBO(gl, ({ read }) => {\n setMeshMaterial(materials.advectionMaterial);\n setUniform(materials.advectionMaterial, \"uVelocity\", velocityTex);\n setUniform(materials.advectionMaterial, \"uSource\", read);\n setUniform(\n materials.advectionMaterial,\n \"dissipation\",\n params.density_dissipation!\n );\n });\n\n // update splatting\n const { currentPointer, diffPointer, isVelocityUpdate, velocity } =\n updatePointer(pointer);\n if (isVelocityUpdate) {\n updateVelocityFBO(gl, ({ read }) => {\n setMeshMaterial(materials.splatMaterial);\n setUniform(materials.splatMaterial, \"uTarget\", read);\n setUniform(materials.splatMaterial, \"point\", currentPointer);\n const scaledDiff = diffPointer.multiply(\n scaledDiffVec.current\n .set(size.width, size.height)\n .multiplyScalar(params.velocity_acceleration!)\n );\n setUniform(\n materials.splatMaterial,\n \"color\",\n spaltVec.current.set(scaledDiff.x, scaledDiff.y, 1.0)\n );\n setUniform(\n materials.splatMaterial,\n \"radius\",\n params.splat_radius!\n );\n });\n updateDensityFBO(gl, ({ read }) => {\n setMeshMaterial(materials.splatMaterial);\n setUniform(materials.splatMaterial, \"uTarget\", read);\n const color: THREE.Vector3 =\n typeof params.fruid_color === \"function\"\n ? params.fruid_color(velocity)\n : params.fruid_color!;\n setUniform(materials.splatMaterial, \"color\", color);\n });\n }\n\n // update curl\n const curlTex = updateCurlFBO(gl, () => {\n setMeshMaterial(materials.curlMaterial);\n setUniform(materials.curlMaterial, \"uVelocity\", velocityTex);\n });\n\n // update vorticity\n updateVelocityFBO(gl, ({ read }) => {\n setMeshMaterial(materials.vorticityMaterial);\n setUniform(materials.vorticityMaterial, \"uVelocity\", read);\n setUniform(materials.vorticityMaterial, \"uCurl\", curlTex);\n setUniform(\n materials.vorticityMaterial,\n \"curl\",\n params.curl_strength!\n );\n setUniform(materials.vorticityMaterial, \"dt\", dt);\n });\n\n // update divergence\n const divergenceTex = updateDivergenceFBO(gl, () => {\n setMeshMaterial(materials.divergenceMaterial);\n setUniform(materials.divergenceMaterial, \"uVelocity\", velocityTex);\n });\n\n // update pressure\n updatePressureFBO(gl, ({ read }) => {\n setMeshMaterial(materials.clearMaterial);\n setUniform(materials.clearMaterial, \"uTexture\", read);\n setUniform(\n materials.clearMaterial,\n \"value\",\n params.pressure_dissipation!\n );\n });\n\n // solve pressure iterative (Gauss-Seidel)\n setMeshMaterial(materials.pressureMaterial);\n setUniform(materials.pressureMaterial, \"uDivergence\", divergenceTex);\n let pressureTexTemp: THREE.Texture;\n for (let i = 0; i < params.pressure_iterations!; i++) {\n pressureTexTemp = updatePressureFBO(gl, ({ read }) => {\n setUniform(materials.pressureMaterial, \"uPressure\", read);\n });\n }\n\n // update gradienSubtract\n updateVelocityFBO(gl, ({ read }) => {\n setMeshMaterial(materials.gradientSubtractMaterial);\n setUniform(\n materials.gradientSubtractMaterial,\n \"uPressure\",\n pressureTexTemp\n );\n setUniform(materials.gradientSubtractMaterial, \"uVelocity\", read);\n });\n\n return densityTex;\n },\n [\n materials,\n setMeshMaterial,\n updateCurlFBO,\n updateDensityFBO,\n updateDivergenceFBO,\n updatePointer,\n updatePressureFBO,\n updateVelocityFBO,\n setParams,\n params,\n ]\n );\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n materials: materials,\n camera: camera,\n renderTarget: {\n velocity: velocityFBO,\n density: densityFBO,\n curl: curlFBO,\n divergence: divergenceFBO,\n pressure: pressureFBO,\n },\n },\n ];\n};\n","import { useEffect, useMemo, useRef } from \"react\";\nimport * as THREE from \"three\";\n\ntype TcreateMesh = {\n scale: number;\n max: number;\n texture?: THREE.Texture;\n scene: THREE.Scene;\n};\nexport const useMesh = ({ scale, max, texture, scene }: TcreateMesh) => {\n const meshArr = useRef([]);\n const geometry = useMemo(\n () => new THREE.PlaneGeometry(scale, scale),\n [scale]\n );\n const material = useMemo(\n () =>\n new THREE.MeshBasicMaterial({\n map: texture ?? null,\n transparent: true,\n blending: THREE.AdditiveBlending,\n depthTest: false,\n depthWrite: false,\n }),\n [texture]\n );\n useEffect(() => {\n for (let i = 0; i < max; i++) {\n const mesh = new THREE.Mesh(geometry.clone(), material.clone());\n mesh.rotateZ(2 * Math.PI * Math.random());\n mesh.visible = false;\n scene.add(mesh);\n meshArr.current.push(mesh);\n }\n }, [geometry, material, scene, max]);\n return meshArr.current;\n};\n","import { useCallback, useMemo, useRef } from \"react\";\nimport * as THREE from \"three\";\nimport { useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { useSingleFBO } from \"../utils/useSingleFBO\";\nimport { usePointer } from \"../utils/usePointer\";\nimport { HooksReturn } from \"../types\";\nimport { useParams } from \"../utils/useParams\";\n\nexport type RippleParams = {\n /** rippleが出現する頻度,default:0.01 */\n frequency?: number;\n /** rippleの回転,default:0.01 */\n rotation?: number;\n /** rippleがフェードアウトするスピード,default:0.9 */\n fadeout_speed?: number;\n /** rippleの拡大率,default:0.15 */\n scale?: number;\n /** rippleの透明度,default:0.6 */\n alpha?: number;\n};\n\nexport type RippleObject = {\n scene: THREE.Scene;\n meshArr: THREE.Mesh[];\n camera: THREE.Camera;\n renderTarget: THREE.WebGLRenderTarget;\n};\n\nexport const useRipple = ({\n texture,\n scale = 64,\n max = 100,\n size,\n}: {\n /** texture applied to ripple */\n texture: THREE.Texture;\n /** ripple size, default:64 */\n scale?: number;\n /** ripple max length, default:100 */\n max?: number;\n size: Size;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const meshArr = useMesh({\n scale: scale,\n max: max,\n texture,\n scene,\n });\n const camera = useCamera(size);\n const updatePointer = usePointer();\n const [renderTarget, updateRenderTarget] = useSingleFBO({\n scene,\n camera,\n size,\n });\n\n const [params, setParams] = useParams({\n frequency: 0.01,\n rotation: 0.01,\n fadeout_speed: 0.9,\n scale: 0.15,\n alpha: 0.6,\n });\n\n const currentWave = useRef(0);\n\n const updateFx = useCallback(\n (props: RootState, updateParams: RippleParams) => {\n const { gl, pointer, size } = props;\n\n setParams(updateParams);\n\n const { currentPointer, diffPointer } = updatePointer(pointer);\n if (params.frequency! < diffPointer.length()) {\n const mesh = meshArr[currentWave.current];\n mesh.visible = true;\n mesh.position.set(\n currentPointer.x * (size.width / 2),\n currentPointer.y * (size.height / 2),\n 0\n );\n mesh.scale.x = mesh.scale.y = 0.0;\n (mesh.material as THREE.MeshBasicMaterial).opacity = params.alpha!;\n currentWave.current = (currentWave.current + 1) % max;\n }\n meshArr.forEach((mesh) => {\n if (mesh.visible) {\n const material = mesh.material as THREE.MeshBasicMaterial;\n mesh.rotation.z += params.rotation!;\n material.opacity *= params.fadeout_speed!;\n mesh.scale.x =\n params.fadeout_speed! * mesh.scale.x + params.scale!;\n mesh.scale.y = mesh.scale.x;\n if (material.opacity < 0.002) mesh.visible = false;\n }\n });\n\n const bufferTexture = updateRenderTarget(gl);\n return bufferTexture;\n },\n [updateRenderTarget, meshArr, updatePointer, max, params, setParams]\n );\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n camera: camera,\n meshArr: meshArr,\n renderTarget: renderTarget,\n },\n ];\n};\n","varying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\tgl_Position = vec4(position, 1.0);\n}","precision mediump float;\n\nvoid main(){\n\tgl_FragColor = vec4(0.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/init.frag\";\n\nexport const useInitialMaterial = () => {\n const initialMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n depthTest: false,\n depthWrite: false,\n }),\n []\n );\n\n return initialMaterial as THREE.ShaderMaterial;\n};\n","precision highp float;\n\nuniform float viscosity;\nuniform float forceRadius;\nuniform float forceCoefficient;\nuniform vec2 resolution;\nuniform sampler2D dataTex;\nuniform vec2 pointerPos;\nuniform vec2 beforePointerPos;\n\n#pragma glslify: map = require('./map.glsl')\n#pragma glslify: samplePressure = require('./samplePressure.glsl')\n#pragma glslify: sampleVelocity = require('./sampleVelocity.glsl')\n\nvarying vec2 vUv;\n\nvoid main(){\n\tvec2 r = resolution;\n\tvec2 uv = gl_FragCoord.xy / r;\n\tvec4 data = texture2D(dataTex, uv);\n\tvec2 v = data.xy;\n\n\tvec2 offsetX = vec2(1.0, 0.0);\n\tvec2 offsetY = vec2(0.0, 1.0);\n\n\t// 上下左右の圧力\n\tfloat pLeft = samplePressure(dataTex, (gl_FragCoord.xy - offsetX) / r, r);\n\tfloat pRight = samplePressure(dataTex, (gl_FragCoord.xy + offsetX) / r, r);\n\tfloat pTop = samplePressure(dataTex, (gl_FragCoord.xy - offsetY) / r, r);\n\tfloat pBottom = samplePressure(dataTex, (gl_FragCoord.xy + offsetY) / r, r);\n\n\t// マウス\n\tvec2 mPos = 0.5 * (pointerPos + 1.0) * r;\n\tvec2 mPPos = 0.5 * (beforePointerPos + 1.0) * r;\n\tvec2 mouseV = mPos - mPPos;\n\tfloat len = length(mPos - uv * r) / forceRadius;\n\tfloat d = clamp(1.0 - len, 0.0, 1.0) * length(mouseV) * forceCoefficient;\n\tvec2 mforce = d * normalize(mPos - uv * r + mouseV);\n\n\tv += vec2(pRight - pLeft, pBottom - pTop) * 0.5;\n\tv += mforce;\n\tv *= viscosity;\n\n\tgl_FragColor = vec4(v, data.zw);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/velocity.frag\";\n\ntype TUniforms = {\n resolution: { value: THREE.Vector2 };\n viscosity: { value: number };\n forceRadius: { value: number };\n forceCoefficient: { value: number };\n dataTex: { value: THREE.Texture };\n pointerPos: { value: THREE.Vector2 };\n beforePointerPos: { value: THREE.Vector2 };\n};\n\nexport class VelocityMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useVelocityMaterial = () => {\n const velocityMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n resolution: { value: new THREE.Vector2() },\n dataTex: { value: null },\n pointerPos: { value: null },\n beforePointerPos: { value: null },\n viscosity: { value: 0.0 },\n forceRadius: { value: 0.0 },\n forceCoefficient: { value: 0.0 },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return velocityMaterial as VelocityMaterial;\n};\n","precision highp float;\n\nuniform float attenuation;\nuniform vec2 resolution;\nuniform sampler2D dataTex;\n\n#pragma glslify: sampleVelocity = require('./sampleVelocity.glsl')\n#pragma glslify: samplePressure = require('./samplePressure.glsl')\n\nvarying vec2 vUv;\n\nvec2 bilerpVelocity(sampler2D tex, vec2 p, vec2 resolution) {\n\tvec4 ij; // i0, j0, i1, j1\n\tij.xy = floor(p - 0.5) + 0.5;\n\tij.zw = ij.xy + 1.0;\n\n\tvec4 uv = ij / resolution.xyxy;\n\tvec2 d11 = sampleVelocity(tex, uv.xy, resolution);\n\tvec2 d21 = sampleVelocity(tex, uv.zy, resolution);\n\tvec2 d12 = sampleVelocity(tex, uv.xw, resolution);\n\tvec2 d22 = sampleVelocity(tex, uv.zw, resolution);\n\n\tvec2 a = p - ij.xy;\n\n\treturn mix(mix(d11, d21, a.x), mix(d12, d22, a.x), a.y);\n}\n\nvoid main(){\n\tvec2 r = resolution;\n\tvec2 p = gl_FragCoord.xy - sampleVelocity(dataTex, gl_FragCoord.xy / r, r);\n\n\tgl_FragColor = vec4(bilerpVelocity(dataTex, p, r) * attenuation, samplePressure(dataTex, gl_FragCoord.xy / r, r), 0.0);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/advection.frag\";\n\ntype TUniforms = {\n resolution: { value: THREE.Vector2 };\n dataTex: { value: THREE.Texture };\n attenuation: { value: number };\n};\n\nexport class AdvectionMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useAdvectionMaterial = () => {\n const advectionMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n resolution: { value: new THREE.Vector2(0, 0) },\n dataTex: { value: null },\n attenuation: { value: 0.0 },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return advectionMaterial as AdvectionMaterial;\n};\n","precision highp float;\n\nuniform vec2 resolution;\nuniform sampler2D dataTex;\n\n#pragma glslify: sampleVelocity = require('./sampleVelocity.glsl')\n\nvoid main(){\n\tvec2 r = resolution;\n\tvec4 data = texture2D(dataTex, gl_FragCoord.xy / r);\n\n\tvec2 offsetX = vec2(1.0, 0.0);\n\tvec2 offsetY = vec2(0.0, 1.0);\n\n\t// 上下左右の速度\n\tvec2 vLeft = sampleVelocity(dataTex, (gl_FragCoord.xy - offsetX) / r, r);\n\tvec2 vRight = sampleVelocity(dataTex, (gl_FragCoord.xy + offsetX) / r, r);\n\tvec2 vTop = sampleVelocity(dataTex, (gl_FragCoord.xy - offsetY) / r, r);\n\tvec2 vBottom = sampleVelocity(dataTex, (gl_FragCoord.xy + offsetY) / r, r);\n\n\tfloat divergence = ((vRight.x - vLeft.x) + (vBottom.y - vTop.y)) * 0.5;\n\n\tgl_FragColor = vec4(data.xy, data.z, divergence);\n\n}\n\n","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/divergence.frag\";\n\ntype TUniforms = {\n resolution: { value: THREE.Vector2 };\n dataTex: { value: THREE.Texture };\n};\n\nexport class DivergenceMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useDivergenceMaterial = () => {\n const divergenceMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n resolution: { value: new THREE.Vector2() },\n dataTex: { value: null },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return divergenceMaterial as DivergenceMaterial;\n};\n","precision highp float;\n\nuniform float alpha;\nuniform float beta;\nuniform vec2 resolution;\nuniform sampler2D dataTex;\n\n#pragma glslify: samplePressure = require('./samplePressure.glsl')\n\nvoid main(){\n\tvec2 r = resolution;\n\tvec4 data = texture2D(dataTex, gl_FragCoord.xy / r);\n\n\t// 上下左右の圧力\n\tfloat pLeft = samplePressure(dataTex, (gl_FragCoord.xy - vec2(1.0, 0.0)) / r, r);\n\tfloat pRight = samplePressure(dataTex, (gl_FragCoord.xy + vec2(1.0, 0.0)) / r, r);\n\tfloat pTop = samplePressure(dataTex, (gl_FragCoord.xy - vec2(0.0, 1.0)) / r, r);\n\tfloat pBottom = samplePressure(dataTex, (gl_FragCoord.xy + vec2(0.0, 1.0)) / r, r);\n\n\tfloat divergence = data.w;\n\tfloat pressure = (divergence * alpha + (pLeft + pRight + pTop + pBottom)) * 0.25 * beta;\n\tgl_FragColor = vec4(data.xy, pressure, divergence);\n}","import * as THREE from \"three\";\nimport { useMemo } from \"react\";\nimport vertexShader from \"../shaders/main.vert\";\nimport fragmentShader from \"../shaders/pressure.frag\";\n\ntype TUniforms = {\n resolution: { value: THREE.Vector2 };\n dataTex: { value: THREE.Texture };\n alpha: { value: number };\n beta: { value: number };\n};\n\nexport class PressureMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const usePressureMaterial = () => {\n const pressureMaterial = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n resolution: { value: new THREE.Vector2() },\n dataTex: { value: null },\n alpha: { value: 0.0 },\n beta: { value: 0.0 },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n return pressureMaterial as PressureMaterial;\n};\n","import * as THREE from \"three\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport { useInitialMaterial } from \"./materials/useInitialMaterial\";\nimport {\n VelocityMaterial,\n useVelocityMaterial,\n} from \"./materials/useVelocityMaterial\";\nimport {\n AdvectionMaterial,\n useAdvectionMaterial,\n} from \"./materials/useAdvectionMaterial\";\nimport {\n DivergenceMaterial,\n useDivergenceMaterial,\n} from \"./materials/useDivergenceMaterial\";\nimport {\n PressureMaterial,\n usePressureMaterial,\n} from \"./materials/usePressureMaterial\";\nimport { useResolution } from \"../utils/useResolution\";\nimport { useAddMesh } from \"../utils/useAddMesh\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { Size } from \"@react-three/fiber\";\n\ntype TMaterials =\n | VelocityMaterial\n | AdvectionMaterial\n | DivergenceMaterial\n | PressureMaterial;\n\nexport type SimpleFruidMaterials = {\n velocityMaterial: VelocityMaterial;\n advectionMaterial: AdvectionMaterial;\n divergenceMaterial: DivergenceMaterial;\n pressureMaterial: PressureMaterial;\n};\n\ntype TUseMeshReturnType = [\n SimpleFruidMaterials,\n (material: TMaterials) => void\n];\n\nexport const useMesh = ({\n scene,\n size,\n dpr,\n}: {\n scene: THREE.Scene;\n size: Size;\n dpr: number;\n}): TUseMeshReturnType => {\n const geometry = useMemo(() => new THREE.PlaneGeometry(2, 2), []);\n const initialMaterial = useInitialMaterial();\n const updateMaterial = initialMaterial.clone();\n const velocityMaterial = useVelocityMaterial();\n const advectionMaterial = useAdvectionMaterial();\n const divergenceMaterial = useDivergenceMaterial();\n const pressureMaterial = usePressureMaterial();\n const materials = useMemo(\n () => ({\n velocityMaterial,\n advectionMaterial,\n divergenceMaterial,\n pressureMaterial,\n }),\n [\n velocityMaterial,\n advectionMaterial,\n divergenceMaterial,\n pressureMaterial,\n ]\n );\n\n const resolution = useResolution(size, dpr);\n useEffect(() => {\n for (const material of Object.values(materials)) {\n setUniform(material, \"resolution\", resolution);\n }\n }, [resolution, materials]);\n\n const mesh = useAddMesh(scene, geometry, initialMaterial);\n useEffect(() => {\n initialMaterial.dispose();\n mesh.material = updateMaterial;\n }, [initialMaterial, mesh, updateMaterial]);\n\n const setMeshMaterial = useCallback(\n (material: TMaterials) => {\n mesh.material = material;\n mesh.material.needsUpdate = true;\n },\n [mesh]\n );\n\n return [materials, setMeshMaterial];\n};\n","import * as THREE from \"three\";\nimport { SimpleFruidMaterials, useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { useDoubleFBO } from \"../utils/useDoubleFBO\";\nimport { useCallback, useMemo } from \"react\";\nimport { usePointer } from \"../utils/usePointer\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { useParams } from \"../utils/useParams\";\nimport { HooksReturn } from \"../types\";\nimport { DoubleRenderTarget } from \"../utils/types\";\n\nexport type SimpleFruidParams = {\n /** 圧力のヤコビ法の計算回数 */\n pressure_iterations?: number;\n /** 圧力のステップごとの減衰値 */\n attenuation?: number;\n /** 圧力計算時の係数 */\n alpha?: number;\n /** 圧力計算時の係数 */\n beta?: number;\n /** 粘度 */\n viscosity?: number;\n /** 力を加える円の半径 */\n forceRadius?: number;\n /** 速度の係数 */\n forceCoefficient?: number;\n};\n\nexport type SimpleFruidObject = {\n scene: THREE.Scene;\n materials: SimpleFruidMaterials;\n camera: THREE.Camera;\n renderTarget: DoubleRenderTarget;\n};\n\nexport const useSimpleFruid = ({\n size,\n dpr,\n}: {\n size: Size;\n dpr: number;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const [materials, setMeshMaterial] = useMesh({ scene, size, dpr });\n const camera = useCamera(size);\n const updatePointer = usePointer();\n\n const [renderTarget, updateRenderTarget] = useDoubleFBO({\n scene,\n camera,\n size,\n isSizeUpdate: true,\n });\n\n const [params, setParams] = useParams({\n pressure_iterations: 20,\n attenuation: 1.0,\n alpha: 1.0,\n beta: 1.0,\n viscosity: 0.99,\n forceRadius: 90,\n forceCoefficient: 1.0,\n });\n\n const updateFx = useCallback(\n (props: RootState, updateParams: SimpleFruidParams) => {\n const { gl, pointer } = props;\n\n setParams(updateParams);\n\n setUniform(\n materials.advectionMaterial,\n \"attenuation\",\n params.attenuation!\n );\n setUniform(materials.pressureMaterial, \"alpha\", params.alpha!);\n setUniform(materials.pressureMaterial, \"beta\", params.beta!);\n setUniform(materials.velocityMaterial, \"viscosity\", params.viscosity!);\n setUniform(\n materials.velocityMaterial,\n \"forceRadius\",\n params.forceRadius!\n );\n setUniform(\n materials.velocityMaterial,\n \"forceCoefficient\",\n params.forceCoefficient!\n );\n\n // update divergence\n updateRenderTarget(gl, ({ read }) => {\n setMeshMaterial(materials.divergenceMaterial);\n setUniform(materials.divergenceMaterial, \"dataTex\", read);\n });\n\n // update pressure\n const solverIteration = params.pressure_iterations!;\n for (let i = 0; i < solverIteration; i++) {\n updateRenderTarget(gl, ({ read }) => {\n setMeshMaterial(materials.pressureMaterial);\n setUniform(materials.pressureMaterial, \"dataTex\", read);\n });\n }\n\n // update velocity\n const { currentPointer, prevPointer } = updatePointer(pointer);\n setUniform(materials.velocityMaterial, \"pointerPos\", currentPointer);\n setUniform(\n materials.velocityMaterial,\n \"beforePointerPos\",\n prevPointer\n );\n updateRenderTarget(gl, ({ read }) => {\n setMeshMaterial(materials.velocityMaterial);\n setUniform(materials.velocityMaterial, \"dataTex\", read);\n });\n\n // update advection\n const outPutTexture = updateRenderTarget(gl, ({ read }) => {\n setMeshMaterial(materials.advectionMaterial);\n setUniform(materials.advectionMaterial, \"dataTex\", read);\n });\n\n return outPutTexture;\n },\n [\n materials,\n setMeshMaterial,\n updatePointer,\n updateRenderTarget,\n setParams,\n params,\n ]\n );\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n materials: materials,\n camera: camera,\n renderTarget: renderTarget,\n },\n ];\n};\n","varying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\tgl_Position = vec4(position, 1.0);\n}","precision mediump float;\n\nvarying vec2 vUv;\nuniform vec2 uResolution;\nuniform vec2 uImageResolution;\n\nuniform sampler2D uTexture0;\nuniform sampler2D uTexture1;\nuniform sampler2D noise;\nuniform float noiseStrength;\nuniform float progress;\nuniform float dirX;\nuniform float dirY;\n\nvoid main() {\n\tvec2 bgRatio=vec2(\n\t\tmin((uResolution.x/uResolution.y)/(uImageResolution.x/uImageResolution.y),1.),\n\t\tmin((uResolution.y/uResolution.x)/(uImageResolution.y/uImageResolution.x),1.)\n\t);\n\tvec2 uv=vec2(\n\t\tvUv.x*bgRatio.x+(1.-bgRatio.x)*.5,\n\t\tvUv.y*bgRatio.y+(1.-bgRatio.y)*.5\n\t);\n\n\t// noise\n\tvec2 noiseMap = texture2D(noise, uv).rg;\n\tnoiseMap=noiseMap*2.0-1.0;\n\tuv += noiseMap * noiseStrength;\n\n\t// uvをセンター基準に\n\tvec2 centeredUV = uv - vec2(0.5);\n\t\n\t//texture 0\n\tfloat xOffsetTexture0 = 0.5 - dirX * progress;\n\tfloat yOffsetTexture0 = 0.5 - dirY * progress;\n\tvec2 samplePosTexture0 = vec2(xOffsetTexture0, yOffsetTexture0) + centeredUV;\n\n\t//texture 1\n\tfloat xOffsetTexture1 = 0.5 + dirX * (1.0 - progress);\n\tfloat yOffsetTexture1 = 0.5 + dirY * (1.0 - progress);\n\tvec2 samplePosTexture1 = vec2(xOffsetTexture1, yOffsetTexture1) + centeredUV;\n\n\tvec4 color0 = texture2D(uTexture0, samplePosTexture0);\n\tvec4 color1 = texture2D(uTexture1, samplePosTexture1);\n\n\tgl_FragColor = mix(color0, color1, progress);\n\n}","import { useEffect, useMemo } from \"react\";\nimport * as THREE from \"three\";\nimport { useResolution } from \"../utils/useResolution\";\nimport vertexShader from \"./shader/main.vert\";\nimport fragmentShader from \"./shader/main.frag\";\nimport { useAddMesh } from \"../utils/useAddMesh\";\nimport { Size } from \"@react-three/fiber\";\n\ntype TUniforms = {\n uResolution: { value: THREE.Vector2 };\n uImageResolution: { value: THREE.Vector2 };\n uTexture0: { value: THREE.Texture };\n uTexture1: { value: THREE.Texture };\n noise: { value: THREE.Texture };\n noiseStrength: { value: number };\n progress: { value: number };\n dirX: { value: number };\n dirY: { value: number };\n};\n\nexport class MetamorphoseMaterial extends THREE.ShaderMaterial {\n uniforms!: TUniforms;\n}\n\nexport const useMesh = ({\n scene,\n size,\n dpr,\n}: {\n scene: THREE.Scene;\n size: Size;\n dpr: number;\n}) => {\n const geometry = useMemo(() => new THREE.PlaneGeometry(2, 2), []);\n const material = useMemo(\n () =>\n new THREE.ShaderMaterial({\n uniforms: {\n uResolution: { value: new THREE.Vector2() },\n uImageResolution: { value: new THREE.Vector2() },\n uTexture0: { value: new THREE.Texture() },\n uTexture1: { value: new THREE.Texture() },\n noise: { value: new THREE.Texture() },\n noiseStrength: { value: 0.0 },\n progress: { value: 0.0 },\n dirX: { value: 0.0 },\n dirY: { value: 0.0 },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n }),\n []\n );\n\n const resolution = useResolution(size, dpr);\n useEffect(() => {\n material.uniforms.uResolution.value = resolution.clone();\n }, [resolution, material]);\n\n useAddMesh(scene, geometry, material);\n\n return material as MetamorphoseMaterial;\n};\n","import * as THREE from \"three\";\nimport { useCallback, useMemo } from \"react\";\nimport { useMesh } from \"./useMesh\";\nimport { useCamera } from \"../utils/useCamera\";\nimport { RootState, Size } from \"@react-three/fiber\";\nimport { useSingleFBO } from \"../utils/useSingleFBO\";\nimport { setUniform } from \"../utils/setUniforms\";\nimport { HooksReturn } from \"../types\";\nimport { useParams } from \"../utils/useParams\";\n\nexport type TransitionBgParams = {\n texture0?: THREE.Texture;\n texture1?: THREE.Texture;\n imageResolution?: THREE.Vector2;\n noise?: THREE.Texture;\n noiseStrength?: number;\n progress?: number;\n dir?: THREE.Vector2;\n};\n\nexport type TransitionBgObject = {\n scene: THREE.Scene;\n material: THREE.Material;\n camera: THREE.Camera;\n renderTarget: THREE.WebGLRenderTarget;\n};\n\nexport const useTransitionBg = ({\n size,\n dpr,\n}: {\n size: Size;\n dpr: number;\n}): HooksReturn => {\n const scene = useMemo(() => new THREE.Scene(), []);\n const material = useMesh({ scene, size, dpr });\n const camera = useCamera(size);\n const [renderTarget, updateRenderTarget] = useSingleFBO({\n scene,\n camera,\n dpr,\n size,\n isSizeUpdate: true,\n });\n\n const [params, setParams] = useParams({\n texture0: new THREE.Texture(),\n texture1: new THREE.Texture(),\n imageResolution: new THREE.Vector2(0, 0),\n noise: new THREE.Texture(),\n noiseStrength: 0.0,\n progress: 0.0,\n dir: new THREE.Vector2(0, 0),\n });\n\n const updateFx = useCallback(\n (props: RootState, updateParams: TransitionBgParams) => {\n const { gl } = props;\n\n setParams(updateParams);\n\n setUniform(material, \"uTexture0\", params.texture0!);\n setUniform(material, \"uTexture1\", params.texture1!);\n setUniform(material, \"uImageResolution\", params.imageResolution!);\n setUniform(material, \"noise\", params.noise!);\n setUniform(material, \"noiseStrength\", params.noiseStrength!);\n setUniform(material, \"progress\", params.progress!);\n setUniform(material, \"dirX\", params.dir!.x);\n setUniform(material, \"dirY\", params.dir!.y);\n\n const bufferTexture = updateRenderTarget(gl);\n\n return bufferTexture;\n },\n [updateRenderTarget, material, params, setParams]\n );\n return [\n updateFx,\n setParams,\n {\n scene: scene,\n material: material,\n camera: camera,\n renderTarget: renderTarget,\n },\n ];\n};\n"],"names":["main_default","useResolution","size","dpr","_width","_height","useMemo","THREE","useAddMesh","scene","geometry","material","mesh","useEffect","setUniform","key","value","useMesh","vertexShader","fragmentShader","resolution","getCameraProps","width","height","frustumSize","aspect","w","h","useCamera","near","far","FBO_OPTION","useSingleFBO","camera","isSizeUpdate","renderTarget","useRef","useLayoutEffect","_a","updateRenderTarget","useCallback","gl","onBeforeRender","fbo","useDoubleFBO","temp","initRenderTargets","read","write","_b","usePointer","prevPointer","diffPointer","lastUpdateTime","velocity","isMoved","currentPointer","now","current","deltaTime","isUpdate","prevTemp","useParams","params","paramsRef","setParams","updateParams","paramKey","useBrush","updatePointer","props","pointer","useDuoTone","useFlowmap","useFogProjection","clock","init_default","useInitialMaterial","advection_default","useAdvectionMaterial","divergence_default","useDivergenceMaterial","pressure_default","usePressureMaterial","curl_default","useCurlMaterial","vorticity_default","useVorticityMaterial","clear_default","useClearMaterial","gradientSubtract_default","useGradientSubtractMaterial","splat_default","useSplateMaterial","initialMaterial","updateMaterial","curlMaterial","vorticityMaterial","advectionMaterial","divergenceMaterial","pressureMaterial","clearMaterial","gradientSubtractMaterial","splatMaterial","materials","setMeshMaterial","useFruid","fboProps","velocityFBO","updateVelocityFBO","densityFBO","updateDensityFBO","curlFBO","updateCurlFBO","divergenceFBO","updateDivergenceFBO","pressureFBO","updatePressureFBO","lastTime","scaledDiffVec","spaltVec","dt","velocityTex","densityTex","isVelocityUpdate","scaledDiff","color","curlTex","divergenceTex","pressureTexTemp","i","scale","max","texture","meshArr","useRipple","currentWave","velocity_default","useVelocityMaterial","velocityMaterial","useSimpleFruid","solverIteration","useTransitionBg"],"mappings":"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"} \ No newline at end of file diff --git a/packages/use-shader-fx/src/hooks/types/index.ts b/packages/use-shader-fx/src/hook/types/index.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/types/index.ts rename to packages/use-shader-fx/src/hook/types/index.ts diff --git a/packages/use-shader-fx/src/hooks/useBrush/index.ts b/packages/use-shader-fx/src/hook/useBrush/index.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useBrush/index.ts rename to packages/use-shader-fx/src/hook/useBrush/index.ts diff --git a/packages/use-shader-fx/src/hooks/useBrush/shader/main.frag b/packages/use-shader-fx/src/hook/useBrush/shader/main.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useBrush/shader/main.frag rename to packages/use-shader-fx/src/hook/useBrush/shader/main.frag diff --git a/packages/use-shader-fx/src/hooks/useBrush/shader/main.vert b/packages/use-shader-fx/src/hook/useBrush/shader/main.vert similarity index 100% rename from packages/use-shader-fx/src/hooks/useBrush/shader/main.vert rename to packages/use-shader-fx/src/hook/useBrush/shader/main.vert diff --git a/packages/use-shader-fx/src/hooks/useBrush/useMesh.ts b/packages/use-shader-fx/src/hook/useBrush/useMesh.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useBrush/useMesh.ts rename to packages/use-shader-fx/src/hook/useBrush/useMesh.ts diff --git a/packages/use-shader-fx/src/hooks/useDuoTone/index.ts b/packages/use-shader-fx/src/hook/useDuoTone/index.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useDuoTone/index.ts rename to packages/use-shader-fx/src/hook/useDuoTone/index.ts diff --git a/packages/use-shader-fx/src/hooks/useDuoTone/shader/main.frag b/packages/use-shader-fx/src/hook/useDuoTone/shader/main.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useDuoTone/shader/main.frag rename to packages/use-shader-fx/src/hook/useDuoTone/shader/main.frag diff --git a/packages/use-shader-fx/src/hooks/useDuoTone/shader/main.vert b/packages/use-shader-fx/src/hook/useDuoTone/shader/main.vert similarity index 100% rename from packages/use-shader-fx/src/hooks/useDuoTone/shader/main.vert rename to packages/use-shader-fx/src/hook/useDuoTone/shader/main.vert diff --git a/packages/use-shader-fx/src/hooks/useDuoTone/useMesh.ts b/packages/use-shader-fx/src/hook/useDuoTone/useMesh.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useDuoTone/useMesh.ts rename to packages/use-shader-fx/src/hook/useDuoTone/useMesh.ts diff --git a/packages/use-shader-fx/src/hooks/useFlowmap/index.ts b/packages/use-shader-fx/src/hook/useFlowmap/index.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useFlowmap/index.ts rename to packages/use-shader-fx/src/hook/useFlowmap/index.ts diff --git a/packages/use-shader-fx/src/hooks/useFlowmap/shader/main.frag b/packages/use-shader-fx/src/hook/useFlowmap/shader/main.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useFlowmap/shader/main.frag rename to packages/use-shader-fx/src/hook/useFlowmap/shader/main.frag diff --git a/packages/use-shader-fx/src/hooks/useFlowmap/shader/main.vert b/packages/use-shader-fx/src/hook/useFlowmap/shader/main.vert similarity index 100% rename from packages/use-shader-fx/src/hooks/useFlowmap/shader/main.vert rename to packages/use-shader-fx/src/hook/useFlowmap/shader/main.vert diff --git a/packages/use-shader-fx/src/hooks/useFlowmap/useMesh.ts b/packages/use-shader-fx/src/hook/useFlowmap/useMesh.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useFlowmap/useMesh.ts rename to packages/use-shader-fx/src/hook/useFlowmap/useMesh.ts diff --git a/packages/use-shader-fx/src/hooks/useFogProjection/index.ts b/packages/use-shader-fx/src/hook/useFogProjection/index.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useFogProjection/index.ts rename to packages/use-shader-fx/src/hook/useFogProjection/index.ts diff --git a/packages/use-shader-fx/src/hooks/useFogProjection/shader/main.frag b/packages/use-shader-fx/src/hook/useFogProjection/shader/main.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useFogProjection/shader/main.frag rename to packages/use-shader-fx/src/hook/useFogProjection/shader/main.frag diff --git a/packages/use-shader-fx/src/hooks/useFogProjection/shader/main.vert b/packages/use-shader-fx/src/hook/useFogProjection/shader/main.vert similarity index 100% rename from packages/use-shader-fx/src/hooks/useFogProjection/shader/main.vert rename to packages/use-shader-fx/src/hook/useFogProjection/shader/main.vert diff --git a/packages/use-shader-fx/src/hooks/useFogProjection/useMesh.ts b/packages/use-shader-fx/src/hook/useFogProjection/useMesh.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useFogProjection/useMesh.ts rename to packages/use-shader-fx/src/hook/useFogProjection/useMesh.ts diff --git a/packages/use-shader-fx/src/hooks/useFruid/index.ts b/packages/use-shader-fx/src/hook/useFruid/index.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/index.ts rename to packages/use-shader-fx/src/hook/useFruid/index.ts diff --git a/packages/use-shader-fx/src/hooks/useFruid/materials/useAdvectionMaterial.ts b/packages/use-shader-fx/src/hook/useFruid/materials/useAdvectionMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/materials/useAdvectionMaterial.ts rename to packages/use-shader-fx/src/hook/useFruid/materials/useAdvectionMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useFruid/materials/useClearMaterial.ts b/packages/use-shader-fx/src/hook/useFruid/materials/useClearMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/materials/useClearMaterial.ts rename to packages/use-shader-fx/src/hook/useFruid/materials/useClearMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useFruid/materials/useCurlMaterial.ts b/packages/use-shader-fx/src/hook/useFruid/materials/useCurlMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/materials/useCurlMaterial.ts rename to packages/use-shader-fx/src/hook/useFruid/materials/useCurlMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useFruid/materials/useDivergenceMaterial.ts b/packages/use-shader-fx/src/hook/useFruid/materials/useDivergenceMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/materials/useDivergenceMaterial.ts rename to packages/use-shader-fx/src/hook/useFruid/materials/useDivergenceMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useFruid/materials/useGradientSubtractMaterial.ts b/packages/use-shader-fx/src/hook/useFruid/materials/useGradientSubtractMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/materials/useGradientSubtractMaterial.ts rename to packages/use-shader-fx/src/hook/useFruid/materials/useGradientSubtractMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useFruid/materials/useInitialMaterial.ts b/packages/use-shader-fx/src/hook/useFruid/materials/useInitialMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/materials/useInitialMaterial.ts rename to packages/use-shader-fx/src/hook/useFruid/materials/useInitialMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useFruid/materials/usePressureMaterial.ts b/packages/use-shader-fx/src/hook/useFruid/materials/usePressureMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/materials/usePressureMaterial.ts rename to packages/use-shader-fx/src/hook/useFruid/materials/usePressureMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useFruid/materials/useSplatMaterial.ts b/packages/use-shader-fx/src/hook/useFruid/materials/useSplatMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/materials/useSplatMaterial.ts rename to packages/use-shader-fx/src/hook/useFruid/materials/useSplatMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useFruid/materials/useVorticityMaterial.ts b/packages/use-shader-fx/src/hook/useFruid/materials/useVorticityMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/materials/useVorticityMaterial.ts rename to packages/use-shader-fx/src/hook/useFruid/materials/useVorticityMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useFruid/shaders/advection.frag b/packages/use-shader-fx/src/hook/useFruid/shaders/advection.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/shaders/advection.frag rename to packages/use-shader-fx/src/hook/useFruid/shaders/advection.frag diff --git a/packages/use-shader-fx/src/hooks/useFruid/shaders/clear.frag b/packages/use-shader-fx/src/hook/useFruid/shaders/clear.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/shaders/clear.frag rename to packages/use-shader-fx/src/hook/useFruid/shaders/clear.frag diff --git a/packages/use-shader-fx/src/hooks/useFruid/shaders/curl.frag b/packages/use-shader-fx/src/hook/useFruid/shaders/curl.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/shaders/curl.frag rename to packages/use-shader-fx/src/hook/useFruid/shaders/curl.frag diff --git a/packages/use-shader-fx/src/hooks/useFruid/shaders/divergence.frag b/packages/use-shader-fx/src/hook/useFruid/shaders/divergence.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/shaders/divergence.frag rename to packages/use-shader-fx/src/hook/useFruid/shaders/divergence.frag diff --git a/packages/use-shader-fx/src/hooks/useFruid/shaders/gradientSubtract.frag b/packages/use-shader-fx/src/hook/useFruid/shaders/gradientSubtract.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/shaders/gradientSubtract.frag rename to packages/use-shader-fx/src/hook/useFruid/shaders/gradientSubtract.frag diff --git a/packages/use-shader-fx/src/hooks/useFruid/shaders/init.frag b/packages/use-shader-fx/src/hook/useFruid/shaders/init.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/shaders/init.frag rename to packages/use-shader-fx/src/hook/useFruid/shaders/init.frag diff --git a/packages/use-shader-fx/src/hooks/useFruid/shaders/main.vert b/packages/use-shader-fx/src/hook/useFruid/shaders/main.vert similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/shaders/main.vert rename to packages/use-shader-fx/src/hook/useFruid/shaders/main.vert diff --git a/packages/use-shader-fx/src/hooks/useFruid/shaders/pressure.frag b/packages/use-shader-fx/src/hook/useFruid/shaders/pressure.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/shaders/pressure.frag rename to packages/use-shader-fx/src/hook/useFruid/shaders/pressure.frag diff --git a/packages/use-shader-fx/src/hooks/useFruid/shaders/splat.frag b/packages/use-shader-fx/src/hook/useFruid/shaders/splat.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/shaders/splat.frag rename to packages/use-shader-fx/src/hook/useFruid/shaders/splat.frag diff --git a/packages/use-shader-fx/src/hooks/useFruid/shaders/vorticity.frag b/packages/use-shader-fx/src/hook/useFruid/shaders/vorticity.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/shaders/vorticity.frag rename to packages/use-shader-fx/src/hook/useFruid/shaders/vorticity.frag diff --git a/packages/use-shader-fx/src/hooks/useFruid/useMesh.ts b/packages/use-shader-fx/src/hook/useFruid/useMesh.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useFruid/useMesh.ts rename to packages/use-shader-fx/src/hook/useFruid/useMesh.ts diff --git a/packages/use-shader-fx/src/hooks/useRipple/index.ts b/packages/use-shader-fx/src/hook/useRipple/index.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useRipple/index.ts rename to packages/use-shader-fx/src/hook/useRipple/index.ts diff --git a/packages/use-shader-fx/src/hooks/useRipple/useMesh.ts b/packages/use-shader-fx/src/hook/useRipple/useMesh.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useRipple/useMesh.ts rename to packages/use-shader-fx/src/hook/useRipple/useMesh.ts diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/index.ts b/packages/use-shader-fx/src/hook/useSimpleFruid/index.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/index.ts rename to packages/use-shader-fx/src/hook/useSimpleFruid/index.ts diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/materials/useAdvectionMaterial.ts b/packages/use-shader-fx/src/hook/useSimpleFruid/materials/useAdvectionMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/materials/useAdvectionMaterial.ts rename to packages/use-shader-fx/src/hook/useSimpleFruid/materials/useAdvectionMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/materials/useCurlMaterial.ts b/packages/use-shader-fx/src/hook/useSimpleFruid/materials/useCurlMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/materials/useCurlMaterial.ts rename to packages/use-shader-fx/src/hook/useSimpleFruid/materials/useCurlMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/materials/useDivergenceMaterial.ts b/packages/use-shader-fx/src/hook/useSimpleFruid/materials/useDivergenceMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/materials/useDivergenceMaterial.ts rename to packages/use-shader-fx/src/hook/useSimpleFruid/materials/useDivergenceMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/materials/useInitialMaterial.ts b/packages/use-shader-fx/src/hook/useSimpleFruid/materials/useInitialMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/materials/useInitialMaterial.ts rename to packages/use-shader-fx/src/hook/useSimpleFruid/materials/useInitialMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/materials/usePressureMaterial.ts b/packages/use-shader-fx/src/hook/useSimpleFruid/materials/usePressureMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/materials/usePressureMaterial.ts rename to packages/use-shader-fx/src/hook/useSimpleFruid/materials/usePressureMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/materials/useVelocityMaterial.ts b/packages/use-shader-fx/src/hook/useSimpleFruid/materials/useVelocityMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/materials/useVelocityMaterial.ts rename to packages/use-shader-fx/src/hook/useSimpleFruid/materials/useVelocityMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/materials/useVorticityMaterial.ts b/packages/use-shader-fx/src/hook/useSimpleFruid/materials/useVorticityMaterial.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/materials/useVorticityMaterial.ts rename to packages/use-shader-fx/src/hook/useSimpleFruid/materials/useVorticityMaterial.ts diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/advection.frag b/packages/use-shader-fx/src/hook/useSimpleFruid/shaders/advection.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/advection.frag rename to packages/use-shader-fx/src/hook/useSimpleFruid/shaders/advection.frag diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/curl.frag b/packages/use-shader-fx/src/hook/useSimpleFruid/shaders/curl.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/curl.frag rename to packages/use-shader-fx/src/hook/useSimpleFruid/shaders/curl.frag diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/divergence.frag b/packages/use-shader-fx/src/hook/useSimpleFruid/shaders/divergence.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/divergence.frag rename to packages/use-shader-fx/src/hook/useSimpleFruid/shaders/divergence.frag diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/init.frag b/packages/use-shader-fx/src/hook/useSimpleFruid/shaders/init.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/init.frag rename to packages/use-shader-fx/src/hook/useSimpleFruid/shaders/init.frag diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/main.vert b/packages/use-shader-fx/src/hook/useSimpleFruid/shaders/main.vert similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/main.vert rename to packages/use-shader-fx/src/hook/useSimpleFruid/shaders/main.vert diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/map.glsl b/packages/use-shader-fx/src/hook/useSimpleFruid/shaders/map.glsl similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/map.glsl rename to packages/use-shader-fx/src/hook/useSimpleFruid/shaders/map.glsl diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/pressure.frag b/packages/use-shader-fx/src/hook/useSimpleFruid/shaders/pressure.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/pressure.frag rename to packages/use-shader-fx/src/hook/useSimpleFruid/shaders/pressure.frag diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/samplePressure.glsl b/packages/use-shader-fx/src/hook/useSimpleFruid/shaders/samplePressure.glsl similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/samplePressure.glsl rename to packages/use-shader-fx/src/hook/useSimpleFruid/shaders/samplePressure.glsl diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/sampleVelocity.glsl b/packages/use-shader-fx/src/hook/useSimpleFruid/shaders/sampleVelocity.glsl similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/sampleVelocity.glsl rename to packages/use-shader-fx/src/hook/useSimpleFruid/shaders/sampleVelocity.glsl diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/velocity.frag b/packages/use-shader-fx/src/hook/useSimpleFruid/shaders/velocity.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/velocity.frag rename to packages/use-shader-fx/src/hook/useSimpleFruid/shaders/velocity.frag diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/vorticity.frag b/packages/use-shader-fx/src/hook/useSimpleFruid/shaders/vorticity.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/shaders/vorticity.frag rename to packages/use-shader-fx/src/hook/useSimpleFruid/shaders/vorticity.frag diff --git a/packages/use-shader-fx/src/hooks/useSimpleFruid/useMesh.ts b/packages/use-shader-fx/src/hook/useSimpleFruid/useMesh.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useSimpleFruid/useMesh.ts rename to packages/use-shader-fx/src/hook/useSimpleFruid/useMesh.ts diff --git a/packages/use-shader-fx/src/hooks/useTransitionBg/index.ts b/packages/use-shader-fx/src/hook/useTransitionBg/index.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useTransitionBg/index.ts rename to packages/use-shader-fx/src/hook/useTransitionBg/index.ts diff --git a/packages/use-shader-fx/src/hooks/useTransitionBg/shader/main.frag b/packages/use-shader-fx/src/hook/useTransitionBg/shader/main.frag similarity index 100% rename from packages/use-shader-fx/src/hooks/useTransitionBg/shader/main.frag rename to packages/use-shader-fx/src/hook/useTransitionBg/shader/main.frag diff --git a/packages/use-shader-fx/src/hooks/useTransitionBg/shader/main.vert b/packages/use-shader-fx/src/hook/useTransitionBg/shader/main.vert similarity index 100% rename from packages/use-shader-fx/src/hooks/useTransitionBg/shader/main.vert rename to packages/use-shader-fx/src/hook/useTransitionBg/shader/main.vert diff --git a/packages/use-shader-fx/src/hooks/useTransitionBg/useMesh.ts b/packages/use-shader-fx/src/hook/useTransitionBg/useMesh.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/useTransitionBg/useMesh.ts rename to packages/use-shader-fx/src/hook/useTransitionBg/useMesh.ts diff --git a/packages/use-shader-fx/src/hooks/utils/setUniforms.ts b/packages/use-shader-fx/src/hook/utils/setUniforms.ts similarity index 84% rename from packages/use-shader-fx/src/hooks/utils/setUniforms.ts rename to packages/use-shader-fx/src/hook/utils/setUniforms.ts index 16ec2948..104d0bd5 100644 --- a/packages/use-shader-fx/src/hooks/utils/setUniforms.ts +++ b/packages/use-shader-fx/src/hook/utils/setUniforms.ts @@ -2,15 +2,21 @@ export const setUniform = ( material: THREE.ShaderMaterial | THREE.RawShaderMaterial, key: string, value: - | number - | THREE.Color - | THREE.Vector2 - | THREE.Vector3 - | THREE.Vector4 - | THREE.Matrix3 - | THREE.Matrix4 - | THREE.Texture | THREE.CubeTexture + | THREE.Texture + | Int32Array + | Float32Array + | THREE.Matrix4 + | THREE.Matrix3 + | THREE.Quaternion + | THREE.Vector4 + | THREE.Vector3 + | THREE.Vector2 + | THREE.Color + | number + | boolean + | Array + | null ) => { if ( material.uniforms && diff --git a/packages/use-shader-fx/src/hooks/utils/types/index.ts b/packages/use-shader-fx/src/hook/utils/types/index.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/utils/types/index.ts rename to packages/use-shader-fx/src/hook/utils/types/index.ts diff --git a/packages/use-shader-fx/src/hooks/utils/useAddMesh.ts b/packages/use-shader-fx/src/hook/utils/useAddMesh.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/utils/useAddMesh.ts rename to packages/use-shader-fx/src/hook/utils/useAddMesh.ts diff --git a/packages/use-shader-fx/src/hooks/utils/useCamera.ts b/packages/use-shader-fx/src/hook/utils/useCamera.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/utils/useCamera.ts rename to packages/use-shader-fx/src/hook/utils/useCamera.ts diff --git a/packages/use-shader-fx/src/hooks/utils/useDoubleFBO.ts b/packages/use-shader-fx/src/hook/utils/useDoubleFBO.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/utils/useDoubleFBO.ts rename to packages/use-shader-fx/src/hook/utils/useDoubleFBO.ts diff --git a/packages/use-shader-fx/src/hooks/utils/useParams.ts b/packages/use-shader-fx/src/hook/utils/useParams.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/utils/useParams.ts rename to packages/use-shader-fx/src/hook/utils/useParams.ts diff --git a/packages/use-shader-fx/src/hooks/utils/usePointer.ts b/packages/use-shader-fx/src/hook/utils/usePointer.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/utils/usePointer.ts rename to packages/use-shader-fx/src/hook/utils/usePointer.ts diff --git a/packages/use-shader-fx/src/hooks/utils/useResolution.ts b/packages/use-shader-fx/src/hook/utils/useResolution.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/utils/useResolution.ts rename to packages/use-shader-fx/src/hook/utils/useResolution.ts diff --git a/packages/use-shader-fx/src/hooks/utils/useSingleFBO.ts b/packages/use-shader-fx/src/hook/utils/useSingleFBO.ts similarity index 100% rename from packages/use-shader-fx/src/hooks/utils/useSingleFBO.ts rename to packages/use-shader-fx/src/hook/utils/useSingleFBO.ts diff --git a/packages/use-shader-fx/src/index.js b/packages/use-shader-fx/src/index.js index 2d2d3862..c4f617f1 100644 --- a/packages/use-shader-fx/src/index.js +++ b/packages/use-shader-fx/src/index.js @@ -1,8 +1,8 @@ -export { useBrush } from "./hooks/useBrush"; -export { useDuoTone } from "./hooks/useDuoTone"; -export { useFlowmap } from "./hooks/useFlowmap"; -export { useFogProjection } from "./hooks/useFogProjection"; -export { useFruid } from "./hooks/useFruid"; -export { useRipple } from "./hooks/useRipple"; -export { useSimpleFruid } from "./hooks/useSimpleFruid"; -export { useTransitionBg } from "./hooks/useTransitionBg"; +export { useBrush } from "./hook/useBrush"; +export { useDuoTone } from "./hook/useDuoTone"; +export { useFlowmap } from "./hook/useFlowmap"; +export { useFogProjection } from "./hook/useFogProjection"; +export { useFruid } from "./hook/useFruid"; +export { useRipple } from "./hook/useRipple"; +export { useSimpleFruid } from "./hook/useSimpleFruid"; +export { useTransitionBg } from "./hook/useTransitionBg"; diff --git a/packages/use-shader-fx/types/hooks/types/index.d.ts b/packages/use-shader-fx/types/hooks/types/index.d.ts deleted file mode 100644 index 406f6082..00000000 --- a/packages/use-shader-fx/types/hooks/types/index.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -import * as THREE from "three"; -import { RootState } from "@react-three/fiber"; -/** - * @returns {HooksReturn} - * updateFx - A function to be called inside `useFrame` that returns a `THREE.Texture`. - * setParams - A function to update the parameters, useful for performance tuning, etc. - * fxObject - An object containing various FX components such as scene, camera, material, and render target. - * - * @template T The type for the parameters of the hooks. - * @template O The type for the FX object. - */ -export type HooksReturn = [ - /** - * An update function that returns THREE.Texture. Call it inside useFrame - * @param props RootState - * @param params params of hooks - */ - (props: RootState, params: T) => THREE.Texture, - /** - * Function to update params. It can be used for performance control, etc. - * @param params params of hooks - */ - (params: T) => void, - /** - * Contains each part of FX such as scene, camera, material, render target, etc. - */ - O -]; diff --git a/packages/use-shader-fx/types/hooks/useBrush/index.d.ts b/packages/use-shader-fx/types/hooks/useBrush/index.d.ts deleted file mode 100644 index 9b6aa9c7..00000000 --- a/packages/use-shader-fx/types/hooks/useBrush/index.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import * as THREE from "three"; -import { Size } from "@react-three/fiber"; -import { HooksReturn } from "../types"; -import { DoubleRenderTarget } from "../utils/types"; -export type BrushParams = { - /** ブラシに適用するテクスチャー */ - texture?: THREE.Texture; - /** size of the stamp, percentage of the size */ - radius?: number; - /** opacity TODO*これバグってるいので修正 */ - alpha?: number; - /** 滲み効果の強さ */ - smudge?: number; - /** 拡散率。1にすると残り続ける */ - dissipation?: number; - /** 拡大率 */ - magnification?: number; - /** モーションブラーの強さ */ - motionBlur?: number; - /** モーションブラーのサンプル数 これを高くするとパフォーマンスへの影響大 */ - motionSample?: number; -}; -export type BrushObject = { - scene: THREE.Scene; - material: THREE.Material; - camera: THREE.Camera; - renderTarget: DoubleRenderTarget; -}; -export declare const useBrush: ({ size, dpr, }: { - size: Size; - dpr: number; -}) => HooksReturn; diff --git a/packages/use-shader-fx/types/hooks/useBrush/useMesh.d.ts b/packages/use-shader-fx/types/hooks/useBrush/useMesh.d.ts deleted file mode 100644 index 78f44ea4..00000000 --- a/packages/use-shader-fx/types/hooks/useBrush/useMesh.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as THREE from "three"; -import { Size } from "@react-three/fiber"; -export declare const useMesh: ({ scene, size, dpr, }: { - scene: THREE.Scene; - size: Size; - dpr: number; -}) => THREE.ShaderMaterial; diff --git a/packages/use-shader-fx/types/hooks/useDuoTone/index.d.ts b/packages/use-shader-fx/types/hooks/useDuoTone/index.d.ts deleted file mode 100644 index 4801c620..00000000 --- a/packages/use-shader-fx/types/hooks/useDuoTone/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as THREE from "three"; -import { Size } from "@react-three/fiber"; -import { HooksReturn } from "../types"; -export type DuoToneParams = { - texture?: THREE.Texture; - color0?: THREE.Color; - color1?: THREE.Color; -}; -export type DuoToneObject = { - scene: THREE.Scene; - material: THREE.Material; - camera: THREE.Camera; - renderTarget: THREE.WebGLRenderTarget; -}; -export declare const useDuoTone: ({ size, }: { - size: Size; -}) => HooksReturn; diff --git a/packages/use-shader-fx/types/hooks/useDuoTone/useMesh.d.ts b/packages/use-shader-fx/types/hooks/useDuoTone/useMesh.d.ts deleted file mode 100644 index 978117f4..00000000 --- a/packages/use-shader-fx/types/hooks/useDuoTone/useMesh.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as THREE from "three"; -type TUniforms = { - uTexture: { - value: THREE.Texture; - }; - uColor0: { - value: THREE.Color; - }; - uColor1: { - value: THREE.Color; - }; -}; -export declare class MetamorphoseMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const useMesh: (scene: THREE.Scene) => MetamorphoseMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useFlowmap/index.d.ts b/packages/use-shader-fx/types/hooks/useFlowmap/index.d.ts deleted file mode 100644 index 4b68576a..00000000 --- a/packages/use-shader-fx/types/hooks/useFlowmap/index.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import * as THREE from "three"; -import { Size } from "@react-three/fiber"; -import { HooksReturn } from "../types"; -import { DoubleRenderTarget } from "../utils/types"; -export type FlowmapParams = { - /** size of the stamp, percentage of the size */ - radius?: number; - /** 拡大率 */ - magnification?: number; - /** opacity */ - alpha?: number; - /** 拡散率。1にすると残り続ける */ - dissipation?: number; -}; -export type FlowmapObject = { - scene: THREE.Scene; - material: THREE.Material; - camera: THREE.Camera; - renderTarget: DoubleRenderTarget; -}; -export declare const useFlowmap: ({ size, dpr, }: { - size: Size; - dpr: number; -}) => HooksReturn; diff --git a/packages/use-shader-fx/types/hooks/useFlowmap/useMesh.d.ts b/packages/use-shader-fx/types/hooks/useFlowmap/useMesh.d.ts deleted file mode 100644 index 78f44ea4..00000000 --- a/packages/use-shader-fx/types/hooks/useFlowmap/useMesh.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as THREE from "three"; -import { Size } from "@react-three/fiber"; -export declare const useMesh: ({ scene, size, dpr, }: { - scene: THREE.Scene; - size: Size; - dpr: number; -}) => THREE.ShaderMaterial; diff --git a/packages/use-shader-fx/types/hooks/useFogProjection/index.d.ts b/packages/use-shader-fx/types/hooks/useFogProjection/index.d.ts deleted file mode 100644 index bab47c10..00000000 --- a/packages/use-shader-fx/types/hooks/useFogProjection/index.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import * as THREE from "three"; -import { Size } from "@react-three/fiber"; -import { HooksReturn } from "../types"; -export type FogProjectionParams = { - texture?: THREE.Texture; - timeStrength?: number; - distortionStrength?: number; - fogEdge0?: number; - fogEdge1?: number; - fogColor?: THREE.Color; - noiseOct?: number; - fbmOct?: number; -}; -export type FogProjectionObject = { - scene: THREE.Scene; - material: THREE.Material; - camera: THREE.Camera; - renderTarget: THREE.WebGLRenderTarget; -}; -export declare const useFogProjection: ({ size, }: { - size: Size; -}) => HooksReturn; diff --git a/packages/use-shader-fx/types/hooks/useFogProjection/useMesh.d.ts b/packages/use-shader-fx/types/hooks/useFogProjection/useMesh.d.ts deleted file mode 100644 index a5956b92..00000000 --- a/packages/use-shader-fx/types/hooks/useFogProjection/useMesh.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as THREE from "three"; -export declare const useMesh: (scene: THREE.Scene) => THREE.ShaderMaterial; diff --git a/packages/use-shader-fx/types/hooks/useFruid/index.d.ts b/packages/use-shader-fx/types/hooks/useFruid/index.d.ts deleted file mode 100644 index b6354a4f..00000000 --- a/packages/use-shader-fx/types/hooks/useFruid/index.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -import * as THREE from "three"; -import { FruidMaterials } from "./useMesh"; -import { Size } from "@react-three/fiber"; -import { HooksReturn } from "../types"; -import { DoubleRenderTarget } from "../utils/types"; -export type FruidParams = { - density_dissipation?: number; - velocity_dissipation?: number; - velocity_acceleration?: number; - pressure_dissipation?: number; - pressure_iterations?: number; - curl_strength?: number; - splat_radius?: number; - fruid_color?: ((velocity: THREE.Vector2) => THREE.Vector3) | THREE.Vector3; -}; -export type FruidObject = { - scene: THREE.Scene; - materials: FruidMaterials; - camera: THREE.Camera; - renderTarget: { - velocity: DoubleRenderTarget; - density: DoubleRenderTarget; - curl: THREE.WebGLRenderTarget; - divergence: THREE.WebGLRenderTarget; - pressure: DoubleRenderTarget; - }; -}; -export declare const useFruid: ({ size, dpr, }: { - size: Size; - dpr: number; -}) => HooksReturn; diff --git a/packages/use-shader-fx/types/hooks/useFruid/materials/useAdvectionMaterial.d.ts b/packages/use-shader-fx/types/hooks/useFruid/materials/useAdvectionMaterial.d.ts deleted file mode 100644 index 4c1e2bfa..00000000 --- a/packages/use-shader-fx/types/hooks/useFruid/materials/useAdvectionMaterial.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import * as THREE from "three"; -type TUniforms = { - uVelocity: { - value: THREE.Texture; - }; - uSource: { - value: THREE.Texture; - }; - texelSize: { - value: THREE.Vector2; - }; - dt: { - value: number; - }; - dissipation: { - value: number; - }; -}; -export declare class AdvectionMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const useAdvectionMaterial: () => AdvectionMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useFruid/materials/useClearMaterial.d.ts b/packages/use-shader-fx/types/hooks/useFruid/materials/useClearMaterial.d.ts deleted file mode 100644 index ee639c97..00000000 --- a/packages/use-shader-fx/types/hooks/useFruid/materials/useClearMaterial.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as THREE from "three"; -type TUniforms = { - uTexture: { - value: THREE.Texture; - }; - value: { - value: number; - }; - texelSize: { - value: THREE.Vector2; - }; -}; -export declare class ClearMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const useClearMaterial: () => ClearMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useFruid/materials/useCurlMaterial.d.ts b/packages/use-shader-fx/types/hooks/useFruid/materials/useCurlMaterial.d.ts deleted file mode 100644 index 755e6b15..00000000 --- a/packages/use-shader-fx/types/hooks/useFruid/materials/useCurlMaterial.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import * as THREE from "three"; -type TUniforms = { - uVelocity: { - value: THREE.Texture; - }; - texelSize: { - value: THREE.Vector2; - }; -}; -export declare class CurlMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const useCurlMaterial: () => CurlMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useFruid/materials/useDivergenceMaterial.d.ts b/packages/use-shader-fx/types/hooks/useFruid/materials/useDivergenceMaterial.d.ts deleted file mode 100644 index 54b00f14..00000000 --- a/packages/use-shader-fx/types/hooks/useFruid/materials/useDivergenceMaterial.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import * as THREE from "three"; -type TUniforms = { - uVelocity: { - value: THREE.Texture; - }; - texelSize: { - value: THREE.Vector2; - }; -}; -export declare class DivergenceMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const useDivergenceMaterial: () => DivergenceMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useFruid/materials/useGradientSubtractMaterial.d.ts b/packages/use-shader-fx/types/hooks/useFruid/materials/useGradientSubtractMaterial.d.ts deleted file mode 100644 index 53d1ddda..00000000 --- a/packages/use-shader-fx/types/hooks/useFruid/materials/useGradientSubtractMaterial.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as THREE from "three"; -type TUniforms = { - uPressure: { - value: THREE.Texture; - }; - uVelocity: { - value: THREE.Texture; - }; - texelSize: { - value: THREE.Vector2; - }; -}; -export declare class GradientSubtractMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const useGradientSubtractMaterial: () => GradientSubtractMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useFruid/materials/useInitialMaterial.d.ts b/packages/use-shader-fx/types/hooks/useFruid/materials/useInitialMaterial.d.ts deleted file mode 100644 index 6322827a..00000000 --- a/packages/use-shader-fx/types/hooks/useFruid/materials/useInitialMaterial.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as THREE from "three"; -export declare const useInitialMaterial: () => THREE.ShaderMaterial; diff --git a/packages/use-shader-fx/types/hooks/useFruid/materials/usePressureMaterial.d.ts b/packages/use-shader-fx/types/hooks/useFruid/materials/usePressureMaterial.d.ts deleted file mode 100644 index 57e61172..00000000 --- a/packages/use-shader-fx/types/hooks/useFruid/materials/usePressureMaterial.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as THREE from "three"; -type TUniforms = { - uPressure: { - value: THREE.Texture; - }; - uDivergence: { - value: THREE.Texture; - }; - texelSize: { - value: THREE.Vector2; - }; -}; -export declare class PressureMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const usePressureMaterial: () => PressureMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useFruid/materials/useSplatMaterial.d.ts b/packages/use-shader-fx/types/hooks/useFruid/materials/useSplatMaterial.d.ts deleted file mode 100644 index 29ce59e6..00000000 --- a/packages/use-shader-fx/types/hooks/useFruid/materials/useSplatMaterial.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import * as THREE from "three"; -type TUniforms = { - uTarget: { - value: THREE.Texture; - }; - aspectRatio: { - value: number; - }; - color: { - value: THREE.Vector3; - }; - point: { - value: THREE.Vector2; - }; - radius: { - value: number; - }; - texelSize: { - value: THREE.Vector2; - }; -}; -export declare class SplatMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const useSplateMaterial: () => SplatMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useFruid/materials/useVorticityMaterial.d.ts b/packages/use-shader-fx/types/hooks/useFruid/materials/useVorticityMaterial.d.ts deleted file mode 100644 index a6f71ed6..00000000 --- a/packages/use-shader-fx/types/hooks/useFruid/materials/useVorticityMaterial.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import * as THREE from "three"; -type TUniforms = { - uVelocity: { - value: THREE.Texture; - }; - uCurl: { - value: THREE.Texture; - }; - curl: { - value: number; - }; - dt: { - value: number; - }; - texelSize: { - value: THREE.Vector2; - }; -}; -export declare class VorticityMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const useVorticityMaterial: () => VorticityMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useFruid/useMesh.d.ts b/packages/use-shader-fx/types/hooks/useFruid/useMesh.d.ts deleted file mode 100644 index b0b00422..00000000 --- a/packages/use-shader-fx/types/hooks/useFruid/useMesh.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -import * as THREE from "three"; -import { AdvectionMaterial } from "./materials/useAdvectionMaterial"; -import { DivergenceMaterial } from "./materials/useDivergenceMaterial"; -import { PressureMaterial } from "./materials/usePressureMaterial"; -import { CurlMaterial } from "./materials/useCurlMaterial"; -import { VorticityMaterial } from "./materials/useVorticityMaterial"; -import { ClearMaterial } from "./materials/useClearMaterial"; -import { GradientSubtractMaterial } from "./materials/useGradientSubtractMaterial"; -import { SplatMaterial } from "./materials/useSplatMaterial"; -import { Size } from "@react-three/fiber"; -type TMaterials = AdvectionMaterial | DivergenceMaterial | CurlMaterial | PressureMaterial | ClearMaterial | GradientSubtractMaterial | SplatMaterial; -export type FruidMaterials = { - vorticityMaterial: VorticityMaterial; - curlMaterial: CurlMaterial; - advectionMaterial: AdvectionMaterial; - divergenceMaterial: DivergenceMaterial; - pressureMaterial: PressureMaterial; - clearMaterial: ClearMaterial; - gradientSubtractMaterial: GradientSubtractMaterial; - splatMaterial: SplatMaterial; -}; -type TUseMeshReturnType = [FruidMaterials, (material: TMaterials) => void]; -/** - * Returns the material update function in the second argument - */ -export declare const useMesh: ({ scene, size, dpr, }: { - scene: THREE.Scene; - size: Size; - dpr: number; -}) => TUseMeshReturnType; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useRipple/index.d.ts b/packages/use-shader-fx/types/hooks/useRipple/index.d.ts deleted file mode 100644 index 97e81e92..00000000 --- a/packages/use-shader-fx/types/hooks/useRipple/index.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import * as THREE from "three"; -import { Size } from "@react-three/fiber"; -import { HooksReturn } from "../types"; -export type RippleParams = { - /** rippleが出現する頻度,default:0.01 */ - frequency?: number; - /** rippleの回転,default:0.01 */ - rotation?: number; - /** rippleがフェードアウトするスピード,default:0.9 */ - fadeout_speed?: number; - /** rippleの拡大率,default:0.15 */ - scale?: number; - /** rippleの透明度,default:0.6 */ - alpha?: number; -}; -export type RippleObject = { - scene: THREE.Scene; - meshArr: THREE.Mesh[]; - camera: THREE.Camera; - renderTarget: THREE.WebGLRenderTarget; -}; -export declare const useRipple: ({ texture, scale, max, size, }: { - /** texture applied to ripple */ - texture: THREE.Texture; - /** ripple size, default:64 */ - scale?: number | undefined; - /** ripple max length, default:100 */ - max?: number | undefined; - size: Size; -}) => HooksReturn; diff --git a/packages/use-shader-fx/types/hooks/useRipple/useMesh.d.ts b/packages/use-shader-fx/types/hooks/useRipple/useMesh.d.ts deleted file mode 100644 index 862f3df4..00000000 --- a/packages/use-shader-fx/types/hooks/useRipple/useMesh.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import * as THREE from "three"; -type TcreateMesh = { - scale: number; - max: number; - texture?: THREE.Texture; - scene: THREE.Scene; -}; -export declare const useMesh: ({ scale, max, texture, scene }: TcreateMesh) => THREE.Mesh, THREE.Material | THREE.Material[]>[]; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useSimpleFruid/index.d.ts b/packages/use-shader-fx/types/hooks/useSimpleFruid/index.d.ts deleted file mode 100644 index c24ad16b..00000000 --- a/packages/use-shader-fx/types/hooks/useSimpleFruid/index.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -import * as THREE from "three"; -import { SimpleFruidMaterials } from "./useMesh"; -import { Size } from "@react-three/fiber"; -import { HooksReturn } from "../types"; -import { DoubleRenderTarget } from "../utils/types"; -export type SimpleFruidParams = { - /** 圧力のヤコビ法の計算回数 */ - pressure_iterations?: number; - /** 圧力のステップごとの減衰値 */ - attenuation?: number; - /** 圧力計算時の係数 */ - alpha?: number; - /** 圧力計算時の係数 */ - beta?: number; - /** 粘度 */ - viscosity?: number; - /** 力を加える円の半径 */ - forceRadius?: number; - /** 速度の係数 */ - forceCoefficient?: number; -}; -export type SimpleFruidObject = { - scene: THREE.Scene; - materials: SimpleFruidMaterials; - camera: THREE.Camera; - renderTarget: DoubleRenderTarget; -}; -export declare const useSimpleFruid: ({ size, dpr, }: { - size: Size; - dpr: number; -}) => HooksReturn; diff --git a/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useAdvectionMaterial.d.ts b/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useAdvectionMaterial.d.ts deleted file mode 100644 index 6f882ae0..00000000 --- a/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useAdvectionMaterial.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as THREE from "three"; -type TUniforms = { - resolution: { - value: THREE.Vector2; - }; - dataTex: { - value: THREE.Texture; - }; - attenuation: { - value: number; - }; -}; -export declare class AdvectionMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const useAdvectionMaterial: () => AdvectionMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useCurlMaterial.d.ts b/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useCurlMaterial.d.ts deleted file mode 100644 index b78da786..00000000 --- a/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useCurlMaterial.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import * as THREE from "three"; -type TUniforms = { - resolution: { - value: THREE.Vector2; - }; - uVelocity: { - value: THREE.Texture; - }; -}; -export declare class CurlMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const useCurlMaterial: () => CurlMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useDivergenceMaterial.d.ts b/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useDivergenceMaterial.d.ts deleted file mode 100644 index 8f481004..00000000 --- a/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useDivergenceMaterial.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import * as THREE from "three"; -type TUniforms = { - resolution: { - value: THREE.Vector2; - }; - dataTex: { - value: THREE.Texture; - }; -}; -export declare class DivergenceMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const useDivergenceMaterial: () => DivergenceMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useInitialMaterial.d.ts b/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useInitialMaterial.d.ts deleted file mode 100644 index 6322827a..00000000 --- a/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useInitialMaterial.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as THREE from "three"; -export declare const useInitialMaterial: () => THREE.ShaderMaterial; diff --git a/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/usePressureMaterial.d.ts b/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/usePressureMaterial.d.ts deleted file mode 100644 index 255be11d..00000000 --- a/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/usePressureMaterial.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import * as THREE from "three"; -type TUniforms = { - resolution: { - value: THREE.Vector2; - }; - dataTex: { - value: THREE.Texture; - }; - alpha: { - value: number; - }; - beta: { - value: number; - }; -}; -export declare class PressureMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const usePressureMaterial: () => PressureMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useVelocityMaterial.d.ts b/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useVelocityMaterial.d.ts deleted file mode 100644 index 0e62a9e6..00000000 --- a/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useVelocityMaterial.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import * as THREE from "three"; -type TUniforms = { - resolution: { - value: THREE.Vector2; - }; - viscosity: { - value: number; - }; - forceRadius: { - value: number; - }; - forceCoefficient: { - value: number; - }; - dataTex: { - value: THREE.Texture; - }; - pointerPos: { - value: THREE.Vector2; - }; - beforePointerPos: { - value: THREE.Vector2; - }; -}; -export declare class VelocityMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const useVelocityMaterial: () => VelocityMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useVorticityMaterial.d.ts b/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useVorticityMaterial.d.ts deleted file mode 100644 index 60f3297a..00000000 --- a/packages/use-shader-fx/types/hooks/useSimpleFruid/materials/useVorticityMaterial.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import * as THREE from "three"; -type TUniforms = { - resolution: { - value: THREE.Vector2; - }; - dataTex: { - value: THREE.Texture; - }; -}; -export declare class VorticityMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const useVorticityMaterial: () => VorticityMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useSimpleFruid/useMesh.d.ts b/packages/use-shader-fx/types/hooks/useSimpleFruid/useMesh.d.ts deleted file mode 100644 index adccefbd..00000000 --- a/packages/use-shader-fx/types/hooks/useSimpleFruid/useMesh.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import * as THREE from "three"; -import { VelocityMaterial } from "./materials/useVelocityMaterial"; -import { AdvectionMaterial } from "./materials/useAdvectionMaterial"; -import { DivergenceMaterial } from "./materials/useDivergenceMaterial"; -import { PressureMaterial } from "./materials/usePressureMaterial"; -import { Size } from "@react-three/fiber"; -type TMaterials = VelocityMaterial | AdvectionMaterial | DivergenceMaterial | PressureMaterial; -export type SimpleFruidMaterials = { - velocityMaterial: VelocityMaterial; - advectionMaterial: AdvectionMaterial; - divergenceMaterial: DivergenceMaterial; - pressureMaterial: PressureMaterial; -}; -type TUseMeshReturnType = [ - SimpleFruidMaterials, - (material: TMaterials) => void -]; -export declare const useMesh: ({ scene, size, dpr, }: { - scene: THREE.Scene; - size: Size; - dpr: number; -}) => TUseMeshReturnType; -export {}; diff --git a/packages/use-shader-fx/types/hooks/useTransitionBg/index.d.ts b/packages/use-shader-fx/types/hooks/useTransitionBg/index.d.ts deleted file mode 100644 index 744a75cf..00000000 --- a/packages/use-shader-fx/types/hooks/useTransitionBg/index.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import * as THREE from "three"; -import { Size } from "@react-three/fiber"; -import { HooksReturn } from "../types"; -export type TransitionBgParams = { - texture0?: THREE.Texture; - texture1?: THREE.Texture; - imageResolution?: THREE.Vector2; - noise?: THREE.Texture; - noiseStrength?: number; - progress?: number; - dir?: THREE.Vector2; -}; -export type TransitionBgObject = { - scene: THREE.Scene; - material: THREE.Material; - camera: THREE.Camera; - renderTarget: THREE.WebGLRenderTarget; -}; -export declare const useTransitionBg: ({ size, dpr, }: { - size: Size; - dpr: number; -}) => HooksReturn; diff --git a/packages/use-shader-fx/types/hooks/useTransitionBg/useMesh.d.ts b/packages/use-shader-fx/types/hooks/useTransitionBg/useMesh.d.ts deleted file mode 100644 index f4ac4092..00000000 --- a/packages/use-shader-fx/types/hooks/useTransitionBg/useMesh.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import * as THREE from "three"; -import { Size } from "@react-three/fiber"; -type TUniforms = { - uResolution: { - value: THREE.Vector2; - }; - uImageResolution: { - value: THREE.Vector2; - }; - uTexture0: { - value: THREE.Texture; - }; - uTexture1: { - value: THREE.Texture; - }; - noise: { - value: THREE.Texture; - }; - noiseStrength: { - value: number; - }; - progress: { - value: number; - }; - dirX: { - value: number; - }; - dirY: { - value: number; - }; -}; -export declare class MetamorphoseMaterial extends THREE.ShaderMaterial { - uniforms: TUniforms; -} -export declare const useMesh: ({ scene, size, dpr, }: { - scene: THREE.Scene; - size: Size; - dpr: number; -}) => MetamorphoseMaterial; -export {}; diff --git a/packages/use-shader-fx/types/hooks/utils/setUniforms.d.ts b/packages/use-shader-fx/types/hooks/utils/setUniforms.d.ts deleted file mode 100644 index 29b806a8..00000000 --- a/packages/use-shader-fx/types/hooks/utils/setUniforms.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const setUniform: (material: THREE.ShaderMaterial | THREE.RawShaderMaterial, key: string, value: number | THREE.Color | THREE.Vector2 | THREE.Vector3 | THREE.Vector4 | THREE.Matrix3 | THREE.Matrix4 | THREE.Texture | THREE.CubeTexture) => void; diff --git a/packages/use-shader-fx/types/hooks/utils/types/index.d.ts b/packages/use-shader-fx/types/hooks/utils/types/index.d.ts deleted file mode 100644 index ae4a4c8e..00000000 --- a/packages/use-shader-fx/types/hooks/utils/types/index.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Size } from "@react-three/fiber"; -import * as THREE from "three"; -export type DoubleRenderTarget = { - read: THREE.WebGLRenderTarget | null; - write: THREE.WebGLRenderTarget | null; -}; -export type UseFboProps = { - scene: THREE.Scene; - camera: THREE.Camera; - size: Size; - /** If dpr is set, dpr will be multiplied, default:false */ - dpr?: number | false; - /** Whether to resize when resizing occurs. If isDpr is true, set FBO to setSize even if dpr is changed, default:false */ - isSizeUpdate?: boolean; -}; diff --git a/packages/use-shader-fx/types/hooks/utils/useAddMesh.d.ts b/packages/use-shader-fx/types/hooks/utils/useAddMesh.d.ts deleted file mode 100644 index 4c218e88..00000000 --- a/packages/use-shader-fx/types/hooks/utils/useAddMesh.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as THREE from "three"; -export declare const useAddMesh: (scene: THREE.Scene, geometry: THREE.PlaneGeometry, material: THREE.Material) => THREE.Mesh; diff --git a/packages/use-shader-fx/types/hooks/utils/useCamera.d.ts b/packages/use-shader-fx/types/hooks/utils/useCamera.d.ts deleted file mode 100644 index acd518d4..00000000 --- a/packages/use-shader-fx/types/hooks/utils/useCamera.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as THREE from "three"; -import { Size } from "@react-three/fiber"; -export declare const useCamera: (size: Size) => THREE.OrthographicCamera; diff --git a/packages/use-shader-fx/types/hooks/utils/useDoubleFBO.d.ts b/packages/use-shader-fx/types/hooks/utils/useDoubleFBO.d.ts deleted file mode 100644 index eac4609b..00000000 --- a/packages/use-shader-fx/types/hooks/utils/useDoubleFBO.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import * as THREE from "three"; -import { UseFboProps } from "./types"; -type FBOUpdateFunction = (gl: THREE.WebGLRenderer, -/** call before FBO is rendered */ -onBeforeRender?: ({ read, write, }: { - read: THREE.Texture; - write: THREE.Texture; -}) => void) => THREE.Texture; -type Return = [ - { - read: THREE.WebGLRenderTarget; - write: THREE.WebGLRenderTarget; - }, - FBOUpdateFunction -]; -/** - * @param dpr If dpr is set, dpr will be multiplied, default:false - * @param isSizeUpdate Whether to resize when resizing occurs. If isDpr is true, set FBO to setSize even if dpr is changed, default:false - * @returns [{read:THREE.WebGLRenderTarget,write:THREE.WebGLRenderTarget} , updateFBO] -Receives the RenderTarget as the first argument and the update function as the second argument. - */ -export declare const useDoubleFBO: ({ scene, camera, size, dpr, isSizeUpdate, }: UseFboProps) => Return; -export {}; diff --git a/packages/use-shader-fx/types/hooks/utils/useParams.d.ts b/packages/use-shader-fx/types/hooks/utils/useParams.d.ts deleted file mode 100644 index e6e6544c..00000000 --- a/packages/use-shader-fx/types/hooks/utils/useParams.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -type Return = [T, (params: Partial) => void]; -export declare const useParams: (params: T) => Return; -export {}; diff --git a/packages/use-shader-fx/types/hooks/utils/usePointer.d.ts b/packages/use-shader-fx/types/hooks/utils/usePointer.d.ts deleted file mode 100644 index fd617f34..00000000 --- a/packages/use-shader-fx/types/hooks/utils/usePointer.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import * as THREE from "three"; -/** - * @returns updatePointer frameで呼び出す更新関数を返す - */ -export declare const usePointer: () => (currentPointer: THREE.Vector2) => { - currentPointer: THREE.Vector2; - prevPointer: THREE.Vector2; - diffPointer: THREE.Vector2; - velocity: THREE.Vector2; - isVelocityUpdate: boolean; -}; diff --git a/packages/use-shader-fx/types/hooks/utils/useResolution.d.ts b/packages/use-shader-fx/types/hooks/utils/useResolution.d.ts deleted file mode 100644 index f0c912de..00000000 --- a/packages/use-shader-fx/types/hooks/utils/useResolution.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as THREE from "three"; -import { Size } from "@react-three/fiber"; -/** - * @params isDpr Whether to multiply dpr, default:false - */ -export declare const useResolution: (size: Size, dpr?: number | false) => THREE.Vector2; diff --git a/packages/use-shader-fx/types/hooks/utils/useSingleFBO.d.ts b/packages/use-shader-fx/types/hooks/utils/useSingleFBO.d.ts deleted file mode 100644 index 78aa9deb..00000000 --- a/packages/use-shader-fx/types/hooks/utils/useSingleFBO.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import * as THREE from "three"; -import { UseFboProps } from "./types"; -export declare const FBO_OPTION: { - minFilter: 1006; - magFilter: 1006; - type: 1016; - depthBuffer: boolean; - stencilBuffer: boolean; -}; -type FBOUpdateFunction = (gl: THREE.WebGLRenderer, -/** call before FBO is rendered */ -onBeforeRender?: ({ read }: { - read: THREE.Texture; -}) => void) => THREE.Texture; -type Return = [THREE.WebGLRenderTarget, FBOUpdateFunction]; -/** - * @param dpr If dpr is set, dpr will be multiplied, default:false - * @param isSizeUpdate Whether to resize when resizing occurs. If isDpr is true, set FBO to setSize even if dpr is changed, default:false - * @returns [THREE.WebGLRenderTarget , updateFBO] -Receives the RenderTarget as the first argument and the update function as the second argument. - */ -export declare const useSingleFBO: ({ scene, camera, size, dpr, isSizeUpdate, }: UseFboProps) => Return; -export {}; diff --git a/packages/use-shader-fx/types/index.d.ts b/packages/use-shader-fx/types/index.d.ts deleted file mode 100644 index 2d2d3862..00000000 --- a/packages/use-shader-fx/types/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export { useBrush } from "./hooks/useBrush"; -export { useDuoTone } from "./hooks/useDuoTone"; -export { useFlowmap } from "./hooks/useFlowmap"; -export { useFogProjection } from "./hooks/useFogProjection"; -export { useFruid } from "./hooks/useFruid"; -export { useRipple } from "./hooks/useRipple"; -export { useSimpleFruid } from "./hooks/useSimpleFruid"; -export { useTransitionBg } from "./hooks/useTransitionBg";