topazcube 0.1.31 → 0.1.35

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 (103) hide show
  1. package/LICENSE.txt +0 -0
  2. package/README.md +0 -0
  3. package/dist/Renderer.cjs +20844 -0
  4. package/dist/Renderer.cjs.map +1 -0
  5. package/dist/Renderer.js +20827 -0
  6. package/dist/Renderer.js.map +1 -0
  7. package/dist/client.cjs +91 -260
  8. package/dist/client.cjs.map +1 -1
  9. package/dist/client.js +68 -215
  10. package/dist/client.js.map +1 -1
  11. package/dist/server.cjs +165 -432
  12. package/dist/server.cjs.map +1 -1
  13. package/dist/server.js +117 -370
  14. package/dist/server.js.map +1 -1
  15. package/dist/terminal.cjs +113 -200
  16. package/dist/terminal.cjs.map +1 -1
  17. package/dist/terminal.js +50 -51
  18. package/dist/terminal.js.map +1 -1
  19. package/dist/utils-CRhi1BDa.cjs +259 -0
  20. package/dist/utils-CRhi1BDa.cjs.map +1 -0
  21. package/dist/utils-D7tXt6-2.js +260 -0
  22. package/dist/utils-D7tXt6-2.js.map +1 -0
  23. package/package.json +19 -15
  24. package/src/{client.ts → network/client.js} +170 -403
  25. package/src/{compress-browser.ts → network/compress-browser.js} +2 -4
  26. package/src/{compress-node.ts → network/compress-node.js} +8 -14
  27. package/src/{server.ts → network/server.js} +229 -317
  28. package/src/{terminal.js → network/terminal.js} +0 -0
  29. package/src/{topazcube.ts → network/topazcube.js} +2 -2
  30. package/src/network/utils.js +375 -0
  31. package/src/renderer/Camera.js +191 -0
  32. package/src/renderer/DebugUI.js +703 -0
  33. package/src/renderer/Geometry.js +1049 -0
  34. package/src/renderer/Material.js +64 -0
  35. package/src/renderer/Mesh.js +211 -0
  36. package/src/renderer/Node.js +112 -0
  37. package/src/renderer/Pipeline.js +645 -0
  38. package/src/renderer/Renderer.js +1496 -0
  39. package/src/renderer/Skin.js +792 -0
  40. package/src/renderer/Texture.js +584 -0
  41. package/src/renderer/core/AssetManager.js +394 -0
  42. package/src/renderer/core/CullingSystem.js +308 -0
  43. package/src/renderer/core/EntityManager.js +541 -0
  44. package/src/renderer/core/InstanceManager.js +343 -0
  45. package/src/renderer/core/ParticleEmitter.js +358 -0
  46. package/src/renderer/core/ParticleSystem.js +564 -0
  47. package/src/renderer/core/SpriteSystem.js +349 -0
  48. package/src/renderer/gltf.js +563 -0
  49. package/src/renderer/math.js +161 -0
  50. package/src/renderer/rendering/HistoryBufferManager.js +333 -0
  51. package/src/renderer/rendering/ProbeCapture.js +1495 -0
  52. package/src/renderer/rendering/ReflectionProbeManager.js +352 -0
  53. package/src/renderer/rendering/RenderGraph.js +2258 -0
  54. package/src/renderer/rendering/passes/AOPass.js +308 -0
  55. package/src/renderer/rendering/passes/AmbientCapturePass.js +593 -0
  56. package/src/renderer/rendering/passes/BasePass.js +101 -0
  57. package/src/renderer/rendering/passes/BloomPass.js +420 -0
  58. package/src/renderer/rendering/passes/CRTPass.js +724 -0
  59. package/src/renderer/rendering/passes/FogPass.js +445 -0
  60. package/src/renderer/rendering/passes/GBufferPass.js +730 -0
  61. package/src/renderer/rendering/passes/HiZPass.js +744 -0
  62. package/src/renderer/rendering/passes/LightingPass.js +753 -0
  63. package/src/renderer/rendering/passes/ParticlePass.js +841 -0
  64. package/src/renderer/rendering/passes/PlanarReflectionPass.js +456 -0
  65. package/src/renderer/rendering/passes/PostProcessPass.js +405 -0
  66. package/src/renderer/rendering/passes/ReflectionPass.js +157 -0
  67. package/src/renderer/rendering/passes/RenderPostPass.js +364 -0
  68. package/src/renderer/rendering/passes/SSGIPass.js +266 -0
  69. package/src/renderer/rendering/passes/SSGITilePass.js +305 -0
  70. package/src/renderer/rendering/passes/ShadowPass.js +2072 -0
  71. package/src/renderer/rendering/passes/TransparentPass.js +831 -0
  72. package/src/renderer/rendering/passes/VolumetricFogPass.js +715 -0
  73. package/src/renderer/rendering/shaders/ao.wgsl +182 -0
  74. package/src/renderer/rendering/shaders/bloom.wgsl +97 -0
  75. package/src/renderer/rendering/shaders/bloom_blur.wgsl +80 -0
  76. package/src/renderer/rendering/shaders/crt.wgsl +455 -0
  77. package/src/renderer/rendering/shaders/depth_copy.wgsl +17 -0
  78. package/src/renderer/rendering/shaders/geometry.wgsl +580 -0
  79. package/src/renderer/rendering/shaders/hiz_reduce.wgsl +114 -0
  80. package/src/renderer/rendering/shaders/light_culling.wgsl +204 -0
  81. package/src/renderer/rendering/shaders/lighting.wgsl +932 -0
  82. package/src/renderer/rendering/shaders/lighting_common.wgsl +143 -0
  83. package/src/renderer/rendering/shaders/particle_render.wgsl +672 -0
  84. package/src/renderer/rendering/shaders/particle_simulate.wgsl +440 -0
  85. package/src/renderer/rendering/shaders/postproc.wgsl +293 -0
  86. package/src/renderer/rendering/shaders/render_post.wgsl +289 -0
  87. package/src/renderer/rendering/shaders/shadow.wgsl +117 -0
  88. package/src/renderer/rendering/shaders/ssgi.wgsl +266 -0
  89. package/src/renderer/rendering/shaders/ssgi_accumulate.wgsl +114 -0
  90. package/src/renderer/rendering/shaders/ssgi_propagate.wgsl +132 -0
  91. package/src/renderer/rendering/shaders/volumetric_blur.wgsl +80 -0
  92. package/src/renderer/rendering/shaders/volumetric_composite.wgsl +80 -0
  93. package/src/renderer/rendering/shaders/volumetric_raymarch.wgsl +634 -0
  94. package/src/renderer/utils/BoundingSphere.js +439 -0
  95. package/src/renderer/utils/Frustum.js +281 -0
  96. package/src/renderer/utils/Raycaster.js +761 -0
  97. package/dist/client.d.cts +0 -211
  98. package/dist/client.d.ts +0 -211
  99. package/dist/server.d.cts +0 -120
  100. package/dist/server.d.ts +0 -120
  101. package/dist/terminal.d.cts +0 -64
  102. package/dist/terminal.d.ts +0 -64
  103. package/src/utils.ts +0 -403
