@plastic-software/three 0.181.3 → 0.183.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 (437) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +11330 -10017
  4. package/build/three.core.js +10011 -9493
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1414 -631
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +21 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +8007 -5427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +8005 -5426
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +2 -2
  16. package/examples/jsm/controls/ArcballControls.js +3 -3
  17. package/examples/jsm/controls/MapControls.js +55 -1
  18. package/examples/jsm/controls/OrbitControls.js +109 -6
  19. package/examples/jsm/controls/TrackballControls.js +6 -6
  20. package/examples/jsm/csm/CSM.js +2 -1
  21. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  22. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  23. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  24. package/examples/jsm/exporters/EXRExporter.js +1 -1
  25. package/examples/jsm/exporters/GLTFExporter.js +131 -4
  26. package/examples/jsm/exporters/USDZExporter.js +22 -3
  27. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  28. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  29. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  30. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  31. package/examples/jsm/helpers/ViewHelper.js +67 -8
  32. package/examples/jsm/inspector/Inspector.js +74 -14
  33. package/examples/jsm/inspector/RendererInspector.js +12 -2
  34. package/examples/jsm/inspector/tabs/Console.js +41 -7
  35. package/examples/jsm/inspector/tabs/Parameters.js +18 -2
  36. package/examples/jsm/inspector/tabs/Performance.js +2 -2
  37. package/examples/jsm/inspector/tabs/Viewer.js +4 -4
  38. package/examples/jsm/inspector/ui/Profiler.js +1836 -31
  39. package/examples/jsm/inspector/ui/Style.js +973 -14
  40. package/examples/jsm/inspector/ui/Tab.js +188 -1
  41. package/examples/jsm/inspector/ui/Values.js +17 -1
  42. package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
  43. package/examples/jsm/lines/LineMaterial.js +6 -0
  44. package/examples/jsm/loaders/3DMLoader.js +5 -4
  45. package/examples/jsm/loaders/3MFLoader.js +2 -2
  46. package/examples/jsm/loaders/AMFLoader.js +2 -2
  47. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  48. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  49. package/examples/jsm/loaders/EXRLoader.js +5 -5
  50. package/examples/jsm/loaders/FBXLoader.js +2 -4
  51. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  52. package/examples/jsm/loaders/GLTFLoader.js +122 -171
  53. package/examples/jsm/loaders/HDRLoader.js +0 -1
  54. package/examples/jsm/loaders/KMZLoader.js +5 -5
  55. package/examples/jsm/loaders/KTX2Loader.js +19 -3
  56. package/examples/jsm/loaders/LDrawLoader.js +2 -3
  57. package/examples/jsm/loaders/LWOLoader.js +7 -39
  58. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  59. package/examples/jsm/loaders/PCDLoader.js +4 -2
  60. package/examples/jsm/loaders/SVGLoader.js +1 -1
  61. package/examples/jsm/loaders/TDSLoader.js +0 -2
  62. package/examples/jsm/loaders/TGALoader.js +0 -2
  63. package/examples/jsm/loaders/USDLoader.js +100 -40
  64. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  65. package/examples/jsm/loaders/VOXLoader.js +660 -117
  66. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  67. package/examples/jsm/loaders/VTKLoader.js +37 -24
  68. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  69. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  70. package/examples/jsm/loaders/usd/USDAParser.js +447 -366
  71. package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
  72. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  73. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  74. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  75. package/examples/jsm/math/Octree.js +131 -1
  76. package/examples/jsm/misc/Volume.js +0 -1
  77. package/examples/jsm/misc/VolumeSlice.js +0 -1
  78. package/examples/jsm/objects/LensflareMesh.js +1 -1
  79. package/examples/jsm/objects/Sky.js +76 -4
  80. package/examples/jsm/objects/SkyMesh.js +127 -10
  81. package/examples/jsm/objects/Water.js +4 -3
  82. package/examples/jsm/objects/Water2.js +5 -3
  83. package/examples/jsm/objects/WaterMesh.js +5 -7
  84. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  85. package/examples/jsm/physics/JoltPhysics.js +10 -6
  86. package/examples/jsm/physics/RapierPhysics.js +9 -5
  87. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  88. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  89. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  90. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  91. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  92. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  93. package/examples/jsm/renderers/Projector.js +268 -30
  94. package/examples/jsm/renderers/SVGRenderer.js +193 -60
  95. package/examples/jsm/shaders/GTAOShader.js +19 -6
  96. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  97. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  98. package/examples/jsm/shaders/SAOShader.js +17 -4
  99. package/examples/jsm/shaders/SSAOShader.js +11 -1
  100. package/examples/jsm/shaders/SSRShader.js +6 -5
  101. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  102. package/examples/jsm/shaders/VignetteShader.js +1 -1
  103. package/examples/jsm/transpiler/AST.js +44 -0
  104. package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
  105. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  106. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  107. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  108. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  109. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  110. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  111. package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
  112. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  113. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  114. package/examples/jsm/tsl/display/CRT.js +150 -0
  115. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  116. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  117. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  118. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  119. package/examples/jsm/tsl/display/GTAONode.js +5 -4
  120. package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
  121. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  122. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  123. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  124. package/examples/jsm/tsl/display/OutlineNode.js +3 -3
  125. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  126. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  127. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  128. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  129. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  130. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  131. package/examples/jsm/tsl/display/SSGINode.js +8 -20
  132. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  133. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  134. package/examples/jsm/tsl/display/Shape.js +29 -0
  135. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  136. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  137. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  138. package/examples/jsm/tsl/display/TRAANode.js +273 -125
  139. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  140. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  141. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  142. package/examples/jsm/tsl/math/Bayer.js +40 -1
  143. package/examples/jsm/utils/LDrawUtils.js +1 -1
  144. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  145. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  146. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  147. package/package.json +20 -26
  148. package/src/Three.Core.js +2 -1
  149. package/src/Three.TSL.js +19 -11
  150. package/src/Three.WebGPU.Nodes.js +2 -0
  151. package/src/Three.WebGPU.js +3 -0
  152. package/src/Three.js +1 -0
  153. package/src/animation/AnimationAction.js +1 -1
  154. package/src/animation/AnimationClip.js +1 -1
  155. package/src/animation/AnimationMixer.js +6 -0
  156. package/src/animation/AnimationUtils.js +1 -12
  157. package/src/animation/KeyframeTrack.js +47 -8
  158. package/src/animation/PropertyMixer.js +4 -4
  159. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  160. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  161. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  162. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  163. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  164. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  165. package/src/audio/Audio.js +1 -1
  166. package/src/audio/AudioListener.js +5 -3
  167. package/src/cameras/Camera.js +32 -2
  168. package/src/cameras/CubeCamera.js +20 -0
  169. package/src/constants.js +90 -5
  170. package/src/core/BufferGeometry.js +14 -2
  171. package/src/core/Clock.js +7 -0
  172. package/src/core/Object3D.js +56 -4
  173. package/src/core/Raycaster.js +2 -2
  174. package/src/core/RenderTarget.js +3 -4
  175. package/src/extras/PMREMGenerator.js +7 -18
  176. package/src/extras/TextureUtils.js +5 -1
  177. package/src/geometries/ExtrudeGeometry.js +2 -2
  178. package/src/geometries/PolyhedronGeometry.js +1 -1
  179. package/src/geometries/TorusGeometry.js +8 -3
  180. package/src/helpers/CameraHelper.js +3 -0
  181. package/src/helpers/DirectionalLightHelper.js +4 -1
  182. package/src/helpers/HemisphereLightHelper.js +3 -0
  183. package/src/helpers/PointLightHelper.js +1 -25
  184. package/src/helpers/SpotLightHelper.js +3 -0
  185. package/src/lights/DirectionalLight.js +13 -0
  186. package/src/lights/HemisphereLight.js +10 -0
  187. package/src/lights/Light.js +1 -11
  188. package/src/lights/LightProbe.js +0 -15
  189. package/src/lights/LightShadow.js +15 -6
  190. package/src/lights/PointLight.js +15 -0
  191. package/src/lights/PointLightShadow.js +0 -86
  192. package/src/lights/SpotLight.js +22 -1
  193. package/src/lights/webgpu/IESSpotLight.js +2 -1
  194. package/src/loaders/Cache.js +28 -0
  195. package/src/loaders/FileLoader.js +1 -1
  196. package/src/loaders/ImageBitmapLoader.js +8 -3
  197. package/src/loaders/Loader.js +6 -0
  198. package/src/loaders/MaterialLoader.js +2 -1
  199. package/src/loaders/ObjectLoader.js +21 -2
  200. package/src/loaders/nodes/NodeLoader.js +2 -2
  201. package/src/materials/Material.js +2 -0
  202. package/src/materials/MeshLambertMaterial.js +9 -0
  203. package/src/materials/MeshPhongMaterial.js +9 -0
  204. package/src/materials/ShaderMaterial.js +20 -1
  205. package/src/materials/nodes/Line2NodeMaterial.js +7 -7
  206. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  207. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  208. package/src/materials/nodes/NodeMaterial.js +72 -25
  209. package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
  210. package/src/math/Line3.js +3 -5
  211. package/src/math/MathUtils.js +10 -10
  212. package/src/math/Matrix4.js +74 -65
  213. package/src/math/Quaternion.js +3 -29
  214. package/src/math/Sphere.js +1 -1
  215. package/src/math/Vector3.js +3 -5
  216. package/src/math/interpolants/BezierInterpolant.js +108 -0
  217. package/src/nodes/Nodes.js +87 -68
  218. package/src/nodes/TSL.js +6 -6
  219. package/src/nodes/accessors/Arrays.js +1 -1
  220. package/src/nodes/accessors/BatchNode.js +10 -10
  221. package/src/nodes/accessors/Bitangent.js +5 -5
  222. package/src/nodes/accessors/BufferAttributeNode.js +98 -12
  223. package/src/nodes/accessors/BufferNode.js +29 -2
  224. package/src/nodes/accessors/Camera.js +149 -28
  225. package/src/nodes/accessors/ClippingNode.js +4 -4
  226. package/src/nodes/accessors/CubeTextureNode.js +20 -1
  227. package/src/nodes/accessors/InstanceNode.js +148 -43
  228. package/src/nodes/accessors/MaterialNode.js +9 -1
  229. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  230. package/src/nodes/accessors/ModelNode.js +1 -1
  231. package/src/nodes/accessors/Normal.js +11 -11
  232. package/src/nodes/accessors/Position.js +34 -2
  233. package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
  234. package/src/nodes/accessors/ReferenceNode.js +4 -4
  235. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  236. package/src/nodes/accessors/SceneProperties.js +53 -0
  237. package/src/nodes/accessors/SkinningNode.js +27 -26
  238. package/src/nodes/accessors/StorageBufferNode.js +4 -21
  239. package/src/nodes/accessors/StorageTextureNode.js +37 -1
  240. package/src/nodes/accessors/Tangent.js +4 -14
  241. package/src/nodes/accessors/Texture3DNode.js +32 -35
  242. package/src/nodes/accessors/TextureNode.js +58 -22
  243. package/src/nodes/accessors/UniformArrayNode.js +4 -2
  244. package/src/nodes/accessors/UserDataNode.js +1 -2
  245. package/src/nodes/accessors/VertexColorNode.js +1 -2
  246. package/src/nodes/code/FunctionNode.js +1 -2
  247. package/src/nodes/core/ArrayNode.js +20 -1
  248. package/src/nodes/core/AssignNode.js +2 -2
  249. package/src/nodes/core/AttributeNode.js +2 -2
  250. package/src/nodes/core/ContextNode.js +103 -4
  251. package/src/nodes/core/MRTNode.js +48 -2
  252. package/src/nodes/core/Node.js +29 -3
  253. package/src/nodes/core/NodeBuilder.js +170 -53
  254. package/src/nodes/core/NodeError.js +28 -0
  255. package/src/nodes/core/NodeFrame.js +12 -4
  256. package/src/nodes/core/NodeUtils.js +10 -8
  257. package/src/nodes/core/OutputStructNode.js +12 -10
  258. package/src/nodes/core/ParameterNode.js +3 -3
  259. package/src/nodes/core/PropertyNode.js +19 -3
  260. package/src/nodes/core/StackNode.js +65 -16
  261. package/src/nodes/core/StackTrace.js +139 -0
  262. package/src/nodes/core/StructNode.js +16 -2
  263. package/src/nodes/core/StructTypeNode.js +11 -17
  264. package/src/nodes/core/SubBuildNode.js +1 -1
  265. package/src/nodes/core/UniformNode.js +21 -5
  266. package/src/nodes/core/VarNode.js +47 -22
  267. package/src/nodes/core/VaryingNode.js +1 -18
  268. package/src/nodes/display/BlendModes.js +0 -64
  269. package/src/nodes/display/ColorAdjustment.js +17 -0
  270. package/src/nodes/display/ColorSpaceNode.js +3 -3
  271. package/src/nodes/display/NormalMapNode.js +39 -4
  272. package/src/nodes/display/PassNode.js +98 -9
  273. package/src/nodes/display/RenderOutputNode.js +3 -3
  274. package/src/nodes/display/ScreenNode.js +3 -1
  275. package/src/nodes/display/ToneMappingNode.js +1 -1
  276. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  277. package/src/nodes/display/ViewportDepthNode.js +52 -4
  278. package/src/nodes/display/ViewportTextureNode.js +21 -4
  279. package/src/nodes/fog/Fog.js +18 -35
  280. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  281. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  282. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  283. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  284. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  285. package/src/nodes/geometry/RangeNode.js +4 -2
  286. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
  287. package/src/nodes/gpgpu/ComputeNode.js +5 -4
  288. package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
  289. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  290. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  291. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  292. package/src/nodes/lighting/LightsNode.js +2 -2
  293. package/src/nodes/lighting/PointShadowNode.js +162 -149
  294. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  295. package/src/nodes/lighting/ShadowNode.js +97 -41
  296. package/src/nodes/math/BitcountNode.js +433 -0
  297. package/src/nodes/math/ConditionalNode.js +2 -2
  298. package/src/nodes/math/MathNode.js +3 -40
  299. package/src/nodes/math/OperatorNode.js +2 -1
  300. package/src/nodes/math/PackFloatNode.js +98 -0
  301. package/src/nodes/math/UnpackFloatNode.js +96 -0
  302. package/src/nodes/pmrem/PMREMNode.js +1 -1
  303. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  304. package/src/nodes/tsl/TSLCore.js +17 -14
  305. package/src/nodes/utils/ArrayElementNode.js +13 -0
  306. package/src/nodes/utils/DebugNode.js +11 -11
  307. package/src/nodes/utils/EventNode.js +1 -2
  308. package/src/nodes/utils/JoinNode.js +2 -2
  309. package/src/nodes/utils/LoopNode.js +1 -1
  310. package/src/nodes/utils/MemberNode.js +1 -1
  311. package/src/nodes/utils/Packing.js +13 -1
  312. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  313. package/src/nodes/utils/RTTNode.js +1 -1
  314. package/src/nodes/utils/ReflectorNode.js +3 -4
  315. package/src/nodes/utils/SampleNode.js +1 -1
  316. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  317. package/src/nodes/utils/UVUtils.js +28 -0
  318. package/src/objects/BatchedMesh.js +27 -14
  319. package/src/objects/InstancedMesh.js +11 -0
  320. package/src/objects/Line.js +1 -1
  321. package/src/objects/Mesh.js +1 -1
  322. package/src/objects/Points.js +1 -1
  323. package/src/objects/Skeleton.js +9 -0
  324. package/src/renderers/WebGLRenderer.js +178 -92
  325. package/src/renderers/common/Backend.js +29 -0
  326. package/src/renderers/common/Background.js +24 -11
  327. package/src/renderers/common/BindGroup.js +1 -9
  328. package/src/renderers/common/Binding.js +11 -0
  329. package/src/renderers/common/Bindings.js +27 -12
  330. package/src/renderers/common/BlendMode.js +143 -0
  331. package/src/renderers/common/Buffer.js +40 -0
  332. package/src/renderers/common/BundleGroup.js +1 -1
  333. package/src/renderers/common/ChainMap.js +30 -6
  334. package/src/renderers/common/CubeRenderTarget.js +50 -6
  335. package/src/renderers/common/Geometries.js +29 -3
  336. package/src/renderers/common/Lighting.js +5 -21
  337. package/src/renderers/common/Pipelines.js +4 -4
  338. package/src/renderers/common/PostProcessing.js +8 -206
  339. package/src/renderers/common/RenderBundles.js +2 -1
  340. package/src/renderers/common/RenderContext.js +16 -0
  341. package/src/renderers/common/RenderContexts.js +33 -49
  342. package/src/renderers/common/RenderLists.js +2 -1
  343. package/src/renderers/common/RenderObject.js +15 -3
  344. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  345. package/src/renderers/common/RenderObjects.js +18 -2
  346. package/src/renderers/common/RenderPipeline.js +203 -17
  347. package/src/renderers/common/Renderer.js +257 -72
  348. package/src/renderers/common/Sampler.js +4 -4
  349. package/src/renderers/common/StorageBuffer.js +13 -1
  350. package/src/renderers/common/Textures.js +17 -1
  351. package/src/renderers/common/TimestampQueryPool.js +5 -3
  352. package/src/renderers/common/Uniform.js +8 -0
  353. package/src/renderers/common/UniformsGroup.js +61 -0
  354. package/src/renderers/common/XRManager.js +3 -2
  355. package/src/renderers/common/extras/PMREMGenerator.js +2 -8
  356. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  357. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
  358. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  359. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  360. package/src/renderers/shaders/DFGLUTData.js +19 -34
  361. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  362. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  363. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  364. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  365. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  366. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  371. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
  372. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  375. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  376. package/src/renderers/shaders/ShaderChunk.js +3 -3
  377. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  378. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  379. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  380. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  381. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  382. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  383. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  384. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  386. package/src/renderers/shaders/ShaderLib.js +7 -5
  387. package/src/renderers/shaders/UniformsLib.js +0 -3
  388. package/src/renderers/webgl/WebGLBackground.js +2 -2
  389. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  390. package/src/renderers/webgl/WebGLCapabilities.js +3 -4
  391. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  392. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  393. package/src/renderers/webgl/WebGLLights.js +18 -1
  394. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  395. package/src/renderers/webgl/WebGLObjects.js +3 -1
  396. package/src/renderers/webgl/WebGLOutput.js +267 -0
  397. package/src/renderers/webgl/WebGLProgram.js +45 -109
  398. package/src/renderers/webgl/WebGLPrograms.js +45 -49
  399. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  400. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  401. package/src/renderers/webgl/WebGLState.js +32 -37
  402. package/src/renderers/webgl/WebGLTextures.js +89 -28
  403. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  404. package/src/renderers/webgl/WebGLUtils.js +6 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
  407. package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
  408. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
  409. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
  410. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  411. package/src/renderers/webgpu/WebGPUBackend.js +119 -13
  412. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  413. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
  414. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
  415. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  416. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
  417. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  418. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  419. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
  420. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  421. package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
  422. package/src/renderers/webxr/WebXRManager.js +2 -2
  423. package/src/textures/CubeDepthTexture.js +76 -0
  424. package/src/textures/Source.js +1 -1
  425. package/src/textures/Texture.js +3 -3
  426. package/src/utils.js +258 -3
  427. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  428. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  429. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  430. package/src/nodes/accessors/SceneNode.js +0 -145
  431. package/src/nodes/code/ScriptableNode.js +0 -726
  432. package/src/nodes/code/ScriptableValueNode.js +0 -253
  433. package/src/nodes/display/PosterizeNode.js +0 -65
  434. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  435. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  436. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  437. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -242,7 +242,8 @@ class Object3D extends EventDispatcher {
242
242
 
243
243
  /**
244
244
  * When set to `true`, the engine automatically computes the local matrix from position,
245
- * rotation and scale every frame.
245
+ * rotation and scale every frame. If set to `false`, the app is responsible for recomputing
246
+ * the local matrix by calling `updateMatrix()`.
246
247
  *
247
248
  * The default values for all 3D objects is defined by `Object3D.DEFAULT_MATRIX_AUTO_UPDATE`.
248
249
  *
@@ -253,7 +254,8 @@ class Object3D extends EventDispatcher {
253
254
 
254
255
  /**
255
256
  * When set to `true`, the engine automatically computes the world matrix from the current local
256
- * matrix and the object's transformation hierarchy.
257
+ * matrix and the object's transformation hierarchy. If set to `false`, the app is responsible for
258
+ * recomputing the world matrix by directly updating the `matrixWorld` property.
257
259
  *
258
260
  * The default values for all 3D objects is defined by `Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE`.
259
261
  *
@@ -354,6 +356,19 @@ class Object3D extends EventDispatcher {
354
356
  */
355
357
  this.customDistanceMaterial = undefined;
356
358
 
359
+ /**
360
+ * Whether the 3D object is supposed to be static or not. If set to `true`, it means
361
+ * the 3D object is not going to be changed after the initial renderer. This includes
362
+ * geometry and material settings. A static 3D object can be processed by the renderer
363
+ * slightly faster since certain state checks can be bypassed.
364
+ *
365
+ * Only relevant in context of {@link WebGPURenderer}.
366
+ *
367
+ * @type {boolean}
368
+ * @default false
369
+ */
370
+ this.static = false;
371
+
357
372
  /**
358
373
  * An object that can be used to store custom data about the 3D object. It
359
374
  * should not hold references to functions as these will not be cloned.
@@ -362,6 +377,16 @@ class Object3D extends EventDispatcher {
362
377
  */
363
378
  this.userData = {};
364
379
 
380
+ /**
381
+ * The pivot point for rotation and scale transformations.
382
+ * When set, rotation and scale are applied around this point
383
+ * instead of the object's origin.
384
+ *
385
+ * @type {?Vector3}
386
+ * @default null
387
+ */
388
+ this.pivot = null;
389
+
365
390
  }
