super-three 0.157.1 → 0.160.0

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 (303) hide show
  1. package/README.md +6 -4
  2. package/build/three.cjs +3100 -1537
  3. package/build/three.js +3100 -1537
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +3093 -1538
  6. package/build/three.module.min.js +1 -1
  7. package/examples/jsm/Addons.js +291 -0
  8. package/examples/jsm/controls/FlyControls.js +26 -0
  9. package/examples/jsm/controls/OrbitControls.js +62 -41
  10. package/examples/jsm/controls/TransformControls.js +27 -11
  11. package/examples/jsm/csm/CSMShader.js +53 -48
  12. package/examples/jsm/exporters/GLTFExporter.js +151 -3
  13. package/examples/jsm/exporters/USDZExporter.js +27 -19
  14. package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
  15. package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
  16. package/examples/jsm/helpers/TextureHelper.js +237 -0
  17. package/examples/jsm/interactive/HTMLMesh.js +9 -2
  18. package/examples/jsm/libs/lottie_canvas.module.js +6 -1
  19. package/examples/jsm/libs/opentype.module.js +13 -75
  20. package/examples/jsm/libs/surfaceNet.js +201 -0
  21. package/examples/jsm/lines/LineMaterial.js +16 -33
  22. package/examples/jsm/loaders/ColladaLoader.js +0 -6
  23. package/examples/jsm/loaders/DRACOLoader.js +4 -3
  24. package/examples/jsm/loaders/FBXLoader.js +294 -124
  25. package/examples/jsm/loaders/GLTFLoader.js +83 -6
  26. package/examples/jsm/loaders/LUTImageLoader.js +162 -0
  27. package/examples/jsm/loaders/MaterialXLoader.js +73 -54
  28. package/examples/jsm/loaders/NRRDLoader.js +0 -13
  29. package/examples/jsm/loaders/SVGLoader.js +4 -4
  30. package/examples/jsm/loaders/USDZLoader.js +3 -17
  31. package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
  32. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  33. package/examples/jsm/math/Capsule.js +0 -55
  34. package/examples/jsm/math/Octree.js +85 -7
  35. package/examples/jsm/misc/Timer.js +119 -0
  36. package/examples/jsm/misc/TubePainter.js +3 -6
  37. package/examples/jsm/modifiers/CurveModifier.js +20 -2
  38. package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
  39. package/examples/jsm/modifiers/TessellateModifier.js +3 -3
  40. package/examples/jsm/nodes/Nodes.js +16 -12
  41. package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
  42. package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
  43. package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
  44. package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
  45. package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
  46. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
  47. package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
  48. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
  49. package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
  50. package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
  51. package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
  52. package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
  53. package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
  54. package/examples/jsm/nodes/accessors/TextureNode.js +123 -37
  55. package/examples/jsm/nodes/code/CodeNode.js +3 -3
  56. package/examples/jsm/nodes/code/FunctionNode.js +1 -1
  57. package/examples/jsm/nodes/core/AssignNode.js +72 -0
  58. package/examples/jsm/nodes/core/AttributeNode.js +7 -1
  59. package/examples/jsm/nodes/core/CacheNode.js +4 -1
  60. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  61. package/examples/jsm/nodes/core/LightingModel.js +3 -1
  62. package/examples/jsm/nodes/core/Node.js +13 -15
  63. package/examples/jsm/nodes/core/NodeBuilder.js +209 -42
  64. package/examples/jsm/nodes/core/NodeFrame.js +10 -8
  65. package/examples/jsm/nodes/core/NodeUniform.js +12 -0
  66. package/examples/jsm/nodes/core/NodeUtils.js +7 -9
  67. package/examples/jsm/nodes/core/OutputStructNode.js +4 -4
  68. package/examples/jsm/nodes/core/ParameterNode.js +33 -0
  69. package/examples/jsm/nodes/core/PropertyNode.js +15 -6
  70. package/examples/jsm/nodes/core/StackNode.js +7 -17
  71. package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
  72. package/examples/jsm/nodes/core/TempNode.js +1 -1
  73. package/examples/jsm/nodes/core/UniformGroup.js +13 -0
  74. package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
  75. package/examples/jsm/nodes/core/UniformNode.js +17 -0
  76. package/examples/jsm/nodes/core/VarNode.js +7 -34
  77. package/examples/jsm/nodes/core/VaryingNode.js +3 -7
  78. package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
  79. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
  80. package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
  81. package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
  82. package/examples/jsm/nodes/display/PassNode.js +182 -0
  83. package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
  84. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
  85. package/examples/jsm/nodes/display/ViewportNode.js +17 -10
  86. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
  87. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
  88. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
  89. package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
  90. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
  91. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
  92. package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
  93. package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
  94. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +55 -6
  95. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
  96. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -18
  97. package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
  98. package/examples/jsm/nodes/lighting/LightsNode.js +80 -20
  99. package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
  100. package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
  101. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
  102. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +76 -77
  103. package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
  104. package/examples/jsm/nodes/materials/Materials.js +1 -0
  105. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
  106. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +3 -3
  107. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
  108. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -20
  109. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
  110. package/examples/jsm/nodes/materials/NodeMaterial.js +82 -60
  111. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
  112. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  113. package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
  114. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
  115. package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
  116. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
  117. package/examples/jsm/nodes/math/MathNode.js +2 -0
  118. package/examples/jsm/nodes/math/OperatorNode.js +24 -27
  119. package/examples/jsm/nodes/shadernode/ShaderNode.js +158 -10
  120. package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
  121. package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
  122. package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
  123. package/examples/jsm/nodes/utils/JoinNode.js +11 -1
  124. package/examples/jsm/nodes/utils/LoopNode.js +36 -24
  125. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  126. package/examples/jsm/nodes/utils/SplitNode.js +10 -2
  127. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
  128. package/examples/jsm/objects/InstancedPoints.js +21 -0
  129. package/examples/jsm/objects/Lensflare.js +20 -0
  130. package/examples/jsm/objects/QuadMesh.js +60 -0
  131. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
  132. package/examples/jsm/objects/Refractor.js +3 -0
  133. package/examples/jsm/objects/Sky.js +5 -3
  134. package/examples/jsm/objects/Water.js +5 -2
  135. package/examples/jsm/objects/Water2.js +3 -0
  136. package/examples/jsm/physics/AmmoPhysics.js +21 -0
  137. package/examples/jsm/physics/RapierPhysics.js +21 -0
  138. package/examples/jsm/postprocessing/BokehPass.js +3 -2
  139. package/examples/jsm/postprocessing/GTAOPass.js +572 -0
  140. package/examples/jsm/postprocessing/LUTPass.js +2 -1
  141. package/examples/jsm/postprocessing/OutputPass.js +3 -0
  142. package/examples/jsm/postprocessing/Pass.js +14 -3
  143. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  144. package/examples/jsm/postprocessing/SMAAPass.js +0 -2
  145. package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
  146. package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
  147. package/examples/jsm/renderers/SVGRenderer.js +9 -6
  148. package/examples/jsm/renderers/common/Animation.js +10 -21
  149. package/examples/jsm/renderers/common/Backend.js +19 -3
  150. package/examples/jsm/renderers/common/Background.js +20 -22
  151. package/examples/jsm/renderers/common/Bindings.js +31 -22
  152. package/examples/jsm/renderers/common/ChainMap.js +3 -3
  153. package/examples/jsm/renderers/common/Color4.js +37 -0
  154. package/examples/jsm/renderers/common/Geometries.js +4 -4
  155. package/examples/jsm/renderers/common/Info.js +12 -2
  156. package/examples/jsm/renderers/common/Pipelines.js +3 -51
  157. package/examples/jsm/renderers/common/PostProcessing.js +25 -0
  158. package/examples/jsm/renderers/common/RenderContext.js +1 -1
  159. package/examples/jsm/renderers/common/RenderContexts.js +1 -1
  160. package/examples/jsm/renderers/common/RenderObject.js +21 -2
  161. package/examples/jsm/renderers/common/RenderObjects.js +5 -3
  162. package/examples/jsm/renderers/common/Renderer.js +137 -37
  163. package/examples/jsm/renderers/common/StorageTexture.js +1 -0
  164. package/examples/jsm/renderers/common/Textures.js +8 -37
  165. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
  166. package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
  167. package/examples/jsm/renderers/common/nodes/Nodes.js +121 -19
  168. package/examples/jsm/renderers/webgl/WebGLBackend.js +366 -67
  169. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +183 -38
  170. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +92 -5
  171. package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
  172. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
  173. package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
  174. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
  175. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
  176. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  177. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
  178. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
  179. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +188 -137
  180. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
  181. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +241 -90
  182. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
  183. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
  184. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
  185. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
  186. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
  187. package/examples/jsm/shaders/AfterimageShader.js +2 -0
  188. package/examples/jsm/shaders/BasicShader.js +2 -0
  189. package/examples/jsm/shaders/BlendShader.js +2 -0
  190. package/examples/jsm/shaders/BokehShader.js +2 -0
  191. package/examples/jsm/shaders/BokehShader2.js +4 -0
  192. package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
  193. package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
  194. package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
  195. package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
  196. package/examples/jsm/shaders/FXAAShader.js +135 -133
  197. package/examples/jsm/shaders/FilmShader.js +1 -1
  198. package/examples/jsm/shaders/FocusShader.js +2 -0
  199. package/examples/jsm/shaders/FreiChenShader.js +2 -0
  200. package/examples/jsm/shaders/GTAOShader.js +424 -0
  201. package/examples/jsm/shaders/GodRaysShader.js +8 -0
  202. package/examples/jsm/shaders/HalftoneShader.js +2 -0
  203. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
  204. package/examples/jsm/shaders/HueSaturationShader.js +2 -0
  205. package/examples/jsm/shaders/KaleidoShader.js +2 -0
  206. package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
  207. package/examples/jsm/shaders/LuminosityShader.js +2 -0
  208. package/examples/jsm/shaders/MMDToonShader.js +2 -0
  209. package/examples/jsm/shaders/MirrorShader.js +2 -0
  210. package/examples/jsm/shaders/NormalMapShader.js +2 -0
  211. package/examples/jsm/shaders/OutputShader.js +8 -5
  212. package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
  213. package/examples/jsm/shaders/SAOShader.js +7 -3
  214. package/examples/jsm/shaders/SMAAShader.js +6 -0
  215. package/examples/jsm/shaders/SSAOShader.js +8 -3
  216. package/examples/jsm/shaders/SSRShader.js +6 -0
  217. package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
  218. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
  219. package/examples/jsm/shaders/TechnicolorShader.js +2 -0
  220. package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
  221. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
  222. package/examples/jsm/shaders/VelocityShader.js +2 -0
  223. package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
  224. package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
  225. package/examples/jsm/transpiler/AST.js +270 -0
  226. package/examples/jsm/transpiler/GLSLDecoder.js +941 -0
  227. package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
  228. package/examples/jsm/transpiler/TSLEncoder.js +715 -0
  229. package/examples/jsm/transpiler/Transpiler.js +18 -0
  230. package/examples/jsm/utils/SortUtils.js +158 -0
  231. package/examples/jsm/utils/TextureUtils.js +33 -21
  232. package/examples/jsm/webxr/ARButton.js +14 -0
  233. package/examples/jsm/webxr/VRButton.js +24 -9
  234. package/examples/jsm/webxr/XRButton.js +27 -11
  235. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  236. package/package.json +8 -6
  237. package/src/Three.js +1 -0
  238. package/src/constants.js +8 -1
  239. package/src/core/BufferAttribute.js +21 -2
  240. package/src/core/InterleavedBuffer.js +21 -1
  241. package/src/core/Object3D.js +60 -12
  242. package/src/core/UniformsGroup.js +7 -1
  243. package/src/extras/PMREMGenerator.js +7 -1
  244. package/src/extras/curves/LineCurve3.js +4 -0
  245. package/src/loaders/AudioLoader.js +1 -1
  246. package/src/loaders/BufferGeometryLoader.js +0 -7
  247. package/src/loaders/ImageBitmapLoader.js +25 -1
  248. package/src/loaders/MaterialLoader.js +10 -2
  249. package/src/loaders/ObjectLoader.js +49 -0
  250. package/src/materials/Material.js +27 -13
  251. package/src/materials/ShaderMaterial.js +2 -1
  252. package/src/math/Box3.js +35 -18
  253. package/src/math/ColorManagement.js +0 -16
  254. package/src/math/Quaternion.js +5 -4
  255. package/src/math/Sphere.js +2 -0
  256. package/src/math/Triangle.js +17 -5
  257. package/src/math/Vector3.js +11 -12
  258. package/src/objects/BatchedMesh.js +1020 -0
  259. package/src/objects/Skeleton.js +1 -3
  260. package/src/objects/SkinnedMesh.js +6 -7
  261. package/src/renderers/WebGL3DRenderTarget.js +2 -2
  262. package/src/renderers/WebGLArrayRenderTarget.js +2 -2
  263. package/src/renderers/WebGLRenderer.js +165 -43
  264. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
  265. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
  266. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
  267. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
  268. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
  269. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
  270. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
  271. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
  272. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
  273. package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
  274. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
  275. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
  276. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
  277. package/src/renderers/shaders/ShaderChunk.js +4 -0
  278. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  279. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  280. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
  281. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
  282. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
  283. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
  284. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
  285. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -2
  286. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
  287. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
  288. package/src/renderers/webgl/WebGLAttributes.js +39 -5
  289. package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
  290. package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
  291. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  292. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
  293. package/src/renderers/webgl/WebGLLights.js +11 -2
  294. package/src/renderers/webgl/WebGLProgram.js +100 -51
  295. package/src/renderers/webgl/WebGLPrograms.js +8 -0
  296. package/src/renderers/webgl/WebGLShadowMap.js +35 -0
  297. package/src/renderers/webgl/WebGLState.js +25 -4
  298. package/src/renderers/webgl/WebGLTextures.js +7 -11
  299. package/src/renderers/webgl/WebGLUniforms.js +11 -1
  300. package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
  301. package/src/renderers/webxr/WebXRManager.js +16 -0
  302. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
  303. package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
