@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
@@ -6,7 +6,7 @@ import {
6
6
  NodeMaterial
7
7
  } from 'three/webgpu';
8
8
 
9
- import { Fn, float, vec3, acos, add, mul, clamp, cos, dot, exp, max, mix, modelViewProjection, normalize, positionWorld, pow, smoothstep, sub, varying, varyingProperty, vec4, uniform, cameraPosition } from 'three/tsl';
9
+ import { Fn, float, vec3, acos, add, mul, clamp, cos, dot, exp, max, mix, modelViewProjection, normalize, positionWorld, pow, smoothstep, sub, varyingProperty, vec4, uniform, cameraPosition } from 'three/tsl';
10
10
 
11
11
  /**
12
12
  * Represents a skydome for scene backgrounds. Based on [A Practical Analytic Model for Daylight]{@link https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight}
@@ -27,7 +27,8 @@ import { Fn, float, vec3, acos, add, mul, clamp, cos, dot, exp, max, mix, modelV
27
27
  * ```
28
28
  *
29
29
  * @augments Mesh
30
- */
30
+ * @three_import import { SkyMesh } from 'three/addons/objects/SkyMesh.js';
31
+ */
31
32
  class SkyMesh extends Mesh {
32
33
 
33
34
  /**
@@ -90,6 +91,14 @@ class SkyMesh extends Mesh {
90
91
  */
91
92
  this.isSky = true;
92
93
 
94
+ // Varyings
95
+
96
+ const vSunDirection = varyingProperty( 'vec3' );
97
+ const vSunE = varyingProperty( 'float' );
98
+ const vSunfade = varyingProperty( 'float' );
99
+ const vBetaR = varyingProperty( 'vec3' );
100
+ const vBetaM = varyingProperty( 'vec3' );
101
+
93
102
  const vertexNode = /*@__PURE__*/ Fn( () => {
94
103
 
95
104
  // constants for atmospheric scattering
@@ -117,35 +126,35 @@ class SkyMesh extends Mesh {
117
126
 
118
127
  // varying sun position
119
128
 
120
- const vSunDirection = normalize( this.sunPosition );
121
- varyingProperty( 'vec3', 'vSunDirection' ).assign( vSunDirection );
129
+ const sunDirection = normalize( this.sunPosition );
130
+ vSunDirection.assign( sunDirection );
122
131
 
123
132
  // varying sun intensity
124
133
 
125
- const angle = dot( vSunDirection, this.upUniform );
134
+ const angle = dot( sunDirection, this.upUniform );
126
135
  const zenithAngleCos = clamp( angle, - 1, 1 );
127
136
  const sunIntensity = EE.mul( max( 0.0, float( 1.0 ).sub( pow( e, cutoffAngle.sub( acos( zenithAngleCos ) ).div( steepness ).negate() ) ) ) );
128
- varyingProperty( 'float', 'vSunE' ).assign( sunIntensity );
137
+ vSunE.assign( sunIntensity );
129
138
 
130
139
  // varying sun fade
131
140
 
132
- const vSunfade = float( 1.0 ).sub( clamp( float( 1.0 ).sub( exp( this.sunPosition.y.div( 450000.0 ) ) ), 0, 1 ) );
133
- varyingProperty( 'float', 'vSunfade' ).assign( vSunfade );
141
+ const sunfade = float( 1.0 ).sub( clamp( float( 1.0 ).sub( exp( this.sunPosition.y.div( 450000.0 ) ) ), 0, 1 ) );
142
+ vSunfade.assign( sunfade );
134
143
 
135
144
  // varying vBetaR
136
145
 
137
- const rayleighCoefficient = this.rayleigh.sub( float( 1.0 ).mul( float( 1.0 ).sub( vSunfade ) ) );
146
+ const rayleighCoefficient = this.rayleigh.sub( float( 1.0 ).mul( float( 1.0 ).sub( sunfade ) ) );
138
147
 
139
148
  // extinction (absorption + out scattering)
140
149
  // rayleigh coefficients
141
- varyingProperty( 'vec3', 'vBetaR' ).assign( totalRayleigh.mul( rayleighCoefficient ) );
150
+ vBetaR.assign( totalRayleigh.mul( rayleighCoefficient ) );
142
151
 
143
152
  // varying vBetaM
144
153
 
145
154
  const c = float( 0.2 ).mul( this.turbidity ).mul( 10E-18 );
146
155
  const totalMie = float( 0.434 ).mul( c ).mul( MieConst );
147
156
 
148
- varyingProperty( 'vec3', 'vBetaM' ).assign( totalMie.mul( this.mieCoefficient ) );
157
+ vBetaM.assign( totalMie.mul( this.mieCoefficient ) );
149
158
 
150
159
  // position
151
160
 
@@ -156,13 +165,7 @@ class SkyMesh extends Mesh {
156
165
 
157
166
  } )();
158
167
 
159
- const fragmentNode = /*@__PURE__*/ Fn( () => {
160
-
161
- const vSunDirection = varying( vec3(), 'vSunDirection' );
162
- const vSunE = varying( float(), 'vSunE' );
163
- const vSunfade = varying( float(), 'vSunfade' );
164
- const vBetaR = varying( vec3(), 'vBetaR' );
165
- const vBetaM = varying( vec3(), 'vBetaM' );
168
+ const colorNode = /*@__PURE__*/ Fn( () => {
166
169
 
167
170
  // constants for atmospheric scattering
168
171
  const pi = float( 3.141592653589793238462643383279502884197169 );
@@ -231,7 +234,7 @@ class SkyMesh extends Mesh {
231
234
  material.depthWrite = false;
232
235
 
233
236
  material.vertexNode = vertexNode;
234
- material.fragmentNode = fragmentNode;
237
+ material.colorNode = colorNode;
235
238
 
236
239
  }
237
240
 
@@ -26,6 +26,7 @@ import {
26
26
  * - [Water shader explanations in WebGL]{@link http://29a.ch/slides/2012/webglwater/ }
27
27
  *
28
28
  * @augments Mesh
29
+ * @three_import import { Water } from 'three/addons/objects/Water.js';
29
30
  */
30
31
  class Water extends Mesh {
31
32
 
@@ -28,6 +28,7 @@ import { Refractor } from '../objects/Refractor.js';
28
28
  * - {@link http://graphicsrunner.blogspot.de/2010/08/water-using-flow-maps.html}
29
29
  *
30
30
  * @augments Mesh
31
+ * @three_import import { Water } from 'three/addons/objects/Water2.js';
31
32
  */
32
33
  class Water extends Mesh {
33
34
 
@@ -24,6 +24,7 @@ import { Fn, vec2, viewportSafeUV, viewportSharedTexture, reflector, pow, float,
24
24
  * - {@link http://graphicsrunner.blogspot.de/2010/08/water-using-flow-maps.html}
25
25
  *
26
26
  * @augments Mesh
27
+ * @three_import import { WaterMesh } from 'three/addons/objects/Water2Mesh.js';
27
28
  */
28
29
  class WaterMesh extends Mesh {
29
30
 
@@ -36,6 +37,7 @@ class WaterMesh extends Mesh {
36
37
  constructor( geometry, options = {} ) {
37
38
 
38
39
  const material = new NodeMaterial();
40
+ material.transparent = true;
39
41
 
40
42
  super( geometry, material );
41
43
 
@@ -48,7 +50,7 @@ class WaterMesh extends Mesh {
48
50
  */
49
51
  this.isWater = true;
50
52
 
51
- material.fragmentNode = new WaterNode( options, this );
53
+ material.colorNode = new WaterNode( options, this );
52
54
 
53
55
  }
54
56
 
@@ -20,6 +20,7 @@ import { Fn, add, cameraPosition, div, normalize, positionWorld, sub, time, text
20
20
  * - [Water shader explanations in WebGL]{@link http://29a.ch/slides/2012/webglwater/ }
21
21
  *
22
22
  * @augments Mesh
23
+ * @three_import import { WaterMesh } from 'three/addons/objects/WaterMesh.js';
23
24
  */
24
25
  class WaterMesh extends Mesh {
25
26
 
@@ -152,7 +153,7 @@ class WaterMesh extends Mesh {
152
153
 
153
154
  material.opacityNode = this.alpha;
154
155
 
155
- material.shadowPositionNode = positionWorld.add( distortion );
156
+ material.receivedShadowPositionNode = positionWorld.add( distortion );
156
157
 
157
158
  material.setupOutgoingLight = () => diffuseColor.rgb; // backwards compatibility
158
159
 
@@ -12,6 +12,7 @@
12
12
  * @name AmmoPhysics
13
13
  * @class
14
14
  * @hideconstructor
15
+ * @three_import import { AmmoPhysics } from 'three/addons/physics/AmmoPhysics.js';
15
16
  */
16
17
  async function AmmoPhysics() {
17
18
 
@@ -69,6 +69,7 @@ function setupCollisionFiltering( settings ) {
69
69
  * @name JoltPhysics
70
70
  * @class
71
71
  * @hideconstructor
72
+ * @three_import import { JoltPhysics } from 'three/addons/physics/JoltPhysics.js';
72
73
  */
73
74
  async function JoltPhysics() {
74
75
 
@@ -1,6 +1,6 @@
1
1
  import { Clock, Vector3, Quaternion, Matrix4 } from 'three';
2
2
 
3
- const RAPIER_PATH = 'https://cdn.skypack.dev/@dimforge/rapier3d-compat@0.12.0';
3
+ const RAPIER_PATH = 'https://cdn.skypack.dev/@dimforge/rapier3d-compat@0.17.3';
4
4
 
5
5
  const frameRate = 60;
6
6
 
@@ -15,7 +15,16 @@ function getShape( geometry ) {
15
15
 
16
16
  // TODO change type to is*
17
17
 
18
- if ( geometry.type === 'BoxGeometry' ) {
18
+ if ( geometry.type === 'RoundedBoxGeometry' ) {
19
+
20
+ const sx = parameters.width !== undefined ? parameters.width / 2 : 0.5;
21
+ const sy = parameters.height !== undefined ? parameters.height / 2 : 0.5;
22
+ const sz = parameters.depth !== undefined ? parameters.depth / 2 : 0.5;
23
+ const radius = parameters.radius !== undefined ? parameters.radius : 0.1;
24
+
25
+ return RAPIER.ColliderDesc.roundCuboid( sx - radius, sy - radius, sz - radius, radius );
26
+
27
+ } else if ( geometry.type === 'BoxGeometry' ) {
19
28
 
20
29
  const sx = parameters.width !== undefined ? parameters.width / 2 : 0.5;
21
30
  const sy = parameters.height !== undefined ? parameters.height / 2 : 0.5;
@@ -28,6 +37,20 @@ function getShape( geometry ) {
28
37
  const radius = parameters.radius !== undefined ? parameters.radius : 1;
29
38
  return RAPIER.ColliderDesc.ball( radius );
30
39
 
40
+ } else if ( geometry.type === 'CylinderGeometry' ) {
41
+
42
+ const radius = parameters.radiusBottom !== undefined ? parameters.radiusBottom : 0.5;
43
+ const length = parameters.height !== undefined ? parameters.height : 0.5;
44
+
45
+ return RAPIER.ColliderDesc.cylinder( length / 2, radius );
46
+
47
+ } else if ( geometry.type === 'CapsuleGeometry' ) {
48
+
49
+ const radius = parameters.radius !== undefined ? parameters.radius : 0.5;
50
+ const length = parameters.height !== undefined ? parameters.height : 0.5;
51
+
52
+ return RAPIER.ColliderDesc.capsule( length / 2, radius );
53
+
31
54
  } else if ( geometry.type === 'BufferGeometry' ) {
32
55
 
33
56
  const vertices = [];
@@ -66,6 +89,7 @@ function getShape( geometry ) {
66
89
  * @name RapierPhysics
67
90
  * @class
68
91
  * @hideconstructor
92
+ * @three_import import { RapierPhysics } from 'three/addons/physics/RapierPhysics.js';
69
93
  */
70
94
  async function RapierPhysics() {
71
95
 
@@ -117,14 +141,40 @@ async function RapierPhysics() {
117
141
  shape.setMass( mass );
118
142
  shape.setRestitution( restitution );
119
143
 
120
- const body = mesh.isInstancedMesh
144
+ const { body, collider } = mesh.isInstancedMesh
121
145
  ? createInstancedBody( mesh, mass, shape )
122
146
  : createBody( mesh.position, mesh.quaternion, mass, shape );
123
147
 
148
+ if ( ! mesh.userData.physics ) mesh.userData.physics = {};
149
+
150
+ mesh.userData.physics.body = body;
151
+ mesh.userData.physics.collider = collider;
152
+
124
153
  if ( mass > 0 ) {
125
154
 
126
155
  meshes.push( mesh );
127
- meshMap.set( mesh, body );
156
+ meshMap.set( mesh, { body, collider } );
157
+
158
+ }
159
+
160
+ }
161
+
162
+ function removeMesh( mesh ) {
163
+
164
+ const index = meshes.indexOf( mesh );
165
+
166
+ if ( index !== - 1 ) {
167
+
168
+ meshes.splice( index, 1 );
169
+ meshMap.delete( mesh );
170
+
171
+ if ( ! mesh.userData.physics ) return;
172
+
173
+ const body = mesh.userData.physics.body;
174
+ const collider = mesh.userData.physics.collider;
175
+
176
+ if ( body ) removeBody( body );
177
+ if ( collider ) removeCollider( collider );
128
178
 
129
179
  }
130
180
 
@@ -135,15 +185,18 @@ async function RapierPhysics() {
135
185
  const array = mesh.instanceMatrix.array;
136
186
 
137
187
  const bodies = [];
188
+ const colliders = [];
138
189
 
139
190
  for ( let i = 0; i < mesh.count; i ++ ) {
140
191
 
141
192
  const position = _vector.fromArray( array, i * 16 + 12 );
142
- bodies.push( createBody( position, null, mass, shape ) );
193
+ const { body, collider } = createBody( position, null, mass, shape );
194
+ bodies.push( body );
195
+ colliders.push( collider );
143
196
 
144
197
  }
145
198
 
146
- return bodies;
199
+ return { body: bodies, collider: colliders };
147
200
 
148
201
  }
149
202
 
@@ -154,15 +207,51 @@ async function RapierPhysics() {
154
207
  if ( quaternion !== null ) desc.setRotation( quaternion );
155
208
 
156
209
  const body = world.createRigidBody( desc );
157
- world.createCollider( shape, body );
210
+ const collider = world.createCollider( shape, body );
158
211
 
159
- return body;
212
+ return { body, collider };
213
+
214
+ }
215
+
216
+ function removeBody( body ) {
217
+
218
+ if ( Array.isArray( body ) ) {
219
+
220
+ for ( let i = 0; i < body.length; i ++ ) {
221
+
222
+ world.removeRigidBody( body[ i ] );
223
+
224
+ }
225
+
226
+ } else {
227
+
228
+ world.removeRigidBody( body );
229
+
230
+ }
231
+
232
+ }
233
+
234
+ function removeCollider( collider ) {
235
+
236
+ if ( Array.isArray( collider ) ) {
237
+
238
+ for ( let i = 0; i < collider.length; i ++ ) {
239
+
240
+ world.removeCollider( collider[ i ] );
241
+
242
+ }
243
+
244
+ } else {
245
+
246
+ world.removeCollider( collider );
247
+
248
+ }
160
249
 
161
250
  }
162
251
 
163
252
  function setMeshPosition( mesh, position, index = 0 ) {
164
253
 
165
- let body = meshMap.get( mesh );
254
+ let { body } = meshMap.get( mesh );
166
255
 
167
256
  if ( mesh.isInstancedMesh ) {
168
257
 
@@ -178,7 +267,7 @@ async function RapierPhysics() {
178
267
 
179
268
  function setMeshVelocity( mesh, velocity, index = 0 ) {
180
269
 
181
- let body = meshMap.get( mesh );
270
+ let { body } = meshMap.get( mesh );
182
271
 
183
272
  if ( mesh.isInstancedMesh ) {
184
273
 
@@ -190,6 +279,24 @@ async function RapierPhysics() {
190
279
 
191
280
  }
192
281
 
282
+ function addHeightfield( mesh, width, depth, heights, scale ) {
283
+
284
+ const shape = RAPIER.ColliderDesc.heightfield( width, depth, heights, scale );
285
+
286
+ const bodyDesc = RAPIER.RigidBodyDesc.fixed();
287
+ bodyDesc.setTranslation( mesh.position.x, mesh.position.y, mesh.position.z );
288
+ bodyDesc.setRotation( mesh.quaternion );
289
+
290
+ const body = world.createRigidBody( bodyDesc );
291
+ world.createCollider( shape, body );
292
+
293
+ if ( ! mesh.userData.physics ) mesh.userData.physics = {};
294
+ mesh.userData.physics.body = body;
295
+
296
+ return body;
297
+
298
+ }
299
+
193
300
  //
194
301
 
195
302
  const clock = new Clock();
@@ -208,7 +315,7 @@ async function RapierPhysics() {
208
315
  if ( mesh.isInstancedMesh ) {
209
316
 
210
317
  const array = mesh.instanceMatrix.array;
211
- const bodies = meshMap.get( mesh );
318
+ const { body: bodies } = meshMap.get( mesh );
212
319
 
213
320
  for ( let j = 0; j < bodies.length; j ++ ) {
214
321
 
@@ -226,7 +333,7 @@ async function RapierPhysics() {
226
333
 
227
334
  } else {
228
335
 
229
- const body = meshMap.get( mesh );
336
+ const { body } = meshMap.get( mesh );
230
337
 
231
338
  mesh.position.copy( body.translation() );
232
339
  mesh.quaternion.copy( body.rotation() );
@@ -242,6 +349,8 @@ async function RapierPhysics() {
242
349
  setInterval( step, 1000 / frameRate );
243
350
 
244
351
  return {
352
+ RAPIER,
353
+ world,
245
354
  /**
246
355
  * Adds the given scene to this physics simulation. Only meshes with a
247
356
  * `physics` object in their {@link Object3D#userData} field will be honored.
@@ -267,6 +376,15 @@ async function RapierPhysics() {
267
376
  */
268
377
  addMesh: addMesh,
269
378
 
379
+ /**
380
+ * Removes the given mesh from this physics simulation.
381
+ *
382
+ * @method
383
+ * @name RapierPhysics#removeMesh
384
+ * @param {Mesh} mesh The mesh to remove.
385
+ */
386
+ removeMesh: removeMesh,
387
+
270
388
  /**
271
389
  * Set the position of the given mesh which is part of the physics simulation. Calling this
272
390
  * method will reset the current simulated velocity of the mesh.
@@ -288,7 +406,25 @@ async function RapierPhysics() {
288
406
  * @param {Vector3} velocity - The new velocity.
289
407
  * @param {number} [index=0] - If the mesh is instanced, the index represents the instanced ID.
290
408
  */
291
- setMeshVelocity: setMeshVelocity
409
+ setMeshVelocity: setMeshVelocity,
410
+
411
+ /**
412
+ * Adds a heightfield terrain to the physics simulation.
413
+ *
414
+ * @method
415
+ * @name RapierPhysics#addHeightfield
416
+ * @param {Mesh} mesh - The Three.js mesh representing the terrain.
417
+ * @param {number} width - The number of vertices along the width (x-axis) of the heightfield.
418
+ * @param {number} depth - The number of vertices along the depth (z-axis) of the heightfield.
419
+ * @param {Float32Array} heights - Array of height values for each vertex in the heightfield.
420
+ * @param {Object} scale - Scale factors for the heightfield dimensions.
421
+ * @param {number} scale.x - Scale factor for width.
422
+ * @param {number} scale.y - Scale factor for height.
423
+ * @param {number} scale.z - Scale factor for depth.
424
+ * @returns {RigidBody} The created Rapier rigid body for the heightfield.
425
+ */
426
+ addHeightfield: addHeightfield
427
+
292
428
  };
293
429
 
294
430
  }
@@ -19,6 +19,7 @@ import { AfterimageShader } from '../shaders/AfterimageShader.js';
19
19
  * ```
20
20
  *
21
21
  * @augments Pass
22
+ * @three_import import { AfterimagePass } from 'three/addons/postprocessing/AfterimagePass.js';
22
23
  */
23
24
  class AfterimagePass extends Pass {
24
25
 
@@ -42,7 +43,7 @@ class AfterimagePass extends Pass {
42
43
  */
43
44
  this.uniforms = UniformsUtils.clone( AfterimageShader.uniforms );
44
45
 
45
- this.uniforms[ 'damp' ].value = damp;
46
+ this.damp = damp;
46
47
 
47
48
  /**
48
49
  * The composition material.
@@ -88,6 +89,23 @@ class AfterimagePass extends Pass {
88
89
 
89
90
  }
90
91
 
92
+ /**
93
+ * The damping intensity, from 0.0 to 1.0. A higher value means a stronger after image effect.
94
+ *
95
+ * @type {number}
96
+ */
97
+ get damp() {
98
+
99
+ return this.uniforms[ 'damp' ].value;
100
+
101
+ }
102
+
103
+ set damp( value ) {
104
+
105
+ this.uniforms[ 'damp' ].value = value;
106
+
107
+ }
108
+
91
109
  /**
92
110
  * Performs the after image pass.
93
111
  *
@@ -136,7 +154,7 @@ class AfterimagePass extends Pass {
136
154
  * Sets the size of the pass.
137
155
  *
138
156
  * @param {number} width - The width to set.
139
- * @param {number} height - The width to set.
157
+ * @param {number} height - The height to set.
140
158
  */
141
159
  setSize( width, height ) {
142
160
 
@@ -21,6 +21,7 @@ import { ConvolutionShader } from '../shaders/ConvolutionShader.js';
21
21
  * ```
22
22
  *
23
23
  * @augments Pass
24
+ * @three_import import { BloomPass } from 'three/addons/postprocessing/BloomPass.js';
24
25
  */
25
26
  class BloomPass extends Pass {
26
27
 
@@ -166,7 +167,7 @@ class BloomPass extends Pass {
166
167
  * Sets the size of the pass.
167
168
  *
168
169
  * @param {number} width - The width to set.
169
- * @param {number} height - The width to set.
170
+ * @param {number} height - The height to set.
170
171
  */
171
172
  setSize( width, height ) {
172
173
 
@@ -25,6 +25,7 @@ import { BokehShader } from '../shaders/BokehShader.js';
25
25
  * ```
26
26
  *
27
27
  * @augments Pass
28
+ * @three_import import { BokehPass } from 'three/addons/postprocessing/BokehPass.js';
28
29
  */
29
30
  class BokehPass extends Pass {
30
31
 
@@ -178,7 +179,7 @@ class BokehPass extends Pass {
178
179
  * Sets the size of the pass.
179
180
  *
180
181
  * @param {number} width - The width to set.
181
- * @param {number} height - The width to set.
182
+ * @param {number} height - The height to set.
182
183
  */
183
184
  setSize( width, height ) {
184
185
 
@@ -13,6 +13,7 @@ import { Pass } from './Pass.js';
13
13
  * ```
14
14
  *
15
15
  * @augments Pass
16
+ * @three_import import { ClearPass } from 'three/addons/postprocessing/ClearPass.js';
16
17
  */
17
18
  class ClearPass extends Pass {
18
19
 
@@ -21,6 +21,7 @@ import { Pass } from './Pass.js';
21
21
  * ```
22
22
  *
23
23
  * @augments Pass
24
+ * @three_import import { CubeTexturePass } from 'three/addons/postprocessing/CubeTexturePass.js';
24
25
  */
25
26
  class CubeTexturePass extends Pass {
26
27
 
@@ -14,6 +14,7 @@ import { DotScreenShader } from '../shaders/DotScreenShader.js';
14
14
  * ```
15
15
  *
16
16
  * @augments Pass
17
+ * @three_import import { DotScreenPass } from 'three/addons/postprocessing/DotScreenPass.js';
17
18
  */
18
19
  class DotScreenPass extends Pass {
19
20
 
@@ -36,6 +36,8 @@ import { ClearMaskPass, MaskPass } from './MaskPass.js';
36
36
  *
37
37
  * }
38
38
  * ```
39
+ *
40
+ * @three_import import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';
39
41
  */
40
42
  class EffectComposer {
41
43
 
@@ -119,7 +121,7 @@ class EffectComposer {
119
121
  this.copyPass.material.blending = NoBlending;
120
122
 
121
123
  /**
122
- * The intenral clock for managing time data.
124
+ * The internal clock for managing time data.
123
125
  *
124
126
  * @private
125
127
  * @type {Clock}
@@ -185,7 +187,7 @@ class EffectComposer {
185
187
  * Returns `true` if the pass for the given index is the last enabled pass in the pass chain.
186
188
  *
187
189
  * @param {number} passIndex - The pass index.
188
- * @return {boolean} Whether the the pass for the given index is the last pass in the pass chain.
190
+ * @return {boolean} Whether the pass for the given index is the last pass in the pass chain.
189
191
  */
190
192
  isLastEnabledPass( passIndex ) {
191
193
 
@@ -0,0 +1,40 @@
1
+ import { FXAAShader } from '../shaders/FXAAShader.js';
2
+ import { ShaderPass } from './ShaderPass.js';
3
+
4
+ /**
5
+ * A pass for applying FXAA.
6
+ *
7
+ * ```js
8
+ * const fxaaPass = new FXAAPass();
9
+ * composer.addPass( fxaaPass );
10
+ * ```
11
+ *
12
+ * @augments ShaderPass
13
+ * @three_import import { FXAAPass } from 'three/addons/postprocessing/FXAAPass.js';
14
+ */
15
+ class FXAAPass extends ShaderPass {
16
+
17
+ /**
18
+ * Constructs a new FXAA pass.
19
+ */
20
+ constructor() {
21
+
22
+ super( FXAAShader );
23
+
24
+ }
25
+
26
+ /**
27
+ * Sets the size of the pass.
28
+ *
29
+ * @param {number} width - The width to set.
30
+ * @param {number} height - The height to set.
31
+ */
32
+ setSize( width, height ) {
33
+
34
+ this.material.uniforms[ 'resolution' ].value.set( 1 / width, 1 / height );
35
+
36
+ }
37
+
38
+ }
39
+
40
+ export { FXAAPass };
@@ -14,6 +14,7 @@ import { FilmShader } from '../shaders/FilmShader.js';
14
14
  * ```
15
15
  *
16
16
  * @augments Pass
17
+ * @three_import import { FilmPass } from 'three/addons/postprocessing/FilmPass.js';
17
18
  */
18
19
  class FilmPass extends Pass {
19
20