super-three 0.177.0 → 0.181.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 (501) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +1994 -749
  3. package/build/three.core.js +1358 -506
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +631 -247
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +113 -33
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +9571 -3424
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +9397 -3426
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  14. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  15. package/examples/jsm/Addons.js +2 -3
  16. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  17. package/examples/jsm/capabilities/WebGL.js +0 -27
  18. package/examples/jsm/capabilities/WebGPU.js +1 -1
  19. package/examples/jsm/controls/ArcballControls.js +9 -9
  20. package/examples/jsm/controls/DragControls.js +7 -57
  21. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  22. package/examples/jsm/controls/FlyControls.js +1 -1
  23. package/examples/jsm/controls/OrbitControls.js +2 -2
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +1 -1
  26. package/examples/jsm/controls/TransformControls.js +62 -15
  27. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  28. package/examples/jsm/effects/AsciiEffect.js +8 -8
  29. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  30. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  31. package/examples/jsm/exporters/EXRExporter.js +1 -1
  32. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  33. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  34. package/examples/jsm/exporters/PLYExporter.js +1 -1
  35. package/examples/jsm/exporters/USDZExporter.js +683 -299
  36. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  37. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  38. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  39. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  40. package/examples/jsm/geometries/TextGeometry.js +3 -2
  41. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  42. package/examples/jsm/helpers/ViewHelper.js +43 -5
  43. package/examples/jsm/inspector/Inspector.js +427 -0
  44. package/examples/jsm/inspector/RendererInspector.js +415 -0
  45. package/examples/jsm/inspector/tabs/Console.js +204 -0
  46. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  47. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  48. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  49. package/examples/jsm/inspector/ui/Graph.js +95 -0
  50. package/examples/jsm/inspector/ui/Item.js +170 -0
  51. package/examples/jsm/inspector/ui/List.js +75 -0
  52. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  53. package/examples/jsm/inspector/ui/Style.js +654 -0
  54. package/examples/jsm/inspector/ui/Tab.js +46 -0
  55. package/examples/jsm/inspector/ui/Values.js +423 -0
  56. package/examples/jsm/inspector/ui/utils.js +56 -0
  57. package/examples/jsm/interactive/HTMLMesh.js +11 -13
  58. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  59. package/examples/jsm/interactive/SelectionBox.js +30 -0
  60. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  61. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  62. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  63. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  64. package/examples/jsm/lines/Line2.js +3 -3
  65. package/examples/jsm/lines/LineGeometry.js +1 -1
  66. package/examples/jsm/lines/LineSegments2.js +2 -2
  67. package/examples/jsm/lines/Wireframe.js +2 -2
  68. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  69. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  70. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  71. package/examples/jsm/loaders/3MFLoader.js +1 -1
  72. package/examples/jsm/loaders/ColladaLoader.js +4 -4
  73. package/examples/jsm/loaders/DDSLoader.js +1 -1
  74. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  75. package/examples/jsm/loaders/EXRLoader.js +210 -22
  76. package/examples/jsm/loaders/FBXLoader.js +4 -4
  77. package/examples/jsm/loaders/FontLoader.js +23 -5
  78. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  79. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  80. package/examples/jsm/loaders/HDRLoader.js +486 -0
  81. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  82. package/examples/jsm/loaders/KTXLoader.js +2 -2
  83. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  84. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  85. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  86. package/examples/jsm/loaders/LWOLoader.js +2 -2
  87. package/examples/jsm/loaders/MaterialXLoader.js +233 -34
  88. package/examples/jsm/loaders/OBJLoader.js +1 -1
  89. package/examples/jsm/loaders/PDBLoader.js +1 -1
  90. package/examples/jsm/loaders/RGBELoader.js +7 -473
  91. package/examples/jsm/loaders/SVGLoader.js +2 -2
  92. package/examples/jsm/loaders/TTFLoader.js +13 -1
  93. package/examples/jsm/loaders/USDLoader.js +219 -0
  94. package/examples/jsm/loaders/USDZLoader.js +4 -892
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  96. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  97. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  98. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  99. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  100. package/examples/jsm/math/ColorSpaces.js +19 -1
  101. package/examples/jsm/math/ConvexHull.js +3 -3
  102. package/examples/jsm/math/ImprovedNoise.js +1 -1
  103. package/examples/jsm/math/Lut.js +2 -2
  104. package/examples/jsm/math/SimplexNoise.js +1 -1
  105. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  106. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  107. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  108. package/examples/jsm/misc/TubePainter.js +383 -40
  109. package/examples/jsm/misc/Volume.js +1 -1
  110. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  111. package/examples/jsm/objects/LensflareMesh.js +3 -3
  112. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  113. package/examples/jsm/objects/Sky.js +1 -1
  114. package/examples/jsm/objects/SkyMesh.js +3 -3
  115. package/examples/jsm/objects/Water.js +3 -3
  116. package/examples/jsm/objects/WaterMesh.js +6 -6
  117. package/examples/jsm/physics/RapierPhysics.js +95 -16
  118. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  119. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  120. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  121. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  122. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  123. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  124. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  125. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  126. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  127. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  128. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  129. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  130. package/examples/jsm/shaders/BokehShader.js +1 -1
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  133. package/examples/jsm/shaders/FocusShader.js +1 -1
  134. package/examples/jsm/shaders/GTAOShader.js +2 -2
  135. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  136. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  137. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  138. package/examples/jsm/shaders/SSRShader.js +1 -1
  139. package/examples/jsm/shaders/SepiaShader.js +1 -1
  140. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  141. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  142. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  143. package/examples/jsm/shaders/VignetteShader.js +1 -1
  144. package/examples/jsm/transpiler/AST.js +381 -30
  145. package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
  146. package/examples/jsm/transpiler/Linker.js +327 -0
  147. package/examples/jsm/transpiler/TSLEncoder.js +196 -92
  148. package/examples/jsm/transpiler/Transpiler.js +17 -1
  149. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  150. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  151. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  152. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  153. package/examples/jsm/tsl/display/BloomNode.js +11 -6
  154. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  155. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  156. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  157. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  158. package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
  159. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  160. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  161. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  162. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  163. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  164. package/examples/jsm/tsl/display/TRAANode.js +578 -0
  165. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  166. package/examples/jsm/tsl/display/hashBlur.js +18 -20
  167. package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
  168. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  169. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  170. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  171. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  172. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  173. package/package.json +5 -10
  174. package/src/Three.Core.js +5 -2
  175. package/src/Three.TSL.js +112 -32
  176. package/src/Three.WebGPU.Nodes.js +2 -0
  177. package/src/Three.WebGPU.js +4 -0
  178. package/src/animation/AnimationClip.js +20 -4
  179. package/src/animation/AnimationMixer.js +3 -3
  180. package/src/animation/AnimationObjectGroup.js +2 -1
  181. package/src/animation/KeyframeTrack.js +8 -7
  182. package/src/animation/PropertyBinding.js +12 -11
  183. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  184. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  185. package/src/audio/Audio.js +10 -9
  186. package/src/audio/PositionalAudio.js +1 -1
  187. package/src/cameras/Camera.js +14 -0
  188. package/src/cameras/OrthographicCamera.js +2 -2
  189. package/src/cameras/PerspectiveCamera.js +2 -2
  190. package/src/cameras/StereoCamera.js +2 -2
  191. package/src/constants.js +13 -5
  192. package/src/core/BufferAttribute.js +3 -3
  193. package/src/core/BufferGeometry.js +10 -10
  194. package/src/core/Clock.js +2 -8
  195. package/src/core/EventDispatcher.js +1 -1
  196. package/src/core/GLBufferAttribute.js +13 -1
  197. package/src/core/InterleavedBuffer.js +1 -1
  198. package/src/core/InterleavedBufferAttribute.js +3 -2
  199. package/src/core/Object3D.js +4 -3
  200. package/src/core/Raycaster.js +2 -1
  201. package/src/core/RenderTarget.js +10 -1
  202. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  203. package/src/extras/Controls.js +5 -4
  204. package/src/extras/DataUtils.js +2 -1
  205. package/src/extras/Earcut.js +6 -0
  206. package/src/extras/ImageUtils.js +2 -2
  207. package/src/extras/PMREMGenerator.js +279 -55
  208. package/src/extras/TextureUtils.js +2 -1
  209. package/src/extras/core/Curve.js +2 -1
  210. package/src/extras/core/Interpolations.js +7 -1
  211. package/src/extras/core/Path.js +22 -22
  212. package/src/extras/core/ShapePath.js +4 -4
  213. package/src/extras/lib/earcut.js +8 -8
  214. package/src/geometries/BoxGeometry.js +1 -0
  215. package/src/geometries/CapsuleGeometry.js +1 -0
  216. package/src/geometries/CircleGeometry.js +1 -0
  217. package/src/geometries/ConeGeometry.js +1 -0
  218. package/src/geometries/CylinderGeometry.js +1 -0
  219. package/src/geometries/DodecahedronGeometry.js +1 -0
  220. package/src/geometries/ExtrudeGeometry.js +8 -6
  221. package/src/geometries/IcosahedronGeometry.js +1 -0
  222. package/src/geometries/LatheGeometry.js +1 -0
  223. package/src/geometries/OctahedronGeometry.js +1 -0
  224. package/src/geometries/PlaneGeometry.js +1 -0
  225. package/src/geometries/RingGeometry.js +1 -0
  226. package/src/geometries/ShapeGeometry.js +1 -0
  227. package/src/geometries/SphereGeometry.js +1 -0
  228. package/src/geometries/TetrahedronGeometry.js +1 -0
  229. package/src/geometries/TorusGeometry.js +1 -0
  230. package/src/geometries/TorusKnotGeometry.js +1 -0
  231. package/src/geometries/TubeGeometry.js +1 -0
  232. package/src/helpers/CameraHelper.js +42 -12
  233. package/src/helpers/SkeletonHelper.js +35 -6
  234. package/src/lights/LightShadow.js +21 -8
  235. package/src/lights/PointLightShadow.js +1 -1
  236. package/src/lights/webgpu/ProjectorLight.js +1 -1
  237. package/src/loaders/AnimationLoader.js +2 -1
  238. package/src/loaders/AudioLoader.js +2 -1
  239. package/src/loaders/BufferGeometryLoader.js +2 -2
  240. package/src/loaders/Cache.js +2 -2
  241. package/src/loaders/DataTextureLoader.js +1 -1
  242. package/src/loaders/FileLoader.js +29 -5
  243. package/src/loaders/ImageBitmapLoader.js +32 -8
  244. package/src/loaders/ImageLoader.js +56 -9
  245. package/src/loaders/Loader.js +17 -3
  246. package/src/loaders/LoadingManager.js +45 -0
  247. package/src/loaders/MaterialLoader.js +3 -2
  248. package/src/loaders/ObjectLoader.js +13 -13
  249. package/src/loaders/TextureLoader.js +1 -1
  250. package/src/loaders/nodes/NodeLoader.js +3 -2
  251. package/src/materials/Material.js +16 -3
  252. package/src/materials/MeshBasicMaterial.js +2 -1
  253. package/src/materials/MeshDepthMaterial.js +1 -0
  254. package/src/materials/MeshDistanceMaterial.js +1 -1
  255. package/src/materials/MeshLambertMaterial.js +2 -1
  256. package/src/materials/MeshMatcapMaterial.js +22 -0
  257. package/src/materials/MeshNormalMaterial.js +1 -0
  258. package/src/materials/MeshPhongMaterial.js +2 -1
  259. package/src/materials/MeshPhysicalMaterial.js +2 -1
  260. package/src/materials/MeshStandardMaterial.js +8 -7
  261. package/src/materials/MeshToonMaterial.js +1 -0
  262. package/src/materials/PointsMaterial.js +1 -1
  263. package/src/materials/ShaderMaterial.js +2 -2
  264. package/src/materials/nodes/Line2NodeMaterial.js +2 -10
  265. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  266. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  267. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  268. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  269. package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
  270. package/src/materials/nodes/NodeMaterial.js +90 -27
  271. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  272. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  273. package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
  274. package/src/math/Color.js +6 -5
  275. package/src/math/ColorManagement.js +9 -3
  276. package/src/math/Cylindrical.js +1 -1
  277. package/src/math/Euler.js +2 -1
  278. package/src/math/Frustum.js +25 -9
  279. package/src/math/FrustumArray.js +10 -5
  280. package/src/math/Line3.js +129 -2
  281. package/src/math/MathUtils.js +13 -11
  282. package/src/math/Matrix2.js +1 -1
  283. package/src/math/Matrix3.js +2 -2
  284. package/src/math/Matrix4.js +55 -34
  285. package/src/math/Plane.js +1 -1
  286. package/src/math/Quaternion.js +69 -67
  287. package/src/math/Spherical.js +3 -3
  288. package/src/nodes/Nodes.js +6 -4
  289. package/src/nodes/TSL.js +9 -4
  290. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  291. package/src/nodes/accessors/Bitangent.js +31 -25
  292. package/src/nodes/accessors/BufferNode.js +1 -1
  293. package/src/nodes/accessors/Camera.js +142 -16
  294. package/src/nodes/accessors/ClippingNode.js +6 -5
  295. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  296. package/src/nodes/accessors/InstanceNode.js +25 -5
  297. package/src/nodes/accessors/Lights.js +10 -0
  298. package/src/nodes/accessors/Normal.js +97 -30
  299. package/src/nodes/accessors/Object3DNode.js +2 -2
  300. package/src/nodes/accessors/Position.js +25 -9
  301. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  302. package/src/nodes/accessors/ReferenceNode.js +20 -4
  303. package/src/nodes/accessors/ReflectVector.js +3 -3
  304. package/src/nodes/accessors/SceneNode.js +3 -2
  305. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  306. package/src/nodes/accessors/StorageTextureNode.js +23 -1
  307. package/src/nodes/accessors/Tangent.js +25 -17
  308. package/src/nodes/accessors/TangentUtils.js +46 -0
  309. package/src/nodes/accessors/Texture3DNode.js +14 -1
  310. package/src/nodes/accessors/TextureBicubic.js +21 -3
  311. package/src/nodes/accessors/TextureNode.js +142 -44
  312. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  313. package/src/nodes/code/FunctionCallNode.js +24 -4
  314. package/src/nodes/code/FunctionNode.js +23 -0
  315. package/src/nodes/core/ArrayNode.js +13 -0
  316. package/src/nodes/core/AssignNode.js +6 -2
  317. package/src/nodes/core/AttributeNode.js +2 -1
  318. package/src/nodes/core/ContextNode.js +48 -10
  319. package/src/nodes/core/IndexNode.js +2 -2
  320. package/src/nodes/core/InputNode.js +2 -1
  321. package/src/nodes/core/InspectorNode.js +128 -0
  322. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
  323. package/src/nodes/core/Node.js +167 -34
  324. package/src/nodes/core/NodeBuilder.js +404 -120
  325. package/src/nodes/core/NodeFrame.js +21 -21
  326. package/src/nodes/core/NodeFunction.js +2 -1
  327. package/src/nodes/core/NodeParser.js +2 -1
  328. package/src/nodes/core/NodeUniform.js +1 -1
  329. package/src/nodes/core/NodeUtils.js +17 -88
  330. package/src/nodes/core/ParameterNode.js +31 -0
  331. package/src/nodes/core/PropertyNode.js +7 -0
  332. package/src/nodes/core/StackNode.js +77 -30
  333. package/src/nodes/core/StructNode.js +5 -5
  334. package/src/nodes/core/StructTypeNode.js +1 -0
  335. package/src/nodes/core/SubBuildNode.js +89 -0
  336. package/src/nodes/core/UniformNode.js +80 -14
  337. package/src/nodes/core/VarNode.js +142 -16
  338. package/src/nodes/core/VaryingNode.js +9 -6
  339. package/src/nodes/display/BlendModes.js +7 -6
  340. package/src/nodes/display/BumpMapNode.js +1 -1
  341. package/src/nodes/display/ColorAdjustment.js +1 -1
  342. package/src/nodes/display/FrontFacingNode.js +35 -7
  343. package/src/nodes/display/NormalMapNode.js +20 -50
  344. package/src/nodes/display/PassNode.js +206 -17
  345. package/src/nodes/display/RenderOutputNode.js +28 -2
  346. package/src/nodes/display/ScreenNode.js +44 -40
  347. package/src/nodes/display/ToneMappingNode.js +31 -4
  348. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  349. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  350. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  351. package/src/nodes/display/ViewportTextureNode.js +94 -4
  352. package/src/nodes/fog/Fog.js +3 -2
  353. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  354. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  355. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  356. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  357. package/src/nodes/functions/BasicLightingModel.js +2 -1
  358. package/src/nodes/functions/PhongLightingModel.js +3 -3
  359. package/src/nodes/functions/PhysicalLightingModel.js +19 -18
  360. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  361. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  362. package/src/nodes/geometry/RangeNode.js +40 -4
  363. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  364. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  365. package/src/nodes/gpgpu/ComputeNode.js +81 -25
  366. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  367. package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
  368. package/src/nodes/lighting/EnvironmentNode.js +11 -11
  369. package/src/nodes/lighting/LightsNode.js +7 -8
  370. package/src/nodes/lighting/PointShadowNode.js +6 -0
  371. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  372. package/src/nodes/lighting/ShadowFilterNode.js +3 -1
  373. package/src/nodes/lighting/ShadowNode.js +77 -10
  374. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  375. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  376. package/src/nodes/math/BitcastNode.js +156 -0
  377. package/src/nodes/math/ConditionalNode.js +25 -27
  378. package/src/nodes/math/MathNode.js +106 -65
  379. package/src/nodes/math/OperatorNode.js +28 -43
  380. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  381. package/src/nodes/shapes/Shapes.js +1 -1
  382. package/src/nodes/tsl/TSLBase.js +6 -2
  383. package/src/nodes/tsl/TSLCore.js +546 -186
  384. package/src/nodes/utils/DebugNode.js +3 -2
  385. package/src/nodes/utils/EquirectUV.js +27 -0
  386. package/src/nodes/utils/EventNode.js +119 -0
  387. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  388. package/src/nodes/utils/JoinNode.js +6 -3
  389. package/src/nodes/utils/LoopNode.js +20 -41
  390. package/src/nodes/utils/MatcapUV.js +22 -0
  391. package/src/nodes/utils/MemberNode.js +59 -7
  392. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  393. package/src/nodes/utils/RTTNode.js +33 -6
  394. package/src/nodes/utils/ReflectorNode.js +68 -10
  395. package/src/nodes/utils/SampleNode.js +91 -0
  396. package/src/nodes/utils/SplitNode.js +11 -0
  397. package/src/nodes/utils/Timer.js +0 -47
  398. package/src/nodes/utils/TriplanarTextures.js +65 -0
  399. package/src/objects/BatchedMesh.js +6 -4
  400. package/src/objects/LOD.js +1 -1
  401. package/src/objects/Line.js +2 -1
  402. package/src/objects/LineSegments.js +2 -1
  403. package/src/objects/Skeleton.js +3 -2
  404. package/src/objects/SkinnedMesh.js +3 -1
  405. package/src/objects/Sprite.js +4 -3
  406. package/src/renderers/WebGLRenderer.js +77 -66
  407. package/src/renderers/common/Animation.js +13 -1
  408. package/src/renderers/common/Attributes.js +1 -1
  409. package/src/renderers/common/Backend.js +108 -27
  410. package/src/renderers/common/Background.js +4 -3
  411. package/src/renderers/common/Bindings.js +76 -19
  412. package/src/renderers/common/CanvasTarget.js +341 -0
  413. package/src/renderers/common/ChainMap.js +1 -1
  414. package/src/renderers/common/Color4.js +2 -2
  415. package/src/renderers/common/CubeRenderTarget.js +1 -1
  416. package/src/renderers/common/DataMap.js +1 -1
  417. package/src/renderers/common/Geometries.js +26 -0
  418. package/src/renderers/common/Info.js +4 -2
  419. package/src/renderers/common/InspectorBase.js +146 -0
  420. package/src/renderers/common/Pipelines.js +1 -1
  421. package/src/renderers/common/PostProcessing.js +61 -25
  422. package/src/renderers/common/QuadMesh.js +7 -1
  423. package/src/renderers/common/RenderContext.js +2 -2
  424. package/src/renderers/common/RenderList.js +7 -3
  425. package/src/renderers/common/RenderObject.js +84 -5
  426. package/src/renderers/common/RenderObjects.js +1 -1
  427. package/src/renderers/common/Renderer.js +486 -255
  428. package/src/renderers/common/RendererUtils.js +9 -0
  429. package/src/renderers/common/SampledTexture.js +8 -68
  430. package/src/renderers/common/Sampler.js +117 -0
  431. package/src/renderers/common/Storage3DTexture.js +100 -0
  432. package/src/renderers/common/StorageArrayTexture.js +84 -0
  433. package/src/renderers/common/StorageTexture.js +27 -0
  434. package/src/renderers/common/Textures.js +138 -46
  435. package/src/renderers/common/TimestampQueryPool.js +65 -3
  436. package/src/renderers/common/UniformsGroup.js +2 -1
  437. package/src/renderers/common/XRManager.js +63 -24
  438. package/src/renderers/common/XRRenderTarget.js +21 -4
  439. package/src/renderers/common/extras/PMREMGenerator.js +161 -66
  440. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  441. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  442. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  443. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  444. package/src/renderers/common/nodes/Nodes.js +38 -16
  445. package/src/renderers/shaders/DFGLUTData.js +64 -0
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  447. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  450. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  451. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  454. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  455. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  456. package/src/renderers/shaders/UniformsLib.js +1 -0
  457. package/src/renderers/shaders/UniformsUtils.js +25 -4
  458. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  459. package/src/renderers/webgl/WebGLCapabilities.js +4 -3
  460. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  461. package/src/renderers/webgl/WebGLInfo.js +3 -1
  462. package/src/renderers/webgl/WebGLProgram.js +25 -18
  463. package/src/renderers/webgl/WebGLPrograms.js +9 -6
  464. package/src/renderers/webgl/WebGLShadowMap.js +13 -2
  465. package/src/renderers/webgl/WebGLState.js +17 -16
  466. package/src/renderers/webgl/WebGLTextures.js +38 -21
  467. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  468. package/src/renderers/webgl/WebGLUtils.js +3 -2
  469. package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
  470. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
  471. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  472. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  473. package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
  474. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
  475. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  476. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  477. package/src/renderers/webgpu/WebGPUBackend.js +205 -128
  478. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  479. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  480. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
  481. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
  482. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
  483. package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
  484. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
  485. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  486. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
  487. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  488. package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
  489. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  490. package/src/renderers/webxr/WebXRManager.js +89 -13
  491. package/src/textures/ExternalTexture.js +56 -0
  492. package/src/textures/FramebufferTexture.js +2 -2
  493. package/src/textures/Source.js +14 -3
  494. package/src/textures/Texture.js +3 -2
  495. package/src/textures/VideoTexture.js +29 -2
  496. package/src/utils.js +67 -3
  497. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  498. package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
  499. package/src/nodes/utils/EquirectUVNode.js +0 -65
  500. package/src/nodes/utils/MatcapUVNode.js +0 -49
  501. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -4,7 +4,7 @@ import { add, float, mix, output, sub, texture, uniform, uv, vec2, vec4 } from '
