@certe/atmos-renderer 0.1.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 (204) hide show
  1. package/LICENCE +674 -0
  2. package/README.md +166 -0
  3. package/dist/bloom-pass.d.ts +29 -0
  4. package/dist/bloom-pass.d.ts.map +1 -0
  5. package/dist/bloom-pass.js +173 -0
  6. package/dist/bloom-pass.js.map +1 -0
  7. package/dist/bloom-shader.d.ts +9 -0
  8. package/dist/bloom-shader.d.ts.map +1 -0
  9. package/dist/bloom-shader.js +69 -0
  10. package/dist/bloom-shader.js.map +1 -0
  11. package/dist/bounds.d.ts +10 -0
  12. package/dist/bounds.d.ts.map +1 -0
  13. package/dist/bounds.js +37 -0
  14. package/dist/bounds.js.map +1 -0
  15. package/dist/camera.d.ts +31 -0
  16. package/dist/camera.d.ts.map +1 -0
  17. package/dist/camera.js +53 -0
  18. package/dist/camera.js.map +1 -0
  19. package/dist/depth-prepass.d.ts +24 -0
  20. package/dist/depth-prepass.d.ts.map +1 -0
  21. package/dist/depth-prepass.js +107 -0
  22. package/dist/depth-prepass.js.map +1 -0
  23. package/dist/directional-light.d.ts +23 -0
  24. package/dist/directional-light.d.ts.map +1 -0
  25. package/dist/directional-light.js +36 -0
  26. package/dist/directional-light.js.map +1 -0
  27. package/dist/frustum.d.ts +15 -0
  28. package/dist/frustum.d.ts.map +1 -0
  29. package/dist/frustum.js +51 -0
  30. package/dist/frustum.js.map +1 -0
  31. package/dist/fullscreen-quad.d.ts +8 -0
  32. package/dist/fullscreen-quad.d.ts.map +1 -0
  33. package/dist/fullscreen-quad.js +30 -0
  34. package/dist/fullscreen-quad.js.map +1 -0
  35. package/dist/geometry.d.ts +28 -0
  36. package/dist/geometry.d.ts.map +1 -0
  37. package/dist/geometry.js +245 -0
  38. package/dist/geometry.js.map +1 -0
  39. package/dist/grid-renderer.d.ts +10 -0
  40. package/dist/grid-renderer.d.ts.map +1 -0
  41. package/dist/grid-renderer.js +77 -0
  42. package/dist/grid-renderer.js.map +1 -0
  43. package/dist/grid-shader.d.ts +3 -0
  44. package/dist/grid-shader.d.ts.map +1 -0
  45. package/dist/grid-shader.js +89 -0
  46. package/dist/grid-shader.js.map +1 -0
  47. package/dist/index.d.ts +64 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +45 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/light.d.ts +59 -0
  52. package/dist/light.d.ts.map +1 -0
  53. package/dist/light.js +184 -0
  54. package/dist/light.js.map +1 -0
  55. package/dist/material-asset.d.ts +19 -0
  56. package/dist/material-asset.d.ts.map +1 -0
  57. package/dist/material-asset.js +30 -0
  58. package/dist/material-asset.js.map +1 -0
  59. package/dist/material.d.ts +50 -0
  60. package/dist/material.d.ts.map +1 -0
  61. package/dist/material.js +48 -0
  62. package/dist/material.js.map +1 -0
  63. package/dist/mesh-renderer.d.ts +43 -0
  64. package/dist/mesh-renderer.d.ts.map +1 -0
  65. package/dist/mesh-renderer.js +162 -0
  66. package/dist/mesh-renderer.js.map +1 -0
  67. package/dist/mesh.d.ts +16 -0
  68. package/dist/mesh.d.ts.map +1 -0
  69. package/dist/mesh.js +33 -0
  70. package/dist/mesh.js.map +1 -0
  71. package/dist/mipmap-generator.d.ts +7 -0
  72. package/dist/mipmap-generator.d.ts.map +1 -0
  73. package/dist/mipmap-generator.js +96 -0
  74. package/dist/mipmap-generator.js.map +1 -0
  75. package/dist/pbr-wgsl.d.ts +12 -0
  76. package/dist/pbr-wgsl.d.ts.map +1 -0
  77. package/dist/pbr-wgsl.js +159 -0
  78. package/dist/pbr-wgsl.js.map +1 -0
  79. package/dist/pipeline.d.ts +13 -0
  80. package/dist/pipeline.d.ts.map +1 -0
  81. package/dist/pipeline.js +77 -0
  82. package/dist/pipeline.js.map +1 -0
  83. package/dist/point-light.d.ts +16 -0
  84. package/dist/point-light.d.ts.map +1 -0
  85. package/dist/point-light.js +22 -0
  86. package/dist/point-light.js.map +1 -0
  87. package/dist/point-shadow-pass.d.ts +24 -0
  88. package/dist/point-shadow-pass.d.ts.map +1 -0
  89. package/dist/point-shadow-pass.js +192 -0
  90. package/dist/point-shadow-pass.js.map +1 -0
  91. package/dist/point-shadow-shader.d.ts +12 -0
  92. package/dist/point-shadow-shader.d.ts.map +1 -0
  93. package/dist/point-shadow-shader.js +52 -0
  94. package/dist/point-shadow-shader.js.map +1 -0
  95. package/dist/register-builtins.d.ts +2 -0
  96. package/dist/register-builtins.d.ts.map +1 -0
  97. package/dist/register-builtins.js +98 -0
  98. package/dist/register-builtins.js.map +1 -0
  99. package/dist/render-system.d.ts +99 -0
  100. package/dist/render-system.d.ts.map +1 -0
  101. package/dist/render-system.js +476 -0
  102. package/dist/render-system.js.map +1 -0
  103. package/dist/scene-depth.d.ts +36 -0
  104. package/dist/scene-depth.d.ts.map +1 -0
  105. package/dist/scene-depth.js +183 -0
  106. package/dist/scene-depth.js.map +1 -0
  107. package/dist/shader.d.ts +3 -0
  108. package/dist/shader.d.ts.map +1 -0
  109. package/dist/shader.js +144 -0
  110. package/dist/shader.js.map +1 -0
  111. package/dist/shadow-fragment-wgsl.d.ts +13 -0
  112. package/dist/shadow-fragment-wgsl.d.ts.map +1 -0
  113. package/dist/shadow-fragment-wgsl.js +205 -0
  114. package/dist/shadow-fragment-wgsl.js.map +1 -0
  115. package/dist/shadow-manager.d.ts +46 -0
  116. package/dist/shadow-manager.d.ts.map +1 -0
  117. package/dist/shadow-manager.js +259 -0
  118. package/dist/shadow-manager.js.map +1 -0
  119. package/dist/shadow-pass.d.ts +31 -0
  120. package/dist/shadow-pass.d.ts.map +1 -0
  121. package/dist/shadow-pass.js +135 -0
  122. package/dist/shadow-pass.js.map +1 -0
  123. package/dist/shadow-shader.d.ts +10 -0
  124. package/dist/shadow-shader.d.ts.map +1 -0
  125. package/dist/shadow-shader.js +24 -0
  126. package/dist/shadow-shader.js.map +1 -0
  127. package/dist/shadow-uniforms.d.ts +38 -0
  128. package/dist/shadow-uniforms.d.ts.map +1 -0
  129. package/dist/shadow-uniforms.js +97 -0
  130. package/dist/shadow-uniforms.js.map +1 -0
  131. package/dist/skinned-geometry.d.ts +14 -0
  132. package/dist/skinned-geometry.d.ts.map +1 -0
  133. package/dist/skinned-geometry.js +23 -0
  134. package/dist/skinned-geometry.js.map +1 -0
  135. package/dist/skinned-mesh-renderer.d.ts +54 -0
  136. package/dist/skinned-mesh-renderer.d.ts.map +1 -0
  137. package/dist/skinned-mesh-renderer.js +177 -0
  138. package/dist/skinned-mesh-renderer.js.map +1 -0
  139. package/dist/skinned-pipeline.d.ts +16 -0
  140. package/dist/skinned-pipeline.d.ts.map +1 -0
  141. package/dist/skinned-pipeline.js +112 -0
  142. package/dist/skinned-pipeline.js.map +1 -0
  143. package/dist/skinned-shader.d.ts +7 -0
  144. package/dist/skinned-shader.d.ts.map +1 -0
  145. package/dist/skinned-shader.js +52 -0
  146. package/dist/skinned-shader.js.map +1 -0
  147. package/dist/skinned-shadow-shader.d.ts +6 -0
  148. package/dist/skinned-shadow-shader.d.ts.map +1 -0
  149. package/dist/skinned-shadow-shader.js +31 -0
  150. package/dist/skinned-shadow-shader.js.map +1 -0
  151. package/dist/spot-light.d.ts +24 -0
  152. package/dist/spot-light.d.ts.map +1 -0
  153. package/dist/spot-light.js +41 -0
  154. package/dist/spot-light.js.map +1 -0
  155. package/dist/spot-shadow-pass.d.ts +36 -0
  156. package/dist/spot-shadow-pass.d.ts.map +1 -0
  157. package/dist/spot-shadow-pass.js +144 -0
  158. package/dist/spot-shadow-pass.js.map +1 -0
  159. package/dist/ssao-pass.d.ts +37 -0
  160. package/dist/ssao-pass.d.ts.map +1 -0
  161. package/dist/ssao-pass.js +208 -0
  162. package/dist/ssao-pass.js.map +1 -0
  163. package/dist/ssao-shader.d.ts +9 -0
  164. package/dist/ssao-shader.d.ts.map +1 -0
  165. package/dist/ssao-shader.js +120 -0
  166. package/dist/ssao-shader.js.map +1 -0
  167. package/dist/terrain-mesh-renderer.d.ts +39 -0
  168. package/dist/terrain-mesh-renderer.d.ts.map +1 -0
  169. package/dist/terrain-mesh-renderer.js +131 -0
  170. package/dist/terrain-mesh-renderer.js.map +1 -0
  171. package/dist/terrain-pipeline.d.ts +17 -0
  172. package/dist/terrain-pipeline.d.ts.map +1 -0
  173. package/dist/terrain-pipeline.js +70 -0
  174. package/dist/terrain-pipeline.js.map +1 -0
  175. package/dist/terrain-shader.d.ts +10 -0
  176. package/dist/terrain-shader.d.ts.map +1 -0
  177. package/dist/terrain-shader.js +154 -0
  178. package/dist/terrain-shader.js.map +1 -0
  179. package/dist/texture.d.ts +20 -0
  180. package/dist/texture.d.ts.map +1 -0
  181. package/dist/texture.js +87 -0
  182. package/dist/texture.js.map +1 -0
  183. package/dist/tonemap-pass.d.ts +22 -0
  184. package/dist/tonemap-pass.d.ts.map +1 -0
  185. package/dist/tonemap-pass.js +125 -0
  186. package/dist/tonemap-pass.js.map +1 -0
  187. package/dist/unlit-pipeline.d.ts +12 -0
  188. package/dist/unlit-pipeline.d.ts.map +1 -0
  189. package/dist/unlit-pipeline.js +59 -0
  190. package/dist/unlit-pipeline.js.map +1 -0
  191. package/dist/unlit-shader.d.ts +3 -0
  192. package/dist/unlit-shader.d.ts.map +1 -0
  193. package/dist/unlit-shader.js +33 -0
  194. package/dist/unlit-shader.js.map +1 -0
  195. package/dist/webgpu-device.d.ts +13 -0
  196. package/dist/webgpu-device.d.ts.map +1 -0
  197. package/dist/webgpu-device.js +70 -0
  198. package/dist/webgpu-device.js.map +1 -0
  199. package/dist/wireframe-pipeline.d.ts +7 -0
  200. package/dist/wireframe-pipeline.d.ts.map +1 -0
  201. package/dist/wireframe-pipeline.js +72 -0
  202. package/dist/wireframe-pipeline.js.map +1 -0
  203. package/package.json +28 -0
  204. package/src/index.ts +87 -0
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Non-MSAA depth pre-pass for screen-space effects (SSAO).
3
+ * Renders scene geometry to a depth32float texture using the camera VP matrix.
4
+ * The resulting texture has TEXTURE_BINDING so it can be sampled in post-processing.
5
+ */
6
+ import { SHADOW_VERTEX_SHADER } from './shadow-shader.js';
7
+ import { VERTEX_STRIDE_BYTES } from './geometry.js';
8
+ import { MeshRenderer } from './mesh-renderer.js';
9
+ export class DepthPrepass {
10
+ _device;
11
+ _pipeline;
12
+ _vpBuffer;
13
+ _vpBindGroup;
14
+ _depthTexture;
15
+ _depthView;
16
+ _width = 0;
17
+ _height = 0;
18
+ get depthView() { return this._depthView; }
19
+ constructor(device, objectBindGroupLayout, w, h) {
20
+ this._device = device;
21
+ this._vpBuffer = device.createBuffer({
22
+ size: 64,
23
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
24
+ });
25
+ const vpBGL = device.createBindGroupLayout({
26
+ entries: [
27
+ { binding: 0, visibility: GPUShaderStage.VERTEX, buffer: { type: 'uniform' } },
28
+ ],
29
+ });
30
+ this._vpBindGroup = device.createBindGroup({
31
+ layout: vpBGL,
32
+ entries: [{ binding: 0, resource: { buffer: this._vpBuffer } }],
33
+ });
34
+ const shaderModule = device.createShaderModule({ code: SHADOW_VERTEX_SHADER });
35
+ const pipelineLayout = device.createPipelineLayout({
36
+ bindGroupLayouts: [objectBindGroupLayout, vpBGL],
37
+ });
38
+ this._pipeline = device.createRenderPipeline({
39
+ layout: pipelineLayout,
40
+ vertex: {
41
+ module: shaderModule,
42
+ entryPoint: 'main',
43
+ buffers: [{
44
+ arrayStride: VERTEX_STRIDE_BYTES,
45
+ attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x3' }],
46
+ }],
47
+ },
48
+ primitive: { topology: 'triangle-list', cullMode: 'back' },
49
+ depthStencil: {
50
+ depthWriteEnabled: true,
51
+ depthCompare: 'less',
52
+ format: 'depth32float',
53
+ },
54
+ });
55
+ this._depthTexture = this._createTexture(w, h);
56
+ this._depthView = this._depthTexture.createView();
57
+ this._width = w;
58
+ this._height = h;
59
+ }
60
+ _createTexture(w, h) {
61
+ return this._device.createTexture({
62
+ size: { width: w, height: h },
63
+ format: 'depth32float',
64
+ usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
65
+ });
66
+ }
67
+ resize(w, h) {
68
+ if (this._width === w && this._height === h)
69
+ return;
70
+ this._depthTexture.destroy();
71
+ this._depthTexture = this._createTexture(w, h);
72
+ this._depthView = this._depthTexture.createView();
73
+ this._width = w;
74
+ this._height = h;
75
+ }
76
+ execute(encoder, scene, cameraVP, extraDraw) {
77
+ this.resize(this._width, this._height);
78
+ this._device.queue.writeBuffer(this._vpBuffer, 0, cameraVP);
79
+ const pass = encoder.beginRenderPass({
80
+ colorAttachments: [],
81
+ depthStencilAttachment: {
82
+ view: this._depthView,
83
+ depthClearValue: 1.0,
84
+ depthLoadOp: 'clear',
85
+ depthStoreOp: 'store',
86
+ },
87
+ });
88
+ pass.setPipeline(this._pipeline);
89
+ pass.setBindGroup(1, this._vpBindGroup);
90
+ for (const obj of scene.getAllObjects()) {
91
+ const mr = obj.getComponent(MeshRenderer);
92
+ if (mr && mr.enabled && mr.receiveSSAO && mr.mesh && mr.bindGroup) {
93
+ pass.setBindGroup(0, mr.bindGroup);
94
+ pass.setVertexBuffer(0, mr.mesh.vertexBuffer);
95
+ pass.setIndexBuffer(mr.mesh.indexBuffer, mr.mesh.indexFormat);
96
+ pass.drawIndexed(mr.mesh.indexCount);
97
+ }
98
+ }
99
+ extraDraw?.(pass);
100
+ pass.end();
101
+ }
102
+ destroy() {
103
+ this._depthTexture.destroy();
104
+ this._vpBuffer.destroy();
105
+ }
106
+ }
107
+ //# sourceMappingURL=depth-prepass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"depth-prepass.js","sourceRoot":"","sources":["../src/depth-prepass.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { Component } from '@certe/atmos-core';
2
+ /**
3
+ * Directional light component.
4
+ * Direction is derived from the Transform's forward vector (negative Z axis in world space).
5
+ */
6
+ export declare class DirectionalLight extends Component {
7
+ color: Float32Array<ArrayBuffer>;
8
+ intensity: number;
9
+ castShadows: boolean;
10
+ shadowIntensity: number;
11
+ shadowResolution: number;
12
+ /** Near cascade: ortho half-extent in world units. */
13
+ shadowSize: number;
14
+ /** Near cascade: how far behind/ahead the light camera reaches. */
15
+ shadowDistance: number;
16
+ /** Far cascade: ortho half-extent in world units. */
17
+ shadowFarSize: number;
18
+ /** Far cascade: how far behind/ahead the light camera reaches. */
19
+ shadowFarDistance: number;
20
+ /** Extract world direction (negated Z column of worldMatrix, normalized) into `out`. */
21
+ getWorldDirection(out: Float32Array): Float32Array;
22
+ }
23
+ //# sourceMappingURL=directional-light.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directional-light.d.ts","sourceRoot":"","sources":["../src/directional-light.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,KAAK,4BAA+B;IACpC,SAAS,SAAO;IAChB,WAAW,UAAS;IACpB,eAAe,SAAO;IACtB,gBAAgB,SAAQ;IACxB,sDAAsD;IACtD,UAAU,SAAM;IAChB,mEAAmE;IACnE,cAAc,SAAM;IACpB,qDAAqD;IACrD,aAAa,SAAM;IACnB,kEAAkE;IAClE,iBAAiB,SAAO;IAExB,wFAAwF;IACxF,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY;CAcnD"}
@@ -0,0 +1,36 @@
1
+ import { Component } from '@certe/atmos-core';
2
+ /**
3
+ * Directional light component.
4
+ * Direction is derived from the Transform's forward vector (negative Z axis in world space).
5
+ */
6
+ export class DirectionalLight extends Component {
7
+ color = new Float32Array([1, 1, 1]);
8
+ intensity = 1.0;
9
+ castShadows = false;
10
+ shadowIntensity = 1.0;
11
+ shadowResolution = 2048;
12
+ /** Near cascade: ortho half-extent in world units. */
13
+ shadowSize = 20;
14
+ /** Near cascade: how far behind/ahead the light camera reaches. */
15
+ shadowDistance = 50;
16
+ /** Far cascade: ortho half-extent in world units. */
17
+ shadowFarSize = 80;
18
+ /** Far cascade: how far behind/ahead the light camera reaches. */
19
+ shadowFarDistance = 200;
20
+ /** Extract world direction (negated Z column of worldMatrix, normalized) into `out`. */
21
+ getWorldDirection(out) {
22
+ const m = this.gameObject.transform.worldMatrix;
23
+ // Column 2 = local Z axis in world space
24
+ let x = m[8];
25
+ let y = m[9];
26
+ let z = m[10];
27
+ const len = Math.sqrt(x * x + y * y + z * z);
28
+ const inv = len > 0 ? 1 / len : 0;
29
+ // Negate: light shines in -Z direction of the transform
30
+ out[0] = -x * inv;
31
+ out[1] = -y * inv;
32
+ out[2] = -z * inv;
33
+ return out;
34
+ }
35
+ }
36
+ //# sourceMappingURL=directional-light.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directional-light.js","sourceRoot":"","sources":["../src/directional-light.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAC7C,KAAK,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,SAAS,GAAG,GAAG,CAAC;IAChB,WAAW,GAAG,KAAK,CAAC;IACpB,eAAe,GAAG,GAAG,CAAC;IACtB,gBAAgB,GAAG,IAAI,CAAC;IACxB,sDAAsD;IACtD,UAAU,GAAG,EAAE,CAAC;IAChB,mEAAmE;IACnE,cAAc,GAAG,EAAE,CAAC;IACpB,qDAAqD;IACrD,aAAa,GAAG,EAAE,CAAC;IACnB,kEAAkE;IAClE,iBAAiB,GAAG,GAAG,CAAC;IAExB,wFAAwF;IACxF,iBAAiB,CAAC,GAAiB;QACjC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC;QAChD,yCAAyC;QACzC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACd,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACd,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAE,CAAC;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,wDAAwD;QACxD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAClB,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * View-frustum culling via 6 planes extracted from a view-projection matrix.
3
+ *
4
+ * Griham–Hartmann method: each frustum plane is a linear combination of
5
+ * VP matrix rows. Planes point inward (positive half-space = inside frustum).
6
+ */
7
+ import type { Mat4Type } from '@certe/atmos-math';
8
+ import type { BoundingSphere } from './bounds.js';
9
+ /** 6 planes × 4 coefficients (a, b, c, d) where ax+by+cz+d >= 0 is inside. */
10
+ export type FrustumPlanes = Float32Array;
11
+ /** Extracts 6 frustum planes from a column-major VP matrix. */
12
+ export declare function extractFrustumPlanes(out: FrustumPlanes, vp: Mat4Type): FrustumPlanes;
13
+ /** Returns true if the sphere is at least partially inside the frustum. */
14
+ export declare function isSphereInFrustum(planes: FrustumPlanes, sphere: BoundingSphere): boolean;
15
+ //# sourceMappingURL=frustum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frustum.d.ts","sourceRoot":"","sources":["../src/frustum.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,8EAA8E;AAC9E,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC;AAEzC,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,QAAQ,GAAG,aAAa,CAqBpF;AAYD,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAYxF"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * View-frustum culling via 6 planes extracted from a view-projection matrix.
3
+ *
4
+ * Griham–Hartmann method: each frustum plane is a linear combination of
5
+ * VP matrix rows. Planes point inward (positive half-space = inside frustum).
6
+ */
7
+ /** Extracts 6 frustum planes from a column-major VP matrix. */
8
+ export function extractFrustumPlanes(out, vp) {
9
+ // Row vectors of the VP matrix (column-major → row i = vp[i], vp[i+4], vp[i+8], vp[i+12])
10
+ const r0x = vp[0], r0y = vp[4], r0z = vp[8], r0w = vp[12];
11
+ const r1x = vp[1], r1y = vp[5], r1z = vp[9], r1w = vp[13];
12
+ const r2x = vp[2], r2y = vp[6], r2z = vp[10], r2w = vp[14];
13
+ const r3x = vp[3], r3y = vp[7], r3z = vp[11], r3w = vp[15];
14
+ // Left: row3 + row0
15
+ setPlane(out, 0, r3x + r0x, r3y + r0y, r3z + r0z, r3w + r0w);
16
+ // Right: row3 - row0
17
+ setPlane(out, 1, r3x - r0x, r3y - r0y, r3z - r0z, r3w - r0w);
18
+ // Bottom: row3 + row1
19
+ setPlane(out, 2, r3x + r1x, r3y + r1y, r3z + r1z, r3w + r1w);
20
+ // Top: row3 - row1
21
+ setPlane(out, 3, r3x - r1x, r3y - r1y, r3z - r1z, r3w - r1w);
22
+ // Near: row3 + row2 (WebGPU: depth [0,1] → near = row2, not row3+row2... actually row2 for [0,1])
23
+ setPlane(out, 4, r2x, r2y, r2z, r2w);
24
+ // Far: row3 - row2
25
+ setPlane(out, 5, r3x - r2x, r3y - r2y, r3z - r2z, r3w - r2w);
26
+ return out;
27
+ }
28
+ function setPlane(out, idx, a, b, c, d) {
29
+ const len = Math.sqrt(a * a + b * b + c * c);
30
+ const inv = 1 / len;
31
+ const o = idx * 4;
32
+ out[o] = a * inv;
33
+ out[o + 1] = b * inv;
34
+ out[o + 2] = c * inv;
35
+ out[o + 3] = d * inv;
36
+ }
37
+ /** Returns true if the sphere is at least partially inside the frustum. */
38
+ export function isSphereInFrustum(planes, sphere) {
39
+ const cx = sphere.center[0];
40
+ const cy = sphere.center[1];
41
+ const cz = sphere.center[2];
42
+ const r = sphere.radius;
43
+ for (let i = 0; i < 6; i++) {
44
+ const o = i * 4;
45
+ const dist = planes[o] * cx + planes[o + 1] * cy + planes[o + 2] * cz + planes[o + 3];
46
+ if (dist < -r)
47
+ return false;
48
+ }
49
+ return true;
50
+ }
51
+ //# sourceMappingURL=frustum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frustum.js","sourceRoot":"","sources":["../src/frustum.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Fullscreen triangle utilities for post-processing passes.
3
+ * Uses a single oversized triangle (3 verts, no vertex buffer) to cover the screen.
4
+ */
5
+ export declare const FULLSCREEN_VERTEX_SHADER = "\nvar<private> pos: array<vec2<f32>, 3> = array(\n vec2(-1.0, -1.0),\n vec2( 3.0, -1.0),\n vec2(-1.0, 3.0),\n);\n\nstruct VertexOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) uv: vec2<f32>,\n};\n\n@vertex\nfn vs(@builtin(vertex_index) i: u32) -> VertexOutput {\n var out: VertexOutput;\n let p = pos[i];\n out.position = vec4(p, 0.0, 1.0);\n out.uv = p * vec2(0.5, -0.5) + vec2(0.5);\n return out;\n}\n";
6
+ /** Draw a fullscreen triangle (3 vertices, no vertex buffer). */
7
+ export declare function drawFullscreenTriangle(pass: GPURenderPassEncoder): void;
8
+ //# sourceMappingURL=fullscreen-quad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreen-quad.d.ts","sourceRoot":"","sources":["../src/fullscreen-quad.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,wBAAwB,qbAoBpC,CAAC;AAEF,iEAAiE;AACjE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAEvE"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Fullscreen triangle utilities for post-processing passes.
3
+ * Uses a single oversized triangle (3 verts, no vertex buffer) to cover the screen.
4
+ */
5
+ export const FULLSCREEN_VERTEX_SHADER = /* wgsl */ `
6
+ var<private> pos: array<vec2<f32>, 3> = array(
7
+ vec2(-1.0, -1.0),
8
+ vec2( 3.0, -1.0),
9
+ vec2(-1.0, 3.0),
10
+ );
11
+
12
+ struct VertexOutput {
13
+ @builtin(position) position: vec4<f32>,
14
+ @location(0) uv: vec2<f32>,
15
+ };
16
+
17
+ @vertex
18
+ fn vs(@builtin(vertex_index) i: u32) -> VertexOutput {
19
+ var out: VertexOutput;
20
+ let p = pos[i];
21
+ out.position = vec4(p, 0.0, 1.0);
22
+ out.uv = p * vec2(0.5, -0.5) + vec2(0.5);
23
+ return out;
24
+ }
25
+ `;
26
+ /** Draw a fullscreen triangle (3 vertices, no vertex buffer). */
27
+ export function drawFullscreenTriangle(pass) {
28
+ pass.draw(3);
29
+ }
30
+ //# sourceMappingURL=fullscreen-quad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreen-quad.js","sourceRoot":"","sources":["../src/fullscreen-quad.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,UAAU,CAAA;;;;;;;;;;;;;;;;;;;;CAoBjD,CAAC;AAEF,iEAAiE;AACjE,MAAM,UAAU,sBAAsB,CAAC,IAA0B;IAC/D,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { BoundingSphere } from './bounds.js';
2
+ export interface GeometryData {
3
+ vertices: Float32Array;
4
+ indices: Uint16Array | Uint32Array;
5
+ bounds: BoundingSphere;
6
+ }
7
+ /** Floats per vertex: position(3) + normal(3) + uv(2) */
8
+ export declare const VERTEX_STRIDE_FLOATS = 8;
9
+ /** Bytes per vertex: 8 floats × 4 bytes */
10
+ export declare const VERTEX_STRIDE_BYTES = 32;
11
+ /**
12
+ * Unit cube centered at origin.
13
+ * 24 vertices (4 per face for face normals), 36 indices.
14
+ */
15
+ export declare function createCubeGeometry(): GeometryData;
16
+ /**
17
+ * XZ plane centered at origin.
18
+ */
19
+ export declare function createPlaneGeometry(width?: number, depth?: number, segX?: number, segZ?: number): GeometryData;
20
+ /**
21
+ * UV sphere centered at origin.
22
+ */
23
+ export declare function createSphereGeometry(radius?: number, widthSegments?: number, heightSegments?: number): GeometryData;
24
+ /**
25
+ * Cylinder along Y axis, centered at origin.
26
+ */
27
+ export declare function createCylinderGeometry(radiusTop?: number, radiusBottom?: number, height?: number, radialSegments?: number): GeometryData;
28
+ //# sourceMappingURL=geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,WAAW,GAAG,WAAW,CAAC;IACnC,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,yDAAyD;AACzD,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,2CAA2C;AAC3C,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAetC;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAmDjD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,SAAI,EACT,KAAK,SAAI,EACT,IAAI,SAAI,EACR,IAAI,SAAI,GACP,YAAY,CA+Bd;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,SAAM,EACZ,aAAa,SAAK,EAClB,cAAc,SAAK,GAClB,YAAY,CAkCd;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,SAAM,EACf,YAAY,SAAM,EAClB,MAAM,SAAI,EACV,cAAc,SAAK,GAClB,YAAY,CAkFd"}
@@ -0,0 +1,245 @@
1
+ import { computeBoundingSphere } from './bounds.js';
2
+ /** Floats per vertex: position(3) + normal(3) + uv(2) */
3
+ export const VERTEX_STRIDE_FLOATS = 8;
4
+ /** Bytes per vertex: 8 floats × 4 bytes */
5
+ export const VERTEX_STRIDE_BYTES = 32;
6
+ /** Push a single vertex into the array at the given float offset. */
7
+ function pushVert(arr, offset, px, py, pz, nx, ny, nz, u, v) {
8
+ arr[offset] = px;
9
+ arr[offset + 1] = py;
10
+ arr[offset + 2] = pz;
11
+ arr[offset + 3] = nx;
12
+ arr[offset + 4] = ny;
13
+ arr[offset + 5] = nz;
14
+ arr[offset + 6] = u;
15
+ arr[offset + 7] = v;
16
+ }
17
+ /**
18
+ * Unit cube centered at origin.
19
+ * 24 vertices (4 per face for face normals), 36 indices.
20
+ */
21
+ export function createCubeGeometry() {
22
+ const vertices = new Float32Array(24 * VERTEX_STRIDE_FLOATS);
23
+ let o = 0;
24
+ // Front face (+Z)
25
+ pushVert(vertices, o, -0.5, -0.5, 0.5, 0, 0, 1, 0, 0);
26
+ o += 8;
27
+ pushVert(vertices, o, 0.5, -0.5, 0.5, 0, 0, 1, 1, 0);
28
+ o += 8;
29
+ pushVert(vertices, o, 0.5, 0.5, 0.5, 0, 0, 1, 1, 1);
30
+ o += 8;
31
+ pushVert(vertices, o, -0.5, 0.5, 0.5, 0, 0, 1, 0, 1);
32
+ o += 8;
33
+ // Back face (-Z)
34
+ pushVert(vertices, o, 0.5, -0.5, -0.5, 0, 0, -1, 0, 0);
35
+ o += 8;
36
+ pushVert(vertices, o, -0.5, -0.5, -0.5, 0, 0, -1, 1, 0);
37
+ o += 8;
38
+ pushVert(vertices, o, -0.5, 0.5, -0.5, 0, 0, -1, 1, 1);
39
+ o += 8;
40
+ pushVert(vertices, o, 0.5, 0.5, -0.5, 0, 0, -1, 0, 1);
41
+ o += 8;
42
+ // Top face (+Y)
43
+ pushVert(vertices, o, -0.5, 0.5, 0.5, 0, 1, 0, 0, 0);
44
+ o += 8;
45
+ pushVert(vertices, o, 0.5, 0.5, 0.5, 0, 1, 0, 1, 0);
46
+ o += 8;
47
+ pushVert(vertices, o, 0.5, 0.5, -0.5, 0, 1, 0, 1, 1);
48
+ o += 8;
49
+ pushVert(vertices, o, -0.5, 0.5, -0.5, 0, 1, 0, 0, 1);
50
+ o += 8;
51
+ // Bottom face (-Y)
52
+ pushVert(vertices, o, -0.5, -0.5, -0.5, 0, -1, 0, 0, 0);
53
+ o += 8;
54
+ pushVert(vertices, o, 0.5, -0.5, -0.5, 0, -1, 0, 1, 0);
55
+ o += 8;
56
+ pushVert(vertices, o, 0.5, -0.5, 0.5, 0, -1, 0, 1, 1);
57
+ o += 8;
58
+ pushVert(vertices, o, -0.5, -0.5, 0.5, 0, -1, 0, 0, 1);
59
+ o += 8;
60
+ // Right face (+X)
61
+ pushVert(vertices, o, 0.5, -0.5, 0.5, 1, 0, 0, 0, 0);
62
+ o += 8;
63
+ pushVert(vertices, o, 0.5, -0.5, -0.5, 1, 0, 0, 1, 0);
64
+ o += 8;
65
+ pushVert(vertices, o, 0.5, 0.5, -0.5, 1, 0, 0, 1, 1);
66
+ o += 8;
67
+ pushVert(vertices, o, 0.5, 0.5, 0.5, 1, 0, 0, 0, 1);
68
+ o += 8;
69
+ // Left face (-X)
70
+ pushVert(vertices, o, -0.5, -0.5, -0.5, -1, 0, 0, 0, 0);
71
+ o += 8;
72
+ pushVert(vertices, o, -0.5, -0.5, 0.5, -1, 0, 0, 1, 0);
73
+ o += 8;
74
+ pushVert(vertices, o, -0.5, 0.5, 0.5, -1, 0, 0, 1, 1);
75
+ o += 8;
76
+ pushVert(vertices, o, -0.5, 0.5, -0.5, -1, 0, 0, 0, 1);
77
+ o += 8;
78
+ // prettier-ignore
79
+ const indices = new Uint16Array([
80
+ 0, 1, 2, 0, 2, 3,
81
+ 4, 5, 6, 4, 6, 7,
82
+ 8, 9, 10, 8, 10, 11,
83
+ 12, 13, 14, 12, 14, 15,
84
+ 16, 17, 18, 16, 18, 19,
85
+ 20, 21, 22, 20, 22, 23,
86
+ ]);
87
+ return { vertices, indices, bounds: computeBoundingSphere(vertices, VERTEX_STRIDE_FLOATS) };
88
+ }
89
+ /**
90
+ * XZ plane centered at origin.
91
+ */
92
+ export function createPlaneGeometry(width = 1, depth = 1, segX = 1, segZ = 1) {
93
+ const vertCount = (segX + 1) * (segZ + 1);
94
+ const vertices = new Float32Array(vertCount * VERTEX_STRIDE_FLOATS);
95
+ let o = 0;
96
+ for (let iz = 0; iz <= segZ; iz++) {
97
+ const v = iz / segZ;
98
+ const z = (v - 0.5) * depth;
99
+ for (let ix = 0; ix <= segX; ix++) {
100
+ const u = ix / segX;
101
+ const x = (u - 0.5) * width;
102
+ pushVert(vertices, o, x, 0, z, 0, 1, 0, u, v);
103
+ o += 8;
104
+ }
105
+ }
106
+ const triCount = segX * segZ * 2;
107
+ const indices = new Uint16Array(triCount * 3);
108
+ let idx = 0;
109
+ for (let iz = 0; iz < segZ; iz++) {
110
+ for (let ix = 0; ix < segX; ix++) {
111
+ const a = iz * (segX + 1) + ix;
112
+ const b = a + 1;
113
+ const c = a + (segX + 1);
114
+ const d = c + 1;
115
+ indices[idx++] = a;
116
+ indices[idx++] = c;
117
+ indices[idx++] = b;
118
+ indices[idx++] = b;
119
+ indices[idx++] = c;
120
+ indices[idx++] = d;
121
+ }
122
+ }
123
+ return { vertices, indices, bounds: computeBoundingSphere(vertices, VERTEX_STRIDE_FLOATS) };
124
+ }
125
+ /**
126
+ * UV sphere centered at origin.
127
+ */
128
+ export function createSphereGeometry(radius = 0.5, widthSegments = 16, heightSegments = 12) {
129
+ const vertCount = (widthSegments + 1) * (heightSegments + 1);
130
+ const vertices = new Float32Array(vertCount * VERTEX_STRIDE_FLOATS);
131
+ let o = 0;
132
+ for (let iy = 0; iy <= heightSegments; iy++) {
133
+ const v = iy / heightSegments;
134
+ const phi = v * Math.PI;
135
+ for (let ix = 0; ix <= widthSegments; ix++) {
136
+ const u = ix / widthSegments;
137
+ const theta = u * Math.PI * 2;
138
+ const nx = -Math.sin(phi) * Math.cos(theta);
139
+ const ny = Math.cos(phi);
140
+ const nz = Math.sin(phi) * Math.sin(theta);
141
+ pushVert(vertices, o, nx * radius, ny * radius, nz * radius, nx, ny, nz, u, v);
142
+ o += 8;
143
+ }
144
+ }
145
+ const triCount = widthSegments * heightSegments * 2;
146
+ const indices = new Uint16Array(triCount * 3);
147
+ let idx = 0;
148
+ for (let iy = 0; iy < heightSegments; iy++) {
149
+ for (let ix = 0; ix < widthSegments; ix++) {
150
+ const a = iy * (widthSegments + 1) + ix;
151
+ const b = a + 1;
152
+ const c = a + (widthSegments + 1);
153
+ const d = c + 1;
154
+ indices[idx++] = a;
155
+ indices[idx++] = c;
156
+ indices[idx++] = b;
157
+ indices[idx++] = b;
158
+ indices[idx++] = c;
159
+ indices[idx++] = d;
160
+ }
161
+ }
162
+ return { vertices, indices, bounds: computeBoundingSphere(vertices, VERTEX_STRIDE_FLOATS) };
163
+ }
164
+ /**
165
+ * Cylinder along Y axis, centered at origin.
166
+ */
167
+ export function createCylinderGeometry(radiusTop = 0.5, radiusBottom = 0.5, height = 1, radialSegments = 16) {
168
+ const bodyVerts = (radialSegments + 1) * 2;
169
+ const capVerts = (radialSegments + 2) * 2; // top: center + ring(seg+1), bottom: same
170
+ const totalVerts = bodyVerts + capVerts;
171
+ const vertices = new Float32Array(totalVerts * VERTEX_STRIDE_FLOATS);
172
+ let o = 0;
173
+ const halfH = height / 2;
174
+ const slope = radiusBottom - radiusTop;
175
+ const slopeLen = Math.sqrt(slope * slope + height * height);
176
+ const ny = slope / slopeLen;
177
+ const nr = height / slopeLen;
178
+ // Body
179
+ for (let i = 0; i <= radialSegments; i++) {
180
+ const u = i / radialSegments;
181
+ const theta = u * Math.PI * 2;
182
+ const cos = Math.cos(theta);
183
+ const sin = Math.sin(theta);
184
+ const nx = cos * nr;
185
+ const nz = sin * nr;
186
+ // Top ring
187
+ pushVert(vertices, o, cos * radiusTop, halfH, sin * radiusTop, nx, ny, nz, u, 0);
188
+ o += 8;
189
+ // Bottom ring
190
+ pushVert(vertices, o, cos * radiusBottom, -halfH, sin * radiusBottom, nx, ny, nz, u, 1);
191
+ o += 8;
192
+ }
193
+ // Top cap
194
+ const topCenterIdx = o / VERTEX_STRIDE_FLOATS;
195
+ pushVert(vertices, o, 0, halfH, 0, 0, 1, 0, 0.5, 0.5);
196
+ o += 8;
197
+ for (let i = 0; i <= radialSegments; i++) {
198
+ const u = i / radialSegments;
199
+ const theta = u * Math.PI * 2;
200
+ pushVert(vertices, o, Math.cos(theta) * radiusTop, halfH, Math.sin(theta) * radiusTop, 0, 1, 0, u, 0);
201
+ o += 8;
202
+ }
203
+ // Bottom cap
204
+ const botCenterIdx = o / VERTEX_STRIDE_FLOATS;
205
+ pushVert(vertices, o, 0, -halfH, 0, 0, -1, 0, 0.5, 0.5);
206
+ o += 8;
207
+ for (let i = 0; i <= radialSegments; i++) {
208
+ const u = i / radialSegments;
209
+ const theta = u * Math.PI * 2;
210
+ pushVert(vertices, o, Math.cos(theta) * radiusBottom, -halfH, Math.sin(theta) * radiusBottom, 0, -1, 0, u, 1);
211
+ o += 8;
212
+ }
213
+ // Indices
214
+ const bodyTris = radialSegments * 2;
215
+ const capTris = radialSegments * 2;
216
+ const indices = new Uint16Array((bodyTris + capTris) * 3);
217
+ let idx = 0;
218
+ // Body quads (CCW winding for outward-facing normals)
219
+ for (let i = 0; i < radialSegments; i++) {
220
+ const a = i * 2;
221
+ const b = a + 1;
222
+ const c = a + 2;
223
+ const d = a + 3;
224
+ indices[idx++] = a;
225
+ indices[idx++] = c;
226
+ indices[idx++] = b;
227
+ indices[idx++] = b;
228
+ indices[idx++] = c;
229
+ indices[idx++] = d;
230
+ }
231
+ // Top cap fan (CCW when viewed from +Y)
232
+ for (let i = 0; i < radialSegments; i++) {
233
+ indices[idx++] = topCenterIdx;
234
+ indices[idx++] = topCenterIdx + 2 + i;
235
+ indices[idx++] = topCenterIdx + 1 + i;
236
+ }
237
+ // Bottom cap fan (CCW when viewed from -Y)
238
+ for (let i = 0; i < radialSegments; i++) {
239
+ indices[idx++] = botCenterIdx;
240
+ indices[idx++] = botCenterIdx + 1 + i;
241
+ indices[idx++] = botCenterIdx + 2 + i;
242
+ }
243
+ return { vertices, indices, bounds: computeBoundingSphere(vertices, VERTEX_STRIDE_FLOATS) };
244
+ }
245
+ //# sourceMappingURL=geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometry.js","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare class GridRenderer {
2
+ private readonly _pipeline;
3
+ private readonly _uniformBuffer;
4
+ private readonly _bindGroup;
5
+ private readonly _uniformData;
6
+ constructor(device: GPUDevice, _format: GPUTextureFormat);
7
+ render(pass: GPURenderPassEncoder, device: GPUDevice, viewProjection: Float32Array, cameraPos: Float32Array): void;
8
+ destroy(): void;
9
+ }
10
+ //# sourceMappingURL=grid-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-renderer.d.ts","sourceRoot":"","sources":["../src/grid-renderer.ts"],"names":[],"mappings":"AAMA,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAY;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsC;gBAEvD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB;IAyDxD,MAAM,CACJ,IAAI,EAAE,oBAAoB,EAC1B,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,YAAY,EAC5B,SAAS,EAAE,YAAY,GACtB,IAAI;IAcP,OAAO,IAAI,IAAI;CAGhB"}