@rings-webgpu/core 1.0.12 → 1.0.13

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.
@@ -22678,61 +22678,35 @@ const GSplat_VS = (
22678
22678
  /* wgsl */
22679
22679
  `
22680
22680
  #include "GlobalUniform"
22681
-
22682
- struct VSOut {
22683
- @location(auto) vColor : vec4f,
22684
- @location(auto) vTexCoord : vec2f,
22685
- @builtin(position) member : vec4f
22686
- };
22687
-
22688
- // ===== SPLAT CORE VS (from PlayCanvas shader-generator-gsplat.js) =====
22689
-
22690
- // Uniforms (mapped to WebGPU bindings)
22691
- // matrix_model, matrix_view, matrix_projection -> GlobalUniform + MaterialUniform
22692
- // viewport -> calculated from globalUniform.windowWidth/Height
22693
- // tex_params -> materialUniform.tex_params
22694
-
22695
- @group(1) @binding(0) var splatColor : texture_2d<f32>;
22696
- @group(1) @binding(1) var transformA : texture_2d<u32>;
22697
- @group(1) @binding(2) var transformB : texture_2d<f32>;
22698
- @group(1) @binding(4) var splatOrder : texture_2d<u32>;
22699
22681
 
22700
22682
  struct MaterialUniform {
22701
- tex_params: vec4f, // numSplats, textureWidth, validCount, visBoost
22702
22683
  modelMatrix: mat4x4<f32>,
22703
- pixelCull: vec4f, // minPixels, maxPixels, maxPixelCullDistance, reserved
22684
+ tex_params: vec4<f32>, // [numSplats, texWidth, validCount, visBoost]
22685
+ pixelCull: vec4<f32>, // [minPixels, maxPixels, maxPixelCullDistance, batchSize]
22704
22686
  };
22705
- @group(1) @binding(3) var<uniform> materialUniform : MaterialUniform;
22687
+ @group(1) @binding(0) var<uniform> materialUniform: MaterialUniform;
22706
22688
 
22707
- // Global variables (like PlayCanvas)
22708
- var<private> orderId: u32;
22709
- var<private> splatId: u32;
22689
+ struct VSOut {
22690
+ @builtin(position) member: vec4<f32>,
22691
+ @location(0) vColor: vec4<f32>,
22692
+ @location(1) vTexCoord: vec2<f32>,
22693
+ };
22694
+
22695
+ // Textures (like PlayCanvas)
22696
+ @group(1) @binding(1) var splatColor: texture_2d<f32>;
22697
+ @group(1) @binding(2) var transformA: texture_2d<u32>;
22698
+ @group(1) @binding(3) var transformB: texture_2d<f32>;
22699
+ @group(1) @binding(4) var splatOrder: texture_2d<u32>;
22700
+
22701
+ // Global variables for texture lookups
22710
22702
  var<private> splatUV: vec2<i32>;
22703
+ var<private> splatId: u32;
22711
22704
  var<private> tA: vec4<u32>;
22712
22705
 
22713
- // Helper: decode 16-bit half float
22714
- fn unpackHalf(h: u32) -> f32 {
22715
- let s = (h >> 15u) & 0x1u;
22716
- let e = (h >> 10u) & 0x1fu;
22717
- let m = h & 0x3ffu;
22718
- let sign = select(1.0, -1.0, s == 1u);
22719
- if (e == 0u) {
22720
- if (m == 0u) { return 0.0; }
22721
- return sign * (f32(m) * exp2(-24.0));
22722
- } else if (e == 31u) {
22723
- return sign * 65504.0;
22724
- } else {
22725
- return sign * (1.0 + f32(m) / 1024.0) * exp2(f32(i32(e) - 15));
22726
- }
22727
- }
22728
-
22729
22706
  // === calcSplatUV() - returns bool ===
22730
- fn calcSplatUV(instance_id: u32) -> bool {
22731
- let numSplats = u32(materialUniform.tex_params.x);
22707
+ fn calcSplatUV(orderId: u32) -> bool {
22732
22708
  let textureWidth = u32(materialUniform.tex_params.y);
22733
-
22734
- // calculate splat index
22735
- orderId = instance_id;
22709
+ let numSplats = u32(materialUniform.tex_params.x);
22736
22710
 
22737
22711
  if (orderId >= numSplats) {
22738
22712
  return false;
@@ -22779,6 +22753,19 @@ const GSplat_VS = (
22779
22753
  return result;
22780
22754
  }
22781
22755
 
22756
+ // === getRotationMatrix() - returns mat3x3 ===
22757
+ fn getRotationMatrix() -> mat3x3f {
22758
+ let cov_data = getCovariance();
22759
+ let covA = cov_data.covA;
22760
+ let covB = cov_data.covB;
22761
+
22762
+ return mat3x3f(
22763
+ vec3f(1.0 - 2.0 * (covA.z * covA.z + covB.x * covB.x), 2.0 * (covA.y * covA.z + covB.y * covB.x), 2.0 * (covA.y * covB.x - covB.y * covA.z)),
22764
+ vec3f(2.0 * (covA.y * covA.z - covB.y * covB.x), 1.0 - 2.0 * (covA.y * covA.y + covB.x * covB.x), 2.0 * (covA.z * covB.x + covA.y * covB.y)),
22765
+ vec3f(2.0 * (covA.y * covB.x + covB.y * covA.z), 2.0 * (covA.z * covB.x - covA.y * covB.y), 1.0 - 2.0 * (covA.y * covA.y + covA.z * covA.z))
22766
+ );
22767
+ }
22768
+
22782
22769
  // === calcV1V2() - returns vec4 ===
22783
22770
  fn calcV1V2(splat_cam: vec3f, covA: vec3f, covB: vec3f, W: mat3x3f, viewport: vec2f, projMat: mat4x4f) -> vec4f {
22784
22771
  let Vrk = mat3x3f(
@@ -22822,22 +22809,25 @@ const GSplat_VS = (
22822
22809
  @vertex
22823
22810
  fn VertMain(
22824
22811
  @builtin(vertex_index) vid : u32,
22825
- @builtin(instance_index) iid : u32
22812
+ @builtin(instance_index) iid : u32,
22813
+ @location(0) position: vec3<f32> // vertex_position from mesh (x, y, local_index)
22826
22814
  ) -> VSOut {
22827
22815
  var o: VSOut;
22828
22816
  let discardVec = vec4f(0.0, 0.0, 2.0, 1.0);
22829
22817
 
22830
- // Vertex position array (PlayCanvas uses attribute vec3 with x,y in [-1,1])
22831
- let vertex_position = array<vec2f, 4>(
22832
- vec2f(-2.0, -2.0),
22833
- vec2f( 2.0, -2.0),
22834
- vec2f(-2.0, 2.0),
22835
- vec2f( 2.0, 2.0)
22836
- );
22837
- let vertex_pos = vertex_position[vid & 3u];
22818
+ // Calculate splat ID
22819
+ // orderId = vertex_id_attrib + uint(vertex_position.z)
22820
+ // In our case: vertex_id_attrib = iid * batchSize
22821
+ let batchSize = u32(materialUniform.pixelCull.w);
22822
+ let base_splat_index = iid * batchSize;
22823
+ let local_splat_index = u32(position.z);
22824
+ let orderId = base_splat_index + local_splat_index;
22825
+
22826
+ // Use vertex position from mesh
22827
+ let vertex_pos = position.xy;
22838
22828
 
22839
22829
  // calculate splat uv
22840
- if (!calcSplatUV(iid)) {
22830
+ if (!calcSplatUV(orderId)) {
22841
22831
  o.member = discardVec;
22842
22832
  o.vColor = vec4f(0.0);
22843
22833
  o.vTexCoord = vec2f(0.0);
@@ -22865,9 +22855,8 @@ const GSplat_VS = (
22865
22855
  }
22866
22856
 
22867
22857
  // Frustum culling: cull splats outside screen bounds
22868
- // Add margin for splat radius (conservative: ~2x max splat size)
22869
22858
  let ndc = splat_proj.xyz / splat_proj.w;
22870
- let margin = 0.5; // Allow splats near edges to be visible
22859
+ let margin = 0.0;
22871
22860
  if (ndc.x < -1.0 - margin || ndc.x > 1.0 + margin ||
22872
22861
  ndc.y < -1.0 - margin || ndc.y > 1.0 + margin ||
22873
22862
  ndc.z < 0.0 || ndc.z > 1.0) {
@@ -22885,6 +22874,12 @@ const GSplat_VS = (
22885
22874
 
22886
22875
  // get color
22887
22876
  let color = textureLoad(splatColor, splatUV, 0);
22877
+ if (color.a < 1.0 / 255.0) {
22878
+ o.member = discardVec;
22879
+ o.vColor = vec4f(0.0);
22880
+ o.vTexCoord = vec2f(0.0);
22881
+ return o;
22882
+ }
22888
22883
 
22889
22884
  // calculate scale based on alpha
22890
22885
  let scale = min(1.0, sqrt(-log(1.0 / 255.0 / color.a)) / 2.0);
@@ -22893,7 +22888,7 @@ const GSplat_VS = (
22893
22888
  let visBoost = materialUniform.tex_params.w;
22894
22889
  var v1v2_scaled = v1v2 * scale * visBoost;
22895
22890
 
22896
- // Pixel coverage culling (min and max thresholds)
22891
+ // Pixel coverage culling
22897
22892
  let v1_len_sq = dot(v1v2_scaled.xy, v1v2_scaled.xy);
22898
22893
  let v2_len_sq = dot(v1v2_scaled.zw, v1v2_scaled.zw);
22899
22894
 
@@ -22901,7 +22896,7 @@ const GSplat_VS = (
22901
22896
  let maxPixels = materialUniform.pixelCull.y;
22902
22897
  let maxPixelCullDistance = materialUniform.pixelCull.z;
22903
22898
 
22904
- // Early out tiny splats (below minimum pixel coverage)
22899
+ // Early out tiny splats
22905
22900
  if (v1_len_sq < minPixels && v2_len_sq < minPixels) {
22906
22901
  o.member = discardVec;
22907
22902
  o.vColor = vec4f(0.0);
@@ -22909,13 +22904,9 @@ const GSplat_VS = (
22909
22904
  return o;
22910
22905
  }
22911
22906
 
22912
- // Cull oversized splats (above maximum pixel coverage)
22913
- // Only apply to splats close to camera (distance-based condition)
22907
+ // Cull oversized splats
22914
22908
  if (maxPixels > 0.0) {
22915
- // Calculate distance from splat to camera
22916
22909
  let splatDistance = length(splat_cam.xyz);
22917
-
22918
- // Only cull oversized splats if they are close to camera
22919
22910
  if (maxPixelCullDistance <= 0.0 || splatDistance < maxPixelCullDistance) {
22920
22911
  let maxAxisSq = maxPixels * maxPixels;
22921
22912
  if (v1_len_sq > maxAxisSq || v2_len_sq > maxAxisSq) {
@@ -22927,12 +22918,9 @@ const GSplat_VS = (
22927
22918
  }
22928
22919
  }
22929
22920
 
22930
- // gl_Position = splat_proj + vec4((vertex_position.x * v1v2.xy + vertex_position.y * v1v2.zw) / viewport * splat_proj.w, 0, 0);
22921
+ // Final position
22931
22922
  o.member = splat_proj + vec4f((vertex_pos.x * v1v2_scaled.xy + vertex_pos.y * v1v2_scaled.zw) / viewport * splat_proj.w, 0.0, 0.0);
22932
-
22933
- // texCoord = vertex_position.xy * scale / 2.0;
22934
22923
  o.vTexCoord = vertex_pos * scale / 2.0;
22935
-
22936
22924
  o.vColor = color;
22937
22925
 
22938
22926
  return o;
@@ -22947,27 +22935,25 @@ const GSplat_FS = (
22947
22935
  // === evalSplat() - like PlayCanvas splatCoreFS ===
22948
22936
  fn evalSplat(texCoord: vec2f, color: vec4f) -> vec4f {
22949
22937
  let A = dot(texCoord, texCoord);
22938
+ var B = exp(-A * 4.0) * color.a;
22950
22939
  if (A > 1.0) {
22951
- discard;
22940
+ B = 0.0;
22952
22941
  }
22953
22942
 
22954
- let B = exp(-A * 4.0) * color.a;
22955
22943
  if (B < 1.0 / 255.0) {
22956
- discard;
22944
+ B = 0.0;
22957
22945
  }
22958
22946
 
22959
- // TONEMAP_ENABLED branch not implemented (would call toneMap() and gammaCorrectOutput())
22960
22947
  return vec4f(color.rgb, B);
22961
22948
  }
22962
-
22963
- // === main() - like PlayCanvas splatMainFS ===
22949
+
22964
22950
  @fragment
22965
- fn FragMain(@location(auto) vColor: vec4f, @location(auto) vTexCoord: vec2f) -> FragmentOutput {
22966
- let result = evalSplat(vTexCoord, vColor);
22967
-
22951
+ fn FragMain(
22952
+ @location(0) vColor: vec4<f32>,
22953
+ @location(1) vTexCoord: vec2<f32>
22954
+ ) -> FragmentOutput {
22968
22955
  var o: FragmentOutput;
22969
- o.color = result;
22970
- o.gBuffer = vec4f(0.0);
22956
+ o.color = evalSplat(vTexCoord, vColor);
22971
22957
  return o;
22972
22958
  }
22973
22959
  `
@@ -23192,9 +23178,9 @@ let GSplatShader = class extends Shader {
23192
23178
  const pass = new RenderShaderPass("gsplat_vs_dc", "gsplat_fs_dc");
23193
23179
  pass.passType = PassType.COLOR;
23194
23180
  pass.setShaderEntry("VertMain", "FragMain");
23195
- pass.topology = GPUPrimitiveTopology.triangle_strip;
23181
+ pass.topology = GPUPrimitiveTopology.triangle_list;
23196
23182
  pass.depthWriteEnabled = false;
23197
- pass.cullMode = "none";
23183
+ pass.cullMode = GPUCullMode.none;
23198
23184
  pass.shaderState.transparent = true;
23199
23185
  pass.shaderState.blendMode = BlendMode.NORMAL;
23200
23186
  pass.shaderState.writeMasks = [15, 15];
@@ -23216,6 +23202,7 @@ GSplatShader = __decorateClass$k([
23216
23202
  ], GSplatShader);
23217
23203
 
23218
23204
  class GSplatMaterial extends Material {
23205
+ _pixelCullArray = new Float32Array(4);
23219
23206
  constructor() {
23220
23207
  super();
23221
23208
  ShaderLib.register("gsplat_vs_dc", GSplat_VS);
@@ -23231,6 +23218,7 @@ class GSplatMaterial extends Material {
23231
23218
  if (splatOrder) {
23232
23219
  pass.setTexture("splatOrder", splatOrder);
23233
23220
  }
23221
+ pass.shaderState.depthCompare = GPUCompareFunction.less;
23234
23222
  }
23235
23223
  /**
23236
23224
  * Set the model matrix for transforming splats to world space
@@ -23245,9 +23233,13 @@ class GSplatMaterial extends Material {
23245
23233
  * @param maxPixels Maximum pixel coverage (cull oversized splats), default: 0 (disabled)
23246
23234
  * @param maxPixelCullDistance Only cull oversized splats within this distance, 0 = always cull
23247
23235
  */
23248
- setPixelCulling(minPixels, maxPixels, maxPixelCullDistance = 0) {
23236
+ setPixelCulling(minPixels, maxPixels, maxPixelCullDistance = 0, batchSize = 128) {
23237
+ this._pixelCullArray[0] = minPixels;
23238
+ this._pixelCullArray[1] = maxPixels;
23239
+ this._pixelCullArray[2] = maxPixelCullDistance;
23240
+ this._pixelCullArray[3] = batchSize;
23249
23241
  const pass = this.shader.getDefaultColorShader();
23250
- pass.setUniform("pixelCull", new Float32Array([minPixels, maxPixels, maxPixelCullDistance, 0]));
23242
+ pass.setUniform("pixelCull", this._pixelCullArray);
23251
23243
  }
23252
23244
  }
23253
23245
 
@@ -23905,108 +23897,47 @@ class GeometryBase {
23905
23897
  }
23906
23898
  }
23907
23899
 
23908
- class PlaneGeometry extends GeometryBase {
23909
- width;
23910
- height;
23911
- segmentW;
23912
- segmentH;
23913
- up;
23914
- constructor(width, height, segmentW = 1, segmentH = 1, up = Vector3.Y_AXIS) {
23900
+ class GSplatGeometry extends GeometryBase {
23901
+ batchSize;
23902
+ constructor(batchSize = 128) {
23915
23903
  super();
23916
- this.width = width;
23917
- this.height = height;
23918
- this.segmentW = segmentW;
23919
- this.segmentH = segmentH;
23920
- this.up = up;
23921
- this.buildGeometry(this.up);
23922
- }
23923
- buildGeometry(axis) {
23924
- var x, y;
23925
- var numIndices;
23926
- var base;
23927
- var tw = this.segmentW + 1;
23928
- (this.segmentH + 1) * tw;
23929
- this.bounds = new BoundingBox(
23930
- Vector3.ZERO.clone(),
23931
- new Vector3(this.width, 1, this.height)
23932
- );
23933
- numIndices = this.segmentH * this.segmentW * 6;
23934
- let vertexCount = (this.segmentW + 1) * (this.segmentH + 1);
23935
- let position_arr = new Float32Array(vertexCount * 3);
23936
- let normal_arr = new Float32Array(vertexCount * 3);
23937
- let uv_arr = new Float32Array(vertexCount * 2);
23938
- let indices_arr;
23939
- let totalIndexCount = this.segmentW * this.segmentH * 2 * 3;
23940
- if (totalIndexCount >= Uint16Array.length) {
23941
- indices_arr = new Uint32Array(this.segmentW * this.segmentH * 2 * 3);
23942
- } else {
23943
- indices_arr = new Uint16Array(this.segmentW * this.segmentH * 2 * 3);
23944
- }
23945
- numIndices = 0;
23946
- var indexP = 0;
23947
- var indexN = 0;
23948
- var indexU = 0;
23949
- for (var yi = 0; yi <= this.segmentH; ++yi) {
23950
- for (var xi = 0; xi <= this.segmentW; ++xi) {
23951
- x = (xi / this.segmentW - 0.5) * this.width;
23952
- y = (yi / this.segmentH - 0.5) * this.height;
23953
- switch (axis) {
23954
- case Vector3.Y_AXIS:
23955
- position_arr[indexP++] = x;
23956
- position_arr[indexP++] = 0;
23957
- position_arr[indexP++] = y;
23958
- normal_arr[indexN++] = 0;
23959
- normal_arr[indexN++] = 1;
23960
- normal_arr[indexN++] = 0;
23961
- break;
23962
- case Vector3.Z_AXIS:
23963
- position_arr[indexP++] = x;
23964
- position_arr[indexP++] = -y;
23965
- position_arr[indexP++] = 0;
23966
- normal_arr[indexN++] = 0;
23967
- normal_arr[indexN++] = 0;
23968
- normal_arr[indexN++] = 1;
23969
- break;
23970
- case Vector3.X_AXIS:
23971
- position_arr[indexP++] = 0;
23972
- position_arr[indexP++] = x;
23973
- position_arr[indexP++] = y;
23974
- normal_arr[indexN++] = 1;
23975
- normal_arr[indexN++] = 0;
23976
- normal_arr[indexN++] = 0;
23977
- break;
23978
- default:
23979
- position_arr[indexP++] = x;
23980
- position_arr[indexP++] = 0;
23981
- position_arr[indexP++] = y;
23982
- normal_arr[indexN++] = 0;
23983
- normal_arr[indexN++] = 1;
23984
- normal_arr[indexN++] = 0;
23985
- break;
23986
- }
23987
- uv_arr[indexU++] = xi / this.segmentW;
23988
- uv_arr[indexU++] = yi / this.segmentH;
23989
- if (xi != this.segmentW && yi != this.segmentH) {
23990
- base = xi + yi * tw;
23991
- indices_arr[numIndices++] = base + 1;
23992
- indices_arr[numIndices++] = base;
23993
- indices_arr[numIndices++] = base + tw;
23994
- indices_arr[numIndices++] = base + 1;
23995
- indices_arr[numIndices++] = base + tw;
23996
- indices_arr[numIndices++] = base + tw + 1;
23997
- }
23998
- }
23999
- }
24000
- this.setIndices(indices_arr);
24001
- this.setAttribute(VertexAttributeName.position, position_arr);
24002
- this.setAttribute(VertexAttributeName.normal, normal_arr);
24003
- this.setAttribute(VertexAttributeName.uv, uv_arr);
24004
- this.setAttribute(VertexAttributeName.TEXCOORD_1, uv_arr);
23904
+ this.batchSize = batchSize;
23905
+ const meshPositions = new Float32Array(12 * batchSize);
23906
+ for (let i = 0; i < batchSize; ++i) {
23907
+ meshPositions.set([
23908
+ -2,
23909
+ -2,
23910
+ i,
23911
+ 2,
23912
+ -2,
23913
+ i,
23914
+ 2,
23915
+ 2,
23916
+ i,
23917
+ -2,
23918
+ 2,
23919
+ i
23920
+ ], i * 12);
23921
+ }
23922
+ const meshIndices = new Uint32Array(6 * batchSize);
23923
+ for (let i = 0; i < batchSize; ++i) {
23924
+ const b = i * 4;
23925
+ meshIndices.set([
23926
+ 0 + b,
23927
+ 1 + b,
23928
+ 2 + b,
23929
+ 0 + b,
23930
+ 2 + b,
23931
+ 3 + b
23932
+ ], i * 6);
23933
+ }
23934
+ this.setAttribute(VertexAttributeName.position, meshPositions);
23935
+ this.setIndices(meshIndices);
24005
23936
  this.addSubGeometry({
24006
23937
  indexStart: 0,
24007
- indexCount: indices_arr.length,
23938
+ indexCount: meshIndices.length,
24008
23939
  vertexStart: 0,
24009
- vertexCount: 0,
23940
+ vertexCount: meshPositions.length / 3,
24010
23941
  firstStart: 0,
24011
23942
  index: 0,
24012
23943
  topology: 0
@@ -24110,18 +24041,49 @@ class Uint32ArrayTexture extends Texture {
24110
24041
  updateTexture(width, height, data) {
24111
24042
  let device = webGPUContext.device;
24112
24043
  const bytesPerRow = width * 4 * 4;
24113
- const staging = device.createBuffer({
24044
+ device.queue.writeTexture(
24045
+ { texture: this.getGPUTexture() },
24046
+ data.buffer,
24047
+ { bytesPerRow },
24048
+ { width, height, depthOrArrayLayers: 1 }
24049
+ );
24050
+ }
24051
+ }
24052
+
24053
+ class R32UintTexture extends Texture {
24054
+ _dataBuffer;
24055
+ create(width, height, data) {
24056
+ let device = webGPUContext.device;
24057
+ const bytesPerRow = width * 4;
24058
+ this.format = GPUTextureFormat.r32uint;
24059
+ const mipmapCount = 1;
24060
+ this.createTextureDescriptor(width, height, mipmapCount, this.format);
24061
+ const textureDataBuffer = this._dataBuffer = device.createBuffer({
24114
24062
  size: data.byteLength,
24115
24063
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC
24116
24064
  });
24117
- device.queue.writeBuffer(staging, 0, data.buffer);
24065
+ device.queue.writeBuffer(textureDataBuffer, 0, data.buffer);
24118
24066
  const encoder = device.createCommandEncoder();
24119
24067
  encoder.copyBufferToTexture(
24120
- { buffer: staging, bytesPerRow },
24068
+ { buffer: textureDataBuffer, bytesPerRow },
24121
24069
  { texture: this.getGPUTexture() },
24122
24070
  { width, height, depthOrArrayLayers: 1 }
24123
24071
  );
24124
24072
  device.queue.submit([encoder.finish()]);
24073
+ this.samplerBindingLayout.type = `non-filtering`;
24074
+ this.textureBindingLayout.sampleType = `uint`;
24075
+ this.gpuSampler = device.createSampler({});
24076
+ return this;
24077
+ }
24078
+ updateTexture(width, height, data) {
24079
+ let device = webGPUContext.device;
24080
+ const bytesPerRow = width * 4;
24081
+ device.queue.writeTexture(
24082
+ { texture: this.getGPUTexture() },
24083
+ data.buffer,
24084
+ { bytesPerRow },
24085
+ { width, height, depthOrArrayLayers: 1 }
24086
+ );
24125
24087
  }
24126
24088
  }
24127
24089
 
@@ -24263,14 +24225,15 @@ let GSplatRenderer = class extends RenderNode {
24263
24225
  // Web Worker for sorting
24264
24226
  _sortWorker;
24265
24227
  _lastSentTime = 0;
24266
- _minIntervalMs = 0;
24267
- // No throttle for immediate sorting
24228
+ _minIntervalMs = 16;
24268
24229
  _centersSent = false;
24269
24230
  _lastViewMatrixHash = 0;
24270
24231
  // Adaptive sorting optimization
24271
24232
  _lastCameraSpeed = 0;
24272
24233
  _adaptiveSorting = true;
24273
24234
  // Enable adaptive sorting by default
24235
+ _lastPixelCullParams = "";
24236
+ _texturesInitialized = false;
24274
24237
  // LOD (Level of Detail) system
24275
24238
  _lodEnabled = false;
24276
24239
  _lodDistances = [5, 10, 20, 40];
@@ -24292,6 +24255,11 @@ let GSplatRenderer = class extends RenderNode {
24292
24255
  get fullCount() {
24293
24256
  return this._fullCount;
24294
24257
  }
24258
+ // Batched rendering
24259
+ _batchSize = 128;
24260
+ // Splats per draw call
24261
+ instanceCount = 0;
24262
+ // For InstanceDrawComponent compatibility
24295
24263
  constructor() {
24296
24264
  super();
24297
24265
  }
@@ -24307,24 +24275,20 @@ let GSplatRenderer = class extends RenderNode {
24307
24275
  this.texParams = new Float32Array([this.count, this.size.x, this.count, 1]);
24308
24276
  this._positions = asset.position;
24309
24277
  const total = this.size.x * this.size.y;
24310
- this._orderData = new Uint32Array(total * 4);
24278
+ this._orderData = new Uint32Array(total);
24311
24279
  for (let i = 0; i < total; i++) {
24312
- const src = i < this.count ? i : this.count > 0 ? this.count - 1 : 0;
24313
- const base = i * 4;
24314
- this._orderData[base + 0] = src;
24315
- this._orderData[base + 1] = 0;
24316
- this._orderData[base + 2] = 0;
24317
- this._orderData[base + 3] = 0;
24318
- }
24319
- this.splatOrder = new Uint32ArrayTexture().create(this.size.x, this.size.y, this._orderData);
24280
+ this._orderData[i] = i < this.count ? i : this.count > 0 ? this.count - 1 : 0;
24281
+ }
24282
+ this.splatOrder = new R32UintTexture().create(this.size.x, this.size.y, this._orderData);
24320
24283
  this.splatOrder.name = "splatOrder";
24321
24284
  this.splatOrder.minFilter = "nearest";
24322
24285
  this.splatOrder.magFilter = "nearest";
24323
24286
  this.splatOrder.addressModeU = "clamp-to-edge";
24324
24287
  this.splatOrder.addressModeV = "clamp-to-edge";
24325
24288
  this.gsplatMaterial = new GSplatMaterial();
24326
- this.geometry = new PlaneGeometry(1, 1, 1, 1);
24289
+ this.geometry = new GSplatGeometry(this._batchSize);
24327
24290
  this.materials = [this.gsplatMaterial];
24291
+ this.instanceCount = 0;
24328
24292
  }
24329
24293
  /**
24330
24294
  * Update splat sorting before rendering
@@ -24401,12 +24365,7 @@ let GSplatRenderer = class extends RenderNode {
24401
24365
  this.texParams[2] = Math.min(this.texParams[0], this.count);
24402
24366
  const total = this.size.x * this.size.y;
24403
24367
  for (let i = 0; i < total; i++) {
24404
- const src = i < this.count ? i : this.count > 0 ? this.count - 1 : 0;
24405
- const base = i * 4;
24406
- this._orderData[base + 0] = src;
24407
- this._orderData[base + 1] = 0;
24408
- this._orderData[base + 2] = 0;
24409
- this._orderData[base + 3] = 0;
24368
+ this._orderData[i] = i < this.count ? i : this.count > 0 ? this.count - 1 : 0;
24410
24369
  }
24411
24370
  this.splatOrder.updateTexture(this.size.x, this.size.y, this._orderData);
24412
24371
  if (this._sortWorker) {
@@ -24433,6 +24392,7 @@ let GSplatRenderer = class extends RenderNode {
24433
24392
  } else {
24434
24393
  this._centersSent = false;
24435
24394
  }
24395
+ this.instanceCount = 0;
24436
24396
  }
24437
24397
  /**
24438
24398
  * Set visibility boost factor (material uniform tex_params.w)
@@ -24496,6 +24456,18 @@ let GSplatRenderer = class extends RenderNode {
24496
24456
  distanceEnabled: this._maxPixelCullDistance > 0
24497
24457
  };
24498
24458
  }
24459
+ /**
24460
+ * Get batching statistics
24461
+ */
24462
+ getBatchingStats() {
24463
+ return {
24464
+ enabled: true,
24465
+ batchSize: this._batchSize,
24466
+ instanceCount: this.instanceCount,
24467
+ splatCount: this.count,
24468
+ reduction: this.count > 0 ? (1 - this.instanceCount / this.count) * 100 : 0
24469
+ };
24470
+ }
24499
24471
  /**
24500
24472
  * Calculate texture size for given splat count
24501
24473
  */
@@ -24718,18 +24690,20 @@ let GSplatRenderer = class extends RenderNode {
24718
24690
  const indices = new Uint32Array(newOrder);
24719
24691
  const total = this.size.x * this.size.y;
24720
24692
  const count = this.count;
24721
- this._orderData = new Uint32Array(total * 4);
24722
- for (let i = 0; i < total; i++) {
24723
- const src = i < count ? indices[i] : count > 0 ? count - 1 : 0;
24724
- const base = i * 4;
24725
- this._orderData[base + 0] = src;
24726
- this._orderData[base + 1] = 0;
24727
- this._orderData[base + 2] = 0;
24728
- this._orderData[base + 3] = 0;
24693
+ if (!this._orderData || this._orderData.length !== total) {
24694
+ this._orderData = new Uint32Array(total);
24695
+ }
24696
+ const validCount = Math.min(count, indices.length);
24697
+ this._orderData.set(indices.subarray(0, validCount), 0);
24698
+ if (validCount < total) {
24699
+ const lastIndex = count > 0 ? count - 1 : 0;
24700
+ this._orderData.fill(lastIndex, validCount, total);
24729
24701
  }
24730
24702
  this.splatOrder.updateTexture(this.size.x, this.size.y, this._orderData);
24731
24703
  const valid = Math.max(0, Math.min(this.count, ev.data.count | 0));
24732
24704
  this.texParams[2] = valid;
24705
+ const newInstanceCount = Math.ceil(valid / this._batchSize);
24706
+ this.instanceCount = newInstanceCount;
24733
24707
  };
24734
24708
  const worldPos = this._worldPositions || this._positions;
24735
24709
  const centers = this._mapping ? new Float32Array(this._mapping.length * 3) : new Float32Array(worldPos);
@@ -24932,30 +24906,22 @@ let GSplatRenderer = class extends RenderNode {
24932
24906
  nodeUpdate(view, passType, renderPassState, clusterLightingBuffer) {
24933
24907
  const worldMatrix = this.object3D.transform.worldMatrix;
24934
24908
  this.gsplatMaterial.setTransformMatrix(worldMatrix);
24935
- this.gsplatMaterial.setPixelCulling(this._minPixelCoverage, this._maxPixelCoverage, this._maxPixelCullDistance);
24936
- this.gsplatMaterial.setSplatTextures(
24937
- this.splatColor,
24938
- this.transformA,
24939
- this.transformB,
24940
- this.texParams,
24941
- this.splatOrder
24942
- );
24943
- super.nodeUpdate(view, passType, renderPassState, clusterLightingBuffer);
24944
- }
24945
- /**
24946
- * Render pass
24947
- */
24948
- renderPass2(view, passType, rendererPassState, clusterLightingBuffer, encoder, useBundle = false) {
24949
- for (let mat of this.materials) {
24950
- const passes = mat.getPass(passType);
24951
- if (!passes || passes.length === 0) continue;
24952
- for (const pass of passes) {
24953
- if (!pass.pipeline) continue;
24954
- pass.apply(this.geometry, rendererPassState);
24955
- GPUContext.bindPipeline(encoder, pass);
24956
- GPUContext.draw(encoder, 4, this.count, 0, 0);
24957
- }
24909
+ const currentParams = `${this._minPixelCoverage},${this._maxPixelCoverage},${this._maxPixelCullDistance},${this._batchSize}`;
24910
+ if (currentParams !== this._lastPixelCullParams) {
24911
+ this.gsplatMaterial.setPixelCulling(this._minPixelCoverage, this._maxPixelCoverage, this._maxPixelCullDistance, this._batchSize);
24912
+ this._lastPixelCullParams = currentParams;
24913
+ }
24914
+ if (!this._texturesInitialized) {
24915
+ this.gsplatMaterial.setSplatTextures(
24916
+ this.splatColor,
24917
+ this.transformA,
24918
+ this.transformB,
24919
+ this.texParams,
24920
+ this.splatOrder
24921
+ );
24922
+ this._texturesInitialized = true;
24958
24923
  }
24924
+ super.nodeUpdate(view, passType, renderPassState, clusterLightingBuffer);
24959
24925
  }
24960
24926
  /**
24961
24927
  * Render pass (fallback)
@@ -24969,7 +24935,28 @@ let GSplatRenderer = class extends RenderNode {
24969
24935
  if (!pass.pipeline) continue;
24970
24936
  pass.apply(this.geometry, renderContext.rendererPassState || renderContext);
24971
24937
  GPUContext.bindPipeline(encoder, pass);
24972
- GPUContext.draw(encoder, 4, this.count, 0, 0);
24938
+ GPUContext.bindGeometryBuffer(encoder, this.geometry);
24939
+ const subGeometry = this.geometry.subGeometries[0];
24940
+ const lodInfo = subGeometry.lodLevels[0];
24941
+ if (this.instanceCount > 0) {
24942
+ GPUContext.drawIndexed(
24943
+ encoder,
24944
+ lodInfo.indexCount,
24945
+ this.instanceCount,
24946
+ lodInfo.indexStart,
24947
+ 0,
24948
+ 0
24949
+ );
24950
+ } else {
24951
+ GPUContext.drawIndexed(
24952
+ encoder,
24953
+ lodInfo.indexCount,
24954
+ 1,
24955
+ lodInfo.indexStart,
24956
+ 0,
24957
+ 0
24958
+ );
24959
+ }
24973
24960
  }
24974
24961
  }
24975
24962
  }
@@ -27505,6 +27492,115 @@ class WebGPUDescriptorCreator {
27505
27492
  }
27506
27493
  }
27507
27494
 
27495
+ class PlaneGeometry extends GeometryBase {
27496
+ width;
27497
+ height;
27498
+ segmentW;
27499
+ segmentH;
27500
+ up;
27501
+ constructor(width, height, segmentW = 1, segmentH = 1, up = Vector3.Y_AXIS) {
27502
+ super();
27503
+ this.width = width;
27504
+ this.height = height;
27505
+ this.segmentW = segmentW;
27506
+ this.segmentH = segmentH;
27507
+ this.up = up;
27508
+ this.buildGeometry(this.up);
27509
+ }
27510
+ buildGeometry(axis) {
27511
+ var x, y;
27512
+ var numIndices;
27513
+ var base;
27514
+ var tw = this.segmentW + 1;
27515
+ (this.segmentH + 1) * tw;
27516
+ this.bounds = new BoundingBox(
27517
+ Vector3.ZERO.clone(),
27518
+ new Vector3(this.width, 1, this.height)
27519
+ );
27520
+ numIndices = this.segmentH * this.segmentW * 6;
27521
+ let vertexCount = (this.segmentW + 1) * (this.segmentH + 1);
27522
+ let position_arr = new Float32Array(vertexCount * 3);
27523
+ let normal_arr = new Float32Array(vertexCount * 3);
27524
+ let uv_arr = new Float32Array(vertexCount * 2);
27525
+ let indices_arr;
27526
+ let totalIndexCount = this.segmentW * this.segmentH * 2 * 3;
27527
+ if (totalIndexCount >= Uint16Array.length) {
27528
+ indices_arr = new Uint32Array(this.segmentW * this.segmentH * 2 * 3);
27529
+ } else {
27530
+ indices_arr = new Uint16Array(this.segmentW * this.segmentH * 2 * 3);
27531
+ }
27532
+ numIndices = 0;
27533
+ var indexP = 0;
27534
+ var indexN = 0;
27535
+ var indexU = 0;
27536
+ for (var yi = 0; yi <= this.segmentH; ++yi) {
27537
+ for (var xi = 0; xi <= this.segmentW; ++xi) {
27538
+ x = (xi / this.segmentW - 0.5) * this.width;
27539
+ y = (yi / this.segmentH - 0.5) * this.height;
27540
+ switch (axis) {
27541
+ case Vector3.Y_AXIS:
27542
+ position_arr[indexP++] = x;
27543
+ position_arr[indexP++] = 0;
27544
+ position_arr[indexP++] = y;
27545
+ normal_arr[indexN++] = 0;
27546
+ normal_arr[indexN++] = 1;
27547
+ normal_arr[indexN++] = 0;
27548
+ break;
27549
+ case Vector3.Z_AXIS:
27550
+ position_arr[indexP++] = x;
27551
+ position_arr[indexP++] = -y;
27552
+ position_arr[indexP++] = 0;
27553
+ normal_arr[indexN++] = 0;
27554
+ normal_arr[indexN++] = 0;
27555
+ normal_arr[indexN++] = 1;
27556
+ break;
27557
+ case Vector3.X_AXIS:
27558
+ position_arr[indexP++] = 0;
27559
+ position_arr[indexP++] = x;
27560
+ position_arr[indexP++] = y;
27561
+ normal_arr[indexN++] = 1;
27562
+ normal_arr[indexN++] = 0;
27563
+ normal_arr[indexN++] = 0;
27564
+ break;
27565
+ default:
27566
+ position_arr[indexP++] = x;
27567
+ position_arr[indexP++] = 0;
27568
+ position_arr[indexP++] = y;
27569
+ normal_arr[indexN++] = 0;
27570
+ normal_arr[indexN++] = 1;
27571
+ normal_arr[indexN++] = 0;
27572
+ break;
27573
+ }
27574
+ uv_arr[indexU++] = xi / this.segmentW;
27575
+ uv_arr[indexU++] = yi / this.segmentH;
27576
+ if (xi != this.segmentW && yi != this.segmentH) {
27577
+ base = xi + yi * tw;
27578
+ indices_arr[numIndices++] = base + 1;
27579
+ indices_arr[numIndices++] = base;
27580
+ indices_arr[numIndices++] = base + tw;
27581
+ indices_arr[numIndices++] = base + 1;
27582
+ indices_arr[numIndices++] = base + tw;
27583
+ indices_arr[numIndices++] = base + tw + 1;
27584
+ }
27585
+ }
27586
+ }
27587
+ this.setIndices(indices_arr);
27588
+ this.setAttribute(VertexAttributeName.position, position_arr);
27589
+ this.setAttribute(VertexAttributeName.normal, normal_arr);
27590
+ this.setAttribute(VertexAttributeName.uv, uv_arr);
27591
+ this.setAttribute(VertexAttributeName.TEXCOORD_1, uv_arr);
27592
+ this.addSubGeometry({
27593
+ indexStart: 0,
27594
+ indexCount: indices_arr.length,
27595
+ vertexStart: 0,
27596
+ vertexCount: 0,
27597
+ firstStart: 0,
27598
+ index: 0,
27599
+ topology: 0
27600
+ });
27601
+ }
27602
+ }
27603
+
27508
27604
  var __getOwnPropDesc$g = Object.getOwnPropertyDescriptor;
27509
27605
  var __decorateClass$g = (decorators, target, key, kind) => {
27510
27606
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$g(target, key) : target;
@@ -30479,7 +30575,15 @@ class RendererJob {
30479
30575
  shadowMapPassRenderer;
30480
30576
  pointLightShadowRenderer;
30481
30577
  ddgiProbeRenderer;
30482
- postRenderer;
30578
+ _postRenderer;
30579
+ get postRenderer() {
30580
+ if (!this._postRenderer) {
30581
+ let gbufferFrame = GBufferFrame.getGBufferFrame("ColorPassGBuffer");
30582
+ this._postRenderer = this.addRenderer(PostRenderer);
30583
+ this._postRenderer.setRenderStates(gbufferFrame);
30584
+ }
30585
+ return this._postRenderer;
30586
+ }
30483
30587
  clusterLightingRender;
30484
30588
  reflectionRenderer;
30485
30589
  occlusionSystem;
@@ -30503,7 +30607,9 @@ class RendererJob {
30503
30607
  }
30504
30608
  this.shadowMapPassRenderer = new ShadowMapPassRenderer();
30505
30609
  this.pointLightShadowRenderer = new PointLightShadowRenderer();
30506
- this.addPost(new FXAAPost());
30610
+ if (Engine3D.setting.render.postProcessing.fxaa.enable) {
30611
+ this.addPost(new FXAAPost());
30612
+ }
30507
30613
  }
30508
30614
  addRenderer(c, param) {
30509
30615
  let renderer;
@@ -30533,11 +30639,6 @@ class RendererJob {
30533
30639
  this.pauseRender = false;
30534
30640
  }
30535
30641
  addPost(post) {
30536
- if (!this.postRenderer) {
30537
- let gbufferFrame = GBufferFrame.getGBufferFrame("ColorPassGBuffer");
30538
- this.postRenderer = this.addRenderer(PostRenderer);
30539
- this.postRenderer.setRenderStates(gbufferFrame);
30540
- }
30541
30642
  if (post instanceof PostBase) {
30542
30643
  this.postRenderer.attachPost(this.view, post);
30543
30644
  }
@@ -30555,15 +30656,21 @@ class RendererJob {
30555
30656
  renderFrame() {
30556
30657
  let view = this._view;
30557
30658
  ProfilerUtil.startView(view);
30558
- GlobalBindGroup.getLightEntries(view.scene).update(view);
30559
- GlobalBindGroup.getReflectionEntries(view.scene).update(view);
30560
- this.occlusionSystem.update(view.camera, view.scene);
30561
- this.clusterLightingRender.render(view, this.occlusionSystem);
30562
- if (this.shadowMapPassRenderer) {
30659
+ if (this.clusterLightingRender) {
30660
+ GlobalBindGroup.getLightEntries(view.scene).update(view);
30661
+ GlobalBindGroup.getReflectionEntries(view.scene).update(view);
30662
+ }
30663
+ if (Engine3D.setting.occlusionQuery.enable && this.occlusionSystem) {
30664
+ this.occlusionSystem.update(view.camera, view.scene);
30665
+ }
30666
+ if (this.clusterLightingRender) {
30667
+ this.clusterLightingRender.render(view, this.occlusionSystem);
30668
+ }
30669
+ if (Engine3D.setting.shadow.enable && this.shadowMapPassRenderer) {
30563
30670
  ShadowLightsCollect.update(view);
30564
30671
  this.shadowMapPassRenderer.render(view, this.occlusionSystem);
30565
30672
  }
30566
- if (this.pointLightShadowRenderer) {
30673
+ if (Engine3D.setting.shadow.enable && this.pointLightShadowRenderer) {
30567
30674
  this.pointLightShadowRenderer.render(view, this.occlusionSystem);
30568
30675
  }
30569
30676
  if (this.depthPassRenderer) {
@@ -40784,7 +40891,7 @@ class PostProcessingComponent extends ComponentBase {
40784
40891
  }
40785
40892
  }
40786
40893
 
40787
- const version = "1.0.12";
40894
+ const version = "1.0.13";
40788
40895
 
40789
40896
  class Engine3D {
40790
40897
  /**
@@ -66370,4 +66477,4 @@ const __viteBrowserExternal = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.def
66370
66477
  __proto__: null
66371
66478
  }, Symbol.toStringTag, { value: 'Module' }));
66372
66479
 
66373
- export { AccelerateDecelerateInterpolator, AccelerateInterpolator, AnimationCurve, AnimationCurveT, AnimationMonitor, AnimatorComponent, AnimatorEventKeyframe, AnticipateInterpolator, AnticipateOvershootInterpolator, ArrayHas, ArrayItemIndex, AtlasParser, AtmosphericComponent, AtmosphericScatteringSky, AtmosphericScatteringSkySetting, AtmosphericScatteringSky_shader, AttributeAnimCurve, AxisObject, B3DMLoader, B3DMLoaderBase, B3DMParseUtil, B3DMParser, BRDFLUT, BRDFLUTGenerate, BRDF_frag, BatchTable, BiMap, BillboardComponent, BillboardType, BitUtil, BitmapTexture2D, BitmapTexture2DArray, BitmapTextureCube, Blend, BlendFactor, BlendMode, BlendShapeData, BlendShapePropertyData, BloomPost, BlurEffectCreatorBlur_cs, BlurEffectCreatorSample_cs, BlurTexture2DBufferCreator, BounceInterpolator, BoundUtil, BoundingBox, BoundingSphere, BoxColliderShape, BoxGeometry, BrdfLut_frag, BsDF_frag, BxDF_frag, BxdfDebug_frag, BytesArray, CEvent, CEventDispatcher, CEventListener, CResizeEvent, CSM, Camera3D, CameraControllerBase, CameraType, CameraUtil, CapsuleColliderShape, CastPointShadowMaterialPass, CastShadowMaterialPass, Clearcoat_frag, ClusterBoundsSource_cs, ClusterConfig, ClusterDebug_frag, ClusterLight, ClusterLightingBuffer, ClusterLightingRender, ClusterLighting_cs, CollectInfo, ColliderComponent, ColliderShape, ColliderShapeType, Color, ColorGradient, ColorLitMaterial, ColorLitShader, ColorPassFragmentOutput, ColorPassRenderer, ColorUtil, ComData, Combine_cs, Common_frag, Common_vert, ComponentBase, ComponentCollect, ComputeGPUBuffer, ComputeShader, Context3D, CubeCamera, CubeMapFaceEnum, CubeSky_Shader, CubicBezierCurve, CubicBezierPath, CubicBezierType, CycleInterpolator, CylinderGeometry, DDGIIrradianceComputePass, DDGIIrradianceGPUBufferReader, DDGIIrradianceVolume, DDGIIrradiance_shader, DDGILightingPass, DDGILighting_shader, DDGIMultiBouncePass, DDGIProbeRenderer, DEGREES_TO_RADIANS, DecelerateInterpolator, Denoising_cs, Depth2DTextureArray, DepthCubeArrayTexture, DepthMaterialPass, DepthOfFieldPost, DepthOfView_cs, DirectLight, DoubleArray, EditorInspector, Engine3D, Entity, EntityBatchCollect, EntityCollect, EnvMap_frag, ErpImage2CubeMap, ErpImage2CubeMapCreateCube_cs, ErpImage2CubeMapRgbe2rgba_cs, ExtrudeGeometry, FASTFLOOR, FXAAPost, FXAAShader, FastMathShader, FatLineGeometry, FatLineMaterial, FatLineRenderer, FatLineShader, FatLine_FS, FatLine_VS, FeatureTable, FileLoader, FirstPersonCameraController, Float16ArrayTexture, Float32ArrayTexture, FlyCameraController, FontChar, FontInfo, FontPage, FontParser, ForwardRenderJob, FragmentOutput, FragmentVarying, FrameCache, Frustum, FrustumCSM, FrustumCulling_cs, FullQuad_vert_wgsl, GBufferFrame, GBufferPass, GBufferPost, GBufferStand, GBuffer_pass, GILighting, GIProbeMaterial, GIProbeMaterialType, GIProbeShader, GIRenderCompleteEvent, GIRenderStartEvent, GLBChunk, GLBHeader, GLBParser, GLSLLexer, GLSLLexerToken, GLSLPreprocessor, GLSLSyntax, GLTFBinaryExtension, GLTFMaterial, GLTFParser, GLTFSubParser, GLTFSubParserCamera, GLTFSubParserConverter, GLTFSubParserMaterial, GLTFSubParserMesh, GLTFSubParserSkeleton, GLTFSubParserSkin, GLTFType, GLTF_Accessors, GLTF_Info, GLTF_Light, GLTF_Mesh, GLTF_Node, GLTF_Primitives, GLTF_Scene, GPUAddressMode, GPUBlendFactor, GPUBufferBase, GPUBufferType, GPUCompareFunction, GPUContext, GPUCullMode, GPUFilterMode, GPUPrimitiveTopology, GPUTextureFormat, GPUVertexFormat, GPUVertexStepMode, GSplatFormat, GSplatMaterial, GSplatRenderer, GSplatShader, GSplat_FS, GSplat_VS, GTAOPost, GTAO_cs, GUIAtlasTexture, GUICanvas, GUIConfig, GUIGeometry, GUIGeometryRebuild, GUIMaterial, GUIPassRenderer, GUIPick, GUIPickHelper, GUIQuad, GUIQuadAttrEnum, GUIRenderer, GUIShader, GUISpace, GUISprite, GUITexture, GaussianSplatParser, GenerayRandomDir, GeoJsonParser, GeoJsonUtil, GeoType, GeometryBase, GeometryIndicesBuffer, GeometryUtil, GeometryVertexBuffer, GeometryVertexType, GetComponentClass, GetCountInstanceID, GetRepeat, GetShader, GlassShader, GlobalBindGroup, GlobalBindGroupLayout, GlobalFog, GlobalFog_shader, GlobalIlluminationComponent, GlobalUniform, GlobalUniformGroup, GodRayPost, GodRay_cs, GridObject, HDRTexture, HDRTextureCube, Hair_frag, Hair_shader_op, Hair_shader_tr, HaltonSeq, Horizontal, HoverCameraController, I3DMLoader, I3DMLoaderBase, I3DMParser, IBLEnvMapCreator, IBLEnvMapCreator_cs, IESProfiles, IESProfiles_frag, IKDTreeUserData, ImageType, IndicesGPUBuffer, Inline_vert, InputSystem, InstanceDrawComponent, InstanceUniform, InstancedMesh, Interpolator, InterpolatorEnum, IrradianceDataReaderCompleteEvent, IrradianceVolumeData_frag, Irradiance_frag, IsEditorInspector, IsNonSerialize, Joint, JointPose, JumperInterpolator, KDTreeEntity, KDTreeNode, KDTreeRange, KDTreeSpace, KDTreeUUID, KHR_draco_mesh_compression, KHR_lights_punctual, KHR_materials_clearcoat, KHR_materials_emissive_strength, KHR_materials_ior, KHR_materials_unlit, KMZParser, KV, KelvinUtil, KeyCode, KeyEvent, Keyframe, KeyframeT, LDRTextureCube, LambertMaterial, Lambert_shader, Light, LightBase, LightData, LightEntries, LightType, LightingFunction_frag, Line, LineClassification, LinearInterpolator, LitMaterial, LitSSSShader, LitShader, Lit_shader, LoaderBase, LoaderEvent, LoaderManager, MAX_VALUE, MIN_VALUE, Material, MaterialDataUniformGPUBuffer, MaterialUtilities, MathShader, MathUtil, Matrix3, Matrix4, MatrixBindGroup, MatrixGPUBuffer, MatrixShader, MemoryDO, MemoryInfo, MergeRGBACreator, MergeRGBA_cs, MeshColliderShape, MeshFilter, MeshRenderer, MinMaxAnimationCurves, MinMaxCurve, MinMaxCurveState, MinMaxPolyCurves, MorePassParser, MorePassShader, MorphTargetBlender, MorphTargetData, MorphTargetFrame, MorphTargetTransformKey, MorphTarget_shader, MouseCode, MultiBouncePass_cs, Navi3DAstar, Navi3DConst, Navi3DEdge, Navi3DFunnel, Navi3DMaskType, Navi3DMesh, Navi3DPoint, Navi3DPoint2D, Navi3DPointFat, Navi3DRouter, Navi3DTriangle, NonSerialize, NormalMap_frag, OAnimationEvent, OBJParser, Object3D, Object3DEvent, Object3DTransformTools, Object3DUtil, ObjectAnimClip, OcclusionSystem, Octree, OctreeEntity, OrbitController, OrderMap, Orientation3D, OutLineBlendColor_cs, OutlineCalcOutline_cs, OutlinePass, OutlinePost, OutlinePostData, OutlinePostManager, OutlinePostSlot, Outline_cs, OvershootInterpolator, PBRLItShader, PBRLitSSSShader, ParserBase, ParserFormat, ParticleSystemCurveEvalMode, ParticleSystemRandomnessIds, PassGenerate, PassShader, PassType, PhysicMaterialUniform_frag, PickCompute, PickFire, PickGUIEvent3D, PickResult, Picker_cs, PingPong, PipelinePool, Plane3D, PlaneClassification, PlaneGeometry, PointClassification, PointLight, PointLightShadowRenderer, PointShadowCubeCamera, PointerEvent3D, Polynomial, PolynomialCurve, Polynomials, PoolNode, PostBase, PostProcessingComponent, PostRenderer, PreDepthPassRenderer, PreFilteredEnvironment_cs, PreFilteredEnvironment_cs2, PreIntegratedLut, PreIntegratedLutCompute, PrefabAvatarData, PrefabAvatarParser, PrefabBoneData, PrefabMaterialParser, PrefabMeshData, PrefabMeshParser, PrefabNode, PrefabParser, PrefabStringUtil, PrefabTextureData, PrefabTextureParser, Preprocessor, Probe, ProbeEntries, ProbeGBufferFrame, ProfilerUtil, PropertyAnimClip, PropertyAnimTag, PropertyAnimation, PropertyAnimationClip, PropertyAnimationClipState, PropertyAnimationEvent, PropertyHelp, QuadAABB, QuadGlsl_fs, QuadGlsl_vs, QuadRoot, QuadShader, QuadTree, QuadTreeCell, Quad_depth2dArray_frag_wgsl, Quad_depth2d_frag_wgsl, Quad_depthCube_frag_wgsl, Quad_frag_wgsl, Quad_vert_wgsl, Quaternion, RADIANS_TO_DEGREES, RGBEErrorCode, RGBEHeader, RGBEParser, RTDescriptor, RTFrame, RTResourceConfig, RTResourceMap, Rand, RandomSeed, Ray, RayCastMeshDetail, Reader, Rect, Reference, Reflection, ReflectionCG, ReflectionEntries, ReflectionMaterial, ReflectionRenderer, ReflectionShader, ReflectionShader_shader, RegisterComponent, RegisterShader, RenderContext, RenderLayer, RenderLayerUtil, RenderNode, RenderShaderCollect, RenderShaderCompute, RenderShaderPass, RenderTexture, RendererBase, RendererJob, RendererMap, RendererMask, RendererMaskUtil, RendererPassState, RepeatSE, Res, RotationControlComponents, SHCommon_frag, SN_ArrayConstant, SN_BinaryOperation, SN_Break, SN_CodeBlock, SN_Constant, SN_Continue, SN_Declaration, SN_Discard, SN_DoWhileLoop, SN_Expression, SN_ForLoop, SN_Function, SN_FunctionArgs, SN_FunctionCall, SN_IFBranch, SN_Identifier, SN_IndexOperation, SN_Layout, SN_ParenExpression, SN_Precision, SN_Return, SN_SelectOperation, SN_Struct, SN_TernaryOperation, SN_UnaryOperation, SN_WhileLoop, SSAO_cs, SSGI2_cs, SSGIPost, SSRPost, SSR_BlendColor_cs, SSR_IS_Kernel, SSR_IS_cs, SSR_RayTrace_cs, ScaleControlComponents, Scene3D, Shader, ShaderAttributeInfo, ShaderConverter, ShaderConverterResult, ShaderLib, ShaderPassBase, ShaderReflection, ShaderStage, ShaderState, ShaderUniformInfo, ShaderUtil, ShadingInput, ShadowLightsCollect, ShadowMapPassRenderer, ShadowMapping_frag, Skeleton, SkeletonAnimationClip, SkeletonAnimationClipState, SkeletonAnimationComponent, SkeletonAnimationCompute, SkeletonAnimation_shader, SkeletonBlendComputeArgs, SkeletonPose, SkeletonTransformComputeArgs, SkinnedMeshRenderer, SkinnedMeshRenderer2, SkyGBufferPass, SkyGBuffer_pass, SkyMaterial, SkyRenderer, SkyShader, SolidColorSky, SphereColliderShape, SphereGeometry, SphereReflection, SpotLight, StandShader, StatementNode, StorageGPUBuffer, StringUtil, Struct, StructStorageGPUBuffer, SubGeometry, TAACopyTex_cs, TAAPost, TAASharpTex_cs, TAA_cs, TestComputeLoadBuffer, TextAnchor, TextFieldLayout, TextFieldLine, Texture, TextureCube, TextureCubeFaceData, TextureCubeStdCreator, TextureCubeUtils, TextureMipmapCompute, TextureMipmapGenerator, TextureScaleCompute, ThirdPersonCameraController, TileSet, TileSetChild, TileSetChildContent, TileSetChildContentMetaData, TileSetRoot, TilesRenderer, Time, TokenType, TorusGeometry, TouchData, TrailGeometry, Transform, TransformAxisEnum, TransformControllerBaseComponent, TransformMode, TransformSpaceMode, TranslationControlComponents, TranslatorContext, TriGeometry, Triangle, UIButton, UIButtonTransition, UIComponentBase, UIEvent, UIImage, UIImageGroup, UIInteractive, UIInteractiveStyle, UIPanel, UIRenderAble, UIShadow, UITextField, UITransform, UUID, UV, Uint32ArrayTexture, Uint8ArrayTexture, UnLit, UnLitMaterial, UnLitMaterialUniform_frag, UnLitShader, UnLitTexArrayMaterial, UnLitTexArrayShader, UnLitTextureArray, UnLit_frag, UniformGPUBuffer, UniformNode, UniformType, ValueEnumType, ValueOp, ValueParser, ValueSpread, Vector2, Vector3, Vector3Ex, Vector4, VertexAttribute, VertexAttributeIndexShader, VertexAttributeName, VertexAttributeSize, VertexAttributeStride, VertexAttributes_vert, VertexBufferLayout, VertexFormat, VertexGPUBuffer, Vertical, VideoUniform_frag, View3D, ViewPanel, ViewQuad, VirtualTexture, WGSLTranslator, WayLines3D, WayPoint3D, WebGPUDescriptorCreator, WorldMatrixUniform, WorldPanel, WrapMode, WrapTimeMode, ZCullingCompute, ZPassShader_cs, ZPassShader_fs, ZPassShader_vs, ZSorterUtil, append, arrayToString, blendComponent, buildCurves, byteSizeOfType, calculateCurveRangesValue, calculateMinMax, castPointShadowMap_vert, clamp, clampRepeat, computeAABBFromPositions, cos, crossProduct, cubicPolynomialRoot, cubicPolynomialRootsGeneric, curvesSupportProcedural, deg2Rad, detectGSplatFormat, directionShadowCastMap_frag, dot, doubleIntegrateSegment, downSample, fastInvSqrt, floorfToIntPos, fonts, generateRandom, generateRandom3, getFloatFromInt, getGLTypeFromTypedArray, getGLTypeFromTypedArrayType, getGlobalRandomSeed, getTypedArray, getTypedArrayTypeFromGLType, grad1, grad2, grad3, grad4, inferSHOrder, integrateSegment, irradianceDataReader, kPI, lerp, lerpByte, lerpColor, lerpVector3, magnitude, makeAloneSprite, makeGUISprite, makeMatrix44, matrixMultiply, matrixRotate, matrixRotateY, mergeFunctions, multiplyMatrices4x4REF, normal_distribution, normalizeFast, normalizeSafe, normalizedToByte, normalizedToWord, outlinePostData, outlinePostManager, parsePlyGaussianSplat, parsePlyHeader, perm, post, quadraticPolynomialRootsGeneric, rad2Deg, random01, randomBarycentricCoord, randomPointBetweenEllipsoid, randomPointBetweenSphere, randomPointInsideCube, randomPointInsideEllipsoid, randomPointInsideUnitCircle, randomPointInsideUnitSphere, randomQuaternion, randomQuaternionUniformDistribution, randomSeed, randomUnitVector, randomUnitVector2, rangedRandomFloat, rangedRandomInt, readByType, readMagicBytes, registerMaterial, repeat, rotMatrix, rotateVectorByQuat, roundfToIntPos, scale, shadowCastMap_frag, shadowCastMap_vert, simplex, sin, snoise1, snoise2, snoise3, snoise4, sqrMagnitude, sqrtImpl, stencilStateFace, swap, textureCompress, threshold, toHalfFloat, tw, uniform_real_distribution, uniform_real_distribution2, upSample$1 as upSample, webGPUContext, zSorterUtil };
66480
+ export { AccelerateDecelerateInterpolator, AccelerateInterpolator, AnimationCurve, AnimationCurveT, AnimationMonitor, AnimatorComponent, AnimatorEventKeyframe, AnticipateInterpolator, AnticipateOvershootInterpolator, ArrayHas, ArrayItemIndex, AtlasParser, AtmosphericComponent, AtmosphericScatteringSky, AtmosphericScatteringSkySetting, AtmosphericScatteringSky_shader, AttributeAnimCurve, AxisObject, B3DMLoader, B3DMLoaderBase, B3DMParseUtil, B3DMParser, BRDFLUT, BRDFLUTGenerate, BRDF_frag, BatchTable, BiMap, BillboardComponent, BillboardType, BitUtil, BitmapTexture2D, BitmapTexture2DArray, BitmapTextureCube, Blend, BlendFactor, BlendMode, BlendShapeData, BlendShapePropertyData, BloomPost, BlurEffectCreatorBlur_cs, BlurEffectCreatorSample_cs, BlurTexture2DBufferCreator, BounceInterpolator, BoundUtil, BoundingBox, BoundingSphere, BoxColliderShape, BoxGeometry, BrdfLut_frag, BsDF_frag, BxDF_frag, BxdfDebug_frag, BytesArray, CEvent, CEventDispatcher, CEventListener, CResizeEvent, CSM, Camera3D, CameraControllerBase, CameraType, CameraUtil, CapsuleColliderShape, CastPointShadowMaterialPass, CastShadowMaterialPass, Clearcoat_frag, ClusterBoundsSource_cs, ClusterConfig, ClusterDebug_frag, ClusterLight, ClusterLightingBuffer, ClusterLightingRender, ClusterLighting_cs, CollectInfo, ColliderComponent, ColliderShape, ColliderShapeType, Color, ColorGradient, ColorLitMaterial, ColorLitShader, ColorPassFragmentOutput, ColorPassRenderer, ColorUtil, ComData, Combine_cs, Common_frag, Common_vert, ComponentBase, ComponentCollect, ComputeGPUBuffer, ComputeShader, Context3D, CubeCamera, CubeMapFaceEnum, CubeSky_Shader, CubicBezierCurve, CubicBezierPath, CubicBezierType, CycleInterpolator, CylinderGeometry, DDGIIrradianceComputePass, DDGIIrradianceGPUBufferReader, DDGIIrradianceVolume, DDGIIrradiance_shader, DDGILightingPass, DDGILighting_shader, DDGIMultiBouncePass, DDGIProbeRenderer, DEGREES_TO_RADIANS, DecelerateInterpolator, Denoising_cs, Depth2DTextureArray, DepthCubeArrayTexture, DepthMaterialPass, DepthOfFieldPost, DepthOfView_cs, DirectLight, DoubleArray, EditorInspector, Engine3D, Entity, EntityBatchCollect, EntityCollect, EnvMap_frag, ErpImage2CubeMap, ErpImage2CubeMapCreateCube_cs, ErpImage2CubeMapRgbe2rgba_cs, ExtrudeGeometry, FASTFLOOR, FXAAPost, FXAAShader, FastMathShader, FatLineGeometry, FatLineMaterial, FatLineRenderer, FatLineShader, FatLine_FS, FatLine_VS, FeatureTable, FileLoader, FirstPersonCameraController, Float16ArrayTexture, Float32ArrayTexture, FlyCameraController, FontChar, FontInfo, FontPage, FontParser, ForwardRenderJob, FragmentOutput, FragmentVarying, FrameCache, Frustum, FrustumCSM, FrustumCulling_cs, FullQuad_vert_wgsl, GBufferFrame, GBufferPass, GBufferPost, GBufferStand, GBuffer_pass, GILighting, GIProbeMaterial, GIProbeMaterialType, GIProbeShader, GIRenderCompleteEvent, GIRenderStartEvent, GLBChunk, GLBHeader, GLBParser, GLSLLexer, GLSLLexerToken, GLSLPreprocessor, GLSLSyntax, GLTFBinaryExtension, GLTFMaterial, GLTFParser, GLTFSubParser, GLTFSubParserCamera, GLTFSubParserConverter, GLTFSubParserMaterial, GLTFSubParserMesh, GLTFSubParserSkeleton, GLTFSubParserSkin, GLTFType, GLTF_Accessors, GLTF_Info, GLTF_Light, GLTF_Mesh, GLTF_Node, GLTF_Primitives, GLTF_Scene, GPUAddressMode, GPUBlendFactor, GPUBufferBase, GPUBufferType, GPUCompareFunction, GPUContext, GPUCullMode, GPUFilterMode, GPUPrimitiveTopology, GPUTextureFormat, GPUVertexFormat, GPUVertexStepMode, GSplatFormat, GSplatGeometry, GSplatMaterial, GSplatRenderer, GSplatShader, GSplat_FS, GSplat_VS, GTAOPost, GTAO_cs, GUIAtlasTexture, GUICanvas, GUIConfig, GUIGeometry, GUIGeometryRebuild, GUIMaterial, GUIPassRenderer, GUIPick, GUIPickHelper, GUIQuad, GUIQuadAttrEnum, GUIRenderer, GUIShader, GUISpace, GUISprite, GUITexture, GaussianSplatParser, GenerayRandomDir, GeoJsonParser, GeoJsonUtil, GeoType, GeometryBase, GeometryIndicesBuffer, GeometryUtil, GeometryVertexBuffer, GeometryVertexType, GetComponentClass, GetCountInstanceID, GetRepeat, GetShader, GlassShader, GlobalBindGroup, GlobalBindGroupLayout, GlobalFog, GlobalFog_shader, GlobalIlluminationComponent, GlobalUniform, GlobalUniformGroup, GodRayPost, GodRay_cs, GridObject, HDRTexture, HDRTextureCube, Hair_frag, Hair_shader_op, Hair_shader_tr, HaltonSeq, Horizontal, HoverCameraController, I3DMLoader, I3DMLoaderBase, I3DMParser, IBLEnvMapCreator, IBLEnvMapCreator_cs, IESProfiles, IESProfiles_frag, IKDTreeUserData, ImageType, IndicesGPUBuffer, Inline_vert, InputSystem, InstanceDrawComponent, InstanceUniform, InstancedMesh, Interpolator, InterpolatorEnum, IrradianceDataReaderCompleteEvent, IrradianceVolumeData_frag, Irradiance_frag, IsEditorInspector, IsNonSerialize, Joint, JointPose, JumperInterpolator, KDTreeEntity, KDTreeNode, KDTreeRange, KDTreeSpace, KDTreeUUID, KHR_draco_mesh_compression, KHR_lights_punctual, KHR_materials_clearcoat, KHR_materials_emissive_strength, KHR_materials_ior, KHR_materials_unlit, KMZParser, KV, KelvinUtil, KeyCode, KeyEvent, Keyframe, KeyframeT, LDRTextureCube, LambertMaterial, Lambert_shader, Light, LightBase, LightData, LightEntries, LightType, LightingFunction_frag, Line, LineClassification, LinearInterpolator, LitMaterial, LitSSSShader, LitShader, Lit_shader, LoaderBase, LoaderEvent, LoaderManager, MAX_VALUE, MIN_VALUE, Material, MaterialDataUniformGPUBuffer, MaterialUtilities, MathShader, MathUtil, Matrix3, Matrix4, MatrixBindGroup, MatrixGPUBuffer, MatrixShader, MemoryDO, MemoryInfo, MergeRGBACreator, MergeRGBA_cs, MeshColliderShape, MeshFilter, MeshRenderer, MinMaxAnimationCurves, MinMaxCurve, MinMaxCurveState, MinMaxPolyCurves, MorePassParser, MorePassShader, MorphTargetBlender, MorphTargetData, MorphTargetFrame, MorphTargetTransformKey, MorphTarget_shader, MouseCode, MultiBouncePass_cs, Navi3DAstar, Navi3DConst, Navi3DEdge, Navi3DFunnel, Navi3DMaskType, Navi3DMesh, Navi3DPoint, Navi3DPoint2D, Navi3DPointFat, Navi3DRouter, Navi3DTriangle, NonSerialize, NormalMap_frag, OAnimationEvent, OBJParser, Object3D, Object3DEvent, Object3DTransformTools, Object3DUtil, ObjectAnimClip, OcclusionSystem, Octree, OctreeEntity, OrbitController, OrderMap, Orientation3D, OutLineBlendColor_cs, OutlineCalcOutline_cs, OutlinePass, OutlinePost, OutlinePostData, OutlinePostManager, OutlinePostSlot, Outline_cs, OvershootInterpolator, PBRLItShader, PBRLitSSSShader, ParserBase, ParserFormat, ParticleSystemCurveEvalMode, ParticleSystemRandomnessIds, PassGenerate, PassShader, PassType, PhysicMaterialUniform_frag, PickCompute, PickFire, PickGUIEvent3D, PickResult, Picker_cs, PingPong, PipelinePool, Plane3D, PlaneClassification, PlaneGeometry, PointClassification, PointLight, PointLightShadowRenderer, PointShadowCubeCamera, PointerEvent3D, Polynomial, PolynomialCurve, Polynomials, PoolNode, PostBase, PostProcessingComponent, PostRenderer, PreDepthPassRenderer, PreFilteredEnvironment_cs, PreFilteredEnvironment_cs2, PreIntegratedLut, PreIntegratedLutCompute, PrefabAvatarData, PrefabAvatarParser, PrefabBoneData, PrefabMaterialParser, PrefabMeshData, PrefabMeshParser, PrefabNode, PrefabParser, PrefabStringUtil, PrefabTextureData, PrefabTextureParser, Preprocessor, Probe, ProbeEntries, ProbeGBufferFrame, ProfilerUtil, PropertyAnimClip, PropertyAnimTag, PropertyAnimation, PropertyAnimationClip, PropertyAnimationClipState, PropertyAnimationEvent, PropertyHelp, QuadAABB, QuadGlsl_fs, QuadGlsl_vs, QuadRoot, QuadShader, QuadTree, QuadTreeCell, Quad_depth2dArray_frag_wgsl, Quad_depth2d_frag_wgsl, Quad_depthCube_frag_wgsl, Quad_frag_wgsl, Quad_vert_wgsl, Quaternion, R32UintTexture, RADIANS_TO_DEGREES, RGBEErrorCode, RGBEHeader, RGBEParser, RTDescriptor, RTFrame, RTResourceConfig, RTResourceMap, Rand, RandomSeed, Ray, RayCastMeshDetail, Reader, Rect, Reference, Reflection, ReflectionCG, ReflectionEntries, ReflectionMaterial, ReflectionRenderer, ReflectionShader, ReflectionShader_shader, RegisterComponent, RegisterShader, RenderContext, RenderLayer, RenderLayerUtil, RenderNode, RenderShaderCollect, RenderShaderCompute, RenderShaderPass, RenderTexture, RendererBase, RendererJob, RendererMap, RendererMask, RendererMaskUtil, RendererPassState, RepeatSE, Res, RotationControlComponents, SHCommon_frag, SN_ArrayConstant, SN_BinaryOperation, SN_Break, SN_CodeBlock, SN_Constant, SN_Continue, SN_Declaration, SN_Discard, SN_DoWhileLoop, SN_Expression, SN_ForLoop, SN_Function, SN_FunctionArgs, SN_FunctionCall, SN_IFBranch, SN_Identifier, SN_IndexOperation, SN_Layout, SN_ParenExpression, SN_Precision, SN_Return, SN_SelectOperation, SN_Struct, SN_TernaryOperation, SN_UnaryOperation, SN_WhileLoop, SSAO_cs, SSGI2_cs, SSGIPost, SSRPost, SSR_BlendColor_cs, SSR_IS_Kernel, SSR_IS_cs, SSR_RayTrace_cs, ScaleControlComponents, Scene3D, Shader, ShaderAttributeInfo, ShaderConverter, ShaderConverterResult, ShaderLib, ShaderPassBase, ShaderReflection, ShaderStage, ShaderState, ShaderUniformInfo, ShaderUtil, ShadingInput, ShadowLightsCollect, ShadowMapPassRenderer, ShadowMapping_frag, Skeleton, SkeletonAnimationClip, SkeletonAnimationClipState, SkeletonAnimationComponent, SkeletonAnimationCompute, SkeletonAnimation_shader, SkeletonBlendComputeArgs, SkeletonPose, SkeletonTransformComputeArgs, SkinnedMeshRenderer, SkinnedMeshRenderer2, SkyGBufferPass, SkyGBuffer_pass, SkyMaterial, SkyRenderer, SkyShader, SolidColorSky, SphereColliderShape, SphereGeometry, SphereReflection, SpotLight, StandShader, StatementNode, StorageGPUBuffer, StringUtil, Struct, StructStorageGPUBuffer, SubGeometry, TAACopyTex_cs, TAAPost, TAASharpTex_cs, TAA_cs, TestComputeLoadBuffer, TextAnchor, TextFieldLayout, TextFieldLine, Texture, TextureCube, TextureCubeFaceData, TextureCubeStdCreator, TextureCubeUtils, TextureMipmapCompute, TextureMipmapGenerator, TextureScaleCompute, ThirdPersonCameraController, TileSet, TileSetChild, TileSetChildContent, TileSetChildContentMetaData, TileSetRoot, TilesRenderer, Time, TokenType, TorusGeometry, TouchData, TrailGeometry, Transform, TransformAxisEnum, TransformControllerBaseComponent, TransformMode, TransformSpaceMode, TranslationControlComponents, TranslatorContext, TriGeometry, Triangle, UIButton, UIButtonTransition, UIComponentBase, UIEvent, UIImage, UIImageGroup, UIInteractive, UIInteractiveStyle, UIPanel, UIRenderAble, UIShadow, UITextField, UITransform, UUID, UV, Uint32ArrayTexture, Uint8ArrayTexture, UnLit, UnLitMaterial, UnLitMaterialUniform_frag, UnLitShader, UnLitTexArrayMaterial, UnLitTexArrayShader, UnLitTextureArray, UnLit_frag, UniformGPUBuffer, UniformNode, UniformType, ValueEnumType, ValueOp, ValueParser, ValueSpread, Vector2, Vector3, Vector3Ex, Vector4, VertexAttribute, VertexAttributeIndexShader, VertexAttributeName, VertexAttributeSize, VertexAttributeStride, VertexAttributes_vert, VertexBufferLayout, VertexFormat, VertexGPUBuffer, Vertical, VideoUniform_frag, View3D, ViewPanel, ViewQuad, VirtualTexture, WGSLTranslator, WayLines3D, WayPoint3D, WebGPUDescriptorCreator, WorldMatrixUniform, WorldPanel, WrapMode, WrapTimeMode, ZCullingCompute, ZPassShader_cs, ZPassShader_fs, ZPassShader_vs, ZSorterUtil, append, arrayToString, blendComponent, buildCurves, byteSizeOfType, calculateCurveRangesValue, calculateMinMax, castPointShadowMap_vert, clamp, clampRepeat, computeAABBFromPositions, cos, crossProduct, cubicPolynomialRoot, cubicPolynomialRootsGeneric, curvesSupportProcedural, deg2Rad, detectGSplatFormat, directionShadowCastMap_frag, dot, doubleIntegrateSegment, downSample, fastInvSqrt, floorfToIntPos, fonts, generateRandom, generateRandom3, getFloatFromInt, getGLTypeFromTypedArray, getGLTypeFromTypedArrayType, getGlobalRandomSeed, getTypedArray, getTypedArrayTypeFromGLType, grad1, grad2, grad3, grad4, inferSHOrder, integrateSegment, irradianceDataReader, kPI, lerp, lerpByte, lerpColor, lerpVector3, magnitude, makeAloneSprite, makeGUISprite, makeMatrix44, matrixMultiply, matrixRotate, matrixRotateY, mergeFunctions, multiplyMatrices4x4REF, normal_distribution, normalizeFast, normalizeSafe, normalizedToByte, normalizedToWord, outlinePostData, outlinePostManager, parsePlyGaussianSplat, parsePlyHeader, perm, post, quadraticPolynomialRootsGeneric, rad2Deg, random01, randomBarycentricCoord, randomPointBetweenEllipsoid, randomPointBetweenSphere, randomPointInsideCube, randomPointInsideEllipsoid, randomPointInsideUnitCircle, randomPointInsideUnitSphere, randomQuaternion, randomQuaternionUniformDistribution, randomSeed, randomUnitVector, randomUnitVector2, rangedRandomFloat, rangedRandomInt, readByType, readMagicBytes, registerMaterial, repeat, rotMatrix, rotateVectorByQuat, roundfToIntPos, scale, shadowCastMap_frag, shadowCastMap_vert, simplex, sin, snoise1, snoise2, snoise3, snoise4, sqrMagnitude, sqrtImpl, stencilStateFace, swap, textureCompress, threshold, toHalfFloat, tw, uniform_real_distribution, uniform_real_distribution2, upSample$1 as upSample, webGPUContext, zSorterUtil };