shaders 2.5.122 → 2.5.124

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/dist/core/{FloatingParticles-DKoG78j0.js → FloatingParticles-LMsFTJKp.js} +122 -7
  2. package/dist/core/ReflectivePlane-UIT4xlmn.js +230 -0
  3. package/dist/core/{VideoTexture-D9XxE1Hw.js → VideoTexture-ClutlOqj.js} +1 -1
  4. package/dist/core/{WebcamTexture-9Td8qQWm.js → WebcamTexture-D4e06ajM.js} +1 -1
  5. package/dist/core/index.js +42 -41
  6. package/dist/core/registry.js +42 -41
  7. package/dist/core/{shaderRegistry-BoqhBfun.js → shaderRegistry-DZDkRCt8.js} +79 -77
  8. package/dist/core/shaderRegistry.d.ts.map +1 -1
  9. package/dist/core/shaders/FloatingParticles/index.d.ts +1 -1
  10. package/dist/core/shaders/FloatingParticles/index.d.ts.map +1 -1
  11. package/dist/core/shaders/FloatingParticles/index.js +1 -1
  12. package/dist/core/shaders/ReflectivePlane/index.d.ts +46 -0
  13. package/dist/core/shaders/ReflectivePlane/index.d.ts.map +1 -0
  14. package/dist/core/shaders/ReflectivePlane/index.js +6 -0
  15. package/dist/core/shaders/Ring/index.js +1 -1
  16. package/dist/core/shaders/Ripples/index.js +1 -1
  17. package/dist/core/shaders/RoundedRect/index.js +1 -1
  18. package/dist/core/shaders/Saturation/index.js +1 -1
  19. package/dist/core/shaders/Sharpness/index.js +1 -1
  20. package/dist/core/shaders/Shatter/index.js +1 -1
  21. package/dist/core/shaders/SimplexNoise/index.js +1 -1
  22. package/dist/core/shaders/SineWave/index.js +1 -1
  23. package/dist/core/shaders/Smoke/index.js +1 -1
  24. package/dist/core/shaders/SmokeFill/index.js +1 -1
  25. package/dist/core/shaders/Solarize/index.js +1 -1
  26. package/dist/core/shaders/SolidColor/index.js +1 -1
  27. package/dist/core/shaders/Spherize/index.js +1 -1
  28. package/dist/core/shaders/Spiral/index.js +1 -1
  29. package/dist/core/shaders/Star/index.js +1 -1
  30. package/dist/core/shaders/Strands/index.js +1 -1
  31. package/dist/core/shaders/Stretch/index.js +1 -1
  32. package/dist/core/shaders/Stripes/index.js +1 -1
  33. package/dist/core/shaders/StudioBackground/index.js +1 -1
  34. package/dist/core/shaders/SunBurst/index.js +1 -1
  35. package/dist/core/shaders/Swirl/index.js +1 -1
  36. package/dist/core/shaders/TiltShift/index.js +1 -1
  37. package/dist/core/shaders/Tint/index.js +1 -1
  38. package/dist/core/shaders/Trapezoid/index.js +1 -1
  39. package/dist/core/shaders/Tritone/index.js +1 -1
  40. package/dist/core/shaders/Truchet/index.js +1 -1
  41. package/dist/core/shaders/Twirl/index.js +1 -1
  42. package/dist/core/shaders/VHS/index.js +1 -1
  43. package/dist/core/shaders/Vesica/index.js +1 -1
  44. package/dist/core/shaders/Vibrance/index.js +1 -1
  45. package/dist/core/shaders/VideoTexture/index.js +2 -2
  46. package/dist/core/shaders/Vignette/index.js +1 -1
  47. package/dist/core/shaders/Voronoi/index.js +1 -1
  48. package/dist/core/shaders/WaveDistortion/index.js +1 -1
  49. package/dist/core/shaders/Weave/index.js +1 -1
  50. package/dist/core/shaders/WebcamTexture/index.js +2 -2
  51. package/dist/core/shaders/WorleyNoise/index.js +1 -1
  52. package/dist/core/shaders/ZoomBlur/index.js +1 -1
  53. package/dist/js/createShader.js +1 -1
  54. package/dist/js/utils/generatePresetCode.d.ts.map +1 -1
  55. package/dist/js/utils/generatePresetCode.js +12 -1
  56. package/dist/react/Preview.js +1 -0
  57. package/dist/react/ReflectivePlane.js +217 -0
  58. package/dist/react/Shader.js +1 -1
  59. package/dist/react/bundle.js +207 -207
  60. package/dist/react/components/ReflectivePlane.d.ts +36 -0
  61. package/dist/react/components/ReflectivePlane.d.ts.map +1 -0
  62. package/dist/react/engine/Preview.d.ts.map +1 -1
  63. package/dist/react/index.d.ts +1 -0
  64. package/dist/react/index.d.ts.map +1 -1
  65. package/dist/react/index.js +2 -1
  66. package/dist/react/utils/generatePresetCode.d.ts.map +1 -1
  67. package/dist/react/utils/generatePresetCode.js +12 -1
  68. package/dist/registry.js +219 -2
  69. package/dist/solid/components/ReflectivePlane.d.ts +33 -0
  70. package/dist/solid/components/ReflectivePlane.d.ts.map +1 -0
  71. package/dist/solid/components/ReflectivePlane.js +228 -0
  72. package/dist/solid/engine/Preview.d.ts.map +1 -1
  73. package/dist/solid/engine/Preview.js +158 -156
  74. package/dist/solid/engine/Shader.js +1 -1
  75. package/dist/solid/index.d.ts +1 -0
  76. package/dist/solid/index.d.ts.map +1 -1
  77. package/dist/solid/index.js +82 -80
  78. package/dist/solid/utils/generatePresetCode.d.ts.map +1 -1
  79. package/dist/solid/utils/generatePresetCode.js +12 -1
  80. package/dist/svelte/components/ReflectivePlane.svelte.d.ts +23 -0
  81. package/dist/svelte/index.d.ts +1 -0
  82. package/dist/svelte/index.js +740 -540
  83. package/dist/svelte/source/components/ReflectivePlane.svelte +329 -0
  84. package/dist/svelte/source/engine/Preview.svelte +2 -0
  85. package/dist/svelte/source/index.js +1 -0
  86. package/dist/svelte/utils/generatePresetCode.js +12 -1
  87. package/dist/vue/Preview.vue_vue_type_script_setup_true_lang.js +2 -0
  88. package/dist/vue/ReflectivePlane.js +3 -0
  89. package/dist/vue/ReflectivePlane.vue_vue_type_script_setup_true_lang.js +218 -0
  90. package/dist/vue/Shader.vue_vue_type_script_setup_true_lang.js +1 -1
  91. package/dist/vue/components/ReflectivePlane.vue.d.ts +58 -0
  92. package/dist/vue/components/ReflectivePlane.vue.d.ts.map +1 -0
  93. package/dist/vue/index.d.ts +1 -0
  94. package/dist/vue/index.d.ts.map +1 -1
  95. package/dist/vue/index.js +2 -1
  96. package/dist/vue/utils/generatePresetCode.d.ts.map +1 -1
  97. package/dist/vue/utils/generatePresetCode.js +12 -1
  98. package/package.json +9 -1
  99. /package/dist/core/{Ring-CtnDtTY8.js → Ring-UT__kmzY.js} +0 -0
  100. /package/dist/core/{Ripples-B4H0VoZb.js → Ripples-CWVLSUP0.js} +0 -0
  101. /package/dist/core/{RoundedRect-tnt7Jr5b.js → RoundedRect-BPWHTT1j.js} +0 -0
  102. /package/dist/core/{Saturation-6FlxHXSi.js → Saturation-DFOp2yD9.js} +0 -0
  103. /package/dist/core/{Sharpness-C4cJlBuh.js → Sharpness-C-IEswPL.js} +0 -0
  104. /package/dist/core/{Shatter-CnkycTRD.js → Shatter-CUYQp-qy.js} +0 -0
  105. /package/dist/core/{SimplexNoise-BnRaoxON.js → SimplexNoise-LAxWw8fJ.js} +0 -0
  106. /package/dist/core/{SineWave-CZ4Fanvr.js → SineWave-CEQWxC9Q.js} +0 -0
  107. /package/dist/core/{Smoke-CXPjGG-b.js → Smoke-DO4yylWk.js} +0 -0
  108. /package/dist/core/{SmokeFill-DzEtYeKN.js → SmokeFill-Dm0sZS5F.js} +0 -0
  109. /package/dist/core/{Solarize-CynVlxjT.js → Solarize-mE7LU1li.js} +0 -0
  110. /package/dist/core/{SolidColor-dCAOGC_P.js → SolidColor-BljkSdvg.js} +0 -0
  111. /package/dist/core/{Spherize-C77QGVWj.js → Spherize-DARagREe.js} +0 -0
  112. /package/dist/core/{Spiral-eN65wa6O.js → Spiral-CumsIpkp.js} +0 -0
  113. /package/dist/core/{Star-0Flymgm9.js → Star-8fAlzR9L.js} +0 -0
  114. /package/dist/core/{Strands-DnWJDGiO.js → Strands-BB4RIsFz.js} +0 -0
  115. /package/dist/core/{Stretch-B5XGF1bF.js → Stretch-3S2atBkJ.js} +0 -0
  116. /package/dist/core/{Stripes-CNXJpFyr.js → Stripes-BGFVSZIt.js} +0 -0
  117. /package/dist/core/{StudioBackground-DtiE2mCf.js → StudioBackground-BtJ6b1Ki.js} +0 -0
  118. /package/dist/core/{SunBurst-D9X1-buZ.js → SunBurst-BJRFFYhs.js} +0 -0
  119. /package/dist/core/{Swirl-BV6pN94G.js → Swirl-KA9cEnLI.js} +0 -0
  120. /package/dist/core/{TiltShift-r4qzPb2k.js → TiltShift-DtQ3dRL-.js} +0 -0
  121. /package/dist/core/{Tint-CJ8FQdzA.js → Tint-W_EvzN1-.js} +0 -0
  122. /package/dist/core/{Trapezoid-JmybJMUr.js → Trapezoid-cQzS6-bh.js} +0 -0
  123. /package/dist/core/{Tritone-D_QvxjGc.js → Tritone-B3hI2nAi.js} +0 -0
  124. /package/dist/core/{Truchet-BJeZS_JQ.js → Truchet-s9PmowCP.js} +0 -0
  125. /package/dist/core/{Twirl-8ayqS0n8.js → Twirl-UDDXGkFl.js} +0 -0
  126. /package/dist/core/{VHS-Gbec95K_.js → VHS-DW1H7Wuy.js} +0 -0
  127. /package/dist/core/{Vesica-D7iqgpJg.js → Vesica-ChQBYWuw.js} +0 -0
  128. /package/dist/core/{Vibrance-COKHmh8r.js → Vibrance-DUj7hwzE.js} +0 -0
  129. /package/dist/core/{Vignette-Y_2yono-.js → Vignette-F9yxi-UM.js} +0 -0
  130. /package/dist/core/{Voronoi-DQ_f6k5D.js → Voronoi-D8HHP_WR.js} +0 -0
  131. /package/dist/core/{WaveDistortion-R5FfwKQN.js → WaveDistortion-CDIc5Uyk.js} +0 -0
  132. /package/dist/core/{Weave-DJ4s3Gwc.js → Weave-ou5shgl3.js} +0 -0
  133. /package/dist/core/{WorleyNoise-CWytDfGH.js → WorleyNoise-Uf6IPm7A.js} +0 -0
  134. /package/dist/core/{ZoomBlur-DWFQVFMK.js → ZoomBlur-DJ-RNKHM.js} +0 -0
  135. /package/dist/core/{browser-BamVDhaZ.js → browser-NUM-x2tw.js} +0 -0
