@unikia/upe-renderer 0.186.110 → 0.187.11

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 (506) hide show
  1. package/README.md +5 -7
  2. package/UPSTREAM.md +4 -4
  3. package/build/three.core.js +853 -277
  4. package/build/three.module.js +1098 -1280
  5. package/build/three.tsl.js +41938 -686
  6. package/build/three.webgpu.js +10604 -49055
  7. package/build/three.webgpu.nodes.js +9249 -5788
  8. package/examples/jsm/Addons.js +2 -0
  9. package/examples/jsm/animation/CCDIKSolver.js +17 -5
  10. package/examples/jsm/controls/FirstPersonControls.js +1 -1
  11. package/examples/jsm/controls/OrbitControls.js +27 -14
  12. package/examples/jsm/csm/CSMShader.js +74 -3
  13. package/examples/jsm/curves/CurveExtras.js +4 -4
  14. package/examples/jsm/curves/NURBSCurve.js +14 -0
  15. package/examples/jsm/exporters/EXRExporter.js +673 -16
  16. package/examples/jsm/exporters/GLTFExporter.js +4 -4
  17. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  18. package/examples/jsm/exporters/OBJExporter.js +48 -5
  19. package/examples/jsm/exporters/PLYExporter.js +22 -11
  20. package/examples/jsm/generators/CityGenerator.js +3 -2
  21. package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
  22. package/examples/jsm/gpgpu/BitonicSort.js +30 -23
  23. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
  24. package/examples/jsm/inspector/Extension.js +1 -1
  25. package/examples/jsm/inspector/Inspector.js +6 -46
  26. package/examples/jsm/inspector/RendererInspector.js +43 -8
  27. package/examples/jsm/inspector/Storage.js +49 -0
  28. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
  29. package/examples/jsm/inspector/tabs/Parameters.js +5 -1
  30. package/examples/jsm/inspector/tabs/Performance.js +22 -7
  31. package/examples/jsm/inspector/tabs/Settings.js +1 -1
  32. package/examples/jsm/inspector/tabs/Timeline.js +83 -7
  33. package/examples/jsm/inspector/tabs/Viewer.js +25 -10
  34. package/examples/jsm/inspector/ui/Profiler.js +1 -1
  35. package/examples/jsm/inspector/ui/Style.js +21 -53
  36. package/examples/jsm/inspector/ui/Values.js +28 -3
  37. package/examples/jsm/libs/fflate.module.js +83 -56
  38. package/examples/jsm/libs/mikktspace.README.md +27 -0
  39. package/examples/jsm/libs/mikktspace.module.js +721 -109
  40. package/examples/jsm/lighting/ClusteredLighting.js +100 -2
  41. package/examples/jsm/lighting/LightMapper.js +295 -0
  42. package/examples/jsm/lighting/LightProbeGrid.js +242 -139
  43. package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
  44. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
  45. package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
  46. package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
  47. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
  48. package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
  49. package/examples/jsm/lights/SunLight.js +9 -4
  50. package/examples/jsm/lights/SunLightNode.js +3 -3
  51. package/examples/jsm/lines/LineMaterial.js +26 -10
  52. package/examples/jsm/loaders/3DMLoader.js +10 -1
  53. package/examples/jsm/loaders/3MFLoader.js +5 -1
  54. package/examples/jsm/loaders/AMFLoader.js +2 -0
  55. package/examples/jsm/loaders/BVHLoader.js +2 -0
  56. package/examples/jsm/loaders/ColladaLoader.js +8 -0
  57. package/examples/jsm/loaders/DDSLoader.js +1 -1
  58. package/examples/jsm/loaders/DRACOLoader.js +5 -1
  59. package/examples/jsm/loaders/EXRLoader.js +120 -104
  60. package/examples/jsm/loaders/FBXLoader.js +4 -0
  61. package/examples/jsm/loaders/FontLoader.js +2 -0
  62. package/examples/jsm/loaders/GCodeLoader.js +5 -9
  63. package/examples/jsm/loaders/GLTFLoader.js +112 -31
  64. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
  65. package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
  66. package/examples/jsm/loaders/IESLoader.js +46 -12
  67. package/examples/jsm/loaders/JXLLoader.js +159 -0
  68. package/examples/jsm/loaders/KMZLoader.js +6 -0
  69. package/examples/jsm/loaders/KSPLATLoader.js +2 -0
  70. package/examples/jsm/loaders/KTX2Loader.js +49 -4
  71. package/examples/jsm/loaders/KTXLoader.js +5 -3
  72. package/examples/jsm/loaders/LDrawLoader.js +15 -22
  73. package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
  74. package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
  75. package/examples/jsm/loaders/LUTImageLoader.js +2 -0
  76. package/examples/jsm/loaders/LWOLoader.js +6 -0
  77. package/examples/jsm/loaders/MD2Loader.js +2 -0
  78. package/examples/jsm/loaders/MDDLoader.js +4 -0
  79. package/examples/jsm/loaders/MTLLoader.js +8 -0
  80. package/examples/jsm/loaders/MaterialXLoader.js +57 -5
  81. package/examples/jsm/loaders/NRRDLoader.js +4 -2
  82. package/examples/jsm/loaders/OBJLoader.js +10 -4
  83. package/examples/jsm/loaders/PCDLoader.js +6 -2
  84. package/examples/jsm/loaders/PDBLoader.js +5 -3
  85. package/examples/jsm/loaders/PLYLoader.js +39 -15
  86. package/examples/jsm/loaders/PVRLoader.js +2 -2
  87. package/examples/jsm/loaders/SPLATLoader.js +2 -0
  88. package/examples/jsm/loaders/SPZLoader.js +2 -0
  89. package/examples/jsm/loaders/STLLoader.js +3 -1
  90. package/examples/jsm/loaders/SVGLoader.js +27 -49
  91. package/examples/jsm/loaders/TDSLoader.js +4 -0
  92. package/examples/jsm/loaders/TGALoader.js +6 -5
  93. package/examples/jsm/loaders/TTFLoader.js +2 -0
  94. package/examples/jsm/loaders/USDLoader.js +14 -0
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
  96. package/examples/jsm/loaders/VOXLoader.js +3 -0
  97. package/examples/jsm/loaders/VRMLLoader.js +4 -0
  98. package/examples/jsm/loaders/VTKLoader.js +2 -0
  99. package/examples/jsm/loaders/XYZLoader.js +2 -0
  100. package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
  101. package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
  102. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
  103. package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
  104. package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
  105. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
  106. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
  107. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
  108. package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
  109. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
  110. package/examples/jsm/loaders/usd/USDAParser.js +56 -47
  111. package/examples/jsm/loaders/usd/USDComposer.js +25 -30
  112. package/examples/jsm/math/ColorConverter.js +7 -3
  113. package/examples/jsm/math/Lut.js +2 -2
  114. package/examples/jsm/math/OBB.js +3 -3
  115. package/examples/jsm/math/Octree.js +20 -17
  116. package/examples/jsm/objects/GaussianSplat.js +5 -4
  117. package/examples/jsm/objects/Reflector.js +5 -0
  118. package/examples/jsm/objects/SkyMesh.js +14 -7
  119. package/examples/jsm/objects/Water2Mesh.js +2 -2
  120. package/examples/jsm/physics/RapierPhysics.js +2 -2
  121. package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
  122. package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
  123. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  124. package/examples/jsm/postprocessing/GTAOPass.js +26 -18
  125. package/examples/jsm/renderers/SVGRenderer.js +3 -2
  126. package/examples/jsm/shaders/GTAOShader.js +7 -4
  127. package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
  128. package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
  129. package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
  130. package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
  131. package/examples/jsm/tsl/display/BloomNode.js +3 -3
  132. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
  133. package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
  134. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  135. package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
  136. package/examples/jsm/tsl/display/FSR1Node.js +3 -3
  137. package/examples/jsm/tsl/display/FXAANode.js +3 -10
  138. package/examples/jsm/tsl/display/FilmNode.js +3 -3
  139. package/examples/jsm/tsl/display/GTAONode.js +33 -25
  140. package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
  141. package/examples/jsm/tsl/display/GodraysNode.js +5 -19
  142. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
  143. package/examples/jsm/tsl/display/LensflareNode.js +3 -3
  144. package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
  145. package/examples/jsm/tsl/display/OITPassNode.js +0 -11
  146. package/examples/jsm/tsl/display/OutlineNode.js +107 -5
  147. package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
  148. package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
  149. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
  150. package/examples/jsm/tsl/display/SMAANode.js +3 -3
  151. package/examples/jsm/tsl/display/SSAONode.js +6 -20
  152. package/examples/jsm/tsl/display/SSGINode.js +36 -29
  153. package/examples/jsm/tsl/display/SSRNode.js +135 -63
  154. package/examples/jsm/tsl/display/SSSNode.js +6 -20
  155. package/examples/jsm/tsl/display/SharpenNode.js +3 -3
  156. package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
  157. package/examples/jsm/tsl/display/TAAUNode.js +10 -42
  158. package/examples/jsm/tsl/display/TRAANode.js +11 -43
  159. package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
  160. package/examples/jsm/tsl/display/TransitionNode.js +3 -3
  161. package/examples/jsm/tsl/display/lensDirt.js +30 -0
  162. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
  163. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
  164. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
  165. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
  166. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
  167. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
  168. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
  169. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
  170. package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
  171. package/examples/jsm/tsl/utils/Raymarching.js +1 -1
  172. package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
  173. package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
  174. package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
  175. package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
  176. package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
  177. package/examples/jsm/utils/SceneOptimizer.js +2 -1
  178. package/examples/jsm/utils/SceneUtils.js +1 -1
  179. package/examples/jsm/utils/unwrapUVs.js +865 -0
  180. package/examples/jsm/webxr/XREstimatedLight.js +11 -4
  181. package/package.json +3 -3
  182. package/src/Three.TSL.js +2 -683
  183. package/src/Three.WebGPU.Nodes.js +2 -1
  184. package/src/Three.WebGPU.js +2 -1
  185. package/src/animation/AnimationAction.js +1 -1
  186. package/src/animation/AnimationUtils.js +1 -3
  187. package/src/animation/KeyframeTrack.js +19 -0
  188. package/src/cameras/ArrayCamera.js +12 -0
  189. package/src/cameras/CubeCamera.js +3 -3
  190. package/src/constants.js +1 -9
  191. package/src/core/BufferAttribute.js +57 -21
  192. package/src/core/BufferGeometry.js +5 -13
  193. package/src/core/Clock.js +1 -1
  194. package/src/core/InterleavedBuffer.js +28 -18
  195. package/src/core/InterleavedBufferAttribute.js +54 -20
  196. package/src/core/Object3D.js +19 -9
  197. package/src/core/Raycaster.js +2 -0
  198. package/src/core/RenderTarget.js +11 -5
  199. package/src/core/UniformsGroup.js +7 -3
  200. package/src/extras/PMREMGenerator.js +392 -685
  201. package/src/extras/core/Curve.js +4 -0
  202. package/src/extras/core/CurvePath.js +13 -0
  203. package/src/extras/core/ShapePath.js +1 -1
  204. package/src/geometries/EdgesGeometry.js +12 -10
  205. package/src/geometries/LatheGeometry.js +2 -0
  206. package/src/helpers/PolarGridHelper.js +1 -1
  207. package/src/lights/Light.js +11 -0
  208. package/src/lights/LightProbe.js +2 -0
  209. package/src/lights/LightShadow.js +2 -0
  210. package/src/loaders/AnimationLoader.js +2 -0
  211. package/src/loaders/AudioLoader.js +2 -0
  212. package/src/loaders/BufferGeometryLoader.js +2 -0
  213. package/src/loaders/CompressedTextureLoader.js +2 -0
  214. package/src/loaders/CubeTextureLoader.js +2 -0
  215. package/src/loaders/DataTextureLoader.js +2 -0
  216. package/src/loaders/FileLoader.js +2 -0
  217. package/src/loaders/ImageBitmapLoader.js +3 -1
  218. package/src/loaders/ImageLoader.js +1 -0
  219. package/src/loaders/Loader.js +47 -0
  220. package/src/loaders/MaterialLoader.js +2 -0
  221. package/src/loaders/ObjectLoader.js +27 -8
  222. package/src/loaders/TextureLoader.js +5 -3
  223. package/src/loaders/nodes/NodeLoader.js +2 -0
  224. package/src/materials/Material.js +21 -2
  225. package/src/materials/MeshDepthMaterial.js +1 -1
  226. package/src/materials/MeshDistanceMaterial.js +1 -1
  227. package/src/materials/MeshLambertMaterial.js +1 -1
  228. package/src/materials/MeshMatcapMaterial.js +1 -1
  229. package/src/materials/MeshNormalMaterial.js +1 -1
  230. package/src/materials/MeshPhongMaterial.js +1 -1
  231. package/src/materials/MeshPhysicalMaterial.js +90 -11
  232. package/src/materials/MeshStandardMaterial.js +1 -1
  233. package/src/materials/MeshToonMaterial.js +1 -1
  234. package/src/materials/nodes/Line2NodeMaterial.js +32 -10
  235. package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
  236. package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
  237. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
  238. package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
  239. package/src/materials/nodes/NodeMaterial.js +36 -16
  240. package/src/materials/nodes/NodeMaterialInstance.js +193 -0
  241. package/src/materials/nodes/NodeMaterials.js +1 -0
  242. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  243. package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
  244. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
  245. package/src/math/Box3.js +2 -2
  246. package/src/math/Color.js +8 -8
  247. package/src/math/ColorManagement.js +2 -21
  248. package/src/math/FrustumArray.js +12 -0
  249. package/src/math/Interpolant.js +1 -1
  250. package/src/math/Line3.js +2 -4
  251. package/src/math/MathUtils.js +33 -46
  252. package/src/math/Matrix2.js +1 -1
  253. package/src/math/Matrix3.js +1 -1
  254. package/src/math/Matrix4.js +1 -1
  255. package/src/math/Triangle.js +2 -1
  256. package/src/math/Vector2.js +1 -1
  257. package/src/math/Vector3.js +1 -1
  258. package/src/math/Vector4.js +1 -1
  259. package/src/nodes/Nodes.js +1 -0
  260. package/src/nodes/TSL.js +2 -0
  261. package/src/nodes/accessors/Arrays.js +1 -1
  262. package/src/nodes/accessors/Batch.js +29 -23
  263. package/src/nodes/accessors/BufferAttributeNode.js +21 -1
  264. package/src/nodes/accessors/BuiltinNode.js +6 -0
  265. package/src/nodes/accessors/Camera.js +100 -93
  266. package/src/nodes/accessors/ClippingNode.js +17 -6
  267. package/src/nodes/accessors/CubeTextureNode.js +12 -24
  268. package/src/nodes/accessors/Instance.js +198 -160
  269. package/src/nodes/accessors/Lights.js +19 -6
  270. package/src/nodes/accessors/MaterialNode.js +33 -4
  271. package/src/nodes/accessors/Morph.js +81 -22
  272. package/src/nodes/accessors/Normal.js +0 -42
  273. package/src/nodes/accessors/Object3DNode.js +6 -0
  274. package/src/nodes/accessors/PointUVNode.js +6 -0
  275. package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
  276. package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
  277. package/src/nodes/accessors/ReferenceNode.js +6 -0
  278. package/src/nodes/accessors/Skinning.js +57 -52
  279. package/src/nodes/accessors/StorageBufferNode.js +3 -12
  280. package/src/nodes/accessors/TextureBicubic.js +30 -27
  281. package/src/nodes/accessors/TextureNode.js +164 -78
  282. package/src/nodes/accessors/TextureSizeNode.js +6 -0
  283. package/src/nodes/accessors/UniformArrayNode.js +8 -15
  284. package/src/nodes/accessors/VelocityNode.js +13 -8
  285. package/src/nodes/code/CodeNode.js +6 -0
  286. package/src/nodes/code/ExpressionNode.js +6 -0
  287. package/src/nodes/code/FunctionCallNode.js +3 -3
  288. package/src/nodes/code/FunctionNode.js +15 -13
  289. package/src/nodes/core/ArrayNode.js +3 -3
  290. package/src/nodes/core/AssignNode.js +10 -9
  291. package/src/nodes/core/AttributeNode.js +39 -0
  292. package/src/nodes/core/BypassNode.js +6 -0
  293. package/src/nodes/core/ConstNode.js +31 -1
  294. package/src/nodes/core/ContextNode.js +11 -6
  295. package/src/nodes/core/IndexNode.js +6 -0
  296. package/src/nodes/core/InputNode.js +6 -0
  297. package/src/nodes/core/InspectorNode.js +17 -31
  298. package/src/nodes/core/IsolateNode.js +8 -0
  299. package/src/nodes/core/Node.js +367 -67
  300. package/src/nodes/core/NodeBuilder.js +664 -222
  301. package/src/nodes/core/NodeUtils.js +25 -0
  302. package/src/nodes/core/NodeVar.js +10 -1
  303. package/src/nodes/core/OutputStructNode.js +6 -0
  304. package/src/nodes/core/OverrideContextNode.js +38 -37
  305. package/src/nodes/core/PropertyNode.js +14 -0
  306. package/src/nodes/core/StackNode.js +33 -21
  307. package/src/nodes/core/StructNode.js +6 -0
  308. package/src/nodes/core/StructTypeNode.js +6 -0
  309. package/src/nodes/core/SubBuildNode.js +8 -0
  310. package/src/nodes/core/TempNode.js +10 -35
  311. package/src/nodes/core/UniformGroupNode.js +6 -0
  312. package/src/nodes/core/VarNode.js +43 -135
  313. package/src/nodes/core/VaryingNode.js +33 -2
  314. package/src/nodes/display/BlendModes.js +5 -40
  315. package/src/nodes/display/BumpMapNode.js +17 -7
  316. package/src/nodes/display/ColorAdjustment.js +22 -10
  317. package/src/nodes/display/ColorSpaceFunctions.js +2 -14
  318. package/src/nodes/display/ColorSpaceNode.js +3 -3
  319. package/src/nodes/display/FrontFacingNode.js +6 -0
  320. package/src/nodes/display/NormalMapNode.js +3 -3
  321. package/src/nodes/display/PassNode.js +75 -16
  322. package/src/nodes/display/RenderOutputNode.js +22 -5
  323. package/src/nodes/display/ScreenNode.js +6 -0
  324. package/src/nodes/display/ToneMappingFunctions.js +9 -51
  325. package/src/nodes/display/ToneMappingNode.js +3 -3
  326. package/src/nodes/display/ToonOutlinePassNode.js +66 -2
  327. package/src/nodes/display/ViewportDepthNode.js +34 -4
  328. package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
  329. package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
  330. package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
  331. package/src/nodes/functions/BSDF/D_GGX.js +1 -8
  332. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
  333. package/src/nodes/functions/BSDF/LTC.js +20 -47
  334. package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
  335. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
  336. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
  337. package/src/nodes/functions/PhysicalLightingModel.js +84 -51
  338. package/src/nodes/functions/VolumetricLightingModel.js +1 -1
  339. package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
  340. package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
  341. package/src/nodes/functions/material/getRoughness.js +3 -1
  342. package/src/nodes/geometry/RangeNode.js +52 -69
  343. package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
  344. package/src/nodes/gpgpu/BarrierNode.js +6 -0
  345. package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
  346. package/src/nodes/gpgpu/ComputeNode.js +6 -0
  347. package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
  348. package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
  349. package/src/nodes/lighting/AnalyticLightNode.js +7 -14
  350. package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
  351. package/src/nodes/lighting/EnvironmentNode.js +58 -8
  352. package/src/nodes/lighting/IESSpotLightNode.js +19 -4
  353. package/src/nodes/lighting/LightProbeNode.js +2 -1
  354. package/src/nodes/lighting/LightUtils.js +2 -2
  355. package/src/nodes/lighting/LightingNode.js +6 -0
  356. package/src/nodes/lighting/LightsNode.js +26 -32
  357. package/src/nodes/lighting/PointShadowNode.js +92 -48
  358. package/src/nodes/lighting/ProjectorLightNode.js +1 -1
  359. package/src/nodes/lighting/RectAreaLightNode.js +13 -14
  360. package/src/nodes/lighting/ShadowBaseNode.js +9 -17
  361. package/src/nodes/lighting/ShadowFilterNode.js +26 -3
  362. package/src/nodes/lighting/ShadowNode.js +13 -11
  363. package/src/nodes/materialx/MaterialXColor.js +2 -14
  364. package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
  365. package/src/nodes/materialx/MaterialXNodes.js +8 -11
  366. package/src/nodes/materialx/MaterialXNoise.js +195 -454
  367. package/src/nodes/math/BitcastNode.js +5 -5
  368. package/src/nodes/math/BitcountNode.js +18 -46
  369. package/src/nodes/math/ConditionalNode.js +92 -22
  370. package/src/nodes/math/Hash.js +1 -1
  371. package/src/nodes/math/MathNode.js +86 -64
  372. package/src/nodes/math/MathUtils.js +2 -2
  373. package/src/nodes/math/OperatorNode.js +42 -59
  374. package/src/nodes/math/PackFloatNode.js +9 -9
  375. package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
  376. package/src/nodes/math/TriNoise3D.js +3 -23
  377. package/src/nodes/math/UnpackFloatNode.js +9 -9
  378. package/src/nodes/pmrem/PMREMNode.js +38 -75
  379. package/src/nodes/pmrem/PMREMUtils.js +108 -272
  380. package/src/nodes/procedural/Checker.js +1 -1
  381. package/src/nodes/tsl/TSLCore.js +199 -74
  382. package/src/nodes/utils/ArrayElementNode.js +19 -1
  383. package/src/nodes/utils/CubeMapNode.js +3 -3
  384. package/src/nodes/utils/DebugNode.js +2 -2
  385. package/src/nodes/utils/EventNode.js +6 -0
  386. package/src/nodes/utils/FlipNode.js +3 -3
  387. package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
  388. package/src/nodes/utils/JoinNode.js +3 -3
  389. package/src/nodes/utils/LoopNode.js +14 -9
  390. package/src/nodes/utils/MemberNode.js +18 -0
  391. package/src/nodes/utils/PostProcessingUtils.js +20 -25
  392. package/src/nodes/utils/RTTNode.js +2 -0
  393. package/src/nodes/utils/ReflectorNode.js +24 -0
  394. package/src/nodes/utils/RotateNode.js +3 -3
  395. package/src/nodes/utils/SampleNode.js +6 -0
  396. package/src/nodes/utils/SetNode.js +3 -3
  397. package/src/nodes/utils/SplitNode.js +6 -0
  398. package/src/nodes/utils/UVUtils.js +2 -2
  399. package/src/objects/BatchedMesh.js +146 -15
  400. package/src/objects/InstancedMesh.js +12 -4
  401. package/src/objects/Line.js +20 -0
  402. package/src/objects/Mesh.js +8 -0
  403. package/src/objects/Points.js +20 -0
  404. package/src/objects/Skeleton.js +26 -0
  405. package/src/objects/SkinnedMesh.js +3 -3
  406. package/src/objects/Sprite.js +10 -0
  407. package/src/renderers/WebGLRenderer.js +104 -70
  408. package/src/renderers/common/Animation.js +5 -1
  409. package/src/renderers/common/Attributes.js +67 -57
  410. package/src/renderers/common/Backend.js +78 -3
  411. package/src/renderers/common/BindGroup.js +11 -0
  412. package/src/renderers/common/Binding.js +0 -11
  413. package/src/renderers/common/Bindings.js +116 -10
  414. package/src/renderers/common/Buffer.js +1 -1
  415. package/src/renderers/common/ClippingContext.js +12 -1
  416. package/src/renderers/common/ComputePipeline.js +17 -1
  417. package/src/renderers/common/DirectRenderPipeline.js +7 -3
  418. package/src/renderers/common/Geometries.js +170 -132
  419. package/src/renderers/common/Info.js +1 -1
  420. package/src/renderers/common/InspectorBase.js +5 -5
  421. package/src/renderers/common/Lighting.js +59 -0
  422. package/src/renderers/common/Pipelines.js +26 -12
  423. package/src/renderers/common/ProgrammableStage.js +1 -17
  424. package/src/renderers/common/RenderContext.js +21 -0
  425. package/src/renderers/common/RenderContexts.js +13 -4
  426. package/src/renderers/common/RenderObject.js +111 -35
  427. package/src/renderers/common/RenderObjects.js +37 -19
  428. package/src/renderers/common/Renderer.js +537 -295
  429. package/src/renderers/common/RendererUtils.js +15 -0
  430. package/src/renderers/common/StandardDrawingPipeline.js +343 -0
  431. package/src/renderers/common/Storage3DTexture.js +11 -0
  432. package/src/renderers/common/StorageArrayTexture.js +10 -0
  433. package/src/renderers/common/StorageTexture.js +0 -9
  434. package/src/renderers/common/Textures.js +144 -37
  435. package/src/renderers/common/UniformsGroup.js +19 -0
  436. package/src/renderers/common/XRManager.js +10 -91
  437. package/src/renderers/common/extras/PMREMGenerator.js +298 -576
  438. package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
  439. package/src/renderers/common/nodes/NodeLibrary.js +11 -35
  440. package/src/renderers/common/nodes/NodeManager.js +80 -31
  441. package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
  442. package/src/renderers/common/nodes/NodeSampler.js +14 -0
  443. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  444. package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
  445. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
  446. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
  447. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
  448. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
  449. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
  451. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
  452. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
  453. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
  454. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
  455. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
  456. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
  457. package/src/renderers/shaders/ShaderChunk.js +0 -2
  458. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
  459. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  461. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
  462. package/src/renderers/shaders/ShaderLib.js +3 -0
  463. package/src/renderers/shaders/UniformsLib.js +4 -5
  464. package/src/renderers/webgl/WebGLBackground.js +3 -3
  465. package/src/renderers/webgl/WebGLBindingStates.js +4 -2
  466. package/src/renderers/webgl/WebGLCapabilities.js +7 -1
  467. package/src/renderers/webgl/WebGLEnvironments.js +2 -2
  468. package/src/renderers/webgl/WebGLGeometries.js +42 -14
  469. package/src/renderers/webgl/WebGLMaterials.js +15 -2
  470. package/src/renderers/webgl/WebGLOutput.js +37 -1
  471. package/src/renderers/webgl/WebGLProgram.js +13 -54
  472. package/src/renderers/webgl/WebGLPrograms.js +22 -8
  473. package/src/renderers/webgl/WebGLRenderStates.js +11 -8
  474. package/src/renderers/webgl/WebGLShadowMap.js +6 -4
  475. package/src/renderers/webgl/WebGLState.js +10 -6
  476. package/src/renderers/webgl/WebGLTextures.js +129 -77
  477. package/src/renderers/webgl/WebGLUniforms.js +44 -6
  478. package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
  479. package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
  480. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
  481. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
  482. package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
  483. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
  484. package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
  485. package/src/renderers/webgpu/WebGPUBackend.js +140 -82
  486. package/src/renderers/webgpu/WebGPURenderer.js +1 -1
  487. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
  488. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
  489. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
  490. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
  491. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
  492. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
  493. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
  494. package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
  495. package/src/renderers/webxr/WebXRController.js +3 -3
  496. package/src/renderers/webxr/WebXRManager.js +5 -90
  497. package/src/scenes/Scene.js +4 -4
  498. package/src/textures/CompressedTexture.js +2 -2
  499. package/src/textures/DepthTexture.js +2 -2
  500. package/src/textures/FramebufferTexture.js +11 -0
  501. package/src/textures/Texture.js +29 -1
  502. package/src/textures/TextureSource.js +1 -1
  503. package/src/upe.js +1 -1
  504. package/src/utils.js +4 -4
  505. package/examples/jsm/libs/surfaceNet.js +0 -201
  506. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