4
4
  import { potpack } from '../libs/potpack.module.js';
5
5
 
6
6
  /**
7
- * Progressive Light Map Accumulator, by [zalo]{@link https://github.com/zalo/}.
7
+ * Progressive Light Map Accumulator, by [zalo](https://github.com/zalo/).
8
8
  *
9
9
  * To use, simply construct a `ProgressiveLightMap` object,
10
10
  * `plmap.addObjectsToLightMap(object)` an array of semi-static
@@ -101,6 +101,12 @@ class ProgressiveLightMap {
101
101
 
102
102
  }
103
103
 
104
+ if ( object.geometry.hasAttribute( 'normal' ) === false ) {
105
+
106
+ console.warn( 'THREE.ProgressiveLightMap: All lightmap objects need normals.' ); continue;
107
+
108
+ }
109
+
104
110
  if ( this._blurringPlane === null ) {
105
111
 
106
112
  this._initializeBlurPlane();
@@ -42,9 +42,7 @@ function TubePainter() {
42
42
  geometry.setAttribute( 'color', colors );
43
43
  geometry.drawRange.count = 0;
44
44
 
45
- const material = new MeshStandardMaterial( {
46
- vertexColors: true
47
- } );
45
+ const material = new MeshStandardMaterial( { vertexColors: true } );
48
46
 
49
47
  const mesh = new Mesh( geometry, material );
50
48
  mesh.frustumCulled = false;
@@ -55,7 +53,7 @@ function TubePainter() {
55
53
 
56
54
  const PI2 = Math.PI * 2;
57
55
 
58
- const sides = 10;
56
+ const sides = 15;
59
57
  const array = [];
60
58
  const radius = 0.01 * size;
61
59
 
@@ -72,33 +70,263 @@ function TubePainter() {
72
70
 
73
71
  //
74
72
 
73
+ const vector = new Vector3();
74
+
75
75
  const vector1 = new Vector3();
76
76
  const vector2 = new Vector3();
77
77
  const vector3 = new Vector3();
78
78
  const vector4 = new Vector3();
79
79
 
80
- const color = new Color( 0xffffff );
81
- let size = 1;
80
+ const color1 = new Color( 0xffffff );
81
+ const color2 = new Color( 0xffffff );
82
82
 
83
- function stroke( position1, position2, matrix1, matrix2 ) {
83
+ let size1 = 1;
84
+ let size2 = 1;
84
85
 
85
- if ( position1.distanceToSquared( position2 ) === 0 ) return;
86
+ function addCap( position, matrix, isEndCap, capSize ) {
86
87
 
87
88
  let count = geometry.drawRange.count;
88
89
 
89
- const points = getPoints( size );
90
+ const points = getPoints( capSize );
91
+ const sides = points.length;
92
+ const radius = 0.01 * capSize;
93
+ const latSegments = 4;
94
+ const directionSign = isEndCap ? - 1 : 1;
95
+
96
+ for ( let lat = 0; lat < latSegments; lat ++ ) {
97
+
98
+ const phi1 = ( lat / latSegments ) * Math.PI * 0.5;
99
+ const phi2 = ( ( lat + 1 ) / latSegments ) * Math.PI * 0.5;
100
+
101
+ const z1 = Math.sin( phi1 ) * radius * directionSign;
102
+ const r1 = Math.cos( phi1 ) * radius;
103
+
104
+ const z2 = Math.sin( phi2 ) * radius * directionSign;
105
+ const r2 = Math.cos( phi2 ) * radius;
106
+
107
+ for ( let i = 0; i < sides; i ++ ) {
108
+
109
+ const theta1 = ( i / sides ) * Math.PI * 2;
110
+ const theta2 = ( ( i + 1 ) / sides ) * Math.PI * 2;
111
+
112
+ // First ring
113
+ const x1 = Math.sin( theta1 ) * r1;
114
+ const y1 = Math.cos( theta1 ) * r1;
115
+
116
+ const x2 = Math.sin( theta2 ) * r1;
117
+ const y2 = Math.cos( theta2 ) * r1;
118
+
119
+ // Second ring
120
+ const x3 = Math.sin( theta1 ) * r2;
121
+ const y3 = Math.cos( theta1 ) * r2;
122
+
123
+ const x4 = Math.sin( theta2 ) * r2;
124
+ const y4 = Math.cos( theta2 ) * r2;
125
+
126
+ // Transform to world space
127
+ vector1.set( x1, y1, z1 ).applyMatrix4( matrix ).add( position );
128
+ vector2.set( x2, y2, z1 ).applyMatrix4( matrix ).add( position );
129
+ vector3.set( x3, y3, z2 ).applyMatrix4( matrix ).add( position );
130
+ vector4.set( x4, y4, z2 ).applyMatrix4( matrix ).add( position );
131
+
132
+ // First triangle
133
+ normal.set( x1, y1, z1 ).normalize().transformDirection( matrix );
134
+ vector.set( x2, y2, z1 ).normalize().transformDirection( matrix );
135
+ side.set( x3, y3, z2 ).normalize().transformDirection( matrix );
136
+
137
+ if ( isEndCap ) {
138
+
139
+ vector1.toArray( positions.array, count * 3 );
140
+ vector2.toArray( positions.array, ( count + 1 ) * 3 );
141
+ vector3.toArray( positions.array, ( count + 2 ) * 3 );
142
+
143
+ normal.toArray( normals.array, count * 3 );
144
+ vector.toArray( normals.array, ( count + 1 ) * 3 );
145
+ side.toArray( normals.array, ( count + 2 ) * 3 );
146
+
147
+ } else {
148
+
149
+ vector1.toArray( positions.array, count * 3 );
150
+ vector3.toArray( positions.array, ( count + 1 ) * 3 );
151
+ vector2.toArray( positions.array, ( count + 2 ) * 3 );
152
+
153
+ normal.toArray( normals.array, count * 3 );
154
+ side.toArray( normals.array, ( count + 1 ) * 3 );
155
+ vector.toArray( normals.array, ( count + 2 ) * 3 );
156
+
157
+ }
158
+
159
+ color1.toArray( colors.array, count * 3 );
160
+ color1.toArray( colors.array, ( count + 1 ) * 3 );
161
+ color1.toArray( colors.array, ( count + 2 ) * 3 );
162
+
163
+ count += 3;
164
+
165
+ // Second triangle
166
+ if ( r2 > 0.001 ) {
167
+
168
+ normal.set( x2, y2, z1 ).normalize().transformDirection( matrix );
169
+ vector.set( x4, y4, z2 ).normalize().transformDirection( matrix );
170
+ side.set( x3, y3, z2 ).normalize().transformDirection( matrix );
171
+
172
+ if ( isEndCap ) {
173
+
174
+ vector2.toArray( positions.array, count * 3 );
175
+ vector4.toArray( positions.array, ( count + 1 ) * 3 );
176
+ vector3.toArray( positions.array, ( count + 2 ) * 3 );
177
+
178
+ normal.toArray( normals.array, count * 3 );
179
+ vector.toArray( normals.array, ( count + 1 ) * 3 );
180
+ side.toArray( normals.array, ( count + 2 ) * 3 );
181
+
182
+ } else {
183
+
184
+ vector3.toArray( positions.array, count * 3 );
185
+ vector4.toArray( positions.array, ( count + 1 ) * 3 );
186
+ vector2.toArray( positions.array, ( count + 2 ) * 3 );
187
+
188
+ side.toArray( normals.array, count * 3 );
189
+ vector.toArray( normals.array, ( count + 1 ) * 3 );
190
+ normal.toArray( normals.array, ( count + 2 ) * 3 );
191
+
192
+ }
193
+
194
+ color1.toArray( colors.array, count * 3 );
195
+ color1.toArray( colors.array, ( count + 1 ) * 3 );
196
+ color1.toArray( colors.array, ( count + 2 ) * 3 );
197
+
198
+ count += 3;
199
+
200
+ }
201
+
202
+ }
203
+
204
+ }
205
+
206
+ geometry.drawRange.count = count;
207
+
208
+ }
209
+
210
+ function updateEndCap( position, matrix, capSize ) {
211
+
212
+ if ( endCapStartIndex === null ) return;
213
+
214
+ const points = getPoints( capSize );
215
+ const sides = points.length;
216
+ const radius = 0.01 * capSize;
217
+ const latSegments = 4;
218
+
219
+ let count = endCapStartIndex;
220
+
221
+ for ( let lat = 0; lat < latSegments; lat ++ ) {
222
+
223
+ const phi1 = ( lat / latSegments ) * Math.PI * 0.5;
224
+ const phi2 = ( ( lat + 1 ) / latSegments ) * Math.PI * 0.5;
225
+
226
+ const z1 = - Math.sin( phi1 ) * radius;
227
+ const r1 = Math.cos( phi1 ) * radius;
228
+
229
+ const z2 = - Math.sin( phi2 ) * radius;
230
+ const r2 = Math.cos( phi2 ) * radius;
231
+
232
+ for ( let i = 0; i < sides; i ++ ) {
233
+
234
+ const theta1 = ( i / sides ) * Math.PI * 2;
235
+ const theta2 = ( ( i + 1 ) / sides ) * Math.PI * 2;
236
+
237
+ // First ring
238
+ const x1 = Math.sin( theta1 ) * r1;
239
+ const y1 = Math.cos( theta1 ) * r1;
240
+
241
+ const x2 = Math.sin( theta2 ) * r1;
242
+ const y2 = Math.cos( theta2 ) * r1;
243
+
244
+ // Second ring
245
+ const x3 = Math.sin( theta1 ) * r2;
246
+ const y3 = Math.cos( theta1 ) * r2;
247
+
248
+ const x4 = Math.sin( theta2 ) * r2;
249
+ const y4 = Math.cos( theta2 ) * r2;
250
+
251
+ // Transform positions to world space
252
+ vector1.set( x1, y1, z1 ).applyMatrix4( matrix ).add( position );
253
+ vector2.set( x2, y2, z1 ).applyMatrix4( matrix ).add( position );
254
+ vector3.set( x3, y3, z2 ).applyMatrix4( matrix ).add( position );
255
+ vector4.set( x4, y4, z2 ).applyMatrix4( matrix ).add( position );
256
+
257
+ // Transform normals to world space
258
+ normal.set( x1, y1, z1 ).normalize().transformDirection( matrix );
259
+ vector.set( x2, y2, z1 ).normalize().transformDirection( matrix );
260
+ side.set( x3, y3, z2 ).normalize().transformDirection( matrix );
261
+
262
+ // First triangle
263
+ vector1.toArray( positions.array, count * 3 );
264
+ vector2.toArray( positions.array, ( count + 1 ) * 3 );
265
+ vector3.toArray( positions.array, ( count + 2 ) * 3 );
266
+
267
+ normal.toArray( normals.array, count * 3 );
268
+ vector.toArray( normals.array, ( count + 1 ) * 3 );
269
+ side.toArray( normals.array, ( count + 2 ) * 3 );
270
+
271
+ color1.toArray( colors.array, count * 3 );
272
+ color1.toArray( colors.array, ( count + 1 ) * 3 );
273
+ color1.toArray( colors.array, ( count + 2 ) * 3 );
274
+
275
+ count += 3;
276
+
277
+ // Second triangle
278
+ if ( r2 > 0.001 ) {
279
+
280
+ normal.set( x2, y2, z1 ).normalize().transformDirection( matrix );
281
+ vector.set( x4, y4, z2 ).normalize().transformDirection( matrix );
282
+ side.set( x3, y3, z2 ).normalize().transformDirection( matrix );
283
+
284
+ vector2.toArray( positions.array, count * 3 );
285
+ vector4.toArray( positions.array, ( count + 1 ) * 3 );
286
+ vector3.toArray( positions.array, ( count + 2 ) * 3 );
287
+
288
+ normal.toArray( normals.array, count * 3 );
289
+ vector.toArray( normals.array, ( count + 1 ) * 3 );
290
+ side.toArray( normals.array, ( count + 2 ) * 3 );
291
+
292
+ color1.toArray( colors.array, count * 3 );
293
+ color1.toArray( colors.array, ( count + 1 ) * 3 );
294
+ color1.toArray( colors.array, ( count + 2 ) * 3 );
295
+
296
+ count += 3;
297
+
298
+ }
299
+
300
+ }
301
+
302
+ }
303
+
304
+ positions.addUpdateRange( endCapStartIndex * 3, endCapVertexCount * 3 );
305
+ normals.addUpdateRange( endCapStartIndex * 3, endCapVertexCount * 3 );
306
+ colors.addUpdateRange( endCapStartIndex * 3, endCapVertexCount * 3 );
307
+
308
+ }
309
+
310
+ function stroke( position1, position2, matrix1, matrix2, size1, size2 ) {
311
+
312
+ if ( position1.distanceToSquared( position2 ) === 0 ) return;
313
+
314
+ let count = geometry.drawRange.count;
90
315
 
91
- for ( let i = 0, il = points.length; i < il; i ++ ) {
316
+ const points1 = getPoints( size1 );
317
+ const points2 = getPoints( size2 );
92
318
 
93
- const vertex1 = points[ i ];
94
- const vertex2 = points[ ( i + 1 ) % il ];
319
+ for ( let i = 0, il = points2.length; i < il; i ++ ) {
95
320
 
96
- // positions
321
+ const vertex1_2 = points2[ i ];
322
+ const vertex2_2 = points2[ ( i + 1 ) % il ];
323
+ const vertex1_1 = points1[ i ];
324
+ const vertex2_1 = points1[ ( i + 1 ) % il ];
97
325
 
98
- vector1.copy( vertex1 ).applyMatrix4( matrix2 ).add( position2 );
99
- vector2.copy( vertex2 ).applyMatrix4( matrix2 ).add( position2 );
100
- vector3.copy( vertex2 ).applyMatrix4( matrix1 ).add( position1 );
101
- vector4.copy( vertex1 ).applyMatrix4( matrix1 ).add( position1 );
326
+ vector1.copy( vertex1_2 ).applyMatrix4( matrix2 ).add( position2 );
327
+ vector2.copy( vertex2_2 ).applyMatrix4( matrix2 ).add( position2 );
328
+ vector3.copy( vertex2_1 ).applyMatrix4( matrix1 ).add( position1 );
329
+ vector4.copy( vertex1_1 ).applyMatrix4( matrix1 ).add( position1 );
102
330
 
103
331
  vector1.toArray( positions.array, ( count + 0 ) * 3 );
104
332
  vector2.toArray( positions.array, ( count + 1 ) * 3 );
@@ -108,12 +336,10 @@ function TubePainter() {
108
336
  vector3.toArray( positions.array, ( count + 4 ) * 3 );
109
337
  vector4.toArray( positions.array, ( count + 5 ) * 3 );
110
338
 
111
- // normals
112
-
113
- vector1.copy( vertex1 ).applyMatrix4( matrix2 ).normalize();
114
- vector2.copy( vertex2 ).applyMatrix4( matrix2 ).normalize();
115
- vector3.copy( vertex2 ).applyMatrix4( matrix1 ).normalize();
116
- vector4.copy( vertex1 ).applyMatrix4( matrix1 ).normalize();
339
+ vector1.copy( vertex1_2 ).applyMatrix4( matrix2 ).normalize();
340
+ vector2.copy( vertex2_2 ).applyMatrix4( matrix2 ).normalize();
341
+ vector3.copy( vertex2_1 ).applyMatrix4( matrix1 ).normalize();
342
+ vector4.copy( vertex1_1 ).applyMatrix4( matrix1 ).normalize();
117
343
 
118
344
  vector1.toArray( normals.array, ( count + 0 ) * 3 );
119
345
  vector2.toArray( normals.array, ( count + 1 ) * 3 );
@@ -123,15 +349,13 @@ function TubePainter() {
123
349
  vector3.toArray( normals.array, ( count + 4 ) * 3 );
124
350
  vector4.toArray( normals.array, ( count + 5 ) * 3 );
125
351
 
126
- // colors
127
-
128
- color.toArray( colors.array, ( count + 0 ) * 3 );
129
- color.toArray( colors.array, ( count + 1 ) * 3 );
130
- color.toArray( colors.array, ( count + 2 ) * 3 );
352
+ color2.toArray( colors.array, ( count + 0 ) * 3 );
353
+ color2.toArray( colors.array, ( count + 1 ) * 3 );
354
+ color1.toArray( colors.array, ( count + 2 ) * 3 );
131
355
 
132
- color.toArray( colors.array, ( count + 3 ) * 3 );
133
- color.toArray( colors.array, ( count + 4 ) * 3 );
134
- color.toArray( colors.array, ( count + 5 ) * 3 );
356
+ color2.toArray( colors.array, ( count + 3 ) * 3 );
357
+ color1.toArray( colors.array, ( count + 4 ) * 3 );
358
+ color1.toArray( colors.array, ( count + 5 ) * 3 );
135
359
 
136
360
  count += 6;
137
361
 
@@ -143,7 +367,9 @@ function TubePainter() {
143
367
 
144
368
  //
145
369
 
146
- const up = new Vector3( 0, 1, 0 );
370
+ const direction = new Vector3();
371
+ const normal = new Vector3();
372
+ const side = new Vector3();
147
373
 
148
374
  const point1 = new Vector3();
149
375
  const point2 = new Vector3();
@@ -151,31 +377,139 @@ function TubePainter() {
151
377
  const matrix1 = new Matrix4();
152
378
  const matrix2 = new Matrix4();
153
379
 
154
- function moveTo( position ) {
380
+ const lastNormal = new Vector3();
381
+ const prevDirection = new Vector3();
382
+ const rotationAxis = new Vector3();
155
383
 
156
- point1.copy( position );
157
- matrix1.lookAt( point2, point1, up );
384
+ let isFirstSegment = true;
385
+
386
+ let endCapStartIndex = null;
387
+ let endCapVertexCount = 0;
388
+
389
+ function calculateRMF() {
390
+
391
+ if ( isFirstSegment === true ) {
392
+
393
+ if ( Math.abs( direction.y ) < 0.99 ) {
394
+
395
+ vector.copy( direction ).multiplyScalar( direction.y );
396
+ normal.set( 0, 1, 0 ).sub( vector ).normalize();
397
+
398
+ } else {
399
+
400
+ vector.copy( direction ).multiplyScalar( direction.x );
401
+ normal.set( 1, 0, 0 ).sub( vector ).normalize();
402
+
403
+ }
404
+
405
+ } else {
406
+
407
+ rotationAxis.crossVectors( prevDirection, direction );
408
+
409
+ const rotAxisLength = rotationAxis.length();
410
+
411
+ if ( rotAxisLength > 0.0001 ) {
412
+
413
+ rotationAxis.divideScalar( rotAxisLength );
414
+ vector.addVectors( prevDirection, direction );
415
+ const c1 = - 2.0 / ( 1.0 + prevDirection.dot( direction ) );
416
+ const dot = lastNormal.dot( vector );
417
+ normal.copy( lastNormal ).addScaledVector( vector, c1 * dot );
418
+
419
+ } else {
420
+
421
+ normal.copy( lastNormal );
422
+
423
+ }
424
+
425
+ }
426
+
427
+ side.crossVectors( direction, normal ).normalize();
428
+ normal.crossVectors( side, direction ).normalize();
429
+
430
+ if ( isFirstSegment === false ) {
431
+
432
+ const smoothFactor = 0.3;
433
+
434
+ normal.lerp( lastNormal, smoothFactor ).normalize();
435
+ side.crossVectors( direction, normal ).normalize();
436
+ normal.crossVectors( side, direction ).normalize();
437
+
438
+ }
439
+
440
+ lastNormal.copy( normal );
441
+ prevDirection.copy( direction );
442
+
443
+ matrix1.makeBasis( side, normal, vector.copy( direction ).negate() );
444
+
445
+ }
446
+
447
+ function moveTo( position ) {
158
448
 
159
449
  point2.copy( position );
160
- matrix2.copy( matrix1 );
450
+
451
+ lastNormal.set( 0, 1, 0 );
452
+
453
+ isFirstSegment = true;
454
+
455
+ endCapStartIndex = null;
456
+ endCapVertexCount = 0;
161
457
 
162
458
  }
163
459
 
164
460
  function lineTo( position ) {
165
461
 
166
462
  point1.copy( position );
167
- matrix1.lookAt( point2, point1, up );
168
463
 
169
- stroke( point1, point2, matrix1, matrix2 );
464
+ direction.subVectors( point1, point2 );
465
+
466
+ const length = direction.length();
467
+
468
+ if ( length === 0 ) return;
469
+
470
+ direction.normalize();
471
+
472
+ calculateRMF();
473
+
474
+ if ( isFirstSegment === true ) {
475
+
476
+ color2.copy( color1 );
477
+ size2 = size1;
478
+
479
+ matrix2.copy( matrix1 );
480
+
481
+ addCap( point2, matrix2, false, size2 );
482
+
483
+ // End cap is added immediately after start cap and updated in-place
484
+ endCapStartIndex = geometry.drawRange.count;
485
+ addCap( point1, matrix1, true, size1 );
486
+ endCapVertexCount = geometry.drawRange.count - endCapStartIndex;
487
+
488
+ }
489
+
490
+ stroke( point1, point2, matrix1, matrix2, size1, size2 );
491
+
492
+ updateEndCap( point1, matrix1, size1 );
170
493
 
171
494
  point2.copy( point1 );
172
495
  matrix2.copy( matrix1 );
173
496
 
497
+ color2.copy( color1 );
498
+ size2 = size1;
499
+
500
+ isFirstSegment = false;
501
+
174
502
  }
175
503
 
176
504
  function setSize( value ) {
177
505
 
178
- size = value;
506
+ size1 = value;
507
+
508
+ }
509
+
510
+ function setColor( value ) {
511
+
512
+ color1.copy( value );
179
513
 
180
514
  }
181
515
 
@@ -199,7 +533,7 @@ function TubePainter() {
199
533
  colors.addUpdateRange( start * 3, ( end - start ) * 3 );
200
534
  colors.needsUpdate = true;
201
535
 
202
- count = geometry.drawRange.count;
536
+ count = end;
203
537
 
204
538
  }
205
539
 
@@ -241,6 +575,15 @@ function TubePainter() {
241
575
  */
