@woosh/meep-engine 3.42.0 → 3.43.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 (62) hide show
  1. package/package.json +91 -96
  2. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  3. package/src/shade/playground/vgeo_runtime/README.md +5 -4
  4. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  5. package/src/shade/renderer/Renderer.js +6 -5
  6. package/src/shade/renderer/atmosphere/GPUSky.d.ts +12 -0
  7. package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
  8. package/src/shade/renderer/atmosphere/GPUSky.js +162 -147
  9. package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.d.ts.map +1 -1
  10. package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +10 -3
  11. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  12. package/src/shade/renderer/particles/DESIGN.md +13 -9
  13. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +1 -1
  14. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +1 -1
  15. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  16. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +3 -2
  17. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  18. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +3 -2
  19. package/src/shade/renderer/scene/GPUSceneContext.d.ts +9 -1
  20. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  21. package/src/shade/renderer/scene/GPUSceneContext.js +23 -1
  22. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +4 -1
  23. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  24. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +74 -3
  25. package/src/shade/renderer/volumetrics/NOTES.md +1023 -957
  26. package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts +5 -4
  27. package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts.map +1 -1
  28. package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.js +5 -4
  29. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts +1 -1
  30. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +1 -1
  31. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts +1 -1
  32. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +1 -1
  33. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts +41 -0
  34. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts.map +1 -0
  35. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +112 -0
  36. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +9 -23
  37. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  38. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +18 -126
  39. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts +22 -0
  40. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts.map +1 -0
  41. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.js +228 -0
  42. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  43. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +0 -53
  44. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +4 -3
  45. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts.map +1 -1
  46. package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +17 -7
  47. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
  48. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +69 -23
  49. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -1
  50. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +13 -5
  51. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +29 -8
  52. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -1
  53. package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +155 -30
  54. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +6 -1
  55. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
  56. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +157 -39
  57. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +91 -21
  58. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -1
  59. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +442 -70
  60. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +11 -3
  61. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  62. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +3 -0
