@plastic-software/three 0.167.3 → 0.174.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 (748) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +36277 -24023
  4. package/build/three.core.js +48830 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +10175 -46743
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +550 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +44348 -50670
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +70301 -0
  13. package/build/three.webgpu.nodes.min.js +6 -0
  14. package/examples/jsm/Addons.js +3 -15
  15. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  16. package/examples/jsm/animation/CCDIKSolver.js +61 -11
  17. package/examples/jsm/capabilities/WebGL.js +27 -21
  18. package/examples/jsm/capabilities/WebGPU.js +1 -10
  19. package/examples/jsm/controls/ArcballControls.js +262 -231
  20. package/examples/jsm/controls/DragControls.js +1 -1
  21. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  22. package/examples/jsm/controls/FlyControls.js +194 -188
  23. package/examples/jsm/controls/OrbitControls.js +801 -777
  24. package/examples/jsm/controls/PointerLockControls.js +26 -20
  25. package/examples/jsm/controls/TrackballControls.js +469 -448
  26. package/examples/jsm/controls/TransformControls.js +119 -68
  27. package/examples/jsm/csm/CSM.js +2 -2
  28. package/examples/jsm/csm/CSMFrustum.js +7 -4
  29. package/examples/jsm/csm/CSMHelper.js +2 -0
  30. package/examples/jsm/csm/CSMShadowNode.js +442 -0
  31. package/examples/jsm/curves/NURBSCurve.js +33 -2
  32. package/examples/jsm/curves/NURBSUtils.js +3 -0
  33. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  34. package/examples/jsm/effects/OutlineEffect.js +1 -1
  35. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  36. package/examples/jsm/effects/StereoEffect.js +6 -1
  37. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  38. package/examples/jsm/exporters/EXRExporter.js +19 -11
  39. package/examples/jsm/exporters/GLTFExporter.js +181 -109
  40. package/examples/jsm/exporters/KTX2Exporter.js +54 -23
  41. package/examples/jsm/exporters/OBJExporter.js +5 -1
  42. package/examples/jsm/exporters/PLYExporter.js +11 -9
  43. package/examples/jsm/exporters/USDZExporter.js +50 -11
  44. package/examples/jsm/geometries/DecalGeometry.js +73 -21
  45. package/examples/jsm/geometries/TextGeometry.js +1 -12
  46. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  47. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  48. package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
  49. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  50. package/examples/jsm/interactive/HTMLMesh.js +1 -0
  51. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  52. package/examples/jsm/interactive/SelectionHelper.js +3 -1
  53. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  54. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  55. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  56. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  57. package/examples/jsm/lighting/TiledLighting.js +18 -0
  58. package/examples/jsm/lights/LightProbeGenerator.js +26 -12
  59. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  60. package/examples/jsm/lines/LineGeometry.js +25 -0
  61. package/examples/jsm/lines/LineMaterial.js +0 -1
  62. package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
  63. package/examples/jsm/lines/webgpu/Line2.js +2 -1
  64. package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
  65. package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
  66. package/examples/jsm/loaders/3DMLoader.js +1 -0
  67. package/examples/jsm/loaders/3MFLoader.js +104 -2
  68. package/examples/jsm/loaders/BVHLoader.js +1 -1
  69. package/examples/jsm/loaders/ColladaLoader.js +15 -12
  70. package/examples/jsm/loaders/DDSLoader.js +42 -0
  71. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  72. package/examples/jsm/loaders/FBXLoader.js +71 -22
  73. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  74. package/examples/jsm/loaders/GLTFLoader.js +29 -14
  75. package/examples/jsm/loaders/KTX2Loader.js +160 -58
  76. package/examples/jsm/loaders/KTXLoader.js +4 -4
  77. package/examples/jsm/loaders/LDrawLoader.js +22 -136
  78. package/examples/jsm/loaders/LottieLoader.js +2 -1
  79. package/examples/jsm/loaders/MTLLoader.js +27 -7
  80. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  81. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  82. package/examples/jsm/loaders/OBJLoader.js +5 -3
  83. package/examples/jsm/loaders/PCDLoader.js +14 -13
  84. package/examples/jsm/loaders/PDBLoader.js +3 -2
  85. package/examples/jsm/loaders/PLYLoader.js +15 -12
  86. package/examples/jsm/loaders/PVRLoader.js +1 -1
  87. package/examples/jsm/loaders/STLLoader.js +3 -2
  88. package/examples/jsm/loaders/SVGLoader.js +2 -2
  89. package/examples/jsm/loaders/TDSLoader.js +17 -18
  90. package/examples/jsm/loaders/VRMLLoader.js +17 -17
  91. package/examples/jsm/loaders/VTKLoader.js +4 -3
  92. package/examples/jsm/loaders/XYZLoader.js +3 -2
  93. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  94. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
  95. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
  96. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  97. package/examples/jsm/math/ColorSpaces.js +76 -0
  98. package/examples/jsm/math/ConvexHull.js +1 -1
  99. package/examples/jsm/math/OBB.js +17 -0
  100. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  101. package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
  102. package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
  103. package/examples/jsm/misc/Timer.js +27 -12
  104. package/examples/jsm/misc/Volume.js +28 -18
  105. package/examples/jsm/misc/VolumeSlice.js +19 -16
  106. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  107. package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
  108. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  109. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  110. package/examples/jsm/objects/LensflareMesh.js +324 -0
  111. package/examples/jsm/objects/Reflector.js +5 -2
  112. package/examples/jsm/objects/Sky.js +2 -2
  113. package/examples/jsm/objects/SkyMesh.js +14 -14
  114. package/examples/jsm/objects/Water2.js +1 -1
  115. package/examples/jsm/objects/Water2Mesh.js +11 -9
  116. package/examples/jsm/objects/WaterMesh.js +38 -33
  117. package/examples/jsm/physics/JoltPhysics.js +8 -8
  118. package/examples/jsm/physics/RapierPhysics.js +5 -5
  119. package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
  120. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  121. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  122. package/examples/jsm/postprocessing/OutlinePass.js +37 -51
  123. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  124. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  125. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  126. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  128. package/examples/jsm/postprocessing/SSRPass.js +8 -4
  129. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  130. package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
  131. package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
  132. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  133. package/examples/jsm/shaders/BokehShader2.js +1 -1
  134. package/examples/jsm/shaders/FXAAShader.js +225 -224
  135. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  136. package/examples/jsm/shaders/OutputShader.js +6 -2
  137. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  138. package/examples/jsm/transpiler/AST.js +12 -2
  139. package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
  140. package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
  141. package/examples/jsm/transpiler/TSLEncoder.js +96 -21
  142. package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
  143. package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
  144. package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
  145. package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
  146. package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
  147. package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
  148. package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
  149. package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
  150. package/examples/jsm/tsl/display/FXAANode.js +364 -0
  151. package/examples/jsm/tsl/display/FilmNode.js +100 -0
  152. package/examples/jsm/tsl/display/GTAONode.js +521 -0
  153. package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
  154. package/examples/jsm/tsl/display/LensflareNode.js +278 -0
  155. package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
  156. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  157. package/examples/jsm/tsl/display/OutlineNode.js +750 -0
  158. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
  159. package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
  160. package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
  161. package/examples/jsm/tsl/display/SMAANode.js +767 -0
  162. package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
  163. package/examples/jsm/tsl/display/SSRNode.js +538 -0
  164. package/examples/jsm/tsl/display/Sepia.js +24 -0
  165. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
  166. package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
  167. package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
  168. package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
  169. package/examples/jsm/tsl/display/TransitionNode.js +140 -0
  170. package/examples/jsm/tsl/display/hashBlur.js +34 -0
  171. package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
  172. package/examples/jsm/tsl/math/Bayer.js +18 -0
  173. package/examples/jsm/tsl/utils/Raymarching.js +65 -0
  174. package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
  175. package/examples/jsm/utils/CameraUtils.js +4 -1
  176. package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
  177. package/examples/jsm/utils/GeometryUtils.js +22 -19
  178. package/examples/jsm/utils/SceneOptimizer.js +410 -0
  179. package/examples/jsm/utils/SceneUtils.js +2 -2
  180. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  181. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  182. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  183. package/examples/jsm/utils/UVsDebug.js +1 -1
  184. package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
  185. package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
  186. package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
  187. package/examples/jsm/webxr/Text2D.js +6 -6
  188. package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
  189. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  190. package/package.json +14 -9
  191. package/src/Three.Core.js +182 -0
  192. package/src/Three.Legacy.js +0 -21
  193. package/src/Three.TSL.js +543 -0
  194. package/src/Three.WebGPU.Nodes.js +23 -0
  195. package/src/Three.WebGPU.js +13 -184
  196. package/src/Three.js +1 -176
  197. package/src/animation/AnimationClip.js +2 -2
  198. package/src/animation/AnimationObjectGroup.js +2 -2
  199. package/src/animation/AnimationUtils.js +1 -1
  200. package/src/animation/PropertyBinding.js +2 -2
  201. package/src/audio/Audio.js +379 -2
  202. package/src/audio/AudioAnalyser.js +58 -1
  203. package/src/audio/AudioContext.js +15 -0
  204. package/src/audio/AudioListener.js +76 -0
  205. package/src/audio/PositionalAudio.js +107 -0
  206. package/src/cameras/ArrayCamera.js +29 -0
  207. package/src/cameras/Camera.js +47 -0
  208. package/src/cameras/CubeCamera.js +66 -0
  209. package/src/cameras/OrthographicCamera.js +109 -0
  210. package/src/cameras/PerspectiveCamera.js +173 -34
  211. package/src/cameras/StereoCamera.js +48 -2
  212. package/src/constants.js +6 -6
  213. package/src/core/BufferAttribute.js +4 -9
  214. package/src/core/BufferGeometry.js +48 -8
  215. package/src/core/Clock.js +1 -1
  216. package/src/core/EventDispatcher.js +52 -8
  217. package/src/core/InterleavedBuffer.js +4 -13
  218. package/src/core/Object3D.js +573 -3
  219. package/src/core/RenderTarget.js +22 -4
  220. package/src/core/RenderTarget3D.js +22 -0
  221. package/src/core/RenderTargetArray.js +22 -0
  222. package/src/extras/Controls.js +104 -0
  223. package/src/extras/DataUtils.js +48 -8
  224. package/src/extras/Earcut.js +18 -7
  225. package/src/extras/ImageUtils.js +18 -11
  226. package/src/extras/PMREMGenerator.js +40 -9
  227. package/src/extras/ShapeUtils.js +24 -2
  228. package/src/extras/TextureUtils.js +96 -10
  229. package/src/extras/core/Curve.js +153 -53
  230. package/src/extras/core/CurvePath.js +63 -22
  231. package/src/extras/core/Interpolations.js +29 -3
  232. package/src/extras/core/Path.js +134 -1
  233. package/src/extras/core/Shape.js +66 -3
  234. package/src/extras/core/ShapePath.js +76 -0
  235. package/src/extras/curves/ArcCurve.js +22 -0
  236. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  237. package/src/extras/curves/CubicBezierCurve.js +67 -0
  238. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  239. package/src/extras/curves/EllipseCurve.js +102 -0
  240. package/src/extras/curves/LineCurve.js +36 -0
  241. package/src/extras/curves/LineCurve3.js +36 -0
  242. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  243. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  244. package/src/extras/curves/SplineCurve.js +48 -0
  245. package/src/geometries/BoxGeometry.js +38 -0
  246. package/src/geometries/CapsuleGeometry.js +34 -0
  247. package/src/geometries/CircleGeometry.js +40 -0
  248. package/src/geometries/ConeGeometry.js +38 -0
  249. package/src/geometries/CylinderGeometry.js +50 -4
  250. package/src/geometries/DodecahedronGeometry.js +32 -0
  251. package/src/geometries/EdgesGeometry.js +30 -2
  252. package/src/geometries/ExtrudeGeometry.js +52 -0
  253. package/src/geometries/IcosahedronGeometry.js +32 -0
  254. package/src/geometries/LatheGeometry.js +43 -3
  255. package/src/geometries/OctahedronGeometry.js +32 -0
  256. package/src/geometries/PlaneGeometry.js +34 -0
  257. package/src/geometries/PolyhedronGeometry.js +29 -0
  258. package/src/geometries/RingGeometry.js +36 -0
  259. package/src/geometries/ShapeGeometry.js +37 -0
  260. package/src/geometries/SphereGeometry.js +37 -0
  261. package/src/geometries/TetrahedronGeometry.js +32 -0
  262. package/src/geometries/TorusGeometry.js +35 -0
  263. package/src/geometries/TorusKnotGeometry.js +38 -0
  264. package/src/geometries/TubeGeometry.js +49 -0
  265. package/src/geometries/WireframeGeometry.js +32 -0
  266. package/src/helpers/ArrowHelper.js +60 -3
  267. package/src/helpers/AxesHelper.js +28 -0
  268. package/src/helpers/Box3Helper.js +28 -0
  269. package/src/helpers/BoxHelper.js +43 -7
  270. package/src/helpers/CameraHelper.js +61 -18
  271. package/src/helpers/DirectionalLightHelper.js +52 -0
  272. package/src/helpers/GridHelper.js +26 -0
  273. package/src/helpers/HemisphereLightHelper.js +39 -0
  274. package/src/helpers/PlaneHelper.js +33 -0
  275. package/src/helpers/PointLightHelper.js +43 -0
  276. package/src/helpers/PolarGridHelper.js +30 -0
  277. package/src/helpers/SkeletonHelper.js +39 -2
  278. package/src/helpers/SpotLightHelper.js +40 -0
  279. package/src/lights/AmbientLight.js +25 -0
  280. package/src/lights/DirectionalLight.js +57 -0
  281. package/src/lights/DirectionalLightShadow.js +15 -0
  282. package/src/lights/HemisphereLight.js +32 -0
  283. package/src/lights/Light.js +36 -0
  284. package/src/lights/LightProbe.js +43 -0
  285. package/src/lights/LightShadow.js +159 -0
  286. package/src/lights/PointLight.js +59 -0
  287. package/src/lights/PointLightShadow.js +21 -0
  288. package/src/lights/RectAreaLight.js +59 -0
  289. package/src/lights/SpotLight.js +102 -0
  290. package/src/lights/SpotLightShadow.js +24 -2
  291. package/src/lights/webgpu/IESSpotLight.js +21 -0
  292. package/src/loaders/Loader.js +132 -0
  293. package/src/loaders/MaterialLoader.js +7 -1
  294. package/src/loaders/nodes/NodeLoader.js +189 -0
  295. package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  296. package/src/loaders/nodes/NodeObjectLoader.js +151 -0
  297. package/src/materials/LineDashedMaterial.js +0 -1
  298. package/src/materials/Material.js +469 -7
  299. package/src/materials/MeshPhongMaterial.js +1 -1
  300. package/src/materials/MeshPhysicalMaterial.js +2 -2
  301. package/src/materials/MeshStandardMaterial.js +2 -2
  302. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
  303. package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  304. package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  305. package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
  306. package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  307. package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  308. package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  309. package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  310. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
  311. package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  312. package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
  313. package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  314. package/src/materials/nodes/NodeMaterial.js +1180 -0
  315. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
  316. package/src/materials/nodes/PointsNodeMaterial.js +153 -0
  317. package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
  318. package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
  319. package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
  320. package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
  321. package/src/math/Box2.js +177 -0
  322. package/src/math/Box3.js +243 -0
  323. package/src/math/Color.js +343 -0
  324. package/src/math/ColorManagement.js +143 -102
  325. package/src/math/Cylindrical.js +65 -6
  326. package/src/math/Euler.js +137 -4
  327. package/src/math/Frustum.js +83 -0
  328. package/src/math/Interpolant.js +87 -8
  329. package/src/math/Line3.js +96 -2
  330. package/src/math/MathUtils.js +182 -19
  331. package/src/math/Matrix2.js +70 -0
  332. package/src/math/Matrix3.js +229 -4
  333. package/src/math/Matrix4.js +368 -3
  334. package/src/math/Plane.js +164 -2
  335. package/src/math/Quaternion.js +265 -9
  336. package/src/math/Ray.js +160 -0
  337. package/src/math/Sphere.js +147 -0
  338. package/src/math/Spherical.js +73 -11
  339. package/src/math/SphericalHarmonics3.js +112 -14
  340. package/src/math/Triangle.js +230 -2
  341. package/src/math/Vector2.js +396 -10
  342. package/src/math/Vector3.js +550 -13
  343. package/src/math/Vector4.js +415 -9
  344. package/src/math/interpolants/CubicInterpolant.js +10 -1
  345. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  346. package/src/math/interpolants/LinearInterpolant.js +13 -0
  347. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  348. package/src/nodes/Nodes.js +84 -166
  349. package/src/nodes/TSL.js +167 -0
  350. package/src/nodes/accessors/AccessorsUtils.js +39 -10
  351. package/src/nodes/accessors/Arrays.js +68 -0
  352. package/src/nodes/accessors/BatchNode.js +93 -26
  353. package/src/nodes/accessors/Bitangent.js +54 -0
  354. package/src/nodes/accessors/BufferAttributeNode.js +189 -11
  355. package/src/nodes/accessors/BufferNode.js +70 -5
  356. package/src/nodes/accessors/BuiltinNode.js +63 -0
  357. package/src/nodes/accessors/Camera.js +129 -0
  358. package/src/nodes/accessors/ClippingNode.js +152 -43
  359. package/src/nodes/accessors/CubeTextureNode.js +76 -13
  360. package/src/nodes/accessors/InstanceNode.js +118 -35
  361. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  362. package/src/nodes/accessors/Lights.js +129 -0
  363. package/src/nodes/accessors/MaterialNode.js +394 -58
  364. package/src/nodes/accessors/MaterialProperties.js +57 -1
  365. package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
  366. package/src/nodes/accessors/ModelNode.js +159 -12
  367. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
  368. package/src/nodes/accessors/MorphNode.js +60 -13
  369. package/src/nodes/accessors/Normal.js +156 -0
  370. package/src/nodes/accessors/Object3DNode.js +154 -35
  371. package/src/nodes/accessors/PointUVNode.js +35 -6
  372. package/src/nodes/accessors/Position.js +64 -0
  373. package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  374. package/src/nodes/accessors/ReferenceNode.js +243 -6
  375. package/src/nodes/accessors/ReflectVector.js +36 -0
  376. package/src/nodes/accessors/RendererReferenceNode.js +57 -7
  377. package/src/nodes/accessors/SceneNode.js +98 -6
  378. package/src/nodes/accessors/SkinningNode.js +214 -21
  379. package/src/nodes/accessors/StorageBufferNode.js +288 -28
  380. package/src/nodes/accessors/StorageTextureNode.js +139 -12
  381. package/src/nodes/accessors/Tangent.js +62 -0
  382. package/src/nodes/accessors/Texture3DNode.js +98 -12
  383. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
  384. package/src/nodes/accessors/TextureNode.js +347 -34
  385. package/src/nodes/accessors/TextureSizeNode.js +51 -9
  386. package/src/nodes/accessors/UV.js +11 -0
  387. package/src/nodes/accessors/UniformArrayNode.js +241 -32
  388. package/src/nodes/accessors/UserDataNode.js +55 -7
  389. package/src/nodes/accessors/VelocityNode.js +223 -0
  390. package/src/nodes/accessors/VertexColorNode.js +45 -6
  391. package/src/nodes/code/CodeNode.js +108 -8
  392. package/src/nodes/code/ExpressionNode.js +38 -7
  393. package/src/nodes/code/FunctionCallNode.js +62 -11
  394. package/src/nodes/code/FunctionNode.js +54 -24
  395. package/src/nodes/code/ScriptableNode.js +241 -17
  396. package/src/nodes/code/ScriptableValueNode.js +93 -8
  397. package/src/nodes/core/ArrayNode.js +142 -0
  398. package/src/nodes/core/AssignNode.js +60 -12
  399. package/src/nodes/core/AttributeNode.js +55 -22
  400. package/src/nodes/core/BypassNode.js +59 -11
  401. package/src/nodes/core/CacheNode.js +64 -10
  402. package/src/nodes/core/ConstNode.js +38 -3
  403. package/src/nodes/core/ContextNode.js +87 -12
  404. package/src/nodes/core/IndexNode.js +102 -10
  405. package/src/nodes/core/InputNode.js +55 -3
  406. package/src/nodes/core/LightingModel.js +65 -5
  407. package/src/nodes/core/MRTNode.js +81 -7
  408. package/src/nodes/core/Node.js +368 -50
  409. package/src/nodes/core/NodeAttribute.js +38 -0
  410. package/src/nodes/core/NodeBuilder.js +1317 -83
  411. package/src/nodes/core/NodeCache.js +41 -2
  412. package/src/nodes/core/NodeCode.js +31 -0
  413. package/src/nodes/core/NodeFrame.js +123 -2
  414. package/src/nodes/core/NodeFunction.js +46 -0
  415. package/src/nodes/core/NodeFunctionInput.js +44 -0
  416. package/src/nodes/core/NodeParser.js +11 -0
  417. package/src/nodes/core/NodeUniform.js +52 -0
  418. package/src/nodes/core/NodeUtils.js +226 -6
  419. package/src/nodes/core/NodeVar.js +47 -1
  420. package/src/nodes/core/NodeVarying.js +28 -0
  421. package/src/nodes/core/OutputStructNode.js +61 -17
  422. package/src/nodes/core/ParameterNode.js +34 -4
  423. package/src/nodes/core/PropertyNode.js +296 -32
  424. package/src/nodes/core/StackNode.js +108 -8
  425. package/src/nodes/core/StructNode.js +120 -0
  426. package/src/nodes/core/StructType.js +13 -0
  427. package/src/nodes/core/StructTypeNode.js +116 -9
  428. package/src/nodes/core/TempNode.js +37 -7
  429. package/src/nodes/core/UniformGroupNode.js +98 -17
  430. package/src/nodes/core/UniformNode.js +72 -4
  431. package/src/nodes/core/VarNode.js +170 -13
  432. package/src/nodes/core/VaryingNode.js +109 -8
  433. package/src/nodes/core/constants.js +40 -0
  434. package/src/nodes/display/BlendModes.js +193 -0
  435. package/src/nodes/display/BumpMapNode.js +47 -10
  436. package/src/nodes/display/ColorAdjustment.js +141 -0
  437. package/src/nodes/display/ColorSpaceFunctions.js +54 -0
  438. package/src/nodes/display/ColorSpaceNode.js +147 -68
  439. package/src/nodes/display/FrontFacingNode.js +39 -6
  440. package/src/nodes/display/NormalMapNode.js +55 -13
  441. package/src/nodes/display/PassNode.js +420 -19
  442. package/src/nodes/display/PosterizeNode.js +40 -7
  443. package/src/nodes/display/RenderOutputNode.js +81 -13
  444. package/src/nodes/display/ScreenNode.js +286 -0
  445. package/src/nodes/display/ToneMappingFunctions.js +242 -0
  446. package/src/nodes/display/ToneMappingNode.js +68 -175
  447. package/src/nodes/display/ToonOutlinePassNode.js +183 -0
  448. package/src/nodes/display/ViewportDepthNode.js +210 -36
  449. package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
  450. package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
  451. package/src/nodes/display/ViewportTextureNode.js +68 -11
  452. package/src/nodes/fog/Fog.js +113 -0
  453. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  454. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  455. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  456. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  457. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  458. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  459. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  460. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  461. package/src/nodes/functions/BSDF/LTC.js +50 -6
  462. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  463. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  464. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  465. package/src/nodes/functions/BasicLightingModel.js +27 -6
  466. package/src/nodes/functions/PhongLightingModel.js +38 -8
  467. package/src/nodes/functions/PhysicalLightingModel.js +215 -51
  468. package/src/nodes/functions/ShadowMaskModel.js +24 -1
  469. package/src/nodes/functions/ToonLightingModel.js +24 -5
  470. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  471. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  472. package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
  473. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  474. package/src/nodes/functions/material/getRoughness.js +2 -2
  475. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  476. package/src/nodes/geometry/RangeNode.js +62 -7
  477. package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
  478. package/src/nodes/gpgpu/BarrierNode.js +89 -0
  479. package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
  480. package/src/nodes/gpgpu/ComputeNode.js +124 -9
  481. package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
  482. package/src/nodes/lighting/AONode.js +24 -3
  483. package/src/nodes/lighting/AmbientLightNode.js +16 -8
  484. package/src/nodes/lighting/AnalyticLightNode.js +151 -231
  485. package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
  486. package/src/nodes/lighting/BasicLightMapNode.js +25 -5
  487. package/src/nodes/lighting/DirectionalLightNode.js +19 -20
  488. package/src/nodes/lighting/EnvironmentNode.js +34 -17
  489. package/src/nodes/lighting/HemisphereLightNode.js +42 -11
  490. package/src/nodes/lighting/IESSpotLightNode.js +18 -9
  491. package/src/nodes/lighting/IrradianceNode.js +23 -3
  492. package/src/nodes/lighting/LightProbeNode.js +29 -36
  493. package/src/nodes/lighting/LightUtils.js +12 -4
  494. package/src/nodes/lighting/LightingContextNode.js +70 -21
  495. package/src/nodes/lighting/LightingNode.js +22 -9
  496. package/src/nodes/lighting/LightsNode.js +309 -86
  497. package/src/nodes/lighting/PointLightNode.js +66 -32
  498. package/src/nodes/lighting/PointShadowNode.js +306 -0
  499. package/src/nodes/lighting/RectAreaLightNode.js +61 -25
  500. package/src/nodes/lighting/ShadowBaseNode.js +92 -0
  501. package/src/nodes/lighting/ShadowNode.js +812 -0
  502. package/src/nodes/lighting/SpotLightNode.js +73 -31
  503. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  504. package/src/nodes/materialx/lib/mx_hsv.js +27 -22
  505. package/src/nodes/materialx/lib/mx_noise.js +70 -70
  506. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  507. package/src/nodes/math/ConditionalNode.js +230 -0
  508. package/src/nodes/math/Hash.js +21 -0
  509. package/src/nodes/math/MathNode.js +812 -131
  510. package/src/nodes/math/MathUtils.js +47 -8
  511. package/src/nodes/math/OperatorNode.js +410 -66
  512. package/src/nodes/math/TriNoise3D.js +32 -32
  513. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  514. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  515. package/src/nodes/pmrem/PMREMNode.js +188 -28
  516. package/src/nodes/pmrem/PMREMUtils.js +24 -24
  517. package/src/nodes/procedural/Checker.js +22 -0
  518. package/src/nodes/shapes/Shapes.js +32 -0
  519. package/src/nodes/tsl/TSLBase.js +31 -0
  520. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
  521. package/src/nodes/utils/ArrayElementNode.js +45 -5
  522. package/src/nodes/utils/ConvertNode.js +39 -4
  523. package/src/nodes/utils/CubeMapNode.js +88 -8
  524. package/src/nodes/utils/Discard.js +24 -0
  525. package/src/nodes/utils/EquirectUVNode.js +39 -7
  526. package/src/nodes/utils/FlipNode.js +106 -0
  527. package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
  528. package/src/nodes/utils/JoinNode.js +31 -3
  529. package/src/nodes/utils/LoopNode.js +95 -9
  530. package/src/nodes/utils/MatcapUVNode.js +27 -8
  531. package/src/nodes/utils/MaxMipLevelNode.js +57 -6
  532. package/src/nodes/utils/MemberNode.js +68 -0
  533. package/src/nodes/utils/Oscillators.js +41 -0
  534. package/src/nodes/utils/Packing.js +21 -0
  535. package/src/nodes/utils/PostProcessingUtils.js +95 -0
  536. package/src/nodes/utils/RTTNode.js +141 -9
  537. package/src/nodes/utils/ReflectorNode.js +295 -21
  538. package/src/nodes/utils/RemapNode.js +93 -10
  539. package/src/nodes/utils/RotateNode.js +48 -13
  540. package/src/nodes/utils/SetNode.js +50 -4
  541. package/src/nodes/utils/SplitNode.js +62 -6
  542. package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
  543. package/src/nodes/utils/SpriteUtils.js +21 -5
  544. package/src/nodes/utils/StorageArrayElementNode.js +64 -12
  545. package/src/nodes/utils/Timer.js +73 -0
  546. package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
  547. package/src/nodes/utils/UVUtils.js +27 -9
  548. package/src/nodes/utils/ViewportUtils.js +16 -4
  549. package/src/objects/BatchedMesh.js +808 -281
  550. package/src/objects/Bone.js +24 -0
  551. package/src/objects/ClippingGroup.js +68 -0
  552. package/src/objects/Group.js +24 -0
  553. package/src/objects/InstancedMesh.js +120 -2
  554. package/src/objects/LOD.js +120 -5
  555. package/src/objects/Line.js +89 -6
  556. package/src/objects/LineLoop.js +20 -0
  557. package/src/objects/LineSegments.js +18 -0
  558. package/src/objects/Mesh.js +82 -23
  559. package/src/objects/Points.js +62 -0
  560. package/src/objects/Skeleton.js +107 -2
  561. package/src/objects/SkinnedMesh.js +99 -5
  562. package/src/objects/Sprite.js +54 -0
  563. package/src/renderers/WebGLRenderer.js +274 -157
  564. package/src/renderers/common/Animation.js +109 -12
  565. package/src/renderers/common/Attributes.js +40 -0
  566. package/src/renderers/common/Backend.js +504 -44
  567. package/src/renderers/common/Background.js +67 -9
  568. package/src/renderers/common/BindGroup.js +45 -1
  569. package/src/renderers/common/Binding.js +35 -0
  570. package/src/renderers/common/Bindings.js +136 -19
  571. package/src/renderers/common/Buffer.js +49 -0
  572. package/src/renderers/common/BufferUtils.js +25 -0
  573. package/src/renderers/common/BundleGroup.js +83 -0
  574. package/src/renderers/common/ChainMap.js +45 -6
  575. package/src/renderers/common/ClippingContext.js +175 -80
  576. package/src/renderers/common/Color4.js +40 -0
  577. package/src/renderers/common/ComputePipeline.js +24 -0
  578. package/src/renderers/common/Constants.js +2 -1
  579. package/src/renderers/common/CubeRenderTarget.js +22 -3
  580. package/src/renderers/common/DataMap.js +37 -1
  581. package/src/renderers/common/Geometries.js +111 -14
  582. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  583. package/src/renderers/common/Info.js +78 -35
  584. package/src/renderers/common/Lighting.js +73 -0
  585. package/src/renderers/common/Pipeline.js +22 -0
  586. package/src/renderers/common/Pipelines.js +148 -5
  587. package/src/renderers/common/PostProcessing.js +112 -11
  588. package/src/renderers/common/ProgrammableStage.js +60 -2
  589. package/src/renderers/common/QuadMesh.js +56 -5
  590. package/src/renderers/common/RenderBundle.js +14 -8
  591. package/src/renderers/common/RenderBundles.js +39 -10
  592. package/src/renderers/common/RenderContext.js +205 -7
  593. package/src/renderers/common/RenderContexts.js +59 -6
  594. package/src/renderers/common/RenderList.js +230 -21
  595. package/src/renderers/common/RenderLists.js +45 -6
  596. package/src/renderers/common/RenderObject.js +552 -41
  597. package/src/renderers/common/RenderObjects.js +118 -9
  598. package/src/renderers/common/RenderPipeline.js +24 -0
  599. package/src/renderers/common/Renderer.js +1537 -239
  600. package/src/renderers/common/RendererUtils.js +191 -0
  601. package/src/renderers/common/SampledTexture.js +132 -3
  602. package/src/renderers/common/Sampler.js +30 -0
  603. package/src/renderers/common/StorageBuffer.js +24 -0
  604. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  605. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  606. package/src/renderers/common/StorageTexture.js +38 -0
  607. package/src/renderers/common/Textures.js +142 -32
  608. package/src/renderers/common/TimestampQueryPool.js +98 -0
  609. package/src/renderers/common/Uniform.js +225 -3
  610. package/src/renderers/common/UniformBuffer.js +19 -0
  611. package/src/renderers/common/UniformsGroup.js +157 -6
  612. package/src/renderers/common/XRManager.js +1185 -0
  613. package/src/renderers/common/XRRenderTarget.js +74 -0
  614. package/src/renderers/common/extras/PMREMGenerator.js +211 -53
  615. package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
  616. package/src/renderers/common/nodes/NodeLibrary.js +194 -0
  617. package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
  618. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  619. package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
  620. package/src/renderers/common/nodes/NodeUniform.js +285 -2
  621. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  622. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  623. package/src/renderers/common/nodes/Nodes.js +390 -70
  624. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  625. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  626. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  627. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  628. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  629. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  630. package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -0
  631. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  632. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  633. package/src/renderers/webgl/WebGLBackground.js +24 -1
  634. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  635. package/src/renderers/webgl/WebGLCapabilities.js +2 -0
  636. package/src/renderers/webgl/WebGLGeometries.js +0 -28
  637. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  638. package/src/renderers/webgl/WebGLProgram.js +27 -29
  639. package/src/renderers/webgl/WebGLPrograms.js +24 -16
  640. package/src/renderers/webgl/WebGLState.js +68 -11
  641. package/src/renderers/webgl/WebGLTextures.js +49 -10
  642. package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
  643. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  644. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
  645. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
  646. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  647. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  648. package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
  649. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
  650. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
  651. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  652. package/src/renderers/webgpu/WebGPUBackend.js +816 -236
  653. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
  654. package/src/renderers/webgpu/WebGPURenderer.js +45 -6
  655. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
  656. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
  657. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
  658. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
  659. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  660. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
  661. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
  662. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
  663. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
  664. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
  665. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
  666. package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
  667. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  668. package/src/renderers/webxr/WebXRManager.js +54 -32
  669. package/src/scenes/Fog.js +60 -0
  670. package/src/scenes/FogExp2.js +51 -0
  671. package/src/scenes/Scene.js +87 -0
  672. package/src/textures/Data3DTexture.js +2 -2
  673. package/src/textures/DepthTexture.js +2 -0
  674. package/src/textures/Source.js +2 -2
  675. package/src/textures/Texture.js +368 -5
  676. package/src/textures/VideoFrameTexture.js +35 -0
  677. package/src/utils.js +33 -1
  678. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  679. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  680. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  681. package/examples/jsm/controls/Controls.js +0 -32
  682. package/examples/jsm/exporters/MMDExporter.js +0 -217
  683. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  684. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  685. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  686. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  687. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  688. package/examples/jsm/loaders/TiltLoader.js +0 -520
  689. package/examples/jsm/objects/InstancedPoints.js +0 -21
  690. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  691. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  692. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  693. package/src/nodes/accessors/BitangentNode.js +0 -13
  694. package/src/nodes/accessors/CameraNode.js +0 -19
  695. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  696. package/src/nodes/accessors/NormalNode.js +0 -14
  697. package/src/nodes/accessors/PositionNode.js +0 -10
  698. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  699. package/src/nodes/accessors/TangentNode.js +0 -23
  700. package/src/nodes/accessors/UVNode.js +0 -3
  701. package/src/nodes/core/NodeKeywords.js +0 -80
  702. package/src/nodes/core/UniformGroup.js +0 -13
  703. package/src/nodes/display/AfterImageNode.js +0 -152
  704. package/src/nodes/display/AnamorphicNode.js +0 -145
  705. package/src/nodes/display/BlendModeNode.js +0 -128
  706. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  707. package/src/nodes/display/DenoiseNode.js +0 -198
  708. package/src/nodes/display/DotScreenNode.js +0 -75
  709. package/src/nodes/display/FXAANode.js +0 -327
  710. package/src/nodes/display/FilmNode.js +0 -52
  711. package/src/nodes/display/GTAONode.js +0 -324
  712. package/src/nodes/display/GaussianBlurNode.js +0 -207
  713. package/src/nodes/display/Lut3DNode.js +0 -53
  714. package/src/nodes/display/RGBShiftNode.js +0 -49
  715. package/src/nodes/display/SepiaNode.js +0 -18
  716. package/src/nodes/display/TransitionNode.js +0 -76
  717. package/src/nodes/display/ViewportNode.js +0 -137
  718. package/src/nodes/fog/FogExp2Node.js +0 -34
  719. package/src/nodes/fog/FogNode.js +0 -48
  720. package/src/nodes/fog/FogRangeNode.js +0 -35
  721. package/src/nodes/lighting/LightNode.js +0 -57
  722. package/src/nodes/loaders/NodeLoader.js +0 -110
  723. package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
  724. package/src/nodes/loaders/NodeObjectLoader.js +0 -71
  725. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  726. package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
  727. package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
  728. package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
  729. package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
  730. package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
  731. package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  732. package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
  733. package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
  734. package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
  735. package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
  736. package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
  737. package/src/nodes/materials/NodeMaterial.js +0 -680
  738. package/src/nodes/materials/PointsNodeMaterial.js +0 -39
  739. package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
  740. package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
  741. package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
  742. package/src/nodes/math/CondNode.js +0 -139
  743. package/src/nodes/math/HashNode.js +0 -34
  744. package/src/nodes/procedural/CheckerNode.js +0 -42
  745. package/src/nodes/utils/DiscardNode.js +0 -28
  746. package/src/nodes/utils/OscNode.js +0 -81
  747. package/src/nodes/utils/PackingNode.js +0 -55
  748. package/src/nodes/utils/TimerNode.js +0 -94
