super-three 0.141.0 → 0.144.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 (353) hide show
  1. package/README.md +8 -8
  2. package/build/three.cjs +1558 -1034
  3. package/build/three.js +1558 -1034
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +2012 -1243
  6. package/examples/js/animation/MMDPhysics.js +1 -16
  7. package/examples/js/controls/ArcballControls.js +16 -3
  8. package/examples/js/controls/FirstPersonControls.js +0 -7
  9. package/examples/js/controls/FlyControls.js +0 -8
  10. package/examples/js/controls/OrbitControls.js +0 -4
  11. package/examples/js/controls/PointerLockControls.js +0 -8
  12. package/examples/js/controls/TrackballControls.js +0 -2
  13. package/examples/js/controls/TransformControls.js +20 -16
  14. package/examples/js/effects/AnaglyphEffect.js +2 -2
  15. package/examples/js/effects/OutlineEffect.js +4 -24
  16. package/examples/js/effects/ParallaxBarrierEffect.js +2 -2
  17. package/examples/js/effects/PeppersGhostEffect.js +2 -2
  18. package/examples/js/effects/StereoEffect.js +2 -2
  19. package/examples/js/environments/RoomEnvironment.js +22 -0
  20. package/examples/js/exporters/ColladaExporter.js +4 -13
  21. package/examples/js/exporters/DRACOExporter.js +0 -12
  22. package/examples/js/exporters/GLTFExporter.js +28 -29
  23. package/examples/js/exporters/OBJExporter.js +2 -23
  24. package/examples/js/exporters/PLYExporter.js +12 -24
  25. package/examples/js/exporters/STLExporter.js +0 -7
  26. package/examples/js/exporters/USDZExporter.js +6 -0
  27. package/examples/js/geometries/ConvexGeometry.js +1 -1
  28. package/examples/js/geometries/ParametricGeometry.js +1 -8
  29. package/examples/js/interactive/SelectionHelper.js +2 -0
  30. package/examples/js/libs/ktx-parse.umd.js +1 -0
  31. package/examples/js/libs/meshopt_decoder.js +98 -32
  32. package/examples/js/loaders/ColladaLoader.js +1 -0
  33. package/examples/js/loaders/DRACOLoader.js +2 -25
  34. package/examples/js/loaders/EXRLoader.js +2 -13
  35. package/examples/js/loaders/FBXLoader.js +10 -3
  36. package/examples/js/loaders/FontLoader.js +3 -16
  37. package/examples/js/loaders/GLTFLoader.js +52 -36
  38. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -11
  39. package/examples/js/loaders/LDrawLoader.js +139 -74
  40. package/examples/js/loaders/OBJLoader.js +7 -13
  41. package/examples/js/loaders/PCDLoader.js +59 -14
  42. package/examples/js/loaders/PLYLoader.js +3 -3
  43. package/examples/js/loaders/SVGLoader.js +4 -3
  44. package/examples/js/loaders/TIFFLoader.js +31 -0
  45. package/examples/js/loaders/VRMLLoader.js +33 -24
  46. package/examples/js/loaders/VTKLoader.js +1 -1
  47. package/examples/js/loaders/lwo/LWO2Parser.js +8 -7
  48. package/examples/js/loaders/lwo/LWO3Parser.js +8 -7
  49. package/examples/js/materials/MeshGouraudMaterial.js +385 -0
  50. package/examples/js/math/ColorConverter.js +0 -50
  51. package/examples/js/misc/GPUComputationRenderer.js +23 -0
  52. package/examples/js/misc/Volume.js +198 -190
  53. package/examples/js/misc/VolumeSlice.js +90 -88
  54. package/examples/js/modifiers/SimplifyModifier.js +1 -1
  55. package/examples/js/objects/GroundProjectedEnv.js +193 -0
  56. package/examples/js/objects/Reflector.js +9 -2
  57. package/examples/js/objects/ReflectorForSSRPass.js +3 -4
  58. package/examples/js/objects/Refractor.js +10 -4
  59. package/examples/js/objects/ShadowMesh.js +5 -1
  60. package/examples/js/postprocessing/OutlinePass.js +5 -3
  61. package/examples/js/renderers/CSS2DRenderer.js +2 -2
  62. package/examples/js/renderers/CSS3DRenderer.js +2 -2
  63. package/examples/js/renderers/Projector.js +2 -23
  64. package/examples/js/shaders/LuminosityShader.js +1 -1
  65. package/examples/js/shaders/MMDToonShader.js +6 -2
  66. package/examples/js/shaders/ToneMapShader.js +1 -1
  67. package/examples/js/utils/BufferGeometryUtils.js +1 -1
  68. package/examples/js/utils/GeometryUtils.js +2 -18
  69. package/examples/js/utils/PackedPhongMaterial.js +1 -1
  70. package/examples/js/utils/SceneUtils.js +0 -16
  71. package/examples/jsm/animation/MMDPhysics.js +3 -22
  72. package/examples/jsm/controls/ArcballControls.js +17 -2
  73. package/examples/jsm/controls/FirstPersonControls.js +0 -7
  74. package/examples/jsm/controls/FlyControls.js +0 -7
  75. package/examples/jsm/controls/OrbitControls.js +0 -5
  76. package/examples/jsm/controls/PointerLockControls.js +0 -7
  77. package/examples/jsm/controls/TrackballControls.js +0 -3
  78. package/examples/jsm/controls/TransformControls.js +18 -16
  79. package/examples/jsm/effects/AnaglyphEffect.js +2 -2
  80. package/examples/jsm/effects/OutlineEffect.js +4 -25
  81. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
  82. package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
  83. package/examples/jsm/effects/StereoEffect.js +2 -2
  84. package/examples/jsm/environments/RoomEnvironment.js +23 -0
  85. package/examples/jsm/exporters/ColladaExporter.js +4 -13
  86. package/examples/jsm/exporters/DRACOExporter.js +0 -13
  87. package/examples/jsm/exporters/GLTFExporter.js +29 -31
  88. package/examples/jsm/exporters/KTX2Exporter.js +29 -29
  89. package/examples/jsm/exporters/OBJExporter.js +0 -18
  90. package/examples/jsm/exporters/PLYExporter.js +14 -22
  91. package/examples/jsm/exporters/STLExporter.js +1 -9
  92. package/examples/jsm/exporters/USDZExporter.js +14 -3
  93. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  94. package/examples/jsm/geometries/ParametricGeometry.js +0 -6
  95. package/examples/jsm/interactive/HTMLMesh.js +9 -9
  96. package/examples/jsm/interactive/SelectionHelper.js +5 -3
  97. package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
  98. package/examples/jsm/libs/utif.module.js +1579 -0
  99. package/examples/jsm/libs/zstddec.module.js +1 -0
  100. package/examples/jsm/loaders/ColladaLoader.js +1 -0
  101. package/examples/jsm/loaders/DRACOLoader.js +2 -28
  102. package/examples/jsm/loaders/EXRLoader.js +3 -13
  103. package/examples/jsm/loaders/FBXLoader.js +10 -3
  104. package/examples/jsm/loaders/FontLoader.js +3 -16
  105. package/examples/jsm/loaders/GLTFLoader.js +52 -36
  106. package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
  107. package/examples/jsm/loaders/KTX2Loader.js +192 -30
  108. package/examples/jsm/loaders/LDrawLoader.js +135 -74
  109. package/examples/jsm/loaders/OBJLoader.js +6 -14
  110. package/examples/jsm/loaders/PCDLoader.js +59 -13
  111. package/examples/jsm/loaders/PLYLoader.js +3 -3
  112. package/examples/jsm/loaders/RGBELoader.js +1 -1
  113. package/examples/jsm/loaders/SVGLoader.js +4 -3
  114. package/examples/jsm/loaders/TIFFLoader.js +36 -0
  115. package/examples/jsm/loaders/USDZLoader.js +393 -0
  116. package/examples/jsm/loaders/VRMLLoader.js +23 -25
  117. package/examples/jsm/loaders/VTKLoader.js +1 -1
  118. package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
  119. package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
  120. package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
  121. package/examples/jsm/math/ColorConverter.js +1 -49
  122. package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
  123. package/examples/jsm/misc/Volume.js +169 -171
  124. package/examples/jsm/misc/VolumeSlice.js +78 -80
  125. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  126. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
  127. package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
  128. package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
  129. package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
  130. package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
  131. package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
  132. package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
  133. package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
  134. package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
  135. package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
  136. package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
  137. package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
  138. package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
  139. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +1 -1
  140. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
  141. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +1 -1
  142. package/examples/jsm/node-editor/math/AngleEditor.js +1 -1
  143. package/examples/jsm/node-editor/math/DotEditor.js +1 -1
  144. package/examples/jsm/node-editor/math/InvertEditor.js +1 -1
  145. package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
  146. package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
  147. package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
  148. package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
  149. package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
  150. package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
  151. package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
  152. package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
  153. package/examples/jsm/node-editor/utils/PreviewEditor.js +3 -3
  154. package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
  155. package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
  156. package/examples/jsm/nodes/Nodes.js +43 -13
  157. package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
  158. package/examples/jsm/nodes/accessors/NormalNode.js +4 -4
  159. package/examples/jsm/nodes/accessors/PositionNode.js +5 -5
  160. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
  161. package/examples/jsm/nodes/core/AttributeNode.js +3 -3
  162. package/examples/jsm/nodes/core/CodeNode.js +3 -3
  163. package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
  164. package/examples/jsm/nodes/core/FunctionNode.js +2 -2
  165. package/examples/jsm/nodes/core/Node.js +14 -12
  166. package/examples/jsm/nodes/core/NodeBuilder.js +12 -12
  167. package/examples/jsm/nodes/core/NodeUtils.js +23 -1
  168. package/examples/jsm/nodes/core/{NodeVary.js → NodeVarying.js} +3 -3
  169. package/examples/jsm/nodes/core/{VaryNode.js → VaryingNode.js} +7 -7
  170. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +94 -0
  171. package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
  172. package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -0
  173. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
  174. package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
  175. package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
  176. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +31 -0
  177. package/examples/jsm/nodes/materials/Materials.js +13 -25
  178. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
  179. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
  180. package/examples/jsm/nodes/materials/NodeMaterial.js +2 -2
  181. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
  182. package/examples/jsm/nodes/materialx/Disclaimer.md +199 -0
  183. package/examples/jsm/nodes/materialx/functions/lib/mx_hsv.js +56 -0
  184. package/examples/jsm/nodes/materialx/functions/lib/mx_noise.js +607 -0
  185. package/examples/jsm/nodes/math/MathNode.js +2 -12
  186. package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
  187. package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
  188. package/examples/jsm/nodes/shadernode/ShaderNode.js +5 -5
  189. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +8 -5
  190. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +20 -6
  191. package/examples/jsm/nodes/utils/ConvertNode.js +8 -3
  192. package/examples/jsm/nodes/utils/JoinNode.js +7 -7
  193. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +2 -1
  194. package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
  195. package/examples/jsm/nodes/utils/SplitNode.js +21 -5
  196. package/examples/jsm/nodes/utils/TimerNode.js +2 -2
  197. package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
  198. package/examples/jsm/objects/Reflector.js +12 -5
  199. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
  200. package/examples/jsm/objects/Refractor.js +12 -6
  201. package/examples/jsm/objects/ShadowMesh.js +8 -2
  202. package/examples/jsm/postprocessing/OutlinePass.js +5 -3
  203. package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
  204. package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
  205. package/examples/jsm/renderers/Projector.js +2 -24
  206. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
  207. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +329 -218
  208. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
  209. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +39 -3
  210. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
  211. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
  212. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  213. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
  214. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
  215. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
  216. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +66 -81
  217. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
  218. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
  219. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
  220. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +25 -30
  221. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  222. package/examples/jsm/shaders/LuminosityShader.js +1 -1
  223. package/examples/jsm/shaders/MMDToonShader.js +2 -2
  224. package/examples/jsm/shaders/ToneMapShader.js +1 -1
  225. package/examples/jsm/utils/BufferGeometryUtils.js +2 -1
  226. package/examples/jsm/utils/GeometryUtils.js +17 -25
  227. package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
  228. package/examples/jsm/utils/SceneUtils.js +1 -21
  229. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
  230. package/examples/jsm/webxr/VRButton.js +1 -7
  231. package/package.json +18 -14
  232. package/src/Three.Legacy.js +262 -36
  233. package/src/Three.js +3 -2
  234. package/src/animation/AnimationAction.js +6 -5
  235. package/src/animation/AnimationClip.js +1 -1
  236. package/src/animation/AnimationMixer.js +1 -1
  237. package/src/animation/AnimationUtils.js +204 -199
  238. package/src/animation/KeyframeTrack.js +1 -1
  239. package/src/animation/PropertyBinding.js +24 -5
  240. package/src/cameras/CubeCamera.js +0 -7
  241. package/src/constants.js +2 -4
  242. package/src/core/BufferAttribute.js +81 -111
  243. package/src/core/BufferGeometry.js +3 -41
  244. package/src/core/InstancedBufferAttribute.js +0 -10
  245. package/src/core/InterleavedBuffer.js +1 -1
  246. package/src/core/InterleavedBufferAttribute.js +56 -7
  247. package/src/core/Object3D.js +22 -5
  248. package/src/core/Uniform.js +0 -7
  249. package/src/core/UniformsGroup.js +92 -0
  250. package/src/extras/DataUtils.js +104 -88
  251. package/src/extras/core/Path.js +1 -0
  252. package/src/extras/core/ShapePath.js +1 -4
  253. package/src/extras/curves/CatmullRomCurve3.js +4 -2
  254. package/src/geometries/BoxGeometry.js +1 -1
  255. package/src/geometries/CapsuleGeometry.js +1 -1
  256. package/src/geometries/CircleGeometry.js +1 -1
  257. package/src/geometries/ConeGeometry.js +1 -1
  258. package/src/geometries/CylinderGeometry.js +2 -1
  259. package/src/geometries/DodecahedronGeometry.js +1 -1
  260. package/src/geometries/EdgesGeometry.js +5 -4
  261. package/src/geometries/ExtrudeGeometry.js +2 -11
  262. package/src/geometries/IcosahedronGeometry.js +1 -1
  263. package/src/geometries/LatheGeometry.js +2 -2
  264. package/src/geometries/OctahedronGeometry.js +1 -1
  265. package/src/geometries/PlaneGeometry.js +2 -1
  266. package/src/geometries/PolyhedronGeometry.js +1 -1
  267. package/src/geometries/RingGeometry.js +1 -1
  268. package/src/geometries/ShapeGeometry.js +2 -1
  269. package/src/geometries/SphereGeometry.js +2 -1
  270. package/src/geometries/TetrahedronGeometry.js +1 -1
  271. package/src/geometries/TorusGeometry.js +2 -1
  272. package/src/geometries/TorusKnotGeometry.js +2 -1
  273. package/src/geometries/TubeGeometry.js +2 -1
  274. package/src/geometries/WireframeGeometry.js +1 -0
  275. package/src/helpers/CameraHelper.js +97 -38
  276. package/src/helpers/DirectionalLightHelper.js +1 -0
  277. package/src/helpers/HemisphereLightHelper.js +1 -0
  278. package/src/helpers/PlaneHelper.js +6 -9
  279. package/src/helpers/PolarGridHelper.js +18 -14
  280. package/src/helpers/SpotLightHelper.js +1 -0
  281. package/src/lights/SpotLight.js +2 -0
  282. package/src/loaders/FileLoader.js +12 -1
  283. package/src/loaders/LoadingManager.js +1 -1
  284. package/src/loaders/MaterialLoader.js +49 -7
  285. package/src/loaders/ObjectLoader.js +4 -41
  286. package/src/materials/Material.js +1 -33
  287. package/src/materials/Materials.js +0 -27
  288. package/src/materials/MeshLambertMaterial.js +28 -1
  289. package/src/materials/ShaderMaterial.js +3 -7
  290. package/src/math/Color.js +3 -13
  291. package/src/math/MathUtils.js +1 -7
  292. package/src/math/Matrix3.js +1 -7
  293. package/src/math/Matrix4.js +3 -27
  294. package/src/math/Quaternion.js +1 -21
  295. package/src/math/Vector2.js +4 -24
  296. package/src/math/Vector3.js +7 -46
  297. package/src/math/Vector4.js +4 -24
  298. package/src/renderers/WebGLRenderer.js +84 -8
  299. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
  300. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
  301. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
  302. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
  303. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
  304. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
  305. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
  306. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
  307. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -12
  308. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
  309. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +30 -0
  310. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
  311. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
  312. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
  313. package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
  314. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
  315. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
  316. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
  317. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  318. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
  319. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
  320. package/src/renderers/shaders/ShaderChunk.js +4 -2
  321. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
  322. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
  323. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  324. package/src/renderers/shaders/ShaderLib.js +31 -31
  325. package/src/renderers/shaders/UniformsLib.js +12 -11
  326. package/src/renderers/shaders/UniformsUtils.js +14 -0
  327. package/src/renderers/webgl/WebGLBackground.js +2 -2
  328. package/src/renderers/webgl/WebGLLights.js +37 -13
  329. package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
  330. package/src/renderers/webgl/WebGLProgram.js +6 -11
  331. package/src/renderers/webgl/WebGLPrograms.js +30 -26
  332. package/src/renderers/webgl/WebGLRenderLists.js +5 -4
  333. package/src/renderers/webgl/WebGLRenderStates.js +5 -4
  334. package/src/renderers/webgl/WebGLShaderCache.js +9 -6
  335. package/src/renderers/webgl/WebGLShadowMap.js +10 -15
  336. package/src/renderers/webgl/WebGLState.js +47 -0
  337. package/src/renderers/webgl/WebGLUniforms.js +4 -4
  338. package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
  339. package/src/renderers/webgl/WebGLUtils.js +2 -0
  340. package/src/renderers/webvr/WebVRManager.js +42 -9
  341. package/src/renderers/webvr/WebVRUtils.js +1 -1
  342. package/src/renderers/webxr/WebXRController.js +45 -37
  343. package/src/renderers/webxr/WebXRManager.js +58 -33
  344. package/src/scenes/Scene.js +16 -3
  345. package/src/textures/Source.js +1 -1
  346. package/src/utils.js +1 -1
  347. package/examples/js/controls/experimental/CameraControls.js +0 -1048
  348. package/examples/js/loaders/KTX2Loader.js +0 -558
  349. package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
  350. package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
  351. package/examples/jsm/package.json +0 -3
  352. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
  353. package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
