@onerjs/core 8.53.4 → 8.53.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (841) hide show
  1. package/Animations/animationGroup.d.ts +0 -1
  2. package/Animations/animationGroup.js +0 -1
  3. package/Animations/animationGroup.js.map +1 -1
  4. package/Animations/animationGroup.pure.js +2 -0
  5. package/Animations/animationGroup.pure.js.map +1 -1
  6. package/Animations/runtimeAnimation.js +11 -0
  7. package/Animations/runtimeAnimation.js.map +1 -1
  8. package/Audio/audioSceneComponent.pure.js +1 -1
  9. package/AudioV2/abstractAudio/abstractSound.d.ts +2 -1
  10. package/AudioV2/abstractAudio/abstractSound.js +7 -2
  11. package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
  12. package/AudioV2/abstractAudio/abstractSoundInstance.d.ts +3 -1
  13. package/AudioV2/abstractAudio/abstractSoundInstance.js.map +1 -1
  14. package/AudioV2/abstractAudio/staticSound.d.ts +6 -0
  15. package/AudioV2/abstractAudio/staticSound.js +17 -1
  16. package/AudioV2/abstractAudio/staticSound.js.map +1 -1
  17. package/AudioV2/abstractAudio/staticSoundInstance.d.ts +4 -2
  18. package/AudioV2/abstractAudio/staticSoundInstance.js.map +1 -1
  19. package/AudioV2/abstractAudio/streamingSound.d.ts +6 -0
  20. package/AudioV2/abstractAudio/streamingSound.js +9 -1
  21. package/AudioV2/abstractAudio/streamingSound.js.map +1 -1
  22. package/AudioV2/webAudio/webAudioStaticSound.d.ts +7 -1
  23. package/AudioV2/webAudio/webAudioStaticSound.js +56 -8
  24. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  25. package/AudioV2/webAudio/webAudioStreamingSound.d.ts +3 -1
  26. package/AudioV2/webAudio/webAudioStreamingSound.js +16 -4
  27. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  28. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +2 -2
  29. package/BakedVertexAnimation/bakedVertexAnimationManager.js +151 -121
  30. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  31. package/Behaviors/Cameras/interpolatingBehavior.d.ts +17 -2
  32. package/Behaviors/Cameras/interpolatingBehavior.js +53 -23
  33. package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -1
  34. package/Bones/bone.pure.js +3 -3
  35. package/Buffers/buffer.pure.js +0 -12
  36. package/Buffers/buffer.pure.js.map +1 -1
  37. package/Cameras/Inputs/BaseCameraMouseWheelInput.js +141 -126
  38. package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
  39. package/Cameras/Inputs/BaseCameraPointersInput.d.ts +2 -1
  40. package/Cameras/Inputs/BaseCameraPointersInput.js +290 -277
  41. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  42. package/Cameras/Inputs/arcRotateCameraGamepadInput.js +115 -102
  43. package/Cameras/Inputs/arcRotateCameraGamepadInput.js.map +1 -1
  44. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.d.ts +3 -0
  45. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +334 -273
  46. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
  47. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +273 -258
  48. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  49. package/Cameras/Inputs/arcRotateCameraPointersInput.js +237 -213
  50. package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
  51. package/Cameras/Inputs/flyCameraKeyboardInput.js +199 -168
  52. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  53. package/Cameras/Inputs/flyCameraMouseInput.js +243 -229
  54. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  55. package/Cameras/Inputs/followCameraKeyboardMoveInput.js +311 -266
  56. package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
  57. package/Cameras/Inputs/followCameraMouseWheelInput.js +139 -119
  58. package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
  59. package/Cameras/Inputs/followCameraPointersInput.js +239 -203
  60. package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
  61. package/Cameras/Inputs/freeCameraGamepadInput.js +127 -114
  62. package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
  63. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +278 -244
  64. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  65. package/Cameras/Inputs/freeCameraMouseInput.js +216 -202
  66. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  67. package/Cameras/Inputs/freeCameraMouseWheelInput.js +368 -353
  68. package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
  69. package/Cameras/Inputs/freeCameraTouchInput.js +185 -172
  70. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  71. package/Cameras/Inputs/geospatialCameraKeyboardInput.d.ts +2 -0
  72. package/Cameras/Inputs/geospatialCameraKeyboardInput.js +291 -246
  73. package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -1
  74. package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +11 -1
  75. package/Cameras/Inputs/geospatialCameraPointersInput.js +18 -2
  76. package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
  77. package/Cameras/Inputs/orbitCameraPointersInput.js +112 -96
  78. package/Cameras/Inputs/orbitCameraPointersInput.js.map +1 -1
  79. package/Cameras/VR/vrExperienceHelper.d.ts +0 -2
  80. package/Cameras/VR/vrExperienceHelper.js +0 -2
  81. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  82. package/Cameras/VR/vrExperienceHelper.pure.js +5 -0
  83. package/Cameras/VR/vrExperienceHelper.pure.js.map +1 -1
  84. package/Cameras/arcRotateCamera.pure.js +1559 -1479
  85. package/Cameras/arcRotateCamera.pure.js.map +1 -1
  86. package/Cameras/camera.pure.js +1225 -1178
  87. package/Cameras/camera.pure.js.map +1 -1
  88. package/Cameras/flyCamera.pure.js +369 -351
  89. package/Cameras/flyCamera.pure.js.map +1 -1
  90. package/Cameras/followCamera.pure.js +229 -192
  91. package/Cameras/followCamera.pure.js.map +1 -1
  92. package/Cameras/freeCamera.pure.js +373 -351
  93. package/Cameras/freeCamera.pure.js.map +1 -1
  94. package/Cameras/geospatialCamera.pure.d.ts +30 -7
  95. package/Cameras/geospatialCamera.pure.js +502 -457
  96. package/Cameras/geospatialCamera.pure.js.map +1 -1
  97. package/Cameras/geospatialCameraMovement.js +2 -2
  98. package/Cameras/geospatialCameraMovement.js.map +1 -1
  99. package/Cameras/targetCamera.pure.d.ts +7 -0
  100. package/Cameras/targetCamera.pure.js +550 -509
  101. package/Cameras/targetCamera.pure.js.map +1 -1
  102. package/Cameras/universalCamera.pure.js +98 -85
  103. package/Cameras/universalCamera.pure.js.map +1 -1
  104. package/Collisions/gpuPicker.d.ts +111 -4
  105. package/Collisions/gpuPicker.js +696 -119
  106. package/Collisions/gpuPicker.js.map +1 -1
  107. package/Compute/computeShader.pure.js +372 -355
  108. package/Compute/computeShader.pure.js.map +1 -1
  109. package/Culling/Helper/transformFeedbackBoundingHelper.pure.js +2 -2
  110. package/Decorators/nodeDecorator.d.ts +11 -1
  111. package/Decorators/nodeDecorator.js +43 -6
  112. package/Decorators/nodeDecorator.js.map +1 -1
  113. package/Engines/AbstractEngine/abstractEngine.loadFile.pure.js +8 -0
  114. package/Engines/AbstractEngine/abstractEngine.loadFile.pure.js.map +1 -1
  115. package/Engines/Native/nativeHelpers.js +15 -0
  116. package/Engines/Native/nativeHelpers.js.map +1 -1
  117. package/Engines/Native/nativeInterfaces.d.ts +7 -2
  118. package/Engines/Native/nativeInterfaces.js.map +1 -1
  119. package/Engines/Native/nativeRenderTargetWrapper.d.ts +5 -0
  120. package/Engines/Native/nativeRenderTargetWrapper.js +35 -1
  121. package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
  122. package/Engines/Processors/shaderProcessor.js +5 -3
  123. package/Engines/Processors/shaderProcessor.js.map +1 -1
  124. package/Engines/WebGPU/Extensions/engine.videoTexture.pure.js +16 -3
  125. package/Engines/WebGPU/Extensions/engine.videoTexture.pure.js.map +1 -1
  126. package/Engines/WebGPU/webgpuClearQuad.pure.js +7 -1
  127. package/Engines/WebGPU/webgpuClearQuad.pure.js.map +1 -1
  128. package/Engines/abstractEngine.functions.d.ts +8 -2
  129. package/Engines/abstractEngine.functions.js +12 -4
  130. package/Engines/abstractEngine.functions.js.map +1 -1
  131. package/Engines/abstractEngine.pure.d.ts +20 -1
  132. package/Engines/abstractEngine.pure.js +21 -134
  133. package/Engines/abstractEngine.pure.js.map +1 -1
  134. package/Engines/engine.d.ts +208 -0
  135. package/Engines/engine.pure.js +0 -15
  136. package/Engines/engine.pure.js.map +1 -1
  137. package/Engines/nullEngine.pure.d.ts +66 -0
  138. package/Engines/nullEngine.pure.js +97 -0
  139. package/Engines/nullEngine.pure.js.map +1 -1
  140. package/Engines/thinEngine.pure.d.ts +0 -13
  141. package/Engines/thinEngine.pure.js +4 -23
  142. package/Engines/thinEngine.pure.js.map +1 -1
  143. package/Engines/thinNativeEngine.d.ts +0 -1
  144. package/Engines/thinNativeEngine.js +0 -1
  145. package/Engines/thinNativeEngine.js.map +1 -1
  146. package/Engines/thinNativeEngine.pure.d.ts +27 -0
  147. package/Engines/thinNativeEngine.pure.js +383 -17
  148. package/Engines/thinNativeEngine.pure.js.map +1 -1
  149. package/Engines/webgpuEngine.d.ts +1 -0
  150. package/Engines/webgpuEngine.js +1 -0
  151. package/Engines/webgpuEngine.js.map +1 -1
  152. package/Engines/webgpuEngine.pure.d.ts +9 -0
  153. package/Engines/webgpuEngine.pure.js +7 -0
  154. package/Engines/webgpuEngine.pure.js.map +1 -1
  155. package/FlowGraph/flowGraph.js +9 -0
  156. package/FlowGraph/flowGraph.js.map +1 -1
  157. package/FlowGraph/flowGraphContext.js +597 -584
  158. package/FlowGraph/flowGraphContext.js.map +1 -1
  159. package/FlowGraph/flowGraphDataConnection.pure.d.ts +14 -0
  160. package/FlowGraph/flowGraphDataConnection.pure.js +38 -1
  161. package/FlowGraph/flowGraphDataConnection.pure.js.map +1 -1
  162. package/FlowGraph/serialization.d.ts +11 -0
  163. package/FlowGraph/serialization.js +11 -1
  164. package/FlowGraph/serialization.js.map +1 -1
  165. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.pure.js +182 -170
  166. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.pure.js.map +1 -1
  167. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.pure.js +196 -184
  168. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.pure.js.map +1 -1
  169. package/FrameGraph/Node/Blocks/Layers/selectionOutlineLayerBlock.pure.js +222 -210
  170. package/FrameGraph/Node/Blocks/Layers/selectionOutlineLayerBlock.pure.js.map +1 -1
  171. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +123 -111
  172. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -1
  173. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js +158 -146
  174. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js.map +1 -1
  175. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.pure.js +63 -51
  176. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.pure.js.map +1 -1
  177. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.pure.js +122 -110
  178. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.pure.js.map +1 -1
  179. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.pure.js +76 -64
  180. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.pure.js.map +1 -1
  181. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.pure.js +89 -77
  182. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.pure.js.map +1 -1
  183. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.pure.js +134 -122
  184. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.pure.js.map +1 -1
  185. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.pure.js +58 -46
  186. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.pure.js.map +1 -1
  187. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.pure.js +107 -95
  188. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.pure.js.map +1 -1
  189. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.pure.js +181 -169
  190. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.pure.js.map +1 -1
  191. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.pure.js +63 -51
  192. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.pure.js.map +1 -1
  193. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.pure.js +63 -51
  194. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.pure.js.map +1 -1
  195. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.pure.js +76 -64
  196. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.pure.js.map +1 -1
  197. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.pure.js +246 -234
  198. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.pure.js.map +1 -1
  199. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.pure.js +108 -96
  200. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.pure.js.map +1 -1
  201. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.pure.js +87 -75
  202. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.pure.js.map +1 -1
  203. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.pure.js +76 -64
  204. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.pure.js.map +1 -1
  205. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.pure.js +313 -301
  206. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.pure.js.map +1 -1
  207. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.pure.js +502 -490
  208. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.pure.js.map +1 -1
  209. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.pure.js +147 -135
  210. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.pure.js.map +1 -1
  211. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.pure.js +90 -78
  212. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.pure.js.map +1 -1
  213. package/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.pure.js +179 -167
  214. package/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.pure.js.map +1 -1
  215. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +462 -451
  216. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  217. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js +265 -253
  218. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js.map +1 -1
  219. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.pure.js +204 -192
  220. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.pure.js.map +1 -1
  221. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +611 -550
  222. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
  223. package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.pure.js +320 -308
  224. package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.pure.js.map +1 -1
  225. package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.pure.js +87 -75
  226. package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.pure.js.map +1 -1
  227. package/FrameGraph/Node/Blocks/Textures/clearBlock.pure.js +154 -142
  228. package/FrameGraph/Node/Blocks/Textures/clearBlock.pure.js.map +1 -1
  229. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.pure.js +150 -138
  230. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.pure.js.map +1 -1
  231. package/FrameGraph/Node/Blocks/inputBlock.pure.js +270 -256
  232. package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
  233. package/FrameGraph/Node/Blocks/lightingVolumeBlock.pure.js +95 -83
  234. package/FrameGraph/Node/Blocks/lightingVolumeBlock.pure.js.map +1 -1
  235. package/FrameGraph/Node/nodeRenderGraph.js +715 -693
  236. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  237. package/FrameGraph/Node/nodeRenderGraphBlock.js +548 -533
  238. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  239. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +2 -2
  240. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +43 -51
  241. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -1
  242. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.d.ts +0 -1
  243. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js +0 -1
  244. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js.map +1 -1
  245. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.d.ts +0 -1
  246. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js +66 -35
  247. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js.map +1 -1
  248. package/Helpers/environmentHelper.js +2 -2
  249. package/Helpers/environmentHelper.js.map +1 -1
  250. package/Layers/effectLayer.js +529 -519
  251. package/Layers/effectLayer.js.map +1 -1
  252. package/Layers/glowLayer.pure.js +428 -413
  253. package/Layers/glowLayer.pure.js.map +1 -1
  254. package/Layers/highlightLayer.pure.js +473 -458
  255. package/Layers/highlightLayer.pure.js.map +1 -1
  256. package/Layers/selectionOutlineLayer.pure.js +360 -345
  257. package/Layers/selectionOutlineLayer.pure.js.map +1 -1
  258. package/Lights/Clustered/clusteredLightContainer.pure.d.ts +1 -1
  259. package/Lights/Clustered/clusteredLightContainer.pure.js +583 -558
  260. package/Lights/Clustered/clusteredLightContainer.pure.js.map +1 -1
  261. package/Lights/Shadows/shadowGenerator.js +6 -1
  262. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  263. package/Lights/areaLight.pure.js +61 -39
  264. package/Lights/areaLight.pure.js.map +1 -1
  265. package/Lights/directionalLight.pure.js +308 -284
  266. package/Lights/directionalLight.pure.js.map +1 -1
  267. package/Lights/hemisphericLight.pure.js +123 -104
  268. package/Lights/hemisphericLight.pure.js.map +1 -1
  269. package/Lights/light.d.ts +5 -3
  270. package/Lights/light.js +869 -827
  271. package/Lights/light.js.map +1 -1
  272. package/Lights/pointLight.pure.js +185 -174
  273. package/Lights/pointLight.pure.js.map +1 -1
  274. package/Lights/rectAreaLight.pure.d.ts +17 -0
  275. package/Lights/rectAreaLight.pure.js +238 -159
  276. package/Lights/rectAreaLight.pure.js.map +1 -1
  277. package/Lights/shadowLight.js +280 -268
  278. package/Lights/shadowLight.js.map +1 -1
  279. package/Lights/spotLight.pure.js +460 -427
  280. package/Lights/spotLight.pure.js.map +1 -1
  281. package/Loading/Plugins/babylonFileLoader.pure.js +17 -5
  282. package/Loading/Plugins/babylonFileLoader.pure.js.map +1 -1
  283. package/Loading/sceneLoader.d.ts +5 -1
  284. package/Loading/sceneLoader.js +299 -402
  285. package/Loading/sceneLoader.js.map +1 -1
  286. package/Materials/Background/backgroundMaterial.pure.d.ts +18 -18
  287. package/Materials/Background/backgroundMaterial.pure.js +949 -794
  288. package/Materials/Background/backgroundMaterial.pure.js.map +1 -1
  289. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.d.ts +15 -0
  290. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +34 -1
  291. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
  292. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +9 -0
  293. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +26 -2
  294. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
  295. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.d.ts +2 -1
  296. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +169 -149
  297. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
  298. package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js +1 -1
  299. package/Materials/Node/Blocks/Dual/lightBlock.pure.js +442 -429
  300. package/Materials/Node/Blocks/Dual/lightBlock.pure.js.map +1 -1
  301. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.pure.js +396 -383
  302. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.pure.js.map +1 -1
  303. package/Materials/Node/Blocks/Dual/sceneDepthBlock.pure.js +237 -220
  304. package/Materials/Node/Blocks/Dual/sceneDepthBlock.pure.js.map +1 -1
  305. package/Materials/Node/Blocks/Dual/textureBlock.pure.js +1 -1
  306. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.pure.js +150 -133
  307. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.pure.js.map +1 -1
  308. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +265 -250
  309. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
  310. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.pure.js +159 -142
  311. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.pure.js.map +1 -1
  312. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js +214 -201
  313. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js.map +1 -1
  314. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.pure.js +419 -400
  315. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.pure.js.map +1 -1
  316. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +3 -1
  317. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
  318. package/Materials/Node/Blocks/PBR/clearCoatBlock.pure.js +302 -289
  319. package/Materials/Node/Blocks/PBR/clearCoatBlock.pure.js.map +1 -1
  320. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +1327 -1272
  321. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
  322. package/Materials/Node/Blocks/PBR/reflectionBlock.pure.js +352 -337
  323. package/Materials/Node/Blocks/PBR/reflectionBlock.pure.js.map +1 -1
  324. package/Materials/Node/Blocks/PBR/refractionBlock.pure.js +297 -277
  325. package/Materials/Node/Blocks/PBR/refractionBlock.pure.js.map +1 -1
  326. package/Materials/Node/Blocks/PBR/sheenBlock.pure.js +146 -131
  327. package/Materials/Node/Blocks/PBR/sheenBlock.pure.js.map +1 -1
  328. package/Materials/Node/Blocks/PBR/subSurfaceBlock.pure.js +158 -145
  329. package/Materials/Node/Blocks/PBR/subSurfaceBlock.pure.js.map +1 -1
  330. package/Materials/Node/Blocks/clampBlock.pure.js +92 -77
  331. package/Materials/Node/Blocks/clampBlock.pure.js.map +1 -1
  332. package/Materials/Node/Blocks/cloudBlock.pure.js +145 -132
  333. package/Materials/Node/Blocks/cloudBlock.pure.js.map +1 -1
  334. package/Materials/Node/Blocks/conditionalBlock.pure.js +182 -169
  335. package/Materials/Node/Blocks/conditionalBlock.pure.js.map +1 -1
  336. package/Materials/Node/Blocks/curveBlock.pure.js +259 -246
  337. package/Materials/Node/Blocks/curveBlock.pure.js.map +1 -1
  338. package/Materials/Node/Blocks/debugBlock.pure.js +119 -106
  339. package/Materials/Node/Blocks/debugBlock.pure.js.map +1 -1
  340. package/Materials/Node/Blocks/loopBlock.pure.js +123 -110
  341. package/Materials/Node/Blocks/loopBlock.pure.js.map +1 -1
  342. package/Materials/Node/Blocks/meshAttributeExistsBlock.pure.js +185 -172
  343. package/Materials/Node/Blocks/meshAttributeExistsBlock.pure.js.map +1 -1
  344. package/Materials/Node/Blocks/remapBlock.pure.js +127 -112
  345. package/Materials/Node/Blocks/remapBlock.pure.js.map +1 -1
  346. package/Materials/Node/Blocks/transformBlock.pure.js +196 -185
  347. package/Materials/Node/Blocks/transformBlock.pure.js.map +1 -1
  348. package/Materials/Node/Blocks/triPlanarBlock.pure.js +451 -438
  349. package/Materials/Node/Blocks/triPlanarBlock.pure.js.map +1 -1
  350. package/Materials/Node/Blocks/trigonometryBlock.pure.js +184 -171
  351. package/Materials/Node/Blocks/trigonometryBlock.pure.js.map +1 -1
  352. package/Materials/Node/Blocks/waveBlock.pure.js +97 -84
  353. package/Materials/Node/Blocks/waveBlock.pure.js.map +1 -1
  354. package/Materials/Node/Blocks/worleyNoise3DBlock.pure.js +276 -263
  355. package/Materials/Node/Blocks/worleyNoise3DBlock.pure.js.map +1 -1
  356. package/Materials/Node/nodeMaterial.pure.js +1765 -1737
  357. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  358. package/Materials/Node/nodeMaterialBuildState.d.ts +3 -3
  359. package/Materials/PBR/openpbrMaterial.pure.d.ts +102 -102
  360. package/Materials/PBR/openpbrMaterial.pure.js +3115 -2243
  361. package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
  362. package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +3 -3
  363. package/Materials/PBR/pbrAnisotropicConfiguration.js +255 -227
  364. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  365. package/Materials/PBR/pbrBRDFConfiguration.d.ts +9 -9
  366. package/Materials/PBR/pbrBRDFConfiguration.js +203 -155
  367. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  368. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +1 -1
  369. package/Materials/PBR/pbrBaseMaterial.pure.js +1751 -1736
  370. package/Materials/PBR/pbrBaseMaterial.pure.js.map +1 -1
  371. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +13 -13
  372. package/Materials/PBR/pbrBaseSimpleMaterial.js +205 -117
  373. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  374. package/Materials/PBR/pbrClearCoatConfiguration.d.ts +9 -9
  375. package/Materials/PBR/pbrClearCoatConfiguration.js +464 -406
  376. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  377. package/Materials/PBR/pbrIridescenceConfiguration.d.ts +3 -3
  378. package/Materials/PBR/pbrIridescenceConfiguration.js +271 -239
  379. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  380. package/Materials/PBR/pbrMaterial.pure.d.ts +66 -66
  381. package/Materials/PBR/pbrMaterial.pure.js +1041 -685
  382. package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
  383. package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.d.ts +5 -5
  384. package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.js +176 -115
  385. package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.js.map +1 -1
  386. package/Materials/PBR/pbrSheenConfiguration.d.ts +7 -7
  387. package/Materials/PBR/pbrSheenConfiguration.js +314 -270
  388. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  389. package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.d.ts +5 -5
  390. package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.js +172 -117
  391. package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.js.map +1 -1
  392. package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +16 -16
  393. package/Materials/PBR/pbrSubSurfaceConfiguration.js +864 -764
  394. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  395. package/Materials/Textures/HTML/htmlInCanvasPolyfill.d.ts +43 -0
  396. package/Materials/Textures/HTML/htmlInCanvasPolyfill.js +64 -0
  397. package/Materials/Textures/HTML/htmlInCanvasPolyfill.js.map +1 -0
  398. package/Materials/Textures/HTML/htmlInteractionManager.d.ts +69 -0
  399. package/Materials/Textures/HTML/htmlInteractionManager.js +130 -0
  400. package/Materials/Textures/HTML/htmlInteractionManager.js.map +1 -0
  401. package/Materials/Textures/HTML/htmlRaycastInteractionManager.d.ts +84 -0
  402. package/Materials/Textures/HTML/htmlRaycastInteractionManager.js +246 -0
  403. package/Materials/Textures/HTML/htmlRaycastInteractionManager.js.map +1 -0
  404. package/Materials/Textures/HTML/htmlTexture.d.ts +148 -0
  405. package/Materials/Textures/HTML/htmlTexture.js +455 -0
  406. package/Materials/Textures/HTML/htmlTexture.js.map +1 -0
  407. package/Materials/Textures/HTML/index.d.ts +4 -0
  408. package/Materials/Textures/HTML/index.js +5 -0
  409. package/Materials/Textures/HTML/index.js.map +1 -0
  410. package/Materials/Textures/HTML/pure.d.ts +5 -0
  411. package/Materials/Textures/HTML/pure.js +6 -0
  412. package/Materials/Textures/HTML/pure.js.map +1 -0
  413. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +671 -643
  414. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  415. package/Materials/Textures/baseTexture.pure.js +880 -825
  416. package/Materials/Textures/baseTexture.pure.js.map +1 -1
  417. package/Materials/Textures/cubeTexture.d.ts +0 -1
  418. package/Materials/Textures/cubeTexture.js +0 -1
  419. package/Materials/Textures/cubeTexture.js.map +1 -1
  420. package/Materials/Textures/cubeTexture.pure.js +368 -333
  421. package/Materials/Textures/cubeTexture.pure.js.map +1 -1
  422. package/Materials/Textures/dynamicTexture.d.ts +0 -1
  423. package/Materials/Textures/dynamicTexture.js +0 -1
  424. package/Materials/Textures/dynamicTexture.js.map +1 -1
  425. package/Materials/Textures/dynamicTexture.pure.js +2 -0
  426. package/Materials/Textures/dynamicTexture.pure.js.map +1 -1
  427. package/Materials/Textures/htmlElementTexture.d.ts +0 -2
  428. package/Materials/Textures/htmlElementTexture.js +0 -2
  429. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  430. package/Materials/Textures/htmlElementTexture.pure.js +4 -0
  431. package/Materials/Textures/htmlElementTexture.pure.js.map +1 -1
  432. package/Materials/Textures/index.d.ts +1 -0
  433. package/Materials/Textures/index.js +1 -1
  434. package/Materials/Textures/index.js.map +1 -1
  435. package/Materials/Textures/multiRenderTarget.d.ts +0 -1
  436. package/Materials/Textures/multiRenderTarget.js +0 -1
  437. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  438. package/Materials/Textures/multiRenderTarget.pure.js +2 -0
  439. package/Materials/Textures/multiRenderTarget.pure.js.map +1 -1
  440. package/Materials/Textures/pure.d.ts +1 -0
  441. package/Materials/Textures/pure.js +1 -0
  442. package/Materials/Textures/pure.js.map +1 -1
  443. package/Materials/Textures/texture.pure.js +961 -923
  444. package/Materials/Textures/texture.pure.js.map +1 -1
  445. package/Materials/Textures/videoTexture.pure.d.ts +3 -0
  446. package/Materials/Textures/videoTexture.pure.js +450 -401
  447. package/Materials/Textures/videoTexture.pure.js.map +1 -1
  448. package/Materials/colorCurves.pure.js +510 -477
  449. package/Materials/colorCurves.pure.js.map +1 -1
  450. package/Materials/effect.pure.js +0 -7
  451. package/Materials/effect.pure.js.map +1 -1
  452. package/Materials/imageProcessing.js +12 -4
  453. package/Materials/imageProcessing.js.map +1 -1
  454. package/Materials/imageProcessingConfiguration.pure.js +647 -587
  455. package/Materials/imageProcessingConfiguration.pure.js.map +1 -1
  456. package/Materials/material.decalMapConfiguration.pure.d.ts +2 -2
  457. package/Materials/material.decalMapConfiguration.pure.js +149 -130
  458. package/Materials/material.decalMapConfiguration.pure.js.map +1 -1
  459. package/Materials/material.detailMapConfiguration.d.ts +3 -3
  460. package/Materials/material.detailMapConfiguration.js +213 -175
  461. package/Materials/material.detailMapConfiguration.js.map +1 -1
  462. package/Materials/material.pure.js +1815 -1721
  463. package/Materials/material.pure.js.map +1 -1
  464. package/Materials/materialPluginBase.pure.js +270 -249
  465. package/Materials/materialPluginBase.pure.js.map +1 -1
  466. package/Materials/materialPluginManager.pure.js +18 -8
  467. package/Materials/materialPluginManager.pure.js.map +1 -1
  468. package/Materials/materialStencilState.js +211 -200
  469. package/Materials/materialStencilState.js.map +1 -1
  470. package/Materials/meshDebugPluginMaterial.pure.d.ts +2 -2
  471. package/Materials/meshDebugPluginMaterial.pure.js +397 -275
  472. package/Materials/meshDebugPluginMaterial.pure.js.map +1 -1
  473. package/Materials/standardMaterial.pure.d.ts +32 -32
  474. package/Materials/standardMaterial.pure.js +1804 -1394
  475. package/Materials/standardMaterial.pure.js.map +1 -1
  476. package/Maths/math.color.pure.js +5 -5
  477. package/Maths/math.functions.js +38 -30
  478. package/Maths/math.functions.js.map +1 -1
  479. package/Maths/math.vector.pure.js +25 -25
  480. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +18 -8
  481. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  482. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +86 -1
  483. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +255 -104
  484. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  485. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.d.ts +39 -0
  486. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js +322 -0
  487. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js.map +1 -0
  488. package/Meshes/GreasedLine/greasedLineMesh.pure.js +4 -4
  489. package/Meshes/GreasedLine/greasedLineRibbonMesh.pure.js +3 -3
  490. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js +107 -94
  491. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js.map +1 -1
  492. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.pure.js +276 -263
  493. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.pure.js.map +1 -1
  494. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.pure.js +247 -232
  495. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.pure.js.map +1 -1
  496. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.pure.js +299 -284
  497. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.pure.js.map +1 -1
  498. package/Meshes/Node/Blocks/Set/aggregatorBlock.pure.js +196 -181
  499. package/Meshes/Node/Blocks/Set/aggregatorBlock.pure.js.map +1 -1
  500. package/Meshes/Node/Blocks/Set/latticeBlock.pure.js +198 -179
  501. package/Meshes/Node/Blocks/Set/latticeBlock.pure.js.map +1 -1
  502. package/Meshes/Node/Blocks/Set/setColorsBlock.pure.js +151 -138
  503. package/Meshes/Node/Blocks/Set/setColorsBlock.pure.js.map +1 -1
  504. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.pure.js +107 -94
  505. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.pure.js.map +1 -1
  506. package/Meshes/Node/Blocks/Set/setNormalsBlock.pure.js +138 -125
  507. package/Meshes/Node/Blocks/Set/setNormalsBlock.pure.js.map +1 -1
  508. package/Meshes/Node/Blocks/Set/setPositionsBlock.pure.js +213 -200
  509. package/Meshes/Node/Blocks/Set/setPositionsBlock.pure.js.map +1 -1
  510. package/Meshes/Node/Blocks/Set/setTangentsBlock.pure.js +138 -125
  511. package/Meshes/Node/Blocks/Set/setTangentsBlock.pure.js.map +1 -1
  512. package/Meshes/Node/Blocks/Set/setUVsBlock.pure.js +179 -164
  513. package/Meshes/Node/Blocks/Set/setUVsBlock.pure.js.map +1 -1
  514. package/Meshes/Node/Blocks/Sources/boxBlock.pure.js +183 -170
  515. package/Meshes/Node/Blocks/Sources/boxBlock.pure.js.map +1 -1
  516. package/Meshes/Node/Blocks/Sources/capsuleBlock.pure.js +125 -112
  517. package/Meshes/Node/Blocks/Sources/capsuleBlock.pure.js.map +1 -1
  518. package/Meshes/Node/Blocks/Sources/cylinderBlock.pure.js +153 -140
  519. package/Meshes/Node/Blocks/Sources/cylinderBlock.pure.js.map +1 -1
  520. package/Meshes/Node/Blocks/Sources/discBlock.pure.js +112 -99
  521. package/Meshes/Node/Blocks/Sources/discBlock.pure.js.map +1 -1
  522. package/Meshes/Node/Blocks/Sources/gridBlock.pure.js +133 -120
  523. package/Meshes/Node/Blocks/Sources/gridBlock.pure.js.map +1 -1
  524. package/Meshes/Node/Blocks/Sources/icoSphereBlock.pure.js +128 -115
  525. package/Meshes/Node/Blocks/Sources/icoSphereBlock.pure.js.map +1 -1
  526. package/Meshes/Node/Blocks/Sources/meshBlock.pure.js +116 -103
  527. package/Meshes/Node/Blocks/Sources/meshBlock.pure.js.map +1 -1
  528. package/Meshes/Node/Blocks/Sources/planeBlock.pure.js +160 -147
  529. package/Meshes/Node/Blocks/Sources/planeBlock.pure.js.map +1 -1
  530. package/Meshes/Node/Blocks/Sources/sphereBlock.pure.js +144 -131
  531. package/Meshes/Node/Blocks/Sources/sphereBlock.pure.js.map +1 -1
  532. package/Meshes/Node/Blocks/Sources/torusBlock.pure.js +112 -99
  533. package/Meshes/Node/Blocks/Sources/torusBlock.pure.js.map +1 -1
  534. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.pure.js +200 -185
  535. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.pure.js.map +1 -1
  536. package/Meshes/Node/Blocks/bevelBlock.pure.js +111 -98
  537. package/Meshes/Node/Blocks/bevelBlock.pure.js.map +1 -1
  538. package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js +182 -165
  539. package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js.map +1 -1
  540. package/Meshes/Node/Blocks/cleanGeometryBlock.pure.js +89 -76
  541. package/Meshes/Node/Blocks/cleanGeometryBlock.pure.js.map +1 -1
  542. package/Meshes/Node/Blocks/conditionBlock.pure.js +184 -169
  543. package/Meshes/Node/Blocks/conditionBlock.pure.js.map +1 -1
  544. package/Meshes/Node/Blocks/extrudeGeometryBlock.pure.js +270 -255
  545. package/Meshes/Node/Blocks/extrudeGeometryBlock.pure.js.map +1 -1
  546. package/Meshes/Node/Blocks/geometryCollectionBlock.pure.js +172 -159
  547. package/Meshes/Node/Blocks/geometryCollectionBlock.pure.js.map +1 -1
  548. package/Meshes/Node/Blocks/geometryCurveBlock.pure.js +230 -217
  549. package/Meshes/Node/Blocks/geometryCurveBlock.pure.js.map +1 -1
  550. package/Meshes/Node/Blocks/geometryEaseBlock.pure.js +256 -245
  551. package/Meshes/Node/Blocks/geometryEaseBlock.pure.js.map +1 -1
  552. package/Meshes/Node/Blocks/geometryOptimizeBlock.pure.js +206 -189
  553. package/Meshes/Node/Blocks/geometryOptimizeBlock.pure.js.map +1 -1
  554. package/Meshes/Node/Blocks/geometryTransformBlock.pure.js +166 -153
  555. package/Meshes/Node/Blocks/geometryTransformBlock.pure.js.map +1 -1
  556. package/Meshes/Node/Blocks/geometryTrigonometryBlock.pure.js +221 -208
  557. package/Meshes/Node/Blocks/geometryTrigonometryBlock.pure.js.map +1 -1
  558. package/Meshes/Node/Blocks/mappingBlock.pure.js +150 -137
  559. package/Meshes/Node/Blocks/mappingBlock.pure.js.map +1 -1
  560. package/Meshes/Node/Blocks/mathBlock.pure.js +269 -256
  561. package/Meshes/Node/Blocks/mathBlock.pure.js.map +1 -1
  562. package/Meshes/Node/Blocks/mergeGeometryBlock.pure.js +141 -128
  563. package/Meshes/Node/Blocks/mergeGeometryBlock.pure.js.map +1 -1
  564. package/Meshes/Node/Blocks/randomBlock.pure.js +161 -148
  565. package/Meshes/Node/Blocks/randomBlock.pure.js.map +1 -1
  566. package/Meshes/Node/Blocks/subdivideBlock.pure.js +102 -87
  567. package/Meshes/Node/Blocks/subdivideBlock.pure.js.map +1 -1
  568. package/Meshes/Node/nodeGeometry.js +560 -538
  569. package/Meshes/Node/nodeGeometry.js.map +1 -1
  570. package/Meshes/Node/nodeGeometryBlock.js +473 -458
  571. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  572. package/Meshes/abstractMesh.pure.js +2218 -2207
  573. package/Meshes/abstractMesh.pure.js.map +1 -1
  574. package/Meshes/geometry.js +30 -15
  575. package/Meshes/geometry.js.map +1 -1
  576. package/Meshes/mesh.pure.js +26 -14
  577. package/Meshes/mesh.pure.js.map +1 -1
  578. package/Meshes/mesh.vertexData.js +1665 -1655
  579. package/Meshes/mesh.vertexData.js.map +1 -1
  580. package/Meshes/transformNode.pure.js +1400 -1372
  581. package/Meshes/transformNode.pure.js.map +1 -1
  582. package/Misc/decorators.d.ts +34 -19
  583. package/Misc/decorators.functions.d.ts +33 -2
  584. package/Misc/decorators.functions.js +114 -35
  585. package/Misc/decorators.functions.js.map +1 -1
  586. package/Misc/decorators.js +96 -68
  587. package/Misc/decorators.js.map +1 -1
  588. package/Misc/decorators.serialization.js +47 -40
  589. package/Misc/decorators.serialization.js.map +1 -1
  590. package/Misc/decorators.serializationUtilities.d.ts +24 -0
  591. package/Misc/decorators.serializationUtilities.js +20 -0
  592. package/Misc/decorators.serializationUtilities.js.map +1 -0
  593. package/Misc/dumpTools.pure.js +43 -33
  594. package/Misc/dumpTools.pure.js.map +1 -1
  595. package/Misc/fileTools.pure.js +8 -0
  596. package/Misc/fileTools.pure.js.map +1 -1
  597. package/Misc/observable.pure.js +0 -7
  598. package/Misc/observable.pure.js.map +1 -1
  599. package/Misc/snapshotRenderingHelper.d.ts +4 -1
  600. package/Misc/snapshotRenderingHelper.js.map +1 -1
  601. package/Misc/symbolMetadataPolyfill.d.ts +11 -0
  602. package/Misc/symbolMetadataPolyfill.js +22 -0
  603. package/Misc/symbolMetadataPolyfill.js.map +1 -0
  604. package/Misc/tools.pure.js +2 -2
  605. package/Misc/tools.pure.js.map +1 -1
  606. package/Morph/morphTarget.js +382 -365
  607. package/Morph/morphTarget.js.map +1 -1
  608. package/Particles/Node/Blocks/Conditions/particleConditionBlock.pure.js +160 -145
  609. package/Particles/Node/Blocks/Conditions/particleConditionBlock.pure.js.map +1 -1
  610. package/Particles/Node/Blocks/Emitters/coneShapeBlock.pure.js +187 -174
  611. package/Particles/Node/Blocks/Emitters/coneShapeBlock.pure.js.map +1 -1
  612. package/Particles/Node/Blocks/Emitters/meshShapeBlock.pure.js +238 -219
  613. package/Particles/Node/Blocks/Emitters/meshShapeBlock.pure.js.map +1 -1
  614. package/Particles/Node/Blocks/Emitters/setupSpriteSheetBlock.pure.js +140 -115
  615. package/Particles/Node/Blocks/Emitters/setupSpriteSheetBlock.pure.js.map +1 -1
  616. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.pure.js +157 -144
  617. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.pure.js.map +1 -1
  618. package/Particles/Node/Blocks/Triggers/particleTriggerBlock.pure.js +133 -119
  619. package/Particles/Node/Blocks/Triggers/particleTriggerBlock.pure.js.map +1 -1
  620. package/Particles/Node/Blocks/Update/alignAngleBlock.pure.js +93 -80
  621. package/Particles/Node/Blocks/Update/alignAngleBlock.pure.js.map +1 -1
  622. package/Particles/Node/Blocks/particleDebugBlock.pure.js +117 -105
  623. package/Particles/Node/Blocks/particleDebugBlock.pure.js.map +1 -1
  624. package/Particles/Node/Blocks/particleFloatToIntBlock.pure.js +105 -92
  625. package/Particles/Node/Blocks/particleFloatToIntBlock.pure.js.map +1 -1
  626. package/Particles/Node/Blocks/particleGradientValueBlock.pure.js +82 -69
  627. package/Particles/Node/Blocks/particleGradientValueBlock.pure.js.map +1 -1
  628. package/Particles/Node/Blocks/particleLocalVariableBlock.pure.js +113 -101
  629. package/Particles/Node/Blocks/particleLocalVariableBlock.pure.js.map +1 -1
  630. package/Particles/Node/Blocks/particleMathBlock.pure.js +278 -265
  631. package/Particles/Node/Blocks/particleMathBlock.pure.js.map +1 -1
  632. package/Particles/Node/Blocks/particleNumberMathBlock.pure.js +155 -142
  633. package/Particles/Node/Blocks/particleNumberMathBlock.pure.js.map +1 -1
  634. package/Particles/Node/Blocks/particleRandomBlock.pure.js +156 -143
  635. package/Particles/Node/Blocks/particleRandomBlock.pure.js.map +1 -1
  636. package/Particles/Node/Blocks/particleTrigonometryBlock.pure.js +217 -204
  637. package/Particles/Node/Blocks/particleTrigonometryBlock.pure.js.map +1 -1
  638. package/Particles/Node/Blocks/particleVectorMathBlock.pure.js +106 -93
  639. package/Particles/Node/Blocks/particleVectorMathBlock.pure.js.map +1 -1
  640. package/Particles/Node/Blocks/systemBlock.pure.js +366 -330
  641. package/Particles/Node/Blocks/systemBlock.pure.js.map +1 -1
  642. package/Particles/Node/nodeParticleBlock.js +339 -324
  643. package/Particles/Node/nodeParticleBlock.js.map +1 -1
  644. package/Particles/Node/nodeParticleSystemSet.js +494 -473
  645. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  646. package/Particles/gpuParticleSystem.d.ts +0 -1
  647. package/Particles/gpuParticleSystem.js +0 -1
  648. package/Particles/gpuParticleSystem.js.map +1 -1
  649. package/Particles/gpuParticleSystem.pure.d.ts +4 -3
  650. package/Particles/gpuParticleSystem.pure.js +27 -16
  651. package/Particles/gpuParticleSystem.pure.js.map +1 -1
  652. package/Particles/particleSystem.pure.js +57 -2
  653. package/Particles/particleSystem.pure.js.map +1 -1
  654. package/Particles/thinParticleSystem.d.ts +0 -1
  655. package/Particles/thinParticleSystem.js +0 -1
  656. package/Particles/thinParticleSystem.js.map +1 -1
  657. package/Particles/thinParticleSystem.pure.js +2 -0
  658. package/Particles/thinParticleSystem.pure.js.map +1 -1
  659. package/Particles/webgl2ParticleSystem.pure.js +2 -0
  660. package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
  661. package/Physics/v1/physicsImpostor.pure.js +4 -4
  662. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.pure.js +675 -656
  663. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.pure.js.map +1 -1
  664. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.d.ts +0 -1
  665. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +0 -1
  666. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  667. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js +521 -486
  668. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js.map +1 -1
  669. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.d.ts +0 -1
  670. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +0 -1
  671. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  672. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.pure.js +241 -220
  673. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.pure.js.map +1 -1
  674. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.pure.js +852 -835
  675. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.pure.js.map +1 -1
  676. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.pure.js +1135 -1073
  677. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.pure.js.map +1 -1
  678. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.pure.js +319 -303
  679. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.pure.js.map +1 -1
  680. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +212 -199
  681. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  682. package/PostProcesses/blackAndWhitePostProcess.pure.js +67 -55
  683. package/PostProcesses/blackAndWhitePostProcess.pure.js.map +1 -1
  684. package/PostProcesses/bloomMergePostProcess.pure.js +74 -62
  685. package/PostProcesses/bloomMergePostProcess.pure.js.map +1 -1
  686. package/PostProcesses/blurPostProcess.pure.js +127 -115
  687. package/PostProcesses/blurPostProcess.pure.js.map +1 -1
  688. package/PostProcesses/chromaticAberrationPostProcess.pure.js +130 -118
  689. package/PostProcesses/chromaticAberrationPostProcess.pure.js.map +1 -1
  690. package/PostProcesses/circleOfConfusionPostProcess.pure.js +115 -104
  691. package/PostProcesses/circleOfConfusionPostProcess.pure.js.map +1 -1
  692. package/PostProcesses/colorCorrectionPostProcess.pure.js +55 -43
  693. package/PostProcesses/colorCorrectionPostProcess.pure.js.map +1 -1
  694. package/PostProcesses/convolutionPostProcess.pure.js +96 -84
  695. package/PostProcesses/convolutionPostProcess.pure.js.map +1 -1
  696. package/PostProcesses/extractHighlightsPostProcess.pure.js +68 -57
  697. package/PostProcesses/extractHighlightsPostProcess.pure.js.map +1 -1
  698. package/PostProcesses/filterPostProcess.pure.js +66 -54
  699. package/PostProcesses/filterPostProcess.pure.js.map +1 -1
  700. package/PostProcesses/fxaaPostProcess.pure.js.map +1 -1
  701. package/PostProcesses/grainPostProcess.pure.js +82 -70
  702. package/PostProcesses/grainPostProcess.pure.js.map +1 -1
  703. package/PostProcesses/imageProcessingPostProcess.js +334 -322
  704. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  705. package/PostProcesses/motionBlurPostProcess.pure.js +246 -235
  706. package/PostProcesses/motionBlurPostProcess.pure.js.map +1 -1
  707. package/PostProcesses/passPostProcess.pure.js +75 -63
  708. package/PostProcesses/passPostProcess.pure.js.map +1 -1
  709. package/PostProcesses/postProcess.pure.js +899 -835
  710. package/PostProcesses/postProcess.pure.js.map +1 -1
  711. package/PostProcesses/refractionPostProcess.pure.js +114 -87
  712. package/PostProcesses/refractionPostProcess.pure.js.map +1 -1
  713. package/PostProcesses/screenSpaceCurvaturePostProcess.pure.js +108 -96
  714. package/PostProcesses/screenSpaceCurvaturePostProcess.pure.js.map +1 -1
  715. package/PostProcesses/screenSpaceReflectionPostProcess.pure.js +241 -220
  716. package/PostProcesses/screenSpaceReflectionPostProcess.pure.js.map +1 -1
  717. package/PostProcesses/sharpenPostProcess.pure.js +86 -74
  718. package/PostProcesses/sharpenPostProcess.pure.js.map +1 -1
  719. package/PostProcesses/tonemapPostProcess.pure.js +82 -70
  720. package/PostProcesses/tonemapPostProcess.pure.js.map +1 -1
  721. package/PostProcesses/volumetricLightScatteringPostProcess.pure.js +500 -465
  722. package/PostProcesses/volumetricLightScatteringPostProcess.pure.js.map +1 -1
  723. package/PostProcesses/vrMultiviewToSingleviewPostProcess.d.ts +0 -1
  724. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js +0 -1
  725. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
  726. package/PostProcesses/vrMultiviewToSingleviewPostProcess.pure.js +2 -0
  727. package/PostProcesses/vrMultiviewToSingleviewPostProcess.pure.js.map +1 -1
  728. package/Probes/reflectionProbe.pure.js +238 -224
  729. package/Probes/reflectionProbe.pure.js.map +1 -1
  730. package/Rendering/GlobalIllumination/giRSMManager.pure.d.ts +1 -1
  731. package/Rendering/GlobalIllumination/giRSMManager.pure.js +138 -105
  732. package/Rendering/GlobalIllumination/giRSMManager.pure.js.map +1 -1
  733. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.d.ts +1 -1
  734. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js +155 -138
  735. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js.map +1 -1
  736. package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +0 -2
  737. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +0 -2
  738. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  739. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +5 -0
  740. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  741. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.d.ts +0 -1
  742. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +0 -1
  743. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  744. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +1 -0
  745. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +34 -0
  746. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
  747. package/Rendering/edgesRenderer.pure.js.map +1 -1
  748. package/Rendering/prePassRenderer.d.ts +0 -2
  749. package/Rendering/prePassRenderer.js +0 -2
  750. package/Rendering/prePassRenderer.js.map +1 -1
  751. package/Rendering/prePassRenderer.pure.js +2 -0
  752. package/Rendering/prePassRenderer.pure.js.map +1 -1
  753. package/Rendering/reflectiveShadowMap.pure.d.ts +1 -1
  754. package/Rendering/reflectiveShadowMap.pure.js +151 -130
  755. package/Rendering/reflectiveShadowMap.pure.js.map +1 -1
  756. package/Rendering/thinDepthPeelingRenderer.d.ts +0 -1
  757. package/Rendering/thinDepthPeelingRenderer.js +0 -1
  758. package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
  759. package/Shaders/ShadersInclude/gaussianSplatting.js +1 -0
  760. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  761. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +35 -5
  762. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  763. package/Shaders/gaussianSplatting.fragment.js +17 -1
  764. package/Shaders/gaussianSplatting.fragment.js.map +1 -1
  765. package/Shaders/gaussianSplatting.vertex.js +1 -1
  766. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  767. package/Shaders/gaussianSplattingDepth.vertex.js +1 -1
  768. package/Shaders/gaussianSplattingDepth.vertex.js.map +1 -1
  769. package/Shaders/picking.fragment.js +39 -3
  770. package/Shaders/picking.fragment.js.map +1 -1
  771. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +3 -1
  772. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
  773. package/ShadersWGSL/ShadersInclude/helperFunctions.js +2 -2
  774. package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
  775. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +39 -7
  776. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  777. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +4 -3
  778. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  779. package/ShadersWGSL/gaussianSplatting.fragment.js +14 -1
  780. package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
  781. package/ShadersWGSL/gaussianSplatting.vertex.js +2 -2
  782. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  783. package/ShadersWGSL/gaussianSplattingDepth.vertex.js +2 -2
  784. package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
  785. package/ShadersWGSL/lightingVolume.compute.js +2 -2
  786. package/ShadersWGSL/lightingVolume.compute.js.map +1 -1
  787. package/ShadersWGSL/picking.fragment.js +22 -1
  788. package/ShadersWGSL/picking.fragment.js.map +1 -1
  789. package/XR/features/Layers/WebXRCompositionLayer.d.ts +3 -2
  790. package/XR/features/Layers/WebXRCompositionLayer.js +2 -2
  791. package/XR/features/Layers/WebXRCompositionLayer.js.map +1 -1
  792. package/XR/features/Layers/WebXRWebGPUCompositionLayer.d.ts +59 -0
  793. package/XR/features/Layers/WebXRWebGPUCompositionLayer.js +120 -0
  794. package/XR/features/Layers/WebXRWebGPUCompositionLayer.js.map +1 -0
  795. package/XR/features/Layers/WebXRWebGPUProjectionLayer.d.ts +25 -0
  796. package/XR/features/Layers/WebXRWebGPUProjectionLayer.js +69 -0
  797. package/XR/features/Layers/WebXRWebGPUProjectionLayer.js.map +1 -0
  798. package/XR/features/WebXRLayers.pure.d.ts +8 -0
  799. package/XR/features/WebXRLayers.pure.js +43 -6
  800. package/XR/features/WebXRLayers.pure.js.map +1 -1
  801. package/XR/native/nativeXRRenderTarget.d.ts +2 -2
  802. package/XR/native/nativeXRRenderTarget.js +2 -2
  803. package/XR/native/nativeXRRenderTarget.js.map +1 -1
  804. package/XR/webXRExperienceHelper.js +10 -1
  805. package/XR/webXRExperienceHelper.js.map +1 -1
  806. package/XR/webXRGraphicsBinding.d.ts +90 -0
  807. package/XR/webXRGraphicsBinding.js +85 -0
  808. package/XR/webXRGraphicsBinding.js.map +1 -0
  809. package/XR/webXRLayerRenderTargetTexture.d.ts +24 -0
  810. package/XR/webXRLayerRenderTargetTexture.js +30 -0
  811. package/XR/webXRLayerRenderTargetTexture.js.map +1 -0
  812. package/XR/webXRManagedOutputCanvas.d.ts +14 -0
  813. package/XR/webXRManagedOutputCanvas.js +24 -5
  814. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  815. package/XR/webXRRenderTargetTextureProvider.d.ts +25 -4
  816. package/XR/webXRRenderTargetTextureProvider.js +33 -35
  817. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  818. package/XR/webXRSessionManager.d.ts +11 -0
  819. package/XR/webXRSessionManager.js +37 -0
  820. package/XR/webXRSessionManager.js.map +1 -1
  821. package/XR/webXRTypes.d.ts +9 -6
  822. package/XR/webXRTypes.js.map +1 -1
  823. package/XR/webXRWebGLLayer.d.ts +2 -2
  824. package/XR/webXRWebGLLayer.js +2 -2
  825. package/XR/webXRWebGLLayer.js.map +1 -1
  826. package/XR/webXRWebGLRenderTargetTextureProvider.d.ts +12 -0
  827. package/XR/webXRWebGLRenderTargetTextureProvider.js +58 -0
  828. package/XR/webXRWebGLRenderTargetTextureProvider.js.map +1 -0
  829. package/XR/webXRWebGPURenderTargetTextureProvider.d.ts +69 -0
  830. package/XR/webXRWebGPURenderTargetTextureProvider.js +148 -0
  831. package/XR/webXRWebGPURenderTargetTextureProvider.js.map +1 -0
  832. package/index.d.ts +1 -0
  833. package/index.js +1 -0
  834. package/index.js.map +1 -1
  835. package/node.js +878 -845
  836. package/node.js.map +1 -1
  837. package/package.json +8 -14
  838. package/scene.pure.d.ts +12 -0
  839. package/scene.pure.js +36 -0
  840. package/scene.pure.js.map +1 -1
  841. package/tslib.es6.js +304 -150