@@ -5,6 +5,7 @@ export { default as WebGPURenderer } from './renderers/webgpu/WebGPURenderer.Nod
5
5
  export { default as WebGPUBackend } from './renderers/webgpu/WebGPUBackend.js';
6
6
  export { default as WebGLBackend } from './renderers/webgl-fallback/WebGLBackend.js';
7
7
  export { default as Lighting } from './renderers/common/Lighting.js';
8
+ export { default as StandardDrawingPipeline } from './renderers/common/StandardDrawingPipeline.js';
8
9
  export { default as BundleGroup } from './renderers/common/BundleGroup.js';
9
10
  export { default as QuadMesh } from './renderers/common/QuadMesh.js';
10
11
  export { default as PMREMGenerator } from './renderers/common/extras/PMREMGenerator.js';
@@ -29,5 +30,5 @@ export { default as CanvasTarget } from './renderers/common/CanvasTarget.js';
29
30
  export { default as BlendMode } from './renderers/common/BlendMode.js';
30
31
  export { ClippingGroup } from './objects/ClippingGroup.js';
31
32
  export * from './nodes/Nodes.js';
32
- import * as TSL from './nodes/TSL.js';
33
+ import * as TSL from './Three.TSL.js';
33
34
  export { TSL };
@@ -8,6 +8,7 @@ export { default as Renderer } from './renderers/common/Renderer.js';
8
8
  export { default as Backend } from './renderers/common/Backend.js';
