From bb08a49ff9f86ed1a75371c73b0ad121c49570df Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Fri, 31 Oct 2025 13:58:09 +0000 Subject: [PATCH 01/21] default fit cover => contain --- .../shaders-react/src/shaders/paper-texture.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/shaders-react/src/shaders/paper-texture.tsx b/packages/shaders-react/src/shaders/paper-texture.tsx index 81cc82edf..df7a283dd 100644 --- a/packages/shaders-react/src/shaders/paper-texture.tsx +++ b/packages/shaders-react/src/shaders/paper-texture.tsx @@ -29,8 +29,8 @@ export const defaultPreset: PaperTexturePreset = { name: 'Default', params: { ...defaultObjectSizing, - fit: 'cover', - scale: 0.6, + fit: 'contain', + scale: 0.8, speed: 0, frame: 0, colorFront: '#9fadbc', @@ -53,10 +53,10 @@ export const abstractPreset: PaperTexturePreset = { name: 'Abstract', params: { ...defaultObjectSizing, - fit: 'cover', + fit: 'contain', speed: 0, frame: 0, - scale: 0.6, + scale: 0.8, colorFront: '#00eeff', colorBack: '#ff0a81', contrast: 0.85, @@ -77,10 +77,10 @@ export const cardboardPreset: PaperTexturePreset = { name: 'Cardboard', params: { ...defaultObjectSizing, - fit: 'cover', + fit: 'contain', speed: 0, frame: 0, - scale: 0.6, + scale: 0.8, colorFront: '#c7b89e', colorBack: '#999180', contrast: 0.4, @@ -103,7 +103,7 @@ export const detailsPreset: PaperTexturePreset = { ...defaultObjectSizing, speed: 0, frame: 0, - fit: 'cover', + fit: 'contain', scale: 3, colorFront: '#00000000', colorBack: '#00000000', From ccf26501fa34c21d578c8bcb2c3a23037e8c9a5b Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Fri, 31 Oct 2025 14:33:10 +0000 Subject: [PATCH 02/21] blending param added + default blending improved --- docs/src/app/(shaders)/paper-texture/page.tsx | 1 + .../src/shaders/paper-texture.tsx | 6 ++++++ packages/shaders/src/shaders/paper-texture.ts | 18 ++++++++++++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/docs/src/app/(shaders)/paper-texture/page.tsx b/docs/src/app/(shaders)/paper-texture/page.tsx index a8ec94dcf..c9685d31c 100644 --- a/docs/src/app/(shaders)/paper-texture/page.tsx +++ b/docs/src/app/(shaders)/paper-texture/page.tsx @@ -79,6 +79,7 @@ const PaperTextureWithControls = () => { foldCount: { value: defaults.foldCount, min: 1, max: 15, step: 1, order: 207 }, drops: { value: defaults.drops, min: 0, max: 1, order: 209 }, fade: { value: defaults.fade, min: 0, max: 1, order: 208 }, + blending: { value: defaults.blending, min: 0, max: 1, order: 0 }, seed: { value: defaults.seed, min: 0, step: 1, max: 1000, order: 250 }, scale: { value: defaults.scale, min: 0.5, max: 10, order: 300 }, fit: { value: defaults.fit, options: ['contain', 'cover'] as ShaderFit[], order: 301 }, diff --git a/packages/shaders-react/src/shaders/paper-texture.tsx b/packages/shaders-react/src/shaders/paper-texture.tsx index df7a283dd..df34f9974 100644 --- a/packages/shaders-react/src/shaders/paper-texture.tsx +++ b/packages/shaders-react/src/shaders/paper-texture.tsx @@ -29,6 +29,7 @@ export const defaultPreset: PaperTexturePreset = { name: 'Default', params: { ...defaultObjectSizing, + blending: 0, fit: 'contain', scale: 0.8, speed: 0, @@ -53,6 +54,7 @@ export const abstractPreset: PaperTexturePreset = { name: 'Abstract', params: { ...defaultObjectSizing, + blending: 0, fit: 'contain', speed: 0, frame: 0, @@ -77,6 +79,7 @@ export const cardboardPreset: PaperTexturePreset = { name: 'Cardboard', params: { ...defaultObjectSizing, + blending: 0, fit: 'contain', speed: 0, frame: 0, @@ -101,6 +104,7 @@ export const detailsPreset: PaperTexturePreset = { name: 'Details', params: { ...defaultObjectSizing, + blending: 0, speed: 0, frame: 0, fit: 'contain', @@ -142,6 +146,7 @@ export const PaperTexture: React.FC = memo(function PaperText folds = defaultPreset.params.folds, drops = defaultPreset.params.drops, seed = defaultPreset.params.seed, + blending = defaultPreset.params.blending, // Reworked props fiberScale, @@ -183,6 +188,7 @@ export const PaperTexture: React.FC = memo(function PaperText u_fade: fade, u_drops: drops, u_seed: seed, + u_blending: blending, ...noiseTexture, // Sizing uniforms diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index 0b341b718..5cec8fcf2 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -44,6 +44,7 @@ uniform float u_foldCount; uniform float u_drops; uniform float u_seed; uniform float u_fade; +uniform float u_blending; uniform sampler2D u_noiseTexture; @@ -177,6 +178,13 @@ float lst(float edge0, float edge1, float x) { return clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); } +vec3 blendMultiply(vec3 base, vec3 blend) { + return base*blend; +} +vec3 blendMultiply(vec3 base, vec3 blend, float opacity) { + return (blendMultiply(base, blend) * opacity + base * (1.0 - opacity)); +} + void main() { vec2 imageUV = v_imageUV; @@ -240,7 +248,7 @@ void main() { imageUV += .02 * normalImage; float frame = getUvFrame(imageUV); vec4 image = texture(u_image, imageUV); - image.rgb += .6 * pow(u_contrast, .4) * (res - .7); + image.rgb += .6 * pow(u_contrast, .4) * (.3 - res); frame *= image.a; @@ -253,7 +261,11 @@ void main() { color -= .007 * drops; - color.rgb = mix(color, image.rgb, frame); + float blending = 1. - u_blending; + float blendOpacity = (.5 + .5 * res); + vec3 pic = blendMultiply(color, image.rgb + .3 * blending * length(normalImage), .5 * res + .5 * u_blending); + pic = mix(pic, image.rgb, blending); + color = mix(color, pic, frame); fragColor = vec4(color, opacity); } @@ -275,6 +287,7 @@ export interface PaperTextureUniforms extends ShaderSizingUniforms { u_crumpleSize: number; u_drops: number; u_seed: number; + u_blending: number; } export interface PaperTextureParams extends ShaderSizingParams, ShaderMotionParams { @@ -292,4 +305,5 @@ export interface PaperTextureParams extends ShaderSizingParams, ShaderMotionPara crumpleSize?: number; drops?: number; seed?: number; + blending?: number; } From 453d71772daa6f2a266302ededdf05eaa9b4bfd3 Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Fri, 31 Oct 2025 16:35:06 +0000 Subject: [PATCH 03/21] params order swap --- docs/src/app/(shaders)/paper-texture/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/app/(shaders)/paper-texture/page.tsx b/docs/src/app/(shaders)/paper-texture/page.tsx index c9685d31c..21a40e169 100644 --- a/docs/src/app/(shaders)/paper-texture/page.tsx +++ b/docs/src/app/(shaders)/paper-texture/page.tsx @@ -69,7 +69,7 @@ const PaperTextureWithControls = () => { return { colorBack: { value: toHsla(defaults.colorBack), order: 100 }, colorFront: { value: toHsla(defaults.colorFront), order: 101 }, - contrast: { value: defaults.contrast, min: 0, max: 1, order: 200 }, + contrast: { value: defaults.contrast, min: 0, max: 1, order: 199 }, roughness: { value: defaults.roughness, min: 0, max: 1, order: 201 }, fiber: { value: defaults.fiber, min: 0, max: 1, order: 202 }, fiberSize: { value: defaults.fiberSize, min: 0.01, max: 1, order: 203 }, @@ -79,7 +79,7 @@ const PaperTextureWithControls = () => { foldCount: { value: defaults.foldCount, min: 1, max: 15, step: 1, order: 207 }, drops: { value: defaults.drops, min: 0, max: 1, order: 209 }, fade: { value: defaults.fade, min: 0, max: 1, order: 208 }, - blending: { value: defaults.blending, min: 0, max: 1, order: 0 }, + blending: { value: defaults.blending, min: 0, max: 1, order: 200 }, seed: { value: defaults.seed, min: 0, step: 1, max: 1000, order: 250 }, scale: { value: defaults.scale, min: 0.5, max: 10, order: 300 }, fit: { value: defaults.fit, options: ['contain', 'cover'] as ShaderFit[], order: 301 }, From 9fc23a4bc3981a34d1d3b6488953ed60e5133b97 Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Fri, 31 Oct 2025 16:54:03 +0000 Subject: [PATCH 04/21] opacity added --- docs/src/app/(shaders)/paper-texture/page.tsx | 1 + packages/shaders-react/src/shaders/paper-texture.tsx | 6 ++++++ packages/shaders/src/shaders/paper-texture.ts | 5 ++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/src/app/(shaders)/paper-texture/page.tsx b/docs/src/app/(shaders)/paper-texture/page.tsx index 21a40e169..498405147 100644 --- a/docs/src/app/(shaders)/paper-texture/page.tsx +++ b/docs/src/app/(shaders)/paper-texture/page.tsx @@ -70,6 +70,7 @@ const PaperTextureWithControls = () => { colorBack: { value: toHsla(defaults.colorBack), order: 100 }, colorFront: { value: toHsla(defaults.colorFront), order: 101 }, contrast: { value: defaults.contrast, min: 0, max: 1, order: 199 }, + opacity: { value: defaults.opacity, min: 0, max: 1, order: 199 }, roughness: { value: defaults.roughness, min: 0, max: 1, order: 201 }, fiber: { value: defaults.fiber, min: 0, max: 1, order: 202 }, fiberSize: { value: defaults.fiberSize, min: 0.01, max: 1, order: 203 }, diff --git a/packages/shaders-react/src/shaders/paper-texture.tsx b/packages/shaders-react/src/shaders/paper-texture.tsx index df34f9974..0bc9f4823 100644 --- a/packages/shaders-react/src/shaders/paper-texture.tsx +++ b/packages/shaders-react/src/shaders/paper-texture.tsx @@ -37,6 +37,7 @@ export const defaultPreset: PaperTexturePreset = { colorFront: '#9fadbc', colorBack: '#ffffff', contrast: 0.3, + opacity: 1, roughness: 0.4, fiber: 0.3, fiberSize: 0.2, @@ -62,6 +63,7 @@ export const abstractPreset: PaperTexturePreset = { colorFront: '#00eeff', colorBack: '#ff0a81', contrast: 0.85, + opacity: 1, roughness: 0, fiber: 0.1, fiberSize: 0.2, @@ -87,6 +89,7 @@ export const cardboardPreset: PaperTexturePreset = { colorFront: '#c7b89e', colorBack: '#999180', contrast: 0.4, + opacity: 1, roughness: 0, fiber: 0.35, fiberSize: 0.14, @@ -112,6 +115,7 @@ export const detailsPreset: PaperTexturePreset = { colorFront: '#00000000', colorBack: '#00000000', contrast: 0, + opacity: 1, roughness: 1, fiber: 0.27, fiberSize: 0.22, @@ -140,6 +144,7 @@ export const PaperTexture: React.FC = memo(function PaperText colorBack = defaultPreset.params.colorBack, image = '', contrast = defaultPreset.params.contrast, + opacity = defaultPreset.params.opacity, roughness = defaultPreset.params.roughness, fiber = defaultPreset.params.fiber, crumples = defaultPreset.params.crumples, @@ -178,6 +183,7 @@ export const PaperTexture: React.FC = memo(function PaperText u_colorFront: getShaderColorFromString(colorFront), u_colorBack: getShaderColorFromString(colorBack), u_contrast: contrast, + u_opacity: opacity, u_roughness: roughness, u_fiber: fiber, u_fiberSize: fiberSize, diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index 5cec8fcf2..9f3c584e3 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -34,6 +34,7 @@ uniform sampler2D u_image; uniform float u_imageAspectRatio; uniform float u_contrast; +uniform float u_opacity; uniform float u_roughness; uniform float u_fiber; uniform float u_fiberSize; @@ -265,7 +266,7 @@ void main() { float blendOpacity = (.5 + .5 * res); vec3 pic = blendMultiply(color, image.rgb + .3 * blending * length(normalImage), .5 * res + .5 * u_blending); pic = mix(pic, image.rgb, blending); - color = mix(color, pic, frame); + color = mix(color, pic, frame * u_opacity); fragColor = vec4(color, opacity); } @@ -277,6 +278,7 @@ export interface PaperTextureUniforms extends ShaderSizingUniforms { u_colorFront: [number, number, number, number]; u_colorBack: [number, number, number, number]; u_contrast: number; + u_opacity: number; u_roughness: number; u_fiber: number; u_fiberSize: number; @@ -295,6 +297,7 @@ export interface PaperTextureParams extends ShaderSizingParams, ShaderMotionPara colorFront?: string; colorBack?: string; contrast?: number; + opacity?: number; roughness?: number; fiber?: number; fiberSize?: number; From d24cfa360e4bb2993c7f3a924a4da51e26a8dc46 Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Fri, 31 Oct 2025 17:51:01 +0000 Subject: [PATCH 05/21] roughness to use save UV as other pattern components --- packages/shaders/src/shaders/paper-texture.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index 9f3c584e3..4b9d41f56 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -192,7 +192,7 @@ void main() { vec2 patternUV = v_imageUV - .5; patternUV = 5. * (patternUV * vec2(u_imageAspectRatio, 1.)); - vec2 roughnessUv = 1.5 * (gl_FragCoord.xy - .5 * u_resolution) / u_pixelRatio; + vec2 roughnessUv = 120. * patternUV; float roughness = roughness(roughnessUv + vec2(1., 0.)) - roughness(roughnessUv - vec2(1., 0.)); vec2 crumplesUV = fract(patternUV * .02 / u_crumpleSize - u_seed) * 32.; From 9211b7e062fd14a201b447222746032b9745c250 Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Mon, 3 Nov 2025 11:10:42 +0000 Subject: [PATCH 06/21] new u_distortion control --- docs/src/app/(shaders)/paper-texture/page.tsx | 5 +++-- packages/shaders-react/src/shaders/paper-texture.tsx | 6 ++++++ packages/shaders/src/shaders/paper-texture.ts | 7 +++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/docs/src/app/(shaders)/paper-texture/page.tsx b/docs/src/app/(shaders)/paper-texture/page.tsx index 498405147..629dfa1d4 100644 --- a/docs/src/app/(shaders)/paper-texture/page.tsx +++ b/docs/src/app/(shaders)/paper-texture/page.tsx @@ -69,8 +69,9 @@ const PaperTextureWithControls = () => { return { colorBack: { value: toHsla(defaults.colorBack), order: 100 }, colorFront: { value: toHsla(defaults.colorFront), order: 101 }, - contrast: { value: defaults.contrast, min: 0, max: 1, order: 199 }, - opacity: { value: defaults.opacity, min: 0, max: 1, order: 199 }, + contrast: { value: defaults.contrast, min: 0, max: 1, order: 197 }, + opacity: { value: defaults.opacity, min: 0, max: 1, order: 198 }, + distortion: { value: defaults.distortion, min: -1, max: 1, order: 199 }, roughness: { value: defaults.roughness, min: 0, max: 1, order: 201 }, fiber: { value: defaults.fiber, min: 0, max: 1, order: 202 }, fiberSize: { value: defaults.fiberSize, min: 0.01, max: 1, order: 203 }, diff --git a/packages/shaders-react/src/shaders/paper-texture.tsx b/packages/shaders-react/src/shaders/paper-texture.tsx index 0bc9f4823..00019214d 100644 --- a/packages/shaders-react/src/shaders/paper-texture.tsx +++ b/packages/shaders-react/src/shaders/paper-texture.tsx @@ -30,6 +30,7 @@ export const defaultPreset: PaperTexturePreset = { params: { ...defaultObjectSizing, blending: 0, + distortion: 0.5, fit: 'contain', scale: 0.8, speed: 0, @@ -56,6 +57,7 @@ export const abstractPreset: PaperTexturePreset = { params: { ...defaultObjectSizing, blending: 0, + distortion: 0.5, fit: 'contain', speed: 0, frame: 0, @@ -82,6 +84,7 @@ export const cardboardPreset: PaperTexturePreset = { params: { ...defaultObjectSizing, blending: 0, + distortion: 0.5, fit: 'contain', speed: 0, frame: 0, @@ -108,6 +111,7 @@ export const detailsPreset: PaperTexturePreset = { params: { ...defaultObjectSizing, blending: 0, + distortion: 0.5, speed: 0, frame: 0, fit: 'contain', @@ -152,6 +156,7 @@ export const PaperTexture: React.FC = memo(function PaperText drops = defaultPreset.params.drops, seed = defaultPreset.params.seed, blending = defaultPreset.params.blending, + distortion = defaultPreset.params.distortion, // Reworked props fiberScale, @@ -195,6 +200,7 @@ export const PaperTexture: React.FC = memo(function PaperText u_drops: drops, u_seed: seed, u_blending: blending, + u_distortion: distortion, ...noiseTexture, // Sizing uniforms diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index 4b9d41f56..978873999 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -46,6 +46,7 @@ uniform float u_drops; uniform float u_seed; uniform float u_fade; uniform float u_blending; +uniform float u_distortion; uniform sampler2D u_noiseTexture; @@ -235,7 +236,7 @@ void main() { normal.xy += u_roughness * 1.5 * roughness; normal.xy += fiber; - normalImage += u_roughness * .75 * roughness; + normalImage += u_roughness * .3 * roughness; normalImage += .2 * fiber; vec3 lightPos = vec3(1., 2., 1.); @@ -246,7 +247,7 @@ void main() { vec3 bgColor = u_colorBack.rgb * u_colorBack.a; float bgOpacity = u_colorBack.a; - imageUV += .02 * normalImage; + imageUV += .1 * u_distortion * normalImage; float frame = getUvFrame(imageUV); vec4 image = texture(u_image, imageUV); image.rgb += .6 * pow(u_contrast, .4) * (.3 - res); @@ -290,6 +291,7 @@ export interface PaperTextureUniforms extends ShaderSizingUniforms { u_drops: number; u_seed: number; u_blending: number; + u_distortion: number; } export interface PaperTextureParams extends ShaderSizingParams, ShaderMotionParams { @@ -309,4 +311,5 @@ export interface PaperTextureParams extends ShaderSizingParams, ShaderMotionPara drops?: number; seed?: number; blending?: number; + distortion?: number; } From fec0d3d0ebf41ab2ef43c361bc60ad262e5608a0 Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Wed, 19 Nov 2025 16:45:37 +0100 Subject: [PATCH 07/21] opacity removes, 3 x sizes adjusted --- docs/src/app/(shaders)/paper-texture/page.tsx | 22 +++++++++---------- .../src/shaders/paper-texture.tsx | 16 +++++++------- packages/shaders/src/shaders/paper-texture.ts | 14 ++++++------ 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/docs/src/app/(shaders)/paper-texture/page.tsx b/docs/src/app/(shaders)/paper-texture/page.tsx index 629dfa1d4..0d246d7f6 100644 --- a/docs/src/app/(shaders)/paper-texture/page.tsx +++ b/docs/src/app/(shaders)/paper-texture/page.tsx @@ -70,19 +70,19 @@ const PaperTextureWithControls = () => { colorBack: { value: toHsla(defaults.colorBack), order: 100 }, colorFront: { value: toHsla(defaults.colorFront), order: 101 }, contrast: { value: defaults.contrast, min: 0, max: 1, order: 197 }, - opacity: { value: defaults.opacity, min: 0, max: 1, order: 198 }, + blending: { value: defaults.blending, min: 0, max: 1, order: 198 }, distortion: { value: defaults.distortion, min: -1, max: 1, order: 199 }, roughness: { value: defaults.roughness, min: 0, max: 1, order: 201 }, - fiber: { value: defaults.fiber, min: 0, max: 1, order: 202 }, - fiberSize: { value: defaults.fiberSize, min: 0.01, max: 1, order: 203 }, - crumples: { value: defaults.crumples, min: 0, max: 1, order: 204 }, - crumpleSize: { value: defaults.crumpleSize, min: 0.01, max: 1, order: 205 }, - folds: { value: defaults.folds, min: 0, max: 1, order: 206 }, - foldCount: { value: defaults.foldCount, min: 1, max: 15, step: 1, order: 207 }, - drops: { value: defaults.drops, min: 0, max: 1, order: 209 }, - fade: { value: defaults.fade, min: 0, max: 1, order: 208 }, - blending: { value: defaults.blending, min: 0, max: 1, order: 200 }, - seed: { value: defaults.seed, min: 0, step: 1, max: 1000, order: 250 }, + roughnessSize: { value: defaults.roughnessSize, min: 0, max: 1, order: 202 }, + fiber: { value: defaults.fiber, min: 0, max: 1, order: 210 }, + fiberSize: { value: defaults.fiberSize, min: 0, max: 1, order: 211 }, + crumples: { value: defaults.crumples, min: 0, max: 1, order: 220 }, + crumpleSize: { value: defaults.crumpleSize, min: 0, max: 1, order: 221 }, + folds: { value: defaults.folds, min: 0, max: 1, order: 230 }, + foldCount: { value: defaults.foldCount, min: 1, max: 15, step: 1, order: 231 }, + drops: { value: defaults.drops, min: 0, max: 1, order: 240 }, + fade: { value: defaults.fade, min: 0, max: 1, order: 250 }, + seed: { value: defaults.seed, min: 0, step: 1, max: 1000, order: 251 }, scale: { value: defaults.scale, min: 0.5, max: 10, order: 300 }, fit: { value: defaults.fit, options: ['contain', 'cover'] as ShaderFit[], order: 301 }, Image: folder( diff --git a/packages/shaders-react/src/shaders/paper-texture.tsx b/packages/shaders-react/src/shaders/paper-texture.tsx index 04ab9ef46..a3ea86e00 100644 --- a/packages/shaders-react/src/shaders/paper-texture.tsx +++ b/packages/shaders-react/src/shaders/paper-texture.tsx @@ -38,12 +38,12 @@ export const defaultPreset: PaperTexturePreset = { colorFront: '#9fadbc', colorBack: '#ffffff', contrast: 0.3, - opacity: 1, roughness: 0.4, + roughnessSize: 0.5, fiber: 0.3, - fiberSize: 0.2, + fiberSize: 0.5, crumples: 0.3, - crumpleSize: 0.35, + crumpleSize: 0.5, folds: 0.65, foldCount: 5, fade: 0, @@ -65,8 +65,8 @@ export const abstractPreset: PaperTexturePreset = { colorFront: '#00eeff', colorBack: '#ff0a81', contrast: 0.85, - opacity: 1, roughness: 0, + roughnessSize: 0.5, fiber: 0.1, fiberSize: 0.2, crumples: 0, @@ -92,8 +92,8 @@ export const cardboardPreset: PaperTexturePreset = { colorFront: '#c7b89e', colorBack: '#999180', contrast: 0.4, - opacity: 1, roughness: 0, + roughnessSize: 0.5, fiber: 0.35, fiberSize: 0.14, crumples: 0.7, @@ -119,8 +119,8 @@ export const detailsPreset: PaperTexturePreset = { colorFront: '#00000000', colorBack: '#00000000', contrast: 0, - opacity: 1, roughness: 1, + roughnessSize: 0.5, fiber: 0.27, fiberSize: 0.22, crumples: 1, @@ -148,8 +148,8 @@ export const PaperTexture: React.FC = memo(function PaperText colorBack = defaultPreset.params.colorBack, image = '', contrast = defaultPreset.params.contrast, - opacity = defaultPreset.params.opacity, roughness = defaultPreset.params.roughness, + roughnessSize = defaultPreset.params.roughnessSize, fiber = defaultPreset.params.fiber, crumples = defaultPreset.params.crumples, folds = defaultPreset.params.folds, @@ -188,8 +188,8 @@ export const PaperTexture: React.FC = memo(function PaperText u_colorFront: getShaderColorFromString(colorFront), u_colorBack: getShaderColorFromString(colorBack), u_contrast: contrast, - u_opacity: opacity, u_roughness: roughness, + u_roughnessSize: roughnessSize, u_fiber: fiber, u_fiberSize: fiberSize, u_crumples: crumples, diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index 978873999..8f096d2b2 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -34,7 +34,7 @@ uniform sampler2D u_image; uniform float u_imageAspectRatio; uniform float u_contrast; -uniform float u_opacity; +uniform float u_roughnessSize; uniform float u_roughness; uniform float u_fiber; uniform float u_fiberSize; @@ -193,13 +193,13 @@ void main() { vec2 patternUV = v_imageUV - .5; patternUV = 5. * (patternUV * vec2(u_imageAspectRatio, 1.)); - vec2 roughnessUv = 120. * patternUV; + vec2 roughnessUv = mix(330., 130., u_roughnessSize) * patternUV; float roughness = roughness(roughnessUv + vec2(1., 0.)) - roughness(roughnessUv - vec2(1., 0.)); - vec2 crumplesUV = fract(patternUV * .02 / u_crumpleSize - u_seed) * 32.; + vec2 crumplesUV = fract(mix(.45, .02, pow(u_crumpleSize, .3)) * patternUV - u_seed) * 32.; float crumples = u_crumples * (crumplesShape(crumplesUV + vec2(.05, 0.)) - crumplesShape(crumplesUV)); - vec2 fiberUV = 2. / u_fiberSize * patternUV; + vec2 fiberUV = mix(25., 8., u_fiberSize) * patternUV; float fiber = fiberNoise(fiberUV, vec2(0.)); fiber = .5 * u_fiber * (fiber - 1.); @@ -267,7 +267,7 @@ void main() { float blendOpacity = (.5 + .5 * res); vec3 pic = blendMultiply(color, image.rgb + .3 * blending * length(normalImage), .5 * res + .5 * u_blending); pic = mix(pic, image.rgb, blending); - color = mix(color, pic, frame * u_opacity); + color = mix(color, pic, frame); fragColor = vec4(color, opacity); } @@ -279,8 +279,8 @@ export interface PaperTextureUniforms extends ShaderSizingUniforms { u_colorFront: [number, number, number, number]; u_colorBack: [number, number, number, number]; u_contrast: number; - u_opacity: number; u_roughness: number; + u_roughnessSize: number; u_fiber: number; u_fiberSize: number; u_crumples: number; @@ -299,8 +299,8 @@ export interface PaperTextureParams extends ShaderSizingParams, ShaderMotionPara colorFront?: string; colorBack?: string; contrast?: number; - opacity?: number; roughness?: number; + roughnessSize?: number; fiber?: number; fiberSize?: number; crumples?: number; From 9142700cb35aa3ea6cadbaeb3d7ed4e23af6f594 Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Wed, 19 Nov 2025 16:59:56 +0100 Subject: [PATCH 08/21] glsl clean-up --- packages/shaders/src/shader-utils.ts | 43 +-------- packages/shaders/src/shaders/paper-texture.ts | 88 +++++++++++++------ 2 files changed, 64 insertions(+), 67 deletions(-) diff --git a/packages/shaders/src/shader-utils.ts b/packages/shaders/src/shader-utils.ts index c816fc716..124aea9cb 100644 --- a/packages/shaders/src/shader-utils.ts +++ b/packages/shaders/src/shader-utils.ts @@ -88,45 +88,4 @@ float snoise(vec2 v) { g.yz = a0.yz * x12.xz + h.yz * x12.yw; return 130.0 * dot(m, g); } -`; - -// language=GLSL -export const fiberNoise = ` -float fiberRandom(vec2 p) { - vec2 uv = floor(p) / 100.; - return texture(u_noiseTexture, fract(uv)).b; -} - -float fiberValueNoise(vec2 st) { - vec2 i = floor(st); - vec2 f = fract(st); - float a = fiberRandom(i); - float b = fiberRandom(i + vec2(1.0, 0.0)); - float c = fiberRandom(i + vec2(0.0, 1.0)); - float d = fiberRandom(i + vec2(1.0, 1.0)); - vec2 u = f * f * (3.0 - 2.0 * f); - float x1 = mix(a, b, u.x); - float x2 = mix(c, d, u.x); - return mix(x1, x2, u.y); -} - -float fiberNoiseFbm(in vec2 n, vec2 seedOffset) { - float total = 0.0, amplitude = 1.; - for (int i = 0; i < 4; i++) { - n = rotate(n, .7); - total += fiberValueNoise(n + seedOffset) * amplitude; - n *= 2.; - amplitude *= 0.6; - } - return total; -} - -float fiberNoise(vec2 uv, vec2 seedOffset) { - float epsilon = 0.001; - float n1 = fiberNoiseFbm(uv + vec2(epsilon, 0.0), seedOffset); - float n2 = fiberNoiseFbm(uv - vec2(epsilon, 0.0), seedOffset); - float n3 = fiberNoiseFbm(uv + vec2(0.0, epsilon), seedOffset); - float n4 = fiberNoiseFbm(uv - vec2(0.0, epsilon), seedOffset); - return length(vec2(n1 - n2, n3 - n4)) / (2.0 * epsilon); -} -`; +`; \ No newline at end of file diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index 8f096d2b2..f34097869 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -1,6 +1,6 @@ import type { ShaderMotionParams } from '../shader-mount.js'; import { sizingVariablesDeclaration, type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-sizing.js'; -import { rotation2, declarePI, fiberNoise, textureRandomizerR } from '../shader-utils.js'; +import { rotation2, declarePI, textureRandomizerR, textureRandomizerGB } from '../shader-utils.js'; /** * Mimicking paper texture with a combination of noises @@ -103,20 +103,57 @@ float roughness(vec2 p) { vec4 w = vec4(floor(p), ceil(p)); vec2 f = fract(p); o += mix( - mix(randomG(w.xy), randomG(w.xw), f.y), - mix(randomG(w.zy), randomG(w.zw), f.y), - f.x); + mix(randomG(w.xy), randomG(w.xw), f.y), + mix(randomG(w.zy), randomG(w.zw), f.y), + f.x); o += .2 / exp(2. * abs(sin(.2 * p.x + .5 * p.y))); - } + } return o / 3.; } -${fiberNoise} +float fiberRandom(vec2 p) { + vec2 uv = floor(p) / 100.; + return texture(u_noiseTexture, fract(uv)).b; +} + +float fiberValueNoise(vec2 st) { + vec2 i = floor(st); + vec2 f = fract(st); + float a = fiberRandom(i); + float b = fiberRandom(i + vec2(1.0, 0.0)); + float c = fiberRandom(i + vec2(0.0, 1.0)); + float d = fiberRandom(i + vec2(1.0, 1.0)); + vec2 u = f * f * (3.0 - 2.0 * f); + float x1 = mix(a, b, u.x); + float x2 = mix(c, d, u.x); + return mix(x1, x2, u.y); +} + +float fiberNoiseFbm(vec2 n, vec2 seedOffset) { + float total = 0.0, amplitude = 1.; + for (int i = 0; i < 4; i++) { + n = rotate(n, .7); + total += fiberValueNoise(n + seedOffset) * amplitude; + n *= 2.; + amplitude *= 0.6; + } + return total; +} + +float fiberNoise(vec2 uv, vec2 seedOffset) { + float epsilon = 0.001; + float n1 = fiberNoiseFbm(uv + vec2(epsilon, 0.0), seedOffset); + float n2 = fiberNoiseFbm(uv - vec2(epsilon, 0.0), seedOffset); + float n3 = fiberNoiseFbm(uv + vec2(0.0, epsilon), seedOffset); + float n4 = fiberNoiseFbm(uv - vec2(0.0, epsilon), seedOffset); + return length(vec2(n1 - n2, n3 - n4)) / (2.0 * epsilon); +} vec2 randomGB(vec2 p) { vec2 uv = floor(p) / 50. + .5; return texture(u_noiseTexture, fract(uv)).gb; } + float crumpledNoise(vec2 t, float pw) { vec2 p = floor(t); float wsum = 0.; @@ -135,28 +172,28 @@ float crumpledNoise(vec2 t, float pw) { } return pow(wsum != 0.0 ? cl / wsum : 0.0, .5) * 2.; } + float crumplesShape(vec2 uv) { return crumpledNoise(uv * .25, 16.) * crumpledNoise(uv * .5, 2.); } - vec2 folds(vec2 uv) { - vec3 pp = vec3(0.); - float l = 9.; - for (float i = 0.; i < 15.; i++) { - if (i >= u_foldCount) break; - vec2 rand = randomGB(vec2(i, i * u_seed)); - float an = rand.x * TWO_PI; - vec2 p = vec2(cos(an), sin(an)) * rand.y; - float dist = distance(uv, p); - l = min(l, dist); - - if (l == dist) { - pp.xy = (uv - p.xy); - pp.z = dist; - } + vec3 pp = vec3(0.); + float l = 9.; + for (float i = 0.; i < 15.; i++) { + if (i >= u_foldCount) break; + vec2 rand = randomGB(vec2(i, i * u_seed)); + float an = rand.x * TWO_PI; + vec2 p = vec2(cos(an), sin(an)) * rand.y; + float dist = distance(uv, p); + l = min(l, dist); + + if (l == dist) { + pp.xy = (uv - p.xy); + pp.z = dist; } - return mix(pp.xy, vec2(0.), pow(pp.z, .25)); + } + return mix(pp.xy, vec2(0.), pow(pp.z, .25)); } float drops(vec2 uv) { @@ -180,10 +217,11 @@ float lst(float edge0, float edge1, float x) { return clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); } -vec3 blendMultiply(vec3 base, vec3 blend) { +vec3 blendMultiply(vec3 base, vec3 blend) { return base*blend; } -vec3 blendMultiply(vec3 base, vec3 blend, float opacity) { + +vec3 blendMultiply(vec3 base, vec3 blend, float opacity) { return (blendMultiply(base, blend) * opacity + base * (1.0 - opacity)); } @@ -191,7 +229,7 @@ void main() { vec2 imageUV = v_imageUV; vec2 patternUV = v_imageUV - .5; - patternUV = 5. * (patternUV * vec2(u_imageAspectRatio, 1.)); + patternUV *= 5. * vec2(u_imageAspectRatio, 1.); vec2 roughnessUv = mix(330., 130., u_roughnessSize) * patternUV; float roughness = roughness(roughnessUv + vec2(1., 0.)) - roughness(roughnessUv - vec2(1., 0.)); From f135ceec65f04137f1c804caaca01a9fa1ee2e82 Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Wed, 19 Nov 2025 17:07:08 +0100 Subject: [PATCH 09/21] tweaking blending --- packages/shaders/src/shaders/paper-texture.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index f34097869..3a10b92df 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -301,10 +301,9 @@ void main() { color -= .007 * drops; - float blending = 1. - u_blending; float blendOpacity = (.5 + .5 * res); - vec3 pic = blendMultiply(color, image.rgb + .3 * blending * length(normalImage), .5 * res + .5 * u_blending); - pic = mix(pic, image.rgb, blending); + vec3 pic = blendMultiply(color, image.rgb + .2 * 1. - u_blending * length(normalImage), .5 * res + .2 * u_blending); + pic = mix(image.rgb, pic, .5 * u_blending); color = mix(color, pic, frame); fragColor = vec4(color, opacity); From 43cc2cdeb67bc0c8981cec224a806e131a1c719f Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Wed, 19 Nov 2025 17:18:38 +0100 Subject: [PATCH 10/21] weights readjustment --- docs/src/app/(shaders)/paper-texture/page.tsx | 2 +- packages/shaders/src/shaders/paper-texture.ts | 26 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/src/app/(shaders)/paper-texture/page.tsx b/docs/src/app/(shaders)/paper-texture/page.tsx index 0d246d7f6..69e2a5db8 100644 --- a/docs/src/app/(shaders)/paper-texture/page.tsx +++ b/docs/src/app/(shaders)/paper-texture/page.tsx @@ -71,7 +71,7 @@ const PaperTextureWithControls = () => { colorFront: { value: toHsla(defaults.colorFront), order: 101 }, contrast: { value: defaults.contrast, min: 0, max: 1, order: 197 }, blending: { value: defaults.blending, min: 0, max: 1, order: 198 }, - distortion: { value: defaults.distortion, min: -1, max: 1, order: 199 }, + distortion: { value: defaults.distortion, min: 0, max: 1, order: 199 }, roughness: { value: defaults.roughness, min: 0, max: 1, order: 201 }, roughnessSize: { value: defaults.roughnessSize, min: 0, max: 1, order: 202 }, fiber: { value: defaults.fiber, min: 0, max: 1, order: 210 }, diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index 3a10b92df..0c6ff4dca 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -232,7 +232,7 @@ void main() { patternUV *= 5. * vec2(u_imageAspectRatio, 1.); vec2 roughnessUv = mix(330., 130., u_roughnessSize) * patternUV; - float roughness = roughness(roughnessUv + vec2(1., 0.)) - roughness(roughnessUv - vec2(1., 0.)); + float roughness = u_roughness * (roughness(roughnessUv + vec2(1., 0.)) - roughness(roughnessUv - vec2(1., 0.))); vec2 crumplesUV = fract(mix(.45, .02, pow(u_crumpleSize, .3)) * patternUV - u_seed) * 32.; float crumples = u_crumples * (crumplesShape(crumplesUV + vec2(.05, 0.)) - crumplesShape(crumplesUV)); @@ -262,23 +262,23 @@ void main() { fiber *= mix(1., .5, fade); roughness *= mix(1., .5, fade); - normal.xy += u_folds * min(5. * u_contrast, 1.) * 4. * max(vec2(0.), w + w2); - normalImage.xy += u_folds * 2. * w; + normal += u_folds * min(5. * u_contrast, 1.) * 4. * max(vec2(0.), w + w2); + normalImage += u_folds * w; - normal.xy += crumples; - normalImage.xy += 1.5 * crumples; + normal += crumples; + normalImage += .4 * crumples; - normal.xy += 3. * drops; - normalImage.xy += .2 * drops; + normal += 2. * drops; + normalImage += .2 * drops; - normal.xy += u_roughness * 1.5 * roughness; - normal.xy += fiber; - - normalImage += u_roughness * .3 * roughness; + normal += 1.5 * roughness; + normalImage += .1 * roughness; + + normal += fiber; normalImage += .2 * fiber; vec3 lightPos = vec3(1., 2., 1.); - float res = dot(normalize(vec3(normal, 9.5 - 9. * pow(u_contrast, .1))), normalize(lightPos)); + float res = dot(normalize(vec3(normal, 7.5 - 7. * pow(u_contrast, .1))), normalize(lightPos)); vec3 fgColor = u_colorFront.rgb * u_colorFront.a; float fgOpacity = u_colorFront.a; @@ -288,7 +288,7 @@ void main() { imageUV += .1 * u_distortion * normalImage; float frame = getUvFrame(imageUV); vec4 image = texture(u_image, imageUV); - image.rgb += .6 * pow(u_contrast, .4) * (.3 - res); + image.rgb += .4 * pow(u_contrast, .4) * (.3 - res); frame *= image.a; From feae82ca92422c43d1cd8872bb34383fe7b2acc0 Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Wed, 19 Nov 2025 17:34:55 +0100 Subject: [PATCH 11/21] fiber to distort the image less --- packages/shaders/src/shaders/paper-texture.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index 0c6ff4dca..e16158066 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -275,7 +275,7 @@ void main() { normalImage += .1 * roughness; normal += fiber; - normalImage += .2 * fiber; + normalImage += .1 * fiber; vec3 lightPos = vec3(1., 2., 1.); float res = dot(normalize(vec3(normal, 7.5 - 7. * pow(u_contrast, .1))), normalize(lightPos)); From ab9744553f4b8d8ab794d98badcef5257c749095 Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Fri, 21 Nov 2025 16:05:48 +0100 Subject: [PATCH 12/21] saving progress on straight folds --- .../src/shaders/paper-texture.tsx | 2 +- packages/shaders/src/shaders/paper-texture.ts | 37 ++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/packages/shaders-react/src/shaders/paper-texture.tsx b/packages/shaders-react/src/shaders/paper-texture.tsx index a3ea86e00..44a7cd48a 100644 --- a/packages/shaders-react/src/shaders/paper-texture.tsx +++ b/packages/shaders-react/src/shaders/paper-texture.tsx @@ -29,7 +29,7 @@ export const defaultPreset: PaperTexturePreset = { name: 'Default', params: { ...defaultObjectSizing, - blending: 0, + blending: 0.75, distortion: 0.5, fit: 'contain', scale: 0.8, diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index e16158066..5a042218c 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -235,7 +235,7 @@ void main() { float roughness = u_roughness * (roughness(roughnessUv + vec2(1., 0.)) - roughness(roughnessUv - vec2(1., 0.))); vec2 crumplesUV = fract(mix(.45, .02, pow(u_crumpleSize, .3)) * patternUV - u_seed) * 32.; - float crumples = u_crumples * (crumplesShape(crumplesUV + vec2(.05, 0.)) - crumplesShape(crumplesUV)); + float crumples = u_crumples * (crumplesShape(crumplesUV + vec2(.02, 0.)) - crumplesShape(crumplesUV)); vec2 fiberUV = mix(25., 8., u_fiberSize) * patternUV; float fiber = fiberNoise(fiberUV, vec2(0.)); @@ -280,6 +280,41 @@ void main() { vec3 lightPos = vec3(1., 2., 1.); float res = dot(normalize(vec3(normal, 7.5 - 7. * pow(u_contrast, .1))), normalize(lightPos)); + { + const vec3 LIGHT_DIR = normalize(vec3(-0.4, 0.7, 0.5)); + + vec2 gridUV = (patternUV * .12) + .5; + float foldX = .5; + + float dx = gridUV.x - foldX; + + float foldWidth = .3; + + float foldAmount = 1.0 - smoothstep(0.0, foldWidth, abs(dx)); + vec3 n = vec3(0.0, 0.0, 1.0); + float maxAngle = radians(65.); + float angle = sign(dx) * maxAngle * foldAmount; + + mat3 rotY = mat3( + cos(angle), 0.0, sin(angle), + 0.0, 1.0, 0.0, + -sin(angle), 0.0, cos(angle) + ); + n = rotY * n; + + float diffuse = max(dot(n, LIGHT_DIR), 0.0); + float lighting = .3 + 0.8 * diffuse; + + float crease = smoothstep(0., foldWidth * .5, abs(dx)); + float creaseDark = mix(.7, 1., crease); + + lighting *= creaseDark; + lighting = (1. - lighting); + + res += lighting; + } + + vec3 fgColor = u_colorFront.rgb * u_colorFront.a; float fgOpacity = u_colorFront.a; vec3 bgColor = u_colorBack.rgb * u_colorBack.a; From f1aab32774d75f047446ad9bec5970bbc65fc242 Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Sat, 22 Nov 2025 00:55:43 +0100 Subject: [PATCH 13/21] grids! --- docs/src/app/(shaders)/paper-texture/page.tsx | 9 ++- .../src/shaders/paper-texture.tsx | 20 ++++- packages/shaders/src/shaders/paper-texture.ts | 78 ++++++++++--------- 3 files changed, 67 insertions(+), 40 deletions(-) diff --git a/docs/src/app/(shaders)/paper-texture/page.tsx b/docs/src/app/(shaders)/paper-texture/page.tsx index 69e2a5db8..31924d701 100644 --- a/docs/src/app/(shaders)/paper-texture/page.tsx +++ b/docs/src/app/(shaders)/paper-texture/page.tsx @@ -72,6 +72,7 @@ const PaperTextureWithControls = () => { contrast: { value: defaults.contrast, min: 0, max: 1, order: 197 }, blending: { value: defaults.blending, min: 0, max: 1, order: 198 }, distortion: { value: defaults.distortion, min: 0, max: 1, order: 199 }, + seed: { value: defaults.seed, min: 0, step: 1, max: 1000, order: 200 }, roughness: { value: defaults.roughness, min: 0, max: 1, order: 201 }, roughnessSize: { value: defaults.roughnessSize, min: 0, max: 1, order: 202 }, fiber: { value: defaults.fiber, min: 0, max: 1, order: 210 }, @@ -80,9 +81,11 @@ const PaperTextureWithControls = () => { crumpleSize: { value: defaults.crumpleSize, min: 0, max: 1, order: 221 }, folds: { value: defaults.folds, min: 0, max: 1, order: 230 }, foldCount: { value: defaults.foldCount, min: 1, max: 15, step: 1, order: 231 }, - drops: { value: defaults.drops, min: 0, max: 1, order: 240 }, - fade: { value: defaults.fade, min: 0, max: 1, order: 250 }, - seed: { value: defaults.seed, min: 0, step: 1, max: 1000, order: 251 }, + grid: { value: defaults.grid, min: 0, max: 1, order: 240 }, + gridShape: { value: defaults.gridShape, min: 0, max: 1, order: 241 }, + gridCount: { value: defaults.gridCount, min: 1, max: 20, order: 242 }, + drops: { value: defaults.drops, min: 0, max: 1, order: 250 }, + fade: { value: defaults.fade, min: 0, max: 1, order: 260 }, scale: { value: defaults.scale, min: 0.5, max: 10, order: 300 }, fit: { value: defaults.fit, options: ['contain', 'cover'] as ShaderFit[], order: 301 }, Image: folder( diff --git a/packages/shaders-react/src/shaders/paper-texture.tsx b/packages/shaders-react/src/shaders/paper-texture.tsx index 44a7cd48a..87c52f770 100644 --- a/packages/shaders-react/src/shaders/paper-texture.tsx +++ b/packages/shaders-react/src/shaders/paper-texture.tsx @@ -29,7 +29,7 @@ export const defaultPreset: PaperTexturePreset = { name: 'Default', params: { ...defaultObjectSizing, - blending: 0.75, + blending: 0, distortion: 0.5, fit: 'contain', scale: 0.8, @@ -46,6 +46,9 @@ export const defaultPreset: PaperTexturePreset = { crumpleSize: 0.5, folds: 0.65, foldCount: 5, + grid: 0.5, + gridShape: 0.5, + gridCount: 1, fade: 0, drops: 0.2, seed: 5.8, @@ -73,6 +76,9 @@ export const abstractPreset: PaperTexturePreset = { crumpleSize: 0.3, folds: 1, foldCount: 3, + grid: 0.5, + gridShape: 0.5, + gridCount: 10, fade: 0, drops: 0.2, seed: 2.2, @@ -100,6 +106,9 @@ export const cardboardPreset: PaperTexturePreset = { crumpleSize: 0.1, folds: 0, foldCount: 1, + grid: 0.5, + gridShape: 0.5, + gridCount: 1, fade: 0, drops: 0.1, seed: 1.6, @@ -127,6 +136,9 @@ export const detailsPreset: PaperTexturePreset = { crumpleSize: 0.5, folds: 1, foldCount: 15, + grid: 0.5, + gridShape: 0.5, + gridCount: 1, fade: 0, drops: 0, seed: 6, @@ -153,6 +165,9 @@ export const PaperTexture: React.FC = memo(function PaperText fiber = defaultPreset.params.fiber, crumples = defaultPreset.params.crumples, folds = defaultPreset.params.folds, + grid = defaultPreset.params.grid, + gridShape = defaultPreset.params.gridShape, + gridCount = defaultPreset.params.gridCount, drops = defaultPreset.params.drops, seed = defaultPreset.params.seed, blending = defaultPreset.params.blending, @@ -196,6 +211,9 @@ export const PaperTexture: React.FC = memo(function PaperText u_crumpleSize: crumpleSize, u_foldCount: foldCount, u_folds: folds, + u_grid: grid, + u_gridShape: gridShape, + u_gridCount: gridCount, u_fade: fade, u_drops: drops, u_seed: seed, diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index 5a042218c..d88c464a1 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -42,6 +42,9 @@ uniform float u_crumples; uniform float u_crumpleSize; uniform float u_folds; uniform float u_foldCount; +uniform float u_grid; +uniform float u_gridShape; +uniform float u_gridCount; uniform float u_drops; uniform float u_seed; uniform float u_fade; @@ -262,39 +265,24 @@ void main() { fiber *= mix(1., .5, fade); roughness *= mix(1., .5, fade); - normal += u_folds * min(5. * u_contrast, 1.) * 4. * max(vec2(0.), w + w2); - normalImage += u_folds * w; - - normal += crumples; - normalImage += .4 * crumples; - - normal += 2. * drops; - normalImage += .2 * drops; - - normal += 1.5 * roughness; - normalImage += .1 * roughness; - - normal += fiber; - normalImage += .1 * fiber; - - vec3 lightPos = vec3(1., 2., 1.); - float res = dot(normalize(vec3(normal, 7.5 - 7. * pow(u_contrast, .1))), normalize(lightPos)); - + vec3 lightPos = vec3(.5, 1., .5); + float grid = 0.; { - const vec3 LIGHT_DIR = normalize(vec3(-0.4, 0.7, 0.5)); - - vec2 gridUV = (patternUV * .12) + .5; + vec2 gridUV = patternUV; + gridUV.x = fract(gridUV.x * .1 * u_gridCount + .5); float foldX = .5; float dx = gridUV.x - foldX; - float foldWidth = .3; + drops *= (.2 + .8 * step(0., dx)); - float foldAmount = 1.0 - smoothstep(0.0, foldWidth, abs(dx)); - vec3 n = vec3(0.0, 0.0, 1.0); - float maxAngle = radians(65.); - float angle = sign(dx) * maxAngle * foldAmount; + float foldWidth = u_gridShape; + + float foldAmount = 1. - smoothstep(0.0, foldWidth, abs(dx)); + float angle = sign(dx) * 1.1345 * foldAmount; + float creaseDark = mix(.9, 1., smoothstep(0., foldWidth * .5, abs(dx))); + vec3 n = vec3(0.0, 0.0, 1.0); mat3 rotY = mat3( cos(angle), 0.0, sin(angle), 0.0, 1.0, 0.0, @@ -302,19 +290,31 @@ void main() { ); n = rotY * n; - float diffuse = max(dot(n, LIGHT_DIR), 0.0); - float lighting = .3 + 0.8 * diffuse; - - float crease = smoothstep(0., foldWidth * .5, abs(dx)); - float creaseDark = mix(.7, 1., crease); - - lighting *= creaseDark; - lighting = (1. - lighting); - - res += lighting; + grid = max(dot(n, lightPos), 0.); + grid *= creaseDark; + grid = .5 * u_grid * smoothstep(0., 1., grid) * smoothstep(0., .3, u_contrast); } + normal += 4. * u_folds * min(5. * u_contrast, 1.) * max(vec2(0.), w + w2); + normalImage += u_folds * w; + + normal += crumples; + normalImage += .4 * crumples; + + normal += 2. * drops; + normalImage += .2 * drops; + + normal += 1.5 * roughness; + normalImage += .1 * roughness; + + normal += fiber; + normalImage += .1 * fiber; + + normal += grid; + normalImage += .2 * grid; + float res = dot(normalize(vec3(normal, 7.5 - 7. * pow(u_contrast, .1))), lightPos); + vec3 fgColor = u_colorFront.rgb * u_colorFront.a; float fgOpacity = u_colorFront.a; vec3 bgColor = u_colorBack.rgb * u_colorBack.a; @@ -358,6 +358,9 @@ export interface PaperTextureUniforms extends ShaderSizingUniforms { u_crumples: number; u_foldCount: number; u_folds: number; + u_grid: number; + u_gridShape: number; + u_gridCount: number; u_fade: number; u_crumpleSize: number; u_drops: number; @@ -378,6 +381,9 @@ export interface PaperTextureParams extends ShaderSizingParams, ShaderMotionPara crumples?: number; foldCount?: number; folds?: number; + grid?: number; + gridShape?: number; + gridCount?: number; fade?: number; crumpleSize?: number; drops?: number; From e6b428845efaed245f5325a1c6c1f7aeb3caddb4 Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Sat, 22 Nov 2025 17:06:25 +0100 Subject: [PATCH 14/21] both shader and presets adjustments --- .../src/shaders/paper-texture.tsx | 128 +++++++++--------- packages/shaders/src/shaders/paper-texture.ts | 10 +- 2 files changed, 69 insertions(+), 69 deletions(-) diff --git a/packages/shaders-react/src/shaders/paper-texture.tsx b/packages/shaders-react/src/shaders/paper-texture.tsx index 87c52f770..a34f7858c 100644 --- a/packages/shaders-react/src/shaders/paper-texture.tsx +++ b/packages/shaders-react/src/shaders/paper-texture.tsx @@ -40,48 +40,48 @@ export const defaultPreset: PaperTexturePreset = { contrast: 0.3, roughness: 0.4, roughnessSize: 0.5, - fiber: 0.3, + fiber: 0.2, fiberSize: 0.5, crumples: 0.3, crumpleSize: 0.5, folds: 0.65, - foldCount: 5, - grid: 0.5, - gridShape: 0.5, - gridCount: 1, + foldCount: 7, + grid: 0, + gridShape: 0.35, + gridCount: 3, fade: 0, drops: 0.2, seed: 5.8, }, }; -export const abstractPreset: PaperTexturePreset = { - name: 'Abstract', +export const fiberPreset: PaperTexturePreset = { + name: 'Fiber', params: { ...defaultObjectSizing, - blending: 0, - distortion: 0.5, - fit: 'contain', - speed: 0, - frame: 0, - scale: 0.8, - colorFront: '#00eeff', - colorBack: '#ff0a81', - contrast: 0.85, - roughness: 0, - roughnessSize: 0.5, - fiber: 0.1, - fiberSize: 0.2, - crumples: 0, - crumpleSize: 0.3, - folds: 1, + colorBack: "#b6ff94", + colorFront: "#5f4563", + contrast: 0.05, + blending: 0.19, + distortion: 1.00, + seed: 365, + roughness: 0.63, + roughnessSize: 0.50, + fiber: 0.76, + fiberSize: 0.61, + crumples: 0.00, + crumpleSize: 0.30, + folds: 0.00, foldCount: 3, - grid: 0.5, - gridShape: 0.5, + grid: 0.00, + gridShape: 0.50, gridCount: 10, - fade: 0, - drops: 0.2, - seed: 2.2, + drops: 0.20, + fade: 1, + scale: 0.80, + fit: "contain", + speed: 0, + frame: 0 }, }; @@ -89,67 +89,67 @@ export const cardboardPreset: PaperTexturePreset = { name: 'Cardboard', params: { ...defaultObjectSizing, - blending: 0, + blending: 0.5, distortion: 0.5, fit: 'contain', speed: 0, frame: 0, scale: 0.8, - colorFront: '#c7b89e', - colorBack: '#999180', - contrast: 0.4, - roughness: 0, - roughnessSize: 0.5, + colorBack: "#dcc593", + colorFront: "#685327", + contrast: 0.27, + roughness: 0.1, + roughnessSize: 0.50, fiber: 0.35, fiberSize: 0.14, - crumples: 0.7, + crumples: 0., crumpleSize: 0.1, folds: 0, foldCount: 1, - grid: 0.5, - gridShape: 0.5, - gridCount: 1, + grid: 0.50, + gridShape: 0.28, + gridCount: 20, fade: 0, drops: 0.1, seed: 1.6, }, }; -export const detailsPreset: PaperTexturePreset = { - name: 'Details', +export const flatPreset: PaperTexturePreset = { + name: 'Flat', params: { ...defaultObjectSizing, - blending: 0, - distortion: 0.5, - speed: 0, - frame: 0, + colorBack: '#fff3e0', + colorFront: '#9c9c9c', + contrast: 0.79, + blending: 0.19, + distortion: 0.33, + seed: 415, + roughness: 0.31, + roughnessSize: 1.0, + fiber: 0, + fiberSize: 0.61, + crumples: 0.7, + crumpleSize: 0.2, + folds: 0, + foldCount: 6, + grid: 0.0, + gridShape: 0.30, + gridCount: 20.0, + drops: 0.20, + fade: 0.75, + scale: 0.8, fit: 'contain', - scale: 3, - colorFront: '#00000000', - colorBack: '#00000000', - contrast: 0, - roughness: 1, - roughnessSize: 0.5, - fiber: 0.27, - fiberSize: 0.22, - crumples: 1, - crumpleSize: 0.5, - folds: 1, - foldCount: 15, - grid: 0.5, - gridShape: 0.5, - gridCount: 1, - fade: 0, - drops: 0, - seed: 6, + speed: 0, + frame: 0 }, }; export const paperTexturePresets: PaperTexturePreset[] = [ defaultPreset, + flatPreset, cardboardPreset, - abstractPreset, - detailsPreset, + fiberPreset, ] as const; export const PaperTexture: React.FC = memo(function PaperTextureImpl({ diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index d88c464a1..c8bd8df3e 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -196,7 +196,7 @@ vec2 folds(vec2 uv) { pp.z = dist; } } - return mix(pp.xy, vec2(0.), pow(pp.z, .25)); + return mix(pp.xy, vec2(0.), pow(pp.z, .15)); } float drops(vec2 uv) { @@ -247,10 +247,10 @@ void main() { vec2 normal = vec2(0.); vec2 normalImage = vec2(0.); - vec2 foldsUV = patternUV * .12; + vec2 foldsUV = patternUV * .18; foldsUV = rotate(foldsUV, 4. * u_seed); vec2 w = folds(foldsUV); - foldsUV = rotate(foldsUV + .007 * cos(u_seed), .01 * sin(u_seed)); + foldsUV = rotate(foldsUV + .005 * cos(u_seed), .01 * sin(u_seed)); vec2 w2 = folds(foldsUV); float drops = u_drops * drops(patternUV * 2.); @@ -295,7 +295,7 @@ void main() { grid = .5 * u_grid * smoothstep(0., 1., grid) * smoothstep(0., .3, u_contrast); } - normal += 4. * u_folds * min(5. * u_contrast, 1.) * max(vec2(0.), w + w2); + normal -= 3. * u_folds * (w + w2); normalImage += u_folds * w; normal += crumples; @@ -313,7 +313,7 @@ void main() { normal += grid; normalImage += .2 * grid; - float res = dot(normalize(vec3(normal, 7.5 - 7. * pow(u_contrast, .1))), lightPos); + float res = dot(normalize(vec3(normal, mix(7.5, .5, pow(u_contrast, .1)))), lightPos); vec3 fgColor = u_colorFront.rgb * u_colorFront.a; float fgOpacity = u_colorFront.a; From 09646b3244b9b867d94755639c17dfd992b787ee Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Sun, 23 Nov 2025 20:11:53 +0100 Subject: [PATCH 15/21] various adjustments --- .../src/shaders/paper-texture.tsx | 48 +++++++++++++++---- packages/shaders/src/shaders/paper-texture.ts | 4 +- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/packages/shaders-react/src/shaders/paper-texture.tsx b/packages/shaders-react/src/shaders/paper-texture.tsx index a34f7858c..4c648d698 100644 --- a/packages/shaders-react/src/shaders/paper-texture.tsx +++ b/packages/shaders-react/src/shaders/paper-texture.tsx @@ -59,21 +59,21 @@ export const fiberPreset: PaperTexturePreset = { name: 'Fiber', params: { ...defaultObjectSizing, - colorBack: "#b6ff94", - colorFront: "#5f4563", + colorBack: "#eaffe0", + colorFront: "#c19ac6", contrast: 0.05, - blending: 0.19, + blending: 0.8, distortion: 1.00, seed: 365, roughness: 0.63, roughnessSize: 0.50, fiber: 0.76, fiberSize: 0.61, - crumples: 0.00, + crumples: 0, crumpleSize: 0.30, - folds: 0.00, + folds: 0, foldCount: 3, - grid: 0.00, + grid: 0, gridShape: 0.50, gridCount: 10, drops: 0.20, @@ -106,7 +106,7 @@ export const cardboardPreset: PaperTexturePreset = { crumpleSize: 0.1, folds: 0, foldCount: 1, - grid: 0.50, + grid: 0.25, gridShape: 0.28, gridCount: 20, fade: 0, @@ -115,6 +115,37 @@ export const cardboardPreset: PaperTexturePreset = { }, }; +export const spreadPreset: PaperTexturePreset = { + name: 'Spread', + params: { + ...defaultObjectSizing, + colorBack: "#ffffff", + colorFront: "#c0c4c0", + contrast: 0.47, + blending: 0.36, + distortion: 0.50, + seed: 280, + roughness: 0.4, + roughnessSize: 0.4, + fiber: 0.24, + fiberSize: 0.5, + crumples: 0.2, + crumpleSize: 0.42, + folds: 0.3, + foldCount: 4, + grid: 0.7, + gridShape: 0.48, + gridCount: 1, + drops: 0, + fade: 0.68, + scale: 0.8, + fit: "contain", + speed: 0, + frame: 0 + }, +}; + + export const flatPreset: PaperTexturePreset = { name: 'Flat', params: { @@ -147,9 +178,10 @@ export const flatPreset: PaperTexturePreset = { export const paperTexturePresets: PaperTexturePreset[] = [ defaultPreset, - flatPreset, + spreadPreset, cardboardPreset, fiberPreset, + flatPreset ] as const; export const PaperTexture: React.FC = memo(function PaperTextureImpl({ diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index c8bd8df3e..02d5b50bd 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -292,13 +292,13 @@ void main() { grid = max(dot(n, lightPos), 0.); grid *= creaseDark; - grid = .5 * u_grid * smoothstep(0., 1., grid) * smoothstep(0., .3, u_contrast); + grid = u_grid * smoothstep(0., 1., grid) * smoothstep(0., .3, u_contrast); } normal -= 3. * u_folds * (w + w2); normalImage += u_folds * w; - normal += crumples; + normal += 1.5 * crumples; normalImage += .4 * crumples; normal += 2. * drops; From 78277dfb4f9bb87d3cbcba043e98d860658700be Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Sun, 23 Nov 2025 20:43:22 +0100 Subject: [PATCH 16/21] various adjustments --- packages/shaders-react/src/shaders/paper-texture.tsx | 8 ++++---- packages/shaders/src/shaders/paper-texture.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/shaders-react/src/shaders/paper-texture.tsx b/packages/shaders-react/src/shaders/paper-texture.tsx index 4c648d698..65d5ee911 100644 --- a/packages/shaders-react/src/shaders/paper-texture.tsx +++ b/packages/shaders-react/src/shaders/paper-texture.tsx @@ -62,9 +62,9 @@ export const fiberPreset: PaperTexturePreset = { colorBack: "#eaffe0", colorFront: "#c19ac6", contrast: 0.05, - blending: 0.8, - distortion: 1.00, - seed: 365, + blending: 0.4, + distortion: 0.4, + seed: 180, roughness: 0.63, roughnessSize: 0.50, fiber: 0.76, @@ -76,7 +76,7 @@ export const fiberPreset: PaperTexturePreset = { grid: 0, gridShape: 0.50, gridCount: 10, - drops: 0.20, + drops: 1, fade: 1, scale: 0.80, fit: "contain", diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index 02d5b50bd..e869a1219 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -301,7 +301,7 @@ void main() { normal += 1.5 * crumples; normalImage += .4 * crumples; - normal += 2. * drops; + normal += 2.5 * drops; normalImage += .2 * drops; normal += 1.5 * roughness; From 2fa0f07f3d3ab11eb28cdf9447187a427d4bf929 Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Sun, 23 Nov 2025 23:22:13 +0100 Subject: [PATCH 17/21] various adjustments --- packages/shaders-react/src/shaders/paper-texture.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/shaders-react/src/shaders/paper-texture.tsx b/packages/shaders-react/src/shaders/paper-texture.tsx index 65d5ee911..10a49f4aa 100644 --- a/packages/shaders-react/src/shaders/paper-texture.tsx +++ b/packages/shaders-react/src/shaders/paper-texture.tsx @@ -45,13 +45,13 @@ export const defaultPreset: PaperTexturePreset = { crumples: 0.3, crumpleSize: 0.5, folds: 0.65, - foldCount: 7, + foldCount: 12, grid: 0, gridShape: 0.35, gridCount: 3, fade: 0, drops: 0.2, - seed: 5.8, + seed: 43, }, }; From 83c4b8350307d501bc3a0499f50f133cd77bd745 Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Sun, 23 Nov 2025 23:38:57 +0100 Subject: [PATCH 18/21] various adjustments --- packages/shaders-react/src/shaders/paper-texture.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shaders-react/src/shaders/paper-texture.tsx b/packages/shaders-react/src/shaders/paper-texture.tsx index 10a49f4aa..e280bc8b5 100644 --- a/packages/shaders-react/src/shaders/paper-texture.tsx +++ b/packages/shaders-react/src/shaders/paper-texture.tsx @@ -35,7 +35,7 @@ export const defaultPreset: PaperTexturePreset = { scale: 0.8, speed: 0, frame: 0, - colorFront: '#9fadbc', + colorFront: '#bbbfc4', colorBack: '#ffffff', contrast: 0.3, roughness: 0.4, From 3ba5c58f5cbbab298384a1b47ebd2a8f3f4855cb Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Tue, 9 Dec 2025 17:59:42 +0400 Subject: [PATCH 19/21] JSDcs update --- packages/shaders/src/shaders/paper-texture.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index e6427ad29..1f088ecc3 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -1,6 +1,6 @@ import type { ShaderMotionParams } from '../shader-mount.js'; import { sizingVariablesDeclaration, type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-sizing.js'; -import { rotation2, declarePI, textureRandomizerR, textureRandomizerGB } from '../shader-utils.js'; +import { rotation2, declarePI, textureRandomizerR } from '../shader-utils.js'; /** * A static texture built from multiple noise layers, usable for realistic paper and cardboard surfaces. @@ -14,16 +14,22 @@ import { rotation2, declarePI, textureRandomizerR, textureRandomizerGB } from '. * - u_colorFront (vec4): Foreground color in RGBA * - u_colorBack (vec4): Background color in RGBA * - u_contrast (float): Blending behavior, sharper vs smoother color transitions (0 to 1) - * - u_roughness (float): Pixel noise, related to canvas and not scalable (0 to 1) + * - u_roughness (float): Hi-freq grain-like distortion intensity (0 to 1) + * - u_roughnessSize (float): Scale of the roughness pattern (0 to 1) * - u_fiber (float): Curly-shaped noise intensity (0 to 1) * - u_fiberSize (float): Curly-shaped noise scale (0 to 1) * - u_crumples (float): Cell-based crumple pattern intensity (0 to 1) * - u_crumpleSize (float): Cell-based crumple pattern scale (0 to 1) * - u_folds (float): Depth of the folds (0 to 1) * - u_foldCount (float): Number of folds (1 to 15) - * - u_fade (float): Big-scale noise mask applied to the pattern (0 to 1) - * - u_drops (float): Visibility of speckle pattern (0 to 1) + * - u_grid (float): Intensity of the grid / crease pattern (0 to 1) + * - u_gridShape (float): Shape/width of the grid creases (0 to 1) + * - u_gridCount (float): Number/density of grid creases (0 to N) + * - u_drops (float): Visibility of speckle / drop pattern (0 to 1) * - u_seed (float): Seed applied to folds, crumples and dots (0 to 1000) + * - u_fade (float): Large-scale noise mask applied to the pattern (0 to 1) + * - u_blending (float): Amount of image-to-paper blending, 0 for original color, 1 for mix with colorBack (0 to 1) + * - u_distortion (float): Amount of distortion of the image by the paper normals (0 to 1) * - u_noiseTexture (sampler2D): Pre-computed randomizer source texture * * Vertex shader outputs (used in fragment shader): From 935d26063a7de88036d5b18555095eb1fcbcd35f Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Tue, 9 Dec 2025 18:01:27 +0400 Subject: [PATCH 20/21] removing defs (to be taken from JSDocs once the list is approved) --- docs/src/shader-defs/paper-texture-def.ts | 89 ----------------------- 1 file changed, 89 deletions(-) diff --git a/docs/src/shader-defs/paper-texture-def.ts b/docs/src/shader-defs/paper-texture-def.ts index 63369b230..36dfec274 100644 --- a/docs/src/shader-defs/paper-texture-def.ts +++ b/docs/src/shader-defs/paper-texture-def.ts @@ -28,95 +28,6 @@ export const paperTextureDef: ShaderDef = { isColor: true, description: 'Foreground color', }, - { - name: 'contrast', - type: 'number', - min: 0, - max: 1, - defaultValue: defaultParams.contrast, - description: 'Blending behavior (sharper vs. smoother color transitions)', - }, - { - name: 'roughness', - type: 'number', - min: 0, - max: 1, - defaultValue: defaultParams.roughness, - description: 'Pixel noise, related to canvas (not scalable)', - }, - { - name: 'fiber', - type: 'number', - min: 0, - max: 1, - defaultValue: defaultParams.fiber, - description: 'Curly-shaped noise', - }, - { - name: 'fiberSize', - type: 'number', - min: 0, - max: 1, - defaultValue: defaultParams.fiberSize, - description: 'Curly-shaped noise scale', - }, - { - name: 'crumples', - type: 'number', - min: 0, - max: 1, - defaultValue: defaultParams.crumples, - description: 'Cell-based crumple pattern', - }, - { - name: 'crumpleSize', - type: 'number', - min: 0, - max: 1, - defaultValue: defaultParams.crumpleSize, - description: 'Cell-based crumple pattern scale', - }, - { - name: 'folds', - type: 'number', - min: 0, - max: 1, - defaultValue: defaultParams.folds, - description: 'Depth of the folds', - }, - { - name: 'foldCount', - type: 'number', - min: 1, - max: 15, - step: 1, - defaultValue: defaultParams.foldCount, - description: 'Number of folds (15 max)', - }, - { - name: 'fade', - type: 'number', - min: 0, - max: 1, - defaultValue: defaultParams.fade, - description: 'Big-scale noise mask applied to the pattern', - }, - { - name: 'drops', - type: 'number', - min: 0, - max: 1, - defaultValue: defaultParams.drops, - description: 'The visibility of speckle pattern', - }, - { - name: 'seed', - type: 'number', - min: 0, - max: 1000, - defaultValue: defaultParams.seed, - description: 'Seed applied to folds, crumples and dots', - }, ...staticImageCommonParams, ], }; From ede418a86ab210bb611895ae111e00312a4f9c17 Mon Sep 17 00:00:00 2001 From: Ksenia Kondrashova Date: Tue, 9 Dec 2025 18:07:14 +0400 Subject: [PATCH 21/21] post-merge fix --- packages/shaders/src/shaders/paper-texture.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/shaders/src/shaders/paper-texture.ts b/packages/shaders/src/shaders/paper-texture.ts index 1f088ecc3..46899e838 100644 --- a/packages/shaders/src/shaders/paper-texture.ts +++ b/packages/shaders/src/shaders/paper-texture.ts @@ -383,15 +383,21 @@ export interface PaperTextureUniforms extends ShaderSizingUniforms { u_colorBack: [number, number, number, number]; u_contrast: number; u_roughness: number; + u_roughnessSize: number; u_fiber: number; u_fiberSize: number; u_crumples: number; u_foldCount: number; u_folds: number; + u_grid: number; + u_gridShape: number; + u_gridCount: number; u_fade: number; u_crumpleSize: number; u_drops: number; u_seed: number; + u_blending: number; + u_distortion: number; } export interface PaperTextureParams extends ShaderSizingParams, ShaderMotionParams { @@ -400,13 +406,19 @@ export interface PaperTextureParams extends ShaderSizingParams, ShaderMotionPara colorBack?: string; contrast?: number; roughness?: number; + roughnessSize?: number; fiber?: number; fiberSize?: number; crumples?: number; foldCount?: number; folds?: number; + grid?: number; + gridShape?: number; + gridCount?: number; fade?: number; crumpleSize?: number; drops?: number; seed?: number; + blending?: number; + distortion?: number; }