@onerjs/core 8.42.6 → 8.42.7

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 (207) hide show
  1. package/Animations/animatorAvatar.d.ts +5 -2
  2. package/Animations/animatorAvatar.js +40 -27
  3. package/Animations/animatorAvatar.js.map +1 -1
  4. package/Cameras/Inputs/geospatialCameraMouseWheelInput.d.ts +1 -2
  5. package/Cameras/Inputs/geospatialCameraMouseWheelInput.js +1 -2
  6. package/Cameras/Inputs/geospatialCameraMouseWheelInput.js.map +1 -1
  7. package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +0 -4
  8. package/Cameras/Inputs/geospatialCameraPointersInput.js +1 -5
  9. package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
  10. package/Cameras/cameraMovement.d.ts +1 -4
  11. package/Cameras/cameraMovement.js +1 -4
  12. package/Cameras/cameraMovement.js.map +1 -1
  13. package/Cameras/geospatialCamera.d.ts +22 -4
  14. package/Cameras/geospatialCamera.js +27 -9
  15. package/Cameras/geospatialCamera.js.map +1 -1
  16. package/Cameras/geospatialCameraMovement.d.ts +3 -3
  17. package/Cameras/geospatialCameraMovement.js +18 -18
  18. package/Cameras/geospatialCameraMovement.js.map +1 -1
  19. package/Engines/WebGPU/Extensions/engine.debugging.js +35 -13
  20. package/Engines/WebGPU/Extensions/engine.debugging.js.map +1 -1
  21. package/Engines/abstractEngine.js +2 -2
  22. package/Engines/abstractEngine.js.map +1 -1
  23. package/Engines/engineFeatures.d.ts +0 -2
  24. package/Engines/engineFeatures.js.map +1 -1
  25. package/Engines/nullEngine.js +0 -1
  26. package/Engines/nullEngine.js.map +1 -1
  27. package/Engines/thinEngine.js +0 -1
  28. package/Engines/thinEngine.js.map +1 -1
  29. package/Engines/thinNativeEngine.js +0 -1
  30. package/Engines/thinNativeEngine.js.map +1 -1
  31. package/Engines/thinWebGPUEngine.d.ts +9 -4
  32. package/Engines/thinWebGPUEngine.js +32 -32
  33. package/Engines/thinWebGPUEngine.js.map +1 -1
  34. package/Engines/webgpuEngine.d.ts +1 -0
  35. package/Engines/webgpuEngine.js +24 -165
  36. package/Engines/webgpuEngine.js.map +1 -1
  37. package/FrameGraph/Passes/renderPass.js +0 -3
  38. package/FrameGraph/Passes/renderPass.js.map +1 -1
  39. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +2 -3
  40. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +5 -29
  41. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  42. package/FrameGraph/frameGraph.js +3 -0
  43. package/FrameGraph/frameGraph.js.map +1 -1
  44. package/FrameGraph/frameGraphContext.js +1 -1
  45. package/FrameGraph/frameGraphContext.js.map +1 -1
  46. package/FrameGraph/frameGraphTask.d.ts +0 -2
  47. package/FrameGraph/frameGraphTask.js +15 -17
  48. package/FrameGraph/frameGraphTask.js.map +1 -1
  49. package/FrameGraph/frameGraphTextureManager.js +1 -1
  50. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  51. package/Gizmos/axisScaleGizmo.js +2 -2
  52. package/Gizmos/axisScaleGizmo.js.map +1 -1
  53. package/Gizmos/cameraGizmo.d.ts +1 -1
  54. package/Gizmos/cameraGizmo.js +1 -1
  55. package/Gizmos/cameraGizmo.js.map +1 -1
  56. package/Gizmos/gizmo.d.ts +4 -4
  57. package/Gizmos/gizmo.js +5 -5
  58. package/Gizmos/gizmo.js.map +1 -1
  59. package/Gizmos/gizmoManager.d.ts +2 -2
  60. package/Gizmos/gizmoManager.js +1 -1
  61. package/Gizmos/gizmoManager.js.map +1 -1
  62. package/Gizmos/planeRotationGizmo.d.ts +2 -2
  63. package/Gizmos/planeRotationGizmo.js +2 -3
  64. package/Gizmos/planeRotationGizmo.js.map +1 -1
  65. package/Gizmos/positionGizmo.d.ts +1 -1
  66. package/Gizmos/positionGizmo.js +2 -2
  67. package/Gizmos/positionGizmo.js.map +1 -1
  68. package/Gizmos/rotationGizmo.d.ts +1 -1
  69. package/Gizmos/rotationGizmo.js +3 -3
  70. package/Gizmos/rotationGizmo.js.map +1 -1
  71. package/Gizmos/scaleGizmo.d.ts +1 -1
  72. package/Gizmos/scaleGizmo.js +1 -1
  73. package/Gizmos/scaleGizmo.js.map +1 -1
  74. package/Loading/Plugins/babylonFileLoader.js +44 -14
  75. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  76. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.d.ts +12 -3
  77. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js +33 -8
  78. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js.map +1 -1
  79. package/Materials/uniformBuffer.d.ts +0 -4
  80. package/Materials/uniformBuffer.js +0 -8
  81. package/Materials/uniformBuffer.js.map +1 -1
  82. package/Maths/index.d.ts +2 -0
  83. package/Maths/index.js +2 -0
  84. package/Maths/index.js.map +1 -1
  85. package/Maths/math.geospatial.d.ts +12 -0
  86. package/Maths/math.geospatial.functions.d.ts +19 -0
  87. package/Maths/math.geospatial.functions.js +27 -0
  88. package/Maths/math.geospatial.functions.js.map +1 -0
  89. package/Maths/math.geospatial.js +2 -0
  90. package/Maths/math.geospatial.js.map +1 -0
  91. package/Meshes/mesh.js +1 -1
  92. package/Meshes/mesh.js.map +1 -1
  93. package/Navigation/INavigationEngine.d.ts +2 -2
  94. package/Navigation/INavigationEngine.js.map +1 -1
  95. package/Navigation/Plugins/recastJSPlugin.d.ts +2 -2
  96. package/Navigation/Plugins/recastJSPlugin.js +14 -5
  97. package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
  98. package/Physics/castingResult.d.ts +4 -1
  99. package/Physics/castingResult.js +1 -1
  100. package/Physics/castingResult.js.map +1 -1
  101. package/Physics/joinedPhysicsEngineComponent.js +1 -1
  102. package/Physics/joinedPhysicsEngineComponent.js.map +1 -1
  103. package/Physics/physicsHelper.d.ts +8 -8
  104. package/Physics/physicsHelper.js +7 -7
  105. package/Physics/physicsHelper.js.map +1 -1
  106. package/Physics/shapeCastResult.d.ts +4 -0
  107. package/Physics/shapeCastResult.js +7 -0
  108. package/Physics/shapeCastResult.js.map +1 -1
  109. package/Physics/v2/IPhysicsEnginePlugin.d.ts +51 -4
  110. package/Physics/v2/IPhysicsEnginePlugin.js +12 -12
  111. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
  112. package/Physics/v2/characterController.js.map +1 -1
  113. package/Physics/v2/physicsBody.js.map +1 -1
  114. package/Physics/v2/physicsConstraint.d.ts +1 -1
  115. package/Physics/v2/physicsConstraint.js +1 -1
  116. package/Physics/v2/physicsConstraint.js.map +1 -1
  117. package/Physics/v2/physicsEngine.d.ts +0 -5
  118. package/Physics/v2/physicsEngine.js +0 -5
  119. package/Physics/v2/physicsEngine.js.map +1 -1
  120. package/Physics/v2/physicsEngineComponent.d.ts +1 -1
  121. package/Physics/v2/physicsEngineComponent.js.map +1 -1
  122. package/Physics/v2/physicsMaterial.d.ts +6 -0
  123. package/Physics/v2/physicsMaterial.js +2 -2
  124. package/Physics/v2/physicsMaterial.js.map +1 -1
  125. package/Physics/v2/ragdoll.js.map +1 -1
  126. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +4 -1
  127. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  128. package/Rendering/edgesRenderer.js +1 -0
  129. package/Rendering/edgesRenderer.js.map +1 -1
  130. package/Rendering/objectRenderer.js +8 -4
  131. package/Rendering/objectRenderer.js.map +1 -1
  132. package/Rendering/renderingGroup.d.ts +1 -1
  133. package/Rendering/renderingGroup.js +1 -1
  134. package/Rendering/renderingGroup.js.map +1 -1
  135. package/Rendering/renderingManager.d.ts +1 -1
  136. package/Rendering/renderingManager.js.map +1 -1
  137. package/Shaders/iblVoxelGrid.fragment.js +4 -1
  138. package/Shaders/iblVoxelGrid.fragment.js.map +1 -1
  139. package/ShadersWGSL/background.vertex.js +8 -8
  140. package/ShadersWGSL/background.vertex.js.map +1 -1
  141. package/ShadersWGSL/boundingBoxRenderer.vertex.js +2 -2
  142. package/ShadersWGSL/boundingBoxRenderer.vertex.js.map +1 -1
  143. package/ShadersWGSL/clearQuad.vertex.js +1 -1
  144. package/ShadersWGSL/clearQuad.vertex.js.map +1 -1
  145. package/ShadersWGSL/color.vertex.js +1 -1
  146. package/ShadersWGSL/color.vertex.js.map +1 -1
  147. package/ShadersWGSL/depth.vertex.js +3 -3
  148. package/ShadersWGSL/depth.vertex.js.map +1 -1
  149. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +2 -2
  150. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
  151. package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js +2 -2
  152. package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
  153. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +2 -2
  154. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
  155. package/ShadersWGSL/fxaa.vertex.js +1 -1
  156. package/ShadersWGSL/fxaa.vertex.js.map +1 -1
  157. package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
  158. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  159. package/ShadersWGSL/gaussianSplattingDepth.vertex.js +3 -3
  160. package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
  161. package/ShadersWGSL/geometry.vertex.js +4 -4
  162. package/ShadersWGSL/geometry.vertex.js.map +1 -1
  163. package/ShadersWGSL/glowMapGeneration.vertex.js +4 -4
  164. package/ShadersWGSL/glowMapGeneration.vertex.js.map +1 -1
  165. package/ShadersWGSL/glowMapMerge.vertex.js +1 -1
  166. package/ShadersWGSL/glowMapMerge.vertex.js.map +1 -1
  167. package/ShadersWGSL/greasedLine.vertex.js +10 -4
  168. package/ShadersWGSL/greasedLine.vertex.js.map +1 -1
  169. package/ShadersWGSL/hdrFiltering.vertex.js +1 -1
  170. package/ShadersWGSL/hdrFiltering.vertex.js.map +1 -1
  171. package/ShadersWGSL/hdrIrradianceFiltering.vertex.js +1 -1
  172. package/ShadersWGSL/hdrIrradianceFiltering.vertex.js.map +1 -1
  173. package/ShadersWGSL/iblVoxelGrid.vertex.js +2 -2
  174. package/ShadersWGSL/iblVoxelGrid.vertex.js.map +1 -1
  175. package/ShadersWGSL/iblVoxelSlabDebug.vertex.js +1 -1
  176. package/ShadersWGSL/iblVoxelSlabDebug.vertex.js.map +1 -1
  177. package/ShadersWGSL/kernelBlur.vertex.js +2 -2
  178. package/ShadersWGSL/kernelBlur.vertex.js.map +1 -1
  179. package/ShadersWGSL/layer.vertex.js +1 -1
  180. package/ShadersWGSL/layer.vertex.js.map +1 -1
  181. package/ShadersWGSL/lensFlare.vertex.js +1 -1
  182. package/ShadersWGSL/lensFlare.vertex.js.map +1 -1
  183. package/ShadersWGSL/line.vertex.js +2 -2
  184. package/ShadersWGSL/line.vertex.js.map +1 -1
  185. package/ShadersWGSL/meshUVSpaceRenderer.vertex.js +2 -2
  186. package/ShadersWGSL/meshUVSpaceRenderer.vertex.js.map +1 -1
  187. package/ShadersWGSL/meshUVSpaceRendererFinaliser.vertex.js +1 -1
  188. package/ShadersWGSL/meshUVSpaceRendererFinaliser.vertex.js.map +1 -1
  189. package/ShadersWGSL/meshUVSpaceRendererMasker.vertex.js +1 -1
  190. package/ShadersWGSL/meshUVSpaceRendererMasker.vertex.js.map +1 -1
  191. package/ShadersWGSL/particles.vertex.js +9 -9
  192. package/ShadersWGSL/particles.vertex.js.map +1 -1
  193. package/ShadersWGSL/picking.vertex.js +2 -2
  194. package/ShadersWGSL/picking.vertex.js.map +1 -1
  195. package/ShadersWGSL/procedural.vertex.js +1 -1
  196. package/ShadersWGSL/procedural.vertex.js.map +1 -1
  197. package/ShadersWGSL/shadowMap.vertex.js +4 -4
  198. package/ShadersWGSL/shadowMap.vertex.js.map +1 -1
  199. package/ShadersWGSL/sprites.vertex.js +3 -3
  200. package/ShadersWGSL/sprites.vertex.js.map +1 -1
  201. package/XR/features/WebXRControllerPhysics.js +0 -2
  202. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  203. package/XR/features/WebXRHandTracking.js +3 -6
  204. package/XR/features/WebXRHandTracking.js.map +1 -1
  205. package/package.json +1 -1
  206. package/scene.js +2 -1
  207. package/scene.js.map +1 -1