9
9
  export { default as WebGLCapabilities } from './renderers/webgl-fallback/utils/WebGLCapabilities.js';
10
10
  export { default as Lighting } from './renderers/common/Lighting.js';
11
+ export { default as StandardDrawingPipeline } from './renderers/common/StandardDrawingPipeline.js';
11
12
  export { default as BundleGroup } from './renderers/common/BundleGroup.js';
12
13
  export { default as QuadMesh } from './renderers/common/QuadMesh.js';
13
14
  export { default as PMREMGenerator } from './renderers/common/extras/PMREMGenerator.js';
@@ -39,5 +40,5 @@ export { default as StandardNodeLibrary } from './renderers/webgpu/nodes/Standar
39
40
  export { default as WGSLNodeBuilder } from './renderers/webgpu/nodes/WGSLNodeBuilder.js';
40
41
  export { ClippingGroup } from './objects/ClippingGroup.js';
41
42
  export * from './nodes/Nodes.js';
42
- import * as TSL from './nodes/TSL.js';
43
+ import * as TSL from './Three.TSL.js';
43
44
  export { TSL };
@@ -79,7 +79,7 @@ class AnimationAction {
79
79
  * loop state).
80
80
  *
81
81
  * @type {number}
82
- * @default Infinity
82
+ * @default 0
83
83
  */