@@ -0,0 +1,158 @@
1
+ // Hybrid radix sort from
2
+ // - https://gist.github.com/sciecode/93ed864dd77c5c8803c6a86698d68dab
3
+ // - https://github.com/mrdoob/three.js/pull/27202#issuecomment-1817640271
4
+ const POWER = 3;
5
+ const BIT_MAX = 32;
6
+ const BIN_BITS = 1 << POWER;
7
+ const BIN_SIZE = 1 << BIN_BITS;
8
+ const BIN_MAX = BIN_SIZE - 1;
9
+ const ITERATIONS = BIT_MAX / BIN_BITS;
10
+
11
+ const bins = new Array( ITERATIONS );
12
+ const bins_buffer = new ArrayBuffer( ( ITERATIONS + 1 ) * BIN_SIZE * 4 );
13
+
14
+ let c = 0;
15
+ for ( let i = 0; i < ( ITERATIONS + 1 ); i ++ ) {
16
+ bins[ i ] = new Uint32Array( bins_buffer, c, BIN_SIZE );
17
+ c += BIN_SIZE * 4;
18
+ }
19
+
20
+ const defaultGet = ( el ) => el;
21
+
22
+ export const radixSort = ( arr, opt ) => {
23
+
24
+ const len = arr.length;
25
+
26
+ const options = opt || {};
27
+ const aux = options.aux || new arr.constructor( len );
28
+ const get = options.get || defaultGet;
29
+
30
+ const data = [ arr, aux ];
31
+
32
+ let compare, accumulate, recurse;
33
+
34
+ if ( options.reversed ) {
35
+
36
+ compare = ( a, b ) => a < b;
37
+ accumulate = ( bin ) => {
38
+
39
+ for ( let j = BIN_SIZE - 2; j >= 0; j -- )
40
+ bin[ j ] += bin[ j + 1 ];
41
+
42
+ };
43
+
44
+ recurse = ( cache, depth, start ) => {
45
+
46
+ let prev = 0;
47
+ for ( let j = BIN_MAX; j >= 0; j -- ) {
48
+
49
+ const cur = cache[ j ], diff = cur - prev;
50
+ if ( diff != 0 ) {
51
+
52
+ if ( diff > 32 )
53
+ radixSortBlock( depth + 1, start + prev, diff );
54
+ else
55
+ insertionSortBlock( depth + 1, start + prev, diff );
56
+ prev = cur;
57
+
58
+ }
59
+
60
+ }
61
+
62
+ };
63
+
64
+ } else {
65
+
66
+ compare = ( a, b ) => a > b;
67
+ accumulate = ( bin ) => {
68
+
69
+ for ( let j = 1; j < BIN_SIZE; j ++ )
70
+ bin[ j ] += bin[ j - 1 ];
71
+
72
+ };
73
+
74
+ recurse = ( cache, depth, start ) => {
75
+
76
+ let prev = 0;
77
+ for ( let j = 0; j < BIN_SIZE; j ++ ) {
78
+
79
+ const cur = cache[ j ], diff = cur - prev;
80
+ if ( diff != 0 ) {
81
+
82
+ if ( diff > 32 )
83
+ radixSortBlock( depth + 1, start + prev, diff );
84
+ else
85
+ insertionSortBlock( depth + 1, start + prev, diff );
86
+ prev = cur;
87
+
88
+ }
89
+
90
+ }
91
+
92
+ };
93
+
94
+ }
95
+
96
+ const insertionSortBlock = ( depth, start, len ) => {
97
+
98
+ const a = data[ depth & 1 ];
99
+ const b = data[ ( depth + 1 ) & 1 ];
100
+
101
+ for ( let j = start + 1; j < start + len; j ++ ) {
102
+
103
+ const p = a[ j ], t = get( p );
104
+ let i = j;
105
+ while ( i > 0 ) {
106
+
107
+ if ( compare( get( a[ i - 1 ] ), t ) )
108
+ a[ i ] = a[ -- i ];
109
+ else
110
+ break;
111
+
112
+ }
113
+
114
+ a[ i ] = p;
115
+
116
+ }
117
+
118
+ if ( ( depth & 1 ) == 1 ) {
119
+
120
+ for ( let i = start; i < start + len; i ++ )
121
+ b[ i ] = a[ i ];
122
+
123
+ }
124
+
125
+ };
126
+
127
+ const radixSortBlock = ( depth, start, len ) => {
128
+
129
+ const a = data[ depth & 1 ];
130
+ const b = data[ ( depth + 1 ) & 1 ];
131
+
132
+ const shift = ( 3 - depth ) << POWER;
133
+ const end = start + len;
134
+
135
+ const cache = bins[ depth ];
136
+ const bin = bins[ depth + 1 ];
137
+
138
+ bin.fill( 0 );
139
+
140
+ for ( let j = start; j < end; j ++ )
141
+ bin[ ( get( a[ j ] ) >> shift ) & BIN_MAX ] ++;
142
+
143
+ accumulate( bin );
144
+
145
+ cache.set( bin );
146
+
147
+ for ( let j = end - 1; j >= start; j -- )
148
+ b[ start + -- bin[ ( get( a[ j ] ) >> shift ) & BIN_MAX ] ] = a[ j ];
149
+
150
+ if ( depth == ITERATIONS - 1 ) return;
151
+
152
+ recurse( cache, depth, start );
153
+
154
+ };
155
+
156
+ radixSortBlock( 0, 0, len );
157
+
158
+ };
@@ -6,7 +6,7 @@ import {
6
6
  PerspectiveCamera,
7
7
  Scene,
8
8
  WebGLRenderer,
9
- Texture,
9
+ CanvasTexture,
10
10
  SRGBColorSpace
11
11
  } from 'three';