242
576
  setSize: setSize,
243
577
 
578
+ /**
579
+ * Sets the color of newly rendered tube segments.
580
+ *
581
+ * @method
582
+ * @name TubePainter#setColor
583
+ * @param {Color} color The color.
584
+ */
585
+ setColor: setColor,
586
+
244
587
  /**
245
588
  * Updates the internal geometry buffers so the new painted
246
589
  * segments are rendered.
@@ -234,7 +234,7 @@ class Volume {
234
234
  /**
235
235
  * The list of all the slices associated to this volume
236
236
  *
237
- * @type {Array}
237
+ * @type {Array<VolumeSlice>}
238
238
  */
239
239
  this.sliceList = [];
240
240
 
@@ -14,7 +14,7 @@ const _cb = new Vector3(), _ab = new Vector3();
14
14
  * This class can be used to modify a geometry by simplifying it. A typical use
15
15
  * case for such a modifier is automatic LOD generation.
16
16
  *
17
- * The implementation is based on [Progressive Mesh type Polygon Reduction Algorithm]{@link https://web.archive.org/web/20230610044040/http://www.melax.com/polychop/}
17
+ * The implementation is based on [Progressive Mesh type Polygon Reduction Algorithm](https://web.archive.org/web/20230610044040/http://www.melax.com/polychop/)
18
18
  * by Stan Melax in 1998.
19
19
  *
20
20
  * ```js
@@ -110,7 +110,7 @@ class LensflareMesh extends Mesh {
110
110
  material1a.type = 'Lensflare-1a';
111
111
 
112
112
  material1a.vertexNode = vertexNode;
113
- material1a.fragmentNode = vec4( 1.0, 0.0, 1.0, 1.0 );
113
+ material1a.colorNode = vec4( 1.0, 0.0, 1.0, 1.0 );
114
114
 
115
115
  const material1b = new NodeMaterial();
116
116
 
@@ -121,7 +121,7 @@ class LensflareMesh extends Mesh {
121
121
  material1b.type = 'Lensflare-1b';
122
122
 
123
123
  material1b.vertexNode = vertexNode;
124
- material1b.fragmentNode = texture( tempMap, vec2( uv().flipY() ) );
124
+ material1b.colorNode = texture( tempMap, vec2( uv().flipY() ) );
125
125
 
126
126
  // the following object is used for occlusionMap generation
127
127
 
@@ -174,7 +174,7 @@ class LensflareMesh extends Mesh {
174
174
 
175
175
  } )();
176
176
 
177
- material2.fragmentNode = Fn( () => {
177
+ material2.colorNode = Fn( () => {
178
178
 
179
179
  const color = reference( 'color', 'color' );
180
180
  const map = reference( 'map', 'texture' );
@@ -387,6 +387,7 @@ ReflectorForSSRPass.ReflectorShader = {
387
387
  * @property {number} [clipBias=0] - The clip bias.
388
388
  * @property {Object} [shader] - Can be used to pass in a custom shader that defines how the reflective view is projected onto the reflector's geometry.
389
389
  * @property {boolean} [useDepthTexture=true] - Whether to store depth values in a texture or not.
390
+ * @property {Vector2} [resolution] - Resolution for the Reflector Pass.
390
391
  **/
391
392
 
392
393
  export { ReflectorForSSRPass };
@@ -8,7 +8,7 @@ import {
8
8
  } from 'three';
9
9
 
10
10
  /**
11
- * 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}
11
+ * Represents a skydome for scene backgrounds. Based on [A Practical Analytic Model for Daylight](https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight)
12
12
  * aka The Preetham Model, the de facto standard for analytical skydomes.
13
13
  *
14
14
  * Note that this class can only be used with {@link WebGLRenderer}.
@@ -9,7 +9,7 @@ import {
9
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
- * 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}
12
+ * Represents a skydome for scene backgrounds. Based on [A Practical Analytic Model for Daylight](https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight)
13
13
  * aka The Preetham Model, the de facto standard for analytical skydomes.
14
14
  *
15
15
  * Note that this class can only be used with {@link WebGLRenderer}.
@@ -165,7 +165,7 @@ class SkyMesh extends Mesh {
165
165
 
166
166
  } )();
167
167
 
168
- const fragmentNode = /*@__PURE__*/ Fn( () => {
168
+ const colorNode = /*@__PURE__*/ Fn( () => {
169
169
 
170
170
  // constants for atmospheric scattering
171
171
  const pi = float( 3.141592653589793238462643383279502884197169 );
@@ -234,7 +234,7 @@ class SkyMesh extends Mesh {
234
234
  material.depthWrite = false;
235
235
 
236
236
  material.vertexNode = vertexNode;
237
- material.fragmentNode = fragmentNode;
237
+ material.colorNode = colorNode;
238
238
 
239
239
  }
240
240
 
@@ -21,9 +21,9 @@ import {
21
21
  *
22
22
  * References:
23
23
  *
24
- * - [Flat mirror for three.js]{@link https://github.com/Slayvin}
25
- * - [An implementation of water shader based on the flat mirror]{@link https://home.adelphi.edu/~stemkoski/}
26
- * - [Water shader explanations in WebGL]{@link http://29a.ch/slides/2012/webglwater/ }
24
+ * - [Flat mirror for three.js](https://github.com/Slayvin)
25
+ * - [An implementation of water shader based on the flat mirror](https://home.adelphi.edu/~stemkoski/)
26
+ * - [Water shader explanations in WebGL](http://29a.ch/slides/2012/webglwater/ )
27
27
  *
28
28
  * @augments Mesh
29
29
  * @three_import import { Water } from 'three/addons/objects/Water.js';
@@ -15,9 +15,9 @@ import { Fn, add, cameraPosition, div, normalize, positionWorld, sub, time, text
15
15
  *
16
16
  * References:
17
17
  *
18
- * - [Flat mirror for three.js]{@link https://github.com/Slayvin}
19
- * - [An implementation of water shader based on the flat mirror]{@link https://home.adelphi.edu/~stemkoski/}
20
- * - [Water shader explanations in WebGL]{@link http://29a.ch/slides/2012/webglwater/ }
18
+ * - [Flat mirror for three.js](https://github.com/Slayvin)
19
+ * - [An implementation of water shader based on the flat mirror](https://home.adelphi.edu/~stemkoski/)
20
+ * - [Water shader explanations in WebGL](http://29a.ch/slides/2012/webglwater/ )
21
21
  *
22
22
  * @augments Mesh
23
23
  * @three_import import { WaterMesh } from 'three/addons/objects/WaterMesh.js';
@@ -51,7 +51,7 @@ class WaterMesh extends Mesh {
51
51
  * @type {number}
52
52
  * @default 0.5
53
53
  */
54
- this.resolution = options.resolution !== undefined ? options.resolution : 0.5;
54
+ this.resolutionScale = options.resolutionScale !== undefined ? options.resolutionScale : 0.5;
55
55
 
56
56
  // Uniforms
57
57
 
@@ -161,7 +161,7 @@ class WaterMesh extends Mesh {
161
161
 
162
162
  const mirrorSampler = reflector();
163
163
  mirrorSampler.uvNode = mirrorSampler.uvNode.add( distortion );
164
- mirrorSampler.resolution = this.resolution;
164
+ mirrorSampler.reflector.resolutionScale = this.resolutionScale;
165
165
 
166
166
  this.add( mirrorSampler.target );
167
167
 
@@ -183,7 +183,7 @@ class WaterMesh extends Mesh {
183
183
  * Constructor options of `WaterMesh`.
184
184
  *
185
185
  * @typedef {Object} WaterMesh~Options
186
- * @property {number} [resolution=0.5] - The resolution scale.
186
+ * @property {number} [resolutionScale=0.5] - The resolution scale.
187
187
  * @property {?Texture} [waterNormals=null] - The water's normal map.
188
188
  * @property {number} [alpha=1] - The alpha value.
189
189
  * @property {number} [size=1] - The size value.