@@ -1 +1 @@
1
- {"version":3,"file":"bevelBlock.pure.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Meshes/Node/Blocks/bevelBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../Decorators/nodeDecorator\";\r\nimport { Vector3 } from \"../../../Maths/math.vector.pure\";\r\nimport { VertexData, VertexDataMaterialInfo } from \"../../mesh.vertexData\";\r\nimport { NodeGeometryBlockConnectionPointTypes } from \"../Enums/nodeGeometryConnectionPointTypes\";\r\nimport { type NodeGeometryBuildState } from \"../nodeGeometryBuildState\";\r\nimport { NodeGeometryBlock } from \"../nodeGeometryBlock\";\r\nimport { type NodeGeometryConnectionPoint } from \"../nodeGeometryBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\n\r\nconst PositionEpsilon = 1e-5;\r\nconst OutputPositionEpsilon = 1e-4;\r\nconst NormalEpsilon = 1e-8;\r\nconst AngleEpsilon = 1e-7;\r\nconst TriangleAreaEpsilon = PositionEpsilon * PositionEpsilon * PositionEpsilon * PositionEpsilon;\r\n\r\ntype BevelFaceEdgeSegment = {\r\n edgeKey: string;\r\n faceIndex: number;\r\n inward: Vector3;\r\n tMin: number;\r\n tMax: number;\r\n minPoint: Vector3;\r\n maxPoint: Vector3;\r\n minNormal: Vector3;\r\n maxNormal: Vector3;\r\n minAttributes: number[];\r\n maxAttributes: number[];\r\n materialIndex: number;\r\n};\r\n\r\ntype BevelPolygonPoint = {\r\n position: Vector3;\r\n normal: Vector3;\r\n attributes: number[];\r\n materialIndex: number;\r\n};\r\n\r\ntype BevelCapPoint = Vector3 | BevelPolygonPoint;\r\n\r\ntype BevelPreparedFace = {\r\n faceIndex: number;\r\n polygon: BevelPolygonPoint[];\r\n selectedFaceEdges: BevelFaceClipEdge[];\r\n isFlat: boolean;\r\n};\r\n\r\ntype BevelEdgeInterval = {\r\n tStart: number;\r\n tEnd: number;\r\n};\r\n\r\ntype BevelFaceClipEdge = {\r\n key: string;\r\n start: number;\r\n end: number;\r\n inward: Vector3;\r\n};\r\n\r\ntype BevelFace = {\r\n indices: [number, number, number];\r\n originalIndices: [number, number, number];\r\n normal: Vector3;\r\n cornerNormals: [Vector3, Vector3, Vector3];\r\n materialIndex: number;\r\n};\r\n\r\ntype BevelEdgeFace = {\r\n faceIndex: number;\r\n};\r\n\r\ntype BevelEdge = {\r\n key: string;\r\n v0: number;\r\n v1: number;\r\n faces: BevelEdgeFace[];\r\n};\r\n\r\ntype BevelTopology = {\r\n positions: Vector3[];\r\n faces: BevelFace[];\r\n edges: Map<string, BevelEdge>;\r\n vertexFaces: Map<number, number[]>;\r\n};\r\n\r\ntype BevelAttributeName =\r\n | \"tangents\"\r\n | \"uvs\"\r\n | \"uvs2\"\r\n | \"uvs3\"\r\n | \"uvs4\"\r\n | \"uvs5\"\r\n | \"uvs6\"\r\n | \"colors\"\r\n | \"matricesIndices\"\r\n | \"matricesWeights\"\r\n | \"matricesIndicesExtra\"\r\n | \"matricesWeightsExtra\";\r\n\r\ntype BevelAttributeDescriptor = {\r\n name: BevelAttributeName;\r\n source: ArrayLike<number>;\r\n stride: number;\r\n offset: number;\r\n output: number[];\r\n};\r\n\r\nfunction _Quantize(value: number) {\r\n const quantized = Math.round(value / PositionEpsilon);\r\n return quantized === 0 ? 0 : quantized;\r\n}\r\n\r\nfunction _PositionKey(x: number, y: number, z: number) {\r\n return `${_Quantize(x)}:${_Quantize(y)}:${_Quantize(z)}`;\r\n}\r\n\r\nfunction _VectorKey(position: Vector3) {\r\n return _PositionKey(position.x, position.y, position.z);\r\n}\r\n\r\nfunction _OutputQuantize(value: number) {\r\n const quantized = Math.round(value / OutputPositionEpsilon);\r\n return quantized === 0 ? 0 : quantized;\r\n}\r\n\r\nfunction _OutputPositionKey(x: number, y: number, z: number) {\r\n return `${x}:${y}:${z}`;\r\n}\r\n\r\nfunction _EdgeKey(v0: number, v1: number) {\r\n return v0 < v1 ? `${v0}:${v1}` : `${v1}:${v0}`;\r\n}\r\n\r\nfunction _CloneVertexData(vertexData: VertexData) {\r\n const clone = vertexData.clone();\r\n if (!clone.normals && clone.positions && clone.indices) {\r\n const normals: number[] = [];\r\n VertexData.ComputeNormals(clone.positions, clone.indices, normals);\r\n clone.normals = normals;\r\n }\r\n\r\n return clone;\r\n}\r\n\r\nfunction _NormalizeNormalOrFallback(normal: Vector3, fallback: Vector3) {\r\n return normal.lengthSquared() > NormalEpsilon ? normal.normalizeToNew() : fallback.normalizeToNew();\r\n}\r\n\r\nfunction _BuildAttributeDescriptors(vertexData: VertexData, vertexCount: number) {\r\n const descriptors: BevelAttributeDescriptor[] = [];\r\n const addDescriptor = (name: BevelAttributeName, stride: number) => {\r\n const source = vertexData[name];\r\n\r\n if (!source || source.length < vertexCount * stride) {\r\n return;\r\n }\r\n\r\n descriptors.push({\r\n name,\r\n source,\r\n stride,\r\n offset: descriptors.reduce((sum, descriptor) => sum + descriptor.stride, 0),\r\n output: [],\r\n });\r\n };\r\n\r\n addDescriptor(\"tangents\", 4);\r\n addDescriptor(\"uvs\", 2);\r\n addDescriptor(\"uvs2\", 2);\r\n addDescriptor(\"uvs3\", 2);\r\n addDescriptor(\"uvs4\", 2);\r\n addDescriptor(\"uvs5\", 2);\r\n addDescriptor(\"uvs6\", 2);\r\n if (vertexData.colors) {\r\n addDescriptor(\"colors\", vertexData.colors.length === vertexData.positions!.length ? 3 : 4);\r\n }\r\n addDescriptor(\"matricesIndices\", 4);\r\n addDescriptor(\"matricesWeights\", 4);\r\n addDescriptor(\"matricesIndicesExtra\", 4);\r\n addDescriptor(\"matricesWeightsExtra\", 4);\r\n\r\n return descriptors;\r\n}\r\n\r\nfunction _GetAttributeLength(descriptors: BevelAttributeDescriptor[]) {\r\n return descriptors.reduce((sum, descriptor) => sum + descriptor.stride, 0);\r\n}\r\n\r\nfunction _GetVertexAttributes(descriptors: BevelAttributeDescriptor[], vertexIndex: number) {\r\n const attributes: number[] = [];\r\n\r\n for (const descriptor of descriptors) {\r\n const sourceOffset = vertexIndex * descriptor.stride;\r\n for (let index = 0; index < descriptor.stride; index++) {\r\n attributes.push(descriptor.source[sourceOffset + index]);\r\n }\r\n }\r\n\r\n return attributes;\r\n}\r\n\r\nfunction _InterpolateAttributes(start: number[], end: number[], amount: number) {\r\n if (!start.length) {\r\n return start;\r\n }\r\n\r\n return start.map((value, index) => value + (end[index] - value) * amount);\r\n}\r\n\r\nfunction _AverageAttributes(attributes: number[][], length: number) {\r\n if (!length || !attributes.length) {\r\n return [];\r\n }\r\n\r\n const result = new Array<number>(length).fill(0);\r\n\r\n for (const attribute of attributes) {\r\n for (let index = 0; index < length; index++) {\r\n result[index] += attribute[index] ?? 0;\r\n }\r\n }\r\n\r\n for (let index = 0; index < length; index++) {\r\n result[index] /= attributes.length;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction _AttributesMatch(left: number[], right: number[]) {\r\n if (left.length !== right.length) {\r\n return false;\r\n }\r\n\r\n for (let index = 0; index < left.length; index++) {\r\n if (Math.abs(left[index] - right[index]) > OutputPositionEpsilon) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction _AssignAttributeOutputs(result: VertexData, descriptors: BevelAttributeDescriptor[], vertexAttributes: number[][]) {\r\n for (const descriptor of descriptors) {\r\n descriptor.output.length = 0;\r\n\r\n for (const attributes of vertexAttributes) {\r\n for (let index = 0; index < descriptor.stride; index++) {\r\n descriptor.output.push(attributes[descriptor.offset + index] ?? 0);\r\n }\r\n }\r\n\r\n switch (descriptor.name) {\r\n case \"tangents\":\r\n result.tangents = descriptor.output;\r\n break;\r\n case \"uvs\":\r\n result.uvs = descriptor.output;\r\n break;\r\n case \"uvs2\":\r\n result.uvs2 = descriptor.output;\r\n break;\r\n case \"uvs3\":\r\n result.uvs3 = descriptor.output;\r\n break;\r\n case \"uvs4\":\r\n result.uvs4 = descriptor.output;\r\n break;\r\n case \"uvs5\":\r\n result.uvs5 = descriptor.output;\r\n break;\r\n case \"uvs6\":\r\n result.uvs6 = descriptor.output;\r\n break;\r\n case \"colors\":\r\n result.colors = descriptor.output;\r\n break;\r\n case \"matricesIndices\":\r\n result.matricesIndices = descriptor.output;\r\n break;\r\n case \"matricesWeights\":\r\n result.matricesWeights = descriptor.output;\r\n break;\r\n case \"matricesIndicesExtra\":\r\n result.matricesIndicesExtra = descriptor.output;\r\n break;\r\n case \"matricesWeightsExtra\":\r\n result.matricesWeightsExtra = descriptor.output;\r\n break;\r\n }\r\n }\r\n}\r\n\r\nfunction _GetMaterialIndex(vertexData: VertexData, indexStart: number) {\r\n if (!vertexData.materialInfos) {\r\n return 0;\r\n }\r\n\r\n for (const materialInfo of vertexData.materialInfos) {\r\n if (indexStart >= materialInfo.indexStart && indexStart < materialInfo.indexStart + materialInfo.indexCount) {\r\n return materialInfo.materialIndex;\r\n }\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nfunction _BuildMaterialInfoResult(vertexData: VertexData, indices: number[], materialIndices: number[], vertexCount: number) {\r\n if (!vertexData.materialInfos?.length) {\r\n return { indices, materialInfos: null };\r\n }\r\n\r\n const materialOrder = vertexData.materialInfos.map((materialInfo) => materialInfo.materialIndex);\r\n const groups = new Map<number, number[]>();\r\n\r\n for (let triangleIndex = 0; triangleIndex < materialIndices.length; triangleIndex++) {\r\n const materialIndex = materialIndices[triangleIndex];\r\n let group = groups.get(materialIndex);\r\n\r\n if (!group) {\r\n group = [];\r\n groups.set(materialIndex, group);\r\n if (!materialOrder.includes(materialIndex)) {\r\n materialOrder.push(materialIndex);\r\n }\r\n }\r\n\r\n const indexOffset = triangleIndex * 3;\r\n group.push(indices[indexOffset], indices[indexOffset + 1], indices[indexOffset + 2]);\r\n }\r\n\r\n const groupedIndices: number[] = [];\r\n const materialInfos: VertexDataMaterialInfo[] = [];\r\n\r\n for (const materialIndex of materialOrder) {\r\n const group = groups.get(materialIndex);\r\n\r\n if (!group?.length) {\r\n continue;\r\n }\r\n\r\n const materialInfo = new VertexDataMaterialInfo();\r\n materialInfo.materialIndex = materialIndex;\r\n materialInfo.indexStart = groupedIndices.length;\r\n materialInfo.indexCount = group.length;\r\n materialInfo.verticesStart = 0;\r\n materialInfo.verticesCount = vertexCount;\r\n groupedIndices.push(...group);\r\n materialInfos.push(materialInfo);\r\n }\r\n\r\n return { indices: groupedIndices, materialInfos };\r\n}\r\n\r\nfunction _IsFlatFace(face: BevelFace) {\r\n return face.cornerNormals.every((normal) => Vector3.Dot(normal, face.normal) > 1 - PositionEpsilon);\r\n}\r\n\r\nfunction _IsBevelPolygonPoint(point: BevelCapPoint): point is BevelPolygonPoint {\r\n return (point as BevelPolygonPoint).position !== undefined;\r\n}\r\n\r\nfunction _GetCapPointPosition(point: BevelCapPoint) {\r\n return _IsBevelPolygonPoint(point) ? point.position : point;\r\n}\r\n\r\nfunction _GetCapPointNormal(point: BevelCapPoint, fallback: Vector3) {\r\n return _IsBevelPolygonPoint(point) ? point.normal : fallback;\r\n}\r\n\r\nfunction _GetCapPointAttributes(point: BevelCapPoint) {\r\n return _IsBevelPolygonPoint(point) ? point.attributes : [];\r\n}\r\n\r\nfunction _GetCapPointMaterialIndex(point: BevelCapPoint) {\r\n return _IsBevelPolygonPoint(point) ? point.materialIndex : 0;\r\n}\r\n\r\nfunction _BuildTopology(vertexData: VertexData): BevelTopology | null {\r\n const positions = vertexData.positions;\r\n const normals = vertexData.normals;\r\n\r\n if (!positions || positions.length < 9) {\r\n return null;\r\n }\r\n\r\n const vertexCount = positions.length / 3;\r\n const indices = vertexData.indices && vertexData.indices.length ? Array.from(vertexData.indices) : Array.from({ length: vertexCount }, (_, index) => index);\r\n const weldedPositionMap = new Map<string, number>();\r\n const originalToWelded: number[] = [];\r\n const weldedPositions: Vector3[] = [];\r\n\r\n for (let index = 0; index < vertexCount; index++) {\r\n const x = positions[index * 3];\r\n const y = positions[index * 3 + 1];\r\n const z = positions[index * 3 + 2];\r\n const key = _PositionKey(x, y, z);\r\n let weldedIndex = weldedPositionMap.get(key);\r\n\r\n if (weldedIndex === undefined) {\r\n weldedIndex = weldedPositions.length;\r\n weldedPositionMap.set(key, weldedIndex);\r\n weldedPositions.push(new Vector3(x, y, z));\r\n }\r\n\r\n originalToWelded[index] = weldedIndex;\r\n }\r\n\r\n const faces: BevelFace[] = [];\r\n const edges = new Map<string, BevelEdge>();\r\n const vertexFaces = new Map<number, number[]>();\r\n const edge0 = new Vector3();\r\n const edge1 = new Vector3();\r\n const normal = new Vector3();\r\n\r\n for (let index = 0; index < indices.length; index += 3) {\r\n let originalIndices: [number, number, number] = [indices[index], indices[index + 1], indices[index + 2]];\r\n const i0 = originalToWelded[originalIndices[0]];\r\n const i1 = originalToWelded[originalIndices[1]];\r\n const i2 = originalToWelded[originalIndices[2]];\r\n\r\n if (i0 === i1 || i1 === i2 || i2 === i0) {\r\n continue;\r\n }\r\n\r\n let faceIndices: [number, number, number] = [i0, i1, i2];\r\n const p0 = weldedPositions[faceIndices[0]];\r\n const p1 = weldedPositions[faceIndices[1]];\r\n const p2 = weldedPositions[faceIndices[2]];\r\n\r\n p1.subtractToRef(p0, edge0);\r\n p2.subtractToRef(p0, edge1);\r\n Vector3.CrossToRef(edge0, edge1, normal);\r\n\r\n if (normal.lengthSquared() < NormalEpsilon) {\r\n continue;\r\n }\r\n\r\n let cornerNormals: [Vector3, Vector3, Vector3] = normals\r\n ? [\r\n _NormalizeNormalOrFallback(Vector3.FromArray(normals, originalIndices[0] * 3), normal),\r\n _NormalizeNormalOrFallback(Vector3.FromArray(normals, originalIndices[1] * 3), normal),\r\n _NormalizeNormalOrFallback(Vector3.FromArray(normals, originalIndices[2] * 3), normal),\r\n ]\r\n : [normal.normalizeToNew(), normal.normalizeToNew(), normal.normalizeToNew()];\r\n\r\n const averageCornerNormal = _NormalizeNormalOrFallback(cornerNormals[0].add(cornerNormals[1]).addInPlace(cornerNormals[2]), normal);\r\n\r\n if (normals && Vector3.Dot(normal, averageCornerNormal) < 0) {\r\n faceIndices = [i0, i2, i1];\r\n originalIndices = [originalIndices[0], originalIndices[2], originalIndices[1]];\r\n cornerNormals = [cornerNormals[0], cornerNormals[2], cornerNormals[1]];\r\n normal.scaleInPlace(-1);\r\n }\r\n\r\n const faceNormal = normal.normalizeToNew();\r\n\r\n if (!normals) {\r\n cornerNormals = [faceNormal.clone(), faceNormal.clone(), faceNormal.clone()];\r\n }\r\n\r\n const faceIndex = faces.length;\r\n faces.push({\r\n indices: faceIndices,\r\n originalIndices,\r\n normal: faceNormal,\r\n cornerNormals,\r\n materialIndex: _GetMaterialIndex(vertexData, index),\r\n });\r\n\r\n for (const vertexIndex of faceIndices) {\r\n let faceList = vertexFaces.get(vertexIndex);\r\n if (!faceList) {\r\n faceList = [];\r\n vertexFaces.set(vertexIndex, faceList);\r\n }\r\n faceList.push(faceIndex);\r\n }\r\n\r\n for (let edgeIndex = 0; edgeIndex < 3; edgeIndex++) {\r\n const v0 = faceIndices[edgeIndex];\r\n const v1 = faceIndices[(edgeIndex + 1) % 3];\r\n const key = _EdgeKey(v0, v1);\r\n let edge = edges.get(key);\r\n\r\n if (!edge) {\r\n edge = {\r\n key,\r\n v0: Math.min(v0, v1),\r\n v1: Math.max(v0, v1),\r\n faces: [],\r\n };\r\n edges.set(key, edge);\r\n }\r\n\r\n edge.faces.push({ faceIndex });\r\n }\r\n }\r\n\r\n if (!faces.length) {\r\n return null;\r\n }\r\n\r\n return {\r\n positions: weldedPositions,\r\n faces,\r\n edges,\r\n vertexFaces,\r\n };\r\n}\r\n\r\nfunction _ClonePolygonPoint(point: BevelPolygonPoint): BevelPolygonPoint {\r\n return {\r\n position: point.position.clone(),\r\n normal: point.normal.clone(),\r\n attributes: point.attributes.slice(),\r\n materialIndex: point.materialIndex,\r\n };\r\n}\r\n\r\nfunction _InterpolatePolygonPoint(start: BevelPolygonPoint, end: BevelPolygonPoint, amount: number): BevelPolygonPoint {\r\n return {\r\n position: Vector3.Lerp(start.position, end.position, amount),\r\n normal: _NormalizeNormalOrFallback(Vector3.Lerp(start.normal, end.normal, amount), start.normal),\r\n attributes: _InterpolateAttributes(start.attributes, end.attributes, amount),\r\n materialIndex: start.materialIndex,\r\n };\r\n}\r\n\r\nfunction _InterpolateSegmentNormal(segment: BevelFaceEdgeSegment, t: number) {\r\n const denominator = segment.tMax - segment.tMin;\r\n\r\n if (denominator <= PositionEpsilon) {\r\n return segment.minNormal.clone();\r\n }\r\n\r\n const amount = Math.min(1, Math.max(0, (t - segment.tMin) / denominator));\r\n return _NormalizeNormalOrFallback(Vector3.Lerp(segment.minNormal, segment.maxNormal, amount), segment.minNormal);\r\n}\r\n\r\nfunction _InterpolateSegmentPoint(segment: BevelFaceEdgeSegment, t: number) {\r\n if (t <= segment.tMin + PositionEpsilon) {\r\n return segment.minPoint;\r\n }\r\n\r\n if (t >= segment.tMax - PositionEpsilon) {\r\n return segment.maxPoint;\r\n }\r\n\r\n return Vector3.Lerp(segment.minPoint, segment.maxPoint, (t - segment.tMin) / (segment.tMax - segment.tMin));\r\n}\r\n\r\nfunction _InterpolateSegmentAttributes(segment: BevelFaceEdgeSegment, t: number) {\r\n if (t <= segment.tMin + PositionEpsilon) {\r\n return segment.minAttributes;\r\n }\r\n\r\n if (t >= segment.tMax - PositionEpsilon) {\r\n return segment.maxAttributes;\r\n }\r\n\r\n return _InterpolateAttributes(segment.minAttributes, segment.maxAttributes, (t - segment.tMin) / (segment.tMax - segment.tMin));\r\n}\r\n\r\nfunction _ClipPolygonAgainstEdge(polygon: BevelPolygonPoint[], edgeStart: Vector3, inward: Vector3, amount: number) {\r\n if (!polygon.length) {\r\n return polygon;\r\n }\r\n\r\n const output: BevelPolygonPoint[] = [];\r\n let previous = polygon[polygon.length - 1];\r\n let previousDistance = Vector3.Dot(previous.position.subtract(edgeStart), inward) - amount;\r\n let previousInside = previousDistance >= -PositionEpsilon;\r\n\r\n for (const current of polygon) {\r\n const currentDistance = Vector3.Dot(current.position.subtract(edgeStart), inward) - amount;\r\n const currentInside = currentDistance >= -PositionEpsilon;\r\n\r\n if (currentInside !== previousInside) {\r\n const denominator = previousDistance - currentDistance;\r\n if (Math.abs(denominator) > NormalEpsilon) {\r\n const t = previousDistance / denominator;\r\n output.push(_InterpolatePolygonPoint(previous, current, t));\r\n }\r\n }\r\n\r\n if (currentInside) {\r\n output.push(_ClonePolygonPoint(current));\r\n }\r\n\r\n previous = current;\r\n previousDistance = currentDistance;\r\n previousInside = currentInside;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction _SlerpDirections(start: Vector3, end: Vector3, amount: number) {\r\n const dot = Math.min(1, Math.max(-1, Vector3.Dot(start, end)));\r\n\r\n if (dot > 1 - PositionEpsilon) {\r\n return Vector3.Lerp(start, end, amount).normalize();\r\n }\r\n\r\n const theta = Math.acos(dot);\r\n const sinTheta = Math.sin(theta);\r\n\r\n if (Math.abs(sinTheta) < NormalEpsilon) {\r\n return Vector3.Lerp(start, end, amount).normalize();\r\n }\r\n\r\n const startScale = Math.sin((1 - amount) * theta) / sinTheta;\r\n const endScale = Math.sin(amount * theta) / sinTheta;\r\n const result = start.scale(startScale).addInPlace(end.scale(endScale));\r\n\r\n if (result.lengthSquared() < NormalEpsilon) {\r\n return Vector3.Lerp(start, end, amount).normalize();\r\n }\r\n\r\n return result.normalize();\r\n}\r\n\r\nfunction _AddUniquePoint(points: BevelCapPoint[], point: Vector3, normal: Vector3, attributes: number[], materialIndex: number) {\r\n const key = _VectorKey(point);\r\n const normalizedNormal = _NormalizeNormalOrFallback(normal, normal);\r\n\r\n for (const existing of points) {\r\n if (_VectorKey(_GetCapPointPosition(existing)) === key) {\r\n if (_IsBevelPolygonPoint(existing)) {\r\n existing.normal.addInPlace(normalizedNormal).normalize();\r\n existing.attributes = _AverageAttributes([existing.attributes, attributes], attributes.length);\r\n }\r\n return;\r\n }\r\n }\r\n\r\n points.push({\r\n position: point.clone(),\r\n normal: normalizedNormal,\r\n attributes: attributes.slice(),\r\n materialIndex,\r\n });\r\n}\r\n\r\nfunction _AddUniqueNormal(normals: Vector3[], normal: Vector3) {\r\n for (const existing of normals) {\r\n if (Vector3.Dot(existing, normal) > 1 - PositionEpsilon) {\r\n return;\r\n }\r\n }\r\n\r\n normals.push(normal.clone());\r\n}\r\n\r\nfunction _SolveThreePlaneIntersection(normals: Vector3[], distances: number[]) {\r\n const cross12 = Vector3.Cross(normals[1], normals[2]);\r\n const denominator = Vector3.Dot(normals[0], cross12);\r\n\r\n if (Math.abs(denominator) < NormalEpsilon) {\r\n return null;\r\n }\r\n\r\n const result = cross12.scale(distances[0]);\r\n result.addInPlace(Vector3.Cross(normals[2], normals[0]).scale(distances[1]));\r\n result.addInPlace(Vector3.Cross(normals[0], normals[1]).scale(distances[2]));\r\n result.scaleInPlace(1 / denominator);\r\n\r\n return result;\r\n}\r\n\r\nfunction _BuildCoplanarFaceClipEdges(topology: BevelTopology, selectedEdges: Set<string>) {\r\n const result = new Map<number, BevelFaceClipEdge[]>();\r\n const visitedFaces = new Set<number>();\r\n\r\n for (let startFaceIndex = 0; startFaceIndex < topology.faces.length; startFaceIndex++) {\r\n if (visitedFaces.has(startFaceIndex)) {\r\n continue;\r\n }\r\n\r\n const group: number[] = [];\r\n const stack = [startFaceIndex];\r\n const groupNormal = topology.faces[startFaceIndex].normal;\r\n visitedFaces.add(startFaceIndex);\r\n\r\n while (stack.length) {\r\n const faceIndex = stack.pop()!;\r\n const face = topology.faces[faceIndex];\r\n group.push(faceIndex);\r\n\r\n for (let edgeIndex = 0; edgeIndex < 3; edgeIndex++) {\r\n const key = _EdgeKey(face.indices[edgeIndex], face.indices[(edgeIndex + 1) % 3]);\r\n const edge = topology.edges.get(key);\r\n\r\n if (!edge) {\r\n continue;\r\n }\r\n\r\n for (const edgeFace of edge.faces) {\r\n if (visitedFaces.has(edgeFace.faceIndex)) {\r\n continue;\r\n }\r\n\r\n if (Vector3.Dot(groupNormal, topology.faces[edgeFace.faceIndex].normal) < 1 - PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n visitedFaces.add(edgeFace.faceIndex);\r\n stack.push(edgeFace.faceIndex);\r\n }\r\n }\r\n }\r\n\r\n const clipEdges: BevelFaceClipEdge[] = [];\r\n const addedClipEdges = new Set<string>();\r\n\r\n for (const faceIndex of group) {\r\n const face = topology.faces[faceIndex];\r\n\r\n for (let edgeIndex = 0; edgeIndex < 3; edgeIndex++) {\r\n const start = face.indices[edgeIndex];\r\n const end = face.indices[(edgeIndex + 1) % 3];\r\n const key = _EdgeKey(start, end);\r\n\r\n if (!selectedEdges.has(key) || addedClipEdges.has(key)) {\r\n continue;\r\n }\r\n\r\n const edgeStart = topology.positions[start];\r\n const edgeEnd = topology.positions[end];\r\n const edgeDirection = edgeEnd.subtract(edgeStart).normalize();\r\n const inward = Vector3.Cross(face.normal, edgeDirection).normalize();\r\n clipEdges.push({ key, start, end, inward });\r\n addedClipEdges.add(key);\r\n }\r\n }\r\n\r\n for (const faceIndex of group) {\r\n result.set(faceIndex, clipEdges);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction _InsertPointOnPolygonBoundary(polygon: BevelPolygonPoint[], point: Vector3) {\r\n for (const existing of polygon) {\r\n if (existing.position.subtract(point).lengthSquared() <= PositionEpsilon * PositionEpsilon) {\r\n return;\r\n }\r\n }\r\n\r\n let bestEdgeIndex = -1;\r\n let bestDistanceSquared = Number.MAX_VALUE;\r\n let bestProjection = 0;\r\n\r\n for (let index = 0; index < polygon.length; index++) {\r\n const start = polygon[index].position;\r\n const end = polygon[(index + 1) % polygon.length].position;\r\n const edge = end.subtract(start);\r\n const edgeLengthSquared = edge.lengthSquared();\r\n\r\n if (edgeLengthSquared < PositionEpsilon * PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n const projection = Vector3.Dot(point.subtract(start), edge) / edgeLengthSquared;\r\n\r\n if (projection < -PositionEpsilon || projection > 1 + PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n const closest = start.add(edge.scale(projection));\r\n const distanceSquared = closest.subtract(point).lengthSquared();\r\n\r\n if (distanceSquared < bestDistanceSquared) {\r\n bestDistanceSquared = distanceSquared;\r\n bestEdgeIndex = index;\r\n bestProjection = projection;\r\n }\r\n }\r\n\r\n if (bestEdgeIndex !== -1 && bestDistanceSquared <= OutputPositionEpsilon * OutputPositionEpsilon) {\r\n const insertedPoint = _InterpolatePolygonPoint(polygon[bestEdgeIndex], polygon[(bestEdgeIndex + 1) % polygon.length], bestProjection);\r\n insertedPoint.position = point.clone();\r\n polygon.splice(bestEdgeIndex + 1, 0, insertedPoint);\r\n }\r\n}\r\n\r\nfunction _BuildMergedBoundaryPolygon(polygons: BevelPolygonPoint[][]) {\r\n const points = new Map<string, BevelPolygonPoint>();\r\n const edgeUseCounts = new Map<string, { count: number; key0: string; key1: string }>();\r\n\r\n for (const polygon of polygons) {\r\n for (const point of polygon) {\r\n const key = _VectorKey(point.position);\r\n const existing = points.get(key);\r\n\r\n if (existing) {\r\n existing.normal.addInPlace(point.normal).normalize();\r\n } else {\r\n points.set(key, _ClonePolygonPoint(point));\r\n }\r\n }\r\n\r\n for (let index = 0; index < polygon.length; index++) {\r\n const key0 = _VectorKey(polygon[index].position);\r\n const key1 = _VectorKey(polygon[(index + 1) % polygon.length].position);\r\n\r\n if (key0 === key1) {\r\n continue;\r\n }\r\n\r\n const edgeKey = key0 < key1 ? `${key0}|${key1}` : `${key1}|${key0}`;\r\n const edgeUseCount = edgeUseCounts.get(edgeKey);\r\n\r\n if (edgeUseCount) {\r\n edgeUseCount.count++;\r\n } else {\r\n edgeUseCounts.set(edgeKey, { count: 1, key0, key1 });\r\n }\r\n }\r\n }\r\n\r\n const adjacency = new Map<string, string[]>();\r\n for (const edge of Array.from(edgeUseCounts.values())) {\r\n if (edge.count !== 1) {\r\n continue;\r\n }\r\n\r\n let adjacency0 = adjacency.get(edge.key0);\r\n if (!adjacency0) {\r\n adjacency0 = [];\r\n adjacency.set(edge.key0, adjacency0);\r\n }\r\n adjacency0.push(edge.key1);\r\n\r\n let adjacency1 = adjacency.get(edge.key1);\r\n if (!adjacency1) {\r\n adjacency1 = [];\r\n adjacency.set(edge.key1, adjacency1);\r\n }\r\n adjacency1.push(edge.key0);\r\n }\r\n\r\n if (!adjacency.size || Array.from(adjacency.values()).some((neighbors) => neighbors.length !== 2)) {\r\n return null;\r\n }\r\n\r\n const startKey = Array.from(adjacency.keys()).sort()[0];\r\n const orderedKeys: string[] = [];\r\n let previousKey = \"\";\r\n let currentKey = startKey;\r\n\r\n do {\r\n orderedKeys.push(currentKey);\r\n const neighbors = adjacency.get(currentKey)!;\r\n const nextKey = neighbors[0] === previousKey ? neighbors[1] : neighbors[0];\r\n previousKey = currentKey;\r\n currentKey = nextKey;\r\n\r\n if (orderedKeys.length > adjacency.size) {\r\n return null;\r\n }\r\n } while (currentKey !== startKey);\r\n\r\n if (orderedKeys.length !== adjacency.size) {\r\n return null;\r\n }\r\n\r\n return orderedKeys.map((key) => points.get(key)!);\r\n}\r\n\r\nfunction _BevelVertexData(vertexData: VertexData, amount: number, segments: number, angle: number) {\r\n const topology = _BuildTopology(vertexData);\r\n\r\n if (!topology || amount <= PositionEpsilon || segments <= 0) {\r\n return _CloneVertexData(vertexData);\r\n }\r\n\r\n const selectedEdges = new Set<string>();\r\n const selectedVertices = new Set<number>();\r\n const selectedEdgeCountPerVertex = new Map<number, number>();\r\n const threshold = Math.cos(angle + AngleEpsilon);\r\n let shortestSelectedEdgeLength = Number.MAX_VALUE;\r\n\r\n for (const edge of Array.from(topology.edges.values())) {\r\n if (edge.faces.length !== 2) {\r\n continue;\r\n }\r\n\r\n const face0 = topology.faces[edge.faces[0].faceIndex];\r\n const face1 = topology.faces[edge.faces[1].faceIndex];\r\n\r\n if (Vector3.Dot(face0.normal, face1.normal) < threshold) {\r\n selectedEdges.add(edge.key);\r\n selectedVertices.add(edge.v0);\r\n selectedVertices.add(edge.v1);\r\n selectedEdgeCountPerVertex.set(edge.v0, (selectedEdgeCountPerVertex.get(edge.v0) ?? 0) + 1);\r\n selectedEdgeCountPerVertex.set(edge.v1, (selectedEdgeCountPerVertex.get(edge.v1) ?? 0) + 1);\r\n shortestSelectedEdgeLength = Math.min(shortestSelectedEdgeLength, Vector3.Distance(topology.positions[edge.v0], topology.positions[edge.v1]));\r\n }\r\n }\r\n\r\n if (!selectedEdges.size) {\r\n return _CloneVertexData(vertexData);\r\n }\r\n\r\n const bevelAmount = Math.min(amount, shortestSelectedEdgeLength * 0.5);\r\n\r\n if (bevelAmount <= PositionEpsilon) {\r\n return _CloneVertexData(vertexData);\r\n }\r\n\r\n const faceClipEdges = _BuildCoplanarFaceClipEdges(topology, selectedEdges);\r\n const attributeDescriptors = _BuildAttributeDescriptors(vertexData, vertexData.positions!.length / 3);\r\n const attributeLength = _GetAttributeLength(attributeDescriptors);\r\n const outputPositions: number[] = [];\r\n const outputNormals: Vector3[] = [];\r\n const outputNormalContributions: Vector3[][] = [];\r\n const outputVertexAttributes: number[][] = [];\r\n const outputIndices: number[] = [];\r\n const outputTriangleMaterialIndices: number[] = [];\r\n const outputVertexBuckets = new Map<string, number[]>();\r\n const outputVertexGroups: string[] = [];\r\n const faceEdgeSegments = new Map<string, BevelFaceEdgeSegment>();\r\n const capPoints = new Map<number, BevelCapPoint[]>();\r\n const preparedFaces: BevelPreparedFace[] = [];\r\n const edgeIntervals = new Map<string, BevelEdgeInterval>();\r\n\r\n const getOrCreateVertex = (position: Vector3, normal: Vector3, smoothingGroup: string, attributes: number[]) => {\r\n const normalizedNormal = normal.normalizeToNew();\r\n const vertexAttributes = attributeLength ? (attributes.length === attributeLength ? attributes : new Array<number>(attributeLength).fill(0)) : [];\r\n const qx = _OutputQuantize(position.x);\r\n const qy = _OutputQuantize(position.y);\r\n const qz = _OutputQuantize(position.z);\r\n let canonicalIndex = -1;\r\n\r\n for (let dz = -1; dz <= 1; dz++) {\r\n for (let dy = -1; dy <= 1; dy++) {\r\n for (let dx = -1; dx <= 1; dx++) {\r\n const bucket = outputVertexBuckets.get(_OutputPositionKey(qx + dx, qy + dy, qz + dz));\r\n\r\n if (!bucket) {\r\n continue;\r\n }\r\n\r\n for (const index of bucket) {\r\n const outputIndex = index * 3;\r\n const deltaX = outputPositions[outputIndex] - position.x;\r\n const deltaY = outputPositions[outputIndex + 1] - position.y;\r\n const deltaZ = outputPositions[outputIndex + 2] - position.z;\r\n\r\n if (deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ <= OutputPositionEpsilon * OutputPositionEpsilon) {\r\n if (canonicalIndex === -1) {\r\n canonicalIndex = index;\r\n }\r\n\r\n if (outputVertexGroups[index] !== smoothingGroup) {\r\n continue;\r\n }\r\n\r\n if (!_AttributesMatch(outputVertexAttributes[index], vertexAttributes)) {\r\n continue;\r\n }\r\n\r\n const normalContributions = outputNormalContributions[index];\r\n if (!normalContributions.some((normal) => Vector3.Dot(normal, normalizedNormal) > 1 - PositionEpsilon)) {\r\n normalContributions.push(normalizedNormal);\r\n outputNormals[index].addInPlace(normalizedNormal);\r\n }\r\n return index;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const index = outputPositions.length / 3;\r\n const outputX = canonicalIndex === -1 ? position.x : outputPositions[canonicalIndex * 3];\r\n const outputY = canonicalIndex === -1 ? position.y : outputPositions[canonicalIndex * 3 + 1];\r\n const outputZ = canonicalIndex === -1 ? position.z : outputPositions[canonicalIndex * 3 + 2];\r\n const key = _OutputPositionKey(_OutputQuantize(outputX), _OutputQuantize(outputY), _OutputQuantize(outputZ));\r\n let bucket = outputVertexBuckets.get(key);\r\n\r\n if (!bucket) {\r\n bucket = [];\r\n outputVertexBuckets.set(key, bucket);\r\n }\r\n\r\n bucket.push(index);\r\n outputPositions.push(outputX, outputY, outputZ);\r\n outputNormals.push(normalizedNormal);\r\n outputNormalContributions.push([normalizedNormal.clone()]);\r\n outputVertexAttributes.push(vertexAttributes.slice());\r\n outputVertexGroups.push(smoothingGroup);\r\n\r\n return index;\r\n };\r\n\r\n const addCapPoint = (vertexIndex: number, point: Vector3, normal: Vector3, attributes: number[], materialIndex: number) => {\r\n let points = capPoints.get(vertexIndex);\r\n if (!points) {\r\n points = [];\r\n capPoints.set(vertexIndex, points);\r\n }\r\n _AddUniquePoint(points, point, normal, attributes, materialIndex);\r\n };\r\n\r\n const addTriangle = (\r\n p0: Vector3,\r\n p1: Vector3,\r\n p2: Vector3,\r\n targetNormal: Vector3,\r\n n0 = targetNormal,\r\n n1 = targetNormal,\r\n n2 = targetNormal,\r\n smoothingGroup = \"smooth\",\r\n p0Attributes: number[] = [],\r\n p1Attributes: number[] = [],\r\n p2Attributes: number[] = [],\r\n materialIndex = 0\r\n ) => {\r\n const edge0 = p1.subtract(p0);\r\n const edge1 = p2.subtract(p0);\r\n const normal = Vector3.Cross(edge0, edge1);\r\n\r\n if (normal.lengthSquared() < TriangleAreaEpsilon) {\r\n return;\r\n }\r\n\r\n let v1 = p1;\r\n let v2 = p2;\r\n let vn1 = n1;\r\n let vn2 = n2;\r\n let va1 = p1Attributes;\r\n let va2 = p2Attributes;\r\n\r\n if (Vector3.Dot(normal, targetNormal) > 0) {\r\n v1 = p2;\r\n v2 = p1;\r\n vn1 = n2;\r\n vn2 = n1;\r\n va1 = p2Attributes;\r\n va2 = p1Attributes;\r\n }\r\n\r\n const i0 = getOrCreateVertex(p0, n0, smoothingGroup, p0Attributes);\r\n const i1 = getOrCreateVertex(v1, vn1, smoothingGroup, va1);\r\n const i2 = getOrCreateVertex(v2, vn2, smoothingGroup, va2);\r\n\r\n if (i0 === i1 || i1 === i2 || i2 === i0) {\r\n return;\r\n }\r\n\r\n outputIndices.push(i0, i1, i2);\r\n outputTriangleMaterialIndices.push(materialIndex);\r\n };\r\n\r\n const addFacePolygon = (polygon: BevelPolygonPoint[], normal: Vector3, smoothingGroup: string, useFlatNormals: boolean) => {\r\n const center = new Vector3();\r\n const centerAttributes = _AverageAttributes(\r\n polygon.map((point) => point.attributes),\r\n attributeLength\r\n );\r\n const materialIndex = polygon[0]?.materialIndex ?? 0;\r\n const centerNormal = useFlatNormals\r\n ? normal\r\n : _NormalizeNormalOrFallback(\r\n polygon.reduce((accumulator, point) => accumulator.addInPlace(point.normal), new Vector3()),\r\n normal\r\n );\r\n\r\n for (const point of polygon) {\r\n center.addInPlace(point.position);\r\n }\r\n center.scaleInPlace(1 / polygon.length);\r\n\r\n for (let index = 0; index < polygon.length; index++) {\r\n const nextIndex = (index + 1) % polygon.length;\r\n addTriangle(\r\n center,\r\n polygon[index].position,\r\n polygon[nextIndex].position,\r\n normal,\r\n centerNormal,\r\n useFlatNormals ? normal : polygon[index].normal,\r\n useFlatNormals ? normal : polygon[nextIndex].normal,\r\n smoothingGroup,\r\n centerAttributes,\r\n polygon[index].attributes,\r\n polygon[nextIndex].attributes,\r\n materialIndex\r\n );\r\n }\r\n };\r\n\r\n for (let faceIndex = 0; faceIndex < topology.faces.length; faceIndex++) {\r\n const face = topology.faces[faceIndex];\r\n const isFlat = _IsFlatFace(face);\r\n let polygon = face.indices.map((index, cornerIndex) => ({\r\n position: topology.positions[index].clone(),\r\n normal: face.cornerNormals[cornerIndex].clone(),\r\n attributes: _GetVertexAttributes(attributeDescriptors, face.originalIndices[cornerIndex]),\r\n materialIndex: face.materialIndex,\r\n }));\r\n const selectedFaceEdges: BevelFaceClipEdge[] = [];\r\n\r\n for (let edgeIndex = 0; edgeIndex < 3; edgeIndex++) {\r\n const start = face.indices[edgeIndex];\r\n const end = face.indices[(edgeIndex + 1) % 3];\r\n const key = _EdgeKey(start, end);\r\n\r\n if (!selectedEdges.has(key)) {\r\n continue;\r\n }\r\n\r\n const edgeStart = topology.positions[start];\r\n const edgeEnd = topology.positions[end];\r\n const edgeDirection = edgeEnd.subtract(edgeStart).normalize();\r\n const inward = Vector3.Cross(face.normal, edgeDirection).normalize();\r\n selectedFaceEdges.push({ key, start, end, inward });\r\n }\r\n\r\n const clipEdges = faceClipEdges.get(faceIndex) ?? selectedFaceEdges;\r\n\r\n for (const clipEdge of clipEdges) {\r\n polygon = _ClipPolygonAgainstEdge(polygon, topology.positions[clipEdge.start], clipEdge.inward, bevelAmount);\r\n }\r\n\r\n if (isFlat) {\r\n for (const point of polygon) {\r\n point.normal = face.normal.clone();\r\n }\r\n }\r\n\r\n preparedFaces.push({ faceIndex, polygon, selectedFaceEdges, isFlat });\r\n\r\n for (const selectedFaceEdge of selectedFaceEdges) {\r\n const edge = topology.edges.get(selectedFaceEdge.key)!;\r\n const edgeStart = topology.positions[edge.v0];\r\n const edgeEnd = topology.positions[edge.v1];\r\n const axis = edgeEnd.subtract(edgeStart);\r\n const edgeLength = axis.length();\r\n\r\n if (edgeLength < PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n axis.normalize();\r\n\r\n const pointsOnLine: Array<{ point: BevelPolygonPoint; t: number }> = [];\r\n const orientedEdgeStart = topology.positions[selectedFaceEdge.start];\r\n\r\n for (const point of polygon) {\r\n const distance = Vector3.Dot(point.position.subtract(orientedEdgeStart), selectedFaceEdge.inward);\r\n\r\n if (Math.abs(distance - bevelAmount) < PositionEpsilon * 10) {\r\n const t = Vector3.Dot(point.position.subtract(edgeStart), axis);\r\n if (t >= -PositionEpsilon && t <= edgeLength + PositionEpsilon) {\r\n pointsOnLine.push({ point, t: Math.min(edgeLength, Math.max(0, t)) });\r\n }\r\n }\r\n }\r\n\r\n if (pointsOnLine.length < 2) {\r\n continue;\r\n }\r\n\r\n pointsOnLine.sort((a, b) => a.t - b.t);\r\n\r\n const minPoint = pointsOnLine[0].point.position;\r\n const maxPoint = pointsOnLine[pointsOnLine.length - 1].point.position;\r\n const minNormal = pointsOnLine[0].point.normal;\r\n const maxNormal = pointsOnLine[pointsOnLine.length - 1].point.normal;\r\n const minAttributes = pointsOnLine[0].point.attributes;\r\n const maxAttributes = pointsOnLine[pointsOnLine.length - 1].point.attributes;\r\n const segment: BevelFaceEdgeSegment = {\r\n edgeKey: selectedFaceEdge.key,\r\n faceIndex,\r\n inward: selectedFaceEdge.inward,\r\n tMin: pointsOnLine[0].t,\r\n tMax: pointsOnLine[pointsOnLine.length - 1].t,\r\n minPoint,\r\n maxPoint,\r\n minNormal,\r\n maxNormal,\r\n minAttributes,\r\n maxAttributes,\r\n materialIndex: face.materialIndex,\r\n };\r\n\r\n faceEdgeSegments.set(`${faceIndex}|${selectedFaceEdge.key}`, segment);\r\n addCapPoint(edge.v0, minPoint, pointsOnLine[0].point.normal, minAttributes, face.materialIndex);\r\n addCapPoint(edge.v1, maxPoint, pointsOnLine[pointsOnLine.length - 1].point.normal, maxAttributes, face.materialIndex);\r\n }\r\n }\r\n\r\n for (const edgeKey of Array.from(selectedEdges)) {\r\n const edge = topology.edges.get(edgeKey)!;\r\n const face0 = edge.faces[0].faceIndex;\r\n const face1 = edge.faces[1].faceIndex;\r\n const segment0 = faceEdgeSegments.get(`${face0}|${edgeKey}`);\r\n const segment1 = faceEdgeSegments.get(`${face1}|${edgeKey}`);\r\n\r\n if (!segment0 || !segment1) {\r\n continue;\r\n }\r\n\r\n const edgeStart = topology.positions[edge.v0];\r\n const edgeEnd = topology.positions[edge.v1];\r\n const axis = edgeEnd.subtract(edgeStart);\r\n const edgeLength = axis.length();\r\n\r\n if (edgeLength < PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n axis.normalize();\r\n\r\n const tStart = Math.max(segment0.tMin, segment1.tMin);\r\n const tEnd = Math.min(segment0.tMax, segment1.tMax);\r\n\r\n if (tEnd - tStart <= PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n edgeIntervals.set(edgeKey, { tStart, tEnd });\r\n }\r\n\r\n for (const preparedFace of preparedFaces) {\r\n for (const selectedFaceEdge of preparedFace.selectedFaceEdges) {\r\n const edge = topology.edges.get(selectedFaceEdge.key)!;\r\n const interval = edgeIntervals.get(selectedFaceEdge.key);\r\n const segment = faceEdgeSegments.get(`${preparedFace.faceIndex}|${selectedFaceEdge.key}`);\r\n\r\n if (!interval || !segment) {\r\n continue;\r\n }\r\n\r\n const edgeStart = topology.positions[edge.v0];\r\n const edgeEnd = topology.positions[edge.v1];\r\n const axis = edgeEnd.subtract(edgeStart);\r\n const edgeLength = axis.length();\r\n\r\n if (edgeLength < PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n axis.normalize();\r\n\r\n for (const t of [interval.tStart, interval.tEnd]) {\r\n if (t <= segment.tMin + PositionEpsilon || t >= segment.tMax - PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n _InsertPointOnPolygonBoundary(preparedFace.polygon, edgeStart.add(axis.scale(t)).addInPlace(segment.inward.scale(bevelAmount)));\r\n }\r\n }\r\n }\r\n\r\n const emittedMergedFaces = new Set<number>();\r\n const preparedFacesByPlane = new Map<string, BevelPreparedFace[]>();\r\n\r\n for (const preparedFace of preparedFaces) {\r\n if (!preparedFace.selectedFaceEdges.length || !preparedFace.isFlat) {\r\n continue;\r\n }\r\n\r\n const face = topology.faces[preparedFace.faceIndex];\r\n const distance = Vector3.Dot(topology.positions[face.indices[0]], face.normal);\r\n const planeKey = `${_PositionKey(face.normal.x, face.normal.y, face.normal.z)}:${_Quantize(distance)}`;\r\n let group = preparedFacesByPlane.get(planeKey);\r\n\r\n if (!group) {\r\n group = [];\r\n preparedFacesByPlane.set(planeKey, group);\r\n }\r\n\r\n group.push(preparedFace);\r\n }\r\n\r\n for (const group of Array.from(preparedFacesByPlane.values())) {\r\n if (group.length < 2) {\r\n continue;\r\n }\r\n\r\n const mergedPolygon = _BuildMergedBoundaryPolygon(group.map((preparedFace) => preparedFace.polygon));\r\n\r\n if (!mergedPolygon || mergedPolygon.length < 3) {\r\n continue;\r\n }\r\n\r\n const face = topology.faces[group[0].faceIndex];\r\n addFacePolygon(mergedPolygon, face.normal, `face-flat:${_PositionKey(face.normal.x, face.normal.y, face.normal.z)}`, true);\r\n\r\n for (const preparedFace of group) {\r\n emittedMergedFaces.add(preparedFace.faceIndex);\r\n }\r\n }\r\n\r\n for (const preparedFace of preparedFaces) {\r\n if (emittedMergedFaces.has(preparedFace.faceIndex)) {\r\n continue;\r\n }\r\n\r\n const face = topology.faces[preparedFace.faceIndex];\r\n const smoothingGroup = preparedFace.selectedFaceEdges.length && !preparedFace.isFlat ? \"smooth\" : `face-flat:${_PositionKey(face.normal.x, face.normal.y, face.normal.z)}`;\r\n\r\n if (preparedFace.polygon.length >= 3) {\r\n if (smoothingGroup === \"smooth\") {\r\n addFacePolygon(preparedFace.polygon, face.normal, smoothingGroup, false);\r\n } else {\r\n for (let index = 1; index < preparedFace.polygon.length - 1; index++) {\r\n addTriangle(\r\n preparedFace.polygon[0].position,\r\n preparedFace.polygon[index].position,\r\n preparedFace.polygon[index + 1].position,\r\n face.normal,\r\n face.normal,\r\n face.normal,\r\n face.normal,\r\n smoothingGroup,\r\n preparedFace.polygon[0].attributes,\r\n preparedFace.polygon[index].attributes,\r\n preparedFace.polygon[index + 1].attributes,\r\n face.materialIndex\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const edgeKey of Array.from(selectedEdges)) {\r\n const edge = topology.edges.get(edgeKey)!;\r\n const face0 = edge.faces[0].faceIndex;\r\n const face1 = edge.faces[1].faceIndex;\r\n const segment0 = faceEdgeSegments.get(`${face0}|${edgeKey}`);\r\n const segment1 = faceEdgeSegments.get(`${face1}|${edgeKey}`);\r\n const interval = edgeIntervals.get(edgeKey);\r\n\r\n if (!segment0 || !segment1 || !interval) {\r\n continue;\r\n }\r\n\r\n const edgeStart = topology.positions[edge.v0];\r\n const edgeEnd = topology.positions[edge.v1];\r\n const axis = edgeEnd.subtract(edgeStart);\r\n const edgeLength = axis.length();\r\n\r\n if (edgeLength < PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n axis.normalize();\r\n\r\n const { tStart, tEnd } = interval;\r\n const faceNormal0 = topology.faces[segment0.faceIndex].normal;\r\n const faceNormal1 = topology.faces[segment1.faceIndex].normal;\r\n const segment0Start = _InterpolateSegmentPoint(segment0, tStart);\r\n const segment1Start = _InterpolateSegmentPoint(segment1, tStart);\r\n const segment0End = _InterpolateSegmentPoint(segment0, tEnd);\r\n const segment1End = _InterpolateSegmentPoint(segment1, tEnd);\r\n const segment0StartNormal = _InterpolateSegmentNormal(segment0, tStart);\r\n const segment1StartNormal = _InterpolateSegmentNormal(segment1, tStart);\r\n const segment0EndNormal = _InterpolateSegmentNormal(segment0, tEnd);\r\n const segment1EndNormal = _InterpolateSegmentNormal(segment1, tEnd);\r\n const segment0StartAttributes = _InterpolateSegmentAttributes(segment0, tStart);\r\n const segment1StartAttributes = _InterpolateSegmentAttributes(segment1, tStart);\r\n const segment0EndAttributes = _InterpolateSegmentAttributes(segment0, tEnd);\r\n const segment1EndAttributes = _InterpolateSegmentAttributes(segment1, tEnd);\r\n const centerStart = segment0Start\r\n .subtract(faceNormal0.scale(bevelAmount))\r\n .addInPlace(segment1Start.subtract(faceNormal1.scale(bevelAmount)))\r\n .scaleInPlace(0.5);\r\n const centerEnd = segment0End\r\n .subtract(faceNormal0.scale(bevelAmount))\r\n .addInPlace(segment1End.subtract(faceNormal1.scale(bevelAmount)))\r\n .scaleInPlace(0.5);\r\n const startProfilePoints: Vector3[] = [];\r\n const endProfilePoints: Vector3[] = [];\r\n const startProfileNormals: Vector3[] = [];\r\n const endProfileNormals: Vector3[] = [];\r\n const startProfileAttributes: number[][] = [];\r\n const endProfileAttributes: number[][] = [];\r\n\r\n for (let segmentIndex = 0; segmentIndex <= segments; segmentIndex++) {\r\n const profileAmount = segmentIndex / segments;\r\n const profileNormal = _SlerpDirections(faceNormal0, faceNormal1, profileAmount);\r\n const startNormal = _SlerpDirections(segment0StartNormal, segment1StartNormal, profileAmount);\r\n const endNormal = _SlerpDirections(segment0EndNormal, segment1EndNormal, profileAmount);\r\n const startAttributes = _InterpolateAttributes(segment0StartAttributes, segment1StartAttributes, profileAmount);\r\n const endAttributes = _InterpolateAttributes(segment0EndAttributes, segment1EndAttributes, profileAmount);\r\n let startPoint = centerStart.add(profileNormal.scale(bevelAmount));\r\n let endPoint = centerEnd.add(profileNormal.scale(bevelAmount));\r\n\r\n if (segmentIndex === 0) {\r\n startPoint = segment0Start;\r\n endPoint = segment0End;\r\n } else if (segmentIndex === segments) {\r\n startPoint = segment1Start;\r\n endPoint = segment1End;\r\n }\r\n\r\n startProfilePoints.push(startPoint);\r\n endProfilePoints.push(endPoint);\r\n startProfileNormals.push(startNormal);\r\n endProfileNormals.push(endNormal);\r\n startProfileAttributes.push(startAttributes);\r\n endProfileAttributes.push(endAttributes);\r\n addCapPoint(edge.v0, startPoint, startNormal, startAttributes, segment0.materialIndex);\r\n addCapPoint(edge.v1, endPoint, endNormal, endAttributes, segment0.materialIndex);\r\n }\r\n\r\n for (let segmentIndex = 0; segmentIndex < segments; segmentIndex++) {\r\n const normalTarget = _SlerpDirections(faceNormal0, faceNormal1, (segmentIndex + 0.5) / segments);\r\n\r\n addTriangle(\r\n startProfilePoints[segmentIndex],\r\n endProfilePoints[segmentIndex],\r\n endProfilePoints[segmentIndex + 1],\r\n normalTarget,\r\n startProfileNormals[segmentIndex],\r\n endProfileNormals[segmentIndex],\r\n endProfileNormals[segmentIndex + 1],\r\n \"smooth\",\r\n startProfileAttributes[segmentIndex],\r\n endProfileAttributes[segmentIndex],\r\n endProfileAttributes[segmentIndex + 1],\r\n segment0.materialIndex\r\n );\r\n addTriangle(\r\n startProfilePoints[segmentIndex],\r\n endProfilePoints[segmentIndex + 1],\r\n startProfilePoints[segmentIndex + 1],\r\n normalTarget,\r\n startProfileNormals[segmentIndex],\r\n endProfileNormals[segmentIndex + 1],\r\n startProfileNormals[segmentIndex + 1],\r\n \"smooth\",\r\n startProfileAttributes[segmentIndex],\r\n endProfileAttributes[segmentIndex + 1],\r\n startProfileAttributes[segmentIndex + 1],\r\n segment0.materialIndex\r\n );\r\n }\r\n }\r\n\r\n const addSphericalCornerPatch = (vertexIndex: number) => {\r\n if ((selectedEdgeCountPerVertex.get(vertexIndex) ?? 0) < 3) {\r\n return false;\r\n }\r\n\r\n const incidentNormals: Vector3[] = [];\r\n const vertexPosition = topology.positions[vertexIndex];\r\n const cornerCapPoints = capPoints.get(vertexIndex) ?? [];\r\n const cornerAttributes = _AverageAttributes(\r\n cornerCapPoints.map((point) => _GetCapPointAttributes(point)),\r\n attributeLength\r\n );\r\n const materialIndex = cornerCapPoints.length ? _GetCapPointMaterialIndex(cornerCapPoints[0]) : 0;\r\n\r\n for (const edgeKey of Array.from(selectedEdges)) {\r\n const edge = topology.edges.get(edgeKey)!;\r\n\r\n if (edge.v0 !== vertexIndex && edge.v1 !== vertexIndex) {\r\n continue;\r\n }\r\n\r\n for (const edgeFace of edge.faces) {\r\n _AddUniqueNormal(incidentNormals, topology.faces[edgeFace.faceIndex].normal);\r\n }\r\n }\r\n\r\n if (incidentNormals.length !== 3) {\r\n return false;\r\n }\r\n\r\n const averageNormal = incidentNormals[0].add(incidentNormals[1]).addInPlace(incidentNormals[2]).normalize();\r\n const tangent = incidentNormals[0].subtract(averageNormal.scale(Vector3.Dot(incidentNormals[0], averageNormal))).normalize();\r\n const bitangent = Vector3.Cross(averageNormal, tangent).normalize();\r\n incidentNormals.sort((a, b) => Math.atan2(Vector3.Dot(a, bitangent), Vector3.Dot(a, tangent)) - Math.atan2(Vector3.Dot(b, bitangent), Vector3.Dot(b, tangent)));\r\n\r\n const distances = incidentNormals.map((normal) => Vector3.Dot(vertexPosition, normal) - bevelAmount);\r\n const center = _SolveThreePlaneIntersection(incidentNormals, distances);\r\n\r\n if (!center) {\r\n return false;\r\n }\r\n\r\n const rows: BevelPolygonPoint[][] = [];\r\n for (let rowIndex = 0; rowIndex <= segments; rowIndex++) {\r\n const rowAmount = rowIndex / segments;\r\n const left = _SlerpDirections(incidentNormals[0], incidentNormals[1], rowAmount);\r\n const right = _SlerpDirections(incidentNormals[0], incidentNormals[2], rowAmount);\r\n const row: BevelPolygonPoint[] = [];\r\n\r\n for (let columnIndex = 0; columnIndex <= rowIndex; columnIndex++) {\r\n const columnAmount = rowIndex === 0 ? 0 : columnIndex / rowIndex;\r\n const direction = rowIndex === 0 ? incidentNormals[0].clone() : _SlerpDirections(left, right, columnAmount);\r\n row.push({\r\n position: center.add(direction.scale(bevelAmount)),\r\n normal: direction,\r\n attributes: cornerAttributes,\r\n materialIndex,\r\n });\r\n }\r\n\r\n rows.push(row);\r\n }\r\n\r\n for (let rowIndex = 0; rowIndex < segments; rowIndex++) {\r\n const row = rows[rowIndex];\r\n const nextRow = rows[rowIndex + 1];\r\n\r\n for (let columnIndex = 0; columnIndex < row.length; columnIndex++) {\r\n const targetNormal0 = row[columnIndex].position.subtract(center).normalize();\r\n const targetNormal1 = nextRow[columnIndex].position.subtract(center).normalize();\r\n const targetNormal2 = nextRow[columnIndex + 1].position.subtract(center).normalize();\r\n const targetNormal = targetNormal0.addInPlace(targetNormal1).addInPlace(targetNormal2).normalize();\r\n\r\n addTriangle(\r\n row[columnIndex].position,\r\n nextRow[columnIndex].position,\r\n nextRow[columnIndex + 1].position,\r\n targetNormal,\r\n targetNormal0,\r\n targetNormal1,\r\n targetNormal2,\r\n \"smooth\",\r\n row[columnIndex].attributes,\r\n nextRow[columnIndex].attributes,\r\n nextRow[columnIndex + 1].attributes,\r\n materialIndex\r\n );\r\n\r\n if (columnIndex < row.length - 1) {\r\n const secondTargetNormal0 = row[columnIndex].position.subtract(center).normalize();\r\n const secondTargetNormal1 = nextRow[columnIndex + 1].position.subtract(center).normalize();\r\n const secondTargetNormal2 = row[columnIndex + 1].position.subtract(center).normalize();\r\n const secondTargetNormal = secondTargetNormal0.add(secondTargetNormal1).addInPlace(secondTargetNormal2).normalize();\r\n\r\n addTriangle(\r\n row[columnIndex].position,\r\n nextRow[columnIndex + 1].position,\r\n row[columnIndex + 1].position,\r\n secondTargetNormal,\r\n secondTargetNormal0,\r\n secondTargetNormal1,\r\n secondTargetNormal2,\r\n \"smooth\",\r\n row[columnIndex].attributes,\r\n nextRow[columnIndex + 1].attributes,\r\n row[columnIndex + 1].attributes,\r\n materialIndex\r\n );\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const verticesWithSphericalPatch = new Set<number>();\r\n for (const vertexIndex of Array.from(selectedVertices)) {\r\n if (addSphericalCornerPatch(vertexIndex)) {\r\n verticesWithSphericalPatch.add(vertexIndex);\r\n }\r\n }\r\n\r\n for (const [vertexIndex, points] of Array.from(capPoints)) {\r\n if (points.length < 3) {\r\n continue;\r\n }\r\n\r\n if (verticesWithSphericalPatch.has(vertexIndex)) {\r\n continue;\r\n }\r\n\r\n const center = new Vector3();\r\n for (const point of points) {\r\n center.addInPlace(_GetCapPointPosition(point));\r\n }\r\n center.scaleInPlace(1 / points.length);\r\n\r\n let normal = new Vector3();\r\n const incidentFaces = topology.vertexFaces.get(vertexIndex) || [];\r\n for (const faceIndex of incidentFaces) {\r\n normal.addInPlace(topology.faces[faceIndex].normal);\r\n }\r\n\r\n if (normal.lengthSquared() < NormalEpsilon) {\r\n normal = topology.positions[vertexIndex].subtract(center);\r\n }\r\n\r\n if (normal.lengthSquared() < NormalEpsilon) {\r\n continue;\r\n }\r\n\r\n normal.normalize();\r\n\r\n const reference = Math.abs(normal.y) < 0.9 ? Vector3.Up() : Vector3.Right();\r\n const tangent = Vector3.Cross(reference, normal).normalize();\r\n const bitangent = Vector3.Cross(normal, tangent).normalize();\r\n const sortedPoints = points.slice().sort((a, b) => {\r\n const da = _GetCapPointPosition(a).subtract(center);\r\n const db = _GetCapPointPosition(b).subtract(center);\r\n const angleA = Math.atan2(Vector3.Dot(da, bitangent), Vector3.Dot(da, tangent));\r\n const angleB = Math.atan2(Vector3.Dot(db, bitangent), Vector3.Dot(db, tangent));\r\n return angleA - angleB;\r\n });\r\n\r\n if ((selectedEdgeCountPerVertex.get(vertexIndex) ?? 0) === 2) {\r\n const polygonPoints = sortedPoints.map((point) => ({\r\n position: _GetCapPointPosition(point),\r\n normal: _GetCapPointNormal(point, normal),\r\n attributes: _GetCapPointAttributes(point),\r\n materialIndex: _GetCapPointMaterialIndex(point),\r\n }));\r\n const addPatchTriangle = (point0: BevelPolygonPoint, point1: BevelPolygonPoint, point2: BevelPolygonPoint) => {\r\n const targetNormal = _NormalizeNormalOrFallback(point0.normal.add(point1.normal).addInPlace(point2.normal), normal);\r\n addTriangle(\r\n point0.position,\r\n point1.position,\r\n point2.position,\r\n targetNormal,\r\n point0.normal,\r\n point1.normal,\r\n point2.normal,\r\n \"smooth\",\r\n point0.attributes,\r\n point1.attributes,\r\n point2.attributes,\r\n point0.materialIndex\r\n );\r\n };\r\n\r\n while (polygonPoints.length > 3) {\r\n let bestIndex = -1;\r\n let bestScore = Number.MAX_VALUE;\r\n\r\n for (let index = 0; index < polygonPoints.length; index++) {\r\n const previous = polygonPoints[(index + polygonPoints.length - 1) % polygonPoints.length];\r\n const current = polygonPoints[index];\r\n const next = polygonPoints[(index + 1) % polygonPoints.length];\r\n const edge0 = current.position.subtract(previous.position);\r\n const edge1 = next.position.subtract(previous.position);\r\n const triangleNormal = Vector3.Cross(edge0, edge1);\r\n\r\n if (triangleNormal.lengthSquared() < TriangleAreaEpsilon) {\r\n continue;\r\n }\r\n\r\n const score = previous.position.subtract(next.position).lengthSquared();\r\n if (score < bestScore) {\r\n bestScore = score;\r\n bestIndex = index;\r\n }\r\n }\r\n\r\n if (bestIndex === -1) {\r\n break;\r\n }\r\n\r\n addPatchTriangle(\r\n polygonPoints[(bestIndex + polygonPoints.length - 1) % polygonPoints.length],\r\n polygonPoints[bestIndex],\r\n polygonPoints[(bestIndex + 1) % polygonPoints.length]\r\n );\r\n polygonPoints.splice(bestIndex, 1);\r\n }\r\n\r\n if (polygonPoints.length === 3) {\r\n addPatchTriangle(polygonPoints[0], polygonPoints[1], polygonPoints[2]);\r\n }\r\n\r\n continue;\r\n }\r\n\r\n const centerAttributes = _AverageAttributes(\r\n sortedPoints.map((point) => _GetCapPointAttributes(point)),\r\n attributeLength\r\n );\r\n const centerMaterialIndex = sortedPoints.length ? _GetCapPointMaterialIndex(sortedPoints[0]) : 0;\r\n for (let index = 0; index < sortedPoints.length; index++) {\r\n const point0 = sortedPoints[index];\r\n const point1 = sortedPoints[(index + 1) % sortedPoints.length];\r\n const point0Position = _GetCapPointPosition(point0);\r\n const point1Position = _GetCapPointPosition(point1);\r\n\r\n addTriangle(\r\n center,\r\n point0Position,\r\n point1Position,\r\n normal,\r\n normal,\r\n _GetCapPointNormal(point0, normal),\r\n _GetCapPointNormal(point1, normal),\r\n \"smooth\",\r\n centerAttributes,\r\n _GetCapPointAttributes(point0),\r\n _GetCapPointAttributes(point1),\r\n centerMaterialIndex\r\n );\r\n }\r\n }\r\n\r\n if (!outputPositions.length || !outputIndices.length) {\r\n return _CloneVertexData(vertexData);\r\n }\r\n\r\n const result = new VertexData();\r\n result.positions = outputPositions;\r\n result.normals = [];\r\n\r\n for (let index = 0; index < outputNormals.length; index++) {\r\n const normal = outputNormals[index];\r\n normal.normalize();\r\n\r\n result.normals.push(normal.x, normal.y, normal.z);\r\n }\r\n\r\n _AssignAttributeOutputs(result, attributeDescriptors, outputVertexAttributes);\r\n\r\n const materialResult = _BuildMaterialInfoResult(vertexData, outputIndices, outputTriangleMaterialIndices, outputPositions.length / 3);\r\n result.indices = materialResult.indices;\r\n result.materialInfos = materialResult.materialInfos;\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Block used to bevel sharp edges in a geometry.\r\n */\r\nexport class BevelBlock extends NodeGeometryBlock {\r\n /**\r\n * Gets or sets a boolean indicating that this block can evaluate context.\r\n * Build performance is improved when this value is set to false as the system will cache values instead of reevaluating everything per context change.\r\n */\r\n @editableInPropertyPage(\"Evaluate context\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public evaluateContext = false;\r\n\r\n /**\r\n * Creates a new BevelBlock.\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerInput(\"geometry\", NodeGeometryBlockConnectionPointTypes.Geometry);\r\n this.registerInput(\"amount\", NodeGeometryBlockConnectionPointTypes.Float, true, 0.1, 0, 1);\r\n this.registerInput(\"segments\", NodeGeometryBlockConnectionPointTypes.Int, true, 1, 1, 64);\r\n this.registerInput(\"angle\", NodeGeometryBlockConnectionPointTypes.Float, true, 30, 0, 180);\r\n this.registerOutput(\"output\", NodeGeometryBlockConnectionPointTypes.Geometry);\r\n }\r\n\r\n /**\r\n * Gets the current class name.\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"BevelBlock\";\r\n }\r\n\r\n /**\r\n * Gets the geometry input component.\r\n */\r\n public get geometry(): NodeGeometryConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the bevel amount input component.\r\n */\r\n public get amount(): NodeGeometryConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the bevel segment count input component.\r\n */\r\n public get segments(): NodeGeometryConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the angle threshold input component in degrees.\r\n */\r\n public get angle(): NodeGeometryConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the geometry output component.\r\n */\r\n public get output(): NodeGeometryConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeGeometryBuildState) {\r\n const func = (state: NodeGeometryBuildState) => {\r\n const source = this.geometry.getConnectedValue(state) as VertexData;\r\n\r\n if (!source || !source.positions) {\r\n return null;\r\n }\r\n\r\n const amount = Math.min(1, Math.max(0, this.amount.getConnectedValue(state) ?? 0.1));\r\n const segments = Math.min(64, Math.max(1, Math.floor(this.segments.getConnectedValue(state) ?? 1)));\r\n const angleDegrees = Math.max(0, Math.min(180, this.angle.getConnectedValue(state) ?? 30));\r\n const angle = (angleDegrees * Math.PI) / 180;\r\n\r\n return _BevelVertexData(source, amount, segments, angle);\r\n };\r\n\r\n if (this.evaluateContext) {\r\n this.output._storedFunction = func;\r\n } else {\r\n this.output._storedFunction = null;\r\n this.output._storedValue = func(state);\r\n }\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n return super._dumpPropertiesCode() + `${this._codeVariableName}.evaluateContext = ${this.evaluateContext ? \"true\" : \"false\"};\\n`;\r\n }\r\n\r\n /**\r\n * Serializes this block in a JSON representation.\r\n * @returns the serialized block object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.evaluateContext = this.evaluateContext;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /** @internal */\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n if (serializationObject.evaluateContext !== undefined) {\r\n this.evaluateContext = serializationObject.evaluateContext;\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for bevelBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterBevelBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.BevelBlock\", BevelBlock);\r\n}\r\n"]}
1
+ {"version":3,"file":"bevelBlock.pure.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Meshes/Node/Blocks/bevelBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../Decorators/nodeDecorator\";\r\nimport { Vector3 } from \"../../../Maths/math.vector.pure\";\r\nimport { VertexData, VertexDataMaterialInfo } from \"../../mesh.vertexData\";\r\nimport { NodeGeometryBlockConnectionPointTypes } from \"../Enums/nodeGeometryConnectionPointTypes\";\r\nimport { type NodeGeometryBuildState } from \"../nodeGeometryBuildState\";\r\nimport { NodeGeometryBlock } from \"../nodeGeometryBlock\";\r\nimport { type NodeGeometryConnectionPoint } from \"../nodeGeometryBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\n\r\nconst PositionEpsilon = 1e-5;\r\nconst OutputPositionEpsilon = 1e-4;\r\nconst NormalEpsilon = 1e-8;\r\nconst AngleEpsilon = 1e-7;\r\nconst TriangleAreaEpsilon = PositionEpsilon * PositionEpsilon * PositionEpsilon * PositionEpsilon;\r\n\r\ntype BevelFaceEdgeSegment = {\r\n edgeKey: string;\r\n faceIndex: number;\r\n inward: Vector3;\r\n tMin: number;\r\n tMax: number;\r\n minPoint: Vector3;\r\n maxPoint: Vector3;\r\n minNormal: Vector3;\r\n maxNormal: Vector3;\r\n minAttributes: number[];\r\n maxAttributes: number[];\r\n materialIndex: number;\r\n};\r\n\r\ntype BevelPolygonPoint = {\r\n position: Vector3;\r\n normal: Vector3;\r\n attributes: number[];\r\n materialIndex: number;\r\n};\r\n\r\ntype BevelCapPoint = Vector3 | BevelPolygonPoint;\r\n\r\ntype BevelPreparedFace = {\r\n faceIndex: number;\r\n polygon: BevelPolygonPoint[];\r\n selectedFaceEdges: BevelFaceClipEdge[];\r\n isFlat: boolean;\r\n};\r\n\r\ntype BevelEdgeInterval = {\r\n tStart: number;\r\n tEnd: number;\r\n};\r\n\r\ntype BevelFaceClipEdge = {\r\n key: string;\r\n start: number;\r\n end: number;\r\n inward: Vector3;\r\n};\r\n\r\ntype BevelFace = {\r\n indices: [number, number, number];\r\n originalIndices: [number, number, number];\r\n normal: Vector3;\r\n cornerNormals: [Vector3, Vector3, Vector3];\r\n materialIndex: number;\r\n};\r\n\r\ntype BevelEdgeFace = {\r\n faceIndex: number;\r\n};\r\n\r\ntype BevelEdge = {\r\n key: string;\r\n v0: number;\r\n v1: number;\r\n faces: BevelEdgeFace[];\r\n};\r\n\r\ntype BevelTopology = {\r\n positions: Vector3[];\r\n faces: BevelFace[];\r\n edges: Map<string, BevelEdge>;\r\n vertexFaces: Map<number, number[]>;\r\n};\r\n\r\ntype BevelAttributeName =\r\n | \"tangents\"\r\n | \"uvs\"\r\n | \"uvs2\"\r\n | \"uvs3\"\r\n | \"uvs4\"\r\n | \"uvs5\"\r\n | \"uvs6\"\r\n | \"colors\"\r\n | \"matricesIndices\"\r\n | \"matricesWeights\"\r\n | \"matricesIndicesExtra\"\r\n | \"matricesWeightsExtra\";\r\n\r\ntype BevelAttributeDescriptor = {\r\n name: BevelAttributeName;\r\n source: ArrayLike<number>;\r\n stride: number;\r\n offset: number;\r\n output: number[];\r\n};\r\n\r\nfunction _Quantize(value: number) {\r\n const quantized = Math.round(value / PositionEpsilon);\r\n return quantized === 0 ? 0 : quantized;\r\n}\r\n\r\nfunction _PositionKey(x: number, y: number, z: number) {\r\n return `${_Quantize(x)}:${_Quantize(y)}:${_Quantize(z)}`;\r\n}\r\n\r\nfunction _VectorKey(position: Vector3) {\r\n return _PositionKey(position.x, position.y, position.z);\r\n}\r\n\r\nfunction _OutputQuantize(value: number) {\r\n const quantized = Math.round(value / OutputPositionEpsilon);\r\n return quantized === 0 ? 0 : quantized;\r\n}\r\n\r\nfunction _OutputPositionKey(x: number, y: number, z: number) {\r\n return `${x}:${y}:${z}`;\r\n}\r\n\r\nfunction _EdgeKey(v0: number, v1: number) {\r\n return v0 < v1 ? `${v0}:${v1}` : `${v1}:${v0}`;\r\n}\r\n\r\nfunction _CloneVertexData(vertexData: VertexData) {\r\n const clone = vertexData.clone();\r\n if (!clone.normals && clone.positions && clone.indices) {\r\n const normals: number[] = [];\r\n VertexData.ComputeNormals(clone.positions, clone.indices, normals);\r\n clone.normals = normals;\r\n }\r\n\r\n return clone;\r\n}\r\n\r\nfunction _NormalizeNormalOrFallback(normal: Vector3, fallback: Vector3) {\r\n return normal.lengthSquared() > NormalEpsilon ? normal.normalizeToNew() : fallback.normalizeToNew();\r\n}\r\n\r\nfunction _BuildAttributeDescriptors(vertexData: VertexData, vertexCount: number) {\r\n const descriptors: BevelAttributeDescriptor[] = [];\r\n const addDescriptor = (name: BevelAttributeName, stride: number) => {\r\n const source = vertexData[name];\r\n\r\n if (!source || source.length < vertexCount * stride) {\r\n return;\r\n }\r\n\r\n descriptors.push({\r\n name,\r\n source,\r\n stride,\r\n offset: descriptors.reduce((sum, descriptor) => sum + descriptor.stride, 0),\r\n output: [],\r\n });\r\n };\r\n\r\n addDescriptor(\"tangents\", 4);\r\n addDescriptor(\"uvs\", 2);\r\n addDescriptor(\"uvs2\", 2);\r\n addDescriptor(\"uvs3\", 2);\r\n addDescriptor(\"uvs4\", 2);\r\n addDescriptor(\"uvs5\", 2);\r\n addDescriptor(\"uvs6\", 2);\r\n if (vertexData.colors) {\r\n addDescriptor(\"colors\", vertexData.colors.length === vertexData.positions!.length ? 3 : 4);\r\n }\r\n addDescriptor(\"matricesIndices\", 4);\r\n addDescriptor(\"matricesWeights\", 4);\r\n addDescriptor(\"matricesIndicesExtra\", 4);\r\n addDescriptor(\"matricesWeightsExtra\", 4);\r\n\r\n return descriptors;\r\n}\r\n\r\nfunction _GetAttributeLength(descriptors: BevelAttributeDescriptor[]) {\r\n return descriptors.reduce((sum, descriptor) => sum + descriptor.stride, 0);\r\n}\r\n\r\nfunction _GetVertexAttributes(descriptors: BevelAttributeDescriptor[], vertexIndex: number) {\r\n const attributes: number[] = [];\r\n\r\n for (const descriptor of descriptors) {\r\n const sourceOffset = vertexIndex * descriptor.stride;\r\n for (let index = 0; index < descriptor.stride; index++) {\r\n attributes.push(descriptor.source[sourceOffset + index]);\r\n }\r\n }\r\n\r\n return attributes;\r\n}\r\n\r\nfunction _InterpolateAttributes(start: number[], end: number[], amount: number) {\r\n if (!start.length) {\r\n return start;\r\n }\r\n\r\n return start.map((value, index) => value + (end[index] - value) * amount);\r\n}\r\n\r\nfunction _AverageAttributes(attributes: number[][], length: number) {\r\n if (!length || !attributes.length) {\r\n return [];\r\n }\r\n\r\n const result = new Array<number>(length).fill(0);\r\n\r\n for (const attribute of attributes) {\r\n for (let index = 0; index < length; index++) {\r\n result[index] += attribute[index] ?? 0;\r\n }\r\n }\r\n\r\n for (let index = 0; index < length; index++) {\r\n result[index] /= attributes.length;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction _AttributesMatch(left: number[], right: number[]) {\r\n if (left.length !== right.length) {\r\n return false;\r\n }\r\n\r\n for (let index = 0; index < left.length; index++) {\r\n if (Math.abs(left[index] - right[index]) > OutputPositionEpsilon) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction _AssignAttributeOutputs(result: VertexData, descriptors: BevelAttributeDescriptor[], vertexAttributes: number[][]) {\r\n for (const descriptor of descriptors) {\r\n descriptor.output.length = 0;\r\n\r\n for (const attributes of vertexAttributes) {\r\n for (let index = 0; index < descriptor.stride; index++) {\r\n descriptor.output.push(attributes[descriptor.offset + index] ?? 0);\r\n }\r\n }\r\n\r\n switch (descriptor.name) {\r\n case \"tangents\":\r\n result.tangents = descriptor.output;\r\n break;\r\n case \"uvs\":\r\n result.uvs = descriptor.output;\r\n break;\r\n case \"uvs2\":\r\n result.uvs2 = descriptor.output;\r\n break;\r\n case \"uvs3\":\r\n result.uvs3 = descriptor.output;\r\n break;\r\n case \"uvs4\":\r\n result.uvs4 = descriptor.output;\r\n break;\r\n case \"uvs5\":\r\n result.uvs5 = descriptor.output;\r\n break;\r\n case \"uvs6\":\r\n result.uvs6 = descriptor.output;\r\n break;\r\n case \"colors\":\r\n result.colors = descriptor.output;\r\n break;\r\n case \"matricesIndices\":\r\n result.matricesIndices = descriptor.output;\r\n break;\r\n case \"matricesWeights\":\r\n result.matricesWeights = descriptor.output;\r\n break;\r\n case \"matricesIndicesExtra\":\r\n result.matricesIndicesExtra = descriptor.output;\r\n break;\r\n case \"matricesWeightsExtra\":\r\n result.matricesWeightsExtra = descriptor.output;\r\n break;\r\n }\r\n }\r\n}\r\n\r\nfunction _GetMaterialIndex(vertexData: VertexData, indexStart: number) {\r\n if (!vertexData.materialInfos) {\r\n return 0;\r\n }\r\n\r\n for (const materialInfo of vertexData.materialInfos) {\r\n if (indexStart >= materialInfo.indexStart && indexStart < materialInfo.indexStart + materialInfo.indexCount) {\r\n return materialInfo.materialIndex;\r\n }\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nfunction _BuildMaterialInfoResult(vertexData: VertexData, indices: number[], materialIndices: number[], vertexCount: number) {\r\n if (!vertexData.materialInfos?.length) {\r\n return { indices, materialInfos: null };\r\n }\r\n\r\n const materialOrder = vertexData.materialInfos.map((materialInfo) => materialInfo.materialIndex);\r\n const groups = new Map<number, number[]>();\r\n\r\n for (let triangleIndex = 0; triangleIndex < materialIndices.length; triangleIndex++) {\r\n const materialIndex = materialIndices[triangleIndex];\r\n let group = groups.get(materialIndex);\r\n\r\n if (!group) {\r\n group = [];\r\n groups.set(materialIndex, group);\r\n if (!materialOrder.includes(materialIndex)) {\r\n materialOrder.push(materialIndex);\r\n }\r\n }\r\n\r\n const indexOffset = triangleIndex * 3;\r\n group.push(indices[indexOffset], indices[indexOffset + 1], indices[indexOffset + 2]);\r\n }\r\n\r\n const groupedIndices: number[] = [];\r\n const materialInfos: VertexDataMaterialInfo[] = [];\r\n\r\n for (const materialIndex of materialOrder) {\r\n const group = groups.get(materialIndex);\r\n\r\n if (!group?.length) {\r\n continue;\r\n }\r\n\r\n const materialInfo = new VertexDataMaterialInfo();\r\n materialInfo.materialIndex = materialIndex;\r\n materialInfo.indexStart = groupedIndices.length;\r\n materialInfo.indexCount = group.length;\r\n materialInfo.verticesStart = 0;\r\n materialInfo.verticesCount = vertexCount;\r\n groupedIndices.push(...group);\r\n materialInfos.push(materialInfo);\r\n }\r\n\r\n return { indices: groupedIndices, materialInfos };\r\n}\r\n\r\nfunction _IsFlatFace(face: BevelFace) {\r\n return face.cornerNormals.every((normal) => Vector3.Dot(normal, face.normal) > 1 - PositionEpsilon);\r\n}\r\n\r\nfunction _IsBevelPolygonPoint(point: BevelCapPoint): point is BevelPolygonPoint {\r\n return (point as BevelPolygonPoint).position !== undefined;\r\n}\r\n\r\nfunction _GetCapPointPosition(point: BevelCapPoint) {\r\n return _IsBevelPolygonPoint(point) ? point.position : point;\r\n}\r\n\r\nfunction _GetCapPointNormal(point: BevelCapPoint, fallback: Vector3) {\r\n return _IsBevelPolygonPoint(point) ? point.normal : fallback;\r\n}\r\n\r\nfunction _GetCapPointAttributes(point: BevelCapPoint) {\r\n return _IsBevelPolygonPoint(point) ? point.attributes : [];\r\n}\r\n\r\nfunction _GetCapPointMaterialIndex(point: BevelCapPoint) {\r\n return _IsBevelPolygonPoint(point) ? point.materialIndex : 0;\r\n}\r\n\r\nfunction _BuildTopology(vertexData: VertexData): BevelTopology | null {\r\n const positions = vertexData.positions;\r\n const normals = vertexData.normals;\r\n\r\n if (!positions || positions.length < 9) {\r\n return null;\r\n }\r\n\r\n const vertexCount = positions.length / 3;\r\n const indices = vertexData.indices && vertexData.indices.length ? Array.from(vertexData.indices) : Array.from({ length: vertexCount }, (_, index) => index);\r\n const weldedPositionMap = new Map<string, number>();\r\n const originalToWelded: number[] = [];\r\n const weldedPositions: Vector3[] = [];\r\n\r\n for (let index = 0; index < vertexCount; index++) {\r\n const x = positions[index * 3];\r\n const y = positions[index * 3 + 1];\r\n const z = positions[index * 3 + 2];\r\n const key = _PositionKey(x, y, z);\r\n let weldedIndex = weldedPositionMap.get(key);\r\n\r\n if (weldedIndex === undefined) {\r\n weldedIndex = weldedPositions.length;\r\n weldedPositionMap.set(key, weldedIndex);\r\n weldedPositions.push(new Vector3(x, y, z));\r\n }\r\n\r\n originalToWelded[index] = weldedIndex;\r\n }\r\n\r\n const faces: BevelFace[] = [];\r\n const edges = new Map<string, BevelEdge>();\r\n const vertexFaces = new Map<number, number[]>();\r\n const edge0 = new Vector3();\r\n const edge1 = new Vector3();\r\n const normal = new Vector3();\r\n\r\n for (let index = 0; index < indices.length; index += 3) {\r\n let originalIndices: [number, number, number] = [indices[index], indices[index + 1], indices[index + 2]];\r\n const i0 = originalToWelded[originalIndices[0]];\r\n const i1 = originalToWelded[originalIndices[1]];\r\n const i2 = originalToWelded[originalIndices[2]];\r\n\r\n if (i0 === i1 || i1 === i2 || i2 === i0) {\r\n continue;\r\n }\r\n\r\n let faceIndices: [number, number, number] = [i0, i1, i2];\r\n const p0 = weldedPositions[faceIndices[0]];\r\n const p1 = weldedPositions[faceIndices[1]];\r\n const p2 = weldedPositions[faceIndices[2]];\r\n\r\n p1.subtractToRef(p0, edge0);\r\n p2.subtractToRef(p0, edge1);\r\n Vector3.CrossToRef(edge0, edge1, normal);\r\n\r\n if (normal.lengthSquared() < NormalEpsilon) {\r\n continue;\r\n }\r\n\r\n let cornerNormals: [Vector3, Vector3, Vector3] = normals\r\n ? [\r\n _NormalizeNormalOrFallback(Vector3.FromArray(normals, originalIndices[0] * 3), normal),\r\n _NormalizeNormalOrFallback(Vector3.FromArray(normals, originalIndices[1] * 3), normal),\r\n _NormalizeNormalOrFallback(Vector3.FromArray(normals, originalIndices[2] * 3), normal),\r\n ]\r\n : [normal.normalizeToNew(), normal.normalizeToNew(), normal.normalizeToNew()];\r\n\r\n const averageCornerNormal = _NormalizeNormalOrFallback(cornerNormals[0].add(cornerNormals[1]).addInPlace(cornerNormals[2]), normal);\r\n\r\n if (normals && Vector3.Dot(normal, averageCornerNormal) < 0) {\r\n faceIndices = [i0, i2, i1];\r\n originalIndices = [originalIndices[0], originalIndices[2], originalIndices[1]];\r\n cornerNormals = [cornerNormals[0], cornerNormals[2], cornerNormals[1]];\r\n normal.scaleInPlace(-1);\r\n }\r\n\r\n const faceNormal = normal.normalizeToNew();\r\n\r\n if (!normals) {\r\n cornerNormals = [faceNormal.clone(), faceNormal.clone(), faceNormal.clone()];\r\n }\r\n\r\n const faceIndex = faces.length;\r\n faces.push({\r\n indices: faceIndices,\r\n originalIndices,\r\n normal: faceNormal,\r\n cornerNormals,\r\n materialIndex: _GetMaterialIndex(vertexData, index),\r\n });\r\n\r\n for (const vertexIndex of faceIndices) {\r\n let faceList = vertexFaces.get(vertexIndex);\r\n if (!faceList) {\r\n faceList = [];\r\n vertexFaces.set(vertexIndex, faceList);\r\n }\r\n faceList.push(faceIndex);\r\n }\r\n\r\n for (let edgeIndex = 0; edgeIndex < 3; edgeIndex++) {\r\n const v0 = faceIndices[edgeIndex];\r\n const v1 = faceIndices[(edgeIndex + 1) % 3];\r\n const key = _EdgeKey(v0, v1);\r\n let edge = edges.get(key);\r\n\r\n if (!edge) {\r\n edge = {\r\n key,\r\n v0: Math.min(v0, v1),\r\n v1: Math.max(v0, v1),\r\n faces: [],\r\n };\r\n edges.set(key, edge);\r\n }\r\n\r\n edge.faces.push({ faceIndex });\r\n }\r\n }\r\n\r\n if (!faces.length) {\r\n return null;\r\n }\r\n\r\n return {\r\n positions: weldedPositions,\r\n faces,\r\n edges,\r\n vertexFaces,\r\n };\r\n}\r\n\r\nfunction _ClonePolygonPoint(point: BevelPolygonPoint): BevelPolygonPoint {\r\n return {\r\n position: point.position.clone(),\r\n normal: point.normal.clone(),\r\n attributes: point.attributes.slice(),\r\n materialIndex: point.materialIndex,\r\n };\r\n}\r\n\r\nfunction _InterpolatePolygonPoint(start: BevelPolygonPoint, end: BevelPolygonPoint, amount: number): BevelPolygonPoint {\r\n return {\r\n position: Vector3.Lerp(start.position, end.position, amount),\r\n normal: _NormalizeNormalOrFallback(Vector3.Lerp(start.normal, end.normal, amount), start.normal),\r\n attributes: _InterpolateAttributes(start.attributes, end.attributes, amount),\r\n materialIndex: start.materialIndex,\r\n };\r\n}\r\n\r\nfunction _InterpolateSegmentNormal(segment: BevelFaceEdgeSegment, t: number) {\r\n const denominator = segment.tMax - segment.tMin;\r\n\r\n if (denominator <= PositionEpsilon) {\r\n return segment.minNormal.clone();\r\n }\r\n\r\n const amount = Math.min(1, Math.max(0, (t - segment.tMin) / denominator));\r\n return _NormalizeNormalOrFallback(Vector3.Lerp(segment.minNormal, segment.maxNormal, amount), segment.minNormal);\r\n}\r\n\r\nfunction _InterpolateSegmentPoint(segment: BevelFaceEdgeSegment, t: number) {\r\n if (t <= segment.tMin + PositionEpsilon) {\r\n return segment.minPoint;\r\n }\r\n\r\n if (t >= segment.tMax - PositionEpsilon) {\r\n return segment.maxPoint;\r\n }\r\n\r\n return Vector3.Lerp(segment.minPoint, segment.maxPoint, (t - segment.tMin) / (segment.tMax - segment.tMin));\r\n}\r\n\r\nfunction _InterpolateSegmentAttributes(segment: BevelFaceEdgeSegment, t: number) {\r\n if (t <= segment.tMin + PositionEpsilon) {\r\n return segment.minAttributes;\r\n }\r\n\r\n if (t >= segment.tMax - PositionEpsilon) {\r\n return segment.maxAttributes;\r\n }\r\n\r\n return _InterpolateAttributes(segment.minAttributes, segment.maxAttributes, (t - segment.tMin) / (segment.tMax - segment.tMin));\r\n}\r\n\r\nfunction _ClipPolygonAgainstEdge(polygon: BevelPolygonPoint[], edgeStart: Vector3, inward: Vector3, amount: number) {\r\n if (!polygon.length) {\r\n return polygon;\r\n }\r\n\r\n const output: BevelPolygonPoint[] = [];\r\n let previous = polygon[polygon.length - 1];\r\n let previousDistance = Vector3.Dot(previous.position.subtract(edgeStart), inward) - amount;\r\n let previousInside = previousDistance >= -PositionEpsilon;\r\n\r\n for (const current of polygon) {\r\n const currentDistance = Vector3.Dot(current.position.subtract(edgeStart), inward) - amount;\r\n const currentInside = currentDistance >= -PositionEpsilon;\r\n\r\n if (currentInside !== previousInside) {\r\n const denominator = previousDistance - currentDistance;\r\n if (Math.abs(denominator) > NormalEpsilon) {\r\n const t = previousDistance / denominator;\r\n output.push(_InterpolatePolygonPoint(previous, current, t));\r\n }\r\n }\r\n\r\n if (currentInside) {\r\n output.push(_ClonePolygonPoint(current));\r\n }\r\n\r\n previous = current;\r\n previousDistance = currentDistance;\r\n previousInside = currentInside;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction _SlerpDirections(start: Vector3, end: Vector3, amount: number) {\r\n const dot = Math.min(1, Math.max(-1, Vector3.Dot(start, end)));\r\n\r\n if (dot > 1 - PositionEpsilon) {\r\n return Vector3.Lerp(start, end, amount).normalize();\r\n }\r\n\r\n const theta = Math.acos(dot);\r\n const sinTheta = Math.sin(theta);\r\n\r\n if (Math.abs(sinTheta) < NormalEpsilon) {\r\n return Vector3.Lerp(start, end, amount).normalize();\r\n }\r\n\r\n const startScale = Math.sin((1 - amount) * theta) / sinTheta;\r\n const endScale = Math.sin(amount * theta) / sinTheta;\r\n const result = start.scale(startScale).addInPlace(end.scale(endScale));\r\n\r\n if (result.lengthSquared() < NormalEpsilon) {\r\n return Vector3.Lerp(start, end, amount).normalize();\r\n }\r\n\r\n return result.normalize();\r\n}\r\n\r\nfunction _AddUniquePoint(points: BevelCapPoint[], point: Vector3, normal: Vector3, attributes: number[], materialIndex: number) {\r\n const key = _VectorKey(point);\r\n const normalizedNormal = _NormalizeNormalOrFallback(normal, normal);\r\n\r\n for (const existing of points) {\r\n if (_VectorKey(_GetCapPointPosition(existing)) === key) {\r\n if (_IsBevelPolygonPoint(existing)) {\r\n existing.normal.addInPlace(normalizedNormal).normalize();\r\n existing.attributes = _AverageAttributes([existing.attributes, attributes], attributes.length);\r\n }\r\n return;\r\n }\r\n }\r\n\r\n points.push({\r\n position: point.clone(),\r\n normal: normalizedNormal,\r\n attributes: attributes.slice(),\r\n materialIndex,\r\n });\r\n}\r\n\r\nfunction _AddUniqueNormal(normals: Vector3[], normal: Vector3) {\r\n for (const existing of normals) {\r\n if (Vector3.Dot(existing, normal) > 1 - PositionEpsilon) {\r\n return;\r\n }\r\n }\r\n\r\n normals.push(normal.clone());\r\n}\r\n\r\nfunction _SolveThreePlaneIntersection(normals: Vector3[], distances: number[]) {\r\n const cross12 = Vector3.Cross(normals[1], normals[2]);\r\n const denominator = Vector3.Dot(normals[0], cross12);\r\n\r\n if (Math.abs(denominator) < NormalEpsilon) {\r\n return null;\r\n }\r\n\r\n const result = cross12.scale(distances[0]);\r\n result.addInPlace(Vector3.Cross(normals[2], normals[0]).scale(distances[1]));\r\n result.addInPlace(Vector3.Cross(normals[0], normals[1]).scale(distances[2]));\r\n result.scaleInPlace(1 / denominator);\r\n\r\n return result;\r\n}\r\n\r\nfunction _BuildCoplanarFaceClipEdges(topology: BevelTopology, selectedEdges: Set<string>) {\r\n const result = new Map<number, BevelFaceClipEdge[]>();\r\n const visitedFaces = new Set<number>();\r\n\r\n for (let startFaceIndex = 0; startFaceIndex < topology.faces.length; startFaceIndex++) {\r\n if (visitedFaces.has(startFaceIndex)) {\r\n continue;\r\n }\r\n\r\n const group: number[] = [];\r\n const stack = [startFaceIndex];\r\n const groupNormal = topology.faces[startFaceIndex].normal;\r\n visitedFaces.add(startFaceIndex);\r\n\r\n while (stack.length) {\r\n const faceIndex = stack.pop()!;\r\n const face = topology.faces[faceIndex];\r\n group.push(faceIndex);\r\n\r\n for (let edgeIndex = 0; edgeIndex < 3; edgeIndex++) {\r\n const key = _EdgeKey(face.indices[edgeIndex], face.indices[(edgeIndex + 1) % 3]);\r\n const edge = topology.edges.get(key);\r\n\r\n if (!edge) {\r\n continue;\r\n }\r\n\r\n for (const edgeFace of edge.faces) {\r\n if (visitedFaces.has(edgeFace.faceIndex)) {\r\n continue;\r\n }\r\n\r\n if (Vector3.Dot(groupNormal, topology.faces[edgeFace.faceIndex].normal) < 1 - PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n visitedFaces.add(edgeFace.faceIndex);\r\n stack.push(edgeFace.faceIndex);\r\n }\r\n }\r\n }\r\n\r\n const clipEdges: BevelFaceClipEdge[] = [];\r\n const addedClipEdges = new Set<string>();\r\n\r\n for (const faceIndex of group) {\r\n const face = topology.faces[faceIndex];\r\n\r\n for (let edgeIndex = 0; edgeIndex < 3; edgeIndex++) {\r\n const start = face.indices[edgeIndex];\r\n const end = face.indices[(edgeIndex + 1) % 3];\r\n const key = _EdgeKey(start, end);\r\n\r\n if (!selectedEdges.has(key) || addedClipEdges.has(key)) {\r\n continue;\r\n }\r\n\r\n const edgeStart = topology.positions[start];\r\n const edgeEnd = topology.positions[end];\r\n const edgeDirection = edgeEnd.subtract(edgeStart).normalize();\r\n const inward = Vector3.Cross(face.normal, edgeDirection).normalize();\r\n clipEdges.push({ key, start, end, inward });\r\n addedClipEdges.add(key);\r\n }\r\n }\r\n\r\n for (const faceIndex of group) {\r\n result.set(faceIndex, clipEdges);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction _InsertPointOnPolygonBoundary(polygon: BevelPolygonPoint[], point: Vector3) {\r\n for (const existing of polygon) {\r\n if (existing.position.subtract(point).lengthSquared() <= PositionEpsilon * PositionEpsilon) {\r\n return;\r\n }\r\n }\r\n\r\n let bestEdgeIndex = -1;\r\n let bestDistanceSquared = Number.MAX_VALUE;\r\n let bestProjection = 0;\r\n\r\n for (let index = 0; index < polygon.length; index++) {\r\n const start = polygon[index].position;\r\n const end = polygon[(index + 1) % polygon.length].position;\r\n const edge = end.subtract(start);\r\n const edgeLengthSquared = edge.lengthSquared();\r\n\r\n if (edgeLengthSquared < PositionEpsilon * PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n const projection = Vector3.Dot(point.subtract(start), edge) / edgeLengthSquared;\r\n\r\n if (projection < -PositionEpsilon || projection > 1 + PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n const closest = start.add(edge.scale(projection));\r\n const distanceSquared = closest.subtract(point).lengthSquared();\r\n\r\n if (distanceSquared < bestDistanceSquared) {\r\n bestDistanceSquared = distanceSquared;\r\n bestEdgeIndex = index;\r\n bestProjection = projection;\r\n }\r\n }\r\n\r\n if (bestEdgeIndex !== -1 && bestDistanceSquared <= OutputPositionEpsilon * OutputPositionEpsilon) {\r\n const insertedPoint = _InterpolatePolygonPoint(polygon[bestEdgeIndex], polygon[(bestEdgeIndex + 1) % polygon.length], bestProjection);\r\n insertedPoint.position = point.clone();\r\n polygon.splice(bestEdgeIndex + 1, 0, insertedPoint);\r\n }\r\n}\r\n\r\nfunction _BuildMergedBoundaryPolygon(polygons: BevelPolygonPoint[][]) {\r\n const points = new Map<string, BevelPolygonPoint>();\r\n const edgeUseCounts = new Map<string, { count: number; key0: string; key1: string }>();\r\n\r\n for (const polygon of polygons) {\r\n for (const point of polygon) {\r\n const key = _VectorKey(point.position);\r\n const existing = points.get(key);\r\n\r\n if (existing) {\r\n existing.normal.addInPlace(point.normal).normalize();\r\n } else {\r\n points.set(key, _ClonePolygonPoint(point));\r\n }\r\n }\r\n\r\n for (let index = 0; index < polygon.length; index++) {\r\n const key0 = _VectorKey(polygon[index].position);\r\n const key1 = _VectorKey(polygon[(index + 1) % polygon.length].position);\r\n\r\n if (key0 === key1) {\r\n continue;\r\n }\r\n\r\n const edgeKey = key0 < key1 ? `${key0}|${key1}` : `${key1}|${key0}`;\r\n const edgeUseCount = edgeUseCounts.get(edgeKey);\r\n\r\n if (edgeUseCount) {\r\n edgeUseCount.count++;\r\n } else {\r\n edgeUseCounts.set(edgeKey, { count: 1, key0, key1 });\r\n }\r\n }\r\n }\r\n\r\n const adjacency = new Map<string, string[]>();\r\n for (const edge of Array.from(edgeUseCounts.values())) {\r\n if (edge.count !== 1) {\r\n continue;\r\n }\r\n\r\n let adjacency0 = adjacency.get(edge.key0);\r\n if (!adjacency0) {\r\n adjacency0 = [];\r\n adjacency.set(edge.key0, adjacency0);\r\n }\r\n adjacency0.push(edge.key1);\r\n\r\n let adjacency1 = adjacency.get(edge.key1);\r\n if (!adjacency1) {\r\n adjacency1 = [];\r\n adjacency.set(edge.key1, adjacency1);\r\n }\r\n adjacency1.push(edge.key0);\r\n }\r\n\r\n if (!adjacency.size || Array.from(adjacency.values()).some((neighbors) => neighbors.length !== 2)) {\r\n return null;\r\n }\r\n\r\n const startKey = Array.from(adjacency.keys()).sort()[0];\r\n const orderedKeys: string[] = [];\r\n let previousKey = \"\";\r\n let currentKey = startKey;\r\n\r\n do {\r\n orderedKeys.push(currentKey);\r\n const neighbors = adjacency.get(currentKey)!;\r\n const nextKey = neighbors[0] === previousKey ? neighbors[1] : neighbors[0];\r\n previousKey = currentKey;\r\n currentKey = nextKey;\r\n\r\n if (orderedKeys.length > adjacency.size) {\r\n return null;\r\n }\r\n } while (currentKey !== startKey);\r\n\r\n if (orderedKeys.length !== adjacency.size) {\r\n return null;\r\n }\r\n\r\n return orderedKeys.map((key) => points.get(key)!);\r\n}\r\n\r\nfunction _BevelVertexData(vertexData: VertexData, amount: number, segments: number, angle: number) {\r\n const topology = _BuildTopology(vertexData);\r\n\r\n if (!topology || amount <= PositionEpsilon || segments <= 0) {\r\n return _CloneVertexData(vertexData);\r\n }\r\n\r\n const selectedEdges = new Set<string>();\r\n const selectedVertices = new Set<number>();\r\n const selectedEdgeCountPerVertex = new Map<number, number>();\r\n const threshold = Math.cos(angle + AngleEpsilon);\r\n let shortestSelectedEdgeLength = Number.MAX_VALUE;\r\n\r\n for (const edge of Array.from(topology.edges.values())) {\r\n if (edge.faces.length !== 2) {\r\n continue;\r\n }\r\n\r\n const face0 = topology.faces[edge.faces[0].faceIndex];\r\n const face1 = topology.faces[edge.faces[1].faceIndex];\r\n\r\n if (Vector3.Dot(face0.normal, face1.normal) < threshold) {\r\n selectedEdges.add(edge.key);\r\n selectedVertices.add(edge.v0);\r\n selectedVertices.add(edge.v1);\r\n selectedEdgeCountPerVertex.set(edge.v0, (selectedEdgeCountPerVertex.get(edge.v0) ?? 0) + 1);\r\n selectedEdgeCountPerVertex.set(edge.v1, (selectedEdgeCountPerVertex.get(edge.v1) ?? 0) + 1);\r\n shortestSelectedEdgeLength = Math.min(shortestSelectedEdgeLength, Vector3.Distance(topology.positions[edge.v0], topology.positions[edge.v1]));\r\n }\r\n }\r\n\r\n if (!selectedEdges.size) {\r\n return _CloneVertexData(vertexData);\r\n }\r\n\r\n const bevelAmount = Math.min(amount, shortestSelectedEdgeLength * 0.5);\r\n\r\n if (bevelAmount <= PositionEpsilon) {\r\n return _CloneVertexData(vertexData);\r\n }\r\n\r\n const faceClipEdges = _BuildCoplanarFaceClipEdges(topology, selectedEdges);\r\n const attributeDescriptors = _BuildAttributeDescriptors(vertexData, vertexData.positions!.length / 3);\r\n const attributeLength = _GetAttributeLength(attributeDescriptors);\r\n const outputPositions: number[] = [];\r\n const outputNormals: Vector3[] = [];\r\n const outputNormalContributions: Vector3[][] = [];\r\n const outputVertexAttributes: number[][] = [];\r\n const outputIndices: number[] = [];\r\n const outputTriangleMaterialIndices: number[] = [];\r\n const outputVertexBuckets = new Map<string, number[]>();\r\n const outputVertexGroups: string[] = [];\r\n const faceEdgeSegments = new Map<string, BevelFaceEdgeSegment>();\r\n const capPoints = new Map<number, BevelCapPoint[]>();\r\n const preparedFaces: BevelPreparedFace[] = [];\r\n const edgeIntervals = new Map<string, BevelEdgeInterval>();\r\n\r\n const getOrCreateVertex = (position: Vector3, normal: Vector3, smoothingGroup: string, attributes: number[]) => {\r\n const normalizedNormal = normal.normalizeToNew();\r\n const vertexAttributes = attributeLength ? (attributes.length === attributeLength ? attributes : new Array<number>(attributeLength).fill(0)) : [];\r\n const qx = _OutputQuantize(position.x);\r\n const qy = _OutputQuantize(position.y);\r\n const qz = _OutputQuantize(position.z);\r\n let canonicalIndex = -1;\r\n\r\n for (let dz = -1; dz <= 1; dz++) {\r\n for (let dy = -1; dy <= 1; dy++) {\r\n for (let dx = -1; dx <= 1; dx++) {\r\n const bucket = outputVertexBuckets.get(_OutputPositionKey(qx + dx, qy + dy, qz + dz));\r\n\r\n if (!bucket) {\r\n continue;\r\n }\r\n\r\n for (const index of bucket) {\r\n const outputIndex = index * 3;\r\n const deltaX = outputPositions[outputIndex] - position.x;\r\n const deltaY = outputPositions[outputIndex + 1] - position.y;\r\n const deltaZ = outputPositions[outputIndex + 2] - position.z;\r\n\r\n if (deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ <= OutputPositionEpsilon * OutputPositionEpsilon) {\r\n if (canonicalIndex === -1) {\r\n canonicalIndex = index;\r\n }\r\n\r\n if (outputVertexGroups[index] !== smoothingGroup) {\r\n continue;\r\n }\r\n\r\n if (!_AttributesMatch(outputVertexAttributes[index], vertexAttributes)) {\r\n continue;\r\n }\r\n\r\n const normalContributions = outputNormalContributions[index];\r\n if (!normalContributions.some((normal) => Vector3.Dot(normal, normalizedNormal) > 1 - PositionEpsilon)) {\r\n normalContributions.push(normalizedNormal);\r\n outputNormals[index].addInPlace(normalizedNormal);\r\n }\r\n return index;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const index = outputPositions.length / 3;\r\n const outputX = canonicalIndex === -1 ? position.x : outputPositions[canonicalIndex * 3];\r\n const outputY = canonicalIndex === -1 ? position.y : outputPositions[canonicalIndex * 3 + 1];\r\n const outputZ = canonicalIndex === -1 ? position.z : outputPositions[canonicalIndex * 3 + 2];\r\n const key = _OutputPositionKey(_OutputQuantize(outputX), _OutputQuantize(outputY), _OutputQuantize(outputZ));\r\n let bucket = outputVertexBuckets.get(key);\r\n\r\n if (!bucket) {\r\n bucket = [];\r\n outputVertexBuckets.set(key, bucket);\r\n }\r\n\r\n bucket.push(index);\r\n outputPositions.push(outputX, outputY, outputZ);\r\n outputNormals.push(normalizedNormal);\r\n outputNormalContributions.push([normalizedNormal.clone()]);\r\n outputVertexAttributes.push(vertexAttributes.slice());\r\n outputVertexGroups.push(smoothingGroup);\r\n\r\n return index;\r\n };\r\n\r\n const addCapPoint = (vertexIndex: number, point: Vector3, normal: Vector3, attributes: number[], materialIndex: number) => {\r\n let points = capPoints.get(vertexIndex);\r\n if (!points) {\r\n points = [];\r\n capPoints.set(vertexIndex, points);\r\n }\r\n _AddUniquePoint(points, point, normal, attributes, materialIndex);\r\n };\r\n\r\n const addTriangle = (\r\n p0: Vector3,\r\n p1: Vector3,\r\n p2: Vector3,\r\n targetNormal: Vector3,\r\n n0 = targetNormal,\r\n n1 = targetNormal,\r\n n2 = targetNormal,\r\n smoothingGroup = \"smooth\",\r\n p0Attributes: number[] = [],\r\n p1Attributes: number[] = [],\r\n p2Attributes: number[] = [],\r\n materialIndex = 0\r\n ) => {\r\n const edge0 = p1.subtract(p0);\r\n const edge1 = p2.subtract(p0);\r\n const normal = Vector3.Cross(edge0, edge1);\r\n\r\n if (normal.lengthSquared() < TriangleAreaEpsilon) {\r\n return;\r\n }\r\n\r\n let v1 = p1;\r\n let v2 = p2;\r\n let vn1 = n1;\r\n let vn2 = n2;\r\n let va1 = p1Attributes;\r\n let va2 = p2Attributes;\r\n\r\n if (Vector3.Dot(normal, targetNormal) > 0) {\r\n v1 = p2;\r\n v2 = p1;\r\n vn1 = n2;\r\n vn2 = n1;\r\n va1 = p2Attributes;\r\n va2 = p1Attributes;\r\n }\r\n\r\n const i0 = getOrCreateVertex(p0, n0, smoothingGroup, p0Attributes);\r\n const i1 = getOrCreateVertex(v1, vn1, smoothingGroup, va1);\r\n const i2 = getOrCreateVertex(v2, vn2, smoothingGroup, va2);\r\n\r\n if (i0 === i1 || i1 === i2 || i2 === i0) {\r\n return;\r\n }\r\n\r\n outputIndices.push(i0, i1, i2);\r\n outputTriangleMaterialIndices.push(materialIndex);\r\n };\r\n\r\n const addFacePolygon = (polygon: BevelPolygonPoint[], normal: Vector3, smoothingGroup: string, useFlatNormals: boolean) => {\r\n const center = new Vector3();\r\n const centerAttributes = _AverageAttributes(\r\n polygon.map((point) => point.attributes),\r\n attributeLength\r\n );\r\n const materialIndex = polygon[0]?.materialIndex ?? 0;\r\n const centerNormal = useFlatNormals\r\n ? normal\r\n : _NormalizeNormalOrFallback(\r\n polygon.reduce((accumulator, point) => accumulator.addInPlace(point.normal), new Vector3()),\r\n normal\r\n );\r\n\r\n for (const point of polygon) {\r\n center.addInPlace(point.position);\r\n }\r\n center.scaleInPlace(1 / polygon.length);\r\n\r\n for (let index = 0; index < polygon.length; index++) {\r\n const nextIndex = (index + 1) % polygon.length;\r\n addTriangle(\r\n center,\r\n polygon[index].position,\r\n polygon[nextIndex].position,\r\n normal,\r\n centerNormal,\r\n useFlatNormals ? normal : polygon[index].normal,\r\n useFlatNormals ? normal : polygon[nextIndex].normal,\r\n smoothingGroup,\r\n centerAttributes,\r\n polygon[index].attributes,\r\n polygon[nextIndex].attributes,\r\n materialIndex\r\n );\r\n }\r\n };\r\n\r\n for (let faceIndex = 0; faceIndex < topology.faces.length; faceIndex++) {\r\n const face = topology.faces[faceIndex];\r\n const isFlat = _IsFlatFace(face);\r\n let polygon = face.indices.map((index, cornerIndex) => ({\r\n position: topology.positions[index].clone(),\r\n normal: face.cornerNormals[cornerIndex].clone(),\r\n attributes: _GetVertexAttributes(attributeDescriptors, face.originalIndices[cornerIndex]),\r\n materialIndex: face.materialIndex,\r\n }));\r\n const selectedFaceEdges: BevelFaceClipEdge[] = [];\r\n\r\n for (let edgeIndex = 0; edgeIndex < 3; edgeIndex++) {\r\n const start = face.indices[edgeIndex];\r\n const end = face.indices[(edgeIndex + 1) % 3];\r\n const key = _EdgeKey(start, end);\r\n\r\n if (!selectedEdges.has(key)) {\r\n continue;\r\n }\r\n\r\n const edgeStart = topology.positions[start];\r\n const edgeEnd = topology.positions[end];\r\n const edgeDirection = edgeEnd.subtract(edgeStart).normalize();\r\n const inward = Vector3.Cross(face.normal, edgeDirection).normalize();\r\n selectedFaceEdges.push({ key, start, end, inward });\r\n }\r\n\r\n const clipEdges = faceClipEdges.get(faceIndex) ?? selectedFaceEdges;\r\n\r\n for (const clipEdge of clipEdges) {\r\n polygon = _ClipPolygonAgainstEdge(polygon, topology.positions[clipEdge.start], clipEdge.inward, bevelAmount);\r\n }\r\n\r\n if (isFlat) {\r\n for (const point of polygon) {\r\n point.normal = face.normal.clone();\r\n }\r\n }\r\n\r\n preparedFaces.push({ faceIndex, polygon, selectedFaceEdges, isFlat });\r\n\r\n for (const selectedFaceEdge of selectedFaceEdges) {\r\n const edge = topology.edges.get(selectedFaceEdge.key)!;\r\n const edgeStart = topology.positions[edge.v0];\r\n const edgeEnd = topology.positions[edge.v1];\r\n const axis = edgeEnd.subtract(edgeStart);\r\n const edgeLength = axis.length();\r\n\r\n if (edgeLength < PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n axis.normalize();\r\n\r\n const pointsOnLine: Array<{ point: BevelPolygonPoint; t: number }> = [];\r\n const orientedEdgeStart = topology.positions[selectedFaceEdge.start];\r\n\r\n for (const point of polygon) {\r\n const distance = Vector3.Dot(point.position.subtract(orientedEdgeStart), selectedFaceEdge.inward);\r\n\r\n if (Math.abs(distance - bevelAmount) < PositionEpsilon * 10) {\r\n const t = Vector3.Dot(point.position.subtract(edgeStart), axis);\r\n if (t >= -PositionEpsilon && t <= edgeLength + PositionEpsilon) {\r\n pointsOnLine.push({ point, t: Math.min(edgeLength, Math.max(0, t)) });\r\n }\r\n }\r\n }\r\n\r\n if (pointsOnLine.length < 2) {\r\n continue;\r\n }\r\n\r\n pointsOnLine.sort((a, b) => a.t - b.t);\r\n\r\n const minPoint = pointsOnLine[0].point.position;\r\n const maxPoint = pointsOnLine[pointsOnLine.length - 1].point.position;\r\n const minNormal = pointsOnLine[0].point.normal;\r\n const maxNormal = pointsOnLine[pointsOnLine.length - 1].point.normal;\r\n const minAttributes = pointsOnLine[0].point.attributes;\r\n const maxAttributes = pointsOnLine[pointsOnLine.length - 1].point.attributes;\r\n const segment: BevelFaceEdgeSegment = {\r\n edgeKey: selectedFaceEdge.key,\r\n faceIndex,\r\n inward: selectedFaceEdge.inward,\r\n tMin: pointsOnLine[0].t,\r\n tMax: pointsOnLine[pointsOnLine.length - 1].t,\r\n minPoint,\r\n maxPoint,\r\n minNormal,\r\n maxNormal,\r\n minAttributes,\r\n maxAttributes,\r\n materialIndex: face.materialIndex,\r\n };\r\n\r\n faceEdgeSegments.set(`${faceIndex}|${selectedFaceEdge.key}`, segment);\r\n addCapPoint(edge.v0, minPoint, pointsOnLine[0].point.normal, minAttributes, face.materialIndex);\r\n addCapPoint(edge.v1, maxPoint, pointsOnLine[pointsOnLine.length - 1].point.normal, maxAttributes, face.materialIndex);\r\n }\r\n }\r\n\r\n for (const edgeKey of Array.from(selectedEdges)) {\r\n const edge = topology.edges.get(edgeKey)!;\r\n const face0 = edge.faces[0].faceIndex;\r\n const face1 = edge.faces[1].faceIndex;\r\n const segment0 = faceEdgeSegments.get(`${face0}|${edgeKey}`);\r\n const segment1 = faceEdgeSegments.get(`${face1}|${edgeKey}`);\r\n\r\n if (!segment0 || !segment1) {\r\n continue;\r\n }\r\n\r\n const edgeStart = topology.positions[edge.v0];\r\n const edgeEnd = topology.positions[edge.v1];\r\n const axis = edgeEnd.subtract(edgeStart);\r\n const edgeLength = axis.length();\r\n\r\n if (edgeLength < PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n axis.normalize();\r\n\r\n const tStart = Math.max(segment0.tMin, segment1.tMin);\r\n const tEnd = Math.min(segment0.tMax, segment1.tMax);\r\n\r\n if (tEnd - tStart <= PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n edgeIntervals.set(edgeKey, { tStart, tEnd });\r\n }\r\n\r\n for (const preparedFace of preparedFaces) {\r\n for (const selectedFaceEdge of preparedFace.selectedFaceEdges) {\r\n const edge = topology.edges.get(selectedFaceEdge.key)!;\r\n const interval = edgeIntervals.get(selectedFaceEdge.key);\r\n const segment = faceEdgeSegments.get(`${preparedFace.faceIndex}|${selectedFaceEdge.key}`);\r\n\r\n if (!interval || !segment) {\r\n continue;\r\n }\r\n\r\n const edgeStart = topology.positions[edge.v0];\r\n const edgeEnd = topology.positions[edge.v1];\r\n const axis = edgeEnd.subtract(edgeStart);\r\n const edgeLength = axis.length();\r\n\r\n if (edgeLength < PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n axis.normalize();\r\n\r\n for (const t of [interval.tStart, interval.tEnd]) {\r\n if (t <= segment.tMin + PositionEpsilon || t >= segment.tMax - PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n _InsertPointOnPolygonBoundary(preparedFace.polygon, edgeStart.add(axis.scale(t)).addInPlace(segment.inward.scale(bevelAmount)));\r\n }\r\n }\r\n }\r\n\r\n const emittedMergedFaces = new Set<number>();\r\n const preparedFacesByPlane = new Map<string, BevelPreparedFace[]>();\r\n\r\n for (const preparedFace of preparedFaces) {\r\n if (!preparedFace.selectedFaceEdges.length || !preparedFace.isFlat) {\r\n continue;\r\n }\r\n\r\n const face = topology.faces[preparedFace.faceIndex];\r\n const distance = Vector3.Dot(topology.positions[face.indices[0]], face.normal);\r\n const planeKey = `${_PositionKey(face.normal.x, face.normal.y, face.normal.z)}:${_Quantize(distance)}`;\r\n let group = preparedFacesByPlane.get(planeKey);\r\n\r\n if (!group) {\r\n group = [];\r\n preparedFacesByPlane.set(planeKey, group);\r\n }\r\n\r\n group.push(preparedFace);\r\n }\r\n\r\n for (const group of Array.from(preparedFacesByPlane.values())) {\r\n if (group.length < 2) {\r\n continue;\r\n }\r\n\r\n const mergedPolygon = _BuildMergedBoundaryPolygon(group.map((preparedFace) => preparedFace.polygon));\r\n\r\n if (!mergedPolygon || mergedPolygon.length < 3) {\r\n continue;\r\n }\r\n\r\n const face = topology.faces[group[0].faceIndex];\r\n addFacePolygon(mergedPolygon, face.normal, `face-flat:${_PositionKey(face.normal.x, face.normal.y, face.normal.z)}`, true);\r\n\r\n for (const preparedFace of group) {\r\n emittedMergedFaces.add(preparedFace.faceIndex);\r\n }\r\n }\r\n\r\n for (const preparedFace of preparedFaces) {\r\n if (emittedMergedFaces.has(preparedFace.faceIndex)) {\r\n continue;\r\n }\r\n\r\n const face = topology.faces[preparedFace.faceIndex];\r\n const smoothingGroup = preparedFace.selectedFaceEdges.length && !preparedFace.isFlat ? \"smooth\" : `face-flat:${_PositionKey(face.normal.x, face.normal.y, face.normal.z)}`;\r\n\r\n if (preparedFace.polygon.length >= 3) {\r\n if (smoothingGroup === \"smooth\") {\r\n addFacePolygon(preparedFace.polygon, face.normal, smoothingGroup, false);\r\n } else {\r\n for (let index = 1; index < preparedFace.polygon.length - 1; index++) {\r\n addTriangle(\r\n preparedFace.polygon[0].position,\r\n preparedFace.polygon[index].position,\r\n preparedFace.polygon[index + 1].position,\r\n face.normal,\r\n face.normal,\r\n face.normal,\r\n face.normal,\r\n smoothingGroup,\r\n preparedFace.polygon[0].attributes,\r\n preparedFace.polygon[index].attributes,\r\n preparedFace.polygon[index + 1].attributes,\r\n face.materialIndex\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const edgeKey of Array.from(selectedEdges)) {\r\n const edge = topology.edges.get(edgeKey)!;\r\n const face0 = edge.faces[0].faceIndex;\r\n const face1 = edge.faces[1].faceIndex;\r\n const segment0 = faceEdgeSegments.get(`${face0}|${edgeKey}`);\r\n const segment1 = faceEdgeSegments.get(`${face1}|${edgeKey}`);\r\n const interval = edgeIntervals.get(edgeKey);\r\n\r\n if (!segment0 || !segment1 || !interval) {\r\n continue;\r\n }\r\n\r\n const edgeStart = topology.positions[edge.v0];\r\n const edgeEnd = topology.positions[edge.v1];\r\n const axis = edgeEnd.subtract(edgeStart);\r\n const edgeLength = axis.length();\r\n\r\n if (edgeLength < PositionEpsilon) {\r\n continue;\r\n }\r\n\r\n axis.normalize();\r\n\r\n const { tStart, tEnd } = interval;\r\n const faceNormal0 = topology.faces[segment0.faceIndex].normal;\r\n const faceNormal1 = topology.faces[segment1.faceIndex].normal;\r\n const segment0Start = _InterpolateSegmentPoint(segment0, tStart);\r\n const segment1Start = _InterpolateSegmentPoint(segment1, tStart);\r\n const segment0End = _InterpolateSegmentPoint(segment0, tEnd);\r\n const segment1End = _InterpolateSegmentPoint(segment1, tEnd);\r\n const segment0StartNormal = _InterpolateSegmentNormal(segment0, tStart);\r\n const segment1StartNormal = _InterpolateSegmentNormal(segment1, tStart);\r\n const segment0EndNormal = _InterpolateSegmentNormal(segment0, tEnd);\r\n const segment1EndNormal = _InterpolateSegmentNormal(segment1, tEnd);\r\n const segment0StartAttributes = _InterpolateSegmentAttributes(segment0, tStart);\r\n const segment1StartAttributes = _InterpolateSegmentAttributes(segment1, tStart);\r\n const segment0EndAttributes = _InterpolateSegmentAttributes(segment0, tEnd);\r\n const segment1EndAttributes = _InterpolateSegmentAttributes(segment1, tEnd);\r\n const centerStart = segment0Start\r\n .subtract(faceNormal0.scale(bevelAmount))\r\n .addInPlace(segment1Start.subtract(faceNormal1.scale(bevelAmount)))\r\n .scaleInPlace(0.5);\r\n const centerEnd = segment0End\r\n .subtract(faceNormal0.scale(bevelAmount))\r\n .addInPlace(segment1End.subtract(faceNormal1.scale(bevelAmount)))\r\n .scaleInPlace(0.5);\r\n const startProfilePoints: Vector3[] = [];\r\n const endProfilePoints: Vector3[] = [];\r\n const startProfileNormals: Vector3[] = [];\r\n const endProfileNormals: Vector3[] = [];\r\n const startProfileAttributes: number[][] = [];\r\n const endProfileAttributes: number[][] = [];\r\n\r\n for (let segmentIndex = 0; segmentIndex <= segments; segmentIndex++) {\r\n const profileAmount = segmentIndex / segments;\r\n const profileNormal = _SlerpDirections(faceNormal0, faceNormal1, profileAmount);\r\n const startNormal = _SlerpDirections(segment0StartNormal, segment1StartNormal, profileAmount);\r\n const endNormal = _SlerpDirections(segment0EndNormal, segment1EndNormal, profileAmount);\r\n const startAttributes = _InterpolateAttributes(segment0StartAttributes, segment1StartAttributes, profileAmount);\r\n const endAttributes = _InterpolateAttributes(segment0EndAttributes, segment1EndAttributes, profileAmount);\r\n let startPoint = centerStart.add(profileNormal.scale(bevelAmount));\r\n let endPoint = centerEnd.add(profileNormal.scale(bevelAmount));\r\n\r\n if (segmentIndex === 0) {\r\n startPoint = segment0Start;\r\n endPoint = segment0End;\r\n } else if (segmentIndex === segments) {\r\n startPoint = segment1Start;\r\n endPoint = segment1End;\r\n }\r\n\r\n startProfilePoints.push(startPoint);\r\n endProfilePoints.push(endPoint);\r\n startProfileNormals.push(startNormal);\r\n endProfileNormals.push(endNormal);\r\n startProfileAttributes.push(startAttributes);\r\n endProfileAttributes.push(endAttributes);\r\n addCapPoint(edge.v0, startPoint, startNormal, startAttributes, segment0.materialIndex);\r\n addCapPoint(edge.v1, endPoint, endNormal, endAttributes, segment0.materialIndex);\r\n }\r\n\r\n for (let segmentIndex = 0; segmentIndex < segments; segmentIndex++) {\r\n const normalTarget = _SlerpDirections(faceNormal0, faceNormal1, (segmentIndex + 0.5) / segments);\r\n\r\n addTriangle(\r\n startProfilePoints[segmentIndex],\r\n endProfilePoints[segmentIndex],\r\n endProfilePoints[segmentIndex + 1],\r\n normalTarget,\r\n startProfileNormals[segmentIndex],\r\n endProfileNormals[segmentIndex],\r\n endProfileNormals[segmentIndex + 1],\r\n \"smooth\",\r\n startProfileAttributes[segmentIndex],\r\n endProfileAttributes[segmentIndex],\r\n endProfileAttributes[segmentIndex + 1],\r\n segment0.materialIndex\r\n );\r\n addTriangle(\r\n startProfilePoints[segmentIndex],\r\n endProfilePoints[segmentIndex + 1],\r\n startProfilePoints[segmentIndex + 1],\r\n normalTarget,\r\n startProfileNormals[segmentIndex],\r\n endProfileNormals[segmentIndex + 1],\r\n startProfileNormals[segmentIndex + 1],\r\n \"smooth\",\r\n startProfileAttributes[segmentIndex],\r\n endProfileAttributes[segmentIndex + 1],\r\n startProfileAttributes[segmentIndex + 1],\r\n segment0.materialIndex\r\n );\r\n }\r\n }\r\n\r\n const addSphericalCornerPatch = (vertexIndex: number) => {\r\n if ((selectedEdgeCountPerVertex.get(vertexIndex) ?? 0) < 3) {\r\n return false;\r\n }\r\n\r\n const incidentNormals: Vector3[] = [];\r\n const vertexPosition = topology.positions[vertexIndex];\r\n const cornerCapPoints = capPoints.get(vertexIndex) ?? [];\r\n const cornerAttributes = _AverageAttributes(\r\n cornerCapPoints.map((point) => _GetCapPointAttributes(point)),\r\n attributeLength\r\n );\r\n const materialIndex = cornerCapPoints.length ? _GetCapPointMaterialIndex(cornerCapPoints[0]) : 0;\r\n\r\n for (const edgeKey of Array.from(selectedEdges)) {\r\n const edge = topology.edges.get(edgeKey)!;\r\n\r\n if (edge.v0 !== vertexIndex && edge.v1 !== vertexIndex) {\r\n continue;\r\n }\r\n\r\n for (const edgeFace of edge.faces) {\r\n _AddUniqueNormal(incidentNormals, topology.faces[edgeFace.faceIndex].normal);\r\n }\r\n }\r\n\r\n if (incidentNormals.length !== 3) {\r\n return false;\r\n }\r\n\r\n const averageNormal = incidentNormals[0].add(incidentNormals[1]).addInPlace(incidentNormals[2]).normalize();\r\n const tangent = incidentNormals[0].subtract(averageNormal.scale(Vector3.Dot(incidentNormals[0], averageNormal))).normalize();\r\n const bitangent = Vector3.Cross(averageNormal, tangent).normalize();\r\n incidentNormals.sort((a, b) => Math.atan2(Vector3.Dot(a, bitangent), Vector3.Dot(a, tangent)) - Math.atan2(Vector3.Dot(b, bitangent), Vector3.Dot(b, tangent)));\r\n\r\n const distances = incidentNormals.map((normal) => Vector3.Dot(vertexPosition, normal) - bevelAmount);\r\n const center = _SolveThreePlaneIntersection(incidentNormals, distances);\r\n\r\n if (!center) {\r\n return false;\r\n }\r\n\r\n const rows: BevelPolygonPoint[][] = [];\r\n for (let rowIndex = 0; rowIndex <= segments; rowIndex++) {\r\n const rowAmount = rowIndex / segments;\r\n const left = _SlerpDirections(incidentNormals[0], incidentNormals[1], rowAmount);\r\n const right = _SlerpDirections(incidentNormals[0], incidentNormals[2], rowAmount);\r\n const row: BevelPolygonPoint[] = [];\r\n\r\n for (let columnIndex = 0; columnIndex <= rowIndex; columnIndex++) {\r\n const columnAmount = rowIndex === 0 ? 0 : columnIndex / rowIndex;\r\n const direction = rowIndex === 0 ? incidentNormals[0].clone() : _SlerpDirections(left, right, columnAmount);\r\n row.push({\r\n position: center.add(direction.scale(bevelAmount)),\r\n normal: direction,\r\n attributes: cornerAttributes,\r\n materialIndex,\r\n });\r\n }\r\n\r\n rows.push(row);\r\n }\r\n\r\n for (let rowIndex = 0; rowIndex < segments; rowIndex++) {\r\n const row = rows[rowIndex];\r\n const nextRow = rows[rowIndex + 1];\r\n\r\n for (let columnIndex = 0; columnIndex < row.length; columnIndex++) {\r\n const targetNormal0 = row[columnIndex].position.subtract(center).normalize();\r\n const targetNormal1 = nextRow[columnIndex].position.subtract(center).normalize();\r\n const targetNormal2 = nextRow[columnIndex + 1].position.subtract(center).normalize();\r\n const targetNormal = targetNormal0.addInPlace(targetNormal1).addInPlace(targetNormal2).normalize();\r\n\r\n addTriangle(\r\n row[columnIndex].position,\r\n nextRow[columnIndex].position,\r\n nextRow[columnIndex + 1].position,\r\n targetNormal,\r\n targetNormal0,\r\n targetNormal1,\r\n targetNormal2,\r\n \"smooth\",\r\n row[columnIndex].attributes,\r\n nextRow[columnIndex].attributes,\r\n nextRow[columnIndex + 1].attributes,\r\n materialIndex\r\n );\r\n\r\n if (columnIndex < row.length - 1) {\r\n const secondTargetNormal0 = row[columnIndex].position.subtract(center).normalize();\r\n const secondTargetNormal1 = nextRow[columnIndex + 1].position.subtract(center).normalize();\r\n const secondTargetNormal2 = row[columnIndex + 1].position.subtract(center).normalize();\r\n const secondTargetNormal = secondTargetNormal0.add(secondTargetNormal1).addInPlace(secondTargetNormal2).normalize();\r\n\r\n addTriangle(\r\n row[columnIndex].position,\r\n nextRow[columnIndex + 1].position,\r\n row[columnIndex + 1].position,\r\n secondTargetNormal,\r\n secondTargetNormal0,\r\n secondTargetNormal1,\r\n secondTargetNormal2,\r\n \"smooth\",\r\n row[columnIndex].attributes,\r\n nextRow[columnIndex + 1].attributes,\r\n row[columnIndex + 1].attributes,\r\n materialIndex\r\n );\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const verticesWithSphericalPatch = new Set<number>();\r\n for (const vertexIndex of Array.from(selectedVertices)) {\r\n if (addSphericalCornerPatch(vertexIndex)) {\r\n verticesWithSphericalPatch.add(vertexIndex);\r\n }\r\n }\r\n\r\n for (const [vertexIndex, points] of Array.from(capPoints)) {\r\n if (points.length < 3) {\r\n continue;\r\n }\r\n\r\n if (verticesWithSphericalPatch.has(vertexIndex)) {\r\n continue;\r\n }\r\n\r\n const center = new Vector3();\r\n for (const point of points) {\r\n center.addInPlace(_GetCapPointPosition(point));\r\n }\r\n center.scaleInPlace(1 / points.length);\r\n\r\n let normal = new Vector3();\r\n const incidentFaces = topology.vertexFaces.get(vertexIndex) || [];\r\n for (const faceIndex of incidentFaces) {\r\n normal.addInPlace(topology.faces[faceIndex].normal);\r\n }\r\n\r\n if (normal.lengthSquared() < NormalEpsilon) {\r\n normal = topology.positions[vertexIndex].subtract(center);\r\n }\r\n\r\n if (normal.lengthSquared() < NormalEpsilon) {\r\n continue;\r\n }\r\n\r\n normal.normalize();\r\n\r\n const reference = Math.abs(normal.y) < 0.9 ? Vector3.Up() : Vector3.Right();\r\n const tangent = Vector3.Cross(reference, normal).normalize();\r\n const bitangent = Vector3.Cross(normal, tangent).normalize();\r\n const sortedPoints = points.slice().sort((a, b) => {\r\n const da = _GetCapPointPosition(a).subtract(center);\r\n const db = _GetCapPointPosition(b).subtract(center);\r\n const angleA = Math.atan2(Vector3.Dot(da, bitangent), Vector3.Dot(da, tangent));\r\n const angleB = Math.atan2(Vector3.Dot(db, bitangent), Vector3.Dot(db, tangent));\r\n return angleA - angleB;\r\n });\r\n\r\n if ((selectedEdgeCountPerVertex.get(vertexIndex) ?? 0) === 2) {\r\n const polygonPoints = sortedPoints.map((point) => ({\r\n position: _GetCapPointPosition(point),\r\n normal: _GetCapPointNormal(point, normal),\r\n attributes: _GetCapPointAttributes(point),\r\n materialIndex: _GetCapPointMaterialIndex(point),\r\n }));\r\n const addPatchTriangle = (point0: BevelPolygonPoint, point1: BevelPolygonPoint, point2: BevelPolygonPoint) => {\r\n const targetNormal = _NormalizeNormalOrFallback(point0.normal.add(point1.normal).addInPlace(point2.normal), normal);\r\n addTriangle(\r\n point0.position,\r\n point1.position,\r\n point2.position,\r\n targetNormal,\r\n point0.normal,\r\n point1.normal,\r\n point2.normal,\r\n \"smooth\",\r\n point0.attributes,\r\n point1.attributes,\r\n point2.attributes,\r\n point0.materialIndex\r\n );\r\n };\r\n\r\n while (polygonPoints.length > 3) {\r\n let bestIndex = -1;\r\n let bestScore = Number.MAX_VALUE;\r\n\r\n for (let index = 0; index < polygonPoints.length; index++) {\r\n const previous = polygonPoints[(index + polygonPoints.length - 1) % polygonPoints.length];\r\n const current = polygonPoints[index];\r\n const next = polygonPoints[(index + 1) % polygonPoints.length];\r\n const edge0 = current.position.subtract(previous.position);\r\n const edge1 = next.position.subtract(previous.position);\r\n const triangleNormal = Vector3.Cross(edge0, edge1);\r\n\r\n if (triangleNormal.lengthSquared() < TriangleAreaEpsilon) {\r\n continue;\r\n }\r\n\r\n const score = previous.position.subtract(next.position).lengthSquared();\r\n if (score < bestScore) {\r\n bestScore = score;\r\n bestIndex = index;\r\n }\r\n }\r\n\r\n if (bestIndex === -1) {\r\n break;\r\n }\r\n\r\n addPatchTriangle(\r\n polygonPoints[(bestIndex + polygonPoints.length - 1) % polygonPoints.length],\r\n polygonPoints[bestIndex],\r\n polygonPoints[(bestIndex + 1) % polygonPoints.length]\r\n );\r\n polygonPoints.splice(bestIndex, 1);\r\n }\r\n\r\n if (polygonPoints.length === 3) {\r\n addPatchTriangle(polygonPoints[0], polygonPoints[1], polygonPoints[2]);\r\n }\r\n\r\n continue;\r\n }\r\n\r\n const centerAttributes = _AverageAttributes(\r\n sortedPoints.map((point) => _GetCapPointAttributes(point)),\r\n attributeLength\r\n );\r\n const centerMaterialIndex = sortedPoints.length ? _GetCapPointMaterialIndex(sortedPoints[0]) : 0;\r\n for (let index = 0; index < sortedPoints.length; index++) {\r\n const point0 = sortedPoints[index];\r\n const point1 = sortedPoints[(index + 1) % sortedPoints.length];\r\n const point0Position = _GetCapPointPosition(point0);\r\n const point1Position = _GetCapPointPosition(point1);\r\n\r\n addTriangle(\r\n center,\r\n point0Position,\r\n point1Position,\r\n normal,\r\n normal,\r\n _GetCapPointNormal(point0, normal),\r\n _GetCapPointNormal(point1, normal),\r\n \"smooth\",\r\n centerAttributes,\r\n _GetCapPointAttributes(point0),\r\n _GetCapPointAttributes(point1),\r\n centerMaterialIndex\r\n );\r\n }\r\n }\r\n\r\n if (!outputPositions.length || !outputIndices.length) {\r\n return _CloneVertexData(vertexData);\r\n }\r\n\r\n const result = new VertexData();\r\n result.positions = outputPositions;\r\n result.normals = [];\r\n\r\n for (let index = 0; index < outputNormals.length; index++) {\r\n const normal = outputNormals[index];\r\n normal.normalize();\r\n\r\n result.normals.push(normal.x, normal.y, normal.z);\r\n }\r\n\r\n _AssignAttributeOutputs(result, attributeDescriptors, outputVertexAttributes);\r\n\r\n const materialResult = _BuildMaterialInfoResult(vertexData, outputIndices, outputTriangleMaterialIndices, outputPositions.length / 3);\r\n result.indices = materialResult.indices;\r\n result.materialInfos = materialResult.materialInfos;\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Block used to bevel sharp edges in a geometry.\r\n */\r\nexport class BevelBlock extends NodeGeometryBlock {\r\n /**\r\n * Gets or sets a boolean indicating that this block can evaluate context.\r\n * Build performance is improved when this value is set to false as the system will cache values instead of reevaluating everything per context change.\r\n */\r\n @editableInPropertyPage(\"Evaluate context\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public evaluateContext = false;\r\n\r\n /**\r\n * Creates a new BevelBlock.\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerInput(\"geometry\", NodeGeometryBlockConnectionPointTypes.Geometry);\r\n this.registerInput(\"amount\", NodeGeometryBlockConnectionPointTypes.Float, true, 0.1, 0, 1);\r\n this.registerInput(\"segments\", NodeGeometryBlockConnectionPointTypes.Int, true, 1, 1, 64);\r\n this.registerInput(\"angle\", NodeGeometryBlockConnectionPointTypes.Float, true, 30, 0, 180);\r\n this.registerOutput(\"output\", NodeGeometryBlockConnectionPointTypes.Geometry);\r\n }\r\n\r\n /**\r\n * Gets the current class name.\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"BevelBlock\";\r\n }\r\n\r\n /**\r\n * Gets the geometry input component.\r\n */\r\n public get geometry(): NodeGeometryConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the bevel amount input component.\r\n */\r\n public get amount(): NodeGeometryConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the bevel segment count input component.\r\n */\r\n public get segments(): NodeGeometryConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the angle threshold input component in degrees.\r\n */\r\n public get angle(): NodeGeometryConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the geometry output component.\r\n */\r\n public get output(): NodeGeometryConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeGeometryBuildState) {\r\n const func = (state: NodeGeometryBuildState) => {\r\n const source = this.geometry.getConnectedValue(state) as VertexData;\r\n\r\n if (!source || !source.positions) {\r\n return null;\r\n }\r\n\r\n const amount = Math.min(1, Math.max(0, this.amount.getConnectedValue(state) ?? 0.1));\r\n const segments = Math.min(64, Math.max(1, Math.floor(this.segments.getConnectedValue(state) ?? 1)));\r\n const angleDegrees = Math.max(0, Math.min(180, this.angle.getConnectedValue(state) ?? 30));\r\n const angle = (angleDegrees * Math.PI) / 180;\r\n\r\n return _BevelVertexData(source, amount, segments, angle);\r\n };\r\n\r\n if (this.evaluateContext) {\r\n this.output._storedFunction = func;\r\n } else {\r\n this.output._storedFunction = null;\r\n this.output._storedValue = func(state);\r\n }\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n return super._dumpPropertiesCode() + `${this._codeVariableName}.evaluateContext = ${this.evaluateContext ? \"true\" : \"false\"};\\n`;\r\n }\r\n\r\n /**\r\n * Serializes this block in a JSON representation.\r\n * @returns the serialized block object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.evaluateContext = this.evaluateContext;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /** @internal */\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n if (serializationObject.evaluateContext !== undefined) {\r\n this.evaluateContext = serializationObject.evaluateContext;\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for bevelBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterBevelBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.BevelBlock\", BevelBlock);\r\n}\r\n"]}