366
391
 
367
392
  /**
@@ -644,7 +669,7 @@ class Object3D extends EventDispatcher {
644
669
  }
645
670
 
646
671
  /**
647
- * Converts the given vector from this 3D object's word space to local space.
672
+ * Converts the given vector from this 3D object's world space to local space.
648
673
  *
649
674
  * @param {Vector3} vector - The vector to convert.
650
675
  * @return {Vector3} The converted vector.
@@ -1109,6 +1134,19 @@ class Object3D extends EventDispatcher {
1109
1134
 
1110
1135
  this.matrix.compose( this.position, this.quaternion, this.scale );
1111
1136
 
1137
+ const pivot = this.pivot;
1138
+
1139
+ if ( pivot !== null ) {
1140
+
1141
+ const px = pivot.x, py = pivot.y, pz = pivot.z;
1142
+ const te = this.matrix.elements;
1143
+
1144
+ te[ 12 ] += px - te[ 0 ] * px - te[ 4 ] * py - te[ 8 ] * pz;
1145
+ te[ 13 ] += py - te[ 1 ] * px - te[ 5 ] * py - te[ 9 ] * pz;
1146
+ te[ 14 ] += pz - te[ 2 ] * px - te[ 6 ] * py - te[ 10 ] * pz;
1147
+
1148
+ }
1149
+
1112
1150
  this.matrixWorldNeedsUpdate = true;
1113
1151
 
1114
1152
  }
@@ -1122,7 +1160,7 @@ class Object3D extends EventDispatcher {
1122
1160
  * `true` by default. Set these flags to `false` if you need more control over the update matrix process.
1123
1161
  *
1124
1162
  * @param {boolean} [force=false] - When set to `true`, a recomputation of world matrices is forced even
1125
- * when {@link Object3D#matrixWorldAutoUpdate} is set to `false`.
1163
+ * when {@link Object3D#matrixWorldNeedsUpdate} is `false`.
1126
1164
  */