84
84
  this.time = 0;
85
85
 
@@ -326,10 +326,8 @@ function makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targe
326
326
 
327
327
  // Interpolate to the reference value
328
328
  const interpolant = referenceTrack.createInterpolant();
329
- const startIndex = referenceOffset;
330
- const endIndex = referenceValueSize - referenceOffset;
331
329
  interpolant.evaluate( referenceTime );
332
- referenceValue = interpolant.resultBuffer.slice( startIndex, endIndex );
330
+ referenceValue = interpolant.resultBuffer.slice();
333
331
 
334
332
  }
335
333
 
@@ -305,6 +305,13 @@ class KeyframeTrack {
305
305
 
306
306
  }
307
307
 
308
+ if ( AnimationUtils.hasTangents( this.settings ) ) {
309
+
310
+ shiftTangentTimes( this.settings.inTangents, timeOffset );
311
+ shiftTangentTimes( this.settings.outTangents, timeOffset );
312
+
313
+ }
314
+
308
315
  }
309
316
 
310
317
  return this;
@@ -626,6 +633,18 @@ class KeyframeTrack {
626
633
 
627
634
  }
628
635
 
636
+ function shiftTangentTimes( tangents, timeOffset ) {
637
+
638
+ // tangents are [ time, value ] pairs, so only every second entry is a time
639
+
640
+ for ( let i = 0, n = tangents.length; i !== n; i += 2 ) {
641
+
642
+ tangents[ i ] += timeOffset;
643
+
644
+ }
645
+
646
+ }
647
+
629
648
  function scaleTangentTimes( tangents, timeScale ) {
630
649
 
631
650
  // tangents are [ time, value ] pairs, so only every second entry is a time
@@ -47,6 +47,18 @@ class ArrayCamera extends PerspectiveCamera {
47
47
  */
48
48
  this.cameras = array;
49
49
 
50
+ /**
51
+ * Whether 3D objects are frustum culled per sub camera or not.
52
+ *
53
+ * Since this requires an additional frustum test per sub camera, it should only be
54
+ * enabled when the frustums of the sub cameras barely overlap. The property has
55
+ * no effect with multiview rendering.
56
+ *
57
+ * @type {boolean}
58
+ * @default false
59
+ */
60
+ this.perCameraFrustumCulled = false;
61
+
50
62
  }
51
63
 
52
64
  }