@@ -0,0 +1,143 @@
1
+ // Shared lighting functions for deferred and forward rendering
2
+ // This file is imported as a string and concatenated with other shaders
3
+
4
+ const PI = 3.14159;
5
+ const MAX_LIGHTS = 768;
6
+ const CASCADE_COUNT = 3;
7
+ const MAX_LIGHTS_PER_TILE = 256;
8
+ const MAX_SPOT_SHADOWS = 16;
9
+
10
+ // Hard-coded spot shadow parameters
11
+ const SPOT_ATLAS_WIDTH: f32 = 2048.0;
12
+ const SPOT_ATLAS_HEIGHT: f32 = 2048.0;
13
+ const SPOT_TILE_SIZE: f32 = 512.0;
14
+ const SPOT_TILES_PER_ROW: i32 = 4;
15
+ const SPOT_FADE_START: f32 = 25.0;
16
+ const SPOT_MAX_DISTANCE: f32 = 30.0;
17
+ const SPOT_MIN_SHADOW: f32 = 0.5;
18
+
19
+ struct Light {
20
+ enabled: u32,
21
+ position: vec3f,
22
+ color: vec4f,
23
+ direction: vec3f,
24
+ geom: vec4f,
25
+ shadowIndex: i32,
26
+ }
27
+
28
+ struct SpotShadowMatrices {
29
+ matrices: array<mat4x4<f32>, MAX_SPOT_SHADOWS>,
30
+ }
31
+
32
+ struct CascadeMatrices {
33
+ matrices: array<mat4x4<f32>, CASCADE_COUNT>,
34
+ }
35
+
36
+ // ============================================
37
+ // Environment mapping functions
38
+ // ============================================
39
+
40
+ fn SphToUV(n: vec3<f32>) -> vec2<f32> {
41
+ var uv: vec2<f32>;
42
+ uv.x = atan2(-n.x, n.z);
43
+ uv.x = (uv.x + PI / 2.0) / (PI * 2.0) + PI * (28.670 / 360.0);
44
+ uv.y = acos(n.y) / PI;
45
+ return uv;
46
+ }
47
+
48
+ fn octEncode(n: vec3<f32>) -> vec2<f32> {
49
+ var n2 = n / (abs(n.x) + abs(n.y) + abs(n.z));
50
+ if (n2.y < 0.0) {
51
+ let signX = select(-1.0, 1.0, n2.x >= 0.0);
52
+ let signZ = select(-1.0, 1.0, n2.z >= 0.0);
53
+ n2 = vec3f(
54
+ (1.0 - abs(n2.z)) * signX,
55
+ n2.y,
56
+ (1.0 - abs(n2.x)) * signZ
57
+ );
58
+ }
59
+ return n2.xz * 0.5 + 0.5;
60
+ }
61
+
62
+ fn octDecode(uv: vec2<f32>) -> vec3<f32> {
63
+ var uv2 = uv * 2.0 - 1.0;
64
+ var n = vec3f(uv2.x, 1.0 - abs(uv2.x) - abs(uv2.y), uv2.y);
65
+ if (n.y < 0.0) {
66
+ let signX = select(-1.0, 1.0, n.x >= 0.0);
67
+ let signZ = select(-1.0, 1.0, n.z >= 0.0);
68
+ n = vec3f(
69
+ (1.0 - abs(n.z)) * signX,
70
+ n.y,
71
+ (1.0 - abs(n.x)) * signZ
72
+ );
73
+ }
74
+ return normalize(n);
75
+ }
76
+
77
+ // ============================================
78
+ // Noise sampling functions
79
+ // ============================================
80
+
81
+ fn vogelDiskSample(sampleIndex: i32, numSamples: i32, rotation: f32) -> vec2f {
82
+ let goldenAngle = 2.399963229728653;
83
+ let r = sqrt((f32(sampleIndex) + 0.5) / f32(numSamples));
84
+ let theta = f32(sampleIndex) * goldenAngle + rotation;
85
+ return vec2f(r * cos(theta), r * sin(theta));
86
+ }
87
+
88
+ fn buildOrthonormalBasis(n: vec3f) -> mat3x3<f32> {
89
+ let up = select(vec3f(1.0, 0.0, 0.0), vec3f(0.0, 1.0, 0.0), abs(n.y) < 0.999);
90
+ let tangent = normalize(cross(up, n));
91
+ let bitangent = cross(n, tangent);
92
+ return mat3x3<f32>(tangent, bitangent, n);
93
+ }
94
+
95
+ // ============================================
96
+ // PBR BRDF functions
97
+ // ============================================
98
+
99
+ fn clampedDot(x: vec3<f32>, y: vec3<f32>) -> f32 {
100
+ return clamp(dot(x, y), 0.0, 1.0);
101
+ }
102
+
103
+ fn F_Schlick(f0: vec3<f32>, f90: vec3<f32>, VdotH: f32) -> vec3<f32> {
104
+ return f0 + (f90 - f0) * pow(clamp(1.0 - VdotH, 0.0, 1.0), 5.0);
105
+ }
106
+
107
+ fn V_GGX(NdotL: f32, NdotV: f32, alphaRoughness: f32) -> f32 {
108
+ let alphaRoughnessSq = alphaRoughness * alphaRoughness;
109
+ let GGXV = NdotL * sqrt(NdotV * NdotV * (1.0 - alphaRoughnessSq) + alphaRoughnessSq);
110
+ let GGXL = NdotV * sqrt(NdotL * NdotL * (1.0 - alphaRoughnessSq) + alphaRoughnessSq);
111
+ let GGX = GGXV + GGXL;
112
+ if (GGX > 0.0) {
113
+ return 0.5 / GGX;
114
+ }
115
+ return 0.0;
116
+ }
117
+
118
+ fn D_GGX(NdotH: f32, alphaRoughness: f32) -> f32 {
119
+ let alphaRoughnessSq = alphaRoughness * alphaRoughness;
120
+ let f = (NdotH * NdotH) * (alphaRoughnessSq - 1.0) + 1.0;
121
+ return alphaRoughnessSq / (PI * f * f);
122
+ }
123
+
124
+ fn BRDF_lambertian(f0: vec3<f32>, f90: vec3<f32>, diffuseColor: vec3<f32>, specularWeight: f32, VdotH: f32) -> vec3<f32> {
125
+ return (1.0 - specularWeight * F_Schlick(f0, f90, VdotH)) * (diffuseColor / PI);
126
+ }
127
+
128
+ fn BRDF_specularGGX(f0: vec3<f32>, f90: vec3<f32>, alphaRoughness: f32, specularWeight: f32, VdotH: f32, NdotL: f32, NdotV: f32, NdotH: f32) -> vec3<f32> {
129
+ let F = F_Schlick(f0, f90, VdotH);
130
+ let Vis = V_GGX(NdotL, NdotV, alphaRoughness);
131
+ let D = D_GGX(NdotH, alphaRoughness);
132
+ return specularWeight * F * Vis * D;
133
+ }
134
+
135
+ // ============================================
136
+ // Squircle distance for cascade blending
137
+ // ============================================
138
+
139
+ fn squircleDistanceXZ(offset: vec2f, size: f32) -> f32 {
140
+ let normalized = offset / size;
141
+ let absNorm = abs(normalized);
142
+ return pow(pow(absNorm.x, 4.0) + pow(absNorm.y, 4.0), 0.25);
143
+ }