super-three 0.171.0 → 0.173.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 (455) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +594 -427
  4. package/build/three.core.js +515 -81
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +79 -350
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +20 -7
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +29362 -3427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +29361 -3427
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -5
  15. package/examples/jsm/animation/CCDIKSolver.js +9 -7
  16. package/examples/jsm/capabilities/WebGPU.js +1 -1
  17. package/examples/jsm/controls/ArcballControls.js +48 -37
  18. package/examples/jsm/controls/OrbitControls.js +5 -4
  19. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  20. package/examples/jsm/curves/NURBSCurve.js +1 -1
  21. package/examples/jsm/curves/NURBSUtils.js +3 -0
  22. package/examples/jsm/effects/OutlineEffect.js +1 -1
  23. package/examples/jsm/exporters/GLTFExporter.js +34 -29
  24. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  25. package/examples/jsm/exporters/PLYExporter.js +2 -2
  26. package/examples/jsm/geometries/TextGeometry.js +1 -12
  27. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  28. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  29. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  30. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  31. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  32. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  33. package/examples/jsm/loaders/3MFLoader.js +6 -3
  34. package/examples/jsm/loaders/BVHLoader.js +1 -1
  35. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  36. package/examples/jsm/loaders/DDSLoader.js +42 -0
  37. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  38. package/examples/jsm/loaders/GLTFLoader.js +22 -4
  39. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  40. package/examples/jsm/loaders/KTXLoader.js +4 -4
  41. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  42. package/examples/jsm/loaders/LottieLoader.js +1 -1
  43. package/examples/jsm/loaders/MTLLoader.js +1 -0
  44. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  45. package/examples/jsm/loaders/PLYLoader.js +7 -7
  46. package/examples/jsm/loaders/PVRLoader.js +1 -1
  47. package/examples/jsm/loaders/SVGLoader.js +2 -2
  48. package/examples/jsm/loaders/TDSLoader.js +1 -2
  49. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  50. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  51. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  52. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  53. package/examples/jsm/math/ConvexHull.js +1 -1
  54. package/examples/jsm/math/OBB.js +17 -0
  55. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  56. package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
  57. package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
  58. package/examples/jsm/misc/Volume.js +27 -17
  59. package/examples/jsm/misc/VolumeSlice.js +7 -5
  60. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  61. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  62. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  63. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  64. package/examples/jsm/objects/Sky.js +2 -2
  65. package/examples/jsm/objects/SkyMesh.js +3 -3
  66. package/examples/jsm/objects/Water2.js +1 -1
  67. package/examples/jsm/objects/Water2Mesh.js +2 -2
  68. package/examples/jsm/objects/WaterMesh.js +29 -24
  69. package/examples/jsm/physics/JoltPhysics.js +7 -7
  70. package/examples/jsm/physics/RapierPhysics.js +4 -4
  71. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  72. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  73. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  74. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  75. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  76. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  77. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  78. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  79. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  80. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  81. package/examples/jsm/shaders/BokehShader2.js +1 -1
  82. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  83. package/examples/jsm/shaders/OutputShader.js +5 -1
  84. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  85. package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
  86. package/examples/jsm/transpiler/TSLEncoder.js +2 -0
  87. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  88. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  89. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  90. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  91. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  92. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  93. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  94. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  95. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  96. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  97. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  98. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  99. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  100. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  101. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  102. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  103. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  104. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  105. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  106. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  107. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  108. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  109. package/examples/jsm/tsl/display/Sepia.js +9 -0
  110. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  111. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  112. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  113. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  114. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  115. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  116. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  117. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  118. package/examples/jsm/utils/CameraUtils.js +4 -1
  119. package/examples/jsm/utils/GeometryUtils.js +22 -19
  120. package/examples/jsm/utils/SceneUtils.js +2 -2
  121. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  122. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  123. package/package.json +8 -3
  124. package/src/Three.Core.js +4 -0
  125. package/src/Three.Legacy.js +0 -21
  126. package/src/Three.TSL.js +18 -5
  127. package/src/Three.WebGPU.Nodes.js +2 -2
  128. package/src/Three.WebGPU.js +2 -2
  129. package/src/animation/PropertyBinding.js +2 -2
  130. package/src/cameras/ArrayCamera.js +1 -0
  131. package/src/cameras/PerspectiveCamera.js +18 -2
  132. package/src/constants.js +6 -1
  133. package/src/core/BufferAttribute.js +4 -0
  134. package/src/core/EventDispatcher.js +8 -6
  135. package/src/core/RenderTarget.js +18 -0
  136. package/src/core/RenderTarget3D.js +22 -0
  137. package/src/core/RenderTargetArray.js +22 -0
  138. package/src/extras/Earcut.js +1 -1
  139. package/src/extras/ImageUtils.js +1 -11
  140. package/src/extras/PMREMGenerator.js +20 -0
  141. package/src/extras/TextureUtils.js +6 -0
  142. package/src/helpers/CameraHelper.js +16 -13
  143. package/src/loaders/nodes/NodeLoader.js +59 -0
  144. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  145. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  146. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  147. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  148. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  149. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  150. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  151. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  152. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  153. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  154. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  155. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  156. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  157. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  158. package/src/materials/nodes/NodeMaterial.js +476 -23
  159. package/src/materials/nodes/NodeMaterials.js +0 -1
  160. package/src/materials/nodes/PointsNodeMaterial.js +121 -10
  161. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  162. package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
  163. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  164. package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
  165. package/src/nodes/Nodes.js +5 -6
  166. package/src/nodes/TSL.js +6 -3
  167. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  168. package/src/nodes/accessors/Arrays.js +47 -6
  169. package/src/nodes/accessors/BatchNode.js +42 -6
  170. package/src/nodes/accessors/Bitangent.js +37 -0
  171. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  172. package/src/nodes/accessors/BufferNode.js +63 -0
  173. package/src/nodes/accessors/BuiltinNode.js +38 -0
  174. package/src/nodes/accessors/Camera.js +113 -3
  175. package/src/nodes/accessors/ClippingNode.js +71 -2
  176. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  177. package/src/nodes/accessors/InstanceNode.js +85 -2
  178. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  179. package/src/nodes/accessors/Lights.js +50 -1
  180. package/src/nodes/accessors/MaterialNode.js +306 -12
  181. package/src/nodes/accessors/MaterialProperties.js +7 -0
  182. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  183. package/src/nodes/accessors/ModelNode.js +100 -5
  184. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  185. package/src/nodes/accessors/MorphNode.js +48 -4
  186. package/src/nodes/accessors/Normal.js +65 -5
  187. package/src/nodes/accessors/Object3DNode.js +101 -1
  188. package/src/nodes/accessors/PointUVNode.js +26 -0
  189. package/src/nodes/accessors/Position.js +56 -7
  190. package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
  191. package/src/nodes/accessors/ReferenceNode.js +201 -2
  192. package/src/nodes/accessors/ReflectVector.js +24 -0
  193. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  194. package/src/nodes/accessors/SceneNode.js +54 -0
  195. package/src/nodes/accessors/SkinningNode.js +127 -1
  196. package/src/nodes/accessors/StorageBufferNode.js +209 -8
  197. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  198. package/src/nodes/accessors/Tangent.js +38 -2
  199. package/src/nodes/accessors/Texture3DNode.js +91 -7
  200. package/src/nodes/accessors/TextureBicubic.js +12 -2
  201. package/src/nodes/accessors/TextureNode.js +316 -10
  202. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  203. package/src/nodes/accessors/UV.js +10 -1
  204. package/src/nodes/accessors/UniformArrayNode.js +231 -25
  205. package/src/nodes/accessors/UserDataNode.js +46 -0
  206. package/src/nodes/accessors/VelocityNode.js +80 -0
  207. package/src/nodes/accessors/VertexColorNode.js +39 -2
  208. package/src/nodes/code/CodeNode.js +95 -1
  209. package/src/nodes/code/ExpressionNode.js +28 -0
  210. package/src/nodes/code/FunctionCallNode.js +37 -0
  211. package/src/nodes/code/FunctionNode.js +45 -0
  212. package/src/nodes/code/ScriptableNode.js +223 -1
  213. package/src/nodes/code/ScriptableValueNode.js +85 -1
  214. package/src/nodes/core/ArrayNode.js +125 -0
  215. package/src/nodes/core/AssignNode.js +48 -2
  216. package/src/nodes/core/AttributeNode.js +43 -0
  217. package/src/nodes/core/BypassNode.js +47 -2
  218. package/src/nodes/core/CacheNode.js +53 -2
  219. package/src/nodes/core/ConstNode.js +32 -0
  220. package/src/nodes/core/ContextNode.js +65 -0
  221. package/src/nodes/core/IndexNode.js +68 -7
  222. package/src/nodes/core/InputNode.js +48 -0
  223. package/src/nodes/core/LightingModel.js +60 -0
  224. package/src/nodes/core/MRTNode.js +66 -0
  225. package/src/nodes/core/Node.js +350 -12
  226. package/src/nodes/core/NodeAttribute.js +38 -0
  227. package/src/nodes/core/NodeBuilder.js +1166 -26
  228. package/src/nodes/core/NodeCache.js +41 -2
  229. package/src/nodes/core/NodeCode.js +31 -0
  230. package/src/nodes/core/NodeFrame.js +123 -2
  231. package/src/nodes/core/NodeFunction.js +46 -0
  232. package/src/nodes/core/NodeFunctionInput.js +44 -0
  233. package/src/nodes/core/NodeParser.js +11 -0
  234. package/src/nodes/core/NodeUniform.js +52 -0
  235. package/src/nodes/core/NodeUtils.js +152 -1
  236. package/src/nodes/core/NodeVar.js +47 -1
  237. package/src/nodes/core/NodeVarying.js +28 -0
  238. package/src/nodes/core/OutputStructNode.js +51 -10
  239. package/src/nodes/core/ParameterNode.js +28 -0
  240. package/src/nodes/core/PropertyNode.js +232 -0
  241. package/src/nodes/core/StackNode.js +98 -1
  242. package/src/nodes/core/StructNode.js +121 -0
  243. package/src/nodes/core/StructType.js +13 -0
  244. package/src/nodes/core/StructTypeNode.js +105 -6
  245. package/src/nodes/core/TempNode.js +31 -5
  246. package/src/nodes/core/UniformGroupNode.js +82 -7
  247. package/src/nodes/core/UniformNode.js +66 -0
  248. package/src/nodes/core/VarNode.js +146 -7
  249. package/src/nodes/core/VaryingNode.js +100 -3
  250. package/src/nodes/core/constants.js +36 -0
  251. package/src/nodes/display/BlendModes.js +88 -1
  252. package/src/nodes/display/BumpMapNode.js +37 -0
  253. package/src/nodes/display/ColorAdjustment.js +53 -11
  254. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  255. package/src/nodes/display/ColorSpaceNode.js +82 -0
  256. package/src/nodes/display/FrontFacingNode.js +29 -0
  257. package/src/nodes/display/NormalMapNode.js +43 -0
  258. package/src/nodes/display/PassNode.js +300 -7
  259. package/src/nodes/display/PosterizeNode.js +33 -0
  260. package/src/nodes/display/RenderOutputNode.js +66 -1
  261. package/src/nodes/display/ScreenNode.js +96 -0
  262. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  263. package/src/nodes/display/ToneMappingNode.js +55 -2
  264. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  265. package/src/nodes/display/ViewportDepthNode.js +122 -8
  266. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  267. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  268. package/src/nodes/display/ViewportTextureNode.js +57 -0
  269. package/src/nodes/fog/Fog.js +110 -0
  270. package/src/nodes/functions/BasicLightingModel.js +24 -0
  271. package/src/nodes/functions/PhongLightingModel.js +34 -2
  272. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  273. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  274. package/src/nodes/functions/ToonLightingModel.js +20 -0
  275. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  276. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  277. package/src/nodes/geometry/RangeNode.js +54 -2
  278. package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
  279. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  280. package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
  281. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  282. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  283. package/src/nodes/lighting/AONode.js +18 -0
  284. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  285. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  286. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  287. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  288. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  289. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  290. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  291. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  292. package/src/nodes/lighting/IrradianceNode.js +17 -0
  293. package/src/nodes/lighting/LightProbeNode.js +20 -0
  294. package/src/nodes/lighting/LightUtils.js +12 -0
  295. package/src/nodes/lighting/LightingContextNode.js +48 -0
  296. package/src/nodes/lighting/LightingNode.js +15 -6
  297. package/src/nodes/lighting/LightsNode.js +132 -1
  298. package/src/nodes/lighting/PointLightNode.js +32 -1
  299. package/src/nodes/lighting/PointShadowNode.js +54 -1
  300. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  301. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  302. package/src/nodes/lighting/ShadowNode.js +241 -35
  303. package/src/nodes/lighting/SpotLightNode.js +43 -0
  304. package/src/nodes/math/ConditionalNode.js +78 -4
  305. package/src/nodes/math/Hash.js +9 -0
  306. package/src/nodes/math/MathNode.js +627 -11
  307. package/src/nodes/math/MathUtils.js +45 -1
  308. package/src/nodes/math/OperatorNode.js +329 -18
  309. package/src/nodes/math/TriNoise3D.js +18 -7
  310. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  311. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  312. package/src/nodes/pmrem/PMREMNode.js +133 -0
  313. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  314. package/src/nodes/procedural/Checker.js +9 -0
  315. package/src/nodes/shapes/Shapes.js +33 -0
  316. package/src/nodes/tsl/TSLBase.js +3 -2
  317. package/src/nodes/tsl/TSLCore.js +22 -2
  318. package/src/nodes/utils/ArrayElementNode.js +39 -3
  319. package/src/nodes/utils/ConvertNode.js +31 -0
  320. package/src/nodes/utils/CubeMapNode.js +78 -0
  321. package/src/nodes/utils/Discard.js +16 -0
  322. package/src/nodes/utils/EquirectUVNode.js +31 -1
  323. package/src/nodes/utils/FlipNode.js +38 -0
  324. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  325. package/src/nodes/utils/JoinNode.js +25 -0
  326. package/src/nodes/utils/LoopNode.js +82 -2
  327. package/src/nodes/utils/MatcapUVNode.js +17 -0
  328. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  329. package/src/nodes/utils/MemberNode.js +68 -0
  330. package/src/nodes/utils/Oscillators.js +33 -0
  331. package/src/nodes/utils/Packing.js +17 -0
  332. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  333. package/src/nodes/utils/RTTNode.js +123 -2
  334. package/src/nodes/utils/ReflectorNode.js +174 -4
  335. package/src/nodes/utils/RemapNode.js +79 -0
  336. package/src/nodes/utils/RotateNode.js +41 -0
  337. package/src/nodes/utils/SetNode.js +44 -1
  338. package/src/nodes/utils/SplitNode.js +55 -3
  339. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  340. package/src/nodes/utils/SpriteUtils.js +17 -0
  341. package/src/nodes/utils/StorageArrayElementNode.js +54 -0
  342. package/src/nodes/utils/Timer.js +40 -0
  343. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  344. package/src/nodes/utils/UVUtils.js +20 -0
  345. package/src/nodes/utils/ViewportUtils.js +13 -0
  346. package/src/objects/BatchedMesh.js +2 -3
  347. package/src/objects/ClippingGroup.js +49 -0
  348. package/src/objects/Line.js +6 -6
  349. package/src/renderers/WebGLRenderer.js +30 -4
  350. package/src/renderers/common/Animation.js +85 -0
  351. package/src/renderers/common/Attributes.js +36 -0
  352. package/src/renderers/common/Backend.js +502 -44
  353. package/src/renderers/common/Background.js +48 -1
  354. package/src/renderers/common/BindGroup.js +43 -0
  355. package/src/renderers/common/Binding.js +35 -0
  356. package/src/renderers/common/Bindings.js +93 -1
  357. package/src/renderers/common/Buffer.js +49 -0
  358. package/src/renderers/common/BufferUtils.js +27 -0
  359. package/src/renderers/common/BundleGroup.js +57 -0
  360. package/src/renderers/common/ChainMap.js +45 -6
  361. package/src/renderers/common/ClippingContext.js +108 -15
  362. package/src/renderers/common/Color4.js +40 -0
  363. package/src/renderers/common/ComputePipeline.js +24 -0
  364. package/src/renderers/common/CubeRenderTarget.js +13 -0
  365. package/src/renderers/common/DataMap.js +37 -1
  366. package/src/renderers/common/Geometries.js +91 -14
  367. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  368. package/src/renderers/common/Info.js +78 -35
  369. package/src/renderers/common/Lighting.js +34 -6
  370. package/src/renderers/common/Pipeline.js +22 -0
  371. package/src/renderers/common/Pipelines.js +148 -5
  372. package/src/renderers/common/PostProcessing.js +99 -11
  373. package/src/renderers/common/ProgrammableStage.js +60 -2
  374. package/src/renderers/common/QuadMesh.js +54 -5
  375. package/src/renderers/common/RenderBundle.js +14 -8
  376. package/src/renderers/common/RenderBundles.js +39 -10
  377. package/src/renderers/common/RenderContext.js +201 -2
  378. package/src/renderers/common/RenderContexts.js +59 -6
  379. package/src/renderers/common/RenderList.js +178 -0
  380. package/src/renderers/common/RenderLists.js +40 -3
  381. package/src/renderers/common/RenderObject.js +400 -17
  382. package/src/renderers/common/RenderObjects.js +103 -7
  383. package/src/renderers/common/RenderPipeline.js +24 -0
  384. package/src/renderers/common/Renderer.js +1170 -86
  385. package/src/renderers/common/RendererUtils.js +193 -0
  386. package/src/renderers/common/SampledTexture.js +120 -0
  387. package/src/renderers/common/Sampler.js +30 -0
  388. package/src/renderers/common/StorageBuffer.js +24 -0
  389. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  390. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  391. package/src/renderers/common/StorageTexture.js +38 -0
  392. package/src/renderers/common/Textures.js +97 -7
  393. package/src/renderers/common/TimestampQueryPool.js +39 -0
  394. package/src/renderers/common/Uniform.js +225 -3
  395. package/src/renderers/common/UniformBuffer.js +19 -0
  396. package/src/renderers/common/UniformsGroup.js +141 -2
  397. package/src/renderers/common/XRManager.js +1193 -0
  398. package/src/renderers/common/XRRenderTarget.js +74 -0
  399. package/src/renderers/common/extras/PMREMGenerator.js +76 -10
  400. package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
  401. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  402. package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
  403. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  404. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  405. package/src/renderers/common/nodes/NodeUniform.js +243 -2
  406. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  407. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  408. package/src/renderers/common/nodes/Nodes.js +352 -78
  409. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  410. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  411. package/src/renderers/webgl/WebGLBackground.js +4 -0
  412. package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
  413. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
  414. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
  415. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  416. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  417. package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
  418. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
  419. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
  420. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  421. package/src/renderers/webgpu/WebGPUBackend.js +578 -164
  422. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
  423. package/src/renderers/webgpu/WebGPURenderer.js +36 -0
  424. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  425. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  426. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
  427. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  428. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  429. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
  430. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
  431. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
  432. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
  433. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
  434. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
  435. package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
  436. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  437. package/src/renderers/webxr/WebXRManager.js +19 -2
  438. package/src/textures/Data3DTexture.js +2 -2
  439. package/src/textures/Texture.js +4 -0
  440. package/src/textures/VideoFrameTexture.js +35 -0
  441. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  442. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  443. package/examples/jsm/exporters/MMDExporter.js +0 -223
  444. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
  445. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  446. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  447. package/examples/jsm/objects/InstancedPoints.js +0 -19
  448. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  449. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  450. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  451. package/src/nodes/core/UniformGroup.js +0 -13
  452. package/src/nodes/fog/FogExp2Node.js +0 -35
  453. package/src/nodes/fog/FogNode.js +0 -50
  454. package/src/nodes/fog/FogRangeNode.js +0 -36
  455. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -31,7 +31,7 @@ const getVolumeTransmissionRay = /*@__PURE__*/ Fn( ( [ n, v, thickness, ior, mod
31
31
  // Direction of refracted light.
32
32
  const refractionVector = vec3( refract( v.negate(), normalize( n ), div( 1.0, ior ) ) );
33
33
 
34
- // Compute rotation-independant scaling of the model matrix.
34
+ // Compute rotation-independent scaling of the model matrix.
35
35
  const modelScale = vec3(
36
36
  length( modelMatrix[ 0 ].xyz ),
37
37
  length( modelMatrix[ 1 ].xyz ),
@@ -73,9 +73,9 @@ const viewportFrontSideTexture = /*@__PURE__*/ viewportMipTexture();
73
73
 
74
74
  const getTransmissionSample = /*@__PURE__*/ Fn( ( [ fragCoord, roughness, ior ], { material } ) => {
75
75
 
76
- const vTexture = material.side == BackSide ? viewportBackSideTexture : viewportFrontSideTexture;
76
+ const vTexture = material.side === BackSide ? viewportBackSideTexture : viewportFrontSideTexture;
77
77
 
78
- const transmissionSample = vTexture.uv( fragCoord );
78
+ const transmissionSample = vTexture.sample( fragCoord );
79
79
  //const transmissionSample = viewportMipTexture( fragCoord );
80
80
 
81
81
  const lod = log2( screenSize.x ).mul( applyIorToRoughness( roughness, ior ) );
@@ -311,7 +311,7 @@ const evalIridescence = /*@__PURE__*/ Fn( ( { outsideIOR, eta2, cosTheta1, thinF
311
311
  // Sheen
312
312
  //
313
313
 
314
- // This is a curve-fit approxmation to the "Charlie sheen" BRDF integrated over the hemisphere from
314
+ // This is a curve-fit approximation to the "Charlie sheen" BRDF integrated over the hemisphere from
315
315
  // Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF". The analysis can be found
316
316
  // in the Sheen section of https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
317
317
  const IBLSheenBRDF = /*@__PURE__*/ Fn( ( { normal, viewDir, roughness } ) => {
@@ -341,31 +341,140 @@ const IBLSheenBRDF = /*@__PURE__*/ Fn( ( { normal, viewDir, roughness } ) => {
341
341
  const clearcoatF0 = vec3( 0.04 );
342
342
  const clearcoatF90 = float( 1 );
343
343
 
344
- //
345
344
 
345
+ /**
346
+ * Represents the lighting model for a PBR material.
347
+ *
348
+ * @augments LightingModel
349
+ */
346
350
  class PhysicalLightingModel extends LightingModel {
347
351
 
352
+ /**
353
+ * Constructs a new physical lighting model.
354
+ *
355
+ * @param {Boolean} [clearcoat=false] - Whether clearcoat is supported or not.
356
+ * @param {Boolean} [sheen=false] - Whether sheen is supported or not.
357
+ * @param {Boolean} [iridescence=false] - Whether iridescence is supported or not.
358
+ * @param {Boolean} [anisotropy=false] - Whether anisotropy is supported or not.
359
+ * @param {Boolean} [transmission=false] - Whether transmission is supported or not.
360
+ * @param {Boolean} [dispersion=false] - Whether dispersion is supported or not.
361
+ */
348
362
  constructor( clearcoat = false, sheen = false, iridescence = false, anisotropy = false, transmission = false, dispersion = false ) {
349
363
 
350
364
  super();
351
365
 
366
+ /**
367
+ * Whether clearcoat is supported or not.
368
+ *
369
+ * @type {Boolean}
370
+ * @default false
371
+ */
352
372
  this.clearcoat = clearcoat;
373
+
374
+ /**
375
+ * Whether sheen is supported or not.
376
+ *
377
+ * @type {Boolean}
378
+ * @default false
379
+ */
353
380
  this.sheen = sheen;
381
+
382
+ /**
383
+ * Whether iridescence is supported or not.
384
+ *
385
+ * @type {Boolean}
386
+ * @default false
387
+ */
354
388
  this.iridescence = iridescence;
389
+
390
+ /**
391
+ * Whether anisotropy is supported or not.
392
+ *
393
+ * @type {Boolean}
394
+ * @default false
395
+ */
355
396
  this.anisotropy = anisotropy;
397
+
398
+ /**
399
+ * Whether transmission is supported or not.
400
+ *
401
+ * @type {Boolean}
402
+ * @default false
403
+ */
356
404
  this.transmission = transmission;
405
+
406
+ /**
407
+ * Whether dispersion is supported or not.
408
+ *
409
+ * @type {Boolean}
410
+ * @default false
411
+ */
357
412
  this.dispersion = dispersion;
358
413
 
414
+ /**
415
+ * The clear coat radiance.
416
+ *
417
+ * @type {Node?}
418
+ * @default null
419
+ */
359
420
  this.clearcoatRadiance = null;
421
+
422
+ /**
423
+ * The clear coat specular direct.
424
+ *
425
+ * @type {Node?}
426
+ * @default null
427
+ */
360
428
  this.clearcoatSpecularDirect = null;
429
+
430
+ /**
431
+ * The clear coat specular indirect.
432
+ *
433
+ * @type {Node?}
434
+ * @default null
435
+ */
361
436
  this.clearcoatSpecularIndirect = null;
437
+
438
+ /**
439
+ * The sheen specular direct.
440
+ *
441
+ * @type {Node?}
442
+ * @default null
443
+ */
362
444
  this.sheenSpecularDirect = null;
445
+
446
+ /**
447
+ * The sheen specular indirect.
448
+ *
449
+ * @type {Node?}
450
+ * @default null
451
+ */
363
452
  this.sheenSpecularIndirect = null;
453
+
454
+ /**
455
+ * The iridescence Fresnel.
456
+ *
457
+ * @type {Node?}
458
+ * @default null
459
+ */
364
460
  this.iridescenceFresnel = null;
461
+
462
+ /**
463
+ * The iridescence F0.
464
+ *
465
+ * @type {Node?}
466
+ * @default null
467
+ */
365
468
  this.iridescenceF0 = null;
366
469
 
367
470
  }
368
471
 
472
+ /**
473
+ * Depending on what features are requested, the method prepares certain node variables
474
+ * which are later used for lighting computations.
475
+ *
476
+ * @param {ContextNode} context - The current node context.
477
+ */
369
478
  start( context ) {
370
479
 
371
480
  if ( this.clearcoat === true ) {
@@ -432,7 +541,7 @@ class PhysicalLightingModel extends LightingModel {
432
541
  }
433
542
 
434
543
  // Fdez-Agüera's "Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting"
435
- // Approximates multiscattering in order to preserve energy.
544
+ // Approximates multi-scattering in order to preserve energy.
436
545
  // http://www.jcgt.org/published/0008/01/03/
437
546
 
438
547
  computeMultiscattering( singleScatter, multiScatter, specularF90 ) {
@@ -456,6 +565,13 @@ class PhysicalLightingModel extends LightingModel {
456
565
 
457
566
  }
458
567
 
568
+ /**
569
+ * Implements the direct light.
570
+ *
571
+ * @param {Object} input - The input data.
572
+ * @param {StackNode} stack - The current stack.
573
+ * @param {NodeBuilder} builder - The current node builder.
574
+ */
459
575
  direct( { lightDirection, lightColor, reflectedLight } ) {
460
576
 
461
577
  const dotNL = transformedNormalView.dot( lightDirection ).clamp();
@@ -482,6 +598,14 @@ class PhysicalLightingModel extends LightingModel {
482
598
 
483
599
  }
484
600
 
601
+ /**
602
+ * This method is intended for implementing the direct light term for
603
+ * rect area light nodes.
604
+ *
605
+ * @param {Object} input - The input data.
606
+ * @param {StackNode} stack - The current stack.
607
+ * @param {NodeBuilder} builder - The current node builder.
608
+ */
485
609
  directRectArea( { lightColor, lightPosition, halfWidth, halfHeight, reflectedLight, ltc_1, ltc_2 } ) {
486
610
 
487
611
  const p0 = lightPosition.add( halfWidth ).sub( halfHeight ); // counterclockwise; light shines in local neg z direction
@@ -495,8 +619,8 @@ class PhysicalLightingModel extends LightingModel {
495
619
 
496
620
  const uv = LTC_Uv( { N, V, roughness } );
497
621
 
498
- const t1 = ltc_1.uv( uv ).toVar();
499
- const t2 = ltc_2.uv( uv ).toVar();
622
+ const t1 = ltc_1.sample( uv ).toVar();
623
+ const t2 = ltc_2.sample( uv ).toVar();
500
624
 
501
625
  const mInv = mat3(
502
626
  vec3( t1.x, 0, t1.y ),
@@ -514,6 +638,13 @@ class PhysicalLightingModel extends LightingModel {
514
638
 
515
639
  }
516
640
 
641
+ /**
642
+ * Implements the indirect lighting.
643
+ *
644
+ * @param {ContextNode} context - The current node context.
645
+ * @param {StackNode} stack - The current stack.
646
+ * @param {NodeBuilder} builder - The current node builder.
647
+ */
517
648
  indirect( context, stack, builder ) {
518
649
 
519
650
  this.indirectDiffuse( context, stack, builder );
@@ -522,12 +653,26 @@ class PhysicalLightingModel extends LightingModel {
522
653
 
523
654
  }
524
655
 
656
+ /**
657
+ * Implements the indirect diffuse term.
658
+ *
659
+ * @param {ContextNode} input - The current node context.
660
+ * @param {StackNode} stack - The current stack.
661
+ * @param {NodeBuilder} builder - The current node builder.
662
+ */
525
663
  indirectDiffuse( { irradiance, reflectedLight } ) {
526
664
 
527
665
  reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
528
666
 
529
667
  }
530
668
 
669
+ /**
670
+ * Implements the indirect specular term.
671
+ *
672
+ * @param {ContextNode} input - The current node context.
673
+ * @param {StackNode} stack - The current stack.
674
+ * @param {NodeBuilder} builder - The current node builder.
675
+ */
531
676
  indirectSpecular( { radiance, iblIrradiance, reflectedLight } ) {
532
677
 
533
678
  if ( this.sheen === true ) {
@@ -577,6 +722,13 @@ class PhysicalLightingModel extends LightingModel {
577
722
 
578
723
  }
579
724
 
725
+ /**
726
+ * Implements the ambient occlusion term.
727
+ *
728
+ * @param {ContextNode} input - The current node context.
729
+ * @param {StackNode} stack - The current stack.
730
+ * @param {NodeBuilder} builder - The current node builder.
731
+ */
580
732
  ambientOcclusion( { ambientOcclusion, reflectedLight } ) {
581
733
 
582
734
  const dotNV = transformedNormalView.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV
@@ -603,6 +755,13 @@ class PhysicalLightingModel extends LightingModel {
603
755
 
604
756
  }
605
757
 
758
+ /**
759
+ * Used for final lighting accumulations depending on the requested features.
760
+ *
761
+ * @param {ContextNode} context - The current node context.
762
+ * @param {StackNode} stack - The current stack.
763
+ * @param {NodeBuilder} builder - The current node builder.
764
+ */
606
765
  finish( context ) {
607
766
 
608
767
  const { outgoingLight } = context;
@@ -2,22 +2,45 @@ import LightingModel from '../core/LightingModel.js';
2
2
  import { diffuseColor } from '../core/PropertyNode.js';
3
3
  import { float } from '../tsl/TSLBase.js';
4
4
 
5
+ /**
6
+ * Represents lighting model for a shadow material. Used in {@link ShadowNodeMaterial}.
7
+ *
8
+ * @augments LightingModel
9
+ */
5
10
  class ShadowMaskModel extends LightingModel {
6
11
 
12
+ /**
13
+ * Constructs a new shadow mask model.
14
+ */
7
15
  constructor() {
8
16
 
9
17
  super();
10
18
 
19
+ /**
20
+ * The shadow mask node.
21
+ *
22
+ * @type {Node}
23
+ */
11
24
  this.shadowNode = float( 1 ).toVar( 'shadowMask' );
12
25
 
13
26
  }
14
27
 
28
+ /**
29
+ * Only used to save the shadow mask.
30
+ *
31
+ * @param {Object} input - The input data.
32
+ */
15
33
  direct( { shadowMask } ) {
16
34
 
17
35
  this.shadowNode.mulAssign( shadowMask );
18
36
 
19
37
  }
20
38
 
39
+ /**
40
+ * Uses the shadow mask to produce the final color.
41
+ *
42
+ * @param {ContextNode} context - The current node context.
43
+ */
21
44
  finish( context ) {
22
45
 
23
46
  diffuseColor.a.mulAssign( this.shadowNode.oneMinus() );
@@ -28,8 +28,21 @@ const getGradientIrradiance = /*@__PURE__*/ Fn( ( { normal, lightDirection, buil
28
28
 
29
29
  } );
30
30
 
31
+ /**
32
+ * Represents the lighting model for a toon material. Used in {@link MeshToonNodeMaterial}.
33
+ *
34
+ * @augments LightingModel
35
+ */
31
36
  class ToonLightingModel extends LightingModel {
32
37
 
38
+ /**
39
+ * Implements the direct lighting. Instead of using a conventional smooth irradiance, the irradiance is
40
+ * reduced to a small number of discrete shades to create a comic-like, flat look.
41
+ *
42
+ * @param {Object} input - The input data.
43
+ * @param {StackNode} stack - The current stack.
44
+ * @param {NodeBuilder} builder - The current node builder.
45
+ */
33
46
  direct( { lightDirection, lightColor, reflectedLight }, stack, builder ) {
34
47
 
35
48
  const irradiance = getGradientIrradiance( { normal: normalGeometry, lightDirection, builder } ).mul( lightColor );
@@ -38,6 +51,13 @@ class ToonLightingModel extends LightingModel {
38
51
 
39
52
  }
40
53
 
54
+ /**
55
+ * Implements the indirect lighting.
56
+ *
57
+ * @param {ContextNode} input - The current node context.
58
+ * @param {StackNode} stack - The current stack.
59
+ * @param {NodeBuilder} builder - The current node builder.
60
+ */
41
61
  indirect( { ambientOcclusion, irradiance, reflectedLight } ) {
42
62
 
43
63
  reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
@@ -1,8 +1,6 @@
1
1
  import { abs, add, ceil, clamp, dFdx, dFdy, exp2, float, floor, Fn, fract, length, log2, max, min, mul, sin, sub, vec2, vec3 } from '../../tsl/TSLBase.js';
2
2
 
3
- /**
4
- * See: https://casual-effects.com/research/Wyman2017Hashed/index.html
5
- */
3
+ // See: https://casual-effects.com/research/Wyman2017Hashed/index.html
6
4
 
7
5
  const ALPHA_HASH_SCALE = 0.05; // Derived from trials only, and may be changed.
8
6
 
@@ -1,8 +1,23 @@
1
1
  import { positionWorld } from '../../accessors/Position.js';
2
2
  import { float, Fn, min, normalize, sub, vec3 } from '../../tsl/TSLBase.js';
3
3
 
4
- // https://devlog-martinsh.blogspot.com/2011/09/box-projected-cube-environment-mapping.html
4
+ /** @module getParallaxCorrectNormal **/
5
5
 
6
+ /**
7
+ * This computes a parallax corrected normal which is used for box-projected cube mapping (BPCEM).
8
+ *
9
+ * Reference: {@link https://devlog-martinsh.blogspot.com/2011/09/box-projected-cube-environment-mapping.html}
10
+ *
11
+ * ```js
12
+ * const uvNode = getParallaxCorrectNormal( reflectVector, vec3( 200, 100, 100 ), vec3( 0, - 50, 0 ) );
13
+ * material.envNode = pmremTexture( renderTarget.texture, uvNode );
14
+ * ```
15
+ * @function
16
+ * @param {Node<vec3>} normal - The normal to correct.
17
+ * @param {Node<vec3>} cubeSize - The cube size should reflect the size of the environment (BPCEM is usually applied in closed environments like rooms).
18
+ * @param {Node<vec3>} cubePos - The cube position.
19
+ * @return {Node<vec3>} The parallax corrected normal.
20
+ */
6
21
  const getParallaxCorrectNormal = /*@__PURE__*/ Fn( ( [ normal, cubeSize, cubePos ] ) => {
7
22
 
8
23
  const nDir = normalize( normal ).toVar( 'nDir' );
@@ -9,9 +9,22 @@ import { Vector4 } from '../../math/Vector4.js';
9
9
  import { MathUtils } from '../../math/MathUtils.js';
10
10
  import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
11
11
 
12
+ /** @module RangeNode **/
13
+
12
14
  let min = null;
13
15
  let max = null;
14
16
 
17
+ /**
18
+ * `RangeNode` generates random instanced attribute data in a defined range.
19
+ * An exemplary use case for this utility node is to generate random per-instance
20
+ * colors:
21
+ * ```js
22
+ * const material = new MeshBasicNodeMaterial();
23
+ * material.colorNode = range( new Color( 0x000000 ), new Color( 0xFFFFFF ) );
24
+ * const mesh = new InstancedMesh( geometry, material, count );
25
+ * ```
26
+ * @augments Node
27
+ */
15
28
  class RangeNode extends Node {
16
29
 
17
30
  static get type() {
@@ -20,15 +33,40 @@ class RangeNode extends Node {
20
33
 
21
34
  }
22
35
 
36
+ /**
37
+ * Constructs a new range node.
38
+ *
39
+ * @param {Node<any>} [minNode=float()] - A node defining the lower bound of the range.
40
+ * @param {Node<any>} [maxNode=float()] - A node defining the upper bound of the range.
41
+ */
23
42
  constructor( minNode = float(), maxNode = float() ) {
24
43
 
25
44
  super();
26
45
 
46
+ /**
47
+ * A node defining the lower bound of the range.
48
+ *
49
+ * @type {Node<any>}
50
+ * @default float()
51
+ */
27
52
  this.minNode = minNode;
53
+
54
+ /**
55
+ * A node defining the upper bound of the range.
56
+ *
57
+ * @type {Node<any>}
58
+ * @default float()
59
+ */
28
60
  this.maxNode = maxNode;
29
61
 
30
62
  }
31
63
 
64
+ /**
65
+ * Returns the vector length which is computed based on the range definition.
66
+ *
67
+ * @param {NodeBuilder} builder - The current node builder.
68
+ * @return {Number} The vector length.
69
+ */
32
70
  getVectorLength( builder ) {
33
71
 
34
72
  const minLength = builder.getTypeLength( getValueType( this.minNode.value ) );
@@ -38,6 +76,12 @@ class RangeNode extends Node {
38
76
 
39
77
  }
40
78
 
79
+ /**
80
+ * This method is overwritten since the node type is inferred from range definition.
81
+ *
82
+ * @param {NodeBuilder} builder - The current node builder.
83
+ * @return {String} The node type.
84
+ */
41
85
  getNodeType( builder ) {
42
86
 
43
87
  return builder.object.count > 1 ? builder.getTypeFromLength( this.getVectorLength( builder ) ) : 'float';
@@ -65,11 +109,11 @@ class RangeNode extends Node {
65
109
  max.setScalar( 0 );
66
110
 
67
111
  if ( minLength === 1 ) min.setScalar( minValue );
68
- else if ( minValue.isColor ) min.set( minValue.r, minValue.g, minValue.b );
112
+ else if ( minValue.isColor ) min.set( minValue.r, minValue.g, minValue.b, 1 );
69
113
  else min.set( minValue.x, minValue.y, minValue.z || 0, minValue.w || 0 );
70
114
 
71
115
  if ( maxLength === 1 ) max.setScalar( maxValue );
72
- else if ( maxValue.isColor ) max.set( maxValue.r, maxValue.g, maxValue.b );
116
+ else if ( maxValue.isColor ) max.set( maxValue.r, maxValue.g, maxValue.b, 1 );
73
117
  else max.set( maxValue.x, maxValue.y, maxValue.z || 0, maxValue.w || 0 );
74
118
 
75
119
  const stride = 4;
@@ -118,4 +162,12 @@ class RangeNode extends Node {
118
162
 
119
163
  export default RangeNode;
120
164
 
165
+ /**
166
+ * TSL function for creating a range node.
167
+ *
168
+ * @function
169
+ * @param {Node<any>} [minNode=float()] - A node defining the lower bound of the range.
170
+ * @param {Node<any>} [maxNode=float()] - A node defining the upper bound of the range.
171
+ * @returns {RangeNode}
172
+ */
121
173
  export const range = /*@__PURE__*/ nodeProxy( RangeNode );