@@ -1,11 +1,31 @@
1
1
  import { Line } from './Line.js';
2
2
 
3
+ /**
4
+ * A continuous line. This is nearly the same as {@link Line} the only difference
5
+ * is that the last vertex is connected with the first vertex in order to close
6
+ * the line to form a loop.
7
+ *
8
+ * @augments Line
9
+ */
3
10
  class LineLoop extends Line {
4
11
 
12
+ /**
13
+ * Constructs a new line loop.
14
+ *
15
+ * @param {BufferGeometry} [geometry] - The line geometry.
16
+ * @param {Material|Array<Material>} [material] - The line material.
17
+ */
5
18
  constructor( geometry, material ) {
6
19
 
7
20
  super( geometry, material );
8
21
 
22
+ /**
23
+ * This flag can be used for type testing.
24
+ *
25
+ * @type {boolean}
26
+ * @readonly
27
+ * @default true
28
+ */
9
29
  this.isLineLoop = true;
10
30
 
11
31
  this.type = 'LineLoop';
@@ -5,12 +5,30 @@ import { Float32BufferAttribute } from '../core/BufferAttribute.js';
5
5
  const _start = /*@__PURE__*/ new Vector3();
6
6
  const _end = /*@__PURE__*/ new Vector3();
7
7
 
8
+ /**
9
+ * A series of lines drawn between pairs of vertices.
10
+ *
11
+ * @augments Line
12
+ */
8
13
  class LineSegments extends Line {
9
14
 
15
+ /**
16
+ * Constructs a new line segments.
17
+ *
18
+ * @param {BufferGeometry} [geometry] - The line geometry.
19
+ * @param {Material|Array<Material>} [material] - The line material.
20
+ */
10
21
  constructor( geometry, material ) {
11
22
 
12
23
  super( geometry, material );
13
24
 
25
+ /**
26
+ * This flag can be used for type testing.
27
+ *
28
+ * @type {boolean}
29
+ * @readonly
30
+ * @default true
31
+ */
14
32
  this.isLineSegments = true;
15
33
 
16
34
  this.type = 'LineSegments';
@@ -21,30 +21,79 @@ const _vC = /*@__PURE__*/ new Vector3();
21
21
  const _tempA = /*@__PURE__*/ new Vector3();
22
22
  const _morphA = /*@__PURE__*/ new Vector3();
23
23
 
24
- const _uvA = /*@__PURE__*/ new Vector2();
25
- const _uvB = /*@__PURE__*/ new Vector2();
26
- const _uvC = /*@__PURE__*/ new Vector2();
27
-
28
- const _normalA = /*@__PURE__*/ new Vector3();
29
- const _normalB = /*@__PURE__*/ new Vector3();
30
- const _normalC = /*@__PURE__*/ new Vector3();
31
-
32
24
  const _intersectionPoint = /*@__PURE__*/ new Vector3();
33
25
  const _intersectionPointWorld = /*@__PURE__*/ new Vector3();
34
26
 
27
+ /**
28
+ * Class representing triangular polygon mesh based objects.
29
+ *
30
+ * ```js
31
+ * const geometry = new THREE.BoxGeometry( 1, 1, 1 );
32
+ * const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
33
+ * const mesh = new THREE.Mesh( geometry, material );
34
+ * scene.add( mesh );
35
+ * ```
36
+ *
37
+ * @augments Object3D
38
+ */
35
39
  class Mesh extends Object3D {
36
40
 
41
+ /**
42
+ * Constructs a new mesh.
43
+ *
44
+ * @param {BufferGeometry} [geometry] - The mesh geometry.
45
+ * @param {Material|Array<Material>} [material] - The mesh material.
46
+ */
37
47
  constructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {
38
48
 
39
49
  super();
40
50
 
51
+ /**
52
+ * This flag can be used for type testing.
53
+ *
54
+ * @type {boolean}
55
+ * @readonly
56
+ * @default true
57
+ */
41
58
  this.isMesh = true;
42
59
 
43
60
  this.type = 'Mesh';
44
61
 
62
+ /**
63
+ * The mesh geometry.
64
+ *
65
+ * @type {BufferGeometry}
66
+ */
45
67
  this.geometry = geometry;
68
+
69
+ /**
70
+ * The mesh material.
71
+ *
72
+ * @type {Material|Array<Material>}
73
+ * @default MeshBasicMaterial
74
+ */
46
75
  this.material = material;
47
76
 
77
+ /**
78
+ * A dictionary representing the morph targets in the geometry. The key is the
79
+ * morph targets name, the value its attribute index. This member is `undefined`
80
+ * by default and only set when morph targets are detected in the geometry.
81
+ *
82
+ * @type {Object<String,number>|undefined}
83
+ * @default undefined
84
+ */
85
+ this.morphTargetDictionary = undefined;
86
+
87
+ /**
88
+ * An array of weights typically in the range `[0,1]` that specify how much of the morph
89
+ * is applied. This member is `undefined` by default and only set when morph targets are
90
+ * detected in the geometry.
91
+ *
92
+ * @type {Array<number>|undefined}
93
+ * @default undefined
94
+ */
95
+ this.morphTargetInfluences = undefined;
96
+
48
97
  this.updateMorphTargets();
49
98
 
50
99
  }
@@ -72,6 +121,10 @@ class Mesh extends Object3D {
72
121
 
73
122
  }
74
123
 
124
+ /**
125
+ * Sets the values of {@link Mesh#morphTargetDictionary} and {@link Mesh#morphTargetInfluences}
126
+ * to make sure existing morph targets can influence this 3D object.
127
+ */
75
128
  updateMorphTargets() {
76
129
 
77
130
  const geometry = this.geometry;
@@ -103,6 +156,14 @@ class Mesh extends Object3D {
103
156
 
104
157
  }
105
158
 
159
+ /**
160
+ * Returns the local-space position of the vertex at the given index, taking into
161
+ * account the current animation state of both morph targets and skinning.
162
+ *
163
+ * @param {number} index - The vertex index.
164
+ * @param {Vector3} target - The target object that is used to store the method's result.
165
+ * @return {Vector3} The vertex position in local space.
166
+ */
106
167
  getVertexPosition( index, target ) {
107
168
 
108
169
  const geometry = this.geometry;
@@ -147,6 +208,12 @@ class Mesh extends Object3D {
147
208
 
148
209
  }
149
210
 
211
+ /**
212
+ * Computes intersection points between a casted ray and this line.
213
+ *
214
+ * @param {Raycaster} raycaster - The raycaster.
215
+ * @param {Array<Object>} intersects - The target array that holds the intersection points.
216
+ */
150
217
  raycast( raycaster, intersects ) {
151
218
 
152
219
  const geometry = this.geometry;
@@ -371,33 +438,24 @@ function checkGeometryIntersection( object, material, raycaster, ray, uv, uv1, n
371
438
 
372
439
  if ( intersection ) {
373
440
 
374
- if ( uv ) {
441
+ const barycoord = new Vector3();
442
+ Triangle.getBarycoord( _intersectionPoint, _vA, _vB, _vC, barycoord );
375
443
 
376
- _uvA.fromBufferAttribute( uv, a );
377
- _uvB.fromBufferAttribute( uv, b );
378
- _uvC.fromBufferAttribute( uv, c );
444
+ if ( uv ) {
379
445
 
380
- intersection.uv = Triangle.getInterpolation( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );
446
+ intersection.uv = Triangle.getInterpolatedAttribute( uv, a, b, c, barycoord, new Vector2() );
381
447
 
382
448
  }
383
449
 
384
450
  if ( uv1 ) {
385
451
 
386
- _uvA.fromBufferAttribute( uv1, a );
387
- _uvB.fromBufferAttribute( uv1, b );
388
- _uvC.fromBufferAttribute( uv1, c );
389
-
390
- intersection.uv1 = Triangle.getInterpolation( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );
452
+ intersection.uv1 = Triangle.getInterpolatedAttribute( uv1, a, b, c, barycoord, new Vector2() );
391
453
 
392
454
  }
393
455
 
394
456
  if ( normal ) {
395
457
 
396
- _normalA.fromBufferAttribute( normal, a );
397
- _normalB.fromBufferAttribute( normal, b );
398
- _normalC.fromBufferAttribute( normal, c );
399
-
400
- intersection.normal = Triangle.getInterpolation( _intersectionPoint, _vA, _vB, _vC, _normalA, _normalB, _normalC, new Vector3() );
458
+ intersection.normal = Triangle.getInterpolatedAttribute( normal, a, b, c, barycoord, new Vector3() );
401
459
 
402
460
  if ( intersection.normal.dot( ray.direction ) > 0 ) {
403
461
 
@@ -418,6 +476,7 @@ function checkGeometryIntersection( object, material, raycaster, ray, uv, uv1, n
418
476
  Triangle.getNormal( _vA, _vB, _vC, face.normal );
419
477
 
420
478
  intersection.face = face;
479
+ intersection.barycoord = barycoord;
421
480
 
422
481
  }
423
482
 
@@ -11,19 +11,69 @@ const _ray = /*@__PURE__*/ new Ray();
11
11
  const _sphere = /*@__PURE__*/ new Sphere();
12
12
  const _position = /*@__PURE__*/ new Vector3();
13
13
 
14
+ /**
15
+ * A class for displaying points or point clouds.
16
+ *
17
+ * @augments Object3D
18
+ */
14
19
  class Points extends Object3D {
15
20
 
21
+ /**
22
+ * Constructs a new point cloud.
23
+ *
24
+ * @param {BufferGeometry} [geometry] - The points geometry.
25
+ * @param {Material|Array<Material>} [material] - The points material.
26
+ */
16
27
  constructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {
17
28
 
18
29
  super();
19
30
 
31
+ /**
32
+ * This flag can be used for type testing.
33
+ *
34
+ * @type {boolean}
35
+ * @readonly
36
+ * @default true
37
+ */
20
38
  this.isPoints = true;
21
39
 
22
40
  this.type = 'Points';
23
41
 
42
+ /**
43
+ * The points geometry.
44
+ *
45
+ * @type {BufferGeometry}
46
+ */
24
47
  this.geometry = geometry;
48
+
49
+ /**
50
+ * The line material.
51
+ *
52
+ * @type {Material|Array<Material>}
53
+ * @default PointsMaterial
54
+ */
25
55
  this.material = material;
26
56
 
57
+ /**
58
+ * A dictionary representing the morph targets in the geometry. The key is the
59
+ * morph targets name, the value its attribute index. This member is `undefined`
60
+ * by default and only set when morph targets are detected in the geometry.
61
+ *
62
+ * @type {Object<String,number>|undefined}
63
+ * @default undefined
64
+ */
65
+ this.morphTargetDictionary = undefined;
66
+
67
+ /**
68
+ * An array of weights typically in the range `[0,1]` that specify how much of the morph
69
+ * is applied. This member is `undefined` by default and only set when morph targets are
70
+ * detected in the geometry.
71
+ *
72
+ * @type {Array<number>|undefined}
73
+ * @default undefined
74
+ */
75
+ this.morphTargetInfluences = undefined;
76
+
27
77
  this.updateMorphTargets();
28
78
 
29
79
  }
@@ -39,6 +89,12 @@ class Points extends Object3D {
39
89
 
40
90
  }
41
91
 
92
+ /**
93
+ * Computes intersection points between a casted ray and this point cloud.
94
+ *
95
+ * @param {Raycaster} raycaster - The raycaster.
96
+ * @param {Array<Object>} intersects - The target array that holds the intersection points.
97
+ */
42
98
  raycast( raycaster, intersects ) {
43
99
 
44
100
  const geometry = this.geometry;
@@ -100,6 +156,10 @@ class Points extends Object3D {
100
156
 
101
157
  }
102
158
 
159
+ /**
160
+ * Sets the values of {@link Points#morphTargetDictionary} and {@link Points#morphTargetInfluences}
161
+ * to make sure existing morph targets can influence this 3D object.
162
+ */
103
163
  updateMorphTargets() {
104
164
 
105
165
  const geometry = this.geometry;
@@ -155,6 +215,8 @@ function testPoint( point, index, localThresholdSq, matrixWorld, raycaster, inte
155
215
  point: intersectPoint,
156
216
  index: index,
157
217
  face: null,
218
+ faceIndex: null,
219
+ barycoord: null,
158
220
  object: object
159
221
 
160
222
  } );
@@ -5,27 +5,88 @@ import {
5
5
  import { Bone } from './Bone.js';
6
6
  import { Matrix4 } from '../math/Matrix4.js';
7
7
  import { DataTexture } from '../textures/DataTexture.js';
8
- import * as MathUtils from '../math/MathUtils.js';
8
+ import { generateUUID } from '../math/MathUtils.js';
9
9
 
10
10
  const _offsetMatrix = /*@__PURE__*/ new Matrix4();
11
11
  const _identityMatrix = /*@__PURE__*/ new Matrix4();
12
12
 
13
+ /**
14
+ * Class for representing the armatures in `three.js`. The skeleton
15
+ * is defined by a hierarchy of bones.
16
+ *
17
+ * ```js
18
+ * const bones = [];
19
+ *
20
+ * const shoulder = new THREE.Bone();
21
+ * const elbow = new THREE.Bone();
22
+ * const hand = new THREE.Bone();
23
+ *
24
+ * shoulder.add( elbow );
25
+ * elbow.add( hand );
26
+ *
27
+ * bones.push( shoulder , elbow, hand);
28
+ *
29
+ * shoulder.position.y = -5;
30
+ * elbow.position.y = 0;
31
+ * hand.position.y = 5;
32
+ *
33
+ * const armSkeleton = new THREE.Skeleton( bones );
34
+ * ```
35
+ */
13
36
  class Skeleton {
14
37
 
38
+ /**
39
+ * Constructs a new skeleton.
40
+ *
41
+ * @param {Array<Bone>} [bones] - An array of bones.
42
+ * @param {Array<Matrix4>} [boneInverses] - An array of bone inverse matrices.
43
+ * If not provided, these matrices will be computed automatically via {@link Skeleton#calculateInverses}.
44
+ */
15
45
  constructor( bones = [], boneInverses = [] ) {
16
46
 
17
- this.uuid = MathUtils.generateUUID();
47
+ this.uuid = generateUUID();
18
48
 
49
+ /**
50
+ * An array of bones defining the skeleton.
51
+ *
52
+ * @type {Array<Bone>}
53
+ */
19
54
  this.bones = bones.slice( 0 );
55
+
56
+ /**
57
+ * An array of bone inverse matrices.
58
+ *
59
+ * @type {Array<Matrix4>}
60
+ */
20
61
  this.boneInverses = boneInverses;
62
+
63
+ /**
64
+ * An array buffer holding the bone data.
65
+ * Input data for {@link Skeleton#boneTexture}.
66
+ *
67
+ * @type {?Float32Array}
68
+ * @default null
69
+ */
21
70
  this.boneMatrices = null;
22
71
 
72
+ /**
73
+ * A texture holding the bone data for use
74
+ * in the vertex shader.
75
+ *
76
+ * @type {?DataTexture}
77
+ * @default null
78
+ */
23
79
  this.boneTexture = null;
24
80
 
25
81
  this.init();
26
82
 
27
83
  }
28
84
 
85
+ /**
86
+ * Initializes the skeleton. This method gets automatically called by the constructor
87
+ * but depending on how the skeleton is created it might be necessary to call this method
88
+ * manually.
89
+ */
29
90
  init() {
30
91
 
31
92
  const bones = this.bones;
@@ -61,6 +122,10 @@ class Skeleton {
61
122
 
62
123
  }
63
124
 
125
+ /**
126
+ * Computes the bone inverse matrices. This method resets {@link Skeleton#boneInverses}
127
+ * and fills it with new matrices.
128
+ */
64
129
  calculateInverses() {
65
130
 
66
131
  this.boneInverses.length = 0;
@@ -81,6 +146,9 @@ class Skeleton {
81
146
 
82
147
  }
83
148
 
149
+ /**
150
+ * Resets the skeleton to the base pose.
151
+ */
84
152
  pose() {
85
153
 
86
154
  // recover the bind-time world matrices
@@ -124,6 +192,9 @@ class Skeleton {
124
192
 
125
193
  }
126
194
 
195
+ /**
196
+ * Resets the skeleton to the base pose.
197
+ */
127
198
  update() {
128
199
 
129
200
  const bones = this.bones;
@@ -152,12 +223,22 @@ class Skeleton {
152
223
 
153
224
  }
154
225
 
226
+ /**
227
+ * Returns a new skeleton with copied values from this instance.
228
+ *
229
+ * @return {Skeleton} A clone of this instance.
230
+ */
155
231
  clone() {
156
232
 
157
233
  return new Skeleton( this.bones, this.boneInverses );
158
234
 
159
235
  }
160
236
 
237
+ /**
238
+ * Computes a data texture for passing bone data to the vertex shader.
239
+ *
240
+ * @return {Skeleton} A reference of this instance.
241
+ */
161
242
  computeBoneTexture() {
162
243
 
163
244
  // layout (1 matrix = 4 pixels)
@@ -184,6 +265,13 @@ class Skeleton {
184
265
 
185
266
  }
186
267
 
268
+ /**
269
+ * Searches through the skeleton's bone array and returns the first with a
270
+ * matching name.
271
+ *
272
+ * @param {string} name - The name of the bone.
273
+ * @return {Bone|undefined} The found bone. `undefined` if no bone has been found.
274
+ */
187
275
  getBoneByName( name ) {
188
276
 
189
277
  for ( let i = 0, il = this.bones.length; i < il; i ++ ) {
@@ -202,6 +290,10 @@ class Skeleton {
202
290
 
203
291
  }
204
292
 
293
+ /**
294
+ * Frees the GPU-related resources allocated by this instance. Call this
295
+ * method whenever this instance is no longer used in your app.
296
+ */
205
297
  dispose( ) {
206
298
 
207
299
  if ( this.boneTexture !== null ) {
@@ -214,6 +306,13 @@ class Skeleton {
214
306
 
215
307
  }
216
308
 
309
+ /**
310
+ * Setups the skeleton by the given JSON and bones.
311
+ *
312
+ * @param {Object} json - The skeleton as serialized JSON.
313
+ * @param {Array<Bone>} bones - An array of bones.
314
+ * @return {Skeleton} A reference of this instance.
315
+ */
217
316
  fromJSON( json, bones ) {
218
317
 
219
318
  this.uuid = json.uuid;
@@ -241,6 +340,12 @@ class Skeleton {
241
340
 
242
341
  }
243
342
 
343
+ /**
344
+ * Serializes the skeleton into JSON.
345
+ *
346
+ * @return {Object} A JSON object representing the serialized skeleton.
347
+ * @see {@link ObjectLoader#parse}
348
+ */
244
349
  toJSON() {
245
350
 
246
351
  const data = {
@@ -20,25 +20,90 @@ const _sphere = /*@__PURE__*/ new Sphere();
20
20
  const _inverseMatrix = /*@__PURE__*/ new Matrix4();
21
21
  const _ray = /*@__PURE__*/ new Ray();
22
22
 
23
+ /**
24
+ * A mesh that has a {@link Skeleton} that can then be used to animate the
25
+ * vertices of the geometry with skinning/skeleton animation.
26
+ *
27
+ * Next to a valid skeleton, the skinned mesh requires skin indices and weights
28
+ * as buffer attributes in its geometry. These attribute define which bones affect a single
29
+ * vertex to a certain extend.
30
+ *
31
+ * Typically skinned meshes are not created manually but loaders like {@link GLTFLoader}
32
+ * or {@link FBXLoader } import respective models.
33
+ *
34
+ * @augments Mesh
35
+ */
23
36
  class SkinnedMesh extends Mesh {
24
37
 
38
+ /**
39
+ * Constructs a new skinned mesh.
40
+ *
41
+ * @param {BufferGeometry} [geometry] - The mesh geometry.
42
+ * @param {Material|Array<Material>} [material] - The mesh material.
43
+ */
25
44
  constructor( geometry, material ) {
26
45
 
27
46
  super( geometry, material );
28
47
 
48
+ /**
49
+ * This flag can be used for type testing.
50
+ *
51
+ * @type {boolean}
52
+ * @readonly
53
+ * @default true
54
+ */
29
55
  this.isSkinnedMesh = true;
30
56
 
31
57
  this.type = 'SkinnedMesh';
32
58
 
59
+ /**
60
+ * `AttachedBindMode` means the skinned mesh shares the same world space as the skeleton.
61
+ * This is not true when using `DetachedBindMode` which is useful when sharing a skeleton
62
+ * across multiple skinned meshes.
63
+ *
64
+ * @type {(AttachedBindMode|DetachedBindMode)}
65
+ * @default AttachedBindMode
66
+ */
33
67
  this.bindMode = AttachedBindMode;
68
+
69
+ /**
70
+ * The base matrix that is used for the bound bone transforms.
71
+ *
72
+ * @type {Matrix4}
73
+ */
34
74
  this.bindMatrix = new Matrix4();
75
+
76
+ /**
77
+ * The base matrix that is used for resetting the bound bone transforms.
78
+ *
79
+ * @type {Matrix4}
80
+ */
35
81
  this.bindMatrixInverse = new Matrix4();
36
82
 
83
+ /**
84
+ * The bounding box of the skinned mesh. Can be computed via {@link SkinnedMesh#computeBoundingBox}.
85
+ *
86
+ * @type {?Box3}
87
+ * @default null
88
+ */
37
89
  this.boundingBox = null;
90
+
91
+ /**
92
+ * The bounding sphere of the skinned mesh. Can be computed via {@link SkinnedMesh#computeBoundingSphere}.
93
+ *
94
+ * @type {?Sphere}
95
+ * @default null
96
+ */
38
97
  this.boundingSphere = null;
39
98
 
40
99
  }
41
100
 
101
+ /**
102
+ * Computes the bounding box of the skinned mesh, and updates {@link SkinnedMesh#boundingBox}.
103
+ * The bounding box is not automatically computed by the engine; this method must be called by your app.
104
+ * If the skinned mesh is animated, the bounding box should be recomputed per frame in order to reflect
105
+ * the current animation state.
106
+ */
42
107
  computeBoundingBox() {
43
108
 
44
109
  const geometry = this.geometry;
@@ -62,6 +127,12 @@ class SkinnedMesh extends Mesh {
62
127
 
63
128
  }
64
129
 
130
+ /**
131
+ * Computes the bounding sphere of the skinned mesh, and updates {@link SkinnedMesh#boundingSphere}.
132
+ * The bounding sphere is automatically computed by the engine once when it is needed, e.g., for ray casting
133
+ * and view frustum culling. If the skinned mesh is animated, the bounding sphere should be recomputed
134
+ * per frame in order to reflect the current animation state.
135
+ */
65
136
  computeBoundingSphere() {
66
137
 
67
138
  const geometry = this.geometry;
@@ -147,6 +218,13 @@ class SkinnedMesh extends Mesh {
147
218
 
148
219
  }
149
220
 
221
+ /**
222
+ * Binds the given skeleton to the skinned mesh.
223
+ *
224
+ * @param {Skeleton} skeleton - The skeleton to bind.
225
+ * @param {Matrix4} [bindMatrix] - The bind matrix. If no bind matrix is provided,
226
+ * the skinned mesh's world matrix will be used instead.
227
+ */
150
228
  bind( skeleton, bindMatrix ) {
151
229
 
152
230
  this.skeleton = skeleton;
@@ -166,12 +244,19 @@ class SkinnedMesh extends Mesh {
166
244
 
167
245
  }
168
246
 
247
+ /**
248
+ * This method sets the skinned mesh in the rest pose).
249
+ */
169
250
  pose() {
170
251
 
171
252
  this.skeleton.pose();
172
253
 
173
254
  }
174
255
 
256
+ /**
257
+ * Normalizes the skin weights which are defined as a buffer attribute
258
+ * in the skinned mesh's geometry.
259
+ */
175
260
  normalizeSkinWeights() {
176
261
 
177
262
  const vector = new Vector4();
@@ -220,7 +305,16 @@ class SkinnedMesh extends Mesh {
220
305
 
221
306
  }
222
307
 
223
- applyBoneTransform( index, vector ) {
308
+ /**
309
+ * Applies the bone transform associated with the given index to the given
310
+ * vertex position. Returns the updated vector.
311
+ *
312
+ * @param {number} index - The vertex index.
313
+ * @param {Vector3} target - The target object that is used to store the method's result.
314
+ * the skinned mesh's world matrix will be used instead.
315
+ * @return {Vector3} The updated vertex position.
316
+ */
317
+ applyBoneTransform( index, target ) {
224
318
 
225
319
  const skeleton = this.skeleton;
226
320
  const geometry = this.geometry;
@@ -228,9 +322,9 @@ class SkinnedMesh extends Mesh {
228
322
  _skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );
229
323
  _skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );
230
324
 
231
- _basePosition.copy( vector ).applyMatrix4( this.bindMatrix );
325
+ _basePosition.copy( target ).applyMatrix4( this.bindMatrix );
232
326
 
233
- vector.set( 0, 0, 0 );
327
+ target.set( 0, 0, 0 );
234
328
 
235
329
  for ( let i = 0; i < 4; i ++ ) {
236
330
 
@@ -242,13 +336,13 @@ class SkinnedMesh extends Mesh {
242
336
 
243
337
  _matrix4.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );
244
338
 
245
- vector.addScaledVector( _vector3.copy( _basePosition ).applyMatrix4( _matrix4 ), weight );
339
+ target.addScaledVector( _vector3.copy( _basePosition ).applyMatrix4( _matrix4 ), weight );
246
340
 
247
341
  }
248
342
 
249
343
  }
250
344
 
251
- return vector.applyMatrix4( this.bindMatrixInverse );
345
+ return target.applyMatrix4( this.bindMatrixInverse );
252
346
 
253
347
  }
254
348