@3driseai/3drise-core 1.0.20 → 1.0.22
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/autoAnimate/composer.d.ts +6 -0
- package/dist/autoAnimate/composer.d.ts.map +1 -1
- package/dist/autoAnimate/composer.js +4 -3
- package/dist/autoAnimate/describeScene.js +1 -1
- package/dist/catalog/catalogInfo.d.ts +22 -0
- package/dist/catalog/catalogInfo.d.ts.map +1 -0
- package/dist/catalog/catalogInfo.js +204 -0
- package/dist/catalog/index.d.ts +3 -0
- package/dist/catalog/index.d.ts.map +1 -0
- package/dist/catalog/index.js +2 -0
- package/dist/catalog/objectCatalog.d.ts +33 -0
- package/dist/catalog/objectCatalog.d.ts.map +1 -0
- package/dist/catalog/objectCatalog.js +99 -0
- package/dist/data/allMaterials.js +2 -2
- package/dist/data/environmentDefaults.d.ts +10 -0
- package/dist/data/environmentDefaults.d.ts.map +1 -0
- package/dist/data/environmentDefaults.js +126 -0
- package/dist/data/gridsDefaults.d.ts +2 -0
- package/dist/data/gridsDefaults.d.ts.map +1 -1
- package/dist/data/gridsDefaults.js +186 -0
- package/dist/data/index.d.ts +4 -0
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +4 -0
- package/dist/data/landDefaults.d.ts +26 -0
- package/dist/data/landDefaults.d.ts.map +1 -0
- package/dist/data/landDefaults.js +76 -0
- package/dist/data/spaceDefaults.d.ts +10 -0
- package/dist/data/spaceDefaults.d.ts.map +1 -0
- package/dist/data/spaceDefaults.js +46 -0
- package/dist/data/textDefaults.d.ts +16 -0
- package/dist/data/textDefaults.d.ts.map +1 -0
- package/dist/data/textDefaults.js +199 -0
- package/dist/environment/oceanConfigs.d.ts +5 -4
- package/dist/environment/oceanConfigs.d.ts.map +1 -1
- package/dist/environment/oceanConfigs.js +2 -2
- package/dist/environment/terrainConfigs.d.ts +78 -0
- package/dist/environment/terrainConfigs.d.ts.map +1 -1
- package/dist/environment/terrainConfigs.js +72 -2
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/properties/registry.d.ts +10 -1
- package/dist/properties/registry.d.ts.map +1 -1
- package/dist/properties/registry.js +60 -9
- package/dist/properties/tables/environmentProperties.d.ts +9 -0
- package/dist/properties/tables/environmentProperties.d.ts.map +1 -0
- package/dist/properties/tables/environmentProperties.js +127 -0
- package/dist/properties/tables/gridProperties.d.ts.map +1 -1
- package/dist/properties/tables/gridProperties.js +184 -82
- package/dist/properties/tables/index.d.ts +4 -1
- package/dist/properties/tables/index.d.ts.map +1 -1
- package/dist/properties/tables/index.js +4 -1
- package/dist/properties/tables/landProperties.d.ts +5 -0
- package/dist/properties/tables/landProperties.d.ts.map +1 -0
- package/dist/properties/tables/landProperties.js +24 -0
- package/dist/properties/tables/lightProperties.js +1 -1
- package/dist/properties/tables/materialBounds.js +1 -1
- package/dist/properties/tables/optionalProperties.d.ts +1 -2
- package/dist/properties/tables/optionalProperties.d.ts.map +1 -1
- package/dist/properties/tables/optionalProperties.js +21 -0
- package/dist/properties/tables/spaceProperties.d.ts +8 -0
- package/dist/properties/tables/spaceProperties.d.ts.map +1 -0
- package/dist/properties/tables/spaceProperties.js +42 -0
- package/dist/properties/tables/textProperties.d.ts +4 -0
- package/dist/properties/tables/textProperties.d.ts.map +1 -0
- package/dist/properties/tables/textProperties.js +361 -0
- package/dist/properties/types.d.ts +1 -1
- package/dist/properties/types.d.ts.map +1 -1
- package/dist/services/MaterialRegistry.d.ts.map +1 -1
- package/dist/services/MaterialRegistry.js +2 -0
- package/dist/services/SkySystemManager.d.ts +22 -0
- package/dist/services/SkySystemManager.d.ts.map +1 -1
- package/dist/services/SkySystemManager.js +50 -18
- package/dist/services/TextureResolver.d.ts.map +1 -1
- package/dist/services/TextureResolver.js +22 -0
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +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/SkyboxMaterial.js +3 -3
- package/dist/shaders/StarsMaterial.d.ts +5 -0
- package/dist/shaders/StarsMaterial.d.ts.map +1 -1
- package/dist/shaders/StarsMaterial.js +59 -57
- 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/index.d.ts +7 -0
- package/dist/shaders/index.d.ts.map +1 -1
- package/dist/shaders/index.js +7 -0
- package/dist/types/actions.d.ts +6 -5
- package/dist/types/actions.d.ts.map +1 -1
- package/dist/types/commands.d.ts +61 -0
- package/dist/types/commands.d.ts.map +1 -0
- package/dist/types/commands.js +1 -0
- package/dist/types/environment.d.ts +34 -1
- package/dist/types/environment.d.ts.map +1 -1
- package/dist/types/environment.js +15 -0
- package/dist/types/environmentObjects.d.ts +152 -0
- package/dist/types/environmentObjects.d.ts.map +1 -0
- package/dist/types/environmentObjects.js +10 -0
- package/dist/types/index.d.ts +5 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/landObjects.d.ts +15 -0
- package/dist/types/landObjects.d.ts.map +1 -0
- package/dist/types/landObjects.js +1 -0
- package/dist/types/objectSettings.d.ts +187 -16
- package/dist/types/objectSettings.d.ts.map +1 -1
- package/dist/types/objectsConfigs.d.ts +0 -3
- package/dist/types/objectsConfigs.d.ts.map +1 -1
- package/dist/types/scene3d.d.ts +8 -5
- package/dist/types/scene3d.d.ts.map +1 -1
- package/dist/types/spaceObjects.d.ts +65 -0
- package/dist/types/spaceObjects.d.ts.map +1 -0
- package/dist/types/spaceObjects.js +11 -0
- package/dist/types/textObjects.d.ts +352 -0
- package/dist/types/textObjects.d.ts.map +1 -0
- package/dist/types/textObjects.js +14 -0
- package/dist/types/types.d.ts +3 -6
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/users.d.ts +3 -1
- package/dist/types/users.d.ts.map +1 -1
- package/dist/types/users.js +2 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +4 -0
- package/dist/ui/uiBindings.d.ts +45 -0
- package/dist/ui/uiBindings.d.ts.map +1 -0
- package/dist/ui/uiBindings.js +172 -0
- package/dist/ui/uiKeys.d.ts +14 -0
- package/dist/ui/uiKeys.d.ts.map +1 -0
- package/dist/ui/uiKeys.js +22 -0
- package/dist/ui/uiSanitize.d.ts +18 -0
- package/dist/ui/uiSanitize.d.ts.map +1 -0
- package/dist/ui/uiSanitize.js +251 -0
- package/dist/ui/uiSpec.d.ts +116 -0
- package/dist/ui/uiSpec.d.ts.map +1 -0
- package/dist/ui/uiSpec.js +173 -0
- package/dist/utils/environmentMigration.d.ts +3 -0
- package/dist/utils/environmentMigration.d.ts.map +1 -0
- package/dist/utils/environmentMigration.js +50 -0
- package/dist/utils/generativeAnimatable.d.ts +1 -1
- package/dist/utils/generativeAnimatable.d.ts.map +1 -1
- package/dist/utils/generativeAnimatable.js +12 -0
- package/dist/utils/getAnimatableProperties.d.ts +1 -1
- package/dist/utils/getAnimatableProperties.d.ts.map +1 -1
- package/dist/utils/getAnimatableProperties.js +1 -1
- package/dist/utils/gridMigration.d.ts +3 -0
- package/dist/utils/gridMigration.d.ts.map +1 -0
- package/dist/utils/gridMigration.js +34 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +5 -0
- package/dist/utils/objectEffects.d.ts +24 -2
- package/dist/utils/objectEffects.d.ts.map +1 -1
- package/dist/utils/objectEffects.js +29 -2
- package/dist/utils/objectMigration.d.ts +9 -0
- package/dist/utils/objectMigration.d.ts.map +1 -0
- package/dist/utils/objectMigration.js +12 -0
- package/dist/utils/skyPhase.d.ts +61 -0
- package/dist/utils/skyPhase.d.ts.map +1 -0
- package/dist/utils/skyPhase.js +93 -0
- package/dist/utils/spaceMigration.d.ts +3 -0
- package/dist/utils/spaceMigration.d.ts.map +1 -0
- package/dist/utils/spaceMigration.js +46 -0
- package/dist/utils/sunUtils.d.ts +26 -1
- package/dist/utils/sunUtils.d.ts.map +1 -1
- package/dist/utils/sunUtils.js +37 -6
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConformalGridMaterial.d.ts","sourceRoot":"","sources":["../../src/shaders/ConformalGridMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAgB/B,MAAM,WAAW,6BAA6B;IAC1C,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,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,YAAY,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,aAAa,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,OAAO,QAAQ,oBAAoB,CAAC;IAChC,UAAU,aAAa;QACnB,qBAAqB,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;KACnG;CACJ;AAED,eAAO,MAAM,6BAA6B,EAAE,6BAgC3C,CAAC;AA6QF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCjC,CAAC"}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { shaderMaterial } from '@react-three/drei';
|
|
3
|
+
import { extend } from '@react-three/fiber';
|
|
4
|
+
export const conformalGridMaterialDefaults = {
|
|
5
|
+
u_time: 0,
|
|
6
|
+
u_cellSize: 2,
|
|
7
|
+
u_lineWidth: 1,
|
|
8
|
+
u_sectionSize: 4,
|
|
9
|
+
u_sectionWidth: 1.4,
|
|
10
|
+
u_lineColor: new THREE.Color('#2fb6c9'),
|
|
11
|
+
u_sectionColor: new THREE.Color('#c8fff4'),
|
|
12
|
+
u_cellColor: new THREE.Color('#1a2a78'),
|
|
13
|
+
u_glowColor: new THREE.Color('#9ff0ff'),
|
|
14
|
+
u_bgColor: new THREE.Color('#020a0f'),
|
|
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.8,
|
|
21
|
+
u_fadeDistance: 25,
|
|
22
|
+
u_fadeStrength: 0.7,
|
|
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_flowMap: 2,
|
|
28
|
+
u_poleSpread: 6,
|
|
29
|
+
u_spokes: 24,
|
|
30
|
+
u_arms: 3,
|
|
31
|
+
u_circulation: 1.2,
|
|
32
|
+
u_drift: 0.35,
|
|
33
|
+
u_fill: 0.5,
|
|
34
|
+
u_dye: 0.8,
|
|
35
|
+
u_flowPhase: 0,
|
|
36
|
+
};
|
|
37
|
+
const vertex = /* glsl */ `
|
|
38
|
+
uniform float u_time;
|
|
39
|
+
uniform float u_cellSize;
|
|
40
|
+
uniform float u_displace;
|
|
41
|
+
uniform float u_animSpeed;
|
|
42
|
+
uniform float u_animScale;
|
|
43
|
+
|
|
44
|
+
varying vec2 vGridPos;
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
const float PI = 3.14159265359;
|
|
48
|
+
const float TAU = 6.28318530718;
|
|
49
|
+
|
|
50
|
+
float hash21(vec2 p){
|
|
51
|
+
p = fract(p * vec2(123.34, 456.21));
|
|
52
|
+
p += dot(p, p + 45.32);
|
|
53
|
+
return fract(p.x * p.y);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
void main(){
|
|
58
|
+
vGridPos = position.xy;
|
|
59
|
+
vec3 pos = position;
|
|
60
|
+
if (u_displace > 0.0){
|
|
61
|
+
float t = u_time * u_animSpeed;
|
|
62
|
+
float d = length(position.xy) / max(u_cellSize, 1e-4);
|
|
63
|
+
pos.z += sin(d * u_animScale - t) * u_displace;
|
|
64
|
+
}
|
|
65
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);
|
|
66
|
+
}
|
|
67
|
+
`;
|
|
68
|
+
const fragment = /* glsl */ `
|
|
69
|
+
precision highp float;
|
|
70
|
+
|
|
71
|
+
uniform float u_time;
|
|
72
|
+
uniform float u_cellSize;
|
|
73
|
+
uniform float u_lineWidth;
|
|
74
|
+
uniform float u_sectionSize;
|
|
75
|
+
uniform float u_sectionWidth;
|
|
76
|
+
uniform vec3 u_lineColor;
|
|
77
|
+
uniform vec3 u_sectionColor;
|
|
78
|
+
uniform vec3 u_cellColor;
|
|
79
|
+
uniform vec3 u_glowColor;
|
|
80
|
+
uniform vec3 u_bgColor;
|
|
81
|
+
uniform float u_bgOpacity;
|
|
82
|
+
uniform float u_lineMode;
|
|
83
|
+
uniform float u_cellMode;
|
|
84
|
+
uniform float u_animSpeed;
|
|
85
|
+
uniform float u_animScale;
|
|
86
|
+
uniform float u_animIntensity;
|
|
87
|
+
uniform float u_fadeDistance;
|
|
88
|
+
uniform float u_fadeStrength;
|
|
89
|
+
uniform vec2 u_focus;
|
|
90
|
+
uniform float u_reveal;
|
|
91
|
+
|
|
92
|
+
uniform float u_flowMap;
|
|
93
|
+
uniform float u_poleSpread;
|
|
94
|
+
uniform float u_spokes;
|
|
95
|
+
uniform float u_arms;
|
|
96
|
+
uniform float u_circulation;
|
|
97
|
+
uniform float u_fill;
|
|
98
|
+
uniform float u_dye;
|
|
99
|
+
uniform float u_flowPhase;
|
|
100
|
+
|
|
101
|
+
varying vec2 vGridPos;
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
const float PI = 3.14159265359;
|
|
105
|
+
const float TAU = 6.28318530718;
|
|
106
|
+
|
|
107
|
+
float hash21(vec2 p){
|
|
108
|
+
p = fract(p * vec2(123.34, 456.21));
|
|
109
|
+
p += dot(p, p + 45.32);
|
|
110
|
+
return fract(p.x * p.y);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
float lineAt(float c, float width, float fp){
|
|
115
|
+
float d = abs(fract(c - 0.5) - 0.5);
|
|
116
|
+
return 1.0 - clamp(d / max(fp * max(width, 0.05), 1e-6), 0.0, 1.0);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
vec2 cmul(vec2 a, vec2 b){ return vec2(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x); }
|
|
120
|
+
vec2 cdiv(vec2 a, vec2 b){ return vec2(a.x * b.x + a.y * b.y, a.y * b.x - a.x * b.y) / max(dot(b, b), 1e-8); }
|
|
121
|
+
vec2 clog(vec2 z){ return vec2(log(max(length(z), 1e-8)), atan(z.y, z.x)); }
|
|
122
|
+
|
|
123
|
+
void main(){
|
|
124
|
+
vec2 coord = vGridPos / max(u_cellSize, 1e-4);
|
|
125
|
+
vec2 focus = u_focus / max(u_cellSize, 1e-4);
|
|
126
|
+
float t = u_time * u_animSpeed;
|
|
127
|
+
|
|
128
|
+
// Ideal (potential) flow. Any analytic complex potential W(z) = phi + i psi
|
|
129
|
+
// gives equipotentials (phi) and streamlines (psi) that cross at right angles
|
|
130
|
+
// everywhere — the Cauchy–Riemann equations — so the lattice pulled back
|
|
131
|
+
// through W is a mesh of tiny squares however hard the map bends it. Four flows:
|
|
132
|
+
// 0 source + sink W = log((z-1)/(z+1)) bipolar circles, a Smith-chart look
|
|
133
|
+
// 1 spiral vortex W = log z, rotated so the 2*pi*i period lands on (arms, spokes)
|
|
134
|
+
// 2 cylinder W = z + 1/z + i G log z flow past a spinning cylinder (Magnus lift)
|
|
135
|
+
// 3 corner W = z^2 / 2 stagnation-point flow
|
|
136
|
+
// The colouring is the physics: |W'| is the flow speed, so fast water is lit
|
|
137
|
+
// and stagnation points go dark (Bernoulli: low pressure where it is fast).
|
|
138
|
+
// u_flowPhase slides the mesh along phi, so the dye moves with the flow and
|
|
139
|
+
// runs faster exactly where the streamlines crowd together.
|
|
140
|
+
float A = max(u_poleSpread, 1e-3);
|
|
141
|
+
vec2 z = vGridPos / A;
|
|
142
|
+
float fz = max(max(fwidth(z.x), fwidth(z.y)), 1e-6);
|
|
143
|
+
float N = max(2.0, floor(u_spokes + 0.5));
|
|
144
|
+
float M = floor(u_arms + 0.5);
|
|
145
|
+
float s = A / max(u_cellSize, 1e-4);
|
|
146
|
+
float mode = floor(u_flowMap + 0.5);
|
|
147
|
+
|
|
148
|
+
vec2 g; // (phi, psi) in lattice units
|
|
149
|
+
float sp; // flow speed |W'|, 1 = the reference speed of the flow
|
|
150
|
+
vec2 P = vec2(0.0); // lattice jump across the log branch cut (none: 0)
|
|
151
|
+
float inside = 1.0;
|
|
152
|
+
float pole = 0.0;
|
|
153
|
+
float pr = 0.45 / s; // pole glow radius in z units
|
|
154
|
+
|
|
155
|
+
if (mode < 0.5){
|
|
156
|
+
vec2 a = z - vec2(1.0, 0.0), b = z + vec2(1.0, 0.0);
|
|
157
|
+
float k = N / TAU;
|
|
158
|
+
g = clog(cdiv(a, b)) * k;
|
|
159
|
+
sp = 2.0 * k / s / max(length(a) * length(b), 1e-6); // |dg/dz| / s
|
|
160
|
+
g.x -= u_flowPhase;
|
|
161
|
+
P = vec2(0.0, N);
|
|
162
|
+
pole = exp(-dot(a, a) / (pr * pr)) + exp(-dot(b, b) / (pr * pr));
|
|
163
|
+
} else if (mode < 1.5){
|
|
164
|
+
float k = length(vec2(M, N)) / TAU;
|
|
165
|
+
float al = atan(-M, N);
|
|
166
|
+
vec2 w = clog(z);
|
|
167
|
+
w.x -= u_flowPhase / k;
|
|
168
|
+
g = k * vec2(cos(al) * w.x - sin(al) * w.y, sin(al) * w.x + cos(al) * w.y);
|
|
169
|
+
sp = k / s / max(length(z), 1e-6);
|
|
170
|
+
P = vec2(M, N);
|
|
171
|
+
pole = exp(-dot(z, z) / (pr * pr));
|
|
172
|
+
} else if (mode < 2.5){
|
|
173
|
+
// u_circulation is G in W = z + 1/z + i G log z: at |G| = 2 the two
|
|
174
|
+
// stagnation points meet under the cylinder. It is quantised to whole
|
|
175
|
+
// lattice cells (steps of 1/(2 pi s)) so the log seam closes up.
|
|
176
|
+
float nc = floor(u_circulation * TAU * s + 0.5);
|
|
177
|
+
float G = nc / (TAU * s);
|
|
178
|
+
vec2 lz = clog(z);
|
|
179
|
+
g = (z + cdiv(vec2(1.0, 0.0), z)) * s + nc / TAU * vec2(-lz.y, lz.x);
|
|
180
|
+
vec2 dW = vec2(1.0, 0.0) - cdiv(vec2(1.0, 0.0), cmul(z, z)) + cdiv(vec2(0.0, G), z);
|
|
181
|
+
sp = length(dW);
|
|
182
|
+
g.x -= u_flowPhase;
|
|
183
|
+
P = vec2(nc, 0.0);
|
|
184
|
+
float rz = length(z);
|
|
185
|
+
inside = smoothstep(1.0, 1.0 + 2.0 * fz, rz);
|
|
186
|
+
pole = exp(-pow((rz - 1.0) * s / 0.12, 2.0)) * 0.7;
|
|
187
|
+
} else {
|
|
188
|
+
g = 0.5 * cmul(z, z) * s;
|
|
189
|
+
sp = length(z);
|
|
190
|
+
g.x -= u_flowPhase;
|
|
191
|
+
pole = exp(-dot(z, z) / (pr * pr)) * 0.5;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
float fp = max(sp * s * fz, 1e-6); // lattice units per pixel
|
|
195
|
+
float dens = (1.0 - smoothstep(0.2, 0.7, fp)) * inside;
|
|
196
|
+
|
|
197
|
+
// Streamlines lead; equipotentials sit behind them at a third of the weight.
|
|
198
|
+
float sl = lineAt(g.y, u_lineWidth, fp);
|
|
199
|
+
float ep = lineAt(g.x, u_lineWidth * 0.75, fp) * 0.35;
|
|
200
|
+
float lines = max(sl, ep) * dens;
|
|
201
|
+
|
|
202
|
+
float accent = 0.0;
|
|
203
|
+
if (u_sectionWidth > 0.0 && u_sectionSize > 0.0){
|
|
204
|
+
float fs = fp / u_sectionSize;
|
|
205
|
+
accent = lineAt(g.y / u_sectionSize, u_sectionWidth, fs) * (1.0 - smoothstep(0.2, 0.7, fs)) * inside;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// ---- the flow's own colouring ------------------------------------------
|
|
209
|
+
// speed ramp: slow water in cellColor, fast in lineColor, the fastest
|
|
210
|
+
// (round the poles, over the cylinder's shoulders) toward sectionColor
|
|
211
|
+
float sv = 1.0 - exp(-sp * 0.9);
|
|
212
|
+
vec3 flowCol = mix(u_cellColor, u_lineColor, smoothstep(0.15, 0.75, sv));
|
|
213
|
+
flowCol = mix(flowCol, u_sectionColor, smoothstep(0.75, 1.0, sv) * 0.6);
|
|
214
|
+
// stream tubes: every other tube carries dye, with soft walls
|
|
215
|
+
float tube = smoothstep(-0.55, 0.55, sin(PI * g.y));
|
|
216
|
+
tube = mix(0.5, tube, dens); // tubes thinner than a pixel go neutral
|
|
217
|
+
float body = (0.3 + 0.7 * tube) * u_fill * inside * (1.0 - smoothstep(0.5, 1.2, fp));
|
|
218
|
+
|
|
219
|
+
// hydrogen-bubble timelines: short dashes on every streamline, carried by
|
|
220
|
+
// the flow — they stretch where it speeds up and bunch where it stalls
|
|
221
|
+
float head = pow(fract(g.x * 0.5), 5.0);
|
|
222
|
+
float core = exp(-pow(abs(fract(g.y - 0.5) - 0.5) / (fp * max(u_lineWidth, 0.05) * 1.8), 2.0));
|
|
223
|
+
float dye = head * core * u_dye * dens;
|
|
224
|
+
|
|
225
|
+
vec2 id = floor(g);
|
|
226
|
+
vec2 fr = fract(g);
|
|
227
|
+
float dmin = min(min(fr.x, 1.0 - fr.x), min(fr.y, 1.0 - fr.y)) * dens;
|
|
228
|
+
vec2 key = id;
|
|
229
|
+
if (dot(P, P) > 0.5) key = vec2(id.x * P.y - id.y * P.x, mod(dot(id, P), dot(P, P)));
|
|
230
|
+
float cellH = hash21(key * 0.0173 + 3.1);
|
|
231
|
+
float idAcc = id.x * 10.0;
|
|
232
|
+
vec2 cellPos = coord;
|
|
233
|
+
float tone = step(0.5, tube);
|
|
234
|
+
|
|
235
|
+
// additive output is col * a, so the fill carries its alpha in full
|
|
236
|
+
vec3 extraCol = flowCol * body + u_glowColor * (dye * 1.4 + pole * 1.1);
|
|
237
|
+
float extraA = max(body, dye) + pole * 0.8;
|
|
238
|
+
|
|
239
|
+
// ---- line animation --------------------------------------------------
|
|
240
|
+
float lineAnim = 1.0;
|
|
241
|
+
// Mode 0 is static: the chain starts at 0.5 so 0 never falls into flow.
|
|
242
|
+
if (u_lineMode < 0.5){
|
|
243
|
+
} else if (u_lineMode < 1.5){
|
|
244
|
+
lineAnim = 0.5 + 0.5 * sin(length(cellPos - focus) * u_animScale - t);
|
|
245
|
+
} else if (u_lineMode < 2.5){
|
|
246
|
+
lineAnim = 0.5 + 0.5 * sin(dot(cellPos, vec2(0.5, 0.5)) * u_animScale - t);
|
|
247
|
+
} else if (u_lineMode < 3.5){
|
|
248
|
+
float s = fract((coord.x + coord.y) * 0.05 * u_animScale - t * 0.15);
|
|
249
|
+
lineAnim = 0.25 + smoothstep(0.0, 0.15, s) * (1.0 - smoothstep(0.15, 0.35, s));
|
|
250
|
+
} else if (u_lineMode < 4.5){
|
|
251
|
+
lineAnim = 0.5 + 0.5 * sin(t);
|
|
252
|
+
}
|
|
253
|
+
lineAnim = mix(1.0, lineAnim, u_animIntensity);
|
|
254
|
+
|
|
255
|
+
// ---- cell fill -------------------------------------------------------
|
|
256
|
+
float cell = 0.0;
|
|
257
|
+
if (u_cellMode < 0.5){
|
|
258
|
+
} else if (u_cellMode < 1.5){
|
|
259
|
+
cell = 0.5 + 0.5 * sin(idAcc * 0.05 * u_animScale - t);
|
|
260
|
+
} else if (u_cellMode < 2.5){
|
|
261
|
+
cell = 0.5 + 0.5 * sin(t * (0.6 + cellH) + cellH * TAU);
|
|
262
|
+
} else if (u_cellMode < 3.5){
|
|
263
|
+
cell = smoothstep(0.6, 1.0, sin(length(cellPos - focus) * u_animScale - t));
|
|
264
|
+
} else if (u_cellMode < 4.5){
|
|
265
|
+
cell = step(0.5, cellH) * (0.5 + 0.5 * sin(t));
|
|
266
|
+
}
|
|
267
|
+
cell *= u_animIntensity;
|
|
268
|
+
cell *= smoothstep(0.0, 0.16, dmin); // keep the fill off its own edges
|
|
269
|
+
|
|
270
|
+
float r = length(vGridPos) / max(u_fadeDistance, 1e-4);
|
|
271
|
+
float fade = 1.0 - smoothstep(1.0 - u_fadeStrength, 1.0, r);
|
|
272
|
+
|
|
273
|
+
vec3 col = u_bgColor * u_bgOpacity;
|
|
274
|
+
float a = u_bgOpacity;
|
|
275
|
+
|
|
276
|
+
col += mix(u_cellColor, u_cellColor * 2.2, tone) * cell;
|
|
277
|
+
a = max(a, cell * 0.9);
|
|
278
|
+
float linesI = lines * lineAnim;
|
|
279
|
+
col += u_lineColor * linesI; a = max(a, linesI);
|
|
280
|
+
float accentI = accent * lineAnim;
|
|
281
|
+
col += u_sectionColor * accentI; a = max(a, accentI);
|
|
282
|
+
col += u_glowColor * (linesI * 0.2 + cell * 0.35) * u_animIntensity;
|
|
283
|
+
col += extraCol; a = max(a, extraA);
|
|
284
|
+
|
|
285
|
+
col *= fade;
|
|
286
|
+
a *= fade;
|
|
287
|
+
|
|
288
|
+
// ---- reveal ----------------------------------------------------------
|
|
289
|
+
if (u_reveal < 0.999){
|
|
290
|
+
float rd = length(vGridPos - u_focus) / max(u_fadeDistance, 1e-4);
|
|
291
|
+
float edge = u_reveal * 1.1;
|
|
292
|
+
float mask = 1.0 - smoothstep(edge - 0.05, edge, rd);
|
|
293
|
+
float front = mask * smoothstep(edge - 0.22, edge - 0.05, rd);
|
|
294
|
+
col = col * mask + u_glowColor * front * (a * 1.8 + 0.08);
|
|
295
|
+
a = max(a * mask, front * 0.10);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
if (a < 0.002) discard;
|
|
299
|
+
gl_FragColor = vec4(col, a);
|
|
300
|
+
}
|
|
301
|
+
`;
|
|
302
|
+
export const ConformalGridMaterial = shaderMaterial({
|
|
303
|
+
u_time: conformalGridMaterialDefaults.u_time,
|
|
304
|
+
u_cellSize: conformalGridMaterialDefaults.u_cellSize,
|
|
305
|
+
u_lineWidth: conformalGridMaterialDefaults.u_lineWidth,
|
|
306
|
+
u_sectionSize: conformalGridMaterialDefaults.u_sectionSize,
|
|
307
|
+
u_sectionWidth: conformalGridMaterialDefaults.u_sectionWidth,
|
|
308
|
+
u_lineColor: conformalGridMaterialDefaults.u_lineColor.clone(),
|
|
309
|
+
u_sectionColor: conformalGridMaterialDefaults.u_sectionColor.clone(),
|
|
310
|
+
u_cellColor: conformalGridMaterialDefaults.u_cellColor.clone(),
|
|
311
|
+
u_glowColor: conformalGridMaterialDefaults.u_glowColor.clone(),
|
|
312
|
+
u_bgColor: conformalGridMaterialDefaults.u_bgColor.clone(),
|
|
313
|
+
u_bgOpacity: conformalGridMaterialDefaults.u_bgOpacity,
|
|
314
|
+
u_lineMode: conformalGridMaterialDefaults.u_lineMode,
|
|
315
|
+
u_cellMode: conformalGridMaterialDefaults.u_cellMode,
|
|
316
|
+
u_animSpeed: conformalGridMaterialDefaults.u_animSpeed,
|
|
317
|
+
u_animScale: conformalGridMaterialDefaults.u_animScale,
|
|
318
|
+
u_animIntensity: conformalGridMaterialDefaults.u_animIntensity,
|
|
319
|
+
u_fadeDistance: conformalGridMaterialDefaults.u_fadeDistance,
|
|
320
|
+
u_fadeStrength: conformalGridMaterialDefaults.u_fadeStrength,
|
|
321
|
+
u_focus: conformalGridMaterialDefaults.u_focus.clone(),
|
|
322
|
+
u_mouse: conformalGridMaterialDefaults.u_mouse.clone(),
|
|
323
|
+
u_displace: conformalGridMaterialDefaults.u_displace,
|
|
324
|
+
u_reveal: conformalGridMaterialDefaults.u_reveal,
|
|
325
|
+
u_flowMap: conformalGridMaterialDefaults.u_flowMap,
|
|
326
|
+
u_poleSpread: conformalGridMaterialDefaults.u_poleSpread,
|
|
327
|
+
u_spokes: conformalGridMaterialDefaults.u_spokes,
|
|
328
|
+
u_arms: conformalGridMaterialDefaults.u_arms,
|
|
329
|
+
u_circulation: conformalGridMaterialDefaults.u_circulation,
|
|
330
|
+
u_drift: conformalGridMaterialDefaults.u_drift,
|
|
331
|
+
u_fill: conformalGridMaterialDefaults.u_fill,
|
|
332
|
+
u_dye: conformalGridMaterialDefaults.u_dye,
|
|
333
|
+
u_flowPhase: conformalGridMaterialDefaults.u_flowPhase,
|
|
334
|
+
}, vertex, fragment);
|
|
335
|
+
extend({ ConformalGridMaterial });
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
export interface HilbertGridMaterialUniforms {
|
|
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
|
+
/** Curve order: the loop covers 2^order cells per side */
|
|
32
|
+
u_order: number;
|
|
33
|
+
/** Signals circulating round the loop */
|
|
34
|
+
u_signals: number;
|
|
35
|
+
/** Length of each signal trail, in cells */
|
|
36
|
+
u_trail: number;
|
|
37
|
+
/** Signal speed, in cells per second */
|
|
38
|
+
u_signalSpeed: number;
|
|
39
|
+
/** accumulated on the CPU from signalSpeed (never multiplied by time in the shader) */
|
|
40
|
+
u_signalPhase: number;
|
|
41
|
+
}
|
|
42
|
+
declare module '@react-three/fiber' {
|
|
43
|
+
interface ThreeElements {
|
|
44
|
+
hilbertGridMaterial: ThreeElements['shaderMaterial'] & Partial<HilbertGridMaterialUniforms>;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export declare const hilbertGridMaterialDefaults: HilbertGridMaterialUniforms;
|
|
48
|
+
export declare const HilbertGridMaterial: import("@react-three/fiber").ConstructorRepresentation<THREE.ShaderMaterial & {
|
|
49
|
+
u_time: number;
|
|
50
|
+
u_cellSize: number;
|
|
51
|
+
u_lineWidth: number;
|
|
52
|
+
u_sectionSize: number;
|
|
53
|
+
u_sectionWidth: number;
|
|
54
|
+
u_lineColor: THREE.Color;
|
|
55
|
+
u_sectionColor: THREE.Color;
|
|
56
|
+
u_cellColor: THREE.Color;
|
|
57
|
+
u_glowColor: THREE.Color;
|
|
58
|
+
u_bgColor: THREE.Color;
|
|
59
|
+
u_bgOpacity: number;
|
|
60
|
+
u_lineMode: number;
|
|
61
|
+
u_cellMode: number;
|
|
62
|
+
u_animSpeed: number;
|
|
63
|
+
u_animScale: number;
|
|
64
|
+
u_animIntensity: number;
|
|
65
|
+
u_fadeDistance: number;
|
|
66
|
+
u_fadeStrength: number;
|
|
67
|
+
u_focus: THREE.Vector2;
|
|
68
|
+
u_mouse: THREE.Vector2;
|
|
69
|
+
u_displace: number;
|
|
70
|
+
u_reveal: number;
|
|
71
|
+
u_order: number;
|
|
72
|
+
u_signals: number;
|
|
73
|
+
u_trail: number;
|
|
74
|
+
u_signalSpeed: number;
|
|
75
|
+
u_signalPhase: number;
|
|
76
|
+
}> & {
|
|
77
|
+
key: string;
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=HilbertGridMaterial.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HilbertGridMaterial.d.ts","sourceRoot":"","sources":["../../src/shaders/HilbertGridMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAgB/B,MAAM,WAAW,2BAA2B;IACxC,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,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,OAAO,QAAQ,oBAAoB,CAAC;IAChC,UAAU,aAAa;QACnB,mBAAmB,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;KAC/F;CACJ;AAED,eAAO,MAAM,2BAA2B,EAAE,2BA4BzC,CAAC;AA+QF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC/B,CAAC"}
|