@@ -16,6 +16,15 @@ import type { GaussianSplattingMaterial } from "./gaussianSplattingMaterial.js";
16
16
  export declare class GaussianSplattingSolidColorMaterialPlugin extends MaterialPluginBase {
17
17
  private _partColors;
18
18
  private _maxPartCount;
19
+ private _isEnabled;
20
+ /**
21
+ * Whether the solid-color override is active. When false, splats
22
+ * render with their original per-splat colors.
23
+ * Toggled via a shader uniform so no recompilation is required.
24
+ */
25
+ isEnabled: boolean;
26
+ /** @internal */
27
+ _onIsEnabledChanged(): void;
19
28
  /**
20
29
  * Creates a new GaussianSplatSolidColorPlugin.
21
30
  * @param material The GaussianSplattingMaterial to attach the plugin to.
@@ -60,8 +69,8 @@ export declare class GaussianSplattingSolidColorMaterialPlugin extends MaterialP
60
69
  private _getCustomCodeGLSL;
61
70
  private _getCustomCodeWGSL;
62
71
  /**
63
- * Registers the `partColors` uniform with the engine so that
64
- * the Effect can resolve its location.
72
+ * Registers the plugin uniforms with the engine so that
73
+ * the Effect can resolve their locations.
65
74
  * @returns uniform descriptions
66
75
  */
67
76
  getUniforms(): {
@@ -76,7 +85,7 @@ export declare class GaussianSplattingSolidColorMaterialPlugin extends MaterialP
76
85
  externalUniforms?: string[];
77
86
  };
78
87
  /**
79
- * Binds the `partColors` uniform array each frame.
88
+ * Binds the plugin uniforms each frame.
80
89
  * @param _uniformBuffer the uniform buffer (unused — we bind directly on the effect)
81
90
  * @param _scene the current scene
82
91
  * @param _engine the current engine
@@ -1,3 +1,5 @@
1
+ import { __decorate } from "../../tslib.es6.js";
2
+ import { serialize, expandToProperty } from "../../Misc/decorators.js";
1
3
  import { Color3 } from "../../Maths/math.color.js";
2
4
  import { MaterialPluginBase } from "../materialPluginBase.js";
3
5
  import { RegisterClass } from "../../Misc/typeStore.js";
@@ -8,6 +10,11 @@ import { GaussianSplattingMaxPartCount } from "./gaussianSplattingMaterial.js";
8
10
  * value, which is looked up in a uniform array in the fragment shader.
9
11
  */
10
12
  export class GaussianSplattingSolidColorMaterialPlugin extends MaterialPluginBase {
13
+ /** @internal */
14
+ _onIsEnabledChanged() {
15
+ // Intentional no-op: isEnabled is applied via a uniform in
16
+ // bindForSubMesh, so no dirty-marking or recompilation is needed.
17
+ }
11
18
  /**
12
19
  * Creates a new GaussianSplatSolidColorPlugin.
13
20
  * @param material The GaussianSplattingMaterial to attach the plugin to.
@@ -16,6 +23,13 @@ export class GaussianSplattingSolidColorMaterialPlugin extends MaterialPluginBas
16
23
  */
17
24
  constructor(material, partColors, maxPartCount = GaussianSplattingMaxPartCount) {
18
25
  super(material, "GaussianSplatSolidColor", 200);
26
+ this._isEnabled = true;
27
+ /**
28
+ * Whether the solid-color override is active. When false, splats
29
+ * render with their original per-splat colors.
30
+ * Toggled via a shader uniform so no recompilation is required.
31
+ */
32
+ this.isEnabled = true;
19
33
  this._partColors = partColors;
20
34
  this._maxPartCount = maxPartCount;
21
35
  this._enable(true);
@@ -90,11 +104,14 @@ export class GaussianSplattingSolidColorMaterialPlugin extends MaterialPluginBas
90
104
  return {
91
105
  CUSTOM_FRAGMENT_DEFINITIONS: `
92
106
  varying float vPartIndex;
107
+ uniform float solidColorEnabled;
93
108
  uniform vec3 partColors[${maxPartCount}];
94
109
  `,
95
110
  CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `
96
- int partIdx = int(vPartIndex + 0.5);
97
- finalColor = vec4(partColors[partIdx], finalColor.w);
111
+ if (solidColorEnabled > 0.5) {
112
+ int partIdx = int(vPartIndex + 0.5);
113
+ finalColor = vec4(partColors[partIdx], finalColor.w);
114
+ }
98
115
  `,
99
116
  };
100
117
  }
@@ -117,28 +134,31 @@ finalColor = vec4(partColors[partIdx], finalColor.w);
117
134
  return {
118
135
  CUSTOM_FRAGMENT_DEFINITIONS: `
119
136
  varying vPartIndex: f32;
137
+ uniform solidColorEnabled: f32;
120
138
  uniform partColors: array<vec3f, ${maxPartCount}>;
121
139
  `,
122
140
  CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `
123
- var partIdx: i32 = i32(fragmentInputs.vPartIndex + 0.5);
124
- finalColor = vec4f(uniforms.partColors[partIdx], finalColor.w);
141
+ if (uniforms.solidColorEnabled > 0.5) {
142
+ var partIdx: i32 = i32(fragmentInputs.vPartIndex + 0.5);
143
+ finalColor = vec4f(uniforms.partColors[partIdx], finalColor.w);
144
+ }
125
145
  `,
126
146
  };
127
147
  }
128
148
  return null;
129
149
  }
