@plastic-software/three 0.175.14 → 0.179.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 (572) hide show
  1. package/README.md +4 -4
  2. package/build/three.cjs +8402 -6787
  3. package/build/three.core.js +8007 -6688
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +397 -102
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +84 -27
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +6831 -2838
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +6648 -2838
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +1 -3
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -27
  17. package/examples/jsm/capabilities/WebGPU.js +2 -1
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +62 -14
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +22 -8
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +57 -38
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +679 -300
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +11 -2
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  76. package/examples/jsm/lighting/TiledLighting.js +1 -0
  77. package/examples/jsm/lights/LightProbeGenerator.js +15 -3
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  79. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  80. package/examples/jsm/lines/Line2.js +1 -0
  81. package/examples/jsm/lines/LineGeometry.js +1 -0
  82. package/examples/jsm/lines/LineMaterial.js +4 -4
  83. package/examples/jsm/lines/LineSegments2.js +1 -0
  84. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  85. package/examples/jsm/lines/Wireframe.js +1 -0
  86. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  87. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  88. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  89. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  90. package/examples/jsm/loaders/3DMLoader.js +1 -0
  91. package/examples/jsm/loaders/3MFLoader.js +1 -0
  92. package/examples/jsm/loaders/AMFLoader.js +1 -0
  93. package/examples/jsm/loaders/BVHLoader.js +1 -0
  94. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  95. package/examples/jsm/loaders/DDSLoader.js +1 -0
  96. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  97. package/examples/jsm/loaders/EXRLoader.js +211 -22
  98. package/examples/jsm/loaders/FBXLoader.js +25 -23
  99. package/examples/jsm/loaders/FontLoader.js +1 -0
  100. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  101. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  102. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  103. package/examples/jsm/loaders/IESLoader.js +1 -0
  104. package/examples/jsm/loaders/KMZLoader.js +1 -0
  105. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  106. package/examples/jsm/loaders/KTXLoader.js +1 -0
  107. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  108. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  110. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  111. package/examples/jsm/loaders/LWOLoader.js +1 -13
  112. package/examples/jsm/loaders/LottieLoader.js +15 -0
  113. package/examples/jsm/loaders/MD2Loader.js +1 -0
  114. package/examples/jsm/loaders/MDDLoader.js +1 -0
  115. package/examples/jsm/loaders/MTLLoader.js +4 -3
  116. package/examples/jsm/loaders/MaterialXLoader.js +213 -30
  117. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  118. package/examples/jsm/loaders/OBJLoader.js +1 -0
  119. package/examples/jsm/loaders/PCDLoader.js +122 -19
  120. package/examples/jsm/loaders/PDBLoader.js +1 -0
  121. package/examples/jsm/loaders/PLYLoader.js +1 -0
  122. package/examples/jsm/loaders/PVRLoader.js +1 -0
  123. package/examples/jsm/loaders/RGBELoader.js +1 -0
  124. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  125. package/examples/jsm/loaders/STLLoader.js +1 -0
  126. package/examples/jsm/loaders/SVGLoader.js +1 -0
  127. package/examples/jsm/loaders/TDSLoader.js +1 -0
  128. package/examples/jsm/loaders/TGALoader.js +1 -0
  129. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  130. package/examples/jsm/loaders/TTFLoader.js +14 -1
  131. package/examples/jsm/loaders/USDLoader.js +219 -0
  132. package/examples/jsm/loaders/USDZLoader.js +4 -891
  133. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  134. package/examples/jsm/loaders/VOXLoader.js +1 -0
  135. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  136. package/examples/jsm/loaders/VTKLoader.js +1 -0
  137. package/examples/jsm/loaders/XYZLoader.js +1 -0
  138. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  139. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  140. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  141. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  142. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  143. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  144. package/examples/jsm/math/Capsule.js +2 -0
  145. package/examples/jsm/math/ColorConverter.js +1 -0
  146. package/examples/jsm/math/ConvexHull.js +2 -0
  147. package/examples/jsm/math/ImprovedNoise.js +19 -14
  148. package/examples/jsm/math/Lut.js +2 -0
  149. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  150. package/examples/jsm/math/OBB.js +2 -0
  151. package/examples/jsm/math/Octree.js +20 -1
  152. package/examples/jsm/math/SimplexNoise.js +2 -0
  153. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  155. package/examples/jsm/misc/Gyroscope.js +1 -0
  156. package/examples/jsm/misc/MD2Character.js +2 -0
  157. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  158. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  159. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  160. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  161. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  162. package/examples/jsm/misc/RollerCoaster.js +5 -0
  163. package/examples/jsm/misc/TubePainter.js +1 -0
  164. package/examples/jsm/misc/Volume.js +2 -0
  165. package/examples/jsm/misc/VolumeSlice.js +1 -0
  166. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  167. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  168. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  169. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  170. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  171. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  172. package/examples/jsm/objects/Lensflare.js +3 -0
  173. package/examples/jsm/objects/LensflareMesh.js +4 -3
  174. package/examples/jsm/objects/MarchingCubes.js +2 -0
  175. package/examples/jsm/objects/Reflector.js +1 -0
  176. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  177. package/examples/jsm/objects/Refractor.js +1 -0
  178. package/examples/jsm/objects/ShadowMesh.js +1 -0
  179. package/examples/jsm/objects/Sky.js +2 -1
  180. package/examples/jsm/objects/SkyMesh.js +22 -19
  181. package/examples/jsm/objects/Water.js +1 -0
  182. package/examples/jsm/objects/Water2.js +1 -0
  183. package/examples/jsm/objects/Water2Mesh.js +3 -1
  184. package/examples/jsm/objects/WaterMesh.js +2 -1
  185. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  186. package/examples/jsm/physics/JoltPhysics.js +1 -0
  187. package/examples/jsm/physics/RapierPhysics.js +149 -13
  188. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  189. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  190. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  191. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  192. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  193. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  194. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  195. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  196. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  197. package/examples/jsm/postprocessing/GTAOPass.js +14 -12
  198. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  199. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  200. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  201. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  202. package/examples/jsm/postprocessing/OutlinePass.js +22 -19
  203. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  204. package/examples/jsm/postprocessing/Pass.js +3 -1
  205. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  206. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  207. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  208. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  209. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  210. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  211. package/examples/jsm/postprocessing/SSAOPass.js +12 -10
  212. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  213. package/examples/jsm/postprocessing/SavePass.js +2 -1
  214. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  215. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  216. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  217. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  218. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  219. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  220. package/examples/jsm/renderers/Projector.js +2 -0
  221. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  222. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  223. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  224. package/examples/jsm/shaders/BasicShader.js +4 -1
  225. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  226. package/examples/jsm/shaders/BlendShader.js +4 -1
  227. package/examples/jsm/shaders/BokehShader.js +4 -1
  228. package/examples/jsm/shaders/BokehShader2.js +4 -1
  229. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  230. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  231. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  232. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  233. package/examples/jsm/shaders/CopyShader.js +4 -1
  234. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  235. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  236. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  237. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  238. package/examples/jsm/shaders/ExposureShader.js +4 -1
  239. package/examples/jsm/shaders/FXAAShader.js +4 -1
  240. package/examples/jsm/shaders/FilmShader.js +4 -1
  241. package/examples/jsm/shaders/FocusShader.js +4 -1
  242. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  243. package/examples/jsm/shaders/GTAOShader.js +4 -1
  244. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  245. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  246. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  247. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  248. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  249. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  250. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  251. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  252. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  253. package/examples/jsm/shaders/MirrorShader.js +4 -1
  254. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  255. package/examples/jsm/shaders/OutputShader.js +4 -1
  256. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  257. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  258. package/examples/jsm/shaders/SAOShader.js +4 -1
  259. package/examples/jsm/shaders/SMAAShader.js +1 -0
  260. package/examples/jsm/shaders/SSAOShader.js +4 -1
  261. package/examples/jsm/shaders/SSRShader.js +1 -0
  262. package/examples/jsm/shaders/SepiaShader.js +4 -1
  263. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  264. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  265. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  266. package/examples/jsm/shaders/ToonShader.js +2 -1
  267. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  268. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
  269. package/examples/jsm/shaders/VelocityShader.js +4 -1
  270. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  271. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  272. package/examples/jsm/shaders/VignetteShader.js +4 -1
  273. package/examples/jsm/shaders/VolumeShader.js +5 -2
  274. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  275. package/examples/jsm/textures/FlakesTexture.js +2 -0
  276. package/examples/jsm/transpiler/AST.js +381 -30
  277. package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
  278. package/examples/jsm/transpiler/Linker.js +327 -0
  279. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  280. package/examples/jsm/transpiler/Transpiler.js +19 -1
  281. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  282. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  283. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  284. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  285. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  286. package/examples/jsm/tsl/display/BloomNode.js +9 -7
  287. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  288. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  289. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  290. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  291. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  292. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  293. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  294. package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
  295. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  296. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  297. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  298. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  300. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  301. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  302. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  303. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  304. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  305. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  306. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  307. package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
  308. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  309. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  310. package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
  311. package/examples/jsm/tsl/math/Bayer.js +4 -1
  312. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  313. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  314. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  315. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  316. package/examples/jsm/utils/CameraUtils.js +4 -1
  317. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  318. package/examples/jsm/utils/GeometryUtils.js +4 -1
  319. package/examples/jsm/utils/LDrawUtils.js +2 -0
  320. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  321. package/examples/jsm/utils/SceneUtils.js +4 -1
  322. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  323. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  324. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  325. package/examples/jsm/utils/SortUtils.js +4 -1
  326. package/examples/jsm/utils/UVsDebug.js +4 -1
  327. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  328. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  329. package/examples/jsm/utils/WorkerPool.js +2 -0
  330. package/examples/jsm/webxr/ARButton.js +1 -0
  331. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  332. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  333. package/examples/jsm/webxr/Text2D.js +4 -1
  334. package/examples/jsm/webxr/VRButton.js +1 -0
  335. package/examples/jsm/webxr/XRButton.js +1 -0
  336. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  338. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  339. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  340. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  341. package/examples/jsm/webxr/XRPlanes.js +1 -0
  342. package/package.json +6 -4
  343. package/src/Three.Core.js +2 -1
  344. package/src/Three.TSL.js +83 -26
  345. package/src/Three.WebGPU.Nodes.js +1 -0
  346. package/src/Three.WebGPU.js +3 -0
  347. package/src/animation/KeyframeTrack.js +1 -1
  348. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  350. package/src/audio/AudioListener.js +13 -10
  351. package/src/cameras/ArrayCamera.js +9 -1
  352. package/src/cameras/Camera.js +14 -0
  353. package/src/cameras/OrthographicCamera.js +1 -1
  354. package/src/cameras/PerspectiveCamera.js +1 -1
  355. package/src/constants.js +47 -20
  356. package/src/core/BufferAttribute.js +3 -3
  357. package/src/core/BufferGeometry.js +2 -5
  358. package/src/core/Clock.js +2 -8
  359. package/src/core/GLBufferAttribute.js +13 -1
  360. package/src/core/Object3D.js +23 -22
  361. package/src/core/RenderTarget.js +65 -21
  362. package/src/core/RenderTarget3D.js +1 -0
  363. package/{examples/jsm/misc → src/core}/Timer.js +4 -40
  364. package/src/extras/PMREMGenerator.js +11 -0
  365. package/src/extras/TextureUtils.js +1 -5
  366. package/src/extras/core/Curve.js +1 -1
  367. package/src/extras/core/Path.js +22 -22
  368. package/src/geometries/CapsuleGeometry.js +167 -17
  369. package/src/geometries/ExtrudeGeometry.js +39 -29
  370. package/src/helpers/ArrowHelper.js +2 -2
  371. package/src/helpers/CameraHelper.js +41 -11
  372. package/src/helpers/SkeletonHelper.js +36 -7
  373. package/src/lights/LightShadow.js +34 -7
  374. package/src/lights/PointLightShadow.js +1 -1
  375. package/src/lights/SpotLightShadow.js +9 -1
  376. package/src/lights/webgpu/ProjectorLight.js +46 -0
  377. package/src/loaders/BufferGeometryLoader.js +1 -10
  378. package/src/loaders/FileLoader.js +27 -4
  379. package/src/loaders/ImageBitmapLoader.js +48 -9
  380. package/src/loaders/ImageLoader.js +55 -8
  381. package/src/loaders/Loader.js +14 -0
  382. package/src/loaders/LoadingManager.js +23 -0
  383. package/src/loaders/ObjectLoader.js +44 -16
  384. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  385. package/src/materials/Material.js +1 -7
  386. package/src/materials/MeshBasicMaterial.js +1 -1
  387. package/src/materials/nodes/Line2NodeMaterial.js +0 -8
  388. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  389. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  390. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  391. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  392. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  393. package/src/materials/nodes/NodeMaterial.js +106 -20
  394. package/src/materials/nodes/PointsNodeMaterial.js +5 -0
  395. package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
  396. package/src/math/Box3.js +28 -0
  397. package/src/math/Color.js +7 -7
  398. package/src/math/ColorManagement.js +22 -3
  399. package/src/math/Frustum.js +25 -9
  400. package/src/math/FrustumArray.js +258 -0
  401. package/src/math/Line3.js +129 -2
  402. package/src/math/Matrix4.js +48 -27
  403. package/src/math/Quaternion.js +1 -1
  404. package/src/math/Ray.js +2 -0
  405. package/src/math/Sphere.js +28 -0
  406. package/src/math/Spherical.js +2 -2
  407. package/src/nodes/Nodes.js +3 -3
  408. package/src/nodes/TSL.js +6 -3
  409. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  410. package/src/nodes/accessors/Bitangent.js +54 -26
  411. package/src/nodes/accessors/Camera.js +40 -13
  412. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  413. package/src/nodes/accessors/InstanceNode.js +5 -4
  414. package/src/nodes/accessors/Lights.js +2 -2
  415. package/src/nodes/accessors/MaterialNode.js +4 -0
  416. package/src/nodes/accessors/ModelNode.js +1 -1
  417. package/src/nodes/accessors/Normal.js +110 -24
  418. package/src/nodes/accessors/Object3DNode.js +7 -8
  419. package/src/nodes/accessors/Position.js +14 -4
  420. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  421. package/src/nodes/accessors/ReferenceNode.js +19 -4
  422. package/src/nodes/accessors/ReflectVector.js +3 -3
  423. package/src/nodes/accessors/SceneNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +3 -2
  425. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  426. package/src/nodes/accessors/StorageTextureNode.js +15 -4
  427. package/src/nodes/accessors/Tangent.js +25 -17
  428. package/src/nodes/accessors/TangentUtils.js +46 -0
  429. package/src/nodes/accessors/TextureBicubic.js +21 -3
  430. package/src/nodes/accessors/TextureNode.js +71 -8
  431. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  432. package/src/nodes/accessors/VelocityNode.js +1 -0
  433. package/src/nodes/accessors/VertexColorNode.js +4 -4
  434. package/src/nodes/code/CodeNode.js +8 -11
  435. package/src/nodes/core/ArrayNode.js +12 -0
  436. package/src/nodes/core/AssignNode.js +30 -5
  437. package/src/nodes/core/AttributeNode.js +2 -2
  438. package/src/nodes/core/ContextNode.js +27 -4
  439. package/src/nodes/core/Node.js +83 -22
  440. package/src/nodes/core/NodeBuilder.js +273 -49
  441. package/src/nodes/core/NodeUtils.js +46 -1
  442. package/src/nodes/core/NodeVarying.js +19 -1
  443. package/src/nodes/core/PropertyNode.js +8 -12
  444. package/src/nodes/core/StackNode.js +171 -26
  445. package/src/nodes/core/StructTypeNode.js +26 -4
  446. package/src/nodes/core/SubBuildNode.js +89 -0
  447. package/src/nodes/core/UniformNode.js +63 -5
  448. package/src/nodes/core/VarNode.js +102 -4
  449. package/src/nodes/core/VaryingNode.js +45 -24
  450. package/src/nodes/display/BlendModes.js +42 -1
  451. package/src/nodes/display/ColorSpaceNode.js +4 -27
  452. package/src/nodes/display/FrontFacingNode.js +34 -2
  453. package/src/nodes/display/NormalMapNode.js +19 -50
  454. package/src/nodes/display/PassNode.js +165 -20
  455. package/src/nodes/display/ScreenNode.js +0 -26
  456. package/src/nodes/display/ViewportTextureNode.js +67 -7
  457. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  458. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  459. package/src/nodes/functions/PhongLightingModel.js +3 -3
  460. package/src/nodes/functions/PhysicalLightingModel.js +16 -16
  461. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  462. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  463. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  464. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  465. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  466. package/src/nodes/gpgpu/ComputeNode.js +68 -24
  467. package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
  468. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  469. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  470. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  471. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  472. package/src/nodes/lighting/LightsNode.js +29 -11
  473. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  474. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  475. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  476. package/src/nodes/lighting/ShadowNode.js +174 -242
  477. package/src/nodes/lighting/SpotLightNode.js +44 -7
  478. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  479. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  480. package/src/nodes/math/ConditionalNode.js +1 -20
  481. package/src/nodes/math/MathNode.js +146 -75
  482. package/src/nodes/math/OperatorNode.js +129 -119
  483. package/src/nodes/shapes/Shapes.js +5 -4
  484. package/src/nodes/tsl/TSLBase.js +1 -0
  485. package/src/nodes/tsl/TSLCore.js +222 -72
  486. package/src/nodes/utils/DebugNode.js +16 -4
  487. package/src/nodes/utils/Discard.js +2 -2
  488. package/src/nodes/utils/EquirectUV.js +27 -0
  489. package/src/nodes/utils/EventNode.js +83 -0
  490. package/src/nodes/utils/LoopNode.js +64 -34
  491. package/src/nodes/utils/MatcapUV.js +22 -0
  492. package/src/nodes/utils/RTTNode.js +22 -5
  493. package/src/nodes/utils/ReflectorNode.js +77 -7
  494. package/src/nodes/utils/SampleNode.js +81 -0
  495. package/src/nodes/utils/TriplanarTextures.js +65 -0
  496. package/src/objects/BatchedMesh.js +20 -6
  497. package/src/objects/Mesh.js +9 -0
  498. package/src/objects/Skeleton.js +1 -1
  499. package/src/objects/Sprite.js +9 -0
  500. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  501. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  502. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  503. package/src/renderers/WebGLRenderer.js +45 -32
  504. package/src/renderers/common/Animation.js +2 -2
  505. package/src/renderers/common/Background.js +13 -2
  506. package/src/renderers/common/Bindings.js +19 -18
  507. package/src/renderers/common/Color4.js +2 -2
  508. package/src/renderers/common/CubeRenderTarget.js +1 -1
  509. package/src/renderers/common/PostProcessing.js +60 -5
  510. package/src/renderers/common/RenderList.js +0 -4
  511. package/src/renderers/common/RenderObject.js +80 -4
  512. package/src/renderers/common/Renderer.js +133 -22
  513. package/src/renderers/common/SampledTexture.js +3 -71
  514. package/src/renderers/common/Sampler.js +79 -0
  515. package/src/renderers/common/Storage3DTexture.js +100 -0
  516. package/src/renderers/common/StorageArrayTexture.js +84 -0
  517. package/src/renderers/common/StorageTexture.js +19 -0
  518. package/src/renderers/common/Textures.js +34 -24
  519. package/src/renderers/common/TimestampQueryPool.js +1 -0
  520. package/src/renderers/common/Uniform.js +1 -1
  521. package/src/renderers/common/UniformsGroup.js +14 -18
  522. package/src/renderers/common/XRManager.js +183 -35
  523. package/src/renderers/common/XRRenderTarget.js +21 -4
  524. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  525. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  526. package/src/renderers/common/nodes/Nodes.js +13 -3
  527. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  528. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
  529. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  530. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  531. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  532. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  533. package/src/renderers/webgl/WebGLMaterials.js +6 -6
  534. package/src/renderers/webgl/WebGLProgram.js +22 -16
  535. package/src/renderers/webgl/WebGLPrograms.js +8 -6
  536. package/src/renderers/webgl/WebGLShadowMap.js +14 -3
  537. package/src/renderers/webgl/WebGLState.js +4 -4
  538. package/src/renderers/webgl/WebGLTextures.js +163 -11
  539. package/src/renderers/webgl/WebGLUtils.js +1 -3
  540. package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
  541. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
  542. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  543. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  544. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  545. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  546. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  547. package/src/renderers/webgpu/WebGPUBackend.js +505 -143
  548. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  549. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  550. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  551. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
  552. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  553. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  554. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
  555. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  556. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
  557. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
  558. package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
  559. package/src/renderers/webxr/WebXRController.js +1 -1
  560. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  561. package/src/renderers/webxr/WebXRManager.js +70 -9
  562. package/src/textures/DepthTexture.js +6 -10
  563. package/src/textures/ExternalTexture.js +45 -0
  564. package/src/textures/FramebufferTexture.js +2 -2
  565. package/src/textures/Source.js +32 -0
  566. package/src/textures/Texture.js +118 -1
  567. package/src/textures/VideoTexture.js +31 -3
  568. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  569. package/src/core/RenderTargetArray.js +0 -40
  570. package/src/nodes/utils/EquirectUVNode.js +0 -65
  571. package/src/nodes/utils/MatcapUVNode.js +0 -49
  572. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -2,7 +2,6 @@ import { Material } from '../Material.js';
