@basementstudio/shader-lab 0.1.0 → 1.0.2
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.
- package/dist/src/easings.d.ts +3 -0
- package/dist/src/easings.js +3 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.js +4 -0
- package/dist/src/lib/editor/custom-shader/shared.d.ts +1 -0
- package/dist/src/lib/editor/custom-shader/shared.js +1 -0
- package/dist/src/renderer/ascii-atlas.d.ts +5 -0
- package/dist/src/renderer/ascii-atlas.js +61 -0
- package/dist/src/renderer/ascii-pass.d.ts +50 -0
- package/dist/src/renderer/ascii-pass.js +271 -0
- package/dist/src/renderer/asset-url.d.ts +1 -0
- package/dist/src/renderer/asset-url.js +3 -0
- package/dist/src/renderer/blend-modes.d.ts +4 -0
- package/dist/src/renderer/blend-modes.js +157 -0
- package/dist/src/renderer/contracts.d.ts +26 -0
- package/dist/src/renderer/contracts.js +13 -0
- package/dist/src/renderer/create-webgpu-renderer.d.ts +3 -0
- package/dist/src/renderer/create-webgpu-renderer.js +37 -0
- package/dist/src/renderer/crt-pass.d.ts +72 -0
- package/dist/src/renderer/crt-pass.js +536 -0
- package/dist/src/renderer/custom-shader-pass.d.ts +17 -0
- package/dist/src/renderer/custom-shader-pass.js +79 -0
- package/dist/src/renderer/custom-shader-runtime.d.ts +16 -0
- package/dist/src/renderer/custom-shader-runtime.js +169 -0
- package/dist/src/renderer/dither-textures.d.ts +8 -0
- package/dist/src/renderer/dither-textures.js +66 -0
- package/dist/src/renderer/dithering-pass.d.ts +45 -0
- package/dist/src/renderer/dithering-pass.js +229 -0
- package/dist/src/renderer/gradient-pass.d.ts +39 -0
- package/dist/src/renderer/gradient-pass.js +358 -0
- package/dist/src/renderer/halftone-pass.d.ts +65 -0
- package/dist/src/renderer/halftone-pass.js +530 -0
- package/dist/src/renderer/ink-pass.d.ts +84 -0
- package/dist/src/renderer/ink-pass.js +526 -0
- package/dist/src/renderer/live-pass.d.ts +31 -0
- package/dist/src/renderer/live-pass.js +136 -0
- package/dist/src/renderer/media-pass.d.ts +32 -0
- package/dist/src/renderer/media-pass.js +130 -0
- package/dist/src/renderer/media-texture.d.ts +8 -0
- package/dist/src/renderer/media-texture.js +41 -0
- package/dist/src/renderer/particle-grid-pass.d.ts +48 -0
- package/dist/src/renderer/particle-grid-pass.js +269 -0
- package/dist/src/renderer/pass-node.d.ts +36 -0
- package/dist/src/renderer/pass-node.js +120 -0
- package/dist/src/renderer/pattern-atlas.d.ts +8 -0
- package/dist/src/renderer/pattern-atlas.js +79 -0
- package/dist/src/renderer/pattern-pass.d.ts +58 -0
- package/dist/src/renderer/pattern-pass.js +316 -0
- package/dist/src/renderer/pipeline-manager.d.ts +39 -0
- package/dist/src/renderer/pipeline-manager.js +287 -0
- package/dist/src/renderer/pixel-sorting-pass.d.ts +33 -0
- package/dist/src/renderer/pixel-sorting-pass.js +179 -0
- package/dist/src/renderer/shaders/tsl/color/tonemapping.d.ts +9 -0
- package/dist/src/renderer/shaders/tsl/color/tonemapping.js +59 -0
- package/dist/src/renderer/shaders/tsl/cosine-palette.d.ts +4 -0
- package/{packages/shader-lab-react/src/renderer/shaders/tsl/cosine-palette.ts → dist/src/renderer/shaders/tsl/cosine-palette.js} +3 -4
- package/dist/src/renderer/shaders/tsl/noise/common.d.ts +5 -0
- package/dist/src/renderer/shaders/tsl/noise/common.js +24 -0
- package/dist/src/renderer/shaders/tsl/noise/curl-noise-3d.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/curl-noise-3d.js +27 -0
- package/dist/src/renderer/shaders/tsl/noise/curl-noise-4d.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/curl-noise-4d.js +27 -0
- package/dist/src/renderer/shaders/tsl/noise/fbm.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/fbm.js +11 -0
- package/dist/src/renderer/shaders/tsl/noise/perlin-noise-3d.d.ts +5 -0
- package/dist/src/renderer/shaders/tsl/noise/perlin-noise-3d.js +66 -0
- package/dist/src/renderer/shaders/tsl/noise/ridge-noise.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/ridge-noise.js +19 -0
- package/dist/src/renderer/shaders/tsl/noise/simplex-noise-3d.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/simplex-noise-3d.js +44 -0
- package/dist/src/renderer/shaders/tsl/noise/simplex-noise-4d.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/simplex-noise-4d.js +51 -0
- package/dist/src/renderer/shaders/tsl/noise/turbulence.d.ts +7 -0
- package/dist/src/renderer/shaders/tsl/noise/turbulence.js +34 -0
- package/dist/src/renderer/shaders/tsl/noise/value-noise-3d.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/value-noise-3d.js +27 -0
- package/dist/src/renderer/shaders/tsl/noise/voronoi-noise-3d.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/voronoi-noise-3d.js +45 -0
- package/dist/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.d.ts +4 -0
- package/dist/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.js +13 -0
- package/dist/src/renderer/shaders/tsl/patterns/bloom.d.ts +4 -0
- package/{packages/shader-lab-react/src/renderer/shaders/tsl/patterns/bloom.ts → dist/src/renderer/shaders/tsl/patterns/bloom.js} +4 -6
- package/dist/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.d.ts +4 -0
- package/dist/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.js +16 -0
- package/dist/src/renderer/shaders/tsl/patterns/grain-texture-pattern.d.ts +4 -0
- package/{packages/shader-lab-react/src/renderer/shaders/tsl/patterns/grain-texture-pattern.ts → dist/src/renderer/shaders/tsl/patterns/grain-texture-pattern.js} +3 -4
- package/dist/src/renderer/shaders/tsl/patterns/repeating-pattern.d.ts +4 -0
- package/{packages/shader-lab-react/src/renderer/shaders/tsl/patterns/repeating-pattern.ts → dist/src/renderer/shaders/tsl/patterns/repeating-pattern.js} +4 -6
- package/dist/src/renderer/shaders/tsl/utils/atan2.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/atan2.js +7 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-conj.d.ts +4 -0
- package/{packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-conj.ts → dist/src/renderer/shaders/tsl/utils/complex-conj.js} +3 -4
- package/dist/src/renderer/shaders/tsl/utils/complex-cos.d.ts +4 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-cos.js +9 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-div.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-div.js +6 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-log.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-log.js +6 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-mobius.d.ts +4 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-mobius.js +10 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-mul.d.ts +4 -0
- package/{packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-mul.ts → dist/src/renderer/shaders/tsl/utils/complex-mul.js} +3 -4
- package/dist/src/renderer/shaders/tsl/utils/complex-pow.d.ts +5 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-pow.js +14 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-sin.d.ts +4 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-sin.js +9 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-sqrt.d.ts +5 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-sqrt.js +12 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-tan.d.ts +4 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-tan.js +11 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-to-polar.d.ts +4 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-to-polar.js +9 -0
- package/dist/src/renderer/shaders/tsl/utils/hyperbolic.d.ts +8 -0
- package/{packages/shader-lab-react/src/renderer/shaders/tsl/utils/hyperbolic.ts → dist/src/renderer/shaders/tsl/utils/hyperbolic.js} +7 -11
- package/dist/src/renderer/shaders/tsl/utils/index.d.ts +38 -0
- package/dist/src/renderer/shaders/tsl/utils/index.js +39 -0
- package/dist/src/renderer/shaders/tsl/utils/rotate.d.ts +2 -0
- package/dist/src/renderer/shaders/tsl/utils/rotate.js +7 -0
- package/dist/src/renderer/shaders/tsl/utils/screen-aspect-uv.d.ts +2 -0
- package/dist/src/renderer/shaders/tsl/utils/screen-aspect-uv.js +6 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-box-2d.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-box-2d.js +5 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-diamond.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-diamond.js +5 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-rhombus.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-rhombus.js +14 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-sphere.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-sphere.js +5 -0
- package/dist/src/renderer/shaders/tsl/utils/smax.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/smax.js +6 -0
- package/dist/src/renderer/shaders/tsl/utils/smin.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/smin.js +6 -0
- package/dist/src/renderer/text-pass.d.ts +23 -0
- package/dist/src/renderer/text-pass.js +129 -0
- package/dist/src/runtime-clock.d.ts +9 -0
- package/dist/src/runtime-clock.js +20 -0
- package/dist/src/runtime-frame.d.ts +11 -0
- package/dist/src/runtime-frame.js +12 -0
- package/dist/src/shader-lab-composition.d.ts +9 -0
- package/dist/src/shader-lab-composition.js +96 -0
- package/dist/src/timeline.d.ts +8 -0
- package/dist/src/timeline.js +179 -0
- package/dist/src/types/editor.d.ts +3 -0
- package/dist/src/types/editor.js +1 -0
- package/dist/src/types.d.ts +81 -0
- package/dist/src/types.js +1 -0
- package/package.json +28 -65
- package/.biome/plugins/README.md +0 -21
- package/.biome/plugins/no-anchor-element.grit +0 -12
- package/.biome/plugins/no-relative-parent-imports.grit +0 -10
- package/.biome/plugins/no-unnecessary-forwardref.grit +0 -9
- package/.changeset/README.md +0 -17
- package/.changeset/config.json +0 -11
- package/.editorconfig +0 -40
- package/.env.example +0 -81
- package/.gitattributes +0 -19
- package/.github/workflows/canary.yml +0 -80
- package/.github/workflows/ci.yml +0 -37
- package/.github/workflows/release.yml +0 -56
- package/.tldrignore +0 -84
- package/.vscode/extensions.json +0 -20
- package/.vscode/settings.json +0 -105
- package/biome.json +0 -249
- package/bun.lock +0 -1224
- package/next.config.ts +0 -131
- package/packages/shader-lab-react/CHANGELOG.md +0 -9
- package/packages/shader-lab-react/README.md +0 -119
- package/packages/shader-lab-react/package.json +0 -36
- package/packages/shader-lab-react/scripts/fix-esm-specifiers.mjs +0 -57
- package/packages/shader-lab-react/scripts/prepare-dist.mjs +0 -4
- package/packages/shader-lab-react/src/ambient/three-tsl.d.ts +0 -146
- package/packages/shader-lab-react/src/ambient/three-webgpu.d.ts +0 -51
- package/packages/shader-lab-react/src/easings.ts +0 -4
- package/packages/shader-lab-react/src/index.ts +0 -35
- package/packages/shader-lab-react/src/lib/editor/custom-shader/shared.ts +0 -2
- package/packages/shader-lab-react/src/renderer/ascii-atlas.ts +0 -83
- package/packages/shader-lab-react/src/renderer/ascii-pass.ts +0 -416
- package/packages/shader-lab-react/src/renderer/asset-url.ts +0 -3
- package/packages/shader-lab-react/src/renderer/blend-modes.ts +0 -229
- package/packages/shader-lab-react/src/renderer/contracts.ts +0 -54
- package/packages/shader-lab-react/src/renderer/create-webgpu-renderer.ts +0 -48
- package/packages/shader-lab-react/src/renderer/crt-pass.ts +0 -1040
- package/packages/shader-lab-react/src/renderer/custom-shader-pass.ts +0 -108
- package/packages/shader-lab-react/src/renderer/custom-shader-runtime.ts +0 -309
- package/packages/shader-lab-react/src/renderer/dither-textures.ts +0 -99
- package/packages/shader-lab-react/src/renderer/dithering-pass.ts +0 -322
- package/packages/shader-lab-react/src/renderer/gradient-pass.ts +0 -521
- package/packages/shader-lab-react/src/renderer/halftone-pass.ts +0 -932
- package/packages/shader-lab-react/src/renderer/ink-pass.ts +0 -802
- package/packages/shader-lab-react/src/renderer/live-pass.ts +0 -194
- package/packages/shader-lab-react/src/renderer/media-pass.ts +0 -187
- package/packages/shader-lab-react/src/renderer/media-texture.ts +0 -66
- package/packages/shader-lab-react/src/renderer/particle-grid-pass.ts +0 -389
- package/packages/shader-lab-react/src/renderer/pass-node.ts +0 -209
- package/packages/shader-lab-react/src/renderer/pattern-atlas.ts +0 -133
- package/packages/shader-lab-react/src/renderer/pattern-pass.ts +0 -552
- package/packages/shader-lab-react/src/renderer/pipeline-manager.ts +0 -369
- package/packages/shader-lab-react/src/renderer/pixel-sorting-pass.ts +0 -277
- package/packages/shader-lab-react/src/renderer/shaders/tsl/color/tonemapping.ts +0 -87
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/common.ts +0 -31
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/curl-noise-3d.ts +0 -36
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/curl-noise-4d.ts +0 -36
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/fbm.ts +0 -13
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/perlin-noise-3d.ts +0 -96
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/ridge-noise.ts +0 -24
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/simplex-noise-3d.ts +0 -79
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/simplex-noise-4d.ts +0 -89
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/turbulence.ts +0 -56
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/value-noise-3d.ts +0 -32
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/voronoi-noise-3d.ts +0 -60
- package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.ts +0 -15
- package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.ts +0 -24
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/atan2.ts +0 -9
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-cos.ts +0 -10
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-div.ts +0 -11
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-log.ts +0 -7
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-mobius.ts +0 -12
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-pow.ts +0 -16
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-sin.ts +0 -10
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-sqrt.ts +0 -18
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-tan.ts +0 -12
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-to-polar.ts +0 -10
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/index.ts +0 -48
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/rotate.ts +0 -15
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/screen-aspect-uv.ts +0 -15
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-box-2d.ts +0 -6
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-diamond.ts +0 -6
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-rhombus.ts +0 -27
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-sphere.ts +0 -6
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/smax.ts +0 -7
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/smin.ts +0 -7
- package/packages/shader-lab-react/src/renderer/text-pass.ts +0 -176
- package/packages/shader-lab-react/src/runtime-clock.ts +0 -42
- package/packages/shader-lab-react/src/runtime-frame.ts +0 -29
- package/packages/shader-lab-react/src/shader-lab-composition.tsx +0 -163
- package/packages/shader-lab-react/src/timeline.ts +0 -283
- package/packages/shader-lab-react/src/types/editor.ts +0 -5
- package/packages/shader-lab-react/src/types.ts +0 -141
- package/packages/shader-lab-react/tsconfig.build.json +0 -8
- package/packages/shader-lab-react/tsconfig.json +0 -21
- package/postcss.config.mjs +0 -5
- package/public/assets/fonts/msdf/geist-mono/GeistMono-Regular-msdf-atlas.png +0 -0
- package/public/assets/fonts/msdf/geist-mono/GeistMono-Regular-msdf.json +0 -1412
- package/public/assets/patterns/bars/1.svg +0 -3
- package/public/assets/patterns/bars/2.svg +0 -3
- package/public/assets/patterns/bars/3.svg +0 -3
- package/public/assets/patterns/bars/4.svg +0 -3
- package/public/assets/patterns/bars/5.svg +0 -3
- package/public/assets/patterns/bars/6.svg +0 -3
- package/public/assets/patterns/candles/1.svg +0 -3
- package/public/assets/patterns/candles/2.svg +0 -3
- package/public/assets/patterns/candles/3.svg +0 -3
- package/public/assets/patterns/candles/4.svg +0 -3
- package/public/assets/patterns/shapes/1.svg +0 -3
- package/public/assets/patterns/shapes/2.svg +0 -3
- package/public/assets/patterns/shapes/3.svg +0 -3
- package/public/assets/patterns/shapes/4.svg +0 -4
- package/public/assets/patterns/shapes/5.svg +0 -3
- package/public/assets/patterns/shapes/6.svg +0 -4
- package/public/fonts/geist/Geist-Mono.woff2 +0 -0
- package/public/textures/blue-noise.png +0 -0
- package/public/textures/crt-mask.png +0 -0
- package/src/app/design/page.tsx +0 -398
- package/src/app/favicon.ico +0 -0
- package/src/app/globals.css +0 -280
- package/src/app/layout.tsx +0 -89
- package/src/app/page.tsx +0 -20
- package/src/app/robots.ts +0 -13
- package/src/app/sitemap.ts +0 -13
- package/src/components/editor/editor-canvas-viewport.tsx +0 -116
- package/src/components/editor/editor-export-dialog.tsx +0 -1177
- package/src/components/editor/editor-timeline-overlay.tsx +0 -983
- package/src/components/editor/editor-topbar.tsx +0 -287
- package/src/components/editor/layer-sidebar.tsx +0 -738
- package/src/components/editor/properties-sidebar-content.tsx +0 -574
- package/src/components/editor/properties-sidebar-fields.tsx +0 -389
- package/src/components/editor/properties-sidebar-utils.ts +0 -178
- package/src/components/editor/properties-sidebar.tsx +0 -421
- package/src/components/ui/button/index.tsx +0 -57
- package/src/components/ui/color-picker/index.tsx +0 -358
- package/src/components/ui/glass-panel/index.tsx +0 -45
- package/src/components/ui/icon-button/index.tsx +0 -46
- package/src/components/ui/select/index.tsx +0 -136
- package/src/components/ui/slider/index.tsx +0 -192
- package/src/components/ui/toggle/index.tsx +0 -34
- package/src/components/ui/typography/index.tsx +0 -61
- package/src/components/ui/xy-pad/index.tsx +0 -160
- package/src/features/editor/components/editor-export-dialog.module.css +0 -271
- package/src/hooks/use-editor-renderer.ts +0 -182
- package/src/lib/app.ts +0 -6
- package/src/lib/cn.ts +0 -7
- package/src/lib/easings.ts +0 -240
- package/src/lib/editor/config/layer-registry.ts +0 -2434
- package/src/lib/editor/custom-shader/shared.ts +0 -28
- package/src/lib/editor/export.ts +0 -420
- package/src/lib/editor/history.ts +0 -71
- package/src/lib/editor/layers.ts +0 -76
- package/src/lib/editor/parameter-schema.ts +0 -75
- package/src/lib/editor/project-file.ts +0 -145
- package/src/lib/editor/shader-export-snippet.ts +0 -37
- package/src/lib/editor/shader-export.ts +0 -315
- package/src/lib/editor/timeline/evaluate.ts +0 -252
- package/src/lib/editor/view-transform.ts +0 -58
- package/src/lib/fonts.ts +0 -28
- package/src/renderer/ascii-atlas.ts +0 -83
- package/src/renderer/ascii-pass.ts +0 -416
- package/src/renderer/blend-modes.ts +0 -229
- package/src/renderer/contracts.ts +0 -161
- package/src/renderer/create-webgpu-renderer.ts +0 -48
- package/src/renderer/crt-pass.ts +0 -1040
- package/src/renderer/custom-shader-pass.ts +0 -117
- package/src/renderer/custom-shader-runtime.ts +0 -309
- package/src/renderer/dither-textures.ts +0 -99
- package/src/renderer/dithering-pass.ts +0 -322
- package/src/renderer/gradient-pass.ts +0 -520
- package/src/renderer/halftone-pass.ts +0 -932
- package/src/renderer/ink-pass.ts +0 -683
- package/src/renderer/live-pass.ts +0 -194
- package/src/renderer/media-pass.ts +0 -187
- package/src/renderer/media-texture.ts +0 -66
- package/src/renderer/particle-grid-pass.ts +0 -389
- package/src/renderer/pass-node-factory.ts +0 -33
- package/src/renderer/pass-node.ts +0 -209
- package/src/renderer/pattern-atlas.ts +0 -97
- package/src/renderer/pattern-pass.ts +0 -552
- package/src/renderer/pipeline-manager.ts +0 -343
- package/src/renderer/pixel-sorting-pass.ts +0 -277
- package/src/renderer/project-clock.ts +0 -57
- package/src/renderer/shaders/tsl/color/tonemapping.ts +0 -86
- package/src/renderer/shaders/tsl/cosine-palette.ts +0 -8
- package/src/renderer/shaders/tsl/noise/common.ts +0 -30
- package/src/renderer/shaders/tsl/noise/curl-noise-3d.ts +0 -35
- package/src/renderer/shaders/tsl/noise/curl-noise-4d.ts +0 -35
- package/src/renderer/shaders/tsl/noise/fbm.ts +0 -12
- package/src/renderer/shaders/tsl/noise/perlin-noise-3d.ts +0 -97
- package/src/renderer/shaders/tsl/noise/ridge-noise.ts +0 -23
- package/src/renderer/shaders/tsl/noise/simplex-noise-3d.ts +0 -78
- package/src/renderer/shaders/tsl/noise/simplex-noise-4d.ts +0 -88
- package/src/renderer/shaders/tsl/noise/turbulence.ts +0 -55
- package/src/renderer/shaders/tsl/noise/value-noise-3d.ts +0 -31
- package/src/renderer/shaders/tsl/noise/voronoi-noise-3d.ts +0 -59
- package/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.ts +0 -14
- package/src/renderer/shaders/tsl/patterns/bloom.ts +0 -10
- package/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.ts +0 -23
- package/src/renderer/shaders/tsl/patterns/grain-texture-pattern.ts +0 -8
- package/src/renderer/shaders/tsl/patterns/repeating-pattern.ts +0 -10
- package/src/renderer/shaders/tsl/utils/atan2.ts +0 -8
- package/src/renderer/shaders/tsl/utils/complex-conj.ts +0 -8
- package/src/renderer/shaders/tsl/utils/complex-cos.ts +0 -9
- package/src/renderer/shaders/tsl/utils/complex-div.ts +0 -10
- package/src/renderer/shaders/tsl/utils/complex-log.ts +0 -6
- package/src/renderer/shaders/tsl/utils/complex-mobius.ts +0 -11
- package/src/renderer/shaders/tsl/utils/complex-mul.ts +0 -8
- package/src/renderer/shaders/tsl/utils/complex-pow.ts +0 -15
- package/src/renderer/shaders/tsl/utils/complex-sin.ts +0 -9
- package/src/renderer/shaders/tsl/utils/complex-sqrt.ts +0 -17
- package/src/renderer/shaders/tsl/utils/complex-tan.ts +0 -11
- package/src/renderer/shaders/tsl/utils/complex-to-polar.ts +0 -9
- package/src/renderer/shaders/tsl/utils/hyperbolic.ts +0 -19
- package/src/renderer/shaders/tsl/utils/index.ts +0 -47
- package/src/renderer/shaders/tsl/utils/rotate.ts +0 -14
- package/src/renderer/shaders/tsl/utils/screen-aspect-uv.ts +0 -14
- package/src/renderer/shaders/tsl/utils/sd-box-2d.ts +0 -5
- package/src/renderer/shaders/tsl/utils/sd-diamond.ts +0 -5
- package/src/renderer/shaders/tsl/utils/sd-rhombus.ts +0 -26
- package/src/renderer/shaders/tsl/utils/sd-sphere.ts +0 -5
- package/src/renderer/shaders/tsl/utils/smax.ts +0 -7
- package/src/renderer/shaders/tsl/utils/smin.ts +0 -6
- package/src/renderer/text-pass.ts +0 -176
- package/src/store/asset-store.ts +0 -193
- package/src/store/editor-store.ts +0 -223
- package/src/store/history-store.ts +0 -172
- package/src/store/index.ts +0 -31
- package/src/store/layer-store.ts +0 -675
- package/src/store/timeline-store.ts +0 -572
- package/src/types/assets.d.ts +0 -6
- package/src/types/css.d.ts +0 -21
- package/src/types/editor.ts +0 -357
- package/src/types/react.d.ts +0 -15
- package/src/types/three-tsl.d.ts +0 -146
- package/src/types/three-webgpu.d.ts +0 -51
- package/tsconfig.json +0 -49
- /package/{packages/shader-lab-react/assets → assets}/patterns/bars/1.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/bars/2.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/bars/3.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/bars/4.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/bars/5.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/bars/6.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/candles/1.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/candles/2.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/candles/3.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/candles/4.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/1.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/2.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/3.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/4.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/5.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/6.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/textures/blue-noise.png +0 -0
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
import { bloom } from "three/examples/jsm/tsl/display/BloomNode.js";
|
|
2
|
+
import { abs, clamp, cos, float, floor, max, min, mix, screenSize, select, sin, smoothstep, texture as tslTexture, uniform, uv, vec2, vec3, vec4, } from "three/tsl";
|
|
3
|
+
import * as THREE from "three/webgpu";
|
|
4
|
+
import { PassNode } from "./pass-node.js";
|
|
5
|
+
import { grainTexturePattern } from "./shaders/tsl/patterns/grain-texture-pattern.js";
|
|
6
|
+
function clamp01(value) {
|
|
7
|
+
return Math.max(0, Math.min(1, value));
|
|
8
|
+
}
|
|
9
|
+
function hexToRgb(hex) {
|
|
10
|
+
const normalized = hex.trim().replace("#", "");
|
|
11
|
+
const value = normalized.length === 3
|
|
12
|
+
? normalized
|
|
13
|
+
.split("")
|
|
14
|
+
.map((entry) => `${entry}${entry}`)
|
|
15
|
+
.join("")
|
|
16
|
+
: normalized.padEnd(6, "0").slice(0, 6);
|
|
17
|
+
return [
|
|
18
|
+
Number.parseInt(value.slice(0, 2), 16) / 255,
|
|
19
|
+
Number.parseInt(value.slice(2, 4), 16) / 255,
|
|
20
|
+
Number.parseInt(value.slice(4, 6), 16) / 255,
|
|
21
|
+
];
|
|
22
|
+
}
|
|
23
|
+
export class HalftonePass extends PassNode {
|
|
24
|
+
bloomEnabled = false;
|
|
25
|
+
bloomNode = null;
|
|
26
|
+
colorMode = "cmyk";
|
|
27
|
+
cmykBlendMode = "subtractive";
|
|
28
|
+
spacingUniform;
|
|
29
|
+
dotSizeUniform;
|
|
30
|
+
dotMinUniform;
|
|
31
|
+
shapeUniform;
|
|
32
|
+
angleUniform;
|
|
33
|
+
contrastUniform;
|
|
34
|
+
softnessUniform;
|
|
35
|
+
invertUniform;
|
|
36
|
+
inkRedUniform;
|
|
37
|
+
inkGreenUniform;
|
|
38
|
+
inkBlueUniform;
|
|
39
|
+
duotoneLightUniform;
|
|
40
|
+
duotoneDarkUniform;
|
|
41
|
+
customBgColorUniform;
|
|
42
|
+
customColorCountUniform;
|
|
43
|
+
customLuminanceBiasUniform;
|
|
44
|
+
customColor1Uniform;
|
|
45
|
+
customColor2Uniform;
|
|
46
|
+
customColor3Uniform;
|
|
47
|
+
customColor4Uniform;
|
|
48
|
+
bloomIntensityUniform;
|
|
49
|
+
bloomRadiusUniform;
|
|
50
|
+
bloomSoftnessUniform;
|
|
51
|
+
bloomThresholdUniform;
|
|
52
|
+
cyanAngleUniform;
|
|
53
|
+
magentaAngleUniform;
|
|
54
|
+
yellowAngleUniform;
|
|
55
|
+
keyAngleUniform;
|
|
56
|
+
paperRedUniform;
|
|
57
|
+
paperGreenUniform;
|
|
58
|
+
paperBlueUniform;
|
|
59
|
+
paperGrainUniform;
|
|
60
|
+
gcrUniform;
|
|
61
|
+
registrationUniform;
|
|
62
|
+
inkCyanUniform;
|
|
63
|
+
inkMagentaUniform;
|
|
64
|
+
inkYellowUniform;
|
|
65
|
+
inkKeyUniform;
|
|
66
|
+
dotGainUniform;
|
|
67
|
+
dotMorphUniform;
|
|
68
|
+
sampleNodes = [];
|
|
69
|
+
constructor(layerId) {
|
|
70
|
+
super(layerId);
|
|
71
|
+
this.spacingUniform = uniform(5);
|
|
72
|
+
this.dotSizeUniform = uniform(1.0);
|
|
73
|
+
this.dotMinUniform = uniform(0.0);
|
|
74
|
+
this.shapeUniform = uniform(0);
|
|
75
|
+
this.angleUniform = uniform((28 * Math.PI) / 180);
|
|
76
|
+
this.contrastUniform = uniform(1.0);
|
|
77
|
+
this.softnessUniform = uniform(0.25);
|
|
78
|
+
this.invertUniform = uniform(0);
|
|
79
|
+
const [inkR, inkG, inkB] = hexToRgb("#0d1014");
|
|
80
|
+
this.inkRedUniform = uniform(inkR);
|
|
81
|
+
this.inkGreenUniform = uniform(inkG);
|
|
82
|
+
this.inkBlueUniform = uniform(inkB);
|
|
83
|
+
this.duotoneLightUniform = uniform(new THREE.Vector3(0.96, 0.96, 0.94));
|
|
84
|
+
this.duotoneDarkUniform = uniform(new THREE.Vector3(0.11, 0.11, 0.11));
|
|
85
|
+
const [customBgR, customBgG, customBgB] = hexToRgb("#F5F5F0");
|
|
86
|
+
this.customBgColorUniform = uniform(new THREE.Vector3(customBgR, customBgG, customBgB));
|
|
87
|
+
this.customColorCountUniform = uniform(4);
|
|
88
|
+
this.customLuminanceBiasUniform = uniform(0);
|
|
89
|
+
const [custom1R, custom1G, custom1B] = hexToRgb("#161616");
|
|
90
|
+
this.customColor1Uniform = uniform(new THREE.Vector3(custom1R, custom1G, custom1B));
|
|
91
|
+
const [custom2R, custom2G, custom2B] = hexToRgb("#595959");
|
|
92
|
+
this.customColor2Uniform = uniform(new THREE.Vector3(custom2R, custom2G, custom2B));
|
|
93
|
+
const [custom3R, custom3G, custom3B] = hexToRgb("#A0A0A0");
|
|
94
|
+
this.customColor3Uniform = uniform(new THREE.Vector3(custom3R, custom3G, custom3B));
|
|
95
|
+
const [custom4R, custom4G, custom4B] = hexToRgb("#E8E8E8");
|
|
96
|
+
this.customColor4Uniform = uniform(new THREE.Vector3(custom4R, custom4G, custom4B));
|
|
97
|
+
this.bloomIntensityUniform = uniform(1.25);
|
|
98
|
+
this.bloomRadiusUniform = uniform(6);
|
|
99
|
+
this.bloomSoftnessUniform = uniform(0.35);
|
|
100
|
+
this.bloomThresholdUniform = uniform(0.6);
|
|
101
|
+
this.cyanAngleUniform = uniform((15 * Math.PI) / 180);
|
|
102
|
+
this.magentaAngleUniform = uniform((75 * Math.PI) / 180);
|
|
103
|
+
this.yellowAngleUniform = uniform(0);
|
|
104
|
+
this.keyAngleUniform = uniform((45 * Math.PI) / 180);
|
|
105
|
+
const [paperR, paperG, paperB] = hexToRgb("#F5F5F0");
|
|
106
|
+
this.paperRedUniform = uniform(paperR);
|
|
107
|
+
this.paperGreenUniform = uniform(paperG);
|
|
108
|
+
this.paperBlueUniform = uniform(paperB);
|
|
109
|
+
this.paperGrainUniform = uniform(0.15);
|
|
110
|
+
this.gcrUniform = uniform(0.5);
|
|
111
|
+
this.registrationUniform = uniform(0);
|
|
112
|
+
const [cyanR, cyanG, cyanB] = hexToRgb("#00AEEF");
|
|
113
|
+
this.inkCyanUniform = uniform(new THREE.Vector3(cyanR, cyanG, cyanB));
|
|
114
|
+
const [magR, magG, magB] = hexToRgb("#EC008C");
|
|
115
|
+
this.inkMagentaUniform = uniform(new THREE.Vector3(magR, magG, magB));
|
|
116
|
+
const [yelR, yelG, yelB] = hexToRgb("#FFF200");
|
|
117
|
+
this.inkYellowUniform = uniform(new THREE.Vector3(yelR, yelG, yelB));
|
|
118
|
+
const [keyR, keyG, keyB] = hexToRgb("#1a1a1a");
|
|
119
|
+
this.inkKeyUniform = uniform(new THREE.Vector3(keyR, keyG, keyB));
|
|
120
|
+
this.dotGainUniform = uniform(0);
|
|
121
|
+
this.dotMorphUniform = uniform(0);
|
|
122
|
+
this.rebuildEffectNode();
|
|
123
|
+
}
|
|
124
|
+
render(renderer, inputTexture, outputTarget, time, delta) {
|
|
125
|
+
for (const node of this.sampleNodes) {
|
|
126
|
+
node.value = inputTexture;
|
|
127
|
+
}
|
|
128
|
+
super.render(renderer, inputTexture, outputTarget, time, delta);
|
|
129
|
+
}
|
|
130
|
+
updateParams(params) {
|
|
131
|
+
this.spacingUniform.value =
|
|
132
|
+
typeof params.spacing === "number" ? Math.max(2, params.spacing) : 12;
|
|
133
|
+
this.dotSizeUniform.value =
|
|
134
|
+
typeof params.dotSize === "number" ? params.dotSize : 0.8;
|
|
135
|
+
this.dotMinUniform.value =
|
|
136
|
+
typeof params.dotMin === "number" ? params.dotMin : 0;
|
|
137
|
+
this.contrastUniform.value =
|
|
138
|
+
typeof params.contrast === "number" ? params.contrast : 1;
|
|
139
|
+
this.softnessUniform.value =
|
|
140
|
+
typeof params.softness === "number" ? params.softness : 0.25;
|
|
141
|
+
this.invertUniform.value = params.invertLuma === true ? 1 : 0;
|
|
142
|
+
this.angleUniform.value =
|
|
143
|
+
typeof params.angle === "number" ? (params.angle * Math.PI) / 180 : 0;
|
|
144
|
+
const shapeMap = {
|
|
145
|
+
circle: 0,
|
|
146
|
+
square: 1,
|
|
147
|
+
diamond: 2,
|
|
148
|
+
line: 3,
|
|
149
|
+
};
|
|
150
|
+
this.shapeUniform.value = shapeMap[params.shape] ?? 0;
|
|
151
|
+
if (typeof params.ink === "string") {
|
|
152
|
+
const [r, g, b] = hexToRgb(params.ink);
|
|
153
|
+
this.inkRedUniform.value = r;
|
|
154
|
+
this.inkGreenUniform.value = g;
|
|
155
|
+
this.inkBlueUniform.value = b;
|
|
156
|
+
}
|
|
157
|
+
if (typeof params.duotoneLight === "string") {
|
|
158
|
+
const [r, g, b] = hexToRgb(params.duotoneLight);
|
|
159
|
+
this.duotoneLightUniform.value.set(r, g, b);
|
|
160
|
+
}
|
|
161
|
+
if (typeof params.duotoneDark === "string") {
|
|
162
|
+
const [r, g, b] = hexToRgb(params.duotoneDark);
|
|
163
|
+
this.duotoneDarkUniform.value.set(r, g, b);
|
|
164
|
+
}
|
|
165
|
+
if (typeof params.customBgColor === "string") {
|
|
166
|
+
const [r, g, b] = hexToRgb(params.customBgColor);
|
|
167
|
+
this.customBgColorUniform.value.set(r, g, b);
|
|
168
|
+
}
|
|
169
|
+
if (typeof params.customColorCount === "number") {
|
|
170
|
+
this.customColorCountUniform.value = Math.min(4, Math.max(2, Math.round(params.customColorCount)));
|
|
171
|
+
}
|
|
172
|
+
if (typeof params.customLuminanceBias === "number") {
|
|
173
|
+
this.customLuminanceBiasUniform.value = Math.min(1, Math.max(-1, params.customLuminanceBias));
|
|
174
|
+
}
|
|
175
|
+
if (typeof params.customColor1 === "string") {
|
|
176
|
+
const [r, g, b] = hexToRgb(params.customColor1);
|
|
177
|
+
this.customColor1Uniform.value.set(r, g, b);
|
|
178
|
+
}
|
|
179
|
+
if (typeof params.customColor2 === "string") {
|
|
180
|
+
const [r, g, b] = hexToRgb(params.customColor2);
|
|
181
|
+
this.customColor2Uniform.value.set(r, g, b);
|
|
182
|
+
}
|
|
183
|
+
if (typeof params.customColor3 === "string") {
|
|
184
|
+
const [r, g, b] = hexToRgb(params.customColor3);
|
|
185
|
+
this.customColor3Uniform.value.set(r, g, b);
|
|
186
|
+
}
|
|
187
|
+
if (typeof params.customColor4 === "string") {
|
|
188
|
+
const [r, g, b] = hexToRgb(params.customColor4);
|
|
189
|
+
this.customColor4Uniform.value.set(r, g, b);
|
|
190
|
+
}
|
|
191
|
+
if (typeof params.cyanAngle === "number") {
|
|
192
|
+
this.cyanAngleUniform.value = (params.cyanAngle * Math.PI) / 180;
|
|
193
|
+
}
|
|
194
|
+
if (typeof params.magentaAngle === "number") {
|
|
195
|
+
this.magentaAngleUniform.value = (params.magentaAngle * Math.PI) / 180;
|
|
196
|
+
}
|
|
197
|
+
if (typeof params.yellowAngle === "number") {
|
|
198
|
+
this.yellowAngleUniform.value = (params.yellowAngle * Math.PI) / 180;
|
|
199
|
+
}
|
|
200
|
+
if (typeof params.keyAngle === "number") {
|
|
201
|
+
this.keyAngleUniform.value = (params.keyAngle * Math.PI) / 180;
|
|
202
|
+
}
|
|
203
|
+
if (typeof params.paperColor === "string") {
|
|
204
|
+
const [r, g, b] = hexToRgb(params.paperColor);
|
|
205
|
+
this.paperRedUniform.value = r;
|
|
206
|
+
this.paperGreenUniform.value = g;
|
|
207
|
+
this.paperBlueUniform.value = b;
|
|
208
|
+
}
|
|
209
|
+
if (typeof params.paperGrain === "number") {
|
|
210
|
+
this.paperGrainUniform.value = params.paperGrain;
|
|
211
|
+
}
|
|
212
|
+
if (typeof params.gcr === "number") {
|
|
213
|
+
this.gcrUniform.value = params.gcr;
|
|
214
|
+
}
|
|
215
|
+
if (typeof params.registration === "number") {
|
|
216
|
+
this.registrationUniform.value = params.registration;
|
|
217
|
+
}
|
|
218
|
+
if (typeof params.dotGain === "number") {
|
|
219
|
+
this.dotGainUniform.value = params.dotGain;
|
|
220
|
+
}
|
|
221
|
+
if (typeof params.dotMorph === "number") {
|
|
222
|
+
this.dotMorphUniform.value = params.dotMorph;
|
|
223
|
+
}
|
|
224
|
+
const nextBloomIntensity = typeof params.bloomIntensity === "number"
|
|
225
|
+
? Math.max(0, params.bloomIntensity)
|
|
226
|
+
: 1.25;
|
|
227
|
+
const nextBloomThreshold = typeof params.bloomThreshold === "number"
|
|
228
|
+
? clamp01(params.bloomThreshold)
|
|
229
|
+
: 0.6;
|
|
230
|
+
const nextBloomRadius = typeof params.bloomRadius === "number"
|
|
231
|
+
? Math.max(0, params.bloomRadius)
|
|
232
|
+
: 6;
|
|
233
|
+
const nextBloomSoftness = typeof params.bloomSoftness === "number"
|
|
234
|
+
? clamp01(params.bloomSoftness)
|
|
235
|
+
: 0.35;
|
|
236
|
+
this.bloomIntensityUniform.value = nextBloomIntensity;
|
|
237
|
+
this.bloomRadiusUniform.value = nextBloomRadius;
|
|
238
|
+
this.bloomSoftnessUniform.value = nextBloomSoftness;
|
|
239
|
+
this.bloomThresholdUniform.value = nextBloomThreshold;
|
|
240
|
+
if (typeof params.inkCyan === "string") {
|
|
241
|
+
const [r, g, b] = hexToRgb(params.inkCyan);
|
|
242
|
+
this.inkCyanUniform.value.set(r, g, b);
|
|
243
|
+
}
|
|
244
|
+
if (typeof params.inkMagenta === "string") {
|
|
245
|
+
const [r, g, b] = hexToRgb(params.inkMagenta);
|
|
246
|
+
this.inkMagentaUniform.value.set(r, g, b);
|
|
247
|
+
}
|
|
248
|
+
if (typeof params.inkYellow === "string") {
|
|
249
|
+
const [r, g, b] = hexToRgb(params.inkYellow);
|
|
250
|
+
this.inkYellowUniform.value.set(r, g, b);
|
|
251
|
+
}
|
|
252
|
+
if (typeof params.inkKey === "string") {
|
|
253
|
+
const [r, g, b] = hexToRgb(params.inkKey);
|
|
254
|
+
this.inkKeyUniform.value.set(r, g, b);
|
|
255
|
+
}
|
|
256
|
+
let needsRebuild = false;
|
|
257
|
+
const nextColorMode = parseColorMode(params.colorMode);
|
|
258
|
+
if (nextColorMode !== this.colorMode) {
|
|
259
|
+
this.colorMode = nextColorMode;
|
|
260
|
+
needsRebuild = true;
|
|
261
|
+
}
|
|
262
|
+
const resolvedBloomEnabled = nextColorMode === "custom" && params.bloomEnabled === true;
|
|
263
|
+
if (resolvedBloomEnabled !== this.bloomEnabled) {
|
|
264
|
+
this.bloomEnabled = resolvedBloomEnabled;
|
|
265
|
+
needsRebuild = true;
|
|
266
|
+
}
|
|
267
|
+
const nextCmykBlend = parseCmykBlend(params.cmykBlend);
|
|
268
|
+
if (nextCmykBlend !== this.cmykBlendMode) {
|
|
269
|
+
this.cmykBlendMode = nextCmykBlend;
|
|
270
|
+
needsRebuild = true;
|
|
271
|
+
}
|
|
272
|
+
if (needsRebuild) {
|
|
273
|
+
this.rebuildEffectNode();
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
if (this.bloomNode) {
|
|
277
|
+
this.bloomNode.strength.value = nextBloomIntensity;
|
|
278
|
+
this.bloomNode.radius.value = this.normalizeBloomRadius(nextBloomRadius);
|
|
279
|
+
this.bloomNode.threshold.value = nextBloomThreshold;
|
|
280
|
+
this.bloomNode.smoothWidth.value =
|
|
281
|
+
this.normalizeBloomSoftness(nextBloomSoftness);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
dispose() {
|
|
285
|
+
this.disposeBloomNode();
|
|
286
|
+
super.dispose();
|
|
287
|
+
}
|
|
288
|
+
buildEffectNode() {
|
|
289
|
+
if (!this.spacingUniform)
|
|
290
|
+
return this.inputNode;
|
|
291
|
+
this.disposeBloomNode();
|
|
292
|
+
this.bloomNode = null;
|
|
293
|
+
this.sampleNodes = [];
|
|
294
|
+
const renderTargetUv = vec2(uv().x, float(1).sub(uv().y));
|
|
295
|
+
const pixCoord = renderTargetUv.mul(screenSize);
|
|
296
|
+
if (this.colorMode === "cmyk") {
|
|
297
|
+
return this.buildCmykNode(pixCoord, renderTargetUv);
|
|
298
|
+
}
|
|
299
|
+
return this.buildSingleChannelNode(pixCoord, renderTargetUv);
|
|
300
|
+
}
|
|
301
|
+
buildSingleChannelNode(pixCoord, _renderTargetUv) {
|
|
302
|
+
const grid = this.buildHalftoneGrid(pixCoord, this.angleUniform, (sample) => {
|
|
303
|
+
return float(sample.r)
|
|
304
|
+
.mul(0.2126)
|
|
305
|
+
.add(float(sample.g).mul(0.7152))
|
|
306
|
+
.add(float(sample.b).mul(0.0722));
|
|
307
|
+
});
|
|
308
|
+
const darkVec = vec3(float(this.duotoneDarkUniform.x), float(this.duotoneDarkUniform.y), float(this.duotoneDarkUniform.z));
|
|
309
|
+
const lightVec = vec3(float(this.duotoneLightUniform.x), float(this.duotoneLightUniform.y), float(this.duotoneLightUniform.z));
|
|
310
|
+
const customBgVec = vec3(float(this.customBgColorUniform.x), float(this.customBgColorUniform.y), float(this.customBgColorUniform.z));
|
|
311
|
+
const customColor1Vec = vec3(float(this.customColor1Uniform.x), float(this.customColor1Uniform.y), float(this.customColor1Uniform.z));
|
|
312
|
+
const customColor2Vec = vec3(float(this.customColor2Uniform.x), float(this.customColor2Uniform.y), float(this.customColor2Uniform.z));
|
|
313
|
+
const customColor3Vec = vec3(float(this.customColor3Uniform.x), float(this.customColor3Uniform.y), float(this.customColor3Uniform.z));
|
|
314
|
+
const customColor4Vec = vec3(float(this.customColor4Uniform.x), float(this.customColor4Uniform.y), float(this.customColor4Uniform.z));
|
|
315
|
+
const customColorCount = clamp(float(this.customColorCountUniform), float(2), float(4));
|
|
316
|
+
const customLuminance = clamp(grid.luma.add(float(this.customLuminanceBiasUniform).mul(0.35)), float(0), float(1));
|
|
317
|
+
let dotColor;
|
|
318
|
+
let bgColor;
|
|
319
|
+
let emissiveColor = vec3(float(0), float(0), float(0));
|
|
320
|
+
switch (this.colorMode) {
|
|
321
|
+
case "monochrome": {
|
|
322
|
+
const inkVec = vec3(this.inkRedUniform, this.inkGreenUniform, this.inkBlueUniform);
|
|
323
|
+
dotColor = vec3(grid.luma, grid.luma, grid.luma).mul(inkVec);
|
|
324
|
+
bgColor = vec3(0, 0, 0);
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
case "duotone":
|
|
328
|
+
dotColor = mix(darkVec, lightVec, grid.luma);
|
|
329
|
+
bgColor = darkVec;
|
|
330
|
+
break;
|
|
331
|
+
case "custom":
|
|
332
|
+
dotColor = select(customColorCount.lessThan(float(2.5)), select(customLuminance.lessThan(float(0.5)), customColor1Vec, customColor2Vec), select(customColorCount.lessThan(float(3.5)), select(customLuminance.lessThan(float(1 / 3)), customColor1Vec, select(customLuminance.lessThan(float(2 / 3)), customColor2Vec, customColor3Vec)), select(customLuminance.lessThan(float(0.25)), customColor1Vec, select(customLuminance.lessThan(float(0.5)), customColor2Vec, select(customLuminance.lessThan(float(0.75)), customColor3Vec, customColor4Vec)))));
|
|
333
|
+
bgColor = customBgVec;
|
|
334
|
+
emissiveColor = dotColor.mul(grid.coverage);
|
|
335
|
+
break;
|
|
336
|
+
default:
|
|
337
|
+
dotColor = grid.color;
|
|
338
|
+
bgColor = vec3(1, 1, 1);
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
const baseColor = mix(bgColor, dotColor, grid.coverage);
|
|
342
|
+
if (!(this.colorMode === "custom" && this.bloomEnabled)) {
|
|
343
|
+
return vec4(baseColor, float(1));
|
|
344
|
+
}
|
|
345
|
+
const bloomInput = vec4(emissiveColor, float(1));
|
|
346
|
+
this.bloomNode = bloom(bloomInput, this.bloomIntensityUniform.value, this.normalizeBloomRadius(this.bloomRadiusUniform.value), this.bloomThresholdUniform.value);
|
|
347
|
+
this.bloomNode.smoothWidth.value = this.normalizeBloomSoftness(this.bloomSoftnessUniform.value);
|
|
348
|
+
return vec4(clamp(baseColor.add(this.getBloomTextureNode().rgb), vec3(float(0), float(0), float(0)), vec3(float(1), float(1), float(1))), float(1));
|
|
349
|
+
}
|
|
350
|
+
buildCmykNode(pixCoord, renderTargetUv) {
|
|
351
|
+
const gcrAmount = this.gcrUniform;
|
|
352
|
+
const extractCyan = (sample) => {
|
|
353
|
+
const maxK = float(1).sub(max(max(float(sample.r), float(sample.g)), float(sample.b)));
|
|
354
|
+
const k = maxK.mul(gcrAmount);
|
|
355
|
+
const oneMinusK = max(float(1).sub(k), float(0.001));
|
|
356
|
+
return clamp(float(1).sub(float(sample.r)).sub(k).div(oneMinusK), float(0), float(1));
|
|
357
|
+
};
|
|
358
|
+
const extractMagenta = (sample) => {
|
|
359
|
+
const maxK = float(1).sub(max(max(float(sample.r), float(sample.g)), float(sample.b)));
|
|
360
|
+
const k = maxK.mul(gcrAmount);
|
|
361
|
+
const oneMinusK = max(float(1).sub(k), float(0.001));
|
|
362
|
+
return clamp(float(1).sub(float(sample.g)).sub(k).div(oneMinusK), float(0), float(1));
|
|
363
|
+
};
|
|
364
|
+
const extractYellow = (sample) => {
|
|
365
|
+
const maxK = float(1).sub(max(max(float(sample.r), float(sample.g)), float(sample.b)));
|
|
366
|
+
const k = maxK.mul(gcrAmount);
|
|
367
|
+
const oneMinusK = max(float(1).sub(k), float(0.001));
|
|
368
|
+
return clamp(float(1).sub(float(sample.b)).sub(k).div(oneMinusK), float(0), float(1));
|
|
369
|
+
};
|
|
370
|
+
const extractKey = (sample) => {
|
|
371
|
+
const maxK = float(1).sub(max(max(float(sample.r), float(sample.g)), float(sample.b)));
|
|
372
|
+
return maxK.mul(gcrAmount);
|
|
373
|
+
};
|
|
374
|
+
const reg = float(this.registrationUniform);
|
|
375
|
+
const cyanCoord = pixCoord.add(vec2(reg, float(0)));
|
|
376
|
+
const magentaCoord = pixCoord.add(vec2(reg.mul(-0.5), reg.mul(0.866)));
|
|
377
|
+
const yellowCoord = pixCoord.add(vec2(reg.mul(-0.5), reg.mul(-0.866)));
|
|
378
|
+
const cyanGrid = this.buildHalftoneGrid(cyanCoord, this.cyanAngleUniform, extractCyan);
|
|
379
|
+
const magentaGrid = this.buildHalftoneGrid(magentaCoord, this.magentaAngleUniform, extractMagenta);
|
|
380
|
+
const yellowGrid = this.buildHalftoneGrid(yellowCoord, this.yellowAngleUniform, extractYellow);
|
|
381
|
+
const keyGrid = this.buildHalftoneGrid(pixCoord, this.keyAngleUniform, extractKey);
|
|
382
|
+
const grain = grainTexturePattern(renderTargetUv.mul(screenSize));
|
|
383
|
+
const grainOffset = grain.sub(0.5).mul(this.paperGrainUniform);
|
|
384
|
+
const paperR = clamp(float(this.paperRedUniform).add(grainOffset), float(0), float(1));
|
|
385
|
+
const paperG = clamp(float(this.paperGreenUniform).add(grainOffset), float(0), float(1));
|
|
386
|
+
const paperB = clamp(float(this.paperBlueUniform).add(grainOffset), float(0), float(1));
|
|
387
|
+
const inkC = vec3(float(this.inkCyanUniform.x), float(this.inkCyanUniform.y), float(this.inkCyanUniform.z));
|
|
388
|
+
const inkM = vec3(float(this.inkMagentaUniform.x), float(this.inkMagentaUniform.y), float(this.inkMagentaUniform.z));
|
|
389
|
+
const inkY = vec3(float(this.inkYellowUniform.x), float(this.inkYellowUniform.y), float(this.inkYellowUniform.z));
|
|
390
|
+
const inkK = vec3(float(this.inkKeyUniform.x), float(this.inkKeyUniform.y), float(this.inkKeyUniform.z));
|
|
391
|
+
const transC = mix(vec3(1, 1, 1), inkC, cyanGrid.coverage);
|
|
392
|
+
const transM = mix(vec3(1, 1, 1), inkM, magentaGrid.coverage);
|
|
393
|
+
const transY = mix(vec3(1, 1, 1), inkY, yellowGrid.coverage);
|
|
394
|
+
const transK = mix(vec3(1, 1, 1), inkK, keyGrid.coverage);
|
|
395
|
+
const paper = vec3(paperR, paperG, paperB);
|
|
396
|
+
let finalColor;
|
|
397
|
+
if (this.cmykBlendMode === "overprint") {
|
|
398
|
+
finalColor = vec3(clamp(paper.x.mul(transC.x).mul(transM.x).mul(transY.x).mul(transK.x), float(0), float(1)), clamp(paper.y.mul(transC.y).mul(transM.y).mul(transY.y).mul(transK.y), float(0), float(1)), clamp(paper.z.mul(transC.z).mul(transM.z).mul(transY.z).mul(transK.z), float(0), float(1)));
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
const layerC = vec3(paper.x.mul(transC.x), paper.y.mul(transC.y), paper.z.mul(transC.z));
|
|
402
|
+
const layerM = vec3(paper.x.mul(transM.x), paper.y.mul(transM.y), paper.z.mul(transM.z));
|
|
403
|
+
const layerY = vec3(paper.x.mul(transY.x), paper.y.mul(transY.y), paper.z.mul(transY.z));
|
|
404
|
+
const layerK = vec3(paper.x.mul(transK.x), paper.y.mul(transK.y), paper.z.mul(transK.z));
|
|
405
|
+
finalColor = vec3(clamp(min(min(layerC.x, layerM.x), min(layerY.x, layerK.x)), float(0), float(1)), clamp(min(min(layerC.y, layerM.y), min(layerY.y, layerK.y)), float(0), float(1)), clamp(min(min(layerC.z, layerM.z), min(layerY.z, layerK.z)), float(0), float(1)));
|
|
406
|
+
}
|
|
407
|
+
return vec4(finalColor, float(1));
|
|
408
|
+
}
|
|
409
|
+
buildHalftoneGrid(pixCoord, angleRadians, channelExtractor) {
|
|
410
|
+
const cosA = float(cos(angleRadians));
|
|
411
|
+
const sinA = float(sin(angleRadians));
|
|
412
|
+
const rotX = cosA.mul(pixCoord.x).add(sinA.mul(pixCoord.y));
|
|
413
|
+
const rotY = cosA.mul(pixCoord.y).sub(sinA.mul(pixCoord.x));
|
|
414
|
+
const ccrX = floor(float(rotX.div(this.spacingUniform)).add(0.5)).mul(this.spacingUniform);
|
|
415
|
+
const ccrY = floor(float(rotY.div(this.spacingUniform)).add(0.5)).mul(this.spacingUniform);
|
|
416
|
+
const aa = max(float(0.5), float(this.softnessUniform).mul(this.spacingUniform).mul(0.3));
|
|
417
|
+
let accCov = float(0);
|
|
418
|
+
let accR = float(0);
|
|
419
|
+
let accG = float(0);
|
|
420
|
+
let accB = float(0);
|
|
421
|
+
let accLuma = float(0);
|
|
422
|
+
let accField = float(0);
|
|
423
|
+
let accWeightR = float(0);
|
|
424
|
+
let accWeightG = float(0);
|
|
425
|
+
let accWeightB = float(0);
|
|
426
|
+
let accWeightLuma = float(0);
|
|
427
|
+
const morph = clamp(float(this.dotMorphUniform), float(0), float(1));
|
|
428
|
+
const fieldReach = this.spacingUniform.mul(morph).mul(0.6);
|
|
429
|
+
for (let dj = -1; dj <= 1; dj++) {
|
|
430
|
+
for (let di = -1; di <= 1; di++) {
|
|
431
|
+
const cellRX = di === 0 ? ccrX : float(ccrX.add(this.spacingUniform.mul(float(di))));
|
|
432
|
+
const cellRY = dj === 0 ? ccrY : float(ccrY.add(this.spacingUniform.mul(float(dj))));
|
|
433
|
+
const cellSX = cosA.mul(cellRX).sub(sinA.mul(cellRY));
|
|
434
|
+
const cellSY = sinA.mul(cellRX).add(cosA.mul(cellRY));
|
|
435
|
+
const cellUV = vec2(cellSX, cellSY).div(screenSize);
|
|
436
|
+
const sNode = tslTexture(new THREE.Texture(), cellUV);
|
|
437
|
+
this.sampleNodes.push(sNode);
|
|
438
|
+
const channelValue = channelExtractor(sNode);
|
|
439
|
+
const clampedValue = clamp(channelValue.mul(this.contrastUniform), float(0), float(1));
|
|
440
|
+
const effectiveValue = select(this.invertUniform.greaterThan(float(0.5)), float(1).sub(clampedValue), clampedValue);
|
|
441
|
+
const radius = float(this.dotMinUniform)
|
|
442
|
+
.add(effectiveValue.mul(this.dotSizeUniform))
|
|
443
|
+
.add(this.dotGainUniform)
|
|
444
|
+
.mul(this.spacingUniform)
|
|
445
|
+
.mul(0.5);
|
|
446
|
+
const dx = rotX.sub(cellRX);
|
|
447
|
+
const dy = rotY.sub(cellRY);
|
|
448
|
+
const dCircle = vec2(dx, dy).length();
|
|
449
|
+
const dSquare = max(abs(dx), abs(dy));
|
|
450
|
+
const dDiamond = abs(dx).add(abs(dy));
|
|
451
|
+
const dLine = abs(dy);
|
|
452
|
+
const dist = select(this.shapeUniform.lessThan(float(0.5)), dCircle, select(this.shapeUniform.lessThan(float(1.5)), dSquare, select(this.shapeUniform.lessThan(float(2.5)), dDiamond, dLine)));
|
|
453
|
+
const cellCov = smoothstep(radius.add(aa), radius.sub(aa), dist);
|
|
454
|
+
const isNew = cellCov.greaterThan(accCov);
|
|
455
|
+
const maxR = select(isNew, float(sNode.r), accR);
|
|
456
|
+
const maxG = select(isNew, float(sNode.g), accG);
|
|
457
|
+
const maxB = select(isNew, float(sNode.b), accB);
|
|
458
|
+
const maxLuma = select(isNew, effectiveValue, accLuma);
|
|
459
|
+
const maxCov = max(cellCov, accCov);
|
|
460
|
+
const fieldRadius = max(radius.add(fieldReach), float(0.001));
|
|
461
|
+
const cellField = clamp(float(1).sub(dist.div(fieldRadius)), float(0), float(1));
|
|
462
|
+
const cellFieldSq = cellField.mul(cellField);
|
|
463
|
+
accWeightR = accWeightR.add(float(sNode.r).mul(cellFieldSq));
|
|
464
|
+
accWeightG = accWeightG.add(float(sNode.g).mul(cellFieldSq));
|
|
465
|
+
accWeightB = accWeightB.add(float(sNode.b).mul(cellFieldSq));
|
|
466
|
+
accWeightLuma = accWeightLuma.add(effectiveValue.mul(cellFieldSq));
|
|
467
|
+
accField = accField.add(cellFieldSq);
|
|
468
|
+
accR = maxR;
|
|
469
|
+
accG = maxG;
|
|
470
|
+
accB = maxB;
|
|
471
|
+
accLuma = maxLuma;
|
|
472
|
+
accCov = maxCov;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
const metaEdge = max(float(0.01), aa.div(this.spacingUniform).mul(0.5));
|
|
476
|
+
const metaCov = smoothstep(float(0.5).sub(metaEdge), float(0.5).add(metaEdge), accField);
|
|
477
|
+
const fieldWeight = max(accField, float(0.001));
|
|
478
|
+
const finalCov = mix(accCov, metaCov, morph);
|
|
479
|
+
const finalR = mix(accR, accWeightR.div(fieldWeight), morph);
|
|
480
|
+
const finalG = mix(accG, accWeightG.div(fieldWeight), morph);
|
|
481
|
+
const finalB = mix(accB, accWeightB.div(fieldWeight), morph);
|
|
482
|
+
const finalLuma = mix(accLuma, accWeightLuma.div(fieldWeight), morph);
|
|
483
|
+
return {
|
|
484
|
+
color: vec3(finalR, finalG, finalB),
|
|
485
|
+
coverage: finalCov,
|
|
486
|
+
luma: finalLuma,
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
normalizeBloomRadius(value) {
|
|
490
|
+
return clamp01(value / 24);
|
|
491
|
+
}
|
|
492
|
+
normalizeBloomSoftness(value) {
|
|
493
|
+
return Math.max(0.001, value * 0.25);
|
|
494
|
+
}
|
|
495
|
+
disposeBloomNode() {
|
|
496
|
+
;
|
|
497
|
+
this.bloomNode?.dispose?.();
|
|
498
|
+
}
|
|
499
|
+
getBloomTextureNode() {
|
|
500
|
+
const bloomNode = this.bloomNode;
|
|
501
|
+
if (!bloomNode) {
|
|
502
|
+
throw new Error("Bloom node is not initialized");
|
|
503
|
+
}
|
|
504
|
+
if ("getTextureNode" in bloomNode &&
|
|
505
|
+
typeof bloomNode.getTextureNode === "function") {
|
|
506
|
+
return bloomNode.getTextureNode();
|
|
507
|
+
}
|
|
508
|
+
if ("getTexture" in bloomNode &&
|
|
509
|
+
typeof bloomNode.getTexture === "function") {
|
|
510
|
+
return bloomNode.getTexture();
|
|
511
|
+
}
|
|
512
|
+
throw new Error("Bloom node does not expose a texture getter");
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
function parseColorMode(value) {
|
|
516
|
+
if (value === "source" ||
|
|
517
|
+
value === "monochrome" ||
|
|
518
|
+
value === "duotone" ||
|
|
519
|
+
value === "custom" ||
|
|
520
|
+
value === "cmyk") {
|
|
521
|
+
return value;
|
|
522
|
+
}
|
|
523
|
+
return "source";
|
|
524
|
+
}
|
|
525
|
+
function parseCmykBlend(value) {
|
|
526
|
+
if (value === "subtractive" || value === "overprint") {
|
|
527
|
+
return value;
|
|
528
|
+
}
|
|
529
|
+
return "subtractive";
|
|
530
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { type TSLNode } from "three/tsl";
|
|
2
|
+
import * as THREE from "three/webgpu";
|
|
3
|
+
import type { LayerParameterValues } from "../types/editor";
|
|
4
|
+
import { PassNode } from "./pass-node";
|
|
5
|
+
type Node = TSLNode;
|
|
6
|
+
export declare class InkPass extends PassNode {
|
|
7
|
+
private readonly blurScene;
|
|
8
|
+
private readonly compositeScene;
|
|
9
|
+
private readonly copyScene;
|
|
10
|
+
private readonly orthoCamera;
|
|
11
|
+
private readonly blurMaterial;
|
|
12
|
+
private readonly compositeMaterial;
|
|
13
|
+
private readonly copyMaterial;
|
|
14
|
+
private readonly blurInputNode;
|
|
15
|
+
private readonly crispInputNode;
|
|
16
|
+
private readonly finalInputNode;
|
|
17
|
+
private readonly copyInputNode;
|
|
18
|
+
private readonly noiseInputNode;
|
|
19
|
+
private blurSampleNodes;
|
|
20
|
+
private compositeBlurNodes;
|
|
21
|
+
private noiseSampleNodes;
|
|
22
|
+
private bloomEnabled;
|
|
23
|
+
private bloomNode;
|
|
24
|
+
private readonly bloomIntensityUniform;
|
|
25
|
+
private readonly bloomRadiusUniform;
|
|
26
|
+
private readonly bloomSoftnessUniform;
|
|
27
|
+
private readonly bloomThresholdUniform;
|
|
28
|
+
private readonly backgroundColorUniform;
|
|
29
|
+
private readonly coreColorUniform;
|
|
30
|
+
private readonly edgeColorUniform;
|
|
31
|
+
private readonly midColorUniform;
|
|
32
|
+
private readonly blurStrengthUniform;
|
|
33
|
+
private readonly crispBlendUniform;
|
|
34
|
+
private readonly directionXUniform;
|
|
35
|
+
private readonly directionYUniform;
|
|
36
|
+
private readonly dripLengthUniform;
|
|
37
|
+
private readonly dripWeightUniform;
|
|
38
|
+
private readonly fluidNoiseUniform;
|
|
39
|
+
private readonly grainEnabledUniform;
|
|
40
|
+
private readonly grainIntensityUniform;
|
|
41
|
+
private readonly grainScaleUniform;
|
|
42
|
+
private readonly blurSpreadUniform;
|
|
43
|
+
private readonly noiseScaleUniform;
|
|
44
|
+
private readonly passIndexUniform;
|
|
45
|
+
private readonly resolutionWidthUniform;
|
|
46
|
+
private readonly resolutionHeightUniform;
|
|
47
|
+
private readonly smokeSpeedUniform;
|
|
48
|
+
private readonly smokeTurbulenceUniform;
|
|
49
|
+
private readonly timeUniform;
|
|
50
|
+
private blurPassCount;
|
|
51
|
+
private crispPassCount;
|
|
52
|
+
private compositeTarget;
|
|
53
|
+
private crispTarget;
|
|
54
|
+
private readTarget;
|
|
55
|
+
private writeTarget;
|
|
56
|
+
private readonly placeholder;
|
|
57
|
+
private noiseTexture;
|
|
58
|
+
private noiseLoadStarted;
|
|
59
|
+
private needsRefresh;
|
|
60
|
+
private width;
|
|
61
|
+
private height;
|
|
62
|
+
private isAnimated;
|
|
63
|
+
constructor(layerId: string);
|
|
64
|
+
render(renderer: THREE.WebGPURenderer, inputTexture: THREE.Texture, outputTarget: THREE.WebGLRenderTarget, time: number, delta: number): void;
|
|
65
|
+
protected beforeRender(time: number): void;
|
|
66
|
+
needsContinuousRender(): boolean;
|
|
67
|
+
updateParams(params: LayerParameterValues): void;
|
|
68
|
+
resize(width: number, height: number): void;
|
|
69
|
+
dispose(): void;
|
|
70
|
+
protected buildEffectNode(): Node;
|
|
71
|
+
private buildBlurNode;
|
|
72
|
+
private buildCompositeNode;
|
|
73
|
+
private applyColorGradient;
|
|
74
|
+
private ensureNoiseTexture;
|
|
75
|
+
private trackBlurSampleNode;
|
|
76
|
+
private trackCompositeBlurNode;
|
|
77
|
+
private trackNoiseSampleNode;
|
|
78
|
+
private setColorUniform;
|
|
79
|
+
private normalizeBloomRadius;
|
|
80
|
+
private normalizeBloomSoftness;
|
|
81
|
+
private disposeBloomNode;
|
|
82
|
+
private getBloomTextureNode;
|
|
83
|
+
}
|
|
84
|
+
export {};
|