@3driseai/3drise-core 1.0.19 → 1.0.21
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/animations/index.d.ts +2 -0
- package/dist/animations/index.d.ts.map +1 -0
- package/dist/animations/index.js +1 -0
- package/dist/animations/trackGenerators.d.ts +140 -0
- package/dist/animations/trackGenerators.d.ts.map +1 -0
- package/dist/animations/trackGenerators.js +443 -0
- package/dist/autoAnimate/bounds.d.ts +7 -0
- package/dist/autoAnimate/bounds.d.ts.map +1 -0
- package/dist/autoAnimate/bounds.js +23 -0
- package/dist/autoAnimate/composer.d.ts +30 -0
- package/dist/autoAnimate/composer.d.ts.map +1 -0
- package/dist/autoAnimate/composer.js +251 -0
- package/dist/autoAnimate/describeScene.d.ts +105 -0
- package/dist/autoAnimate/describeScene.d.ts.map +1 -0
- package/dist/autoAnimate/describeScene.js +165 -0
- package/dist/autoAnimate/draft.d.ts +59 -0
- package/dist/autoAnimate/draft.d.ts.map +1 -0
- package/dist/autoAnimate/draft.js +2 -0
- package/dist/autoAnimate/index.d.ts +14 -0
- package/dist/autoAnimate/index.d.ts.map +1 -0
- package/dist/autoAnimate/index.js +9 -0
- package/dist/autoAnimate/recipes.d.ts +87 -0
- package/dist/autoAnimate/recipes.d.ts.map +1 -0
- package/dist/autoAnimate/recipes.js +224 -0
- package/dist/autoAnimate/rng.d.ts +10 -0
- package/dist/autoAnimate/rng.d.ts.map +1 -0
- package/dist/autoAnimate/rng.js +16 -0
- package/dist/autoAnimate/sceneAnalyzer.d.ts +7 -0
- package/dist/autoAnimate/sceneAnalyzer.d.ts.map +1 -0
- package/dist/autoAnimate/sceneAnalyzer.js +291 -0
- package/dist/autoAnimate/types.d.ts +124 -0
- package/dist/autoAnimate/types.d.ts.map +1 -0
- package/dist/autoAnimate/types.js +1 -0
- package/dist/autoAnimate/validator.d.ts +10 -0
- package/dist/autoAnimate/validator.d.ts.map +1 -0
- package/dist/autoAnimate/validator.js +59 -0
- package/dist/data/effectsDefaults.d.ts +4 -0
- package/dist/data/effectsDefaults.d.ts.map +1 -1
- package/dist/data/effectsDefaults.js +393 -2
- package/dist/data/gridsDefaults.d.ts +5 -0
- package/dist/data/gridsDefaults.d.ts.map +1 -0
- package/dist/data/gridsDefaults.js +419 -0
- package/dist/data/index.d.ts +1 -0
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +1 -0
- package/dist/data/particlesDefaults.d.ts +3 -1
- package/dist/data/particlesDefaults.d.ts.map +1 -1
- package/dist/data/particlesDefaults.js +78 -0
- package/dist/environment/cloudConfigs.d.ts +313 -0
- package/dist/environment/cloudConfigs.d.ts.map +1 -0
- package/dist/environment/cloudConfigs.js +342 -0
- package/dist/environment/index.d.ts +5 -0
- package/dist/environment/index.d.ts.map +1 -0
- package/dist/environment/index.js +6 -0
- package/dist/environment/landscapeConfigs.d.ts +220 -0
- package/dist/environment/landscapeConfigs.d.ts.map +1 -0
- package/dist/environment/landscapeConfigs.js +256 -0
- package/dist/environment/oceanConfigs.d.ts +293 -0
- package/dist/environment/oceanConfigs.d.ts.map +1 -0
- package/dist/environment/oceanConfigs.js +380 -0
- package/dist/environment/terrainConfigs.d.ts +254 -0
- package/dist/environment/terrainConfigs.d.ts.map +1 -0
- package/dist/environment/terrainConfigs.js +292 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/properties/index.d.ts +4 -0
- package/dist/properties/index.d.ts.map +1 -0
- package/dist/properties/index.js +3 -0
- package/dist/properties/registry.d.ts +44 -0
- package/dist/properties/registry.d.ts.map +1 -0
- package/dist/properties/registry.js +343 -0
- package/dist/properties/tables/effectsProperties.d.ts +40 -0
- package/dist/properties/tables/effectsProperties.d.ts.map +1 -0
- package/dist/properties/tables/effectsProperties.js +512 -0
- package/dist/properties/tables/geometryProperties.d.ts +38 -0
- package/dist/properties/tables/geometryProperties.d.ts.map +1 -0
- package/dist/properties/tables/geometryProperties.js +91 -0
- package/dist/properties/tables/getPropertyConfig.d.ts +3 -0
- package/dist/properties/tables/getPropertyConfig.d.ts.map +1 -0
- package/dist/properties/tables/getPropertyConfig.js +16 -0
- package/dist/properties/tables/gridProperties.d.ts +6 -0
- package/dist/properties/tables/gridProperties.d.ts.map +1 -0
- package/dist/properties/tables/gridProperties.js +199 -0
- package/dist/properties/tables/index.d.ts +8 -0
- package/dist/properties/tables/index.d.ts.map +1 -0
- package/dist/properties/tables/index.js +7 -0
- package/dist/properties/tables/lightProperties.d.ts +14 -0
- package/dist/properties/tables/lightProperties.d.ts.map +1 -0
- package/dist/properties/tables/lightProperties.js +263 -0
- package/dist/properties/tables/materialBounds.d.ts +33 -0
- package/dist/properties/tables/materialBounds.d.ts.map +1 -0
- package/dist/properties/tables/materialBounds.js +180 -0
- package/dist/properties/tables/optionalProperties.d.ts +83 -0
- package/dist/properties/tables/optionalProperties.d.ts.map +1 -0
- package/dist/properties/tables/optionalProperties.js +710 -0
- package/dist/properties/tables/particlesProperties.d.ts +17 -0
- package/dist/properties/tables/particlesProperties.d.ts.map +1 -0
- package/dist/properties/tables/particlesProperties.js +334 -0
- package/dist/properties/types.d.ts +43 -0
- package/dist/properties/types.d.ts.map +1 -0
- package/dist/properties/types.js +12 -0
- package/dist/services/ShadersLibrary.d.ts +1 -1
- package/dist/services/ShadersLibrary.d.ts.map +1 -1
- package/dist/shaders/ApollonianGridMaterial.d.ts +70 -0
- package/dist/shaders/ApollonianGridMaterial.d.ts.map +1 -0
- package/dist/shaders/ApollonianGridMaterial.js +289 -0
- package/dist/shaders/ConformalGridMaterial.d.ts +91 -0
- package/dist/shaders/ConformalGridMaterial.d.ts.map +1 -0
- package/dist/shaders/ConformalGridMaterial.js +335 -0
- package/dist/shaders/HilbertGridMaterial.d.ts +79 -0
- package/dist/shaders/HilbertGridMaterial.d.ts.map +1 -0
- package/dist/shaders/HilbertGridMaterial.js +329 -0
- package/dist/shaders/LensingGridMaterial.d.ts +73 -0
- package/dist/shaders/LensingGridMaterial.d.ts.map +1 -0
- package/dist/shaders/LensingGridMaterial.js +253 -0
- package/dist/shaders/ParastichyGridMaterial.d.ts +76 -0
- package/dist/shaders/ParastichyGridMaterial.d.ts.map +1 -0
- package/dist/shaders/ParastichyGridMaterial.js +282 -0
- package/dist/shaders/PhyllotaxisGridMaterial.d.ts +85 -0
- package/dist/shaders/PhyllotaxisGridMaterial.d.ts.map +1 -0
- package/dist/shaders/PhyllotaxisGridMaterial.js +532 -0
- package/dist/shaders/TruchetGridMaterial.d.ts +76 -0
- package/dist/shaders/TruchetGridMaterial.d.ts.map +1 -0
- package/dist/shaders/TruchetGridMaterial.js +290 -0
- package/dist/shaders/WallpaperGridMaterial.d.ts.map +1 -1
- package/dist/shaders/WallpaperGridMaterial.js +6 -1
- package/dist/shaders/index.d.ts +7 -0
- package/dist/shaders/index.d.ts.map +1 -1
- package/dist/shaders/index.js +7 -0
- package/dist/three/GalleryLayoutV.d.ts.map +1 -1
- package/dist/three/GalleryLayoutV.js +0 -10
- package/dist/three/SceneBuilderV.d.ts.map +1 -1
- package/dist/three/SceneBuilderV.js +1 -7
- package/dist/types/generativeEffects.d.ts +0 -4
- package/dist/types/generativeEffects.d.ts.map +1 -1
- package/dist/types/generativeParticles.d.ts +175 -2
- package/dist/types/generativeParticles.d.ts.map +1 -1
- package/dist/types/objectSettings.d.ts +45 -4
- package/dist/types/objectSettings.d.ts.map +1 -1
- package/dist/types/scene3d.d.ts +3 -3
- package/dist/types/scene3d.d.ts.map +1 -1
- package/dist/utils/generativeAnimatable.d.ts +1 -1
- package/dist/utils/generativeAnimatable.d.ts.map +1 -1
- package/dist/utils/generativeAnimatable.js +7 -1
- package/dist/utils/getAnimatableProperties.d.ts +12 -1
- package/dist/utils/getAnimatableProperties.d.ts.map +1 -1
- package/dist/utils/getAnimatableProperties.js +35 -138
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/objectEffects.d.ts +6 -0
- package/dist/utils/objectEffects.d.ts.map +1 -0
- package/dist/utils/objectEffects.js +5 -0
- package/package.json +1 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
export interface ParastichyGridMaterialUniforms {
|
|
3
|
+
/** elapsed seconds (useGridSurface) */
|
|
4
|
+
u_time: number;
|
|
5
|
+
/** size of one cell, in world units */
|
|
6
|
+
u_cellSize: number;
|
|
7
|
+
/** line thickness, in pixels */
|
|
8
|
+
u_lineWidth: number;
|
|
9
|
+
u_sectionSize: number;
|
|
10
|
+
/** accent thickness, in pixels; 0 disables the layer */
|
|
11
|
+
u_sectionWidth: number;
|
|
12
|
+
u_lineColor: THREE.Color;
|
|
13
|
+
u_sectionColor: THREE.Color;
|
|
14
|
+
u_cellColor: THREE.Color;
|
|
15
|
+
u_glowColor: THREE.Color;
|
|
16
|
+
u_bgColor: THREE.Color;
|
|
17
|
+
u_bgOpacity: number;
|
|
18
|
+
u_lineMode: number;
|
|
19
|
+
u_cellMode: number;
|
|
20
|
+
u_animSpeed: number;
|
|
21
|
+
u_animScale: number;
|
|
22
|
+
u_animIntensity: number;
|
|
23
|
+
u_fadeDistance: number;
|
|
24
|
+
u_fadeStrength: number;
|
|
25
|
+
/** ripple / reveal origin; stays at the origin */
|
|
26
|
+
u_focus: THREE.Vector2;
|
|
27
|
+
u_mouse: THREE.Vector2;
|
|
28
|
+
u_displace: number;
|
|
29
|
+
/** 0..1 assemble / dissolve */
|
|
30
|
+
u_reveal: number;
|
|
31
|
+
/** Angle between successive seeds, degrees; 137.508 is the golden angle */
|
|
32
|
+
u_divergence: number;
|
|
33
|
+
/** Weight of the third spiral family that splits cells into triangles */
|
|
34
|
+
u_third: number;
|
|
35
|
+
/** Brightness of the light running inward along the spirals */
|
|
36
|
+
u_sap: number;
|
|
37
|
+
/** Strength of the faceted cell fill */
|
|
38
|
+
u_fill: number;
|
|
39
|
+
}
|
|
40
|
+
declare module '@react-three/fiber' {
|
|
41
|
+
interface ThreeElements {
|
|
42
|
+
parastichyGridMaterial: ThreeElements['shaderMaterial'] & Partial<ParastichyGridMaterialUniforms>;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export declare const parastichyGridMaterialDefaults: ParastichyGridMaterialUniforms;
|
|
46
|
+
export declare const ParastichyGridMaterial: import("@react-three/fiber").ConstructorRepresentation<THREE.ShaderMaterial & {
|
|
47
|
+
u_time: number;
|
|
48
|
+
u_cellSize: number;
|
|
49
|
+
u_lineWidth: number;
|
|
50
|
+
u_sectionSize: number;
|
|
51
|
+
u_sectionWidth: number;
|
|
52
|
+
u_lineColor: THREE.Color;
|
|
53
|
+
u_sectionColor: THREE.Color;
|
|
54
|
+
u_cellColor: THREE.Color;
|
|
55
|
+
u_glowColor: THREE.Color;
|
|
56
|
+
u_bgColor: THREE.Color;
|
|
57
|
+
u_bgOpacity: number;
|
|
58
|
+
u_lineMode: number;
|
|
59
|
+
u_cellMode: number;
|
|
60
|
+
u_animSpeed: number;
|
|
61
|
+
u_animScale: number;
|
|
62
|
+
u_animIntensity: number;
|
|
63
|
+
u_fadeDistance: number;
|
|
64
|
+
u_fadeStrength: number;
|
|
65
|
+
u_focus: THREE.Vector2;
|
|
66
|
+
u_mouse: THREE.Vector2;
|
|
67
|
+
u_displace: number;
|
|
68
|
+
u_reveal: number;
|
|
69
|
+
u_divergence: number;
|
|
70
|
+
u_third: number;
|
|
71
|
+
u_sap: number;
|
|
72
|
+
u_fill: number;
|
|
73
|
+
}> & {
|
|
74
|
+
key: string;
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=ParastichyGridMaterial.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParastichyGridMaterial.d.ts","sourceRoot":"","sources":["../../src/shaders/ParastichyGridMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAgB/B,MAAM,WAAW,8BAA8B;IAC3C,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC;IACzB,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC;IAC5B,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC;IACzB,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC;IACzB,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,YAAY,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,OAAO,QAAQ,oBAAoB,CAAC;IAChC,UAAU,aAAa;QACnB,sBAAsB,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;KACrG;CACJ;AAED,eAAO,MAAM,8BAA8B,EAAE,8BA2B5C,CAAC;AAkOF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BlC,CAAC"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { shaderMaterial } from '@react-three/drei';
|
|
3
|
+
import { extend } from '@react-three/fiber';
|
|
4
|
+
export const parastichyGridMaterialDefaults = {
|
|
5
|
+
u_time: 0,
|
|
6
|
+
u_cellSize: 1.2,
|
|
7
|
+
u_lineWidth: 1.1,
|
|
8
|
+
u_sectionSize: 21,
|
|
9
|
+
u_sectionWidth: 0.9,
|
|
10
|
+
u_lineColor: new THREE.Color('#d4ac4e'),
|
|
11
|
+
u_sectionColor: new THREE.Color('#7fb8a8'),
|
|
12
|
+
u_cellColor: new THREE.Color('#0f3a33'),
|
|
13
|
+
u_glowColor: new THREE.Color('#fff0b8'),
|
|
14
|
+
u_bgColor: new THREE.Color('#03080a'),
|
|
15
|
+
u_bgOpacity: 0,
|
|
16
|
+
u_lineMode: 0,
|
|
17
|
+
u_cellMode: 0,
|
|
18
|
+
u_animSpeed: 1,
|
|
19
|
+
u_animScale: 0.5,
|
|
20
|
+
u_animIntensity: 0.6,
|
|
21
|
+
u_fadeDistance: 25,
|
|
22
|
+
u_fadeStrength: 0.5,
|
|
23
|
+
u_focus: new THREE.Vector2(0, 0),
|
|
24
|
+
u_mouse: new THREE.Vector2(0, 0),
|
|
25
|
+
u_displace: 0,
|
|
26
|
+
u_reveal: 1,
|
|
27
|
+
u_divergence: 137.508,
|
|
28
|
+
u_third: 0.45,
|
|
29
|
+
u_sap: 0.9,
|
|
30
|
+
u_fill: 0.35,
|
|
31
|
+
};
|
|
32
|
+
const vertex = /* glsl */ `
|
|
33
|
+
uniform float u_time;
|
|
34
|
+
uniform float u_cellSize;
|
|
35
|
+
uniform float u_displace;
|
|
36
|
+
uniform float u_animSpeed;
|
|
37
|
+
uniform float u_animScale;
|
|
38
|
+
|
|
39
|
+
varying vec2 vGridPos;
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
const float PI = 3.14159265359;
|
|
43
|
+
const float TAU = 6.28318530718;
|
|
44
|
+
|
|
45
|
+
float hash21(vec2 p){
|
|
46
|
+
p = fract(p * vec2(123.34, 456.21));
|
|
47
|
+
p += dot(p, p + 45.32);
|
|
48
|
+
return fract(p.x * p.y);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
void main(){
|
|
53
|
+
vGridPos = position.xy;
|
|
54
|
+
vec3 pos = position;
|
|
55
|
+
if (u_displace > 0.0){
|
|
56
|
+
float t = u_time * u_animSpeed;
|
|
57
|
+
float d = length(position.xy) / max(u_cellSize, 1e-4);
|
|
58
|
+
pos.z += sin(d * u_animScale - t) * u_displace;
|
|
59
|
+
}
|
|
60
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);
|
|
61
|
+
}
|
|
62
|
+
`;
|
|
63
|
+
const fragment = /* glsl */ `
|
|
64
|
+
precision highp float;
|
|
65
|
+
|
|
66
|
+
uniform float u_time;
|
|
67
|
+
uniform float u_cellSize;
|
|
68
|
+
uniform float u_lineWidth;
|
|
69
|
+
uniform float u_sectionSize;
|
|
70
|
+
uniform float u_sectionWidth;
|
|
71
|
+
uniform vec3 u_lineColor;
|
|
72
|
+
uniform vec3 u_sectionColor;
|
|
73
|
+
uniform vec3 u_cellColor;
|
|
74
|
+
uniform vec3 u_glowColor;
|
|
75
|
+
uniform vec3 u_bgColor;
|
|
76
|
+
uniform float u_bgOpacity;
|
|
77
|
+
uniform float u_lineMode;
|
|
78
|
+
uniform float u_cellMode;
|
|
79
|
+
uniform float u_animSpeed;
|
|
80
|
+
uniform float u_animScale;
|
|
81
|
+
uniform float u_animIntensity;
|
|
82
|
+
uniform float u_fadeDistance;
|
|
83
|
+
uniform float u_fadeStrength;
|
|
84
|
+
uniform vec2 u_focus;
|
|
85
|
+
uniform float u_reveal;
|
|
86
|
+
|
|
87
|
+
uniform float u_divergence;
|
|
88
|
+
uniform float u_third;
|
|
89
|
+
uniform float u_sap;
|
|
90
|
+
uniform float u_fill;
|
|
91
|
+
|
|
92
|
+
varying vec2 vGridPos;
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
const float PI = 3.14159265359;
|
|
96
|
+
const float TAU = 6.28318530718;
|
|
97
|
+
|
|
98
|
+
float hash21(vec2 p){
|
|
99
|
+
p = fract(p * vec2(123.34, 456.21));
|
|
100
|
+
p += dot(p, p + 45.32);
|
|
101
|
+
return fract(p.x * p.y);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
float lineAt(float c, float width, float fp){
|
|
106
|
+
float d = abs(fract(c - 0.5) - 0.5);
|
|
107
|
+
return 1.0 - clamp(d / max(fp * max(width, 0.05), 1e-6), 0.0, 1.0);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Coordinate across one parastichy family, and its screen derivative. Seeds of
|
|
111
|
+
// a Vogel head sit at radius c*sqrt(s), angle s*g turns. The q spirals of one
|
|
112
|
+
// family string together slots that differ by q; along them the angle advances
|
|
113
|
+
// by delta = (q g - round(q g)) / q turns per slot, so u = q (theta - s delta)
|
|
114
|
+
// is constant along each spiral and steps by one from spiral to spiral. At a
|
|
115
|
+
// seed u is exactly an integer, for every family at once.
|
|
116
|
+
vec2 family(vec2 x, float sT, float g, float q){
|
|
117
|
+
float delta = (q * g - floor(q * g + 0.5)) / q;
|
|
118
|
+
float ua = (atan(x.y, x.x) / TAU - sT * delta) * q;
|
|
119
|
+
// a second branch cut, so the derivative never sees the atan seam
|
|
120
|
+
float ub = (atan(-x.y, -x.x) / TAU + 0.5 - sT * delta) * q;
|
|
121
|
+
return vec2(ua, max(min(fwidth(ua), fwidth(ub)), 1e-6));
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
void main(){
|
|
125
|
+
vec2 coord = vGridPos / max(u_cellSize, 1e-4);
|
|
126
|
+
vec2 focus = u_focus / max(u_cellSize, 1e-4);
|
|
127
|
+
float t = u_time * u_animSpeed;
|
|
128
|
+
|
|
129
|
+
// The parastichies of a phyllotactic head as a grid in their own right. Two
|
|
130
|
+
// consecutive Fibonacci families (sectionSize spirals, and sectionSize/phi
|
|
131
|
+
// the other way) cross into the curved quadrilateral net a sunflower is read
|
|
132
|
+
// by; every crossing is a seed. Their difference family runs through every
|
|
133
|
+
// crossing too and cuts each cell into two triangles. Nothing here turns: the
|
|
134
|
+
// motion is light travelling inward along the spirals.
|
|
135
|
+
const float C = 0.5641896;
|
|
136
|
+
float g = u_divergence / 360.0;
|
|
137
|
+
float rp = length(coord);
|
|
138
|
+
float sT = (rp / C) * (rp / C);
|
|
139
|
+
float Rmax = u_fadeDistance / max(u_cellSize, 1e-4);
|
|
140
|
+
|
|
141
|
+
float q1 = max(floor(u_sectionSize + 0.5), 3.0);
|
|
142
|
+
float q2 = max(floor(q1 * 0.618034 + 0.5), 1.0);
|
|
143
|
+
float q3 = max(q1 - q2, 1.0);
|
|
144
|
+
vec2 F1 = family(coord, sT, g, q1);
|
|
145
|
+
vec2 F2 = family(coord, sT, g, q2);
|
|
146
|
+
vec2 F3 = family(coord, sT, g, q3);
|
|
147
|
+
// where a family converges faster than it can be drawn, it lets go
|
|
148
|
+
float k1 = 1.0 - smoothstep(0.18, 0.45, F1.y);
|
|
149
|
+
float k2 = 1.0 - smoothstep(0.18, 0.45, F2.y);
|
|
150
|
+
float k3 = 1.0 - smoothstep(0.18, 0.45, F3.y);
|
|
151
|
+
float inR = 1.0 - smoothstep(Rmax * 0.98, Rmax * 1.05, rp);
|
|
152
|
+
|
|
153
|
+
float lines = lineAt(F1.x, u_lineWidth, F1.y) * k1 * inR;
|
|
154
|
+
float accent = u_sectionWidth > 0.0 ? lineAt(F2.x, u_sectionWidth, F2.y) * k2 * inR : 0.0;
|
|
155
|
+
float third = lineAt(F3.x, u_lineWidth * 0.7, F3.y) * k3 * u_third * inR;
|
|
156
|
+
|
|
157
|
+
// ---- cells ----------------------------------------------------------------
|
|
158
|
+
vec2 id = vec2(floor(F1.x), floor(F2.x));
|
|
159
|
+
vec2 fr = vec2(fract(F1.x), fract(F2.x));
|
|
160
|
+
// The difference family is u3 = u1 - u2 exactly (round(q3 g) = round(q1 g) -
|
|
161
|
+
// round(q2 g) for consecutive Fibonacci q), so inside a cell its line is the
|
|
162
|
+
// diagonal fract(u1) = fract(u2): which side of it picks the triangle.
|
|
163
|
+
float side = step(fr.y, fr.x);
|
|
164
|
+
float dmin = min(min(fr.x, 1.0 - fr.x), min(fr.y, 1.0 - fr.y)) * k1 * k2 * inR;
|
|
165
|
+
float age = clamp(rp / max(Rmax, 1e-3), 0.0, 1.0);
|
|
166
|
+
vec3 ageCol = mix(u_glowColor, u_lineColor, smoothstep(0.0, 0.5, age));
|
|
167
|
+
ageCol = mix(ageCol, u_cellColor, smoothstep(0.5, 1.0, age));
|
|
168
|
+
// a soft two-tone over the triangles, so the net reads as facets
|
|
169
|
+
float facet = mix(0.55, 1.0, mix(side, 1.0 - side, mod(id.x + id.y, 2.0)));
|
|
170
|
+
float body = facet * u_fill * smoothstep(0.0, 0.12, dmin) * (1.0 - smoothstep(0.3, 0.6, max(F1.y, F2.y)));
|
|
171
|
+
|
|
172
|
+
// ---- sap --------------------------------------------------------------------
|
|
173
|
+
// Light runs inward along the main family toward the young centre, each
|
|
174
|
+
// spiral on its own clock, with a sharp head and a long fading tail.
|
|
175
|
+
float sk = mod(floor(F1.x + 0.5), q1);
|
|
176
|
+
float off = hash21(vec2(sk * 0.731, q1));
|
|
177
|
+
float ph = fract(rp / 7.0 + t * 0.06 + off);
|
|
178
|
+
float head = pow(ph, 7.0);
|
|
179
|
+
float d1 = abs(fract(F1.x - 0.5) - 0.5);
|
|
180
|
+
float core = exp(-pow(d1 / (F1.y * max(u_lineWidth, 0.05) * 1.8), 2.0));
|
|
181
|
+
float sap = head * core * u_sap * k1 * inR;
|
|
182
|
+
|
|
183
|
+
float idAcc = id.x + id.y * 7.13;
|
|
184
|
+
vec2 cellPos = coord;
|
|
185
|
+
float cellH = hash21(id * 0.173 + side);
|
|
186
|
+
float tone = side;
|
|
187
|
+
|
|
188
|
+
vec3 extraCol = ageCol * body + u_sectionColor * third * 0.8 + u_glowColor * sap * 1.5;
|
|
189
|
+
float extraA = max(max(body, third * 0.8), sap);
|
|
190
|
+
|
|
191
|
+
// ---- line animation --------------------------------------------------
|
|
192
|
+
float lineAnim = 1.0;
|
|
193
|
+
// Mode 0 is static: the chain starts at 0.5 so 0 never falls into flow.
|
|
194
|
+
if (u_lineMode < 0.5){
|
|
195
|
+
} else if (u_lineMode < 1.5){
|
|
196
|
+
lineAnim = 0.5 + 0.5 * sin(length(cellPos - focus) * u_animScale - t);
|
|
197
|
+
} else if (u_lineMode < 2.5){
|
|
198
|
+
lineAnim = 0.5 + 0.5 * sin(dot(cellPos, vec2(0.5, 0.5)) * u_animScale - t);
|
|
199
|
+
} else if (u_lineMode < 3.5){
|
|
200
|
+
float s = fract((coord.x + coord.y) * 0.05 * u_animScale - t * 0.15);
|
|
201
|
+
lineAnim = 0.25 + smoothstep(0.0, 0.15, s) * (1.0 - smoothstep(0.15, 0.35, s));
|
|
202
|
+
} else if (u_lineMode < 4.5){
|
|
203
|
+
lineAnim = 0.5 + 0.5 * sin(t);
|
|
204
|
+
}
|
|
205
|
+
lineAnim = mix(1.0, lineAnim, u_animIntensity);
|
|
206
|
+
|
|
207
|
+
// ---- cell fill -------------------------------------------------------
|
|
208
|
+
float cell = 0.0;
|
|
209
|
+
if (u_cellMode < 0.5){
|
|
210
|
+
} else if (u_cellMode < 1.5){
|
|
211
|
+
cell = 0.5 + 0.5 * sin(idAcc * 0.05 * u_animScale - t);
|
|
212
|
+
} else if (u_cellMode < 2.5){
|
|
213
|
+
cell = 0.5 + 0.5 * sin(t * (0.6 + cellH) + cellH * TAU);
|
|
214
|
+
} else if (u_cellMode < 3.5){
|
|
215
|
+
cell = smoothstep(0.6, 1.0, sin(length(cellPos - focus) * u_animScale - t));
|
|
216
|
+
} else if (u_cellMode < 4.5){
|
|
217
|
+
cell = step(0.5, cellH) * (0.5 + 0.5 * sin(t));
|
|
218
|
+
}
|
|
219
|
+
cell *= u_animIntensity;
|
|
220
|
+
cell *= smoothstep(0.0, 0.16, dmin); // keep the fill off its own edges
|
|
221
|
+
|
|
222
|
+
float r = length(vGridPos) / max(u_fadeDistance, 1e-4);
|
|
223
|
+
float fade = 1.0 - smoothstep(1.0 - u_fadeStrength, 1.0, r);
|
|
224
|
+
|
|
225
|
+
vec3 col = u_bgColor * u_bgOpacity;
|
|
226
|
+
float a = u_bgOpacity;
|
|
227
|
+
|
|
228
|
+
col += mix(u_cellColor, u_cellColor * 2.2, tone) * cell;
|
|
229
|
+
a = max(a, cell * 0.9);
|
|
230
|
+
float linesI = lines * lineAnim;
|
|
231
|
+
col += u_lineColor * linesI; a = max(a, linesI);
|
|
232
|
+
float accentI = accent * lineAnim;
|
|
233
|
+
col += u_sectionColor * accentI; a = max(a, accentI);
|
|
234
|
+
col += u_glowColor * (linesI * 0.2 + cell * 0.35) * u_animIntensity;
|
|
235
|
+
col += extraCol; a = max(a, extraA);
|
|
236
|
+
|
|
237
|
+
col *= fade;
|
|
238
|
+
a *= fade;
|
|
239
|
+
|
|
240
|
+
// ---- reveal ----------------------------------------------------------
|
|
241
|
+
if (u_reveal < 0.999){
|
|
242
|
+
float rd = length(vGridPos - u_focus) / max(u_fadeDistance, 1e-4);
|
|
243
|
+
float edge = u_reveal * 1.1;
|
|
244
|
+
float mask = 1.0 - smoothstep(edge - 0.05, edge, rd);
|
|
245
|
+
float front = mask * smoothstep(edge - 0.22, edge - 0.05, rd);
|
|
246
|
+
col = col * mask + u_glowColor * front * (a * 1.8 + 0.08);
|
|
247
|
+
a = max(a * mask, front * 0.10);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
if (a < 0.002) discard;
|
|
251
|
+
gl_FragColor = vec4(col, a);
|
|
252
|
+
}
|
|
253
|
+
`;
|
|
254
|
+
export const ParastichyGridMaterial = shaderMaterial({
|
|
255
|
+
u_time: parastichyGridMaterialDefaults.u_time,
|
|
256
|
+
u_cellSize: parastichyGridMaterialDefaults.u_cellSize,
|
|
257
|
+
u_lineWidth: parastichyGridMaterialDefaults.u_lineWidth,
|
|
258
|
+
u_sectionSize: parastichyGridMaterialDefaults.u_sectionSize,
|
|
259
|
+
u_sectionWidth: parastichyGridMaterialDefaults.u_sectionWidth,
|
|
260
|
+
u_lineColor: parastichyGridMaterialDefaults.u_lineColor.clone(),
|
|
261
|
+
u_sectionColor: parastichyGridMaterialDefaults.u_sectionColor.clone(),
|
|
262
|
+
u_cellColor: parastichyGridMaterialDefaults.u_cellColor.clone(),
|
|
263
|
+
u_glowColor: parastichyGridMaterialDefaults.u_glowColor.clone(),
|
|
264
|
+
u_bgColor: parastichyGridMaterialDefaults.u_bgColor.clone(),
|
|
265
|
+
u_bgOpacity: parastichyGridMaterialDefaults.u_bgOpacity,
|
|
266
|
+
u_lineMode: parastichyGridMaterialDefaults.u_lineMode,
|
|
267
|
+
u_cellMode: parastichyGridMaterialDefaults.u_cellMode,
|
|
268
|
+
u_animSpeed: parastichyGridMaterialDefaults.u_animSpeed,
|
|
269
|
+
u_animScale: parastichyGridMaterialDefaults.u_animScale,
|
|
270
|
+
u_animIntensity: parastichyGridMaterialDefaults.u_animIntensity,
|
|
271
|
+
u_fadeDistance: parastichyGridMaterialDefaults.u_fadeDistance,
|
|
272
|
+
u_fadeStrength: parastichyGridMaterialDefaults.u_fadeStrength,
|
|
273
|
+
u_focus: parastichyGridMaterialDefaults.u_focus.clone(),
|
|
274
|
+
u_mouse: parastichyGridMaterialDefaults.u_mouse.clone(),
|
|
275
|
+
u_displace: parastichyGridMaterialDefaults.u_displace,
|
|
276
|
+
u_reveal: parastichyGridMaterialDefaults.u_reveal,
|
|
277
|
+
u_divergence: parastichyGridMaterialDefaults.u_divergence,
|
|
278
|
+
u_third: parastichyGridMaterialDefaults.u_third,
|
|
279
|
+
u_sap: parastichyGridMaterialDefaults.u_sap,
|
|
280
|
+
u_fill: parastichyGridMaterialDefaults.u_fill,
|
|
281
|
+
}, vertex, fragment);
|
|
282
|
+
extend({ ParastichyGridMaterial });
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
export interface PhyllotaxisGridMaterialUniforms {
|
|
3
|
+
/** elapsed seconds (useGridSurface) */
|
|
4
|
+
u_time: number;
|
|
5
|
+
/** size of one cell, in world units */
|
|
6
|
+
u_cellSize: number;
|
|
7
|
+
/** line thickness, in pixels */
|
|
8
|
+
u_lineWidth: number;
|
|
9
|
+
u_sectionSize: number;
|
|
10
|
+
/** accent thickness, in pixels; 0 disables the layer */
|
|
11
|
+
u_sectionWidth: number;
|
|
12
|
+
u_lineColor: THREE.Color;
|
|
13
|
+
u_sectionColor: THREE.Color;
|
|
14
|
+
u_cellColor: THREE.Color;
|
|
15
|
+
u_glowColor: THREE.Color;
|
|
16
|
+
u_bgColor: THREE.Color;
|
|
17
|
+
u_bgOpacity: number;
|
|
18
|
+
u_lineMode: number;
|
|
19
|
+
u_cellMode: number;
|
|
20
|
+
u_animSpeed: number;
|
|
21
|
+
u_animScale: number;
|
|
22
|
+
u_animIntensity: number;
|
|
23
|
+
u_fadeDistance: number;
|
|
24
|
+
u_fadeStrength: number;
|
|
25
|
+
/** ripple / reveal origin; stays at the origin */
|
|
26
|
+
u_focus: THREE.Vector2;
|
|
27
|
+
u_mouse: THREE.Vector2;
|
|
28
|
+
u_displace: number;
|
|
29
|
+
/** 0..1 assemble / dissolve */
|
|
30
|
+
u_reveal: number;
|
|
31
|
+
/** Angle between successive seeds, degrees; 137.508 is the golden angle */
|
|
32
|
+
u_divergence: number;
|
|
33
|
+
/** Speed of the bloom rings travelling rim to centre; negative reverses them */
|
|
34
|
+
u_bloomRate: number;
|
|
35
|
+
/** Depth of the lit dome on each floret */
|
|
36
|
+
u_relief: number;
|
|
37
|
+
/** The mark each floret carries (0 draws only the domes) */
|
|
38
|
+
u_shape: number;
|
|
39
|
+
/** Size of the mark relative to its floret */
|
|
40
|
+
u_shapeSize: number;
|
|
41
|
+
/** Brightness of the marks */
|
|
42
|
+
u_shapeGlow: number;
|
|
43
|
+
/** accumulated on the CPU from bloomRate (never multiplied by time in the shader) */
|
|
44
|
+
u_bloomPhase: number;
|
|
45
|
+
}
|
|
46
|
+
declare module '@react-three/fiber' {
|
|
47
|
+
interface ThreeElements {
|
|
48
|
+
phyllotaxisGridMaterial: ThreeElements['shaderMaterial'] & Partial<PhyllotaxisGridMaterialUniforms>;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export declare const phyllotaxisGridMaterialDefaults: PhyllotaxisGridMaterialUniforms;
|
|
52
|
+
export declare const PhyllotaxisGridMaterial: import("@react-three/fiber").ConstructorRepresentation<THREE.ShaderMaterial & {
|
|
53
|
+
u_time: number;
|
|
54
|
+
u_cellSize: number;
|
|
55
|
+
u_lineWidth: number;
|
|
56
|
+
u_sectionSize: number;
|
|
57
|
+
u_sectionWidth: number;
|
|
58
|
+
u_lineColor: THREE.Color;
|
|
59
|
+
u_sectionColor: THREE.Color;
|
|
60
|
+
u_cellColor: THREE.Color;
|
|
61
|
+
u_glowColor: THREE.Color;
|
|
62
|
+
u_bgColor: THREE.Color;
|
|
63
|
+
u_bgOpacity: number;
|
|
64
|
+
u_lineMode: number;
|
|
65
|
+
u_cellMode: number;
|
|
66
|
+
u_animSpeed: number;
|
|
67
|
+
u_animScale: number;
|
|
68
|
+
u_animIntensity: number;
|
|
69
|
+
u_fadeDistance: number;
|
|
70
|
+
u_fadeStrength: number;
|
|
71
|
+
u_focus: THREE.Vector2;
|
|
72
|
+
u_mouse: THREE.Vector2;
|
|
73
|
+
u_displace: number;
|
|
74
|
+
u_reveal: number;
|
|
75
|
+
u_divergence: number;
|
|
76
|
+
u_bloomRate: number;
|
|
77
|
+
u_relief: number;
|
|
78
|
+
u_shape: number;
|
|
79
|
+
u_shapeSize: number;
|
|
80
|
+
u_shapeGlow: number;
|
|
81
|
+
u_bloomPhase: number;
|
|
82
|
+
}> & {
|
|
83
|
+
key: string;
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=PhyllotaxisGridMaterial.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhyllotaxisGridMaterial.d.ts","sourceRoot":"","sources":["../../src/shaders/PhyllotaxisGridMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAgB/B,MAAM,WAAW,+BAA+B;IAC5C,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC;IACzB,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC;IAC5B,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC;IACzB,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC;IACzB,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,YAAY,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,qFAAqF;IACrF,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,OAAO,QAAQ,oBAAoB,CAAC;IAChC,UAAU,aAAa;QACnB,uBAAuB,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;KACvG;CACJ;AAED,eAAO,MAAM,+BAA+B,EAAE,+BA8B7C,CAAC;AAsdF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCnC,CAAC"}
|