2
2
  import { NormalBlending } from '../../constants.js';
3
3
 
4
4
  import { getNodeChildren, getCacheKey } from '../../nodes/core/NodeUtils.js';
5
- import { attribute } from '../../nodes/core/AttributeNode.js';
6
5
  import { output, diffuseColor, emissive, varyingProperty } from '../../nodes/core/PropertyNode.js';
7
6
  import { materialAlphaTest, materialColor, materialOpacity, materialEmissive, materialNormal, materialLightMap, materialAO } from '../../nodes/accessors/MaterialNode.js';
8
7
  import { modelViewProjection } from '../../nodes/accessors/ModelViewProjectionNode.js';
@@ -14,7 +13,7 @@ import { positionLocal, positionView } from '../../nodes/accessors/Position.js';
14
13
  import { skinning } from '../../nodes/accessors/SkinningNode.js';
15
14
  import { morphReference } from '../../nodes/accessors/MorphNode.js';
16
15
  import { mix } from '../../nodes/math/MathNode.js';
17
- import { float, vec3, vec4 } from '../../nodes/tsl/TSLBase.js';
16
+ import { float, vec3, vec4, bool } from '../../nodes/tsl/TSLBase.js';
18
17
  import AONode from '../../nodes/lighting/AONode.js';
19
18
  import { lightingContext } from '../../nodes/lighting/LightingContextNode.js';
