super-three 0.181.0 → 0.185.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 (693) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +21332 -19201
  4. package/build/three.core.js +20908 -19853
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1947 -862
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +37 -16
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +33628 -25197
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +33394 -25000
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +14 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +13 -6
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +127 -86
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +102 -17
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMFrustum.js +31 -6
  26. package/examples/jsm/csm/CSMShadowNode.js +10 -3
  27. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  28. package/examples/jsm/effects/AsciiEffect.js +14 -1
  29. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  30. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  31. package/examples/jsm/exporters/DRACOExporter.js +27 -6
  32. package/examples/jsm/exporters/EXRExporter.js +1 -1
  33. package/examples/jsm/exporters/GLTFExporter.js +266 -21
  34. package/examples/jsm/exporters/PLYExporter.js +286 -73
  35. package/examples/jsm/exporters/USDZExporter.js +353 -99
  36. package/examples/jsm/generators/CityGenerator.js +346 -0
  37. package/examples/jsm/generators/ForestGenerator.js +347 -0
  38. package/examples/jsm/generators/TerrainGenerator.js +504 -0
  39. package/examples/jsm/generators/TreeGenerator.js +377 -0
  40. package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
  41. package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
  42. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  43. package/examples/jsm/geometries/LoftGeometry.js +355 -0
  44. package/examples/jsm/geometries/TextGeometry.js +18 -0
  45. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  46. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  47. package/examples/jsm/helpers/LightProbeHelper.js +5 -4
  48. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  49. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  50. package/examples/jsm/helpers/ViewHelper.js +83 -14
  51. package/examples/jsm/inspector/Extension.js +13 -0
  52. package/examples/jsm/inspector/Inspector.js +244 -91
  53. package/examples/jsm/inspector/RendererInspector.js +165 -39
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  55. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  56. package/examples/jsm/inspector/tabs/Console.js +241 -25
  57. package/examples/jsm/inspector/tabs/Memory.js +136 -0
  58. package/examples/jsm/inspector/tabs/Parameters.js +115 -7
  59. package/examples/jsm/inspector/tabs/Performance.js +24 -9
  60. package/examples/jsm/inspector/tabs/Settings.js +306 -0
  61. package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
  62. package/examples/jsm/inspector/tabs/Viewer.js +723 -9
  63. package/examples/jsm/inspector/ui/Graph.js +162 -25
  64. package/examples/jsm/inspector/ui/Item.js +92 -13
  65. package/examples/jsm/inspector/ui/List.js +2 -2
  66. package/examples/jsm/inspector/ui/Profiler.js +1991 -44
  67. package/examples/jsm/inspector/ui/Style.js +1943 -543
  68. package/examples/jsm/inspector/ui/Tab.js +226 -5
  69. package/examples/jsm/inspector/ui/Values.js +126 -8
  70. package/examples/jsm/inspector/ui/utils.js +143 -10
  71. package/examples/jsm/interaction/InteractionManager.js +226 -0
  72. package/examples/jsm/libs/basis/README.md +0 -1
  73. package/examples/jsm/libs/demuxer_mp4.js +3 -3
  74. package/examples/jsm/libs/draco/README.md +0 -1
  75. package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
  76. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  77. package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
  78. package/examples/jsm/libs/mikktspace.module.js +34 -9
  79. package/examples/jsm/lighting/ClusteredLighting.js +55 -0
  80. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  81. package/examples/jsm/lighting/LightProbeGrid.js +681 -0
  82. package/examples/jsm/lines/LineMaterial.js +45 -16
  83. package/examples/jsm/lines/LineSegments2.js +8 -0
  84. package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
  85. package/examples/jsm/loaders/3DMLoader.js +6 -5
  86. package/examples/jsm/loaders/3MFLoader.js +2 -2
  87. package/examples/jsm/loaders/AMFLoader.js +2 -2
  88. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  89. package/examples/jsm/loaders/DRACOLoader.js +51 -18
  90. package/examples/jsm/loaders/EXRLoader.js +701 -90
  91. package/examples/jsm/loaders/FBXLoader.js +235 -37
  92. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  93. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  94. package/examples/jsm/loaders/HDRLoader.js +7 -30
  95. package/examples/jsm/loaders/KMZLoader.js +5 -5
  96. package/examples/jsm/loaders/KTX2Loader.js +58 -17
  97. package/examples/jsm/loaders/LDrawLoader.js +49 -58
  98. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  99. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  100. package/examples/jsm/loaders/LWOLoader.js +11 -39
  101. package/examples/jsm/loaders/LottieLoader.js +1 -1
  102. package/examples/jsm/loaders/MaterialXLoader.js +31 -9
  103. package/examples/jsm/loaders/NRRDLoader.js +5 -5
  104. package/examples/jsm/loaders/PCDLoader.js +11 -9
  105. package/examples/jsm/loaders/PLYLoader.js +218 -55
  106. package/examples/jsm/loaders/SVGLoader.js +549 -497
  107. package/examples/jsm/loaders/TDSLoader.js +0 -2
  108. package/examples/jsm/loaders/TGALoader.js +0 -2
  109. package/examples/jsm/loaders/TTFLoader.js +1 -1
  110. package/examples/jsm/loaders/USDLoader.js +127 -43
  111. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  112. package/examples/jsm/loaders/VOXLoader.js +660 -117
  113. package/examples/jsm/loaders/VRMLLoader.js +80 -3
  114. package/examples/jsm/loaders/VTKLoader.js +42 -25
  115. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  116. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  117. package/examples/jsm/loaders/usd/USDAParser.js +504 -344
  118. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  119. package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
  120. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  121. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  122. package/examples/jsm/math/Octree.js +131 -1
  123. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  124. package/examples/jsm/misc/RollerCoaster.js +42 -4
  125. package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
  126. package/examples/jsm/misc/Volume.js +2 -3
  127. package/examples/jsm/misc/VolumeSlice.js +0 -1
  128. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  129. package/examples/jsm/objects/GroundedSkybox.js +1 -1
  130. package/examples/jsm/objects/LensflareMesh.js +1 -1
  131. package/examples/jsm/objects/Reflector.js +72 -25
  132. package/examples/jsm/objects/Sky.js +90 -6
  133. package/examples/jsm/objects/SkyMesh.js +150 -16
  134. package/examples/jsm/objects/Water.js +4 -3
  135. package/examples/jsm/objects/Water2.js +5 -3
  136. package/examples/jsm/objects/Water2Mesh.js +1 -1
  137. package/examples/jsm/objects/WaterMesh.js +5 -7
  138. package/examples/jsm/physics/AmmoPhysics.js +27 -15
  139. package/examples/jsm/physics/JoltPhysics.js +10 -6
  140. package/examples/jsm/physics/RapierPhysics.js +36 -7
  141. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  142. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  143. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  144. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  145. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  146. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  147. package/examples/jsm/renderers/Projector.js +246 -28
  148. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  149. package/examples/jsm/shaders/GTAOShader.js +19 -6
  150. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  151. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  152. package/examples/jsm/shaders/SAOShader.js +17 -4
  153. package/examples/jsm/shaders/SSAOShader.js +11 -1
  154. package/examples/jsm/shaders/SSRShader.js +6 -5
  155. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  156. package/examples/jsm/shaders/VignetteShader.js +1 -1
  157. package/examples/jsm/shaders/VolumeShader.js +31 -44
  158. package/examples/jsm/transpiler/AST.js +44 -0
  159. package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
  160. package/examples/jsm/transpiler/Linker.js +1 -1
  161. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  162. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  163. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  164. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  165. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  166. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  167. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  168. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  169. package/examples/jsm/tsl/display/BloomNode.js +75 -25
  170. package/examples/jsm/tsl/display/CRT.js +150 -0
  171. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  172. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  173. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  174. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  175. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  176. package/examples/jsm/tsl/display/FXAANode.js +13 -14
  177. package/examples/jsm/tsl/display/GTAONode.js +40 -17
  178. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  179. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  180. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
  181. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  182. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  183. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  184. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  185. package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
  186. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  187. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
  188. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  189. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  190. package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
  191. package/examples/jsm/tsl/display/SSGINode.js +96 -62
  192. package/examples/jsm/tsl/display/SSRNode.js +831 -134
  193. package/examples/jsm/tsl/display/SSSNode.js +8 -6
  194. package/examples/jsm/tsl/display/Shape.js +29 -0
  195. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  196. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  197. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  198. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  199. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  200. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  201. package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
  202. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  203. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  204. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  205. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
  206. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  207. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  208. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  209. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  210. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  211. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  212. package/examples/jsm/tsl/math/Bayer.js +53 -3
  213. package/examples/jsm/tsl/math/curlNoise.js +107 -0
  214. package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
  215. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
  216. package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
  217. package/examples/jsm/tsl/utils/RNoise.js +51 -0
  218. package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
  219. package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
  220. package/examples/jsm/utils/ColorUtils.js +76 -0
  221. package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
  222. package/examples/jsm/utils/LDrawUtils.js +1 -1
  223. package/examples/jsm/utils/SceneOptimizer.js +1 -1
  224. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  225. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  226. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  227. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  228. package/examples/jsm/webxr/ARButton.js +1 -1
  229. package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
  230. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
  231. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  232. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  233. package/package.json +28 -34
  234. package/src/Three.Core.js +3 -1
  235. package/src/Three.TSL.js +35 -14
  236. package/src/Three.WebGPU.Nodes.js +5 -0
  237. package/src/Three.WebGPU.js +13 -0
  238. package/src/Three.js +1 -0
  239. package/src/animation/AnimationAction.js +18 -4
  240. package/src/animation/AnimationClip.js +0 -139
  241. package/src/animation/AnimationMixer.js +6 -0
  242. package/src/animation/AnimationUtils.js +1 -12
  243. package/src/animation/KeyframeTrack.js +47 -8
  244. package/src/animation/PropertyBinding.js +2 -2
  245. package/src/animation/PropertyMixer.js +4 -4
  246. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  247. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  248. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  249. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  250. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  251. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  252. package/src/audio/Audio.js +1 -1
  253. package/src/audio/AudioContext.js +2 -2
  254. package/src/audio/AudioListener.js +5 -3
  255. package/src/cameras/Camera.js +34 -4
  256. package/src/cameras/CubeCamera.js +20 -0
  257. package/src/cameras/StereoCamera.js +5 -2
  258. package/src/constants.js +90 -5
  259. package/src/core/BufferAttribute.js +13 -1
  260. package/src/core/BufferGeometry.js +43 -9
  261. package/src/core/Clock.js +7 -0
  262. package/src/core/Object3D.js +69 -11
  263. package/src/core/Raycaster.js +3 -3
  264. package/src/core/RenderTarget.js +19 -6
  265. package/src/extras/PMREMGenerator.js +13 -22
  266. package/src/extras/TextureUtils.js +6 -2
  267. package/src/extras/core/ShapePath.js +149 -160
  268. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  269. package/src/geometries/ExtrudeGeometry.js +2 -2
  270. package/src/geometries/PolyhedronGeometry.js +1 -1
  271. package/src/geometries/SphereGeometry.js +8 -3
  272. package/src/geometries/TorusGeometry.js +8 -3
  273. package/src/helpers/CameraHelper.js +3 -0
  274. package/src/helpers/DirectionalLightHelper.js +6 -1
  275. package/src/helpers/HemisphereLightHelper.js +5 -0
  276. package/src/helpers/PointLightHelper.js +3 -25
  277. package/src/helpers/SpotLightHelper.js +4 -1
  278. package/src/lights/DirectionalLight.js +13 -0
  279. package/src/lights/HemisphereLight.js +10 -0
  280. package/src/lights/Light.js +1 -11
  281. package/src/lights/LightProbe.js +0 -15
  282. package/src/lights/LightShadow.js +15 -6
  283. package/src/lights/PointLight.js +15 -0
  284. package/src/lights/PointLightShadow.js +0 -86
  285. package/src/lights/SpotLight.js +22 -1
  286. package/src/lights/webgpu/IESSpotLight.js +2 -1
  287. package/src/loaders/AudioLoader.js +11 -1
  288. package/src/loaders/Cache.js +28 -0
  289. package/src/loaders/DataTextureLoader.js +75 -42
  290. package/src/loaders/FileLoader.js +2 -3
  291. package/src/loaders/ImageBitmapLoader.js +12 -9
  292. package/src/loaders/Loader.js +6 -0
  293. package/src/loaders/LoadingManager.js +5 -0
  294. package/src/loaders/MaterialLoader.js +37 -266
  295. package/src/loaders/ObjectLoader.js +48 -6
  296. package/src/loaders/nodes/NodeLoader.js +2 -2
  297. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  298. package/src/materials/LineBasicMaterial.js +4 -0
  299. package/src/materials/Material.js +198 -1
  300. package/src/materials/MeshBasicMaterial.js +24 -0
  301. package/src/materials/MeshDepthMaterial.js +10 -0
  302. package/src/materials/MeshDistanceMaterial.js +10 -0
  303. package/src/materials/MeshLambertMaterial.js +49 -1
  304. package/src/materials/MeshMatcapMaterial.js +25 -1
  305. package/src/materials/MeshNormalMaterial.js +9 -1
  306. package/src/materials/MeshPhongMaterial.js +49 -1
  307. package/src/materials/MeshPhysicalMaterial.js +38 -0
  308. package/src/materials/MeshStandardMaterial.js +42 -1
  309. package/src/materials/MeshToonMaterial.js +35 -2
  310. package/src/materials/PointsMaterial.js +7 -0
  311. package/src/materials/ShaderMaterial.js +106 -1
  312. package/src/materials/SpriteMaterial.js +7 -0
  313. package/src/materials/nodes/Line2NodeMaterial.js +380 -297
  314. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  315. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  316. package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
  317. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
  318. package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
  319. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
  320. package/src/materials/nodes/NodeMaterial.js +153 -89
  321. package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
  322. package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
  323. package/src/math/Box3.js +5 -0
  324. package/src/math/FrustumArray.js +103 -133
  325. package/src/math/Interpolant.js +1 -1
  326. package/src/math/Line3.js +6 -5
  327. package/src/math/MathUtils.js +12 -12
  328. package/src/math/Matrix2.js +13 -9
  329. package/src/math/Matrix3.js +24 -9
  330. package/src/math/Matrix4.js +112 -74
  331. package/src/math/Plane.js +4 -3
  332. package/src/math/Quaternion.js +3 -29
  333. package/src/math/Sphere.js +1 -1
  334. package/src/math/Triangle.js +1 -1
  335. package/src/math/Vector2.js +13 -9
  336. package/src/math/Vector3.js +17 -15
  337. package/src/math/Vector4.js +15 -11
  338. package/src/math/interpolants/BezierInterpolant.js +106 -0
  339. package/src/nodes/Nodes.js +86 -71
  340. package/src/nodes/TSL.js +15 -13
  341. package/src/nodes/accessors/Arrays.js +5 -5
  342. package/src/nodes/accessors/Batch.js +108 -0
  343. package/src/nodes/accessors/Bitangent.js +7 -7
  344. package/src/nodes/accessors/BufferAttributeNode.js +120 -17
  345. package/src/nodes/accessors/BufferNode.js +29 -2
  346. package/src/nodes/accessors/Camera.js +149 -28
  347. package/src/nodes/accessors/ClippingNode.js +5 -5
  348. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  349. package/src/nodes/accessors/Instance.js +264 -0
  350. package/src/nodes/accessors/MaterialNode.js +27 -3
  351. package/src/nodes/accessors/MaterialProperties.js +6 -8
  352. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  353. package/src/nodes/accessors/ModelNode.js +1 -1
  354. package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
  355. package/src/nodes/accessors/Normal.js +24 -24
  356. package/src/nodes/accessors/Object3DNode.js +1 -1
  357. package/src/nodes/accessors/Position.js +39 -3
  358. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  359. package/src/nodes/accessors/ReferenceNode.js +9 -8
  360. package/src/nodes/accessors/ReflectVector.js +3 -3
  361. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  362. package/src/nodes/accessors/SceneProperties.js +47 -0
  363. package/src/nodes/accessors/Skinning.js +263 -0
  364. package/src/nodes/accessors/StorageBufferNode.js +16 -27
  365. package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
  366. package/src/nodes/accessors/StorageTextureNode.js +74 -11
  367. package/src/nodes/accessors/Tangent.js +8 -18
  368. package/src/nodes/accessors/Texture3DNode.js +32 -35
  369. package/src/nodes/accessors/TextureNode.js +124 -25
  370. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  371. package/src/nodes/accessors/UserDataNode.js +1 -2
  372. package/src/nodes/accessors/VertexColorNode.js +1 -2
  373. package/src/nodes/code/FunctionCallNode.js +1 -1
  374. package/src/nodes/code/FunctionNode.js +4 -19
  375. package/src/nodes/core/ArrayNode.js +21 -2
  376. package/src/nodes/core/AssignNode.js +3 -3
  377. package/src/nodes/core/AttributeNode.js +3 -3
  378. package/src/nodes/core/BypassNode.js +1 -1
  379. package/src/nodes/core/ContextNode.js +104 -5
  380. package/src/nodes/core/IndexNode.js +2 -1
  381. package/src/nodes/core/InputNode.js +1 -1
  382. package/src/nodes/core/InspectorNode.js +1 -1
  383. package/src/nodes/core/IsolateNode.js +1 -1
  384. package/src/nodes/core/MRTNode.js +55 -4
  385. package/src/nodes/core/Node.js +151 -17
  386. package/src/nodes/core/NodeBuilder.js +479 -101
  387. package/src/nodes/core/NodeError.js +28 -0
  388. package/src/nodes/core/NodeFrame.js +12 -4
  389. package/src/nodes/core/NodeUtils.js +20 -18
  390. package/src/nodes/core/OutputStructNode.js +13 -11
  391. package/src/nodes/core/OverrideContextNode.js +153 -0
  392. package/src/nodes/core/ParameterNode.js +4 -4
  393. package/src/nodes/core/PropertyNode.js +66 -4
  394. package/src/nodes/core/StackNode.js +91 -20
  395. package/src/nodes/core/StackTrace.js +139 -0
  396. package/src/nodes/core/StructNode.js +20 -8
  397. package/src/nodes/core/StructTypeNode.js +17 -23
  398. package/src/nodes/core/SubBuildNode.js +2 -2
  399. package/src/nodes/core/UniformGroupNode.js +36 -6
  400. package/src/nodes/core/UniformNode.js +21 -5
  401. package/src/nodes/core/VarNode.js +56 -23
  402. package/src/nodes/core/VaryingNode.js +14 -21
  403. package/src/nodes/display/BlendModes.js +1 -105
  404. package/src/nodes/display/BumpMapNode.js +6 -1
  405. package/src/nodes/display/ColorAdjustment.js +27 -9
  406. package/src/nodes/display/ColorSpaceNode.js +3 -3
  407. package/src/nodes/display/FrontFacingNode.js +38 -9
  408. package/src/nodes/display/NormalMapNode.js +41 -6
  409. package/src/nodes/display/PassNode.js +157 -56
  410. package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
  411. package/src/nodes/display/RenderOutputNode.js +19 -10
  412. package/src/nodes/display/ScreenNode.js +4 -2
  413. package/src/nodes/display/ToneMappingNode.js +1 -1
  414. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  415. package/src/nodes/display/ViewportDepthNode.js +52 -4
  416. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  417. package/src/nodes/display/ViewportTextureNode.js +39 -11
  418. package/src/nodes/fog/Fog.js +18 -35
  419. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  420. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  421. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  422. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  423. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  424. package/src/nodes/functions/VolumetricLightingModel.js +40 -7
  425. package/src/nodes/geometry/RangeNode.js +5 -3
  426. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  427. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  428. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  429. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  430. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  431. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
  432. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  433. package/src/nodes/lighting/EnvironmentNode.js +30 -5
  434. package/src/nodes/lighting/IESSpotLightNode.js +40 -2
  435. package/src/nodes/lighting/LightingContextNode.js +10 -2
  436. package/src/nodes/lighting/LightsNode.js +97 -65
  437. package/src/nodes/lighting/PointShadowNode.js +166 -148
  438. package/src/nodes/lighting/ShadowFilterNode.js +74 -117
  439. package/src/nodes/lighting/ShadowNode.js +149 -51
  440. package/src/nodes/materialx/lib/mx_noise.js +2 -2
  441. package/src/nodes/math/BitcastNode.js +1 -1
  442. package/src/nodes/math/BitcountNode.js +433 -0
  443. package/src/nodes/math/ConditionalNode.js +6 -6
  444. package/src/nodes/math/MathNode.js +115 -52
  445. package/src/nodes/math/OperatorNode.js +24 -23
  446. package/src/nodes/math/PackFloatNode.js +98 -0
  447. package/src/nodes/math/UnpackFloatNode.js +96 -0
  448. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  449. package/src/nodes/pmrem/PMREMNode.js +34 -3
  450. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  451. package/src/nodes/tsl/TSLBase.js +1 -1
  452. package/src/nodes/tsl/TSLCore.js +99 -33
  453. package/src/nodes/utils/ArrayElementNode.js +14 -1
  454. package/src/nodes/utils/ConvertNode.js +1 -1
  455. package/src/nodes/utils/DebugNode.js +12 -12
  456. package/src/nodes/utils/EquirectUV.js +30 -5
  457. package/src/nodes/utils/EventNode.js +31 -2
  458. package/src/nodes/utils/FlipNode.js +1 -1
  459. package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
  460. package/src/nodes/utils/JoinNode.js +3 -3
  461. package/src/nodes/utils/LoopNode.js +1 -1
  462. package/src/nodes/utils/MemberNode.js +2 -2
  463. package/src/nodes/utils/Packing.js +48 -5
  464. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  465. package/src/nodes/utils/RTTNode.js +41 -25
  466. package/src/nodes/utils/ReflectorNode.js +4 -4
  467. package/src/nodes/utils/Remap.js +48 -0
  468. package/src/nodes/utils/RotateNode.js +1 -1
  469. package/src/nodes/utils/SampleNode.js +1 -1
  470. package/src/nodes/utils/SetNode.js +1 -1
  471. package/src/nodes/utils/SplitNode.js +1 -1
  472. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  473. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  474. package/src/nodes/utils/UVUtils.js +28 -0
  475. package/src/objects/BatchedMesh.js +66 -30
  476. package/src/objects/InstancedMesh.js +19 -3
  477. package/src/objects/Line.js +1 -1
  478. package/src/objects/Mesh.js +1 -1
  479. package/src/objects/Points.js +1 -1
  480. package/src/objects/SkinnedMesh.js +26 -9
  481. package/src/renderers/WebGLRenderer.js +344 -156
  482. package/src/renderers/common/Animation.js +3 -3
  483. package/src/renderers/common/Attributes.js +15 -1
  484. package/src/renderers/common/Backend.js +78 -13
  485. package/src/renderers/common/Background.js +26 -13
  486. package/src/renderers/common/BindGroup.js +1 -16
  487. package/src/renderers/common/Binding.js +11 -0
  488. package/src/renderers/common/Bindings.js +141 -57
  489. package/src/renderers/common/BlendMode.js +143 -0
  490. package/src/renderers/common/Buffer.js +49 -0
  491. package/src/renderers/common/BundleGroup.js +1 -1
  492. package/src/renderers/common/ChainMap.js +30 -6
  493. package/src/renderers/common/ClippingContext.js +10 -2
  494. package/src/renderers/common/ComputePipeline.js +1 -1
  495. package/src/renderers/common/CubeRenderTarget.js +51 -7
  496. package/src/renderers/common/Geometries.js +29 -3
  497. package/src/renderers/common/Info.js +374 -4
  498. package/src/renderers/common/InspectorBase.js +6 -1
  499. package/src/renderers/common/Lighting.js +51 -19
  500. package/src/renderers/common/Pipelines.js +40 -7
  501. package/src/renderers/common/PostProcessing.js +8 -206
  502. package/src/renderers/common/ReadbackBuffer.js +78 -0
  503. package/src/renderers/common/RenderBundle.js +3 -1
  504. package/src/renderers/common/RenderBundles.js +7 -3
  505. package/src/renderers/common/RenderContext.js +16 -0
  506. package/src/renderers/common/RenderContexts.js +33 -49
  507. package/src/renderers/common/RenderList.js +41 -4
  508. package/src/renderers/common/RenderLists.js +2 -1
  509. package/src/renderers/common/RenderObject.js +88 -16
  510. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  511. package/src/renderers/common/RenderObjects.js +21 -5
  512. package/src/renderers/common/RenderPipeline.js +232 -17
  513. package/src/renderers/common/Renderer.js +700 -163
  514. package/src/renderers/common/Sampler.js +16 -48
  515. package/src/renderers/common/StorageBuffer.js +13 -1
  516. package/src/renderers/common/Textures.js +121 -9
  517. package/src/renderers/common/TimestampQueryPool.js +6 -4
  518. package/src/renderers/common/Uniform.js +8 -0
  519. package/src/renderers/common/UniformsGroup.js +84 -1
  520. package/src/renderers/common/XRManager.js +377 -51
  521. package/src/renderers/common/extras/PMREMGenerator.js +40 -61
  522. package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
  523. package/src/renderers/common/nodes/NodeLibrary.js +4 -4
  524. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
  525. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  526. package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
  527. package/src/renderers/shaders/DFGLUTData.js +19 -34
  528. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  529. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  530. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  531. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  532. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  533. package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
  534. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
  535. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  536. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
  537. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  538. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
  539. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  540. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  541. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  542. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  543. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
  544. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  545. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  546. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
  547. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  548. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
  549. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  550. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  551. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  552. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  553. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  554. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
  555. package/src/renderers/shaders/ShaderChunk.js +5 -3
  556. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  557. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  558. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
  559. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  560. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  561. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  562. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  563. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  564. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  565. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  566. package/src/renderers/shaders/ShaderLib.js +7 -6
  567. package/src/renderers/shaders/UniformsLib.js +7 -5
  568. package/src/renderers/shaders/UniformsUtils.js +27 -5
  569. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  570. package/src/renderers/webgl/WebGLBackground.js +15 -15
  571. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  572. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  573. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  574. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  575. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  576. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  577. package/src/renderers/webgl/WebGLLights.js +18 -1
  578. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  579. package/src/renderers/webgl/WebGLObjects.js +3 -1
  580. package/src/renderers/webgl/WebGLOutput.js +271 -0
  581. package/src/renderers/webgl/WebGLProgram.js +54 -113
  582. package/src/renderers/webgl/WebGLPrograms.js +74 -55
  583. package/src/renderers/webgl/WebGLRenderLists.js +24 -1
  584. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  585. package/src/renderers/webgl/WebGLShaderCache.js +5 -11
  586. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  587. package/src/renderers/webgl/WebGLState.js +75 -37
  588. package/src/renderers/webgl/WebGLTextures.js +230 -56
  589. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  590. package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
  591. package/src/renderers/webgl/WebGLUtils.js +6 -2
  592. package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
  593. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  594. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
  595. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  596. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  597. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  598. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
  599. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  600. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
  601. package/src/renderers/webgpu/WebGPUBackend.js +733 -302
  602. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  603. package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
  604. package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
  605. package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
  606. package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
  607. package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
  608. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
  609. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
  610. package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
  611. package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
  612. package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
  613. package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
  614. package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
  615. package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
  616. package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
  617. package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
  618. package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
  619. package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
  620. package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
  621. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
  622. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
  623. package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
  624. package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
  625. package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
  626. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
  627. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
  628. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
  629. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
  630. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
  631. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  632. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  633. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
  634. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
  635. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
  636. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
  637. package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
  638. package/src/renderers/webxr/WebXRController.js +12 -0
  639. package/src/renderers/webxr/WebXRManager.js +4 -2
  640. package/src/textures/CubeDepthTexture.js +76 -0
  641. package/src/textures/DepthTexture.js +1 -1
  642. package/src/textures/ExternalTexture.js +0 -3
  643. package/src/textures/HTMLTexture.js +74 -0
  644. package/src/textures/Source.js +2 -2
  645. package/src/textures/Texture.js +16 -5
  646. package/src/utils.js +280 -3
  647. package/examples/fonts/LICENSE +0 -13
  648. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  649. package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
  650. package/examples/fonts/README.md +0 -11
  651. package/examples/fonts/droid/NOTICE +0 -190
  652. package/examples/fonts/droid/README.txt +0 -18
  653. package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
  654. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
  655. package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
  656. package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
  657. package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
  658. package/examples/fonts/gentilis_bold.typeface.json +0 -1
  659. package/examples/fonts/gentilis_regular.typeface.json +0 -1
  660. package/examples/fonts/helvetiker_bold.typeface.json +0 -1
  661. package/examples/fonts/helvetiker_regular.typeface.json +0 -1
  662. package/examples/fonts/optimer_bold.typeface.json +0 -1
  663. package/examples/fonts/optimer_regular.typeface.json +0 -1
  664. package/examples/fonts/ttf/README.md +0 -9
  665. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  666. package/examples/jsm/libs/ammo.wasm.js +0 -822
  667. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  668. package/examples/jsm/libs/draco/draco_encoder.js +0 -33
  669. package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
  670. package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
  671. package/examples/jsm/libs/opentype.module.js +0 -14506
  672. package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
  673. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
  674. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  675. package/examples/jsm/lighting/TiledLighting.js +0 -42
  676. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  677. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  678. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  679. package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
  680. package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
  681. package/src/nodes/accessors/BatchNode.js +0 -163
  682. package/src/nodes/accessors/InstanceNode.js +0 -244
  683. package/src/nodes/accessors/InstancedMeshNode.js +0 -50
  684. package/src/nodes/accessors/SceneNode.js +0 -145
  685. package/src/nodes/accessors/SkinningNode.js +0 -327
  686. package/src/nodes/code/ScriptableNode.js +0 -726
  687. package/src/nodes/code/ScriptableValueNode.js +0 -253
  688. package/src/nodes/display/PosterizeNode.js +0 -65
  689. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  690. package/src/nodes/utils/RemapNode.js +0 -125
  691. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  692. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  693. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,7 +1,10 @@