package/package.json CHANGED
@@ -1,96 +1,91 @@
1
- {
2
- "name": "@woosh/meep-engine",
3
- "license": "SEE LICENSE IN LICENSE",
4
- "productName": "Meep",
5
- "homepage": "https://meep.company-named.com/",
6
- "description": "Advanced 3D game engine",
7
- "type": "module",
8
- "author": "Alexander Goldring",
9
- "version": "3.42.0",
10
- "exports": {
11
- "./build/*": "./build/*",
12
- "./src/*": "./src/*",
13
- "./editor/*": "./editor/*",
14
- "./samples/*": "./samples/*",
15
- "./*.md": "./*.md",
16
- "./package.json": "./package.json"
17
- },
18
- "sideEffects": [
19
- "**/*.css",
20
- "**/*.scss"
21
- ],
22
- "scripts": {
23
- "test:ci": "node scripts/check-types.mjs && vitest run --coverage --reporter=default --reporter=junit --outputFile=junit.xml",
24
- "build-module": "rollup -c rollup.config.js",
25
- "publish-npm": "npm publish",
26
- "generate-types": "tsc --project tsconfig.types.json",
27
- "check-types": "node scripts/check-types.mjs",
28
- "test": "vitest run",
29
- "test:extended": "vitest run --mode extended",
30
- "test:all": "vitest run --mode all",
31
- "dev": "vite"
32
- },
33
- "browserslist": [
34
- "last 2 chrome version",
35
- "last 2 firefox version",
36
- "last 2 safari version"
37
- ],
38
- "files": [
39
- "build",
40
- "src",
41
- "editor",
42
- "samples",
43
- "package.json",
44
- "README.md",
45
- "!src/**/*.spec.js",
46
- "!samples/**/*.spec.js",
47
- "!editor/**/*.spec.js",
48
- "!src/**/__fixtures__/**",
49
- "!src/shade/renderer/texture/noise/stbn/images/**"
50
- ],
51
- "dependencies": {
52
- "opentype.js": "1.3.4",
53
- "robust-predicates": "3.0.3"
54
- },
55
- "peerDependencies": {
56
- "dat.gui": ">=0.7.0"
57
- },
58
- "devDependencies": {
59
- "@rollup/plugin-commonjs": "29.0.3",
60
- "@rollup/plugin-node-resolve": "16.0.3",
61
- "@rollup/plugin-strip": "3.0.4",
62
- "@rollup/plugin-terser": "1.0.0",
63
- "@vitest/coverage-v8": "^5.0.0",
64
- "@webgpu/types": "0.1.72",
65
- "jsdom": "^30.0.1",
66
- "rollup": "4.63.1",
67
- "typescript": "5.4.5",
68
- "vite": "^8.2.2",
69
- "vitest": "^5.0.0",
70
- "web-tree-sitter": "^0.27.0"
71
- },
72
- "keywords": [
73
- "game-engine",
74
- "gamedev",
75
- "ecs",
76
- "entity-component-system",
77
- "data-oriented",
78
- "zero-allocation",
79
- "modular",
80
- "tree-shaking",
81
- "3d",
82
- "webgpu",
83
- "webaudio",
84
- "particles",
85
- "bvh",
86
- "behavior-tree",
87
- "inverse-kinematics",
88
- "fabrik",
89
- "clustered-lighting",
90
- "color-management",
91
- "typescript"
92
- ],
93
- "engines": {
94
- "node": ">=24"
95
- }
96
- }
1
+ {
2
+ "name": "@woosh/meep-engine",
3
+ "license": "SEE LICENSE IN LICENSE",
4
+ "productName": "Meep",
5
+ "homepage": "https://meep.company-named.com/",
6
+ "description": "Advanced 3D game engine",
7
+ "type": "module",
8
+ "author": "Alexander Goldring",
9
+ "version": "3.43.0",
10
+ "exports": {
11
+ "./build/*": "./build/*",
12
+ "./src/*": "./src/*",
13
+ "./editor/*": "./editor/*",
14
+ "./samples/*": "./samples/*",
15
+ "./*.md": "./*.md",
16
+ "./package.json": "./package.json"
17
+ },
18
+ "sideEffects": [
19
+ "**/*.css",
20
+ "**/*.scss"
21
+ ],
22
+ "scripts": {
23
+ "test:ci": "node scripts/check-types.mjs && vitest run --coverage --reporter=default --reporter=junit --outputFile=junit.xml",
24
+ "build-module": "rollup -c rollup.config.js",
25
+ "publish-npm": "npm publish",
26
+ "generate-types": "tsc --project tsconfig.types.json",
27
+ "check-types": "node scripts/check-types.mjs",
28
+ "test": "vitest run",
29
+ "test:extended": "vitest run --mode extended",
30
+ "test:all": "vitest run --mode all",
31
+ "dev": "vite"
32
+ },
33
+ "browserslist": [
34
+ "last 2 chrome version",
35
+ "last 2 firefox version",
36
+ "last 2 safari version"
37
+ ],
38
+ "files": [
39
+ "build",
40
+ "src",
41
+ "editor",
42
+ "samples",
43
+ "package.json",
44
+ "README.md"
45
+ ],
46
+ "dependencies": {
47
+ "opentype.js": "1.3.4",
48
+ "robust-predicates": "3.0.3"
49
+ },
50
+ "peerDependencies": {
51
+ "dat.gui": ">=0.7.0"
52
+ },
53
+ "devDependencies": {
54
+ "@rollup/plugin-commonjs": "29.0.3",
55
+ "@rollup/plugin-node-resolve": "16.0.3",
56
+ "@rollup/plugin-strip": "3.0.4",
57
+ "@rollup/plugin-terser": "1.0.0",
58
+ "@vitest/coverage-v8": "^5.0.0",
59
+ "@webgpu/types": "0.1.72",
60
+ "jsdom": "^30.0.1",
61
+ "rollup": "4.63.1",
62
+ "typescript": "5.4.5",
63
+ "vite": "^8.2.2",
64
+ "vitest": "^5.0.0",
65
+ "web-tree-sitter": "^0.27.0"
66
+ },
67
+ "keywords": [
68
+ "game-engine",
69
+ "gamedev",
70
+ "ecs",
71
+ "entity-component-system",
72
+ "data-oriented",
73
+ "zero-allocation",
74
+ "modular",
75
+ "tree-shaking",
76
+ "3d",
77
+ "webgpu",
78
+ "webaudio",
79
+ "particles",
80
+ "bvh",
81
+ "behavior-tree",
82
+ "inverse-kinematics",
83
+ "fabrik",
84
+ "clustered-lighting",
85
+ "color-management",
86
+ "typescript"
87
+ ],
88
+ "engines": {
89
+ "node": ">=24"
90
+ }
91
+ }
@@ -66,11 +66,11 @@ export class FluidObstacleSystem extends System<any> {
66
66
  /**
67
67
  * @param {FluidComponent} fluid
68
68
  */
69
- static "__#429@#refresh_masks"(fluid: FluidComponent): void;
69
+ static "__#430@#refresh_masks"(fluid: FluidComponent): void;
70
70
  /**
71
71
  * @param {FluidComponent} fluid
72
72
  */
73
- static "__#429@#clear_field"(fluid: FluidComponent): void;
73
+ static "__#430@#clear_field"(fluid: FluidComponent): void;
74
74
  /**
75
75
  * Mark every cell of `fluid` whose centre lies within `inflation` of the
76
76
  * posed shape as solid. Iteration is clipped to the shape's world AABB
@@ -82,7 +82,7 @@ export class FluidObstacleSystem extends System<any> {
82
82
  * @param {number} inflation world-units SDF threshold
83
83
  * @param {Float64Array} point length-3 scratch
84
84
  */
85
- static "__#429@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
85
+ static "__#430@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
86
86
  /**
87
87
  * Write the obstacle's translation velocity onto every face of every cell
88
88
  * it voxelized — the moving-wall boundary condition. Runs AFTER the mask
@@ -102,7 +102,7 @@ export class FluidObstacleSystem extends System<any> {
102
102
  * @param {number} wvy
103
103
  * @param {number} wvz
104
104
  */
105
- static "__#429@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
105
+ static "__#430@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
106
106
  constructor();
107
107
  dependencies: (typeof FluidObstacle)[];
108
108
  components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof RigidBody> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof FluidComponent> | ResourceAccessSpecification<typeof FluidObstacle>)[];
