@driftengine/core 4.8.4 → 4.8.6

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 (138) hide show
  1. package/CHANGELOG.json +4332 -4250
  2. package/dist/build/shaderComments.js +0 -0
  3. package/dist/index.d.ts +10 -2
  4. package/dist/index.js +11 -1
  5. package/dist/render/ambientHarmonics.d.ts +46 -0
  6. package/dist/render/ambientHarmonics.js +80 -0
  7. package/dist/render/areaLights.d.ts +19 -0
  8. package/dist/render/areaLights.js +20 -0
  9. package/dist/render/backend/api.d.ts +13 -2
  10. package/dist/render/backend/webgl2/instanced.d.ts +2 -0
  11. package/dist/render/backend/webgl2/instanced.js +11 -2
  12. package/dist/render/backend/webgl2/renderer.d.ts +74 -1
  13. package/dist/render/backend/webgl2/renderer.js +229 -37
  14. package/dist/render/backend/webgl2/skinScatter.d.ts +14 -0
  15. package/dist/render/backend/webgl2/skinScatter.js +88 -26
  16. package/dist/render/backend/webgpu/buffers.js +2 -1
  17. package/dist/render/backend/webgpu/clusterBinner.js +3 -2
  18. package/dist/render/backend/webgpu/flatPass.d.ts +7 -5
  19. package/dist/render/backend/webgpu/flatPass.js +15 -13
  20. package/dist/render/backend/webgpu/particlePass.d.ts +37 -4
  21. package/dist/render/backend/webgpu/particlePass.js +80 -12
  22. package/dist/render/backend/webgpu/postPass.d.ts +6 -1
  23. package/dist/render/backend/webgpu/postPass.js +7 -2
  24. package/dist/render/backend/webgpu/renderer.d.ts +58 -7
  25. package/dist/render/backend/webgpu/renderer.js +329 -78
  26. package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.d.ts +1 -1
  27. package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.js +41 -1
  28. package/dist/render/backend/webgpu/skinPaletteRing.d.ts +40 -28
  29. package/dist/render/backend/webgpu/skinPaletteRing.js +69 -32
  30. package/dist/render/backend/webgpu/skinScatterPass.d.ts +10 -2
  31. package/dist/render/backend/webgpu/skinScatterPass.js +59 -9
  32. package/dist/render/backend/webgpu/surfaceTexturePass.d.ts +2 -1
  33. package/dist/render/backend/webgpu/surfaceTexturePass.js +18 -4
  34. package/dist/render/bloomChain.d.ts +44 -0
  35. package/dist/render/bloomChain.js +28 -0
  36. package/dist/render/bloomPass.d.ts +3 -1
  37. package/dist/render/bloomPass.js +16 -2
  38. package/dist/render/clusteredLights.d.ts +55 -1
  39. package/dist/render/clusteredLights.js +182 -8
  40. package/dist/render/fixtureAtlas.js +1 -1
  41. package/dist/render/instanceCull.js +7 -0
  42. package/dist/render/instances.d.ts +32 -10
  43. package/dist/render/instances.js +17 -8
  44. package/dist/render/lightBudget.d.ts +26 -1
  45. package/dist/render/lightBudget.js +26 -3
  46. package/dist/render/lightmap.d.ts +102 -0
  47. package/dist/render/lightmap.js +118 -0
  48. package/dist/render/mesh.js +2 -1
  49. package/dist/render/particleBatch.d.ts +59 -3
  50. package/dist/render/particleBatch.js +53 -2
  51. package/dist/render/particleMaterial.d.ts +6 -1
  52. package/dist/render/particleMaterial.js +10 -2
  53. package/dist/render/particlePool.d.ts +11 -0
  54. package/dist/render/particlePool.js +2 -0
  55. package/dist/render/particleSort.d.ts +34 -0
  56. package/dist/render/particleSort.js +96 -0
  57. package/dist/render/sceneTarget.d.ts +5 -0
  58. package/dist/render/sceneTarget.js +8 -1
  59. package/dist/render/shaders/bloom.d.ts +8 -4
  60. package/dist/render/shaders/bloom.js +20 -3
  61. package/dist/render/shaders/flat/areaLight.d.ts +10 -0
  62. package/dist/render/shaders/flat/areaLight.js +96 -0
  63. package/dist/render/shaders/flat/index.js +30 -4
  64. package/dist/render/shaders/flat/main.d.ts +1 -1
  65. package/dist/render/shaders/flat/main.js +107 -105
  66. package/dist/render/shaders/flat/models.d.ts +16 -4
  67. package/dist/render/shaders/flat/models.js +64 -4
  68. package/dist/render/shaders/flat/normalMap.d.ts +10 -0
  69. package/dist/render/shaders/flat/normalMap.js +25 -0
  70. package/dist/render/shaders/flat/preamble.js +74 -37
  71. package/dist/render/shaders/flat/skin.js +6 -5
  72. package/dist/render/shaders/generated/bloom.wgsl.d.ts +13 -3
  73. package/dist/render/shaders/generated/bloom.wgsl.js +13 -3
  74. package/dist/render/shaders/generated/flat.wgsl.d.ts +1631 -2044
  75. package/dist/render/shaders/generated/flat.wgsl.js +1669 -2082
  76. package/dist/render/shaders/generated/particle.wgsl.d.ts +115 -1
  77. package/dist/render/shaders/generated/particle.wgsl.js +115 -1
  78. package/dist/render/shaders/generated/skinBlur.wgsl.d.ts +12 -2
  79. package/dist/render/shaders/generated/skinBlur.wgsl.js +12 -2
  80. package/dist/render/shaders/particle.d.ts +17 -1
  81. package/dist/render/shaders/particle.js +133 -1
  82. package/dist/render/shaders/skinBlur.js +25 -3
  83. package/dist/render/skinBlur.d.ts +8 -5
  84. package/dist/render/skinBlur.js +8 -5
  85. package/dist/render/surfaceModel.d.ts +21 -1
  86. package/dist/render/surfaceModel.js +22 -0
  87. package/dist/render/surfaceTexture.d.ts +14 -1
  88. package/dist/render/surfaceTexture.js +15 -2
  89. package/package.json +6 -6
  90. package/src/build/shaderComments.ts +0 -0
  91. package/src/index.ts +20 -1
  92. package/src/render/ambientHarmonics.ts +92 -0
  93. package/src/render/areaLights.ts +39 -0
  94. package/src/render/backend/api.ts +14 -1
  95. package/src/render/backend/webgl2/instanced.ts +12 -2
  96. package/src/render/backend/webgl2/renderer.ts +292 -35
  97. package/src/render/backend/webgl2/skinScatter.ts +120 -43
  98. package/src/render/backend/webgpu/buffers.ts +2 -1
  99. package/src/render/backend/webgpu/clusterBinner.ts +3 -1
  100. package/src/render/backend/webgpu/flatPass.ts +18 -13
  101. package/src/render/backend/webgpu/particlePass.ts +118 -12
  102. package/src/render/backend/webgpu/postPass.ts +7 -2
  103. package/src/render/backend/webgpu/renderer.ts +396 -95
  104. package/src/render/backend/webgpu/shaders/clusterBin.wgsl.ts +41 -1
  105. package/src/render/backend/webgpu/skinPaletteRing.ts +65 -33
  106. package/src/render/backend/webgpu/skinScatterPass.ts +59 -9
  107. package/src/render/backend/webgpu/surfaceTexturePass.ts +26 -5
  108. package/src/render/bloomChain.ts +69 -0
  109. package/src/render/bloomPass.ts +26 -2
  110. package/src/render/clusteredLights.ts +221 -7
  111. package/src/render/fixtureAtlas.ts +1 -1
  112. package/src/render/instanceCull.ts +5 -0
  113. package/src/render/instances.ts +40 -11
  114. package/src/render/lightBudget.ts +48 -2
  115. package/src/render/lightmap.ts +202 -0
  116. package/src/render/mesh.ts +2 -1
  117. package/src/render/particleBatch.ts +95 -4
  118. package/src/render/particleMaterial.ts +11 -1
  119. package/src/render/particlePool.ts +13 -0
  120. package/src/render/particleSort.ts +133 -0
  121. package/src/render/sceneTarget.ts +18 -1
  122. package/src/render/shaders/bloom.ts +20 -3
  123. package/src/render/shaders/flat/areaLight.ts +96 -0
  124. package/src/render/shaders/flat/index.ts +30 -4
  125. package/src/render/shaders/flat/main.ts +107 -105
  126. package/src/render/shaders/flat/models.ts +73 -8
  127. package/src/render/shaders/flat/normalMap.ts +25 -0
  128. package/src/render/shaders/flat/preamble.ts +74 -37
  129. package/src/render/shaders/flat/skin.ts +6 -5
  130. package/src/render/shaders/generated/bloom.wgsl.ts +13 -3
  131. package/src/render/shaders/generated/flat.wgsl.ts +1669 -2082
  132. package/src/render/shaders/generated/particle.wgsl.ts +116 -1
  133. package/src/render/shaders/generated/skinBlur.wgsl.ts +12 -2
  134. package/src/render/shaders/particle.ts +134 -1
  135. package/src/render/shaders/skinBlur.ts +25 -3
  136. package/src/render/skinBlur.ts +8 -5
  137. package/src/render/surfaceModel.ts +36 -1
  138. package/src/render/surfaceTexture.ts +41 -3