130
150
  /**
131
- * Registers the `partColors` uniform with the engine so that
132
- * the Effect can resolve its location.
151
+ * Registers the plugin uniforms with the engine so that
152
+ * the Effect can resolve their locations.
133
153
  * @returns uniform descriptions
134
154
  */
135
155
  getUniforms() {
136
156
  return {
137
- externalUniforms: ["partColors"],
157
+ externalUniforms: ["partColors", "solidColorEnabled"],
138
158
  };
139
159
  }
140
160
  /**
141
- * Binds the `partColors` uniform array each frame.
161
+ * Binds the plugin uniforms each frame.
142
162
  * @param _uniformBuffer the uniform buffer (unused — we bind directly on the effect)
143
163
  * @param _scene the current scene
144
164
  * @param _engine the current engine
@@ -149,6 +169,7 @@ finalColor = vec4f(uniforms.partColors[partIdx], finalColor.w);
149
169
  if (!effect) {
150
170
  return;
151
171
  }
172
+ effect.setFloat("solidColorEnabled", this._isEnabled ? 1.0 : 0.0);
152
173
  const colorArray = [];
153
174
  for (let i = 0; i < this._maxPartCount; i++) {
154
175
  const color = this._partColors[i] ?? new Color3(0, 0, 0);
@@ -157,5 +178,9 @@ finalColor = vec4f(uniforms.partColors[partIdx], finalColor.w);
157
178
  effect.setArray3("partColors", colorArray);
158
179
  }
159
180
  }
181
+ __decorate([
182
+ serialize(),
183
+ expandToProperty("_onIsEnabledChanged")
184
+ ], GaussianSplattingSolidColorMaterialPlugin.prototype, "isEnabled", void 0);
160
185
  RegisterClass("BABYLON.GaussianSplattingSolidColorMaterialPlugin", GaussianSplattingSolidColorMaterialPlugin);
161
186
  //# sourceMappingURL=gaussianSplattingSolidColorMaterialPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gaussianSplattingSolidColorMaterialPlugin.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport type { UniformBuffer } from \"../uniformBuffer\";\r\nimport type { MaterialDefines } from \"../materialDefines\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { GaussianSplattingMaxPartCount } from \"./gaussianSplattingMaterial\";\r\nimport type { GaussianSplattingMaterial } from \"./gaussianSplattingMaterial\";\r\n\r\n/**\r\n * Plugin for GaussianSplattingMaterial that replaces per-splat colors with a\r\n * solid color per compound-mesh part. Each part index maps to a single Color3\r\n * value, which is looked up in a uniform array in the fragment shader.\r\n */\r\nexport class GaussianSplattingSolidColorMaterialPlugin extends MaterialPluginBase {\r\n private _partColors: Color3[];\r\n private _maxPartCount: number;\r\n\r\n /**\r\n * Creates a new GaussianSplatSolidColorPlugin.\r\n * @param material The GaussianSplattingMaterial to attach the plugin to.\r\n * @param partColors A map from part index to the solid Color3 for that part.\r\n * @param maxPartCount The maximum number of parts supported. This determines the size of the uniform array.\r\n */\r\n constructor(material: GaussianSplattingMaterial, partColors: Color3[], maxPartCount = GaussianSplattingMaxPartCount) {\r\n super(material, \"GaussianSplatSolidColor\", 200);\r\n\r\n this._partColors = partColors;\r\n this._maxPartCount = maxPartCount;\r\n this._enable(true);\r\n }\r\n\r\n /**\r\n * Updates the part colors dynamically.\r\n * @param partColors A map from part index to the solid Color3 for that part.\r\n */\r\n public updatePartColors(partColors: Color3[]): void {\r\n this._partColors = partColors;\r\n }\r\n\r\n // --- Plugin overrides ---\r\n\r\n /**\r\n * @returns the class name\r\n */\r\n public override getClassName(): string {\r\n return \"GaussianSplattingSolidColorMaterialPlugin\";\r\n }\r\n\r\n /**\r\n * Indicates this plugin supports both GLSL and WGSL.\r\n * @param shaderLanguage the shader language to check\r\n * @returns true for GLSL and WGSL\r\n */\r\n public override isCompatible(shaderLanguage: ShaderLanguage): boolean {\r\n switch (shaderLanguage) {\r\n case ShaderLanguage.GLSL:\r\n case ShaderLanguage.WGSL:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Always ready — no textures or async resources to wait on.\r\n * @param _defines the defines\r\n * @param _scene the scene\r\n * @param _engine the engine\r\n * @param _subMesh the submesh\r\n * @returns true\r\n */\r\n public override isReadyForSubMesh(_defines: MaterialDefines, _scene: Scene, _engine: AbstractEngine, _subMesh: SubMesh): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Returns custom shader code fragments to inject solid-color rendering.\r\n *\r\n * @param shaderType \"vertex\" or \"fragment\"\r\n * @param shaderLanguage the shader language to use (default: GLSL)\r\n * @returns null or a map of injection point names to code strings\r\n */\r\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL): Nullable<{ [pointName: string]: string }> {\r\n const maxPartCount = this._maxPartCount ?? GaussianSplattingMaxPartCount;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n return this._getCustomCodeWGSL(shaderType, maxPartCount);\r\n }\r\n return this._getCustomCodeGLSL(shaderType, maxPartCount);\r\n }\r\n\r\n private _getCustomCodeGLSL(shaderType: string, maxPartCount: number): Nullable<{ [pointName: string]: string }> {\r\n if (shaderType === \"vertex\") {\r\n return {\r\n CUSTOM_VERTEX_DEFINITIONS: `varying float vPartIndex;`,\r\n CUSTOM_VERTEX_UPDATE: `\r\n#if IS_COMPOUND\r\n vPartIndex = float(splat.partIndex);\r\n#else\r\n vPartIndex = 0.0;\r\n#endif\r\n `,\r\n };\r\n } else if (shaderType === \"fragment\") {\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\nvarying float vPartIndex;\r\nuniform vec3 partColors[${maxPartCount}];\r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\nint partIdx = int(vPartIndex + 0.5);\r\nfinalColor = vec4(partColors[partIdx], finalColor.w);\r\n `,\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n private _getCustomCodeWGSL(shaderType: string, maxPartCount: number): Nullable<{ [pointName: string]: string }> {\r\n if (shaderType === \"vertex\") {\r\n return {\r\n CUSTOM_VERTEX_DEFINITIONS: `varying vPartIndex: f32;`,\r\n CUSTOM_VERTEX_UPDATE: `\r\n#if IS_COMPOUND\r\n vertexOutputs.vPartIndex = f32(splat.partIndex);\r\n#else\r\n vertexOutputs.vPartIndex = 0.0;\r\n#endif\r\n `,\r\n };\r\n } else if (shaderType === \"fragment\") {\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\nvarying vPartIndex: f32;\r\nuniform partColors: array<vec3f, ${maxPartCount}>;\r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\nvar partIdx: i32 = i32(fragmentInputs.vPartIndex + 0.5);\r\nfinalColor = vec4f(uniforms.partColors[partIdx], finalColor.w);\r\n `,\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Registers the `partColors` uniform with the engine so that\r\n * the Effect can resolve its location.\r\n * @returns uniform descriptions\r\n */\r\n public override getUniforms(): {\r\n ubo?: Array<{ name: string; size?: number; type?: string; arraySize?: number }>;\r\n vertex?: string;\r\n fragment?: string;\r\n externalUniforms?: string[];\r\n } {\r\n return {\r\n externalUniforms: [\"partColors\"],\r\n };\r\n }\r\n\r\n /**\r\n * Binds the `partColors` uniform array each frame.\r\n * @param _uniformBuffer the uniform buffer (unused — we bind directly on the effect)\r\n * @param _scene the current scene\r\n * @param _engine the current engine\r\n * @param subMesh the submesh being rendered\r\n */\r\n public override bindForSubMesh(_uniformBuffer: UniformBuffer, _scene: Scene, _engine: AbstractEngine, subMesh: SubMesh): void {\r\n const effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n\r\n const colorArray: number[] = [];\r\n for (let i = 0; i < this._maxPartCount; i++) {\r\n const color = this._partColors[i] ?? new Color3(0, 0, 0);\r\n colorArray.push(color.r, color.g, color.b);\r\n }\r\n\r\n effect.setArray3(\"partColors\", colorArray);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GaussianSplattingSolidColorMaterialPlugin\", GaussianSplattingSolidColorMaterialPlugin);\r\n"]}
1
+ {"version":3,"file":"gaussianSplattingSolidColorMaterialPlugin.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport type { UniformBuffer } from \"../uniformBuffer\";\r\nimport type { MaterialDefines } from \"../materialDefines\";\r\nimport { serialize, expandToProperty } from \"../../Misc/decorators\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { GaussianSplattingMaxPartCount } from \"./gaussianSplattingMaterial\";\r\nimport type { GaussianSplattingMaterial } from \"./gaussianSplattingMaterial\";\r\n\r\n/**\r\n * Plugin for GaussianSplattingMaterial that replaces per-splat colors with a\r\n * solid color per compound-mesh part. Each part index maps to a single Color3\r\n * value, which is looked up in a uniform array in the fragment shader.\r\n */\r\nexport class GaussianSplattingSolidColorMaterialPlugin extends MaterialPluginBase {\r\n private _partColors: Color3[];\r\n private _maxPartCount: number;\r\n private _isEnabled = true;\r\n /**\r\n * Whether the solid-color override is active. When false, splats\r\n * render with their original per-splat colors.\r\n * Toggled via a shader uniform so no recompilation is required.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_onIsEnabledChanged\")\r\n public isEnabled = true;\r\n\r\n /** @internal */\r\n public _onIsEnabledChanged(): void {\r\n // Intentional no-op: isEnabled is applied via a uniform in\r\n // bindForSubMesh, so no dirty-marking or recompilation is needed.\r\n }\r\n\r\n /**\r\n * Creates a new GaussianSplatSolidColorPlugin.\r\n * @param material The GaussianSplattingMaterial to attach the plugin to.\r\n * @param partColors A map from part index to the solid Color3 for that part.\r\n * @param maxPartCount The maximum number of parts supported. This determines the size of the uniform array.\r\n */\r\n constructor(material: GaussianSplattingMaterial, partColors: Color3[], maxPartCount = GaussianSplattingMaxPartCount) {\r\n super(material, \"GaussianSplatSolidColor\", 200);\r\n\r\n this._partColors = partColors;\r\n this._maxPartCount = maxPartCount;\r\n this._enable(true);\r\n }\r\n\r\n /**\r\n * Updates the part colors dynamically.\r\n * @param partColors A map from part index to the solid Color3 for that part.\r\n */\r\n public updatePartColors(partColors: Color3[]): void {\r\n this._partColors = partColors;\r\n }\r\n\r\n // --- Plugin overrides ---\r\n\r\n /**\r\n * @returns the class name\r\n */\r\n public override getClassName(): string {\r\n return \"GaussianSplattingSolidColorMaterialPlugin\";\r\n }\r\n\r\n /**\r\n * Indicates this plugin supports both GLSL and WGSL.\r\n * @param shaderLanguage the shader language to check\r\n * @returns true for GLSL and WGSL\r\n */\r\n public override isCompatible(shaderLanguage: ShaderLanguage): boolean {\r\n switch (shaderLanguage) {\r\n case ShaderLanguage.GLSL:\r\n case ShaderLanguage.WGSL:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Always ready — no textures or async resources to wait on.\r\n * @param _defines the defines\r\n * @param _scene the scene\r\n * @param _engine the engine\r\n * @param _subMesh the submesh\r\n * @returns true\r\n */\r\n public override isReadyForSubMesh(_defines: MaterialDefines, _scene: Scene, _engine: AbstractEngine, _subMesh: SubMesh): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Returns custom shader code fragments to inject solid-color rendering.\r\n *\r\n * @param shaderType \"vertex\" or \"fragment\"\r\n * @param shaderLanguage the shader language to use (default: GLSL)\r\n * @returns null or a map of injection point names to code strings\r\n */\r\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL): Nullable<{ [pointName: string]: string }> {\r\n const maxPartCount = this._maxPartCount ?? GaussianSplattingMaxPartCount;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n return this._getCustomCodeWGSL(shaderType, maxPartCount);\r\n }\r\n return this._getCustomCodeGLSL(shaderType, maxPartCount);\r\n }\r\n\r\n private _getCustomCodeGLSL(shaderType: string, maxPartCount: number): Nullable<{ [pointName: string]: string }> {\r\n if (shaderType === \"vertex\") {\r\n return {\r\n CUSTOM_VERTEX_DEFINITIONS: `varying float vPartIndex;`,\r\n CUSTOM_VERTEX_UPDATE: `\r\n#if IS_COMPOUND\r\n vPartIndex = float(splat.partIndex);\r\n#else\r\n vPartIndex = 0.0;\r\n#endif\r\n `,\r\n };\r\n } else if (shaderType === \"fragment\") {\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\nvarying float vPartIndex;\r\nuniform float solidColorEnabled;\r\nuniform vec3 partColors[${maxPartCount}];\r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\nif (solidColorEnabled > 0.5) {\r\n int partIdx = int(vPartIndex + 0.5);\r\n finalColor = vec4(partColors[partIdx], finalColor.w);\r\n}\r\n `,\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n private _getCustomCodeWGSL(shaderType: string, maxPartCount: number): Nullable<{ [pointName: string]: string }> {\r\n if (shaderType === \"vertex\") {\r\n return {\r\n CUSTOM_VERTEX_DEFINITIONS: `varying vPartIndex: f32;`,\r\n CUSTOM_VERTEX_UPDATE: `\r\n#if IS_COMPOUND\r\n vertexOutputs.vPartIndex = f32(splat.partIndex);\r\n#else\r\n vertexOutputs.vPartIndex = 0.0;\r\n#endif\r\n `,\r\n };\r\n } else if (shaderType === \"fragment\") {\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\nvarying vPartIndex: f32;\r\nuniform solidColorEnabled: f32;\r\nuniform partColors: array<vec3f, ${maxPartCount}>;\r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\nif (uniforms.solidColorEnabled > 0.5) {\r\n var partIdx: i32 = i32(fragmentInputs.vPartIndex + 0.5);\r\n finalColor = vec4f(uniforms.partColors[partIdx], finalColor.w);\r\n}\r\n `,\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Registers the plugin uniforms with the engine so that\r\n * the Effect can resolve their locations.\r\n * @returns uniform descriptions\r\n */\r\n public override getUniforms(): {\r\n ubo?: Array<{ name: string; size?: number; type?: string; arraySize?: number }>;\r\n vertex?: string;\r\n fragment?: string;\r\n externalUniforms?: string[];\r\n } {\r\n return {\r\n externalUniforms: [\"partColors\", \"solidColorEnabled\"],\r\n };\r\n }\r\n\r\n /**\r\n * Binds the plugin uniforms each frame.\r\n * @param _uniformBuffer the uniform buffer (unused — we bind directly on the effect)\r\n * @param _scene the current scene\r\n * @param _engine the current engine\r\n * @param subMesh the submesh being rendered\r\n */\r\n public override bindForSubMesh(_uniformBuffer: UniformBuffer, _scene: Scene, _engine: AbstractEngine, subMesh: SubMesh): void {\r\n const effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n\r\n effect.setFloat(\"solidColorEnabled\", this._isEnabled ? 1.0 : 0.0);\r\n\r\n const colorArray: number[] = [];\r\n for (let i = 0; i < this._maxPartCount; i++) {\r\n const color = this._partColors[i] ?? new Color3(0, 0, 0);\r\n colorArray.push(color.r, color.g, color.b);\r\n }\r\n\r\n effect.setArray3(\"partColors\", colorArray);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GaussianSplattingSolidColorMaterialPlugin\", GaussianSplattingSolidColorMaterialPlugin);\r\n"]}
@@ -16,10 +16,6 @@ import type { AbstractEngine } from "../Engines/abstractEngine.js";
16
16
  * https://www.khronos.org/opengl/wiki/Uniform_Buffer_Object