@@ -46,10 +46,11 @@ and drawn, and its sub-pixel jitter does not move the cut: the τ table below is
46
46
  and off. The environment is not awaited — `test_assets/` is gitignored, so a checkout without it
47
47
  gets the sun alone and still draws every triangle the cut selected.
48
48
 
49
- **Not the GPU sky, and that is worth writing down.** `renderer/atmosphere/GPUSky.js` and
50
- `view/GPUViewSkyContext.js` would be the natural source for this and are **not reachable**: nothing
51
- in the engine constructs either, `GPUSceneContext` has no `sky` for `GPUViewSkyContext.update` to
52
- ask for, and `Renderer` does not mention the atmosphere at all. Reviving it is not a playground's
49
+ **Not the GPU sky, and that is worth writing down.** `view/GPUViewSkyContext.js` would be the
50
+ natural source for this and is **not reachable**: nothing in the engine constructs it, and `Renderer`
51
+ does not mention the atmosphere. (`GPUSceneContext.sky` is real now -- the scene's `GPUSky`, whose
52
+ transmittance and multiple-scattering LUTs the volumetrics read -- but those are look-up tables, not
53
+ the convolved environment this would need.) Reviving the sky as a light source is not a playground's
53
54
  change — the sky produces an already-convolved GPU texture with `SPHERE_PROBE_MIPMAP_LEVELS` mips,
54
55
  while `GPULightCollection` builds its environment privately from a CPU `ShadeTexture` and convolves
