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,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
|
+
}
|