@@ -13,205 +13,203 @@
13
13
  * @param {ArrayBuffer} arrayBuffer The buffer with volume data
14
14
  */
15
15
 
16
- function Volume( xLength, yLength, zLength, type, arrayBuffer ) {
16
+ class Volume {
17
+
18
+ constructor( xLength, yLength, zLength, type, arrayBuffer ) {
19
+
20
+ if ( xLength !== undefined ) {
21
+
22
+ /**
23
+ * @member {number} xLength Width of the volume in the IJK coordinate system
24
+ */
25
+ this.xLength = Number( xLength ) || 1;
26
+ /**
27
+ * @member {number} yLength Height of the volume in the IJK coordinate system
28
+ */
29
+
30
+ this.yLength = Number( yLength ) || 1;
31
+ /**
32
+ * @member {number} zLength Depth of the volume in the IJK coordinate system
33
+ */
34
+
35
+ this.zLength = Number( zLength ) || 1;
36
+ /**
37
+ * @member {Array<string>} The order of the Axis dictated by the NRRD header
38
+ */
39
+
40
+ this.axisOrder = [ 'x', 'y', 'z' ];
41
+ /**
42
+ * @member {TypedArray} data Data of the volume
43
+ */
44
+
45
+ switch ( type ) {
46
+
47
+ case 'Uint8':
48
+ case 'uint8':
49
+ case 'uchar':
50
+ case 'unsigned char':
51
+ case 'uint8_t':
52
+ this.data = new Uint8Array( arrayBuffer );
53
+ break;
54
+
55
+ case 'Int8':
56
+ case 'int8':
57
+ case 'signed char':
58
+ case 'int8_t':
59
+ this.data = new Int8Array( arrayBuffer );
60
+ break;
61
+
62
+ case 'Int16':
63
+ case 'int16':
64
+ case 'short':
65
+ case 'short int':
66
+ case 'signed short':
67
+ case 'signed short int':
68
+ case 'int16_t':
69
+ this.data = new Int16Array( arrayBuffer );
70
+ break;
71
+
72
+ case 'Uint16':
73
+ case 'uint16':
74
+ case 'ushort':
75
+ case 'unsigned short':
76
+ case 'unsigned short int':
77
+ case 'uint16_t':
78
+ this.data = new Uint16Array( arrayBuffer );
79
+ break;
80
+
81
+ case 'Int32':
82
+ case 'int32':
83
+ case 'int':
84
+ case 'signed int':
85
+ case 'int32_t':
86
+ this.data = new Int32Array( arrayBuffer );
87
+ break;
88
+
89
+ case 'Uint32':
90
+ case 'uint32':
91
+ case 'uint':
92
+ case 'unsigned int':
93
+ case 'uint32_t':
94
+ this.data = new Uint32Array( arrayBuffer );
95
+ break;
96
+
97
+ case 'longlong':
98
+ case 'long long':
99
+ case 'long long int':
100
+ case 'signed long long':
101
+ case 'signed long long int':
102
+ case 'int64':
103
+ case 'int64_t':
104
+ case 'ulonglong':
105
+ case 'unsigned long long':
106
+ case 'unsigned long long int':
107
+ case 'uint64':
108
+ case 'uint64_t':
109
+ throw new Error( 'Error in Volume constructor : this type is not supported in JavaScript' );
110
+ break;
111
+
112
+ case 'Float32':
113
+ case 'float32':
114
+ case 'float':
115
+ this.data = new Float32Array( arrayBuffer );
116
+ break;
117
+
118
+ case 'Float64':
119
+ case 'float64':
120
+ case 'double':
121
+ this.data = new Float64Array( arrayBuffer );
122
+ break;
123
+
124
+ default:
125
+ this.data = new Uint8Array( arrayBuffer );
17
126
 
18
- if ( arguments.length > 0 ) {
127
+ }
128
+
129
+ if ( this.data.length !== this.xLength * this.yLength * this.zLength ) {
19
130
 
131
+ throw new Error( 'Error in Volume constructor, lengths are not matching arrayBuffer size' );
132
+
133
+ }
134
+
135
+ }
20
136
  /**
21
- * @member {number} xLength Width of the volume in the IJK coordinate system
137
+ * @member {Array} spacing Spacing to apply to the volume from IJK to RAS coordinate system
22
138
  */
23
- this.xLength = Number( xLength ) || 1;
139
+
140
+
141
+ this.spacing = [ 1, 1, 1 ];
24
142
  /**
25
- * @member {number} yLength Height of the volume in the IJK coordinate system
143
+ * @member {Array} offset Offset of the volume in the RAS coordinate system
26
144
  */
27
145
 
28
- this.yLength = Number( yLength ) || 1;
146
+ this.offset = [ 0, 0, 0 ];
29
147
  /**
30
- * @member {number} zLength Depth of the volume in the IJK coordinate system
148
+ * @member {Martrix3} matrix The IJK to RAS matrix
31
149
  */
32
150
 
33
- this.zLength = Number( zLength ) || 1;
151
+ this.matrix = new THREE.Matrix3();
152
+ this.matrix.identity();
34
153
  /**
35
- * @member {Array<string>} The order of the Axis dictated by the NRRD header
154
+ * @member {Martrix3} inverseMatrix The RAS to IJK matrix
36
155
  */
37
156
 
38
- this.axisOrder = [ 'x', 'y', 'z' ];
39
157
  /**
40
- * @member {TypedArray} data Data of the volume
158
+ * @member {number} lowerThreshold The voxels with values under this threshold won't appear in the slices.
159
+ * If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume
41
160
  */
42
161
 
43
- switch ( type ) {
162
+ let lowerThreshold = - Infinity;
163
+ Object.defineProperty( this, 'lowerThreshold', {
164
+ get: function () {
44
165
 
45
- case 'Uint8':
46
- case 'uint8':
47
- case 'uchar':
48
- case 'unsigned char':
49
- case 'uint8_t':
50
- this.data = new Uint8Array( arrayBuffer );
51
- break;
166
+ return lowerThreshold;
52
167
 
53
- case 'Int8':
54
- case 'int8':
55
- case 'signed char':
56
- case 'int8_t':
57
- this.data = new Int8Array( arrayBuffer );
58
- break;
168
+ },
169
+ set: function ( value ) {
59
170
 
60
- case 'Int16':
61
- case 'int16':
62
- case 'short':
63
- case 'short int':
64
- case 'signed short':
65
- case 'signed short int':
66
- case 'int16_t':
67
- this.data = new Int16Array( arrayBuffer );
68
- break;
171
+ lowerThreshold = value;
172
+ this.sliceList.forEach( function ( slice ) {
69
173
 
70
- case 'Uint16':
71
- case 'uint16':
72
- case 'ushort':
73
- case 'unsigned short':
74
- case 'unsigned short int':
75
- case 'uint16_t':
76
- this.data = new Uint16Array( arrayBuffer );
77
- break;
174
+ slice.geometryNeedsUpdate = true;
78
175
 
79
- case 'Int32':
80
- case 'int32':
81
- case 'int':
82
- case 'signed int':
83
- case 'int32_t':
84
- this.data = new Int32Array( arrayBuffer );
85
- break;
176
+ } );
86
177
 
87
- case 'Uint32':
88
- case 'uint32':
89
- case 'uint':
90
- case 'unsigned int':
91
- case 'uint32_t':
92
- this.data = new Uint32Array( arrayBuffer );
93
- break;
178
+ }
179
+ } );
180
+ /**
181
+ * @member {number} upperThreshold The voxels with values over this threshold won't appear in the slices.
182
+ * If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume
183
+ */
94
184
 
95
- case 'longlong':
96
- case 'long long':
97
- case 'long long int':
98
- case 'signed long long':
99
- case 'signed long long int':
100
- case 'int64':
101
- case 'int64_t':
102
- case 'ulonglong':
103
- case 'unsigned long long':
104
- case 'unsigned long long int':
105
- case 'uint64':
106
- case 'uint64_t':
107
- throw new Error( 'Error in Volume constructor : this type is not supported in JavaScript' );
108
- break;
185
+ let upperThreshold = Infinity;
186
+ Object.defineProperty( this, 'upperThreshold', {
187
+ get: function () {
109
188
 
110
- case 'Float32':
111
- case 'float32':
112
- case 'float':
113
- this.data = new Float32Array( arrayBuffer );
114
- break;
189
+ return upperThreshold;
115
190
 
116
- case 'Float64':
117
- case 'float64':
118
- case 'double':
119
- this.data = new Float64Array( arrayBuffer );
120
- break;
191
+ },
192
+ set: function ( value ) {
121
193
 
122
- default:
123
- this.data = new Uint8Array( arrayBuffer );
194
+ upperThreshold = value;
195
+ this.sliceList.forEach( function ( slice ) {
124
196
 
125
- }
197
+ slice.geometryNeedsUpdate = true;
126
198
 
127
- if ( this.data.length !== this.xLength * this.yLength * this.zLength ) {
199
+ } );
128
200
 
129
- throw new Error( 'Error in Volume constructor, lengths are not matching arrayBuffer size' );
201
+ }
202
+ } );
203
+ /**
204
+ * @member {Array} sliceList The list of all the slices associated to this volume
205
+ */
130
206
 
131
- }
207
+ this.sliceList = [];
208
+ /**
209
+ * @member {Array} RASDimensions This array holds the dimensions of the volume in the RAS space
210
+ */
132
211
 
133
212
  }
134
- /**
135
- * @member {Array} spacing Spacing to apply to the volume from IJK to RAS coordinate system
136
- */
137
-
138
-
139
- this.spacing = [ 1, 1, 1 ];
140
- /**
141
- * @member {Array} offset Offset of the volume in the RAS coordinate system
142
- */
143
-
144
- this.offset = [ 0, 0, 0 ];
145
- /**
146
- * @member {Martrix3} matrix The IJK to RAS matrix
147
- */
148
-
149
- this.matrix = new THREE.Matrix3();
150
- this.matrix.identity();
151
- /**
152
- * @member {Martrix3} inverseMatrix The RAS to IJK matrix
153
- */
154
-
155
- /**
156
- * @member {number} lowerThreshold The voxels with values under this threshold won't appear in the slices.
157
- * If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume
158
- */
159
-
160
- let lowerThreshold = - Infinity;
161
- Object.defineProperty( this, 'lowerThreshold', {
162
- get: function () {
163
-
164
- return lowerThreshold;
165
-
166
- },
167
- set: function ( value ) {
168
-
169
- lowerThreshold = value;
170
- this.sliceList.forEach( function ( slice ) {
171
-
172
- slice.geometryNeedsUpdate = true;
173
-
174
- } );
175
-
176
- }
177
- } );
178
- /**
179
- * @member {number} upperThreshold The voxels with values over this threshold won't appear in the slices.
180
- * If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume
181
- */
182
-
183
- let upperThreshold = Infinity;
184
- Object.defineProperty( this, 'upperThreshold', {
185
- get: function () {
186
-
187
- return upperThreshold;
188
-
189
- },
190
- set: function ( value ) {
191
-
192
- upperThreshold = value;
193
- this.sliceList.forEach( function ( slice ) {
194
-
195
- slice.geometryNeedsUpdate = true;
196
-
197
- } );
198
-
199
- }
200
- } );
201
- /**
202
- * @member {Array} sliceList The list of all the slices associated to this volume
203
- */
204
-
205
- this.sliceList = [];
206
- /**
207
- * @member {Array} RASDimensions This array holds the dimensions of the volume in the RAS space
208
- */
209
-
210
- }
211
-
212
- Volume.prototype = {
213
- constructor: Volume,
214
-
215
213
  /**
216
214
  * @member {Function} getData Shortcut for data[access(i,j,k)]
217
215
  * @memberof Volume
@@ -220,12 +218,13 @@
220
218
  * @param {number} k Third coordinate
221
219
  * @returns {number} value in the data array
222
220
  */
223
- getData: function ( i, j, k ) {
224
221
 
225
- return this.data[ k * this.xLength * this.yLength + j * this.xLength + i ];
226
222
 
227
- },
223
+ getData( i, j, k ) {
224
+
225
+ return this.data[ k * this.xLength * this.yLength + j * this.xLength + i ];
228
226
 
227
+ }
229
228
  /**
230
229
  * @member {Function} access compute the index in the data array corresponding to the given coordinates in IJK system
231
230
  * @memberof Volume
@@ -234,27 +233,29 @@
234
233
  * @param {number} k Third coordinate
235
234
  * @returns {number} index
236
235
  */
237
- access: function ( i, j, k ) {
238
236
 
239
- return k * this.xLength * this.yLength + j * this.xLength + i;
240
237
 
241
- },
238
+ access( i, j, k ) {
239
+
240
+ return k * this.xLength * this.yLength + j * this.xLength + i;
242
241
 
242
+ }
243
243
  /**
244
244
  * @member {Function} reverseAccess Retrieve the IJK coordinates of the voxel corresponding of the given index in the data
245
245
  * @memberof Volume
246
246
  * @param {number} index index of the voxel
247
247
  * @returns {Array} [x,y,z]
248
248
  */
249
- reverseAccess: function ( index ) {
249
+
250
+
251
+ reverseAccess( index ) {
250
252
 
251
253
  const z = Math.floor( index / ( this.yLength * this.xLength ) );
252
254
  const y = Math.floor( ( index - z * this.yLength * this.xLength ) / this.xLength );
253
255
  const x = index - z * this.yLength * this.xLength - y * this.xLength;
254
256
  return [ x, y, z ];
255
257
 
256
- },
257
-
258
+ }
258
259
  /**
259
260
  * @member {Function} map Apply a function to all the voxels, be careful, the value will be replaced
260
261
  * @memberof Volume
@@ -265,7 +266,9 @@
265
266
  * @param {Object} context You can specify a context in which call the function, default if this Volume
266
267
  * @returns {Volume} this
267
268
  */
268
- map: function ( functionToMap, context ) {
269
+
270
+
271
+ map( functionToMap, context ) {
269
272
 
270
273
  const length = this.data.length;
271
274
  context = context || this;
@@ -278,8 +281,7 @@
278
281
 
279
282
  return this;
280
283
 
281
- },
282
-
284
+ }
283
285
  /**
284
286
  * @member {Function} extractPerpendicularPlane Compute the orientation of the slice and returns all the information relative to the geometry such as sliceAccess, the plane matrix (orientation and position in RAS coordinate) and the dimensions of the plane in both coordinate system.
285
287
  * @memberof Volume
@@ -287,7 +289,9 @@
287
289
  * @param {number} index the index of the slice
288
290
  * @returns {Object} an object containing all the usefull information on the geometry of the slice
289
291
  */
290
- extractPerpendicularPlane: function ( axis, RASIndex ) {
292
+
293
+
294
+ extractPerpendicularPlane( axis, RASIndex ) {
291
295
 
292
296
  let firstSpacing, secondSpacing, positionOffset, IJKIndex;
293
297
  const axisInIJK = new THREE.Vector3(),
@@ -386,8 +390,7 @@
386
390
  planeHeight: planeHeight
387
391
  };
388
392
 
389
- },
390
-
393
+ }
391
394
  /**
392
395
  * @member {Function} extractSlice Returns a slice corresponding to the given axis and index
393
396
  * The coordinate are given in the Right Anterior Superior coordinate format
@@ -396,21 +399,24 @@
396
399
  * @param {number} index the index of the slice
397
400
  * @returns {VolumeSlice} the extracted slice
398
401
  */
399
- extractSlice: function ( axis, index ) {
402
+
403
+
404
+ extractSlice( axis, index ) {
400
405
 
401
406
  const slice = new THREE.VolumeSlice( this, index, axis );
402
407
  this.sliceList.push( slice );
403
408
  return slice;
404
409
 
405
- },
406
-
410
+ }
407
411
  /**
408
412
  * @member {Function} repaintAllSlices Call repaint on all the slices extracted from this volume
409
413
  * @see THREE.VolumeSlice.repaint
410
414
  * @memberof Volume
411
415
  * @returns {Volume} this
412
416
  */
413
- repaintAllSlices: function () {
417
+
418
+
419
+ repaintAllSlices() {
414
420
 
415
421
  this.sliceList.forEach( function ( slice ) {
416
422
 
@@ -419,14 +425,15 @@
419
425
  } );
420
426
  return this;
421
427
 
422
- },
423
-
428
+ }
424
429
  /**
425
430
  * @member {Function} computeMinMax Compute the minimum and the maximum of the data in the volume
426
431
  * @memberof Volume
427
432
  * @returns {Array} [min,max]
428
433
  */
429
- computeMinMax: function () {
434
+
435
+
436
+ computeMinMax() {
430
437
 
431
438
  let min = Infinity;
432
439
  let max = - Infinity; // buffer the length
@@ -451,7 +458,8 @@
451
458
  return [ min, max ];
452
459
 
453
460
  }
454
- };
461
+
462
+ }
455
463
 
456
464
  THREE.Volume = Volume;
457
465