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.
- package/LICENSE.txt +0 -0
- package/README.md +0 -0
- package/dist/Renderer.cjs +20844 -0
- package/dist/Renderer.cjs.map +1 -0
- package/dist/Renderer.js +20827 -0
- package/dist/Renderer.js.map +1 -0
- package/dist/client.cjs +91 -260
- package/dist/client.cjs.map +1 -1
- package/dist/client.js +68 -215
- package/dist/client.js.map +1 -1
- package/dist/server.cjs +165 -432
- package/dist/server.cjs.map +1 -1
- package/dist/server.js +117 -370
- package/dist/server.js.map +1 -1
- package/dist/terminal.cjs +113 -200
- package/dist/terminal.cjs.map +1 -1
- package/dist/terminal.js +50 -51
- package/dist/terminal.js.map +1 -1
- package/dist/utils-CRhi1BDa.cjs +259 -0
- package/dist/utils-CRhi1BDa.cjs.map +1 -0
- package/dist/utils-D7tXt6-2.js +260 -0
- package/dist/utils-D7tXt6-2.js.map +1 -0
- package/package.json +19 -15
- package/src/{client.ts → network/client.js} +170 -403
- package/src/{compress-browser.ts → network/compress-browser.js} +2 -4
- package/src/{compress-node.ts → network/compress-node.js} +8 -14
- package/src/{server.ts → network/server.js} +229 -317
- package/src/{terminal.js → network/terminal.js} +0 -0
- package/src/{topazcube.ts → network/topazcube.js} +2 -2
- package/src/network/utils.js +375 -0
- package/src/renderer/Camera.js +191 -0
- package/src/renderer/DebugUI.js +703 -0
- package/src/renderer/Geometry.js +1049 -0
- package/src/renderer/Material.js +64 -0
- package/src/renderer/Mesh.js +211 -0
- package/src/renderer/Node.js +112 -0
- package/src/renderer/Pipeline.js +645 -0
- package/src/renderer/Renderer.js +1496 -0
- package/src/renderer/Skin.js +792 -0
- package/src/renderer/Texture.js +584 -0
- package/src/renderer/core/AssetManager.js +394 -0
- package/src/renderer/core/CullingSystem.js +308 -0
- package/src/renderer/core/EntityManager.js +541 -0
- package/src/renderer/core/InstanceManager.js +343 -0
- package/src/renderer/core/ParticleEmitter.js +358 -0
- package/src/renderer/core/ParticleSystem.js +564 -0
- package/src/renderer/core/SpriteSystem.js +349 -0
- package/src/renderer/gltf.js +563 -0
- package/src/renderer/math.js +161 -0
- package/src/renderer/rendering/HistoryBufferManager.js +333 -0
- package/src/renderer/rendering/ProbeCapture.js +1495 -0
- package/src/renderer/rendering/ReflectionProbeManager.js +352 -0
- package/src/renderer/rendering/RenderGraph.js +2258 -0
- package/src/renderer/rendering/passes/AOPass.js +308 -0
- package/src/renderer/rendering/passes/AmbientCapturePass.js +593 -0
- package/src/renderer/rendering/passes/BasePass.js +101 -0
- package/src/renderer/rendering/passes/BloomPass.js +420 -0
- package/src/renderer/rendering/passes/CRTPass.js +724 -0
- package/src/renderer/rendering/passes/FogPass.js +445 -0
- package/src/renderer/rendering/passes/GBufferPass.js +730 -0
- package/src/renderer/rendering/passes/HiZPass.js +744 -0
- package/src/renderer/rendering/passes/LightingPass.js +753 -0
- package/src/renderer/rendering/passes/ParticlePass.js +841 -0
- package/src/renderer/rendering/passes/PlanarReflectionPass.js +456 -0
- package/src/renderer/rendering/passes/PostProcessPass.js +405 -0
- package/src/renderer/rendering/passes/ReflectionPass.js +157 -0
- package/src/renderer/rendering/passes/RenderPostPass.js +364 -0
- package/src/renderer/rendering/passes/SSGIPass.js +266 -0
- package/src/renderer/rendering/passes/SSGITilePass.js +305 -0
- package/src/renderer/rendering/passes/ShadowPass.js +2072 -0
- package/src/renderer/rendering/passes/TransparentPass.js +831 -0
- package/src/renderer/rendering/passes/VolumetricFogPass.js +715 -0
- package/src/renderer/rendering/shaders/ao.wgsl +182 -0
- package/src/renderer/rendering/shaders/bloom.wgsl +97 -0
- package/src/renderer/rendering/shaders/bloom_blur.wgsl +80 -0
- package/src/renderer/rendering/shaders/crt.wgsl +455 -0
- package/src/renderer/rendering/shaders/depth_copy.wgsl +17 -0
- package/src/renderer/rendering/shaders/geometry.wgsl +580 -0
- package/src/renderer/rendering/shaders/hiz_reduce.wgsl +114 -0
- package/src/renderer/rendering/shaders/light_culling.wgsl +204 -0
- package/src/renderer/rendering/shaders/lighting.wgsl +932 -0
- package/src/renderer/rendering/shaders/lighting_common.wgsl +143 -0
- package/src/renderer/rendering/shaders/particle_render.wgsl +672 -0
- package/src/renderer/rendering/shaders/particle_simulate.wgsl +440 -0
- package/src/renderer/rendering/shaders/postproc.wgsl +293 -0
- package/src/renderer/rendering/shaders/render_post.wgsl +289 -0
- package/src/renderer/rendering/shaders/shadow.wgsl +117 -0
- package/src/renderer/rendering/shaders/ssgi.wgsl +266 -0
- package/src/renderer/rendering/shaders/ssgi_accumulate.wgsl +114 -0
- package/src/renderer/rendering/shaders/ssgi_propagate.wgsl +132 -0
- package/src/renderer/rendering/shaders/volumetric_blur.wgsl +80 -0
- package/src/renderer/rendering/shaders/volumetric_composite.wgsl +80 -0
- package/src/renderer/rendering/shaders/volumetric_raymarch.wgsl +634 -0
- package/src/renderer/utils/BoundingSphere.js +439 -0
- package/src/renderer/utils/Frustum.js +281 -0
- package/src/renderer/utils/Raycaster.js +761 -0
- package/dist/client.d.cts +0 -211
- package/dist/client.d.ts +0 -211
- package/dist/server.d.cts +0 -120
- package/dist/server.d.ts +0 -120
- package/dist/terminal.d.cts +0 -64
- package/dist/terminal.d.ts +0 -64
- 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
|
+
}
|