@@ -1,11 +1,21 @@
1
1
  import { a as transformColor } from "./transformations-CJcUeZIC.js";
2
2
  import { t as createAnimatedTime } from "./time-DUqSFWvT.js";
3
- import { Fn, cos, dot, float, floor, fract, length, min, mix, screenUV, sin, smoothstep, time, vec2, vec3, vec4, viewportSize } from "three/tsl";
3
+ import { StorageTexture } from "three/webgpu";
4
+ import { FloatType } from "three";
5
+ import { Fn, cos, dot, float, floor, fract, instanceIndex, length, min, mix, screenUV, sin, smoothstep, storageTexture, texture, textureStore, time, uint, uniform, uvec2, vec2, vec3, vec4, viewportSize } from "three/tsl";
6
+ var PARTICLE_TEX = 1024;
4
7
  var hash1_2 = Fn(([p]) => {
5
- return fract(sin(dot(p, vec2(127.1, 311.7))).mul(43758.5453123));
8
+ const p3 = fract(vec3(p.x, p.y, p.x).mul(.1031));
9
+ const d = dot(p3, vec3(p3.y, p3.z, p3.x).add(33.33));
10
+ const p3b = p3.add(d);
11
+ return fract(p3b.x.add(p3b.y).mul(p3b.z));
6
12
  });