55
56
  a full mip chain itself, so the two do not meet without a new way to hand that class a GPU-side
@@ -1 +1 @@
1
- {"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/Renderer.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/Renderer.js"],"names":[],"mappings":"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"}
@@ -2514,11 +2514,12 @@ export class Renderer {
2514
2514
  resolution: view_ctx.resolution,
2515
2515
  });
2516
2516
 
2517
- // Build the view's volumetric fog LUTs (participating media -> per-froxel lighting ->
2518
- // ray-marched integration). Needs the light clusters and shadow atlas. Built every frame so
2519
- // the transparency (OIT) pass always has a valid LUT to sample — an empty scene integrates
2520
- // to a no-op (transmittance 1, in-scatter 0). The opaque composite below is still skipped
2521
- // when the scene has no fog.
2517
+ // The view's volumetrics: the fog every surface is seen through (participating media ->
2518
+ // per-froxel lighting -> ray-marched integration), and the froxel irradiance lit particles
2519
+ // are lit by. Both need the light clusters and shadow atlas. A scene with no volumes records
2520
+ // no fog and hands the transparency pass a constant LUT that reads as none (transmittance 1,
2521
+ // in-scatter 0); the irradiance is built only when something reads it. The opaque composite
2522
+ // below is skipped on the same fact.
2522
2523
  const has_volumetrics = view_ctx.scene.volumetrics.source.volumes.length > 0;
2523
2524
 