20
19
  import IrradianceNode from '../../nodes/lighting/IrradianceNode.js';
@@ -24,6 +23,9 @@ import { clipping, clippingAlpha, hardwareClipping } from '../../nodes/accessors
24
23
  import NodeMaterialObserver from './manager/NodeMaterialObserver.js';
25
24
  import getAlphaHashThreshold from '../../nodes/functions/material/getAlphaHashThreshold.js';
26
25
  import { modelViewMatrix } from '../../nodes/accessors/ModelNode.js';
26
+ import { vertexColor } from '../../nodes/accessors/VertexColorNode.js';
27
+ import { premultiplyAlpha } from '../../nodes/display/BlendModes.js';
28
+ import { subBuild } from '../../nodes/core/SubBuildNode.js';
27
29
 
28
30
  /**
29
31
  * Base class for all node materials.
@@ -188,7 +190,7 @@ class NodeMaterial extends Material {
188
190
  this.opacityNode = null;
189
191
 
190
192
  /**
191
- * This node can be used to to implement a variety of filter-like effects. The idea is
193
+ * This node can be used to implement a variety of filter-like effects. The idea is
192
194
  * to store the current rendering into a texture e.g. via `viewportSharedTexture()`, use it
193
195
  * to create an arbitrary effect and then assign the node composition to this property.
194
196
  * Everything behind the object using this material will now be affected by a filter.
@@ -229,6 +231,15 @@ class NodeMaterial extends Material {
229
231
  */