7
13
  var hash2_2 = Fn(([p]) => {
8
- return fract(sin(vec2(dot(p, vec2(127.1, 311.7)), dot(p, vec2(269.5, 183.3)))).mul(43758.5453));
14
+ const p3 = fract(vec3(p.x, p.y, p.x).mul(vec3(.1031, .103, .0973)));
15
+ const d = dot(p3, vec3(p3.y, p3.z, p3.x).add(33.33));
16
+ const p3b = p3.add(d);
17
+ const s = p3b.x.add(p3b.y);
18
+ return fract(vec2(s.mul(p3b.z), s.mul(p3b.y)));
9
19
  });
10
20
  var voronoiPointFromRoot = Fn(([root, deg]) => {
11
21
  const point = hash2_2(root).sub(.5);
@@ -20,6 +30,13 @@ var getParticleDistance = Fn(([uv$1, cellUV, randomness]) => {
20
30
  const pointUV = voronoiPointFromRoot(cellUV, degFromRootUV(cellUV, randomness));
21
31
  return length(uv$1.sub(pointUV));
22
32
  });
33
+ var degFromRootUV_compute = Fn(([uv$1, randomness, frameTimeU]) => {
34
+ return frameTimeU.mul(randomness).mul(hash1_2(uv$1).sub(.5)).mul(2);
35
+ });
36
+ var getParticleDistance_compute = Fn(([uv$1, cellUV, randomness, frameTimeU]) => {
37
+ const pointUV = voronoiPointFromRoot(cellUV, degFromRootUV_compute(cellUV, randomness, frameTimeU));
38
+ return length(uv$1.sub(pointUV));
39
+ });
23
40
  const componentDefinition = {
24
41
  name: "FloatingParticles",
25
42
  category: "Textures",
@@ -63,7 +80,7 @@ const componentDefinition = {
63
80
  }
64
81
  },
65
82
  particleSize: {
66
- default: 1,
83
+ default: 2,
67
84
  description: "Size of particles",
68
85
  ui: {
69
86
  type: ["range", "map"],
@@ -157,8 +174,106 @@ const componentDefinition = {
157
174
  }
158
175
  }
159
176
  },
177
+ computeNode: (params) => {
178
+ const { uniforms, onCleanup } = params;
179
+ const texSize = PARTICLE_TEX;
180
+ const count = texSize * texSize;
181
+ const gs = uint(texSize);
182
+ const outTex = new StorageTexture(texSize, texSize);
183
+ outTex.type = FloatType;
184
+ const outTexNode = storageTexture(outTex);
185
+ onCleanup(() => outTex.dispose());
186
+ const animTimeU = uniform(0);
187
+ const frameTimeU = uniform(0);
188
+ const aspectU = uniform(16 / 9);
189
+ const computeRenderParticle = Fn(([uv$1]) => {
190
+ const rootUV = floor(uv$1);
191
+ const randomness = uniforms.randomness.uniform;
192
+ const dCenter = getParticleDistance_compute(uv$1, rootUV, randomness, frameTimeU);
193
+ const dLeft = getParticleDistance_compute(uv$1, rootUV.add(vec2(-1, 0)), randomness, frameTimeU);
194
+ const dRight = getParticleDistance_compute(uv$1, rootUV.add(vec2(1, 0)), randomness, frameTimeU);
195
+ const dTop = getParticleDistance_compute(uv$1, rootUV.add(vec2(0, -1)), randomness, frameTimeU);
196
+ const dBottom = getParticleDistance_compute(uv$1, rootUV.add(vec2(0, 1)), randomness, frameTimeU);
197
+ const minDist = min(min(min(min(dCenter, dLeft), dRight), dTop), dBottom);
198
+ const softness = uniforms.particleSoftness.uniform;
199
+ const scaledSize = uniforms.particleSize.uniform.mul(.01);
200
+ const innerRadius = scaledSize.mul(.6);
201
+ const baseIntensity = smoothstep(innerRadius, innerRadius.add(softness.mul(scaledSize.mul(2.4))), minDist).oneMinus();
202
+ const twinkleIntensity = uniforms.twinkle.uniform;
203
+ const particlePhase = hash1_2(rootUV);
204
+ const twinkleValue = sin(frameTimeU.mul(2).add(particlePhase.mul(6.28318))).mul(.5).add(.5);
205
+ const twinkleModifier = mix(float(1), twinkleValue, twinkleIntensity);
206
+ return baseIntensity.mul(twinkleModifier).mul(uniforms.particleColor.uniform.rgb);
207
+ });
208
+ const computeLayeredParticles = Fn(([uv$1]) => {
209
+ const sizeMod = float(1.05);
210
+ const alphaMod = float(.9);
211
+ const layers = uniforms.count.uniform;
212
+ const particles = vec3(0).toVar();
213
+ const layerScale = float(1).toVar();
214
+ const alpha = float(1).toVar();
215
+ const offset = vec2(0).toVar();
216
+ const angleRad = uniforms.angle.uniform.mul(3.14159).div(180);
217
+ const baseMovementDir = vec2(cos(angleRad), sin(angleRad));
218
+ const baseMovement = animTimeU.mul(baseMovementDir);
219
+ const speedVar = uniforms.speedVariance.uniform;
220
+ const angleVar = uniforms.angleVariance.uniform.mul(3.14159).div(180);
221
+ for (let i = 0; i < 5; i++) {
222
+ const layerActive = float(i).lessThan(layers).and(alpha.greaterThan(.02));
223
+ const layerHash = hash2_2(vec2(alpha, float(i).mul(7.919)));
224
+ const speedMod = float(1).add(layerHash.x.sub(.5).mul(speedVar));
225
+ const angleDelta = layerHash.y.sub(.5).mul(angleVar).mul(2);
226
+ const variedAngle = angleRad.add(angleDelta).toVar();
227
+ const variedDir = vec2(cos(variedAngle), sin(variedAngle));
228
+ const movement = baseMovement.mul(speedMod).add(variedDir.sub(baseMovementDir).mul(animTimeU));
229
+ const layerParticles = computeRenderParticle(uv$1.mul(layerScale).add(movement).add(offset)).mul(alpha);
230
+ particles.assign(particles.add(layerActive.select(layerParticles, vec3(0))));
231
+ offset.assign(offset.add(layerHash.mul(10)));
232
+ alpha.assign(alpha.mul(alphaMod));
233
+ layerScale.assign(layerScale.mul(sizeMod));
234
+ }
235
+ return particles;
236
+ });
237
+ const particlePass = Fn(() => {
238
+ const idx = instanceIndex;
239
+ const j = idx.mod(gs);
240
+ const i = idx.div(gs);
241
+ const u = j.toFloat().add(.5).div(float(texSize));
242
+ const v = i.toFloat().add(.5).div(float(texSize));
243
+ const particles = computeLayeredParticles(vec2(u.mul(2).sub(1).mul(aspectU), v.mul(2).sub(1)).mul(uniforms.particleDensity.uniform));
244
+ const pa = length(particles).clamp(0, 1);
245
+ textureStore(outTexNode, uvec2(j, i), vec4(particles, pa)).toWriteOnly();
246
+ })().compute(count, [256]);
247
+ return {
248
+ outputs: { particleTexture: outTex },
249
+ getComputeNodes: (frameParams) => {
250
+ animTimeU.value += frameParams.deltaTime * uniforms.speed.uniform.value;
251
+ frameTimeU.value += frameParams.deltaTime;
252
+ if (frameParams.dimensions.height > 0) aspectU.value = frameParams.dimensions.width / frameParams.dimensions.height;
253
+ return [particlePass];
254
+ }
255
+ };
256
+ },
160
257
  fragmentNode: (params) => {
161
- const { uniforms, childNode } = params;
258
+ const { uniforms, childNode, computeOutputs } = params;
259
+ if (computeOutputs?.particleTexture) {
260
+ const particleField = texture(computeOutputs.particleTexture);
261
+ const px = float(1 / PARTICLE_TEX);
262
+ const s0 = particleField.sample(screenUV);
263
+ const s1 = particleField.sample(screenUV.add(vec2(px, float(0))));
264
+ const s2 = particleField.sample(screenUV.add(vec2(float(0), px)));
265
+ const s3 = particleField.sample(screenUV.add(vec2(px.negate(), float(0))));
266
+ const s4 = particleField.sample(screenUV.add(vec2(float(0), px.negate())));
267
+ const w0 = float(.5), w1 = float(.125);
268
+ const particles$1 = s0.xyz.mul(w0).add(s1.xyz.mul(w1)).add(s2.xyz.mul(w1)).add(s3.xyz.mul(w1)).add(s4.xyz.mul(w1));
269
+ const particleAlpha$1 = s0.w.mul(w0).add(s1.w.mul(w1)).add(s2.w.mul(w1)).add(s3.w.mul(w1)).add(s4.w.mul(w1));
270
+ if (childNode) {
271
+ const mixedColor = mix(childNode.xyz, particles$1, particleAlpha$1.greaterThan(.01).select(particleAlpha$1, 0));
272
+ const pa = particleAlpha$1.clamp(0, 1);
273
+ return vec4(mixedColor, pa.add(childNode.w.mul(float(1).sub(pa))));
274
+ }
275
+ return vec4(particles$1, particleAlpha$1);
276
+ }
162
277
  const baseUV = screenUV;
163
278
  const animTime = createAnimatedTime(params, uniforms.speed);
164
279
  const renderParticle = Fn(([uv$2]) => {
@@ -175,7 +290,7 @@ const componentDefinition = {
175
290
  const innerRadius = scaledSize.mul(.6);
176
291
  const baseIntensity = smoothstep(innerRadius, innerRadius.add(softness.mul(scaledSize.mul(2.4))), minDist).oneMinus();
177
292
  const twinkleIntensity = uniforms.twinkle.uniform;
178
- const particlePhase = rootUV.x.mul(12.9898).add(rootUV.y.mul(78.233)).sin().mul(43758.5453).fract();
293
+ const particlePhase = hash1_2(rootUV);
179
294
  const twinkleValue = sin(time.mul(2).add(particlePhase.mul(6.28318))).mul(.5).add(.5);
180
295
  const twinkleModifier = mix(float(1), twinkleValue, twinkleIntensity);
181
296
  return baseIntensity.mul(twinkleModifier).mul(uniforms.particleColor.uniform.rgb);
@@ -193,7 +308,7 @@ const componentDefinition = {
193
308
  const baseMovement = animTime.mul(baseMovementDir);
194
309
  const speedVar = uniforms.speedVariance.uniform;
195
310
  const angleVar = uniforms.angleVariance.uniform.mul(3.14159).div(180);
196
- for (let i = 0; i < 4; i++) {
311
+ for (let i = 0; i < 5; i++) {
197
312
  const layerActive = float(i).lessThan(layers).and(alpha.greaterThan(.02));
198
313
  const layerHash = hash2_2(vec2(alpha, float(i).mul(7.919)));
199
314
  const speedMod = float(1).add(layerHash.x.sub(.5).mul(speedVar));
@@ -0,0 +1,230 @@
1
+ import { t as applyEdgeHandling } from "./edges-CX_lJB9R.js";
2
+ import { c as transformEdges } from "./transformations-CJcUeZIC.js";
3
+ import { t as unpremultiplyAlpha } from "./alpha-C4ptedXe.js";
4
+ import { i as createVariableGaussianBlurCompute } from "./computeBlur-CprKe0xa.js";
5
+ import { Fn, If, convertToTexture, float, instanceIndex, mix, screenUV, smoothstep, step, texture, textureStore, uint, uniform, uvec2, vec2, vec4, viewportSize } from "three/tsl";
6
+ var HALF_KERNEL = 30;
7
+ var BLUR_TO_RADIUS_PX = 12;
8
+ var POISSON_DISK = [
9
+ [0, 0],
10
+ [-.94, -.34],
11
+ [.95, .31],
12
+ [-.09, -.93],
13
+ [.34, .94],
14
+ [-.91, .41],
15
+ [.88, -.46],
16
+ [-.4, .71],
17
+ [.51, .58],
18
+ [-.49, -.59],
19
+ [.4, -.68],
20
+ [-.71, .05],
21
+ [.07, .21]
22
+ ];
23
+ var POISSON_WEIGHT = 1 / POISSON_DISK.length;
24
+ const componentDefinition = {
25
+ name: "ReflectivePlane",
26
+ category: "Stylize",
27
+ description: "Reflective floor that mirrors the content above it",
28
+ requiresRTT: true,
29
+ requiresChild: true,
30
+ props: {
31
+ height: {
32
+ default: .7,
33
+ description: "Vertical position of the reflective surface",
34
+ ui: {
35
+ type: ["range", "map"],
36
+ min: 0,
37
+ max: 1,
38
+ step: .01,
39
+ label: "Floor Height",
40
+ group: "Plane"
41
+ }
42
+ },
43
+ distance: {
44
+ default: .5,
45
+ description: "How far below the floor the reflection remains visible before fully fading to transparent.",
46
+ ui: {
47
+ type: ["range", "map"],
48
+ min: .01,
49
+ max: 1,
50
+ step: .01,
51
+ label: "Reflection Distance",
52
+ group: "Plane"
53
+ }
54
+ },
55
+ falloff: {
56
+ default: .5,
57
+ description: "Width of the fade zone, as a fraction of reflection distance.",
58
+ ui: {
59
+ type: ["range", "map"],
60
+ min: 0,
61
+ max: 3,
62
+ step: .01,
63
+ label: "Reflection Falloff",
64
+ group: "Plane"
65
+ }
66
+ },
67
+ blur: {
68
+ default: 3,
69
+ description: "Maximum blur applied to the reflection far from the surface.",
70
+ ui: {
71
+ type: ["range", "map"],
72
+ min: 0,
73
+ max: 5,
74
+ step: .05,
75
+ label: "Blur",
76
+ group: "Surface"
77
+ }
78
+ },
79
+ blurDistance: {
80
+ default: .3,
81
+ description: "How far below the surface the blur takes to ramp from sharp to maximum.",
82
+ ui: {
83
+ type: "range",
84
+ min: .01,
85
+ max: 1,
86
+ step: .01,
87
+ label: "Blur Distance",
88
+ group: "Surface"
89
+ }
90
+ },
91
+ edges: {
92
+ default: "stretch",
93
+ description: "How to handle reflected samples that fall outside the source content.",
94
+ transform: transformEdges,
95
+ compileTime: true,
96
+ ui: {
97
+ type: "select",
98
+ options: [
99
+ {
100
+ label: "Stretch",
101
+ value: "stretch"
102
+ },
103
+ {
104
+ label: "Transparent",
105
+ value: "transparent"
106
+ },
107
+ {
108
+ label: "Mirror",
109
+ value: "mirror"
110
+ },
111
+ {
112
+ label: "Wrap",
113
+ value: "wrap"
114
+ }
115
+ ],
116
+ label: "Edges",
117
+ group: "Surface"
118
+ }
119
+ }
120
+ },
121
+ computeNode: ({ childNode, onCleanup, dimensions, renderer, uniforms, onResize }) => {
122
+ if (!childNode) return null;
123
+ if (uniforms.height.mapComputeInfo || uniforms.blur.mapComputeInfo || uniforms.blurDistance.mapComputeInfo) return null;
124
+ const childTexture = convertToTexture(childNode);
125
+ onCleanup(() => {
126
+ if (childTexture?.renderTarget?.dispose) childTexture.renderTarget.dispose();
127
+ });
128
+ const dpr = renderer?.getPixelRatio?.() ?? 1;
129
+ const blur = createVariableGaussianBlurCompute(childTexture, Math.round(dimensions.width * dpr), Math.round(dimensions.height * dpr), onCleanup, HALF_KERNEL);
130
+ const { computeNodes: blurNodes, outputTexture, blurMapWriteNode, computeWidth, computeHeight } = blur;
131
+ const heightU = uniform(.5);
132
+ const blurAmountU = uniform(1);
133
+ const blurDistanceU = uniform(.5);
134
+ const cw = uint(computeWidth);
135
+ const ch = uint(computeHeight);
136
+ function readScalar(entry) {
137
+ return entry.getCpuValue?.() ?? (typeof entry.uniform.value === "number" ? entry.uniform.value : null);
138
+ }
139
+ function updateUniforms() {
140
+ const h = readScalar(uniforms.height);
141
+ if (h !== null) heightU.value = h;
142
+ const b = readScalar(uniforms.blur);
143
+ if (b !== null) blurAmountU.value = b;
144
+ const bd = readScalar(uniforms.blurDistance);
145
+ if (bd !== null) blurDistanceU.value = Math.max(.01, bd);
146
+ }
147
+ const fillBlurMap = Fn(() => {
148
+ const idx = instanceIndex;
149
+ const cx = idx.mod(cw);
150
+ const cy = idx.div(cw);
151
+ If(cy.lessThan(ch), () => {
152
+ const v = cy.toFloat().add(float(.5)).div(float(computeHeight));
153
+ const distBelowAtOutput = heightU.sub(v).max(float(0));
154
+ const ramp = smoothstep(float(0), blurDistanceU, distBelowAtOutput);
155
+ const radius = blurAmountU.mul(ramp).mul(float(BLUR_TO_RADIUS_PX));
156
+ textureStore(blurMapWriteNode, uvec2(cx, cy), vec4(radius, float(0), float(0), float(1))).toWriteOnly();
157
+ });
158
+ })().compute(computeWidth * computeHeight, [256]);
159
+ onResize(({ width, height }) => {
160
+ blur.setInputDimensions(Math.round(width * dpr), Math.round(height * dpr));
161
+ });
162
+ return {
163
+ outputs: {
164
+ childTexture,
165
+ blurredTexture: outputTexture
166
+ },
167
+ getComputeNodes: () => {
168
+ updateUniforms();
169
+ return [fillBlurMap, ...blurNodes];
170
+ }
171
+ };
172
+ },
173
+ fragmentNode: ({ uniforms, childNode, onCleanup, computeOutputs }) => {
174
+ if (!childNode) return vec4(0, 0, 0, 0);
175
+ if (computeOutputs?.blurredTexture && computeOutputs?.childTexture) {
176
+ const sharp = computeOutputs.childTexture;
177
+ const blurred = texture(computeOutputs.blurredTexture);
178
+ return Fn(() => {
179
+ const floorY = uniforms.height.uniform;
180
+ const uv$1 = screenUV;
181
+ const distBelow = uv$1.y.sub(floorY).max(float(0));
182
+ const originalSample = sharp.sample(uv$1);
183
+ const reflectedUV = vec2(uv$1.x, floorY.mul(2).sub(uv$1.y));
184
+ const reflSample = applyEdgeHandling(reflectedUV, blurred.sample(reflectedUV), blurred, uniforms.edges.uniform.value);
185
+ const distanceMax = uniforms.distance.uniform.max(float(.001));
186
+ const fadeWidth = distanceMax.mul(uniforms.falloff.uniform).max(float(1e-4));
187
+ const fadeStart = distanceMax.sub(fadeWidth);
188
+ const visibility = float(1).sub(smoothstep(fadeStart, distanceMax, distBelow));
189
+ const effReflA = reflSample.a.mul(visibility);
190
+ const reflPremultRgb = reflSample.rgb.mul(visibility);
191
+ const propsPin = uniforms.height.uniform.mul(float(0)).add(uniforms.blur.uniform.mul(float(0))).add(uniforms.blurDistance.uniform.mul(float(0)));
192
+ const oneMinusReflA = effReflA.oneMinus();
193
+ return unpremultiplyAlpha(mix(originalSample, vec4(reflPremultRgb.add(originalSample.rgb.mul(oneMinusReflA)).add(propsPin), effReflA.add(originalSample.a.mul(oneMinusReflA))), step(floorY, uv$1.y)));
194
+ })();
195
+ }
196
+ const childTexture = convertToTexture(childNode);
197
+ onCleanup(() => {
198
+ if (childTexture?.renderTarget?.dispose) childTexture.renderTarget.dispose();
199
+ });
200
+ return Fn(() => {
201
+ const floorY = uniforms.height.uniform;
202
+ const uv$1 = screenUV;
203
+ const aspect = viewportSize.x.div(viewportSize.y);
204
+ const distBelow = uv$1.y.sub(floorY).max(float(0));
205
+ const originalSample = childTexture.sample(uv$1);
206
+ const reflectedUV = vec2(uv$1.x, floorY.mul(2).sub(uv$1.y));
207
+ const clampedBlurDistance = uniforms.blurDistance.uniform.max(float(.01));
208
+ const blurRamp = smoothstep(float(0), clampedBlurDistance, distBelow);
209
+ const blurRadius = uniforms.blur.uniform.mul(blurRamp).mul(.02);
210
+ const blurredColor = vec4(0).toVar();
211
+ for (let i = 0; i < POISSON_DISK.length; i++) {
212
+ const [ox, oy] = POISSON_DISK[i];
213
+ const offset = vec2(float(ox).mul(blurRadius).div(aspect), float(oy).mul(blurRadius));
214
+ const sampleUV = reflectedUV.add(offset);
215
+ const edgeHandled = applyEdgeHandling(sampleUV, childTexture.sample(sampleUV), childTexture, uniforms.edges.uniform.value);
216
+ blurredColor.assign(blurredColor.add(edgeHandled.mul(float(POISSON_WEIGHT))));
217
+ }
218
+ const distanceMax = uniforms.distance.uniform.max(float(.001));
219
+ const fadeWidth = distanceMax.mul(uniforms.falloff.uniform).max(float(1e-4));
220
+ const fadeStart = distanceMax.sub(fadeWidth);
221
+ const visibility = float(1).sub(smoothstep(fadeStart, distanceMax, distBelow));
222
+ const effReflA = blurredColor.a.mul(visibility);
223
+ const reflPremultRgb = blurredColor.rgb.mul(visibility);
224
+ const oneMinusReflA = effReflA.oneMinus();
225
+ return unpremultiplyAlpha(mix(originalSample, vec4(reflPremultRgb.add(originalSample.rgb.mul(oneMinusReflA)), effReflA.add(originalSample.a.mul(oneMinusReflA))), step(floorY, uv$1.y)));
226
+ })();
227
+ }
228
+ };
229
+ var ReflectivePlane_default = componentDefinition;
230
+ export { componentDefinition as n, ReflectivePlane_default as t };
@@ -1,4 +1,4 @@
1
- import { t as needsVideoCanvasWorkaround } from "./browser-BamVDhaZ.js";
1
+ import { t as needsVideoCanvasWorkaround } from "./browser-NUM-x2tw.js";
2
2
  import { CanvasTexture, SRGBColorSpace, VideoTexture } from "three/webgpu";
3
3
  import { float, max, min, or, screenUV, select, texture, uniform, vec2, vec4, viewportSize } from "three/tsl";
4
4
  const componentDefinition = {
@@ -1,4 +1,4 @@
1
- import { t as needsVideoCanvasWorkaround } from "./browser-BamVDhaZ.js";
1
+ import { t as needsVideoCanvasWorkaround } from "./browser-NUM-x2tw.js";
2
2
  import { CanvasTexture, SRGBColorSpace, VideoTexture } from "three/webgpu";
3
3
  import { float, max, min, or, screenUV, select, texture, uniform, vec2, vec4, viewportSize } from "three/tsl";
4
4
  const componentDefinition = {
@@ -42,7 +42,7 @@ import "./Ellipse-sWhNvW9-.js";
42
42
  import "./Emboss-DGaubb9x.js";
43
43
  import "./FallingLines-DqIZ8wTH.js";
44
44
  import "./FilmGrain-Dbw02Jz9.js";
45
- import "./FloatingParticles-DKoG78j0.js";
45
+ import "./FloatingParticles-LMsFTJKp.js";
46
46
  import "./Flower-BbRNrXIa.js";
47
47
  import "./FlowField-D3CAHBBG.js";
48
48
  import "./FlowingGradient-BRQ_K-k3.js";
@@ -83,46 +83,47 @@ import "./Posterize-DNxTRgvF.js";
83
83
  import "./ProgressiveBlur-BJwJ5mE0.js";
84
84
  import "./RadialGradient-CQIctl__.js";
85
85
  import "./RectangularCoordinates-F2VzXmal.js";
86
- import "./Ring-CtnDtTY8.js";
87
- import "./Ripples-B4H0VoZb.js";
88
- import "./RoundedRect-tnt7Jr5b.js";
89
- import "./Saturation-6FlxHXSi.js";
90
- import "./Sharpness-C4cJlBuh.js";
91
- import "./Shatter-CnkycTRD.js";
92
- import "./SimplexNoise-BnRaoxON.js";
93
- import "./SineWave-CZ4Fanvr.js";
94
- import "./Smoke-CXPjGG-b.js";
95
- import "./SmokeFill-DzEtYeKN.js";
96
- import "./Solarize-CynVlxjT.js";
97
- import "./SolidColor-dCAOGC_P.js";
98
- import "./Spherize-C77QGVWj.js";
99
- import "./Spiral-eN65wa6O.js";
100
- import "./Star-0Flymgm9.js";
101
- import "./Strands-DnWJDGiO.js";
102
- import "./Stretch-B5XGF1bF.js";
103
- import "./Stripes-CNXJpFyr.js";
104
- import "./StudioBackground-DtiE2mCf.js";
105
- import "./SunBurst-D9X1-buZ.js";
106
- import "./Swirl-BV6pN94G.js";
107
- import "./TiltShift-r4qzPb2k.js";
108
- import "./Tint-CJ8FQdzA.js";
109
- import "./Trapezoid-JmybJMUr.js";
110
- import "./Tritone-D_QvxjGc.js";
111
- import "./Truchet-BJeZS_JQ.js";
112
- import "./Twirl-8ayqS0n8.js";
113
- import "./Vesica-D7iqgpJg.js";
114
- import "./VHS-Gbec95K_.js";
115
- import "./Vibrance-COKHmh8r.js";
116
- import "./browser-BamVDhaZ.js";
117
- import "./VideoTexture-D9XxE1Hw.js";
118
- import "./Vignette-Y_2yono-.js";
119
- import "./Voronoi-DQ_f6k5D.js";
120
- import "./WaveDistortion-R5FfwKQN.js";
121
- import "./Weave-DJ4s3Gwc.js";
122
- import "./WebcamTexture-9Td8qQWm.js";
123
- import "./WorleyNoise-CWytDfGH.js";
124
- import "./ZoomBlur-DWFQVFMK.js";
125
- import { t as getAllShaders } from "./shaderRegistry-BoqhBfun.js";
86
+ import "./ReflectivePlane-UIT4xlmn.js";
87
+ import "./Ring-UT__kmzY.js";
88
+ import "./Ripples-CWVLSUP0.js";
89
+ import "./RoundedRect-BPWHTT1j.js";
90
+ import "./Saturation-DFOp2yD9.js";
91
+ import "./Sharpness-C-IEswPL.js";
92
+ import "./Shatter-CUYQp-qy.js";
93
+ import "./SimplexNoise-LAxWw8fJ.js";
94
+ import "./SineWave-CEQWxC9Q.js";
95
+ import "./Smoke-DO4yylWk.js";
96
+ import "./SmokeFill-Dm0sZS5F.js";
97
+ import "./Solarize-mE7LU1li.js";
98
+ import "./SolidColor-BljkSdvg.js";
99
+ import "./Spherize-DARagREe.js";
100
+ import "./Spiral-CumsIpkp.js";
101
+ import "./Star-8fAlzR9L.js";
102
+ import "./Strands-BB4RIsFz.js";
103
+ import "./Stretch-3S2atBkJ.js";
104
+ import "./Stripes-BGFVSZIt.js";
105
+ import "./StudioBackground-BtJ6b1Ki.js";
106
+ import "./SunBurst-BJRFFYhs.js";
107
+ import "./Swirl-KA9cEnLI.js";
108
+ import "./TiltShift-DtQ3dRL-.js";
109
+ import "./Tint-W_EvzN1-.js";
110
+ import "./Trapezoid-cQzS6-bh.js";
111
+ import "./Tritone-B3hI2nAi.js";
112
+ import "./Truchet-s9PmowCP.js";
113
+ import "./Twirl-UDDXGkFl.js";
114
+ import "./Vesica-ChQBYWuw.js";
115
+ import "./VHS-DW1H7Wuy.js";
116
+ import "./Vibrance-DUj7hwzE.js";
117
+ import "./browser-NUM-x2tw.js";
118
+ import "./VideoTexture-ClutlOqj.js";
119
+ import "./Vignette-F9yxi-UM.js";
120
+ import "./Voronoi-D8HHP_WR.js";
121
+ import "./WaveDistortion-CDIc5Uyk.js";
122
+ import "./Weave-ou5shgl3.js";
123
+ import "./WebcamTexture-D4e06ajM.js";
124
+ import "./WorleyNoise-Uf6IPm7A.js";
125
+ import "./ZoomBlur-DJ-RNKHM.js";
126
+ import { t as getAllShaders } from "./shaderRegistry-DZDkRCt8.js";
126
127
  import { Material, Mesh, MeshBasicNodeMaterial, OrthographicCamera, PlaneGeometry, SRGBColorSpace, Scene, Vector2, WebGPURenderer } from "three/webgpu";
127
128
  import { WebGLRenderer } from "three";
128
129
  import { PI, abs, add, atan, clamp, convertToTexture, cos, div, dot, float, fract, max, min, mix, mul, pow, screenUV, sign, sin, smoothstep, sqrt, step, sub, time, uniform, uv, vec2, vec3, vec4 } from "three/tsl";
@@ -42,7 +42,7 @@ import "./Ellipse-sWhNvW9-.js";
42
42
  import "./Emboss-DGaubb9x.js";
43
43
  import "./FallingLines-DqIZ8wTH.js";
44
44
  import "./FilmGrain-Dbw02Jz9.js";
45
- import "./FloatingParticles-DKoG78j0.js";
45
+ import "./FloatingParticles-LMsFTJKp.js";
46
46
  import "./Flower-BbRNrXIa.js";
47
47
  import "./FlowField-D3CAHBBG.js";
48
48
  import "./FlowingGradient-BRQ_K-k3.js";
@@ -83,44 +83,45 @@ import "./Posterize-DNxTRgvF.js";
83
83
  import "./ProgressiveBlur-BJwJ5mE0.js";
84
84
  import "./RadialGradient-CQIctl__.js";
85
85
  import "./RectangularCoordinates-F2VzXmal.js";
86
- import "./Ring-CtnDtTY8.js";
87
- import "./Ripples-B4H0VoZb.js";
88
- import "./RoundedRect-tnt7Jr5b.js";
89
- import "./Saturation-6FlxHXSi.js";
90
- import "./Sharpness-C4cJlBuh.js";
91
- import "./Shatter-CnkycTRD.js";
92
- import "./SimplexNoise-BnRaoxON.js";
93
- import "./SineWave-CZ4Fanvr.js";
94
- import "./Smoke-CXPjGG-b.js";
95
- import "./SmokeFill-DzEtYeKN.js";
96
- import "./Solarize-CynVlxjT.js";
97
- import "./SolidColor-dCAOGC_P.js";
98
- import "./Spherize-C77QGVWj.js";
99
- import "./Spiral-eN65wa6O.js";
100
- import "./Star-0Flymgm9.js";
101
- import "./Strands-DnWJDGiO.js";
102
- import "./Stretch-B5XGF1bF.js";
103
- import "./Stripes-CNXJpFyr.js";
104
- import "./StudioBackground-DtiE2mCf.js";
105
- import "./SunBurst-D9X1-buZ.js";
106
- import "./Swirl-BV6pN94G.js";
107
- import "./TiltShift-r4qzPb2k.js";
108
- import "./Tint-CJ8FQdzA.js";
109
- import "./Trapezoid-JmybJMUr.js";
110
- import "./Tritone-D_QvxjGc.js";
111
- import "./Truchet-BJeZS_JQ.js";
112
- import "./Twirl-8ayqS0n8.js";
113
- import "./Vesica-D7iqgpJg.js";
114
- import "./VHS-Gbec95K_.js";
115
- import "./Vibrance-COKHmh8r.js";
116
- import "./browser-BamVDhaZ.js";
117
- import "./VideoTexture-D9XxE1Hw.js";
118
- import "./Vignette-Y_2yono-.js";
119
- import "./Voronoi-DQ_f6k5D.js";
120
- import "./WaveDistortion-R5FfwKQN.js";
121
- import "./Weave-DJ4s3Gwc.js";
122
- import "./WebcamTexture-9Td8qQWm.js";
123
- import "./WorleyNoise-CWytDfGH.js";
124
- import "./ZoomBlur-DWFQVFMK.js";
125
- import { a as shaderRegistry, i as getShadersByCategory, n as getShaderByName, r as getShaderCategories, t as getAllShaders } from "./shaderRegistry-BoqhBfun.js";
86
+ import "./ReflectivePlane-UIT4xlmn.js";
87
+ import "./Ring-UT__kmzY.js";
88
+ import "./Ripples-CWVLSUP0.js";
89
+ import "./RoundedRect-BPWHTT1j.js";
90
+ import "./Saturation-DFOp2yD9.js";
91
+ import "./Sharpness-C-IEswPL.js";
92
+ import "./Shatter-CUYQp-qy.js";
93
+ import "./SimplexNoise-LAxWw8fJ.js";
94
+ import "./SineWave-CEQWxC9Q.js";
95
+ import "./Smoke-DO4yylWk.js";
96
+ import "./SmokeFill-Dm0sZS5F.js";
97
+ import "./Solarize-mE7LU1li.js";
98
+ import "./SolidColor-BljkSdvg.js";
99
+ import "./Spherize-DARagREe.js";
100
+ import "./Spiral-CumsIpkp.js";
101
+ import "./Star-8fAlzR9L.js";
102
+ import "./Strands-BB4RIsFz.js";
103
+ import "./Stretch-3S2atBkJ.js";
104
+ import "./Stripes-BGFVSZIt.js";
105
+ import "./StudioBackground-BtJ6b1Ki.js";
106
+ import "./SunBurst-BJRFFYhs.js";
107
+ import "./Swirl-KA9cEnLI.js";
108
+ import "./TiltShift-DtQ3dRL-.js";
109
+ import "./Tint-W_EvzN1-.js";
110
+ import "./Trapezoid-cQzS6-bh.js";
111
+ import "./Tritone-B3hI2nAi.js";
112
+ import "./Truchet-s9PmowCP.js";
113
+ import "./Twirl-UDDXGkFl.js";
114
+ import "./Vesica-ChQBYWuw.js";
115
+ import "./VHS-DW1H7Wuy.js";
116
+ import "./Vibrance-DUj7hwzE.js";
117
+ import "./browser-NUM-x2tw.js";
118
+ import "./VideoTexture-ClutlOqj.js";
119
+ import "./Vignette-F9yxi-UM.js";
120
+ import "./Voronoi-D8HHP_WR.js";
121
+ import "./WaveDistortion-CDIc5Uyk.js";
122
+ import "./Weave-ou5shgl3.js";
123
+ import "./WebcamTexture-D4e06ajM.js";
124
+ import "./WorleyNoise-Uf6IPm7A.js";
125
+ import "./ZoomBlur-DJ-RNKHM.js";
126
+ import { a as shaderRegistry, i as getShadersByCategory, n as getShaderByName, r as getShaderCategories, t as getAllShaders } from "./shaderRegistry-DZDkRCt8.js";
126
127
  export { getAllShaders, getShaderByName, getShaderCategories, getShadersByCategory, shaderRegistry };