1
1
  import { Color } from '../../math/Color.js';
2
+ import { Box2 } from '../../math/Box2.js';
3
+ import { Vector2 } from '../../math/Vector2.js';
2
4
  import { Path } from './Path.js';
3
5
  import { Shape } from './Shape.js';
4
6
  import { ShapeUtils } from '../ShapeUtils.js';
7
+ import { warn } from '../../utils.js';
5
8
 
6
9
  /**
7
10
  * This class is used to convert a series of paths to an array of
@@ -39,6 +42,14 @@ class ShapePath {
39
42
  */
40
43
  this.currentPath = null;
41
44
 
45
+ /**
46
+ * An object that can be used to store custom data about the shape path.
47
+ * Mainly used by SVGLoader to store style information.
48
+ *
49
+ * @type {Object}
50
+ */
51
+ this.userData = {};
52
+
42
53
  }
43
54
 
44
55
  /**
@@ -130,235 +141,213 @@ class ShapePath {
130
141
  /**
131
142
  * Converts the paths into an array of shapes.
132
143
  *
133
- * @param {boolean} isCCW - By default solid shapes are defined clockwise (CW) and holes are defined counterclockwise (CCW).
134
- * If this flag is set to `true`, then those are flipped.
135
144
  * @return {Array<Shape>} An array of shapes.
136
145
  */