@@ -8,6 +8,8 @@ import type { RendererApi } from '../api.ts';
8
8
  import { GpuTimestamps } from './gpuTimestamps.ts';
9
9
  import type { Environment, FilmOptions, InsetRect, LightVolumeDrawOptions, SkyColors, TranslucentMeshOptions } from '../webgl2/renderer.ts';
10
10
  import type { IncrementalMeshHandle, MeshOptions } from '../api.ts';
11
+ import type { LightmapPage } from '../../lightmap.ts';
12
+ import { type BloomResponse } from '../../bloomChain.ts';
11
13
  import type { WaterBody } from '../../waterRenderer.ts';
12
14
  import type { WindStreakOptions } from '../../windStreakRenderer.ts';
13
15
  import type { WindField } from '../../windField.ts';
@@ -33,7 +35,7 @@ import type { CausticSheet } from '../../causticsRenderer.ts';
33
35
  import { type GpuCaustics } from './causticsPass.ts';
34
36
  import type { BoltSegments } from '../../boltPool.ts';
35
37
  import type { LineSegments } from '../../linePoints.ts';
36
- import type { ParticleBatchOptions } from '../../particleBatch.ts';
38
+ import { type ParticleBatchOptions } from '../../particleBatch.ts';
37
39
  import type { ParticleInstances } from '../../particlePool.ts';