230
232
  this.alphaTestNode = null;
231
233
 
234
+
235
+ /**
236
+ * Discards the fragment if the mask value is `false`.
237
+ *
238
+ * @type {?Node<bool>}
239
+ * @default null
240
+ */
241
+ this.maskNode = null;
242
+
232
243
  /**
233
244
  * The local vertex positions are computed based on multiple factors like the
234
245
  * attribute data, morphing or skinning. This node property allows to overwrite
@@ -278,7 +289,16 @@ class NodeMaterial extends Material {
278
289
  * @type {?Node<float>}
279
290
  * @default null
280
291
  */
281
- this.shadowPositionNode = null;
292
+ this.receivedShadowPositionNode = null;
293
+
294
+ /**
295
+ * Allows to overwrite the geometry position used for shadow map projection which
296
+ * is by default {@link positionLocal}, the vertex position in local space.
297
+ *
298
+ * @type {?Node<float>}
299
+ * @default null
300
+ */
301
+ this.castShadowPositionNode = null;
282
302
 
283
303
  /**
284
304
  * This node can be used to influence how an object using this node material
@@ -362,6 +382,26 @@ class NodeMaterial extends Material {
362
382
  */
363
383
  this.vertexNode = null;
364
384
 
385
+ // Deprecated properties
386
+
387
+ Object.defineProperty( this, 'shadowPositionNode', { // @deprecated, r176
388
+
389
+ get: () => {
390
+
391
+ return this.receivedShadowPositionNode;
392
+
393
+ },
394
+
395
+ set: ( value ) => {
396
+
397
+ console.warn( 'THREE.NodeMaterial: ".shadowPositionNode" was renamed to ".receivedShadowPositionNode".' );
398
+
399
+ this.receivedShadowPositionNode = value;
400
+
401
+ }
402
+
403
+ } );
404
+
365
405
  }