137
- toShapes( isCCW ) {
146
+ toShapes() {
138
147
 
139
- function toShapesNoHoles( inSubpaths ) {
148
+ // Point-in-polygon test using the even-odd ray-casting rule. Valid for
149
+ // simple (non self-intersecting) polygons.
150
+ function pointInPolygon( p, polygon ) {
140
151
 
141
- const shapes = [];
152
+ let inside = false;
153
+ const n = polygon.length;
154
+
155
+ for ( let i = 0, j = n - 1; i < n; j = i ++ ) {
142
156
 
143
- for ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {
157
+ const a = polygon[ i ];
158
+ const b = polygon[ j ];
144
159
 
145
- const tmpPath = inSubpaths[ i ];
160
+ if ( ( a.y > p.y ) !== ( b.y > p.y ) &&
161
+ p.x < ( b.x - a.x ) * ( p.y - a.y ) / ( b.y - a.y ) + a.x ) {
146
162
 
147
- const tmpShape = new Shape();
148
- tmpShape.curves = tmpPath.curves;
163
+ inside = ! inside;
149
164
 
150
- shapes.push( tmpShape );
165
+ }
151
166
 
152
167
  }
153
168
 
154
- return shapes;
169
+ return inside;
155
170
 
156
171
  }
157
172
 
158
- function isPointInsidePolygon( inPt, inPolygon ) {
159
-
160
- const polyLen = inPolygon.length;
161
-
162
- // inPt on polygon contour => immediate success or
163
- // toggling of inside/outside at every single! intersection point of an edge
164
- // with the horizontal line through inPt, left of inPt
165
- // not counting lowerY endpoints of edges and whole edges on that line
166
- let inside = false;
167
- for ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {
168
-
169
- let edgeLowPt = inPolygon[ p ];
170
- let edgeHighPt = inPolygon[ q ];
171
-
172
- let edgeDx = edgeHighPt.x - edgeLowPt.x;
173
- let edgeDy = edgeHighPt.y - edgeLowPt.y;
174
-
175
- if ( Math.abs( edgeDy ) > Number.EPSILON ) {
176
-
177
- // not parallel
178
- if ( edgeDy < 0 ) {
179
-
180
- edgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;
181
- edgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;
173
+ // Returns a point guaranteed to be strictly inside the given simple
174
+ // polygon. First tries the bounding-box center; if that falls outside
175
+ // the polygon, casts a horizontal ray at the center's y and picks the
176
+ // midpoint between the first two sorted intercepts.
177
+ //
178
+ // Port of paper.js' Path#getInteriorPoint()
179
+ // https://github.com/paperjs/paper.js/blob/develop/src/path/PathItem.Boolean.js
180
+ function getInteriorPoint( polygon, boundingBox ) {
182
181
 
183
- }
182
+ const point = boundingBox.getCenter( new Vector2() );
184
183
 
185
- if ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) continue;
184
+ if ( pointInPolygon( point, polygon ) ) return point;
186
185
 
187
- if ( inPt.y === edgeLowPt.y ) {
186
+ const y = point.y;
187
+ const intercepts = [];
188
+ const n = polygon.length;
188
189
 
189
- if ( inPt.x === edgeLowPt.x ) return true; // inPt is on contour ?
190
- // continue; // no intersection or edgeLowPt => doesn't count !!!
190
+ for ( let i = 0; i < n; i ++ ) {
191
191
 
192
- } else {
192
+ const a = polygon[ i ];
193
+ const b = polygon[ ( i + 1 ) % n ];
193
194
 
194
- const perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );
195
- if ( perpEdge === 0 ) return true; // inPt is on contour ?
196
- if ( perpEdge < 0 ) continue;
197
- inside = ! inside; // true intersection left of inPt
195
+ // Half-open crossing rule counts each vertex exactly once and
196
+ // skips horizontal edges.
197
+ if ( ( a.y > y ) !== ( b.y > y ) ) {
198
198
 
199
- }
200
-
201
- } else {
202
-
203
- // parallel or collinear
204
- if ( inPt.y !== edgeLowPt.y ) continue; // parallel
205
- // edge lies on the same horizontal line as inPt
206
- if ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||
207
- ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) ) return true; // inPt: Point on contour !
208
- // continue;
199
+ const x = a.x + ( y - a.y ) * ( b.x - a.x ) / ( b.y - a.y );
200
+ intercepts.push( x );
209
201
 
210
202
  }
211
203
 
212
204
  }
213
205
 
214
- return inside;
215
-
216
- }
206
+ if ( intercepts.length > 1 ) {
217
207
 
218
- const isClockWise = ShapeUtils.isClockWise;
219
-
220
- const subPaths = this.subPaths;
221
- if ( subPaths.length === 0 ) return [];
222
-
223
- let solid, tmpPath, tmpShape;
224
- const shapes = [];
208
+ intercepts.sort( ( a, b ) => a - b );
209
+ point.x = ( intercepts[ 0 ] + intercepts[ 1 ] ) / 2;
225
210
 
226
- if ( subPaths.length === 1 ) {
211
+ }
227
212
 
228
- tmpPath = subPaths[ 0 ];
229
- tmpShape = new Shape();
230
- tmpShape.curves = tmpPath.curves;
231
- shapes.push( tmpShape );
232
- return shapes;
213
+ return point;
233
214
 
234
215
  }
235
216
 
236
- let holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );
237
- holesFirst = isCCW ? ! holesFirst : holesFirst;
238
-
239
- // log("Holes first", holesFirst);
217
+ // Resolve fill-rule. Defaults to 'nonzero'.
218
+ let fillRule = ( this.userData.style && this.userData.style.fillRule ) || 'nonzero';
240
219
 
241
- const betterShapeHoles = [];
242
- const newShapes = [];
243
- let newShapeHoles = [];
244
- let mainIdx = 0;
245
- let tmpPoints;
220
+ if ( fillRule !== 'nonzero' && fillRule !== 'evenodd' ) {
246
221
 
247
- newShapes[ mainIdx ] = undefined;
248
- newShapeHoles[ mainIdx ] = [];
222
+ warn( 'Fill-rule "' + fillRule + '" is not supported, falling back to "nonzero".' );
223
+ fillRule = 'nonzero';
249
224
 
250
- for ( let i = 0, l = subPaths.length; i < l; i ++ ) {
225
+ }
251
226
 
252
- tmpPath = subPaths[ i ];
253
- tmpPoints = tmpPath.getPoints();
254
- solid = isClockWise( tmpPoints );
255
- solid = isCCW ? ! solid : solid;
227
+ // Predicate that decides whether a winding number falls inside the fill
228
+ // region, per the SVG fill-rule spec. Works for negative windings too,
229
+ // because JavaScript's bitwise AND preserves odd/even under two's
230
+ // complement.
231
+ const isInside = fillRule === 'nonzero'
232
+ ? ( w => w !== 0 )
233
+ : ( w => ( w & 1 ) !== 0 );
234
+
235
+ // Build an entry per usable subpath. Self-winding follows the standard
236
+ // convention used by ShapeUtils: counter-clockwise (signed area > 0)
237
+ // contributes +1 to the winding number at an interior point,
238
+ // clockwise contributes -1.
239
+ const entries = [];
240
+
241
+ for ( const subPath of this.subPaths ) {
242
+
243
+ const points = subPath.getPoints();
244
+ if ( points.length < 3 ) continue;
245
+
246
+ const area = ShapeUtils.area( points );
247
+ if ( area === 0 ) continue;
248
+
249
+ const boundingBox = new Box2();
250
+ for ( let i = 0; i < points.length; i ++ ) boundingBox.expandByPoint( points[ i ] );
251
+
252
+ entries.push( {
253
+ subPath: subPath,
254
+ points: points,
255
+ boundingBox: boundingBox,
256
+ interiorPoint: getInteriorPoint( points, boundingBox ),
257
+ absArea: Math.abs( area ),
258
+ winding: area < 0 ? - 1 : 1,
259
+ container: null,
260
+ exclude: false,
261
+ role: null
262
+ } );
256
263
 
257
- if ( solid ) {
264
+ }
258
265
 
259
- if ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) ) mainIdx ++;
266
+ // Sort by area descending. This guarantees that any subpath that could
267
+ // contain `entries[i]` is located at a smaller index and has already
268
+ // been processed when it's entries[i]'s turn. Port of paper.js'
269
+ // reorientPaths() algorithm.
270
+ entries.sort( ( a, b ) => b.absArea - a.absArea );
260
271
 
261
- newShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };
262
- newShapes[ mainIdx ].s.curves = tmpPath.curves;
272
+ // Walk already-processed entries from closest-in-size to largest,
273
+ // stopping at the innermost container. Accumulate the container's
274
+ // cumulative winding into this entry's winding so that the final value
275
+ // equals the winding number at this entry's interior point.
276
+ //
277
+ // A subpath only contributes to the fill boundary when crossing it
278
+ // actually flips the "insideness" per the fill rule; otherwise it's a
279
+ // redundant overlap and gets excluded to avoid double-counting.
280
+ for ( let i = 0; i < entries.length; i ++ ) {
263
281
 
264
- if ( holesFirst ) mainIdx ++;
265
- newShapeHoles[ mainIdx ] = [];
282
+ const entry = entries[ i ];
283
+ let containerWinding = 0;
266
284
 
267
- //log('cw', i);
285
+ for ( let j = i - 1; j >= 0; j -- ) {
268
286
 
269
- } else {
287
+ const candidate = entries[ j ];
270
288
 
271
- newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );
289
+ if ( ! candidate.boundingBox.containsBox( entry.boundingBox ) ) continue;
290
+ if ( ! pointInPolygon( entry.interiorPoint, candidate.points ) ) continue;
272
291
 
273
- //log('ccw', i);
292
+ entry.container = candidate.exclude ? candidate.container : candidate;
293
+ containerWinding = candidate.winding;
294
+ entry.winding += containerWinding;
295
+ break;
274
296
 
275
297
  }
276
298
 
277
- }
278
-
279
- // only Holes? -> probably all Shapes with wrong orientation
280
- if ( ! newShapes[ 0 ] ) return toShapesNoHoles( subPaths );
281
-
299
+ if ( isInside( entry.winding ) === isInside( containerWinding ) ) {
282
300
 
283
- if ( newShapes.length > 1 ) {
284
-
285
- let ambiguous = false;
286
- let toChange = 0;
287
-
288
- for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {
289
-
290
- betterShapeHoles[ sIdx ] = [];
301
+ entry.exclude = true;
291
302
 
292
303
  }
293
304
 
294
- for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {
295
-
296
- const sho = newShapeHoles[ sIdx ];
297
-
298
- for ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {
299
-
300
- const ho = sho[ hIdx ];
301
- let hole_unassigned = true;
302
-
303
- for ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {
304
-
305
- if ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {
306
-
307
- if ( sIdx !== s2Idx ) toChange ++;
308
-
309
- if ( hole_unassigned ) {
310
-
311
- hole_unassigned = false;
312
- betterShapeHoles[ s2Idx ].push( ho );
313
-
314
- } else {
315
-
316
- ambiguous = true;
317
-
318
- }
319
-
320
- }
321
-
322
- }
323
-
324
- if ( hole_unassigned ) {
305
+ }
325
306
 
326
- betterShapeHoles[ sIdx ].push( ho );
307
+ // Classify retained entries. An entry is an outer shape if it has no
308
+ // container or if its container is itself a hole (a solid nested inside
309
+ // a hole becomes a new top-level shape); otherwise it's a hole in its
310
+ // container. Entries were already sorted outermost-first, so each
311
+ // container's role is known by the time we look at it.
312
+ for ( const entry of entries ) {
327
313
 
328
- }
314
+ if ( entry.exclude ) continue;
315
+ entry.role = ( entry.container === null || entry.container.role === 'hole' ) ? 'outer' : 'hole';
329
316
 
330
- }
317
+ }
331
318
 
332
- }
319
+ // Build Shapes for outers first, then attach holes to their container's
320
+ // Shape.
321
+ const shapes = [];
322
+ const shapeByEntry = new Map();
333
323
 
334
- if ( toChange > 0 && ambiguous === false ) {
324
+ for ( const entry of entries ) {
335
325
 
336
- newShapeHoles = betterShapeHoles;
326
+ if ( entry.exclude || entry.role !== 'outer' ) continue;
337
327
 
338
- }
328
+ const shape = new Shape();
329
+ shape.curves = entry.subPath.curves;
330
+ shapes.push( shape );
331
+ shapeByEntry.set( entry, shape );
339
332
 
340
333
  }
341
334
 
342
- let tmpHoles;
335
+ for ( const entry of entries ) {
343
336
 
344
- for ( let i = 0, il = newShapes.length; i < il; i ++ ) {
337
+ if ( entry.exclude || entry.role !== 'hole' ) continue;
345
338
 
346
- tmpShape = newShapes[ i ].s;
347
- shapes.push( tmpShape );
348
- tmpHoles = newShapeHoles[ i ];
339
+ const shape = shapeByEntry.get( entry.container );
340
+ if ( ! shape ) continue;
349
341
 
350
- for ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {
351
-
352
- tmpShape.holes.push( tmpHoles[ j ].h );
353
-
354
- }
342
+ const hole = new Path();
343
+ hole.curves = entry.subPath.curves;
344
+ shape.holes.push( hole );
355
345
 
356
346
  }
357
347
 
358
- //log("shape", shapes);
359
-
360
348
  return shapes;
361
349
 
350
+
362
351
  }
363
352
 
364
353
  }