2524
2525
  const volumetrics = view_ctx.volumetrics.graph_update({
@@ -1,3 +1,6 @@
1
+ /**
2
+ * @typedef {import("../GraphicsContext.js").GraphicsContext} GraphicsContext
3
+ */
1
4
  export class GPUSky {
2
5
  /**
3
6
  *
@@ -14,6 +17,14 @@ export class GPUSky {
14
17
  * @returns {GPUTextureContext}
15
18
  */
16
19
  get lut_multiple_scattering(): GPUTextureContext;
20
+ /**
21
+ * Whether the LUTs still hold nothing a reader could use: true until the first {@link update}.
22
+ * What reads {@link lut_transmittance} or {@link lut_multiple_scattering} has to see this false,
23
+ * as a texture nobody wrote reads as zero rather than failing.
24
+ *
25
+ * @returns {boolean}
26
+ */
27
+ get needs_update(): boolean;
17
28
  destroy(): void;
18
29
  debug(): void;
19
30
  /**
@@ -22,5 +33,6 @@ export class GPUSky {
22
33
  update(): void;
23
34
  #private;
24
35
  }
36
+ export type GraphicsContext = import("../GraphicsContext.js").GraphicsContext;
25
37
  import { GPUTextureContext } from "../texture/GPUTextureContext.js";
26
38
  //# sourceMappingURL=GPUSky.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GPUSky.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/GPUSky.js"],"names":[],"mappings":"AAUA;IAuCI;;;OAGG;IACH,uCAmBC;IAlDD;;;OAGG;IACH,2CAEC;IAOD;;;OAGG;IACH,iDAEC;IAiCD,gBAGC;IAED,cAYC;IAED;;OAEG;IACH,eAiDC;;CAEJ;kCA7IiC,iCAAiC"}
1
+ {"version":3,"file":"GPUSky.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/GPUSky.js"],"names":[],"mappings":"AAUA;;GAEG;AAEH;IAkDI;;;OAGG;IACH,sBAFW,eAAe,EAqBzB;IA7DD;;;OAGG;IACH,2CAEC;IAOD;;;OAGG;IACH,iDAEC;IAQD;;;;;;OAMG;IACH,4BAEC;IA2BD,gBAGC;IAED,cAYC;IAED;;OAEG;IACH,eAiDC;;CAEJ;8BAvJY,OAAO,uBAAuB,EAAE,eAAe;kCAL1B,iCAAiC"}
@@ -1,148 +1,163 @@
1
- import { FrameGraph } from "../../../engine/graphics/render/frame_graph/FrameGraph.js";
2
- import { TextureResourceDescriptor } from "../../device/graph/TextureResourceDescriptor.js";
3
- import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
4
- import { graph_compute_pass } from "../shader/graph/compute/graph_compute_pass.js";
5
- import { graph_image_pass } from "../shader/graph/graph_image_pass.js";
6
- import { debug_draw_texture } from "../texture/debug_draw_texture.js";
7
- import { GPUTextureContext } from "../texture/GPUTextureContext.js";
8
- import { shader_multiscatter_lut } from "./shader_multiscatter_lut.js";
9
- import { shader_transmittance_lut } from "./shader_transmittance_lut.js";
10
-
11
- export class GPUSky {
12
-
13
- /**
14
- * @type {GraphicsContext}
15
- */
16
- #graphics;
17
-
18
- /**
19
- * @type {GPUTextureContext}
20
- */
21
- #lut_transmittance;
22
-
23
- /**
24
- *
25
- * @returns {GPUTextureContext}
26
- */
27
- get lut_transmittance() {
28
- return this.#lut_transmittance;
29
- }
30
-
31
- /**
32
- * @type {GPUTextureContext}
33
- */
34
- #lut_multiple_scattering;
35
-
36
- /**
37
- *
38
- * @returns {GPUTextureContext}
39
- */
40
- get lut_multiple_scattering() {
41
- return this.#lut_multiple_scattering;
42
- }
43
-
44
- /**
45
- *
46
- * @type {boolean}
47
- */
48
- #needs_update = true;
49
-
50
- /**
51
- *
52
- * @param {GraphicsContext} graphics
53
- */
54
- constructor(graphics) {
55
- this.#graphics = graphics;
56
-
57
- const device = graphics.device;
58
-
59
- this.#lut_transmittance = new GPUTextureContext(device);
60
- this.#lut_transmittance.descriptor.label = "Sky / Transmittance LUT";
61
- this.#lut_transmittance.descriptor.format = "rgba16float";
62
- this.#lut_transmittance.descriptor.usage = GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC;
63
- this.#lut_transmittance.resize(256, 64);
64
-
65
- this.#lut_multiple_scattering = new GPUTextureContext(device);
66
- this.#lut_multiple_scattering.descriptor.label = "Sky / Multiple Scattering LUT";
67
- this.#lut_multiple_scattering.descriptor.format = "rgba16float";
68
- // written by a compute shader, so STORAGE_BINDING rather than RENDER_ATTACHMENT
69
- this.#lut_multiple_scattering.descriptor.usage = GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC;
70
- this.#lut_multiple_scattering.resize(32, 32);
71
-
72
-
73
- }
74
-
75
- destroy() {
76
- this.#lut_transmittance.destroy();
77
- this.#lut_multiple_scattering.destroy();
78
- }
79
-
80
- debug() {
81
-
82
-
83
- let y = 50;
84
- debug_draw_texture({ texture: this.#lut_transmittance, x: 50, y: y });
85
-
86
- y += this.#lut_transmittance.size[1] + 50;
87
-
88
- debug_draw_texture({ texture: this.#lut_multiple_scattering, x: 50, y: y });
89
-
90
- y += this.#lut_multiple_scattering.size[1] + 50;
91
-
92
- }
93
-
94
- /**
95
- *
96
- */
97
- update() {
98
- if (!this.#needs_update) {
99
- return;
100
- }
101
-
102
- const graph = new FrameGraph("sky update");
103
-
104
- const command_ctx = ShadeGPUCommandContext.create(
105
- this.#graphics,
106
- "Renderer/main"
107
- );
108
-
109
- const gr_transmittance = graph.import_resource("transmittance", TextureResourceDescriptor.fromTexture(this.#lut_transmittance.gpu_texture), this.#lut_transmittance);
110
- const gr_multiscatter = graph.import_resource("multiscatter", TextureResourceDescriptor.fromTexture(this.#lut_multiple_scattering.gpu_texture), this.#lut_multiple_scattering);
111
-
112
- // the handle the write produced, not the one imported: binding the pre-write version below
113
- // is a superseded read, which is exactly what `validate()` rejects
114
- const [gr_transmittance_written] = graph_image_pass({
115
- graph,
116
- shader: shader_transmittance_lut,
117
- inputs: {
118
- settings: {
119
- steps: 40,
120
- // read off the texture rather than restated, so the two cannot disagree
121
- resolution: [this.#lut_transmittance.width, this.#lut_transmittance.height],
122
- }
123
- },
124
- output: [gr_transmittance]
125
- });
126
-
127
-
128
- graph_compute_pass({
129
- graph,
130
- shader: shader_multiscatter_lut,
131
- // one workgroup per LUT texel, counted off the texture being written so the
132
- // dispatch cannot cover a different area than the shader stores into
133
- group_count: [this.#lut_multiple_scattering.width, this.#lut_multiple_scattering.height, 1],
134
- bindings: {
135
- tSkyLutTransmittance: gr_transmittance_written,
136
- tSkyLutMultiscatterOut: gr_multiscatter
137
- }
138
- });
139
-
140
- command_ctx.encodeGraph(graph);
141
-
142
- command_ctx.finish();
143
-
144
-
145
- this.#needs_update = false;
146
- }
147
-
1
+ import { FrameGraph } from "../../../engine/graphics/render/frame_graph/FrameGraph.js";
2
+ import { TextureResourceDescriptor } from "../../device/graph/TextureResourceDescriptor.js";
3
+ import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
4
+ import { graph_compute_pass } from "../shader/graph/compute/graph_compute_pass.js";
5
+ import { graph_image_pass } from "../shader/graph/graph_image_pass.js";
6
+ import { debug_draw_texture } from "../texture/debug_draw_texture.js";
7
+ import { GPUTextureContext } from "../texture/GPUTextureContext.js";
8
+ import { shader_multiscatter_lut } from "./shader_multiscatter_lut.js";
9
+ import { shader_transmittance_lut } from "./shader_transmittance_lut.js";
10
+
11
+ /**
12
+ * @typedef {import("../GraphicsContext.js").GraphicsContext} GraphicsContext
13
+ */
14
+
15
+ export class GPUSky {
16
+
17
+ /**
18
+ * @type {GraphicsContext}
19
+ */
20
+ #graphics;
21
+
22
+ /**
23
+ * @type {GPUTextureContext}
24
+ */
25
+ #lut_transmittance;
26
+
27
+ /**
28
+ *
29
+ * @returns {GPUTextureContext}
30
+ */
31
+ get lut_transmittance() {
32
+ return this.#lut_transmittance;
33
+ }
34
+
35
+ /**
36
+ * @type {GPUTextureContext}
37
+ */
38
+ #lut_multiple_scattering;
39
+
40
+ /**
41
+ *
42
+ * @returns {GPUTextureContext}
43
+ */
44
+ get lut_multiple_scattering() {
45
+ return this.#lut_multiple_scattering;
46
+ }
47
+
48
+ /**
49
+ *
50
+ * @type {boolean}
51
+ */
52
+ #needs_update = true;
53
+
54
+ /**
55
+ * Whether the LUTs still hold nothing a reader could use: true until the first {@link update}.
56
+ * What reads {@link lut_transmittance} or {@link lut_multiple_scattering} has to see this false,
57
+ * as a texture nobody wrote reads as zero rather than failing.
58
+ *
59
+ * @returns {boolean}
60
+ */
61
+ get needs_update() {
62
+ return this.#needs_update;
63
+ }
64
+
65
+ /**
66
+ *
67
+ * @param {GraphicsContext} graphics
68
+ */
69
+ constructor(graphics) {
70
+ this.#graphics = graphics;
71
+
72
+ const device = graphics.device;
73
+
74
+ this.#lut_transmittance = new GPUTextureContext(device);
75
+ this.#lut_transmittance.descriptor.label = "Sky / Transmittance LUT";
76
+ this.#lut_transmittance.descriptor.format = "rgba16float";
77
+ this.#lut_transmittance.descriptor.usage = GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC;
78
+ this.#lut_transmittance.resize(256, 64);
79
+
80
+ this.#lut_multiple_scattering = new GPUTextureContext(device);
81
+ this.#lut_multiple_scattering.descriptor.label = "Sky / Multiple Scattering LUT";
82
+ this.#lut_multiple_scattering.descriptor.format = "rgba16float";
83
+ // written by a compute shader, so STORAGE_BINDING rather than RENDER_ATTACHMENT
84
+ this.#lut_multiple_scattering.descriptor.usage = GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC;
85
+ this.#lut_multiple_scattering.resize(32, 32);
86
+
87
+
88
+ }
89
+
90
+ destroy() {
91
+ this.#lut_transmittance.destroy();
92
+ this.#lut_multiple_scattering.destroy();
93
+ }
94
+
95
+ debug() {
96
+
97
+
98
+ let y = 50;
99
+ debug_draw_texture({ texture: this.#lut_transmittance, x: 50, y: y });
100
+
101
+ y += this.#lut_transmittance.size[1] + 50;
102
+
103
+ debug_draw_texture({ texture: this.#lut_multiple_scattering, x: 50, y: y });
104
+
105
+ y += this.#lut_multiple_scattering.size[1] + 50;
106
+
107
+ }
108
+
109
+ /**
110
+ *
111
+ */
112
+ update() {
113
+ if (!this.#needs_update) {
114
+ return;
115
+ }
116
+
117
+ const graph = new FrameGraph("sky update");
118
+
119
+ const command_ctx = ShadeGPUCommandContext.create(
120
+ this.#graphics,
121
+ "Renderer/main"
122
+ );
123
+
124
+ const gr_transmittance = graph.import_resource("transmittance", TextureResourceDescriptor.fromTexture(this.#lut_transmittance.gpu_texture), this.#lut_transmittance);
125
+ const gr_multiscatter = graph.import_resource("multiscatter", TextureResourceDescriptor.fromTexture(this.#lut_multiple_scattering.gpu_texture), this.#lut_multiple_scattering);
126
+
127
+ // the handle the write produced, not the one imported: binding the pre-write version below
128
+ // is a superseded read, which is exactly what `validate()` rejects
129
+ const [gr_transmittance_written] = graph_image_pass({
130
+ graph,
131
+ shader: shader_transmittance_lut,
132
+ inputs: {
133
+ settings: {
134
+ steps: 40,
135
+ // read off the texture rather than restated, so the two cannot disagree
136
+ resolution: [this.#lut_transmittance.width, this.#lut_transmittance.height],
137
+ }
138
+ },
139
+ output: [gr_transmittance]
140
+ });
141
+
142
+
143
+ graph_compute_pass({
144
+ graph,
145
+ shader: shader_multiscatter_lut,
146
+ // one workgroup per LUT texel, counted off the texture being written so the
147
+ // dispatch cannot cover a different area than the shader stores into
148
+ group_count: [this.#lut_multiple_scattering.width, this.#lut_multiple_scattering.height, 1],
149
+ bindings: {
150
+ tSkyLutTransmittance: gr_transmittance_written,
151
+ tSkyLutMultiscatterOut: gr_multiscatter
152
+ }
153
+ });
154
+
155
+ command_ctx.encodeGraph(graph);
156
+
157
+ command_ctx.finish();
158
+
159
+
160
+ this.#needs_update = false;
161
+ }
162
+
148
163
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shader_lightmap_denoise_sh.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js"],"names":[],"mappings":"AA2BA;;;GAGG;AACH,2CAFU,SAAS,CAkCjB;AAyHF,qDAOE;0BAvLwB,oCAAoC;4BAClC,6BAA6B"}
1
+ {"version":3,"file":"shader_lightmap_denoise_sh.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js"],"names":[],"mappings":"AA2BA;;;GAGG;AACH,2CAFU,SAAS,CAyCjB;AAyHF,qDAOE;0BA9LwB,oCAAoC;4BAClC,6BAA6B"}