@vitessce/spatial-accelerated 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.js +52925 -0
  3. package/dist-tsc/SpatialWrapper.d.ts +2 -0
  4. package/dist-tsc/SpatialWrapper.d.ts.map +1 -0
  5. package/dist-tsc/SpatialWrapper.js +45 -0
  6. package/dist-tsc/VolumeDataManager.d.ts +170 -0
  7. package/dist-tsc/VolumeDataManager.d.ts.map +1 -0
  8. package/dist-tsc/VolumeDataManager.js +1273 -0
  9. package/dist-tsc/VolumeDataManager.test.d.ts +2 -0
  10. package/dist-tsc/VolumeDataManager.test.d.ts.map +1 -0
  11. package/dist-tsc/VolumeDataManager.test.js +164 -0
  12. package/dist-tsc/VolumeRenderManager.d.ts +265 -0
  13. package/dist-tsc/VolumeRenderManager.d.ts.map +1 -0
  14. package/dist-tsc/VolumeRenderManager.js +396 -0
  15. package/dist-tsc/VolumeShader.d.ts +262 -0
  16. package/dist-tsc/VolumeShader.d.ts.map +1 -0
  17. package/dist-tsc/VolumeShader.js +73 -0
  18. package/dist-tsc/VolumeView.d.ts +2 -0
  19. package/dist-tsc/VolumeView.d.ts.map +1 -0
  20. package/dist-tsc/VolumeView.js +521 -0
  21. package/dist-tsc/index.d.ts +2 -0
  22. package/dist-tsc/index.d.ts.map +1 -0
  23. package/dist-tsc/index.js +1 -0
  24. package/dist-tsc/shaders/GaussianFragmentShader.d.ts +2 -0
  25. package/dist-tsc/shaders/GaussianFragmentShader.d.ts.map +1 -0
  26. package/dist-tsc/shaders/GaussianFragmentShader.js +242 -0
  27. package/dist-tsc/shaders/GaussianVertexShader.d.ts +2 -0
  28. package/dist-tsc/shaders/GaussianVertexShader.d.ts.map +1 -0
  29. package/dist-tsc/shaders/GaussianVertexShader.js +51 -0
  30. package/dist-tsc/shaders/VolumeFragmentShader.d.ts +2 -0
  31. package/dist-tsc/shaders/VolumeFragmentShader.d.ts.map +1 -0
  32. package/dist-tsc/shaders/VolumeFragmentShader.js +1817 -0
  33. package/dist-tsc/shaders/VolumeVertexShader.d.ts +2 -0
  34. package/dist-tsc/shaders/VolumeVertexShader.d.ts.map +1 -0
  35. package/dist-tsc/shaders/VolumeVertexShader.js +110 -0
  36. package/package.json +63 -0
  37. package/src/SpatialWrapper.js +60 -0
  38. package/src/VolumeDataManager.js +1515 -0
  39. package/src/VolumeDataManager.test.js +180 -0
  40. package/src/VolumeRenderManager.js +589 -0
  41. package/src/VolumeShader.js +74 -0
  42. package/src/VolumeView.js +651 -0
  43. package/src/index.js +1 -0
  44. package/src/shaders/GaussianFragmentShader.js +243 -0
  45. package/src/shaders/GaussianVertexShader.js +52 -0
  46. package/src/shaders/VolumeFragmentShader.js +1818 -0
  47. package/src/shaders/VolumeVertexShader.js +111 -0