@@ -78,6 +78,7 @@ function CubicPoly() {
78
78
  //
79
79
 
80
80
  const tmp = /*@__PURE__*/ new Vector3();
81
+ const tmp2 = /*@__PURE__*/ new Vector3();
81
82
  const px = /*@__PURE__*/ new CubicPoly();
82
83
  const py = /*@__PURE__*/ new CubicPoly();
83
84
  const pz = /*@__PURE__*/ new CubicPoly();
@@ -202,8 +203,8 @@ class CatmullRomCurve3 extends Curve {
202
203
  } else {
203
204
 
204
205
  // extrapolate first point
205
- tmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );
206
- p0 = tmp;
206
+ tmp2.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );
207
+ p0 = tmp2;
207
208
 
208
209
  }
209
210
 
@@ -112,9 +112,9 @@ class ExtrudeGeometry extends BufferGeometry {
112
112
 
113
113
  // SETUP TNB variables
114
114
 
115
- // TODO1 - have a .isClosed in spline?
115
+ const isClosed = extrudePath.isCatmullRomCurve3 ? extrudePath.closed : false;
116
116
 
117
- splineTube = extrudePath.computeFrenetFrames( steps, false );
117
+ splineTube = extrudePath.computeFrenetFrames( steps, isClosed );
118
118
 
119
119
  // log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);
120
120
 
@@ -339,7 +339,7 @@ class PolyhedronGeometry extends BufferGeometry {
339
339
  */
340
340
  static fromJSON( data ) {
341
341
 
342
- return new PolyhedronGeometry( data.vertices, data.indices, data.radius, data.details );
342
+ return new PolyhedronGeometry( data.vertices, data.indices, data.radius, data.detail );
343
343
 
344
344
  }
345
345
 
@@ -76,6 +76,10 @@ class SphereGeometry extends BufferGeometry {
76
76
  const verticesRow = [];
77
77
 
78
78
  const v = iy / heightSegments;
79
+ const theta = thetaStart + v * thetaLength;
80
+
81
+ const y = radius * Math.cos( theta );
82
+ const ringRadius = Math.sqrt( radius * radius - y * y );
79
83
 
80
84
  // special case for the poles
81
85
 
@@ -94,12 +98,13 @@ class SphereGeometry extends BufferGeometry {
94
98
  for ( let ix = 0; ix <= widthSegments; ix ++ ) {
95
99
 
96
100
  const u = ix / widthSegments;
101
+ const phi = phiStart + u * phiLength;
97
102
 
98
103
  // vertex
99
104
 
100
- vertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );
101
- vertex.y = radius * Math.cos( thetaStart + v * thetaLength );
102
- vertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );
105
+ vertex.x = - ringRadius * Math.cos( phi );
106
+ vertex.y = y;
107
+ vertex.z = ringRadius * Math.sin( phi );
103
108
 
104
109
  vertices.push( vertex.x, vertex.y, vertex.z );
105
110
 
@@ -25,8 +25,10 @@ class TorusGeometry extends BufferGeometry {
25
25
  * @param {number} [radialSegments=12] - The number of radial segments.
26
26
  * @param {number} [tubularSegments=48] - The number of tubular segments.
27
27
  * @param {number} [arc=Math.PI*2] - Central angle in radians.
28
+ * @param {number} [thetaStart=0] - Start of the tubular sweep in radians.
29
+ * @param {number} [thetaLength=Math.PI*2] - Length of the tubular sweep in radians.
28
30
  */
29
- constructor( radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2 ) {
31
+ constructor( radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI * 2 ) {
30
32
 
31
33
  super();
32
34
 
@@ -44,7 +46,9 @@ class TorusGeometry extends BufferGeometry {
44
46
  tube: tube,
45
47
  radialSegments: radialSegments,
46
48
  tubularSegments: tubularSegments,
47
- arc: arc
49
+ arc: arc,
50
+ thetaStart: thetaStart,
51
+ thetaLength: thetaLength,
48
52
  };
49
53
 
50
54
  radialSegments = Math.floor( radialSegments );
@@ -67,10 +71,11 @@ class TorusGeometry extends BufferGeometry {
67
71
 
68
72
  for ( let j = 0; j <= radialSegments; j ++ ) {
69
73
 
74
+ const v = thetaStart + ( j / radialSegments ) * thetaLength;
75
+
70
76
  for ( let i = 0; i <= tubularSegments; i ++ ) {
71
77
 
72
78
  const u = i / tubularSegments * arc;
73
- const v = j / radialSegments * Math.PI * 2;
74
79
 
75
80
  // vertex
76
81
 
@@ -18,6 +18,9 @@ const _camera = /*@__PURE__*/ new Camera();
18
18
  *
19
19
  * `CameraHelper` must be a child of the scene.
20
20
  *
21
+ * When the camera is transformed or its projection matrix is changed, it's necessary
22
+ * to call the `update()` method of the respective helper.
23
+ *
21
24
  * ```js
22
25
  * const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
23
26
  * const helper = new THREE.CameraHelper( camera );
@@ -11,9 +11,12 @@ const _v3 = /*@__PURE__*/ new Vector3();
11
11
 
12
12
  /**
13
13
  * Helper object to assist with visualizing a {@link DirectionalLight}'s
14
- * effect on the scene. This consists of plane and a line representing the
14
+ * effect on the scene. This consists of a plane and a line representing the
15
15
  * light's position and direction.
16
16
  *
17
+ * When the directional light or its target are transformed or light properties
18
+ * are changed, it's necessary to call the `update()` method of the respective helper.
19
+ *
17
20
  * ```js
18
21
  * const light = new THREE.DirectionalLight( 0xFFFFFF );
19
22
  * scene.add( light );
@@ -113,6 +116,8 @@ class DirectionalLightHelper extends Object3D {
113
116
  */
114
117
  update() {
115
118
 
119
+ this.matrixWorldNeedsUpdate = true;
120
+
116
121
  this.light.updateWorldMatrix( true, false );
117
122
  this.light.target.updateWorldMatrix( true, false );
118
123
 
@@ -14,6 +14,9 @@ const _color2 = /*@__PURE__*/ new Color();
14
14
  * Creates a visual aid consisting of a spherical mesh for a
15
15
  * given {@link HemisphereLight}.
16
16
  *
17
+ * When the hemisphere light is transformed or its light properties are changed,
18
+ * it's necessary to call the `update()` method of the respective helper.
19
+ *
17
20
  * ```js
18
21
  * const light = new THREE.HemisphereLight( 0xffffbb, 0x080820, 1 );
19
22
  * const helper = new THREE.HemisphereLightHelper( light, 5 );
@@ -115,6 +118,8 @@ class HemisphereLightHelper extends Object3D {
115
118
 
116
119
  }
117
120
 
121
+ this.matrixWorldNeedsUpdate = true;
122
+
118
123
  this.light.updateWorldMatrix( true, false );
119
124
 
120
125
  mesh.lookAt( _vector.setFromMatrixPosition( this.light.matrixWorld ).negate() );
@@ -38,7 +38,7 @@ class PointLightHelper extends Mesh {
38
38
  /**
39
39
  * The light being visualized.
40
40
  *
41
- * @type {HemisphereLight}
41
+ * @type {PointLight}
42
42
  */
43
43
  this.light = light;
44
44
 
@@ -57,30 +57,6 @@ class PointLightHelper extends Mesh {
57
57
 
58
58
  this.update();
59
59
 
60
-
61
- /*
62
- // TODO: delete this comment?
63
- const distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );
64
- const distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );
65
-
66
- this.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );
67
- this.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );
68
-
69
- const d = light.distance;
70
-
71
- if ( d === 0.0 ) {
72
-
73
- this.lightDistance.visible = false;
74
-
75
- } else {
76
-
77
- this.lightDistance.scale.set( d, d, d );
78
-
79
- }
80
-
81
- this.add( this.lightDistance );
82
- */
83
-
84
60
  }
85
61
 
86
62
  /**
@@ -100,6 +76,8 @@ class PointLightHelper extends Mesh {
100
76
  */
101
77
  update() {
102
78
 
79
+ this.matrixWorldNeedsUpdate = true;
80
+
103
81
  this.light.updateWorldMatrix( true, false );
104
82
 
105
83
  if ( this.color !== undefined ) {
@@ -10,6 +10,9 @@ const _vector = /*@__PURE__*/ new Vector3();
10
10
  /**
11
11
  * This displays a cone shaped helper object for a {@link SpotLight}.
12
12
  *
13
+ * When the spot light or its target are transformed or light properties are
14
+ * changed, it's necessary to call the `update()` method of the respective helper.
15
+ *
13
16
  * ```js
14
17
  * const spotLight = new THREE.SpotLight( 0xffffff );
15
18
  * spotLight.position.set( 10, 10, 10 );
@@ -122,7 +125,7 @@ class SpotLightHelper extends Object3D {
122
125
 
123
126
  }
124
127
 
125
- this.matrixWorld.copy( this.light.matrixWorld );
128
+ this.matrixWorldNeedsUpdate = true;
126
129
 
127
130
  const coneLength = this.light.distance ? this.light.distance : 1000;
128
131
  const coneWidth = coneLength * Math.tan( this.light.angle );
@@ -80,6 +80,8 @@ class DirectionalLight extends Light {
80
80
 
81
81
  dispose() {
82
82
 
83
+ super.dispose();
84
+
83
85
  this.shadow.dispose();
84
86
 
85
87
  }
@@ -95,6 +97,17 @@ class DirectionalLight extends Light {
95
97
 
96
98
  }
97
99
 
100
+ toJSON( meta ) {
101
+
102
+ const data = super.toJSON( meta );
103
+
104
+ data.object.shadow = this.shadow.toJSON();
105
+ data.object.target = this.target.uuid;
106
+
107
+ return data;
108
+
109
+ }
110
+
98
111
  }
99
112
 
100
113
  export { DirectionalLight };
@@ -61,6 +61,16 @@ class HemisphereLight extends Light {
61
61
 
62
62
  }
63
63
 
64
+ toJSON( meta ) {
65
+
66
+ const data = super.toJSON( meta );
67
+
68
+ data.object.groundColor = this.groundColor.getHex();
69
+
70
+ return data;
71
+
72
+ }
73
+
64
74
  }
65
75
 
66
76
  export { HemisphereLight };