@@ -199,9 +199,9 @@ class CubeCamera extends Object3D {
199
199
 
200
200
  renderer.xr.enabled = false;
201
201
 
202
- const generateMipmaps = renderTarget.texture.generateMipmaps;
202
+ const mipmapsAutoUpdate = renderTarget.texture.mipmapsAutoUpdate;
203
203
 
204
- renderTarget.texture.generateMipmaps = false;
204
+ renderTarget.texture.mipmapsAutoUpdate = false;
205
205
 
206
206
  // https://github.com/mrdoob/three.js/issues/31413#issuecomment-3095966812
207
207
 
@@ -240,7 +240,7 @@ class CubeCamera extends Object3D {
240
240
  // mipmaps are generated during the last call of render()
241
241
  // at this point, all sides of the cube render target are defined
242
242
 
243
- renderTarget.texture.generateMipmaps = generateMipmaps;
243
+ renderTarget.texture.mipmapsAutoUpdate = mipmapsAutoUpdate;
244
244
 
245
245
  renderer.setRenderTarget( renderTarget, 5, activeMipmapLevel );
246
246
  if ( reversedDepthBuffer && renderer.autoClear === false ) renderer.clearDepth();
package/src/constants.js CHANGED
@@ -1,4 +1,4 @@
1
- export const REVISION = '186';
1
+ export const REVISION = '187';
2
2
 
3
3
  /**
4
4
  * Represents mouse buttons and interaction types in context of controls.
@@ -539,14 +539,6 @@ export const EquirectangularReflectionMapping = 303;
539
539
  */
540
540
  export const EquirectangularRefractionMapping = 304;
541
541
 
542
- /**
543
- * Reflection mapping for PMREM textures.
544
- *
545
- * @type {number}
546
- * @constant
547
- */
548
- export const CubeUVReflectionMapping = 306;
549
-
550
542
  /**
551
543
  * The texture will simply repeat to infinity.
552
544
  *
@@ -1,6 +1,6 @@
1
1
  import { Vector3 } from '../math/Vector3.js';
2
2
  import { Vector2 } from '../math/Vector2.js';
3
- import { denormalize, normalize } from '../math/MathUtils.js';
3
+ import { denormalize, normalize, getNormalizationScale } from '../math/MathUtils.js';
4
4
  import { StaticDrawUsage, FloatType } from '../constants.js';
5
5
  import { fromHalfFloat, toHalfFloat } from '../extras/DataUtils.js';
6
6
  import { EventDispatcher } from './EventDispatcher.js';
@@ -136,6 +136,14 @@ class BufferAttribute extends EventDispatcher {
136
136
  */
137
137
  this.version = 0;
138
138
 
139
+ /**
140
+ * Cached normalization factor, see {@link MathUtils#getNormalizationScale}.
141
+ *
142
+ * @private
143
+ * @type {number|undefined}
144
+ */
145
+ this._normalizationScale = array !== undefined ? getNormalizationScale( array ) : undefined;
146
+
139
147
  }
140
148
 
141
149
  /**
@@ -210,6 +218,8 @@ class BufferAttribute extends EventDispatcher {
210
218
  this.usage = source.usage;
211
219
  this.gpuType = source.gpuType;
212
220
 
221
+ this._normalizationScale = source._normalizationScale;
222
+
213
223
  return this;
214
224
 
215
225
  }
@@ -386,7 +396,7 @@ class BufferAttribute extends EventDispatcher {
386
396
 
387
397
  let value = this.array[ index * this.itemSize + component ];
388
398
 
389
- if ( this.normalized ) value = denormalize( value, this.array );
399
+ if ( this.normalized ) value = this._denormalize( value );
390
400
 
391
401
  return value;
392
402
 
@@ -402,7 +412,7 @@ class BufferAttribute extends EventDispatcher {
402
412
  */
403
413
  setComponent( index, component, value ) {
404
414
 
405
- if ( this.normalized ) value = normalize( value, this.array );
415
+ if ( this.normalized ) value = this._normalize( value );
406
416
 
407
417
  this.array[ index * this.itemSize + component ] = value;
408
418
 
@@ -420,7 +430,7 @@ class BufferAttribute extends EventDispatcher {
420
430
 
421
431
  let x = this.array[ index * this.itemSize ];
422
432
 
423
- if ( this.normalized ) x = denormalize( x, this.array );
433
+ if ( this.normalized ) x = this._denormalize( x );
424
434
 
425
435
  return x;
426
436
 
@@ -435,7 +445,7 @@ class BufferAttribute extends EventDispatcher {
435
445
  */
436
446
  setX( index, x ) {
437
447
 
438
- if ( this.normalized ) x = normalize( x, this.array );
448
+ if ( this.normalized ) x = this._normalize( x );
439
449
 
440
450
  this.array[ index * this.itemSize ] = x;
441
451
 
@@ -453,7 +463,7 @@ class BufferAttribute extends EventDispatcher {
453
463
 
454
464
  let y = this.array[ index * this.itemSize + 1 ];
455
465
 
456
- if ( this.normalized ) y = denormalize( y, this.array );
466
+ if ( this.normalized ) y = this._denormalize( y );
457
467
 
458
468
  return y;
459
469
 
@@ -468,7 +478,7 @@ class BufferAttribute extends EventDispatcher {
468
478
  */
469
479
  setY( index, y ) {
470
480
 
471
- if ( this.normalized ) y = normalize( y, this.array );
481
+ if ( this.normalized ) y = this._normalize( y );
472
482
 
473
483
  this.array[ index * this.itemSize + 1 ] = y;
474
484
 
@@ -486,7 +496,7 @@ class BufferAttribute extends EventDispatcher {
486
496
 
487
497
  let z = this.array[ index * this.itemSize + 2 ];
488
498
 
489
- if ( this.normalized ) z = denormalize( z, this.array );
499
+ if ( this.normalized ) z = this._denormalize( z );
490
500
 
491
501
  return z;
492
502
 
@@ -501,7 +511,7 @@ class BufferAttribute extends EventDispatcher {
501
511
  */
502
512
  setZ( index, z ) {
503
513
 
504
- if ( this.normalized ) z = normalize( z, this.array );
514
+ if ( this.normalized ) z = this._normalize( z );
505
515
 
506
516
  this.array[ index * this.itemSize + 2 ] = z;
507
517
 
@@ -519,7 +529,7 @@ class BufferAttribute extends EventDispatcher {
519
529
 
520
530
  let w = this.array[ index * this.itemSize + 3 ];
521
531
 
522
- if ( this.normalized ) w = denormalize( w, this.array );
532
+ if ( this.normalized ) w = this._denormalize( w );
523
533
 
524
534
  return w;
525
535
 
@@ -534,7 +544,7 @@ class BufferAttribute extends EventDispatcher {
534
544
  */
535
545
  setW( index, w ) {
536
546
 
537
- if ( this.normalized ) w = normalize( w, this.array );
547
+ if ( this.normalized ) w = this._normalize( w );
538
548
 
539
549
  this.array[ index * this.itemSize + 3 ] = w;
540
550
 
@@ -556,8 +566,8 @@ class BufferAttribute extends EventDispatcher {
556
566
 
557
567
  if ( this.normalized ) {
558
568
 
559
- x = normalize( x, this.array );
560
- y = normalize( y, this.array );
569
+ x = this._normalize( x );
570
+ y = this._normalize( y );
561
571
 
562
572
  }
563
573
 
@@ -583,9 +593,9 @@ class BufferAttribute extends EventDispatcher {
583
593
 
584
594
  if ( this.normalized ) {
585
595
 
586
- x = normalize( x, this.array );
587
- y = normalize( y, this.array );
588
- z = normalize( z, this.array );
596
+ x = this._normalize( x );
597
+ y = this._normalize( y );
598
+ z = this._normalize( z );
589
599
 
590
600
  }
591
601
 
@@ -613,10 +623,10 @@ class BufferAttribute extends EventDispatcher {
613
623
 
614
624
  if ( this.normalized ) {
615
625
 
616
- x = normalize( x, this.array );
617
- y = normalize( y, this.array );
618
- z = normalize( z, this.array );
619
- w = normalize( w, this.array );
626
+ x = this._normalize( x );
627
+ y = this._normalize( y );
628
+ z = this._normalize( z );
629
+ w = this._normalize( w );
620
630
 
621
631
  }
622
632
 
@@ -679,7 +689,7 @@ class BufferAttribute extends EventDispatcher {
679
689
  }
680
690
 
681
691
  /**
682
- * Disposes of the buffer attribute. Available only in {@link WebGPURenderer}.
692
+ * Frees the GPU-related resources allocated by this instance. Available only in {@link WebGPURenderer}.
683
693
  */
684
694
  dispose() {
685
695
 
@@ -687,6 +697,32 @@ class BufferAttribute extends EventDispatcher {
687
697
 
688
698
  }
689
699
 
700
+ /**
701
+ * Denormalizes the value using cached normalization factor.
702
+ *
703
+ * @private
704
+ */
705
+ _denormalize( value ) {
706
+
707
+ const scale = this._normalizationScale;
708
+
709
+ return scale !== undefined ? Math.max( value / scale, - 1.0 ) : denormalize( value, this.array );
710
+
711
+ }
712
+
713
+ /**
714
+ * Normalizes the value using cached normalization factor.
715
+ *
716
+ * @private
717
+ */
718
+ _normalize( value ) {
719
+
720
+ const scale = this._normalizationScale;
721
+
722
+ return scale !== undefined ? Math.round( value * scale ) : normalize( value, this.array );
723
+
724
+ }
725
+
690
726
  }
691
727
 
692
728
  /**
@@ -866,6 +866,7 @@ class BufferGeometry extends EventDispatcher {
866
866
  }
867
867
 
868
868
  const tan1 = [], tan2 = [];
869
+ const used = new Uint8Array( positionAttribute.count );
869
870
 
870
871
  for ( let i = 0; i < positionAttribute.count; i ++ ) {
871
872
 
@@ -887,6 +888,8 @@ class BufferGeometry extends EventDispatcher {
887
888
 
888
889
  function handleTriangle( a, b, c ) {
889
890
 
891
+ used[ a ] = used[ b ] = used[ c ] = 1;
892
+
890
893
  vA.fromBufferAttribute( positionAttribute, a );
891
894
  vB.fromBufferAttribute( positionAttribute, b );
892
895
  vC.fromBufferAttribute( positionAttribute, c );
@@ -975,20 +978,9 @@ class BufferGeometry extends EventDispatcher {
975
978
 
976
979
  }
977
980
 
978
- for ( let i = 0, il = groups.length; i < il; ++ i ) {
979
-
980
- const group = groups[ i ];
981
+ for ( let i = 0, il = positionAttribute.count; i < il; ++ i ) {
981
982
 
982
- const start = group.start;
983
- const count = group.count;
984
-
985
- for ( let j = start, jl = start + count; j < jl; j += 3 ) {
986
-
987
- handleVertex( index.getX( j + 0 ) );
988
- handleVertex( index.getX( j + 1 ) );
989
- handleVertex( index.getX( j + 2 ) );
990
-
991
- }
983
+ if ( used[ i ] ) handleVertex( i );
992
984
 
993
985
  }
994
986
 
package/src/core/Clock.js CHANGED
@@ -54,7 +54,7 @@ class Clock {
54
54
  * Whether the clock is running or not.
55
55
  *
56
56
  * @type {boolean}
57
- * @default true
57
+ * @default false
58
58
  */
59
59
  this.running = false;
60
60
 
@@ -210,19 +210,15 @@ class InterleavedBuffer {
210
210
 
211
211
  }
212
212
 
213
- if ( this.array.buffer._uuid === undefined ) {
213
+ const key = getArrayKey( this.array );
214
214
 
215
- this.array.buffer._uuid = generateUUID();
215
+ if ( data.arrayBuffers[ key ] === undefined ) {
216
216
 
217
- }
218
-
219
- if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {
220
-
221
- data.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;
217
+ data.arrayBuffers[ key ] = this.array.slice( 0 ).buffer;
222
218
 
223
219
  }
224
220
 
225
- const array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );
221
+ const array = new this.array.constructor( data.arrayBuffers[ key ] );
226
222
 
227
223
  const ib = new this.constructor( array, this.stride );
228
224
  ib.setUsage( this.usage );
@@ -261,17 +257,11 @@ class InterleavedBuffer {
261
257
 
262
258
  }
263
259
 
264
- // generate UUID for array buffer if necessary
260
+ const key = getArrayKey( this.array );
265
261
 
266
- if ( this.array.buffer._uuid === undefined ) {
262
+ if ( data.arrayBuffers[ key ] === undefined ) {
267
263
 
268
- this.array.buffer._uuid = generateUUID();
269
-
270
- }
271
-
272
- if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {
273
-
274
- data.arrayBuffers[ this.array.buffer._uuid ] = Array.from( new Uint32Array( this.array.buffer ) );
264
+ data.arrayBuffers[ key ] = Array.from( new Uint32Array( this.array.slice( 0 ).buffer ) );
275
265
 
276
266
  }
277
267
 
@@ -279,7 +269,7 @@ class InterleavedBuffer {
279
269
 
280
270
  const json = {
281
271
  uuid: this.uuid,
282
- buffer: this.array.buffer._uuid,
272
+ buffer: key,
283
273
  type: this.array.constructor.name,
284
274
  stride: this.stride
285
275
  };
@@ -292,4 +282,24 @@ class InterleavedBuffer {
292
282
 
293
283
  }
294
284
 
285
+ // Returns the key under which the data of the given typed array is shared when cloning or serializing.
286
+ // Interleaved buffers can be views at different offsets into the same array buffer (e.g. the interleaved
287
+ // accessors of a glTF buffer view), so only views over the same range share their data.
288
+
289
+ function getArrayKey( array ) {
290
+
291
+ // generate UUID for array buffer if necessary
292
+
293
+ if ( array.buffer._uuid === undefined ) {
294
+
295
+ array.buffer._uuid = generateUUID();
296
+
297
+ }
298
+
299
+ if ( array.byteOffset === 0 && array.byteLength === array.buffer.byteLength ) return array.buffer._uuid;
300
+
301
+ return array.buffer._uuid + ':' + array.byteOffset + ':' + array.byteLength;
302
+
303
+ }
304
+
295
305
  export { InterleavedBuffer };
@@ -1,6 +1,6 @@
1
1
  import { Vector3 } from '../math/Vector3.js';
2
2
  import { BufferAttribute } from './BufferAttribute.js';
3
- import { denormalize, normalize } from '../math/MathUtils.js';
3
+ import { denormalize, normalize, getNormalizationScale } from '../math/MathUtils.js';
4
4
  import { log } from '../utils.js';
5
5
 
6
6
  const _vector = /*@__PURE__*/ new Vector3();
@@ -66,6 +66,14 @@ class InterleavedBufferAttribute {
66
66
  */
67
67
  this.normalized = normalized;
68
68
 
69
+ /**
70
+ * Cached normalization factor, see {@link MathUtils#getNormalizationScale}.
71
+ *
72
+ * @private
73
+ * @type {number|undefined}
74
+ */
75
+ this._normalizationScale = interleavedBuffer !== undefined ? getNormalizationScale( interleavedBuffer.array ) : undefined;
76
+
69
77
  }
70
78
 
71
79
  /**
@@ -185,7 +193,7 @@ class InterleavedBufferAttribute {
185
193
 
186
194
  let value = this.array[ index * this.data.stride + this.offset + component ];
187
195
 
188
- if ( this.normalized ) value = denormalize( value, this.array );
196
+ if ( this.normalized ) value = this._denormalize( value );
189
197
 
190
198
  return value;
191
199
 
@@ -201,7 +209,7 @@ class InterleavedBufferAttribute {
201
209
  */
202
210
  setComponent( index, component, value ) {
203
211
 
204
- if ( this.normalized ) value = normalize( value, this.array );
212
+ if ( this.normalized ) value = this._normalize( value );
205
213
 
206
214
  this.data.array[ index * this.data.stride + this.offset + component ] = value;
207
215
 
@@ -218,7 +226,7 @@ class InterleavedBufferAttribute {
218
226
  */
219
227
  setX( index, x ) {
220
228
 
221
- if ( this.normalized ) x = normalize( x, this.array );
229
+ if ( this.normalized ) x = this._normalize( x );
222
230
 
223
231
  this.data.array[ index * this.data.stride + this.offset ] = x;
224
232
 
@@ -235,7 +243,7 @@ class InterleavedBufferAttribute {
235
243
  */
236
244
  setY( index, y ) {
237
245
 
238
- if ( this.normalized ) y = normalize( y, this.array );
246
+ if ( this.normalized ) y = this._normalize( y );
239
247
 
240
248
  this.data.array[ index * this.data.stride + this.offset + 1 ] = y;
241
249
 
@@ -252,7 +260,7 @@ class InterleavedBufferAttribute {
252
260
  */
253
261
  setZ( index, z ) {
254
262
 
255
- if ( this.normalized ) z = normalize( z, this.array );
263
+ if ( this.normalized ) z = this._normalize( z );
256
264
 
257
265
  this.data.array[ index * this.data.stride + this.offset + 2 ] = z;
258
266
 
@@ -269,7 +277,7 @@ class InterleavedBufferAttribute {
269
277
  */
270
278
  setW( index, w ) {
271
279
 
272
- if ( this.normalized ) w = normalize( w, this.array );
280
+ if ( this.normalized ) w = this._normalize( w );
273
281
 
274
282
  this.data.array[ index * this.data.stride + this.offset + 3 ] = w;
275
283
 
@@ -287,7 +295,7 @@ class InterleavedBufferAttribute {
287
295
 
288
296
  let x = this.data.array[ index * this.data.stride + this.offset ];
289
297
 
290
- if ( this.normalized ) x = denormalize( x, this.array );
298
+ if ( this.normalized ) x = this._denormalize( x );
291
299
 
292
300
  return x;
293
301
 
@@ -303,7 +311,7 @@ class InterleavedBufferAttribute {
303
311
 
304
312
  let y = this.data.array[ index * this.data.stride + this.offset + 1 ];
305
313
 
306
- if ( this.normalized ) y = denormalize( y, this.array );
314
+ if ( this.normalized ) y = this._denormalize( y );
307
315
 
308
316
  return y;
309
317
 
@@ -319,7 +327,7 @@ class InterleavedBufferAttribute {
319
327
 
320
328
  let z = this.data.array[ index * this.data.stride + this.offset + 2 ];
321
329
 
322
- if ( this.normalized ) z = denormalize( z, this.array );
330
+ if ( this.normalized ) z = this._denormalize( z );
323
331
 
324
332
  return z;
325
333
 
@@ -335,7 +343,7 @@ class InterleavedBufferAttribute {
335
343
 
336
344
  let w = this.data.array[ index * this.data.stride + this.offset + 3 ];
337
345
 
338
- if ( this.normalized ) w = denormalize( w, this.array );
346
+ if ( this.normalized ) w = this._denormalize( w );
339
347
 
340
348
  return w;
341
349
 
@@ -355,8 +363,8 @@ class InterleavedBufferAttribute {
355
363
 
356
364
  if ( this.normalized ) {
357
365
 
358
- x = normalize( x, this.array );
359
- y = normalize( y, this.array );
366
+ x = this._normalize( x );
367
+ y = this._normalize( y );
360
368
 
361
369
  }
362
370
 
@@ -382,9 +390,9 @@ class InterleavedBufferAttribute {
382
390
 
383
391
  if ( this.normalized ) {
384
392
 
385
- x = normalize( x, this.array );
386
- y = normalize( y, this.array );
387
- z = normalize( z, this.array );
393
+ x = this._normalize( x );
394
+ y = this._normalize( y );
395
+ z = this._normalize( z );
388
396
 
389
397
  }
390
398
 
@@ -412,10 +420,10 @@ class InterleavedBufferAttribute {
412
420
 
413
421
  if ( this.normalized ) {
414
422
 
415
- x = normalize( x, this.array );
416
- y = normalize( y, this.array );
417
- z = normalize( z, this.array );
418
- w = normalize( w, this.array );
423
+ x = this._normalize( x );
424
+ y = this._normalize( y );
425
+ z = this._normalize( z );
426
+ w = this._normalize( w );
419
427
 
420
428
  }
421
429
 
@@ -543,6 +551,32 @@ class InterleavedBufferAttribute {
543
551
 
544
552
  }
545
553
 
554
+ /**
555
+ * Denormalizes the value using cached normalization factor.
556
+ *
557
+ * @private
558
+ */
559
+ _denormalize( value ) {
560
+
561
+ const scale = this._normalizationScale;
562
+
563
+ return scale !== undefined ? Math.max( value / scale, - 1.0 ) : denormalize( value, this.data.array );
564
+
565
+ }
566
+
567
+ /**
568
+ * Normalizes the value using cached normalization factor.
569
+ *
570
+ * @private
571
+ */
572
+ _normalize( value ) {
573
+
574
+ const scale = this._normalizationScale;
575
+
576
+ return scale !== undefined ? Math.round( value * scale ) : normalize( value, this.data.array );
577
+
578
+ }
579
+
546
580
  }
547
581
 
548
582