1127
1165
  updateMatrixWorld( force ) {
1128
1166
 
@@ -1267,14 +1305,20 @@ class Object3D extends EventDispatcher {
1267
1305
  if ( this.visible === false ) object.visible = false;
1268
1306
  if ( this.frustumCulled === false ) object.frustumCulled = false;
1269
1307
  if ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;
1308
+ if ( this.static !== false ) object.static = this.static;
1270
1309
  if ( Object.keys( this.userData ).length > 0 ) object.userData = this.userData;
1271
1310
 
1272
1311
  object.layers = this.layers.mask;
1273
1312
  object.matrix = this.matrix.toArray();
1274
1313
  object.up = this.up.toArray();
1275
1314
 
1315
+ if ( this.pivot !== null ) object.pivot = this.pivot.toArray();
1316
+
1276
1317
  if ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;
1277
1318
 
1319
+ if ( this.morphTargetDictionary !== undefined ) object.morphTargetDictionary = Object.assign( {}, this.morphTargetDictionary );
1320
+ if ( this.morphTargetInfluences !== undefined ) object.morphTargetInfluences = this.morphTargetInfluences.slice();
1321
+
1278
1322
  // object specific properties
1279
1323
 
1280
1324
  if ( this.isInstancedMesh ) {
@@ -1548,6 +1592,12 @@ class Object3D extends EventDispatcher {
1548
1592
  this.quaternion.copy( source.quaternion );
1549
1593
  this.scale.copy( source.scale );
1550
1594
 
1595
+ if ( source.pivot !== null ) {
1596
+
1597
+ this.pivot = source.pivot.clone();
1598
+
1599
+ }
1600
+
1551
1601
  this.matrix.copy( source.matrix );
1552
1602
  this.matrixWorld.copy( source.matrixWorld );
1553
1603
 
@@ -1565,6 +1615,8 @@ class Object3D extends EventDispatcher {
1565
1615
  this.frustumCulled = source.frustumCulled;
1566
1616
  this.renderOrder = source.renderOrder;
1567
1617
 
1618
+ this.static = source.static;
1619
+
1568
1620
  this.animations = source.animations.slice();
1569
1621
 
1570
1622
  this.userData = JSON.parse( JSON.stringify( source.userData ) );
@@ -38,7 +38,7 @@ class Raycaster {
38
38
  this.near = near;
39
39
 
40
40
  /**
41
- * All results returned are further away than near. Near can't be negative.
41
+ * All results returned are closer than far. Far can't be lower than near.
42
42
  *
43
43
  * @type {number}
44
44
  * @default Infinity
@@ -167,7 +167,7 @@ class Raycaster {
167
167
  * @property {Object3D} object - The 3D object that has been intersected.
168
168
  * @property {Vector2} uv - U,V coordinates at point of intersection.
169
169
  * @property {Vector2} uv1 - Second set of U,V coordinates at point of intersection.
170
- * @property {Vector3} uv1 - Interpolated normal vector at point of intersection.
170
+ * @property {Vector3} normal - Interpolated normal vector at point of intersection.
171
171
  * @property {number} instanceId - The index number of the instance where the ray
172
172
  * intersects the {@link InstancedMesh}.
173
173
  */
@@ -124,10 +124,6 @@ class RenderTarget extends EventDispatcher {
124
124
  */
125
125
  this.viewport = new Vector4( 0, 0, width, height );
126
126
 
127
- const image = { width: width, height: height, depth: options.depth };
128
-
129
- const texture = new Texture( image );
130
-
131
127
  /**
132
128
  * An array of textures. Each color attachment is represented as a separate texture.
133
129
  * Has at least a single entry for the default color attachment.
@@ -136,6 +132,9 @@ class RenderTarget extends EventDispatcher {
136
132
  */
137
133
  this.textures = [];
138
134
 
135
+ const image = { width: width, height: height, depth: options.depth };
136
+ const texture = new Texture( image );
137
+
139
138
  const count = options.count;
140
139
  for ( let i = 0; i < count; i ++ ) {
141
140
 
@@ -103,7 +103,7 @@ class PMREMGenerator {
103
103
  * @param {number} [far=100] - The far plane distance.
104
104
  * @param {Object} [options={}] - The configuration options.
105
105
  * @param {number} [options.size=256] - The texture size of the PMREM.
106
- * @param {Vector3} [options.renderTarget=origin] - The position of the internal cube camera that renders the scene.
106
+ * @param {Vector3} [options.position=origin] - The position of the internal cube camera that renders the scene.
107
107
  * @return {WebGLRenderTarget} The resulting PMREM.
108
108
  */
109
109
  fromScene( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {
@@ -314,6 +314,7 @@ class PMREMGenerator {
314
314
  ( { lodMeshes: this._lodMeshes, sizeLods: this._sizeLods, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
315
315
 
316
316
  this._blurMaterial = _getBlurShader( _lodMax, width, height );
317
+ this._ggxMaterial = _getGGXShader( _lodMax, width, height );
317
318
 
318
319
  }
319
320
 
@@ -519,14 +520,6 @@ class PMREMGenerator {
519
520
  const renderer = this._renderer;
520
521
  const pingPongRenderTarget = this._pingPongRenderTarget;
521
522
 
522
- if ( this._ggxMaterial === null ) {
523
-
524
- const width = 3 * Math.max( this._cubeSize, 16 );
525
- const height = 4 * this._cubeSize;
526
- this._ggxMaterial = _getGGXShader( this._lodMax, width, height );
527
-
528
- }
529
-
530
523
  const ggxMaterial = this._ggxMaterial;
531
524
  const ggxMesh = this._lodMeshes[ lodOut ];
532
525
  ggxMesh.material = ggxMaterial;
@@ -539,7 +532,7 @@ class PMREMGenerator {
539
532
  const incrementalRoughness = Math.sqrt( targetRoughness * targetRoughness - sourceRoughness * sourceRoughness );
540
533
 
541
534
  // Apply blur strength mapping for better quality across the roughness range
542
- const blurStrength = 0.05 + targetRoughness * 0.95;
535
+ const blurStrength = 0.0 + targetRoughness * 1.25;
543
536
  const adjustedRoughness = incrementalRoughness * blurStrength;
544
537
 
545
538
  // Calculate viewport position based on output LOD level
@@ -852,24 +845,20 @@ function _getGGXShader( lodMax, width, height ) {
852
845
  vec3 importanceSampleGGX_VNDF(vec2 Xi, vec3 V, float roughness) {
853
846
  float alpha = roughness * roughness;
854
847
 
855
- // Section 3.2: Transform view direction to hemisphere configuration
856
- vec3 Vh = normalize(vec3(alpha * V.x, alpha * V.y, V.z));
857
-
858
848
  // Section 4.1: Orthonormal basis
859
- float lensq = Vh.x * Vh.x + Vh.y * Vh.y;
860
- vec3 T1 = lensq > 0.0 ? vec3(-Vh.y, Vh.x, 0.0) / sqrt(lensq) : vec3(1.0, 0.0, 0.0);
861
- vec3 T2 = cross(Vh, T1);
849
+ vec3 T1 = vec3(1.0, 0.0, 0.0);
850
+ vec3 T2 = cross(V, T1);
862
851
 
863
852
  // Section 4.2: Parameterization of projected area
864
853
  float r = sqrt(Xi.x);
865
854
  float phi = 2.0 * PI * Xi.y;
866
855
  float t1 = r * cos(phi);
867
856
  float t2 = r * sin(phi);
868
- float s = 0.5 * (1.0 + Vh.z);
857
+ float s = 0.5 * (1.0 + V.z);
869
858
  t2 = (1.0 - s) * sqrt(1.0 - t1 * t1) + s * t2;
870
859
 
871
860
  // Section 4.3: Reprojection onto hemisphere
872
- vec3 Nh = t1 * T1 + t2 * T2 + sqrt(max(0.0, 1.0 - t1 * t1 - t2 * t2)) * Vh;
861
+ vec3 Nh = t1 * T1 + t2 * T2 + sqrt(max(0.0, 1.0 - t1 * t1 - t2 * t2)) * V;
873
862
 
874
863
  // Section 3.4: Transform back to ellipsoid configuration
875
864
  return normalize(vec3(alpha * Nh.x, alpha * Nh.y, max(0.0, Nh.z)));
@@ -1,4 +1,4 @@
1
- import { AlphaFormat, RedFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBFormat, RGBAFormat, RGBAIntegerFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, UnsignedByteType, ByteType, UnsignedShortType, ShortType, HalfFloatType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedIntType, IntType, FloatType, UnsignedInt5999Type, UnsignedInt101111Type } from '../constants.js';
1
+ import { AlphaFormat, RedFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBFormat, RGBAFormat, RGBAIntegerFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, R11_EAC_Format, SIGNED_R11_EAC_Format, RG11_EAC_Format, SIGNED_RG11_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, UnsignedByteType, ByteType, UnsignedShortType, ShortType, HalfFloatType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedIntType, IntType, FloatType, UnsignedInt5999Type, UnsignedInt101111Type } from '../constants.js';
2
2
 
3
3
  /**
4
4
  * Scales the texture as large as possible within its surface without cropping
@@ -140,8 +140,12 @@ function getByteLength( width, height, format, type ) {
140
140
  // https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_etc/
141
141
  case RGB_ETC1_Format:
142
142
  case RGB_ETC2_Format:
143
+ case R11_EAC_Format:
144
+ case SIGNED_R11_EAC_Format:
143
145
  return Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 8;
144
146
  case RGBA_ETC2_EAC_Format:
147
+ case RG11_EAC_Format:
148
+ case SIGNED_RG11_EAC_Format:
145
149
  return Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;
146
150
 
147
151
  // https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_astc/
@@ -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
 
@@ -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 );
@@ -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 );
@@ -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
  /**
@@ -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 );
@@ -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 };
@@ -54,7 +54,7 @@ class Light extends Object3D {
54
54
  */
55
55
  dispose() {
56
56
 
57
- // Empty here in base class; some subclasses override.
57
+ this.dispatchEvent( { type: 'dispose' } );
58
58
 
59
59
  }
60
60
 
@@ -76,16 +76,6 @@ class Light extends Object3D {
76
76
  data.object.color = this.color.getHex();
77
77
  data.object.intensity = this.intensity;
78
78
 
79
- if ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();
80
-
81
- if ( this.distance !== undefined ) data.object.distance = this.distance;
82
- if ( this.angle !== undefined ) data.object.angle = this.angle;
83
- if ( this.decay !== undefined ) data.object.decay = this.decay;
84
- if ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;
85
-
86
- if ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();
87
- if ( this.target !== undefined ) data.object.target = this.target.uuid;
88
-
89
79
  return data;
90
80
 
91
81
  }
@@ -60,21 +60,6 @@ class LightProbe extends Light {
60
60
 
61
61
  }
62
62
 
63
- /**
64
- * Deserializes the light prove from the given JSON.
65
- *
66
- * @param {Object} json - The JSON holding the serialized light probe.
67
- * @return {LightProbe} A reference to this light probe.
68
- */
69
- fromJSON( json ) {
70
-
71
- this.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();
72
- this.sh.fromArray( json.sh );
73
-
74
- return this;
75
-
76
- }
77
-
78
63
  toJSON( meta ) {
79
64
 
80
65
  const data = super.toJSON( meta );
@@ -3,7 +3,7 @@ import { Vector2 } from '../math/Vector2.js';
3
3
  import { Vector3 } from '../math/Vector3.js';
4
4
  import { Vector4 } from '../math/Vector4.js';
5
5
  import { Frustum } from '../math/Frustum.js';
6
- import { UnsignedByteType } from '../constants.js';
6
+ import { UnsignedByteType, WebGPUCoordinateSystem } from '../constants.js';
7
7
 
8
8
  const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
9
9
  const _lightPositionWorld = /*@__PURE__*/ new Vector3();
@@ -52,6 +52,16 @@ class LightShadow {
52
52
  */
53
53
  this.bias = 0;
54
54
 
55
+ /**
56
+ * A node version of `bias`. Only supported with `WebGPURenderer`.
57
+ *
58
+ * If a bias node is defined, `bias` has no effect.
59
+ *
60
+ * @type {?Node<float>}
61
+ * @default null
62
+ */
63
+ this.biasNode = null;
64
+
55
65
  /**
56
66
  * Defines how much the position used to query the shadow map is offset along
57
67
  * the object normal. The default is `0`. Increasing this value can be used to
@@ -69,9 +79,6 @@ class LightShadow {
69
79
  * map size will allow for a higher value to be used here before these effects
70
80
  * become visible.
71
81
  *
72
- * The property has no effect when the shadow map type is `PCFSoftShadowMap` and
73
- * and it is recommended to increase softness by decreasing the shadow map size instead.
74
- *
75
82
  * The property has no effect when the shadow map type is `BasicShadowMap`.
76
83
  *
77
84
  * @type {number}
@@ -206,12 +213,12 @@ class LightShadow {
206
213
  _projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );
207
214
  this._frustum.setFromProjectionMatrix( _projScreenMatrix, shadowCamera.coordinateSystem, shadowCamera.reversedDepth );
208
215
 
209
- if ( shadowCamera.reversedDepth ) {
216
+ if ( shadowCamera.coordinateSystem === WebGPUCoordinateSystem || shadowCamera.reversedDepth ) {
210
217
 
211
218
  shadowMatrix.set(
212
219
  0.5, 0.0, 0.0, 0.5,
213
220
  0.0, 0.5, 0.0, 0.5,
214
- 0.0, 0.0, 1.0, 0.0,
221
+ 0.0, 0.0, 1.0, 0.0, // Identity Z (preserving the correct [0, 1] range from the projection matrix)
215
222
  0.0, 0.0, 0.0, 1.0
216
223
  );
217
224
 
@@ -295,6 +302,8 @@ class LightShadow {
295
302
 
296
303
  this.mapSize.copy( source.mapSize );
297
304
 
305
+ this.biasNode = source.biasNode;
306
+
298
307
  return this;
299
308
 
300
309
  }
@@ -94,6 +94,8 @@ class PointLight extends Light {
94
94
 
95
95
  dispose() {
96
96
 
97
+ super.dispose();
98
+
97
99
  this.shadow.dispose();
98
100
 
99
101
  }
@@ -111,6 +113,19 @@ class PointLight extends Light {
111
113
 
112
114
  }
113
115
 
116
+ toJSON( meta ) {
117
+
118
+ const data = super.toJSON( meta );
119
+
120
+ data.object.distance = this.distance;
121
+ data.object.decay = this.decay;
122
+
123
+ data.object.shadow = this.shadow.toJSON();
124
+
125
+ return data;
126
+
127
+ }
128
+
114
129
  }
115
130
 
116
131
  export { PointLight };