366
406
 
367
407
  /**
@@ -406,7 +446,7 @@ class NodeMaterial extends Material {
406
446
  */
407
447
  setup( builder ) {
408
448
 
409
- builder.context.setupNormal = () => this.setupNormal( builder );
449
+ builder.context.setupNormal = () => subBuild( this.setupNormal( builder ), 'NORMAL', 'vec3' );
410
450
  builder.context.setupPositionView = () => this.setupPositionView( builder );
411
451
  builder.context.setupModelViewProjection = () => this.setupModelViewProjection( builder );
412
452
 
@@ -417,7 +457,9 @@ class NodeMaterial extends Material {
417
457
 
418
458
  builder.addStack();
419
459
 
420
- const vertexNode = this.vertexNode || this.setupVertex( builder );
460
+ const mvp = subBuild( this.setupVertex( builder ), 'VERTEX' );
461
+
462
+ const vertexNode = this.vertexNode || mvp;
421
463
 
422
464
  builder.stack.outputNode = vertexNode;
423
465
 
@@ -632,7 +674,7 @@ class NodeMaterial extends Material {
632
674
 
633
675
  if ( depthNode !== null ) {
634
676
 
635
- depth.assign( depthNode ).append();
677
+ depth.assign( depthNode ).toStack();
636
678
 
637
679
  }
638
680
 
@@ -693,13 +735,13 @@ class NodeMaterial extends Material {
693
735
 
694
736
  if ( geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color ) {
695
737
 
696
- morphReference( object ).append();
738
+ morphReference( object ).toStack();
697
739
 
698
740
  }
699
741
 
700
742
  if ( object.isSkinnedMesh === true ) {
701
743
 
702
- skinning( object ).append();
744
+ skinning( object ).toStack();
703
745
 
704
746
  }
705
747
 
@@ -715,19 +757,19 @@ class NodeMaterial extends Material {
715
757
 
716
758
  if ( object.isBatchedMesh ) {
717
759
 
718
- batch( object ).append();
760
+ batch( object ).toStack();
719
761
 
720
762
  }
721
763
 
722
764
  if ( ( object.isInstancedMesh && object.instanceMatrix && object.instanceMatrix.isInstancedBufferAttribute === true ) ) {
723
765
 
724
- instancedMesh( object ).append();
766
+ instancedMesh( object ).toStack();
725
767
 
726
768
  }
727
769
 
728
770
  if ( this.positionNode !== null ) {
729
771
 
730
- positionLocal.assign( this.positionNode.context( { isPositionNodeInput: true } ) );
772
+ positionLocal.assign( subBuild( this.positionNode, 'POSITION', 'vec3' ) );
731
773
 
732
774
  }
733
775
 
@@ -743,17 +785,29 @@ class NodeMaterial extends Material {
743
785
  */
744
786
  setupDiffuseColor( { object, geometry } ) {
745
787
 
788
+ // MASK
789
+
790
+ if ( this.maskNode !== null ) {
791
+
792
+ // Discard if the mask is `false`
793
+
794
+ bool( this.maskNode ).not().discard();
795
+
796
+ }
797
+
798
+ // COLOR
799
+
746
800
  let colorNode = this.colorNode ? vec4( this.colorNode ) : materialColor;
747
801
 
748
802
  // VERTEX COLORS
749
803
 
750
804
  if ( this.vertexColors === true && geometry.hasAttribute( 'color' ) ) {
751
805
 
752
- colorNode = vec4( colorNode.xyz.mul( attribute( 'color', 'vec3' ) ), colorNode.a );
806
+ colorNode = colorNode.mul( vertexColor() );
753
807
 
754
808
  }
755
809
 
756
- // Instanced colors
810
+ // INSTANCED COLORS
757
811
 
758
812
  if ( object.instanceColor ) {
759
813
 
@@ -771,8 +825,7 @@ class NodeMaterial extends Material {
771
825
 
772
826
  }
773
827
 
774
-
775
- // COLOR
828
+ // DIFFUSE COLOR
776
829
 
777
830
  diffuseColor.assign( colorNode );
778
831
 
@@ -783,9 +836,11 @@ class NodeMaterial extends Material {
783
836
 
784
837
  // ALPHA TEST
785
838
 
839
+ let alphaTestNode = null;
840
+
786
841
  if ( this.alphaTestNode !== null || this.alphaTest > 0 ) {
787
842
 
788
- const alphaTestNode = this.alphaTestNode !== null ? float( this.alphaTestNode ) : materialAlphaTest;
843
+ alphaTestNode = this.alphaTestNode !== null ? float( this.alphaTestNode ) : materialAlphaTest;
789
844
 
790
845
  diffuseColor.a.lessThanEqual( alphaTestNode ).discard();
791
846
 
@@ -799,10 +854,18 @@ class NodeMaterial extends Material {
799
854
 
800
855
  }
801
856
 
802
- if ( this.transparent === false && this.blending === NormalBlending && this.alphaToCoverage === false ) {
857
+ // OPAQUE
858
+
859
+ const isOpaque = this.transparent === false && this.blending === NormalBlending && this.alphaToCoverage === false;
860
+
861
+ if ( isOpaque ) {
803
862
 
804
863
  diffuseColor.a.assign( 1.0 );
805
864
 
865
+ } else if ( alphaTestNode === null ) {
866
+
867
+ diffuseColor.a.lessThanEqual( 0 ).discard();
868
+
806
869
  }
807
870
 
808
871
  }
@@ -1008,7 +1071,7 @@ class NodeMaterial extends Material {
1008
1071
 
1009
1072
  output.assign( outputNode );
1010
1073
 
1011
- outputNode = vec4( fogNode );
1074
+ outputNode = vec4( fogNode.toVar() );
1012
1075
 
1013
1076
  }
1014
1077
 
@@ -1016,6 +1079,19 @@ class NodeMaterial extends Material {
1016
1079
 
1017
1080
  }
1018
1081
 
1082
+ /**
1083
+ * Setups premultiplied alpha.
1084
+ *
1085
+ * @param {NodeBuilder} builder - The current node builder.
1086
+ * @param {Node<vec4>} outputNode - The existing output node.
1087
+ * @return {Node<vec4>} The output node.
1088
+ */
1089
+ setupPremultipliedAlpha( builder, outputNode ) {
1090
+
1091
+ return premultiplyAlpha( outputNode );
1092
+
1093
+ }
1094
+
1019
1095
  /**
1020
1096
  * Setups the output node.
1021
1097
  *
@@ -1033,6 +1109,14 @@ class NodeMaterial extends Material {
1033
1109
 
1034
1110
  }
1035
1111
 
1112
+ // PREMULTIPLIED ALPHA
1113
+
1114
+ if ( this.premultipliedAlpha === true ) {
1115
+
1116
+ outputNode = this.setupPremultipliedAlpha( builder, outputNode );
1117
+
1118
+ }
1119
+
1036
1120
  return outputNode;
1037
1121
 
1038
1122
  }
@@ -1160,12 +1244,14 @@ class NodeMaterial extends Material {
1160
1244
  this.backdropNode = source.backdropNode;
1161
1245
  this.backdropAlphaNode = source.backdropAlphaNode;
1162
1246
  this.alphaTestNode = source.alphaTestNode;
1247
+ this.maskNode = source.maskNode;
1163
1248
 
1164
1249
  this.positionNode = source.positionNode;
1165
1250
  this.geometryNode = source.geometryNode;
1166
1251
 
1167
1252
  this.depthNode = source.depthNode;
1168
- this.shadowPositionNode = source.shadowPositionNode;
1253
+ this.receivedShadowPositionNode = source.receivedShadowPositionNode;
1254
+ this.castShadowPositionNode = source.castShadowPositionNode;
1169
1255
  this.receivedShadowNode = source.receivedShadowNode;
1170
1256
  this.castShadowNode = source.castShadowNode;
1171
1257
 
@@ -35,6 +35,11 @@ class PointsNodeMaterial extends SpriteNodeMaterial {
35
35
  /**
36
36
  * This node property provides an additional way to set the point size.
37
37
  *
38
+ * Note that WebGPU only supports point primitives with 1 pixel size. Consequently,
39
+ * this node has no effect when the material is used with {@link Points} and a WebGPU
40
+ * backend. If an application wants to render points with a size larger than 1 pixel,
41
+ * the material should be used with {@link Sprite} and instancing.
42
+ *
38
43
  * @type {?Node<vec2>}
39
44
  * @default null
40
45
  */
@@ -5,6 +5,7 @@ const refreshUniforms = [
5
5
  'anisotropyMap',
6
6
  'anisotropyRotation',
7
7
  'aoMap',
8
+ 'aoMapIntensity',
8
9
  'attenuationColor',
9
10
  'attenuationDistance',
10
11
  'bumpMap',
@@ -17,8 +18,10 @@ const refreshUniforms = [
17
18
  'dispersion',
18
19
  'displacementMap',
19
20
  'emissive',
21
+ 'emissiveIntensity',
20
22
  'emissiveMap',
21
23
  'envMap',
24
+ 'envMapIntensity',
22
25
  'gradientMap',
23
26
  'ior',
24
27
  'iridescence',
@@ -26,6 +29,7 @@ const refreshUniforms = [
26
29
  'iridescenceMap',
27
30
  'iridescenceThicknessMap',
28
31
  'lightMap',
32
+ 'lightMapIntensity',
29
33
  'map',
30
34
  'matcap',
31
35
  'metalness',
@@ -51,6 +55,16 @@ const refreshUniforms = [
51
55
  'transmissionMap'
52
56
  ];
53
57
 
58
+
59
+ /**
60
+ * A WeakMap to cache lights data for node materials.
61
+ * Cache lights data by render ID to avoid unnecessary recalculations.
62
+ *
63
+ * @private
64
+ * @type {WeakMap<LightsNode,Object>}
65
+ */
66
+ const _lightsCache = new WeakMap();
67
+
54
68
  /**
55
69
  * This class is used by {@link WebGPURenderer} as management component.
56
70
  * It's primary purpose is to determine whether render objects require a
@@ -126,6 +140,20 @@ class NodeMaterialObserver {
126
140
 
127
141
  }
128
142
 
143
+ /**
144
+ * Returns `true` if the current rendering produces motion vectors.
145
+ *
146
+ * @param {Renderer} renderer - The renderer.
147
+ * @return {boolean} Whether the current rendering produces motion vectors or not.
148
+ */
149
+ needsVelocity( renderer ) {
150
+
151
+ const mrt = renderer.getMRT();
152
+
153
+ return ( mrt !== null && mrt.has( 'velocity' ) );
154
+
155
+ }
156
+
129
157
  /**
130
158
  * Returns monitoring data for the given render object.
131
159
  *
@@ -178,6 +206,8 @@ class NodeMaterialObserver {
178
206
 
179
207
  }
180
208
 
209
+ data.lights = this.getLightsData( renderObject.lightsNode.getLights() );
210
+
181
211
  this.renderObjects.set( renderObject, data );
182
212
 
183
213
  }
@@ -229,7 +259,7 @@ class NodeMaterialObserver {
229
259
 
230
260
  }
231
261
 
232
- if ( builder.renderer.nodes.modelViewMatrix !== null || builder.renderer.nodes.modelNormalViewMatrix !== null )
262
+ if ( builder.renderer.overrideNodes.modelViewMatrix !== null || builder.renderer.overrideNodes.modelNormalViewMatrix !== null )
233
263
  return true;
234
264
 
235
265
  return false;
@@ -281,9 +311,10 @@ class NodeMaterialObserver {
281
311
  * Returns `true` if the given render object has not changed its state.
282
312
  *
283
313
  * @param {RenderObject} renderObject - The render object.
314
+ * @param {Array<Light>} lightsData - The current material lights.
284
315
  * @return {boolean} Whether the given render object has changed its state or not.
285
316
  */
286
- equals( renderObject ) {
317
+ equals( renderObject, lightsData ) {
287
318
 
288
319
  const { object, material, geometry } = renderObject;
289
320
 
@@ -444,6 +475,22 @@ class NodeMaterialObserver {
444
475
 
445
476
  }
446
477
 
478
+ // lights
479
+
480
+ if ( renderObjectData.lights ) {
481
+
482
+ for ( let i = 0; i < lightsData.length; i ++ ) {
483
+
484
+ if ( renderObjectData.lights[ i ].map !== lightsData[ i ].map ) {
485
+
486
+ return false;
487
+
488
+ }
489
+
490
+ }
491
+
492
+ }
493
+
447
494
  // center
448
495
 
449
496
  if ( renderObjectData.center ) {
@@ -470,6 +517,61 @@ class NodeMaterialObserver {
470
517
 
471
518
  }
472
519
 
520
+ /**
521
+ * Returns the lights data for the given material lights.
522
+ *
523
+ * @param {Array<Light>} materialLights - The material lights.
524
+ * @return {Array<Object>} The lights data for the given material lights.
525
+ */
526
+ getLightsData( materialLights ) {
527
+
528
+ const lights = [];
529
+
530
+ for ( const light of materialLights ) {
531
+
532
+ if ( light.isSpotLight === true && light.map !== null ) {
533
+
534
+ // only add lights that have a map
535
+
536
+ lights.push( { map: light.map.version } );
537
+
538
+ }
539
+
540
+ }
541
+
542
+ return lights;
543
+
544
+ }
545
+
546
+ /**
547
+ * Returns the lights for the given lights node and render ID.
548
+ *
549
+ * @param {LightsNode} lightsNode - The lights node.
550
+ * @param {number} renderId - The render ID.
551
+ * @return {Array} The lights for the given lights node and render ID.
552
+ */
553
+ getLights( lightsNode, renderId ) {
554
+
555
+ if ( _lightsCache.has( lightsNode ) ) {
556
+
557
+ const cached = _lightsCache.get( lightsNode );
558
+
559
+ if ( cached.renderId === renderId ) {
560
+
561
+ return cached.lightsData;
562
+
563
+ }
564
+
565
+ }
566
+
567
+ const lightsData = this.getLightsData( lightsNode.getLights() );
568
+
569
+ _lightsCache.set( lightsNode, { renderId, lightsData } );
570
+
571
+ return lightsData;
572
+
573
+ }
574
+
473
575
  /**
474
576
  * Checks if the given render object requires a refresh.
475
577
  *
@@ -479,7 +581,7 @@ class NodeMaterialObserver {
479
581
  */
480
582
  needsRefresh( renderObject, nodeFrame ) {
481
583
 
482
- if ( this.hasNode || this.hasAnimation || this.firstInitialization( renderObject ) )
584
+ if ( this.hasNode || this.hasAnimation || this.firstInitialization( renderObject ) || this.needsVelocity( nodeFrame.renderer ) )
483
585
  return true;
484
586
 
485
587
  const { renderId } = nodeFrame;
@@ -498,7 +600,8 @@ class NodeMaterialObserver {
498
600
  if ( isStatic || isBundle )
499
601
  return false;
500
602
 
501
- const notEqual = this.equals( renderObject ) !== true;
603
+ const lightsData = this.getLights( renderObject.lightsNode, renderId );
604
+ const notEqual = this.equals( renderObject, lightsData ) !== true;
502
605
 
503
606
  return notEqual;
504
607
 
package/src/math/Box3.js CHANGED
@@ -714,6 +714,34 @@ class Box3 {
714
714
 
715
715
  }
716
716
 
717
+ /**
718
+ * Returns a serialized structure of the bounding box.
719
+ *
720
+ * @return {Object} Serialized structure with fields representing the object state.
721
+ */
722
+ toJSON() {
723
+
724
+ return {
725
+ min: this.min.toArray(),
726
+ max: this.max.toArray()
727
+ };
728
+
729
+ }
730
+
731
+ /**
732
+ * Returns a serialized structure of the bounding box.
733
+ *
734
+ * @param {Object} json - The serialized json to set the box from.
735
+ * @return {Box3} A reference to this bounding box.
736
+ */
737
+ fromJSON( json ) {
738
+
739
+ this.min.fromArray( json.min );
740
+ this.max.fromArray( json.max );
741
+ return this;
742
+
743
+ }
744
+
717
745
  }
718
746
 
719
747
  const _points = [
package/src/math/Color.js CHANGED
@@ -208,7 +208,7 @@ class Color {
208
208
  this.g = ( hex >> 8 & 255 ) / 255;
209
209
  this.b = ( hex & 255 ) / 255;
210
210
 
211
- ColorManagement.toWorkingColorSpace( this, colorSpace );
211
+ ColorManagement.colorSpaceToWorking( this, colorSpace );
212
212
 
213
213
  return this;
214
214
 
@@ -229,7 +229,7 @@ class Color {
229
229
  this.g = g;
230
230
  this.b = b;
231
231
 
232
- ColorManagement.toWorkingColorSpace( this, colorSpace );
232
+ ColorManagement.colorSpaceToWorking( this, colorSpace );
233
233
 
234
234
  return this;
235
235
 
@@ -266,7 +266,7 @@ class Color {
266
266
 
267
267
  }
268
268
 
269
- ColorManagement.toWorkingColorSpace( this, colorSpace );
269
+ ColorManagement.colorSpaceToWorking( this, colorSpace );
270
270
 
271
271
  return this;
272
272
 
@@ -537,7 +537,7 @@ class Color {
537
537
  */
538
538
  getHex( colorSpace = SRGBColorSpace ) {
539
539
 
540
- ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
540
+ ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
541
541
 
542
542
  return Math.round( clamp( _color.r * 255, 0, 255 ) ) * 65536 + Math.round( clamp( _color.g * 255, 0, 255 ) ) * 256 + Math.round( clamp( _color.b * 255, 0, 255 ) );
543
543
 
@@ -567,7 +567,7 @@ class Color {
567
567
 
568
568
  // h,s,l ranges are in 0.0 - 1.0
569
569
 
570
- ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
570
+ ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
571
571
 
572
572
  const r = _color.r, g = _color.g, b = _color.b;
573
573
 
@@ -617,7 +617,7 @@ class Color {
617
617
  */
618
618
  getRGB( target, colorSpace = ColorManagement.workingColorSpace ) {
619
619
 
620
- ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
620
+ ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
621
621
 
622
622
  target.r = _color.r;
623
623
  target.g = _color.g;
@@ -635,7 +635,7 @@ class Color {
635
635
  */
636
636
  getStyle( colorSpace = SRGBColorSpace ) {
637
637
 
638
- ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
638
+ ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
639
639
 
640
640
  const r = _color.r, g = _color.g, b = _color.b;
641
641
 
@@ -1,5 +1,6 @@
1
1
  import { SRGBColorSpace, LinearSRGBColorSpace, SRGBTransfer, LinearTransfer, NoColorSpace } from '../constants.js';
2
2
  import { Matrix3 } from './Matrix3.js';
3
+ import { warnOnce } from '../utils.js';
3
4
 
4
5
  const LINEAR_REC709_TO_XYZ = /*@__PURE__*/ new Matrix3().set(
5
6
  0.4123908, 0.3575843, 0.1804808,
@@ -76,13 +77,13 @@ function createColorManagement() {
76
77
 
77
78
  },
78
79
 
79
- fromWorkingColorSpace: function ( color, targetColorSpace ) {
80
+ workingToColorSpace: function ( color, targetColorSpace ) {
80
81
 
81
82
  return this.convert( color, this.workingColorSpace, targetColorSpace );
82
83
 
83
84
  },
84
85
 
85
- toWorkingColorSpace: function ( color, sourceColorSpace ) {
86
+ colorSpaceToWorking: function ( color, sourceColorSpace ) {
86
87
 
87
88
  return this.convert( color, sourceColorSpace, this.workingColorSpace );
88
89
 
@@ -134,7 +135,25 @@ function createColorManagement() {
134
135
 
135
136
  return this.spaces[ colorSpace ].workingColorSpaceConfig.unpackColorSpace;
136
137
 
137
- }
138
+ },
139
+
140
+ // Deprecated
141
+
142
+ fromWorkingColorSpace: function ( color, targetColorSpace ) {
143
+
144
+ warnOnce( 'THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().' ); // @deprecated, r177
145
+
146
+ return ColorManagement.workingToColorSpace( color, targetColorSpace );
147
+
148
+ },
149
+
150
+ toWorkingColorSpace: function ( color, sourceColorSpace ) {
151
+
152
+ warnOnce( 'THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().' ); // @deprecated, r177
153
+
154
+ return ColorManagement.colorSpaceToWorking( color, sourceColorSpace );
155
+
156
+ },
138
157
 
139
158
  };
140
159