12
12
 
@@ -21,24 +21,24 @@ export function decompress( texture, maxTextureSize = Infinity, renderer = null
21
21
  if ( ! fullscreenQuadMaterial ) fullscreenQuadMaterial = new ShaderMaterial( {
22
22
  uniforms: { blitTexture: new Uniform( texture ) },
23
23
  vertexShader: `
24
- varying vec2 vUv;
25
- void main(){
26
- vUv = uv;
27
- gl_Position = vec4(position.xy * 1.0,0.,.999999);
28
- }`,
24
+ varying vec2 vUv;
25
+ void main(){
26
+ vUv = uv;
27
+ gl_Position = vec4(position.xy * 1.0,0.,.999999);
28
+ }`,
29
29
  fragmentShader: `
30
- uniform sampler2D blitTexture;
31
- varying vec2 vUv;
32
-
33
- void main(){
34
- gl_FragColor = vec4(vUv.xy, 0, 1);
35
-
36
- #ifdef IS_SRGB
37
- gl_FragColor = LinearTosRGB( texture2D( blitTexture, vUv) );
38
- #else
39
- gl_FragColor = texture2D( blitTexture, vUv);
40
- #endif
41
- }`
30
+ uniform sampler2D blitTexture;
31
+ varying vec2 vUv;
32
+
33
+ void main(){
34
+ gl_FragColor = vec4(vUv.xy, 0, 1);
35
+
36
+ #ifdef IS_SRGB
37
+ gl_FragColor = LinearTosRGB( texture2D( blitTexture, vUv) );
38
+ #else
39
+ gl_FragColor = texture2D( blitTexture, vUv);
40
+ #endif
41
+ }`
42
42
  } );
43
43
 
44
44
  fullscreenQuadMaterial.uniforms.blitTexture.value = texture;
@@ -56,17 +56,28 @@ export function decompress( texture, maxTextureSize = Infinity, renderer = null
56
56
  const _scene = new Scene();
57
57
  _scene.add( fullscreenQuad );
58
58
 
59
- if ( ! renderer ) {
59
+ if ( renderer === null ) {
60
60
 
61
61
  renderer = _renderer = new WebGLRenderer( { antialias: false } );
62
62
 
63
63
  }
64
64
 
65
- renderer.setSize( Math.min( texture.image.width, maxTextureSize ), Math.min( texture.image.height, maxTextureSize ) );
65
+ const width = Math.min( texture.image.width, maxTextureSize );
66
+ const height = Math.min( texture.image.height, maxTextureSize );
67
+
68
+ renderer.setSize( width, height );
66
69
  renderer.clear();
67
70
  renderer.render( _scene, _camera );
68
71
 
69
- const readableTexture = new Texture( renderer.domElement );
72
+ const canvas = document.createElement( 'canvas' );
73
+ const context = canvas.getContext( '2d' );
74
+
75
+ canvas.width = width;
76
+ canvas.height = height;
77
+
78
+ context.drawImage( renderer.domElement, 0, 0, width, height );
79
+
80
+ const readableTexture = new CanvasTexture( canvas );
70
81
 
71
82
  readableTexture.minFilter = texture.minFilter;
72
83
  readableTexture.magFilter = texture.magFilter;
@@ -76,6 +87,7 @@ export function decompress( texture, maxTextureSize = Infinity, renderer = null
76
87
 
77
88
  if ( _renderer ) {
78
89
 
90
+ _renderer.forceContextLoss();
79
91
  _renderer.dispose();
80
92
  _renderer = null;
81
93
 
@@ -104,10 +104,24 @@ class ARButton {
104
104
 
105
105
  currentSession.end();
106
106
 
107
+ if ( navigator.xr.offerSession !== undefined ) {
108
+
109
+ navigator.xr.offerSession( 'immersive-ar', sessionInit )
110
+ .then( onSessionStarted );
111
+
112
+ }
113
+
107
114
  }
108
115
 
109
116
  };
110
117
 
118
+ if ( navigator.xr.offerSession !== undefined ) {
119
+
120
+ navigator.xr.offerSession( 'immersive-ar', sessionInit )
121
+ .then( onSessionStarted );
122
+
123
+ }
124
+
111
125
  }
112
126
 
113
127
  function disableButton() {
@@ -39,6 +39,15 @@ class VRButton {
39
39
 
40
40
  button.textContent = 'ENTER VR';
41
41
 
42
+ // WebXR's requestReferenceSpace only works if the corresponding feature
43
+ // was requested at session creation time. For simplicity, just ask for
44
+ // the interesting ones as optional features, but be aware that the
45
+ // requestReferenceSpace call will fail if it turns out to be unavailable.
46
+ // ('local' is always available for immersive sessions and doesn't need to
47
+ // be requested separately.)
48
+
49
+ const sessionInit = { optionalFeatures: [ 'local-floor', 'bounded-floor', 'hand-tracking', 'layers' ] };
50
+
42
51
  button.onmouseenter = function () {
43
52
 
44
53
  button.style.opacity = '1.0';
@@ -55,24 +64,30 @@ class VRButton {
55
64
 
56
65
  if ( currentSession === null ) {
57
66
 
58
- // WebXR's requestReferenceSpace only works if the corresponding feature
59
- // was requested at session creation time. For simplicity, just ask for
60
- // the interesting ones as optional features, but be aware that the
61
- // requestReferenceSpace call will fail if it turns out to be unavailable.
62
- // ('local' is always available for immersive sessions and doesn't need to
63
- // be requested separately.)
64
-
65
- const sessionInit = { optionalFeatures: [ 'local-floor', 'bounded-floor', 'hand-tracking', 'layers' ] };
66
67
  navigator.xr.requestSession( 'immersive-vr', sessionInit ).then( onSessionStarted );
67
68
 
68
69
  } else {
69
70
 
70
71
  currentSession.end();
71
72
 
73
+ if ( navigator.xr.offerSession !== undefined ) {
74
+
75
+ navigator.xr.offerSession( 'immersive-vr', sessionInit )
76
+ .then( onSessionStarted );
77
+
78
+ }
79
+
72
80
  }
73
81
 
74
82
  };
75
83
 
84
+ if ( navigator.xr.offerSession !== undefined ) {
85
+
86
+ navigator.xr.offerSession( 'immersive-vr', sessionInit )
87
+ .then( onSessionStarted );
88
+
89
+ }
90
+
76
91
  }
77
92
 
78
93
  function disableButton() {
@@ -176,7 +191,7 @@ class VRButton {
176
191
 
177
192
  static registerSessionGrantedListener() {
178
193
 
179
- if ( 'xr' in navigator ) {
194
+ if ( typeof navigator !== 'undefined' && 'xr' in navigator ) {
180
195
 
181
196
  // WebXRViewer (based on Firefox) has a bug where addEventListener
182
197
  // throws a silent exception and aborts execution entirely.
@@ -1,6 +1,6 @@
1
1
  class XRButton {
2
2
 
3
- static createButton( renderer ) {
3
+ static createButton( renderer, sessionInit = {} ) {
4
4
 
5
5
  const button = document.createElement( 'button' );
6
6
 
@@ -40,6 +40,17 @@ class XRButton {
40
40
 
41
41
  button.textContent = 'START XR';
42
42
 
43
+ const sessionOptions = {
44
+ ...sessionInit,
45
+ optionalFeatures: [
46
+ 'local-floor',
47
+ 'bounded-floor',
48
+ 'hand-tracking',
49
+ 'layers',
50
+ ...( sessionInit.optionalFeatures || [] )
51
+ ],
52
+ };
53
+
43
54
  button.onmouseenter = function () {
44
55
 
45
56
  button.style.opacity = '1.0';
@@ -56,26 +67,31 @@ class XRButton {
56
67
 
57
68
  if ( currentSession === null ) {
58
69
 
59
- const sessionInit = {
60
- optionalFeatures: [
61
- 'local-floor',
62
- 'bounded-floor',
63
- 'hand-tracking',
64
- 'layers'
65
- ]
66
- };
67
-
68
- navigator.xr.requestSession( mode, sessionInit )
70
+ navigator.xr.requestSession( mode, sessionOptions )
69
71
  .then( onSessionStarted );
70
72
 
71
73
  } else {
72
74
 
73
75
  currentSession.end();
74
76
 
77
+ if ( navigator.xr.offerSession !== undefined ) {
78
+
79
+ navigator.xr.offerSession( mode, sessionOptions )
80
+ .then( onSessionStarted );
81
+
82
+ }
83
+
75
84
  }
76
85
 
77
86
  };
78
87
 
88
+ if ( navigator.xr.offerSession !== undefined ) {
89
+
90
+ navigator.xr.offerSession( mode, sessionOptions )
91
+ .then( onSessionStarted );
92
+
93
+ }
94
+
79
95
  }
80
96
 
81
97
  function disableButton() {
@@ -147,7 +147,7 @@ export class XREstimatedLight extends Group {
147
147
  this.directionalLight.intensity = 0;
148
148
  this.add( this.directionalLight );
149
149
 
150
- // Will be set to a cube map in the SessionLightProbe is environment estimation is
150
+ // Will be set to a cube map in the SessionLightProbe if environment estimation is
151
151
  // available and requested.
152
152
  this.environment = null;
153
153
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "super-three",
3
- "version": "0.157.1",
3
+ "version": "0.160.0",
4
4
  "description": "JavaScript 3D library",
5
5
  "type": "module",
6
6
  "main": "./build/three.js",
@@ -12,6 +12,7 @@
12
12
  },
13
13
  "./examples/fonts/*": "./examples/fonts/*",
14
14
  "./examples/jsm/*": "./examples/jsm/*",
15
+ "./addons": "./examples/jsm/Addons.js",
15
16
  "./addons/*": "./examples/jsm/*",
16
17
  "./src/*": "./src/*",
17
18
  "./nodes": "./examples/jsm/nodes/Nodes.js"
@@ -20,7 +21,7 @@
20
21
  "type": "git",
21
22
  "url": "supermedium/three.js"
22
23
  },
23
- "sideEffects": false,
24
+ "sideEffects": ["./examples/jsm/nodes/**/*"],
24
25
  "files": [
25
26
  "build",
26
27
  "examples/jsm",
@@ -43,7 +44,7 @@
43
44
  "test": "npm run lint && npm run test-unit",
44
45
  "build": "rollup -c utils/build/rollup.config.js",
45
46
  "build-module": "rollup -c utils/build/rollup.config.js --configOnlyModule",
46
- "dev": "concurrently --names \"ROLLUP,HTTP\" -c \"bgBlue.bold,bgGreen.bold\" \"rollup -c utils/build/rollup.config.js -w -m inline\" \"servez -p 8080 --ssl\"",
47
+ "dev": "concurrently --names \"ROLLUP,HTTP\" -c \"bgBlue.bold,bgGreen.bold\" \"rollup -c utils/build/rollup.config.js -w -m inline\" \"servez -p 8080\"",
47
48
  "lint-core": "eslint src",
48
49
  "lint-addons": "eslint examples/jsm --ext .js --ignore-pattern libs --ignore-pattern ifc",
49
50
  "lint-examples": "eslint examples --ext .html",
@@ -59,6 +60,7 @@
59
60
  "test-e2e": "node test/e2e/puppeteer.js",
60
61
  "test-e2e-cov": "node test/e2e/check-coverage.js",
61
62
  "test-treeshake": "rollup -c test/rollup.treeshake.config.js",
63
+ "test-circular-deps": "dpdm --no-warning --no-tree --exit-code circular:1 examples/jsm/nodes/Nodes.js",
62
64
  "make-screenshot": "node test/e2e/puppeteer.js --make"
63
65
  },
64
66
  "keywords": [
@@ -84,11 +86,11 @@
84
86
  },
85
87
  "homepage": "https://threejs.org/",
86
88
  "devDependencies": {
87
- "@puppeteer/browsers": "^1.4.1",
88
89
  "@rollup/plugin-node-resolve": "^15.0.1",
89
90
  "@rollup/plugin-terser": "^0.4.0",
90
91
  "chalk": "^5.2.0",
91
92
  "concurrently": "^8.0.1",
93
+ "dpdm": "^3.14.0",
92
94
  "eslint": "^8.37.0",
93
95
  "eslint-config-mdcs": "^5.0.0",
94
96
  "eslint-plugin-compat": "^4.1.2",
@@ -98,9 +100,9 @@
98
100
  "jimp": "^0.22.7",
99
101
  "magic-string": "^0.30.0",
100
102
  "pixelmatch": "^5.3.0",
101
- "puppeteer-core": "^19.8.1",
103
+ "puppeteer": "^21.5.1",
102
104
  "qunit": "^2.19.4",
103
- "rollup": "^3.20.2",
105
+ "rollup": "^4.6.0",
104
106
  "rollup-plugin-filesize": "^10.0.0",
105
107
  "rollup-plugin-visualizer": "^5.9.0",
106
108
  "servez": "^2.0.0"
package/src/Three.js CHANGED
@@ -21,6 +21,7 @@ export { Skeleton } from './objects/Skeleton.js';
21
21
  export { Bone } from './objects/Bone.js';
22
22
  export { Mesh } from './objects/Mesh.js';
23
23
  export { InstancedMesh } from './objects/InstancedMesh.js';
24
+ export { BatchedMesh } from './objects/BatchedMesh.js';
24
25
  export { LineSegments } from './objects/LineSegments.js';
25
26
  export { LineLoop } from './objects/LineLoop.js';
26
27
  export { Line } from './objects/Line.js';
package/src/constants.js CHANGED
@@ -1,4 +1,4 @@
1
- export const REVISION = '157';
1
+ export const REVISION = '160';
2
2
 
3
3
  export const MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };
4
4
  export const TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };
@@ -36,6 +36,10 @@ export const OneMinusDstAlphaFactor = 207;
36
36
  export const DstColorFactor = 208;
37
37
  export const OneMinusDstColorFactor = 209;
38
38
  export const SrcAlphaSaturateFactor = 210;
39
+ export const ConstantColorFactor = 211;
40
+ export const OneMinusConstantColorFactor = 212;
41
+ export const ConstantAlphaFactor = 213;
42
+ export const OneMinusConstantAlphaFactor = 214;
39
43
  export const NeverDepth = 0;
40
44
  export const AlwaysDepth = 1;
41
45
  export const LessDepth = 2;
@@ -53,6 +57,9 @@ export const ReinhardToneMapping = 2;
53
57
  export const CineonToneMapping = 3;
54
58
  export const ACESFilmicToneMapping = 4;
55
59
  export const CustomToneMapping = 5;
60
+ export const AgXToneMapping = 6;
61
+ export const AttachedBindMode = 'attached';
62
+ export const DetachedBindMode = 'detached';
56
63
 
57
64
  export const UVMapping = 300;
58
65
  export const CubeReflectionMapping = 301;
@@ -27,7 +27,8 @@ class BufferAttribute {
27
27
  this.normalized = normalized;
28
28
 
29
29
  this.usage = StaticDrawUsage;
30
- this.updateRange = { offset: 0, count: - 1 };
30
+ this._updateRange = { offset: 0, count: - 1 };
31
+ this.updateRanges = [];
31
32
  this.gpuType = FloatType;
32
33
 
33
34
  this.version = 0;
@@ -42,6 +43,13 @@ class BufferAttribute {
42
43
 
43
44
  }
44
45
 
46
+ get updateRange() {
47
+
48
+ console.warn( 'THREE.BufferAttribute: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead.' ); // @deprecated, r159
49
+ return this._updateRange;
50
+
51
+ }
52
+
45
53
  setUsage( value ) {
46
54
 
47
55
  this.usage = value;
@@ -50,6 +58,18 @@ class BufferAttribute {
50
58
 
51
59
  }
52
60
 
61
+ addUpdateRange( start, count ) {
62
+
63
+ this.updateRanges.push( { start, count } );
64
+
65
+ }
66
+
67
+ clearUpdateRanges() {
68
+
69
+ this.updateRanges.length = 0;
70
+
71
+ }
72
+
53
73
  copy( source ) {
54
74
 
55
75
  this.name = source.name;
@@ -360,7 +380,6 @@ class BufferAttribute {
360
380
 
361
381
  if ( this.name !== '' ) data.name = this.name;
362
382
  if ( this.usage !== StaticDrawUsage ) data.usage = this.usage;
363
- if ( this.updateRange.offset !== 0 || this.updateRange.count !== - 1 ) data.updateRange = this.updateRange;
364
383
 
365
384
  return data;
366
385
 
@@ -12,7 +12,8 @@ class InterleavedBuffer {
12
12
  this.count = array !== undefined ? array.length / stride : 0;
13
13
 
14
14
  this.usage = StaticDrawUsage;
15
- this.updateRange = { offset: 0, count: - 1 };
15
+ this._updateRange = { offset: 0, count: - 1 };
16
+ this.updateRanges = [];
16
17
 
17
18
  this.version = 0;
18
19
 
@@ -28,6 +29,13 @@ class InterleavedBuffer {
28
29
 
29
30
  }
30
31
 
32
+ get updateRange() {
33
+
34
+ console.warn( 'THREE.InterleavedBuffer: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead.' ); // @deprecated, r159
35
+ return this._updateRange;
36
+
37
+ }
38
+
31
39
  setUsage( value ) {
32
40
 
33
41
  this.usage = value;
@@ -36,6 +44,18 @@ class InterleavedBuffer {
36
44
 
37
45
  }
38
46
 
47
+ addUpdateRange( start, count ) {
48
+
49
+ this.updateRanges.push( { start, count } );
50
+
51
+ }
52
+
53
+ clearUpdateRanges() {
54
+
55
+ this.updateRanges.length = 0;
56
+
57
+ }
58
+
39
59
  copy( source ) {
40
60
 
41
61
  this.array = new source.array.constructor( source.array );