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,80 @@
1
+ // Volumetric Fog - Gaussian Blur
2
+ // Blurs the ray-marched fog for softer edges
3
+
4
+ struct Uniforms {
5
+ direction: vec2f,
6
+ texelSize: vec2f,
7
+ radius: f32,
8
+ _pad0: f32,
9
+ _pad1: f32,
10
+ _pad2: f32,
11
+ }
12
+
13
+ struct VertexOutput {
14
+ @builtin(position) position: vec4f,
15
+ @location(0) uv: vec2f,
16
+ }
17
+
18
+ @group(0) @binding(0) var<uniform> uniforms: Uniforms;
19
+ @group(0) @binding(1) var inputTexture: texture_2d<f32>;
20
+ @group(0) @binding(2) var inputSampler: sampler;
21
+
22
+ // Full-screen triangle vertex shader
23
+ @vertex
24
+ fn vertexMain(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput {
25
+ var output: VertexOutput;
26
+
27
+ let x = f32(vertexIndex & 1u) * 4.0 - 1.0;
28
+ let y = f32(vertexIndex >> 1u) * 4.0 - 1.0;
29
+
30
+ output.position = vec4f(x, y, 0.0, 1.0);
31
+ output.uv = vec2f((x + 1.0) * 0.5, (1.0 - y) * 0.5);
32
+
33
+ return output;
34
+ }
35
+
36
+ // Gaussian weight function
37
+ fn gaussian(x: f32, sigma: f32) -> f32 {
38
+ return exp(-(x * x) / (2.0 * sigma * sigma));
39
+ }
40
+
41
+ @fragment
42
+ fn fragmentMain(input: VertexOutput) -> @location(0) vec4f {
43
+ let uv = input.uv;
44
+ let radius = uniforms.radius;
45
+ let sigma = radius / 3.0; // 99.7% of Gaussian within 3 sigma
46
+
47
+ // Sample center pixel
48
+ var color = textureSample(inputTexture, inputSampler, uv);
49
+ var totalWeight = 1.0;
50
+
51
+ // Step size (sample every 1.5 texels for efficiency)
52
+ let stepSize = 1.5;
53
+ let numSamples = i32(ceil(radius / stepSize));
54
+
55
+ // Blur direction (scaled by texel size)
56
+ let dir = uniforms.direction * uniforms.texelSize;
57
+
58
+ // Bidirectional sampling
59
+ for (var i = 1; i <= numSamples; i++) {
60
+ let offset = f32(i) * stepSize;
61
+ let weight = gaussian(offset, sigma);
62
+
63
+ // Positive direction
64
+ let uvPos = uv + dir * offset;
65
+ let samplePos = textureSample(inputTexture, inputSampler, uvPos);
66
+ color += samplePos * weight;
67
+
68
+ // Negative direction
69
+ let uvNeg = uv - dir * offset;
70
+ let sampleNeg = textureSample(inputTexture, inputSampler, uvNeg);
71
+ color += sampleNeg * weight;
72
+
73
+ totalWeight += weight * 2.0;
74
+ }
75
+
76
+ // Normalize
77
+ color /= totalWeight;
78
+
79
+ return color;
80
+ }
@@ -0,0 +1,80 @@
1
+ // Volumetric Fog - Composite
2
+ // Blends the blurred fog into the scene (additive)
3
+
4
+ struct Uniforms {
5
+ canvasSize: vec2f,
6
+ renderSize: vec2f,
7
+ texelSize: vec2f,
8
+ // Brightness-based fog attenuation (like bloom)
9
+ brightnessThreshold: f32, // Scene luminance where fog starts fading
10
+ minVisibility: f32, // Minimum fog visibility over bright surfaces (0-1)
11
+ skyBrightness: f32, // Virtual brightness for sky pixels (depth at far plane)
12
+ _pad: f32,
13
+ }
14
+
15
+ struct VertexOutput {
16
+ @builtin(position) position: vec4f,
17
+ @location(0) uv: vec2f,
18
+ }
19
+
20
+ @group(0) @binding(0) var<uniform> uniforms: Uniforms;
21
+ @group(0) @binding(1) var sceneTexture: texture_2d<f32>;
22
+ @group(0) @binding(2) var fogTexture: texture_2d<f32>;
23
+ @group(0) @binding(3) var linearSampler: sampler;
24
+ @group(0) @binding(4) var depthTexture: texture_depth_2d;
25
+
26
+ // Full-screen triangle vertex shader
27
+ @vertex
28
+ fn vertexMain(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput {
29
+ var output: VertexOutput;
30
+
31
+ let x = f32(vertexIndex & 1u) * 4.0 - 1.0;
32
+ let y = f32(vertexIndex >> 1u) * 4.0 - 1.0;
33
+
34
+ output.position = vec4f(x, y, 0.0, 1.0);
35
+ output.uv = vec2f((x + 1.0) * 0.5, (1.0 - y) * 0.5);
36
+
37
+ return output;
38
+ }
39
+
40
+ @fragment
41
+ fn fragmentMain(input: VertexOutput) -> @location(0) vec4f {
42
+ let uv = input.uv;
43
+
44
+ // Sample scene color at full resolution
45
+ let sceneColor = textureSample(sceneTexture, linearSampler, uv).rgb;
46
+
47
+ // Sample fog at reduced resolution (will be upsampled by linear filtering)
48
+ let fog = textureSample(fogTexture, linearSampler, uv);
49
+
50
+ // Sample depth to detect sky (depth near 1.0 = far plane = sky)
51
+ let depthCoord = vec2i(input.position.xy);
52
+ let depth = textureLoad(depthTexture, depthCoord, 0);
53
+
54
+ // Calculate scene luminance for brightness-based attenuation
55
+ var luminance = dot(sceneColor, vec3f(0.299, 0.587, 0.114));
56
+
57
+ // Sky detection: if depth is very close to 1.0 (far plane), treat as bright
58
+ // This ensures fog is less visible over sky even if sky color isn't bright
59
+ let isSky = depth > 0.9999;
60
+ if (isSky) {
61
+ luminance = max(luminance, uniforms.skyBrightness);
62
+ }
63
+
64
+ // Fog visibility decreases over bright surfaces (like bloom behavior)
65
+ // Full visibility at dark, reduced visibility at bright, but never zero
66
+ let threshold = uniforms.brightnessThreshold;
67
+ let minVis = uniforms.minVisibility;
68
+
69
+ // Soft falloff using inverse relationship
70
+ // At luminance=0: visibility=1
71
+ // At luminance=threshold: visibility≈0.5
72
+ // At luminance>>threshold: visibility→minVis
73
+ let falloff = 1.0 / (1.0 + luminance / max(threshold, 0.01));
74
+ let fogVisibility = mix(minVis, 1.0, falloff);
75
+
76
+ // Additive blend with brightness attenuation
77
+ let finalColor = sceneColor + fog.rgb * fogVisibility;
78
+
79
+ return vec4f(finalColor, 1.0);
80
+ }