@@ -0,0 +1,111 @@
1
+ // Attribution: Originally written by @alexandrairger
2
+ // Moved from .glsl file to .js file in this commit: https://github.com/vitessce/vitessce/pull/2264/commits/7f17fc003674a4ed1a8de6140db802781871cf88
3
+ /*
4
+
5
+ ============================================================================
6
+ VOLUME RENDERING PIPELINE OVERVIEW
7
+ ============================================================================
8
+
9
+ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
10
+ │ Vertex Shader │───▶│ Fragment Shader │───▶│ Final Image │
11
+ │ (this shader) │ │ (ray marching) │ │ │
12
+ └─────────────────┘ └─────────────────┘ └─────────────────┘
13
+ │ rayDirUnnorm │ sample volume
14
+ │ cameraCorrected │ blend voxels
15
+ │ worldSpaceCoords │ apply lighting
16
+
17
+ ============================================================================
18
+ COORDINATE TRANSFORMATIONS
19
+ ============================================================================
20
+
21
+ 1. Volume Space Normalization:
22
+ Original: [-0.5, 0.5] Normalized: [0, 1]
23
+ ┌─────────────┐ ┌─────────────┐
24
+ │ -0.5 │ │ 0 │
25
+ │ │ │ │
26
+ │ 0 │──────────▶│ 0.5 │
27
+ │ │ │ │
28
+ │ 0.5 │ │ 1 │
29
+ └─────────────┘ └─────────────┘
30
+
31
+ 2. Camera Position Transformation:
32
+ World Space: Volume Space:
33
+ ┌─────────────┐ ┌─────────────┐
34
+ │ Camera │ │ Camera │
35
+ │ Position │──▶│ Position │
36
+ └─────────────┘ └─────────────┘
37
+ (x,y,z) (x',y',z')
38
+
39
+ 3. Ray Direction Calculation:
40
+ Camera (cameraCorrected)
41
+ │
42
+ │ rayDirUnnorm = position - cameraCorrected
43
+ ▼
44
+ Vertex (position)
45
+
46
+ 4. MVP Transformation Pipeline:
47
+ Model Space → View Space → Projection Space → Clip Space
48
+ (x,y,z) → (x',y',z') → (x",y",z") → (x"',y"',z"')
49
+ */
50
+
51
+ // lang: glsl
52
+ export const volumeVertexShader = `//
53
+ // Output: Unnormalized ray direction from camera to each vertex
54
+ // Used by fragment shader for ray marching through the volume
55
+ out vec3 rayDirUnnorm;
56
+
57
+ // Output: Camera position transformed into volume's local coordinate system
58
+ // Used to calculate ray origins in the fragment shader
59
+ out vec3 cameraCorrected;
60
+
61
+ // Volume scale uniform (likely for anisotropic voxels)
62
+ uniform vec3 u_vol_scale;
63
+
64
+ // Volume size uniform
65
+ uniform vec3 u_size;
66
+
67
+ // Output: Vertex positions normalized to [0,1] range within volume bounds
68
+ // Standard coordinate system for volume sampling
69
+ varying vec3 worldSpaceCoords;
70
+
71
+ // Output: Texture coordinates for sampling volume data
72
+ varying vec2 vUv;
73
+
74
+ // Output: Final clip-space position (stored for fragment shader access)
75
+ varying vec4 glPosition;
76
+
77
+ // Volume bounding box size uniform
78
+ uniform highp vec3 boxSize;
79
+
80
+ void main()
81
+ {
82
+ // Transform vertex positions from [-0.5, 0.5] range to [0, 1] range
83
+ // This is the standard coordinate system for volume sampling
84
+ //
85
+ // Mathematical transformation:
86
+ // worldSpaceCoords = (position / boxSize) + 0.5
87
+ //
88
+ // Example:
89
+ // position = (-0.5, -0.5, -0.5) → worldSpaceCoords = (0, 0, 0)
90
+ // position = ( 0.0, 0.0, 0.0) → worldSpaceCoords = (0.5, 0.5, 0.5)
91
+ // position = ( 0.5, 0.5, 0.5) → worldSpaceCoords = (1, 1, 1)
92
+ worldSpaceCoords = position / boxSize + vec3(0.5, 0.5, 0.5); //move it from [-0.5;0.5] to [0,1]
93
+
94
+ // Transform camera position into volume's local coordinate system
95
+ // This gives us the ray origin in volume space
96
+ cameraCorrected = (inverse(modelMatrix) * vec4(cameraPosition, 1.)).xyz;
97
+
98
+ // Calculate unnormalized ray direction from camera to each vertex
99
+ // Used by fragment shader for ray marching through the volume
100
+ rayDirUnnorm = position - cameraCorrected;
101
+
102
+ // Apply standard MVP transformation to get clip-space coordinates
103
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
104
+
105
+ // Store clip-space position for fragment shader access
106
+ glPosition = gl_Position;
107
+
108
+ // Pass through texture coordinates for volume sampling
109
+ vUv = uv;
110
+ }
111
+ `;