38
40
  import type { PlumeOptions, PlumePlacement } from '../../plumeRenderer.ts';
39
41
  import type { InstanceData } from '../../instancedMesh.ts';
@@ -518,6 +520,17 @@ export declare class WebGPURenderer implements RendererApi {
518
520
  /** Whether this frame has spread its skin: once, at its first blended draw or before its end. */
519
521
  private skinScattered;
520
522
  private readonly skinInverseProjection;
523
+ /** Scratch for a sprite's depth conversion, so a particle draw allocates nothing. */
524
+ private readonly spriteInverseProjection;
525
+ /** Said once: a sprite asked for a soft edge where no depth copy could be had. */
526
+ private warnedSpriteDepth;
527
+ /** Said once: more rectangles than the fixed arm shades, and no froxel table for the rest. */
528
+ private warnedAreaOverflow;
529
+ /** What a sprite's depth binding holds where no copy was taken. See `spriteDepthStandIn`. */
530
+ private spriteDepthEmpty;
531
+ /** The samplers every sprite batch binds: its image filtered, the depth copy texel for texel. */
532
+ private spriteLinearSampler;
533
+ private spriteNearestSampler;
521
534
  private sceneColorView;
522
535
  /** The multisampled twin, when the profile asks for samples. Resolved into `sceneColor`. */
523
536
  private sceneColorMsaa;
@@ -1171,6 +1184,8 @@ export declare class WebGPURenderer implements RendererApi {
1171
1184
  get compressedFormats(): readonly CompressedTextureFormat[];
1172
1185
  /** Several images of one size as an array's layers. See `RendererApi.createSurfaceTextureArray`. */
1173
1186
  createSurfaceTextureArray(sources: readonly SurfaceSource[], options?: SurfaceTextureOptions): GpuSurfaceTexture;
1187
+ /** A baked lightmap page, as a `lightmapModel` material's `modelMap`. See `RendererApi`. */
1188
+ createLightmap(page: LightmapPage): GpuSurfaceTexture;
1174
1189
  /**
1175
1190
  * GPU textures an `updateSurfaceTexture` replaced, destroyed when the next frame begins.
1176
1191
  *
@@ -1278,6 +1293,11 @@ export declare class WebGPURenderer implements RendererApi {
1278
1293
  * it is on the public surface and removing it would break four repositories to save a method.
1279
1294
  */
1280
1295
  setEnvironmentAmbient(_amount: number): void;
1296
+ /**
1297
+ * The ambient the following draws take, nine spherical-harmonic coefficients or null for the
1298
+ * frame's. See `Renderer.setAmbientSH`: material state, so the next draw takes a slot of its own.
1299
+ */
1300
+ setAmbientSH(coefficients: ArrayLike<number> | null): void;
1281
1301
  /** How reflective the surfaces drawn next are. Clamped, as `renderer.ts` clamps it. */
1282
1302
  setSurfaceReflectivity(amount: number): void;
1283
1303
  /** How bright the environment the surfaces drawn next reflect is. See `renderer.ts`. */
@@ -1428,6 +1448,20 @@ export declare class WebGPURenderer implements RendererApi {
1428
1448
  private gradeCode;
1429
1449
  private gradeExposure;
1430
1450
  drawParticles(batch: GpuParticles, data: ParticleInstances, camera: Camera, env: Environment, timeSeconds: number): void;
1451
+ /**
1452
+ * A sprite's flipbook and fades into its fragment block `f`, and the bind group holding the
1453
+ * frame's depth copy its soft edge reads — built again only when that copy is replaced.
1454
+ *
1455
+ * **The copy is the volume's**: `takeVolumeDepth` ends the frame's pass, resolves the opaque
1456
+ * depth and reopens, once a frame whoever asks. Only in the frame's own picture: in a mirror or
1457
+ * a probe's face it would be another view's depth, and the edge stays hard there, as on WebGL2.
1458
+ * Without a composite there is no copy, and the renderer says so once.
1459
+ */
1460
+ private spriteFades;
1461
+ /** A sprite's image sampler, repeating nothing and filtered, or its depth's, nearest. */
1462
+ private spriteSampler;
1463
+ /** A one-texel `r32float` for a sprite's depth binding where no copy was taken. */
1464
+ private spriteDepthStandIn;
1431
1465
  /**
1432
1466
  * The bind group layout for one particle material, built on first use.
1433
1467
  *
@@ -2159,7 +2193,7 @@ export declare class WebGPURenderer implements RendererApi {
2159
2193
  * drawn. It also handed the caller a different object from the one the upload was filling.
2160
2194
  */
2161
2195
  private keyed;
2162
- createMesh(data: MeshData, options?: MeshOptions): GpuMesh;
2196
+ createMesh(given: MeshData, options?: MeshOptions): GpuMesh;
2163
2197
  /**
2164
2198
  * Geometry in, handle out — but the geometry lands over as many frames as the caller gives it.
2165
2199
  *
@@ -2169,7 +2203,7 @@ export declare class WebGPURenderer implements RendererApi {
2169
2203
  * straddle one, and going on writing to a dead device would raise validation errors a consumer
2170
2204
  * can do nothing about. Done with `complete` still false is the signal that it was abandoned.
2171
2205
  */
2172
- createMeshIncremental(data: MeshData, options?: MeshOptions): IncrementalMeshHandle;
2206
+ createMeshIncremental(given: MeshData, options?: MeshOptions): IncrementalMeshHandle;
2173
2207
  /**
2174
2208
  * Rewrite a mesh's positions, and its normals where the caller has them.
2175
2209
  *
@@ -2943,9 +2977,10 @@ export declare class WebGPURenderer implements RendererApi {
2943
2977
  */
2944
2978
  private skinSplits;
2945
2979
  /**
2946
- * A skin draw's diffuse half, kept for the spread: the frame's draw again, with the same slots,
2947
- * buffers and bind group, through the pipeline that writes the diffuse alone into the blur's
2948
- * target and tests for the depth its frame half wrote.
2980
+ * A skin draw's diffuse and colour halves, kept for the spread: the frame's draw again, twice,
2981
+ * with the same slots, buffers and bind group, through the pipelines that write the diffuse's
2982
+ * light alone and its colour alone into the blur's targets and test for the depth its frame half
2983
+ * wrote.
2949
2984
  */
2950
2985
  private keepSkinDiffuse;
2951
2986
  /**
@@ -3516,6 +3551,14 @@ export declare class WebGPURenderer implements RendererApi {
3516
3551
  /** This frame's exposure into the tone curve. Starts at the profile's own. */
3517
3552
  private exposure;
3518
3553
  private bloomScale;
3554
+ /** The draw's own ambient, as `packAmbientSH` writes it; zeros are the frame's. */
3555
+ private readonly ambientSH;
3556
+ /** The ramp and each level's tint, as `resolveBloomResponse` writes them; the subtraction and white. */
3557
+ private readonly bloomResponse;
3558
+ /** The response before the last `setBloom`, to tell whether the blocks need writing again. */
3559
+ private readonly bloomResponseNext;
3560
+ /** Each level's tint as a blend constant, rewritten in place: `setBlendConstant` takes a colour. */
3561
+ private readonly bloomConstants;
3519
3562
  /** In scene units, once `setBloom` has moved it; null reads the profile's. */
3520
3563
  private bloomThresholdSet;
3521
3564
  private rushStrength;
@@ -3579,7 +3622,7 @@ export declare class WebGPURenderer implements RendererApi {
3579
3622
  * a 3D write needs both and a wrong one silently shears the cube.
3580
3623
  */
3581
3624
  private uploadGrade;
3582
- setBloom(scale: number, threshold?: number): void;
3625
+ setBloom(scale: number, threshold?: number, response?: BloomResponse | null): void;
3583
3626
  /**
3584
3627
  * How thick the air is, this frame: a global participating medium filling the whole frustum.
3585
3628
  *
@@ -3883,6 +3926,14 @@ export declare class WebGPURenderer implements RendererApi {
3883
3926
  readonly height: number;
3884
3927
  readonly data: Float32Array;
3885
3928
  }, options?: ProbeBakeOptions): boolean;
3929
+ /** One layer of the declared grid from an image. See `Renderer.setProbeLayerImage`. */
3930
+ setProbeLayerImage(layer: number, image: {
3931
+ readonly width: number;
3932
+ readonly height: number;
3933
+ readonly data: Float32Array;
3934
+ }, options?: ProbeBakeOptions): boolean;
3935
+ /** An equirectangular image onto the capture cube's six faces, in the cube's own format. */
3936
+ private uploadProbeFaces;
3886
3937
  /**
3887
3938
  * Upload the photometric profiles a consumer loaded, and rebuild the bind group that holds them.
3888
3939
  *