17
17
  */
18
18
  export declare class UniformBuffer {
19
- /** @internal */
20
- static _UpdatedUbosInFrame: {
21
- [name: string]: number;
22
- };
23
19
  private _engine;
24
20
  private _buffer;
25
21
  private _buffers;
@@ -433,12 +433,6 @@ export class UniformBuffer {
433
433
  }
434
434
  this._bufferUpdatedLastFrame = true;
435
435
  this._engine.updateUniformBuffer(this._buffer, this._bufferData);
436
- if (this._engine._features._collectUbosUpdatedInFrame) {
437
- if (!UniformBuffer._UpdatedUbosInFrame[this._name]) {
438
- UniformBuffer._UpdatedUbosInFrame[this._name] = 0;
439
- }
440
- UniformBuffer._UpdatedUbosInFrame[this._name]++;
441
- }
442
436
  this._needSync = false;
443
437
  this._createBufferOnWrite = this._trackUBOsInFrame;
444
438
  }
@@ -923,8 +917,6 @@ export class UniformBuffer {
923
917
  }
924
918
  }
925
919
  }
926
- /** @internal */
927
- UniformBuffer._UpdatedUbosInFrame = {};
928
920
  // Pool for avoiding memory leaks
929
921
  UniformBuffer._MAX_UNIFORM_SIZE = 256;
930
922
  UniformBuffer._TempBuffer = new Float32Array(UniformBuffer._MAX_UNIFORM_SIZE);