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
@@ -4,6 +4,17 @@ import { uniform } from '../core/UniformNode.js';
4
4
  import { nodeObject } from '../tsl/TSLCore.js';
5
5
  import ArrayElementNode from '../utils/ArrayElementNode.js';
6
6
 
7
+ // TODO: Avoid duplicated code and ues only ReferenceBaseNode or ReferenceNode
8
+
9
+ /** @module ReferenceBaseNode **/
10
+
11
+ /**
12
+ * This class is only relevant if the referenced property is array-like.
13
+ * In this case, `ReferenceElementNode` allows to refer to a specific
14
+ * element inside the data structure via an index.
15
+ *
16
+ * @augments ArrayElementNode
17
+ */
7
18
  class ReferenceElementNode extends ArrayElementNode {
8
19
 
9
20
  static get type() {
@@ -12,16 +23,42 @@ class ReferenceElementNode extends ArrayElementNode {
12
23
 
13
24
  }
14
25
 
26
+ /**
27
+ * Constructs a new reference element node.
28
+ *
29
+ * @param {ReferenceBaseNode?} referenceNode - The reference node.
30
+ * @param {Node} indexNode - The index node that defines the element access.
31
+ */
15
32
  constructor( referenceNode, indexNode ) {
16
33
 
17
34
  super( referenceNode, indexNode );
18
35
 
36
+ /**
37
+ * Similar to {@link module:ReferenceBaseNode~ReferenceBaseNode#reference}, an additional
38
+ * property references to the current node.
39
+ *
40
+ * @type {ReferenceBaseNode?}
41
+ * @default null
42
+ */
19
43
  this.referenceNode = referenceNode;
20
44
 
45
+ /**
46
+ * This flag can be used for type testing.
47
+ *
48
+ * @type {Boolean}
49
+ * @readonly
50
+ * @default true
51
+ */
21
52
  this.isReferenceElementNode = true;
22
53
 
23
54
  }
24
55
 
56
+ /**
57
+ * This method is overwritten since the node type is inferred from
58
+ * the uniform type of the reference node.
59
+ *
60
+ * @return {String} The node type.
61
+ */
25
62
  getNodeType() {
26
63
 
27
64
  return this.referenceNode.uniformType;
@@ -40,6 +77,14 @@ class ReferenceElementNode extends ArrayElementNode {
40
77
 
41
78
  }
42
79
 
80
+ /**
81
+ * Base class for nodes which establishes a reference to a property of another object.
82
+ * In this way, the value of the node is automatically linked to the value of
83
+ * referenced object. Reference nodes internally represent the linked value
84
+ * as a uniform.
85
+ *
86
+ * @augments Node
87
+ */
43
88
  class ReferenceBaseNode extends Node {
44
89
 
45
90
  static get type() {
@@ -48,24 +93,97 @@ class ReferenceBaseNode extends Node {
48
93
 
49
94
  }
50
95
 
96
+ /**
97
+ * Constructs a new reference base node.
98
+ *
99
+ * @param {String} property - The name of the property the node refers to.
100
+ * @param {String} uniformType - The uniform type that should be used to represent the property value.
101
+ * @param {Object?} [object=null] - The object the property belongs to.
102
+ * @param {Number?} [count=null] - When the linked property is an array-like, this parameter defines its length.
103
+ */
51
104
  constructor( property, uniformType, object = null, count = null ) {
52
105
 
53
106
  super();
54
107
 
108
+ /**
109
+ * The name of the property the node refers to.
110
+ *
111
+ * @type {String}
112
+ */
55
113
  this.property = property;
114
+
115
+ /**
116
+ * The uniform type that should be used to represent the property value.
117
+ *
118
+ * @type {String}
119
+ */
56
120
  this.uniformType = uniformType;
121
+
122
+ /**
123
+ * The object the property belongs to.
124
+ *
125
+ * @type {Object?}
126
+ * @default null
127
+ */
57
128
  this.object = object;
129
+
130
+ /**
131
+ * When the linked property is an array, this parameter defines its length.
132
+ *
133
+ * @type {Number?}
134
+ * @default null
135
+ */
58
136
  this.count = count;
59
137
 
138
+ /**
139
+ * The property name might have dots so nested properties can be referred.
140
+ * The hierarchy of the names is stored inside this array.
141
+ *
142
+ * @type {Array<String>}
143
+ */
60
144
  this.properties = property.split( '.' );
145
+
146
+ /**
147
+ * Points to the current referred object. This property exists next to {@link module:ReferenceNode~ReferenceNode#object}
148
+ * since the final reference might be updated from calling code.
149
+ *
150
+ * @type {Object?}
151
+ * @default null
152
+ */
61
153
  this.reference = object;
154
+
155
+ /**
156
+ * The uniform node that holds the value of the reference node.
157
+ *
158
+ * @type {UniformNode}
159
+ * @default null
160
+ */
62
161
  this.node = null;
162
+
163
+ /**
164
+ * The uniform group of the internal uniform.
165
+ *
166
+ * @type {UniformGroupNode}
167
+ * @default null
168
+ */
63
169
  this.group = null;
64
170
 
171
+ /**
172
+ * Overwritten since reference nodes are updated per object.
173
+ *
174
+ * @type {String}
175
+ * @default 'object'
176
+ */
65
177
  this.updateType = NodeUpdateType.OBJECT;
66
178
 
67
179
  }
68
180
 
181
+ /**
182
+ * Sets the uniform group for this reference node.
183
+ *
184
+ * @param {UniformGroupNode} group - The uniform group to set.
185
+ * @return {ReferenceBaseNode} A reference to this node.
186
+ */
69
187
  setGroup( group ) {
70
188
 
71
189
  this.group = group;
@@ -74,12 +192,25 @@ class ReferenceBaseNode extends Node {
74
192
 
75
193
  }
76
194
 
195
+ /**
196
+ * When the referred property is array-like, this method can be used
197
+ * to access elements via an index node.
198
+ *
199
+ * @param {IndexNode} indexNode - indexNode.
200
+ * @return {ReferenceElementNode} A reference to an element.
201
+ */
77
202
  element( indexNode ) {
78
203
 
79
204
  return nodeObject( new ReferenceElementNode( this, nodeObject( indexNode ) ) );
80
205
 
81
206
  }
82
207
 
208
+ /**
209
+ * Sets the node type which automatically defines the internal
210
+ * uniform type.
211
+ *
212
+ * @param {String} uniformType - The type to set.
213
+ */
83
214
  setNodeType( uniformType ) {
84
215
 
85
216
  const node = uniform( null, uniformType ).getSelf();
@@ -94,6 +225,13 @@ class ReferenceBaseNode extends Node {
94
225
 
95
226
  }
96
227
 
228
+ /**
229
+ * This method is overwritten since the node type is inferred from
230
+ * the type of the reference node.
231
+ *
232
+ * @param {NodeBuilder} builder - The current node builder.
233
+ * @return {String} The node type.
234
+ */
97
235
  getNodeType( builder ) {
98
236
 
99
237
  if ( this.node === null ) {
@@ -107,6 +245,12 @@ class ReferenceBaseNode extends Node {
107
245
 
108
246
  }
109
247
 
248
+ /**
249
+ * Returns the property value from the given referred object.
250
+ *
251
+ * @param {Object} [object=this.reference] - The object to retrieve the property value from.
252
+ * @return {Any} The value.
253
+ */
110
254
  getValueFromReference( object = this.reference ) {
111
255
 
112
256
  const { properties } = this;
@@ -123,6 +267,13 @@ class ReferenceBaseNode extends Node {
123
267
 
124
268
  }
125
269
 
270
+ /**
271
+ * Allows to update the reference based on the given state. The state is only
272
+ * evaluated {@link module:ReferenceBaseNode~ReferenceBaseNode#object} is not set.
273
+ *
274
+ * @param {(NodeFrame|NodeBuilder)} state - The current state.
275
+ * @return {Object} The updated reference.
276
+ */
126
277
  updateReference( state ) {
127
278
 
128
279
  this.reference = this.object !== null ? this.object : state.object;
@@ -131,6 +282,11 @@ class ReferenceBaseNode extends Node {
131
282
 
132
283
  }
133
284
 
285
+ /**
286
+ * The output of the reference node is the internal uniform node.
287
+ *
288
+ * @return {UniformNode} The output node.
289
+ */
134
290
  setup() {
135
291
 
136
292
  this.updateValue();
@@ -139,12 +295,21 @@ class ReferenceBaseNode extends Node {
139
295
 
140
296
  }
141
297
 
298
+ /**
299
+ * Overwritten to to update the internal uniform value.
300
+ *
301
+ * @param {NodeFrame} frame - A reference to the current node frame.
302
+ */
142
303
  update( /*frame*/ ) {
143
304
 
144
305
  this.updateValue();
145
306
 
146
307
  }
147
308
 
309
+ /**
310
+ * Retrieves the value from the referred object property and uses it
311
+ * to updated the internal uniform.
312
+ */
148
313
  updateValue() {
149
314
 
150
315
  if ( this.node === null ) this.setNodeType( this.uniformType );
@@ -167,5 +332,26 @@ class ReferenceBaseNode extends Node {
167
332
 
168
333
  export default ReferenceBaseNode;
169
334
 
335
+ /**
336
+ * TSL function for creating a reference base node.
337
+ *
338
+ * @function
339
+ * @param {String} name - The name of the property the node refers to.
340
+ * @param {String} type - The uniform type that should be used to represent the property value.
341
+ * @param {Object} object - The object the property belongs to.
342
+ * @returns {ReferenceBaseNode}
343
+ */
170
344
  export const reference = ( name, type, object ) => nodeObject( new ReferenceBaseNode( name, type, object ) );
345
+
346
+ /**
347
+ * TSL function for creating a reference base node. Use this function if you want need a reference
348
+ * to an array-like property that should be represented as a uniform buffer.
349
+ *
350
+ * @function
351
+ * @param {String} name - The name of the property the node refers to.
352
+ * @param {String} type - The uniform type that should be used to represent the property value.
353
+ * @param {Number} count - The number of value inside the array-like object.
354
+ * @param {Object} object - An array-like object the property belongs to.
355
+ * @returns {ReferenceBaseNode}
356
+ */
171
357
  export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceBaseNode( name, type, object, count ) );
@@ -8,6 +8,17 @@ import { nodeObject } from '../tsl/TSLBase.js';
8
8
  import { uniformArray } from './UniformArrayNode.js';
9
9
  import ArrayElementNode from '../utils/ArrayElementNode.js';
10
10
 
11
+ // TODO: Avoid duplicated code and ues only ReferenceBaseNode or ReferenceNode
12
+
13
+ /** @module ReferenceNode **/
14
+
15
+ /**
16
+ * This class is only relevant if the referenced property is array-like.
17
+ * In this case, `ReferenceElementNode` allows to refer to a specific
18
+ * element inside the data structure via an index.
19
+ *
20
+ * @augments ArrayElementNode
21
+ */
11
22
  class ReferenceElementNode extends ArrayElementNode {
12
23
 
13
24
  static get type() {
@@ -16,16 +27,42 @@ class ReferenceElementNode extends ArrayElementNode {
16
27
 
17
28
  }
18
29
 
30
+ /**
31
+ * Constructs a new reference element node.
32
+ *
33
+ * @param {ReferenceNode?} referenceNode - The reference node.
34
+ * @param {Node} indexNode - The index node that defines the element access.
35
+ */
19
36
  constructor( referenceNode, indexNode ) {
20
37
 
21
38
  super( referenceNode, indexNode );
22
39
 
40
+ /**
41
+ * Similar to {@link module:ReferenceNode~ReferenceNode#reference}, an additional
42
+ * property references to the current node.
43
+ *
44
+ * @type {ReferenceNode?}
45
+ * @default null
46
+ */
23
47
  this.referenceNode = referenceNode;
24
48
 
49
+ /**
50
+ * This flag can be used for type testing.
51
+ *
52
+ * @type {Boolean}
53
+ * @readonly
54
+ * @default true
55
+ */
25
56
  this.isReferenceElementNode = true;
26
57
 
27
58
  }
28
59
 
60
+ /**
61
+ * This method is overwritten since the node type is inferred from
62
+ * the uniform type of the reference node.
63
+ *
64
+ * @return {String} The node type.
65
+ */
29
66
  getNodeType() {
30
67
 
31
68
  return this.referenceNode.uniformType;
@@ -44,7 +81,14 @@ class ReferenceElementNode extends ArrayElementNode {
44
81
 
45
82
  }
46
83
 
47
- // TODO: Extends this from ReferenceBaseNode
84
+ /**
85
+ * This type of node establishes a reference to a property of another object.
86
+ * In this way, the value of the node is automatically linked to the value of
87
+ * referenced object. Reference nodes internally represent the linked value
88
+ * as a uniform.
89
+ *
90
+ * @augments Node
91
+ */
48
92
  class ReferenceNode extends Node {
49
93
 
50
94
  static get type() {
@@ -53,31 +97,118 @@ class ReferenceNode extends Node {
53
97
 
54
98
  }
55
99
 
100
+ /**
101
+ * Constructs a new reference node.
102
+ *
103
+ * @param {String} property - The name of the property the node refers to.
104
+ * @param {String} uniformType - The uniform type that should be used to represent the property value.
105
+ * @param {Object?} [object=null] - The object the property belongs to.
106
+ * @param {Number?} [count=null] - When the linked property is an array-like, this parameter defines its length.
107
+ */
56
108
  constructor( property, uniformType, object = null, count = null ) {
57
109
 
58
110
  super();
59
111
 
112
+ /**
113
+ * The name of the property the node refers to.
114
+ *
115
+ * @type {String}
116
+ */
60
117
  this.property = property;
118
+
119
+ /**
120
+ * The uniform type that should be used to represent the property value.
121
+ *
122
+ * @type {String}
123
+ */
61
124
  this.uniformType = uniformType;
125
+
126
+ /**
127
+ * The object the property belongs to.
128
+ *
129
+ * @type {Object?}
130
+ * @default null
131
+ */
62
132
  this.object = object;
133
+
134
+ /**
135
+ * When the linked property is an array, this parameter defines its length.
136
+ *
137
+ * @type {Number?}
138
+ * @default null
139
+ */
63
140
  this.count = count;
64
141
 
142
+ /**
143
+ * The property name might have dots so nested properties can be referred.
144
+ * The hierarchy of the names is stored inside this array.
145
+ *
146
+ * @type {Array<String>}
147
+ */
65
148
  this.properties = property.split( '.' );
149
+
150
+ /**
151
+ * Points to the current referred object. This property exists next to {@link module:ReferenceNode~ReferenceNode#object}
152
+ * since the final reference might be updated from calling code.
153
+ *
154
+ * @type {Object?}
155
+ * @default null
156
+ */
66
157
  this.reference = object;
158
+
159
+ /**
160
+ * The uniform node that holds the value of the reference node.
161
+ *
162
+ * @type {UniformNode}
163
+ * @default null
164
+ */
67
165
  this.node = null;
166
+
167
+ /**
168
+ * The uniform group of the internal uniform.
169
+ *
170
+ * @type {UniformGroupNode}
171
+ * @default null
172
+ */
68
173
  this.group = null;
174
+
175
+ /**
176
+ * An optional label of the internal uniform node.
177
+ *
178
+ * @type {String?}
179
+ * @default null
180
+ */
69
181
  this.name = null;
70
182
 
183
+ /**
184
+ * Overwritten since reference nodes are updated per object.
185
+ *
186
+ * @type {String}
187
+ * @default 'object'
188
+ */
71
189
  this.updateType = NodeUpdateType.OBJECT;
72
190
 
73
191
  }
74
192
 
193
+ /**
194
+ * When the referred property is array-like, this method can be used
195
+ * to access elements via an index node.
196
+ *
197
+ * @param {IndexNode} indexNode - indexNode.
198
+ * @return {ReferenceElementNode} A reference to an element.
199
+ */
75
200
  element( indexNode ) {
76
201
 
77
202
  return nodeObject( new ReferenceElementNode( this, nodeObject( indexNode ) ) );
78
203
 
79
204
  }
80
205
 
206
+ /**
207
+ * Sets the uniform group for this reference node.
208
+ *
209
+ * @param {UniformGroupNode} group - The uniform group to set.
210
+ * @return {ReferenceNode} A reference to this node.
211
+ */
81
212
  setGroup( group ) {
82
213
 
83
214
  this.group = group;
@@ -86,6 +217,12 @@ class ReferenceNode extends Node {
86
217
 
87
218
  }
88
219
 
220
+ /**
221
+ * Sets the label for the internal uniform.
222
+ *
223
+ * @param {String} name - The label to set.
224
+ * @return {ReferenceNode} A reference to this node.
225
+ */
89
226
  label( name ) {
90
227
 
91
228
  this.name = name;
@@ -94,6 +231,12 @@ class ReferenceNode extends Node {
94
231
 
95
232
  }
96
233
 
234
+ /**
235
+ * Sets the node type which automatically defines the internal
236
+ * uniform type.
237
+ *
238
+ * @param {String} uniformType - The type to set.
239
+ */
97
240
  setNodeType( uniformType ) {
98
241
 
99
242
  let node = null;
@@ -132,6 +275,13 @@ class ReferenceNode extends Node {
132
275
 
133
276
  }
134
277
 
278
+ /**
279
+ * This method is overwritten since the node type is inferred from
280
+ * the type of the reference node.
281
+ *
282
+ * @param {NodeBuilder} builder - The current node builder.
283
+ * @return {String} The node type.
284
+ */
135
285
  getNodeType( builder ) {
136
286
 
137
287
  if ( this.node === null ) {
@@ -145,6 +295,12 @@ class ReferenceNode extends Node {
145
295
 
146
296
  }
147
297
 
298
+ /**
299
+ * Returns the property value from the given referred object.
300
+ *
301
+ * @param {Object} [object=this.reference] - The object to retrieve the property value from.
302
+ * @return {Any} The value.
303
+ */
148
304
  getValueFromReference( object = this.reference ) {
149
305
 
150
306
  const { properties } = this;
@@ -161,6 +317,13 @@ class ReferenceNode extends Node {
161
317
 
162
318
  }
163
319
 
320
+ /**
321
+ * Allows to update the reference based on the given state. The state is only
322
+ * evaluated {@link module:ReferenceNode~ReferenceNode#object} is not set.
323
+ *
324
+ * @param {(NodeFrame|NodeBuilder)} state - The current state.
325
+ * @return {Object} The updated reference.
326
+ */
164
327
  updateReference( state ) {
165
328
 
166
329
  this.reference = this.object !== null ? this.object : state.object;
@@ -169,7 +332,13 @@ class ReferenceNode extends Node {
169
332
 
170
333
  }
171
334
 
172
- setup() {
335
+ /**
336
+ * The output of the reference node is the internal uniform node.
337
+ *
338
+ * @param {NodeBuilder} builder - The current node builder.
339
+ * @return {UniformNode} The output node.
340
+ */
341
+ setup( /* builder */ ) {
173
342
 
174
343
  this.updateValue();
175
344
 
@@ -177,12 +346,21 @@ class ReferenceNode extends Node {
177
346
 
178
347
  }
179
348
 
349
+ /**
350
+ * Overwritten to to update the internal uniform value.
351
+ *
352
+ * @param {NodeFrame} frame - A reference to the current node frame.
353
+ */
180
354
  update( /*frame*/ ) {
181
355
 
182
356
  this.updateValue();
183
357
 
184
358
  }
185
359
 
360
+ /**
361
+ * Retrieves the value from the referred object property and uses it
362
+ * to updated the internal uniform.
363
+ */
186
364
  updateValue() {
187
365
 
188
366
  if ( this.node === null ) this.setNodeType( this.uniformType );
@@ -205,5 +383,26 @@ class ReferenceNode extends Node {
205
383
 
206
384
  export default ReferenceNode;
207
385
 
386
+ /**
387
+ * TSL function for creating a reference node.
388
+ *
389
+ * @function
390
+ * @param {String} name - The name of the property the node refers to.
391
+ * @param {String} type - The uniform type that should be used to represent the property value.
392
+ * @param {Object} object - The object the property belongs to.
393
+ * @returns {ReferenceNode}
394
+ */
208
395
  export const reference = ( name, type, object ) => nodeObject( new ReferenceNode( name, type, object ) );
396
+
397
+ /**
398
+ * TSL function for creating a reference node. Use this function if you want need a reference
399
+ * to an array-like property that should be represented as a uniform buffer.
400
+ *
401
+ * @function
402
+ * @param {String} name - The name of the property the node refers to.
403
+ * @param {String} type - The uniform type that should be used to represent the property value.
404
+ * @param {Number} count - The number of value inside the array-like object.
405
+ * @param {Object} object - An array-like object the property belongs to.
406
+ * @returns {ReferenceNode}
407
+ */
209
408
  export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceNode( name, type, object, count ) );
@@ -3,8 +3,32 @@ import { transformedNormalView } from './Normal.js';
3
3
  import { positionViewDirection } from './Position.js';
4
4
  import { materialRefractionRatio } from './MaterialProperties.js';
5
5
 
6
+ /** @module ReflectVector **/
7
+
8
+ /**
9
+ * The reflect vector in view space.
10
+ *
11
+ * @type {Node<vec3>}
12
+ */
6
13
  export const reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect( transformedNormalView );
14
+
15
+ /**
16
+ * The refract vector in view space.
17
+ *
18
+ * @type {Node<vec3>}
19
+ */
7
20
  export const refractView = /*@__PURE__*/ positionViewDirection.negate().refract( transformedNormalView, materialRefractionRatio );
8
21
 
22
+ /**
23
+ * Used for sampling cube maps when using cube reflection mapping.
24
+ *
25
+ * @type {Node<vec3>}
26
+ */
9
27
  export const reflectVector = /*@__PURE__*/ reflectView.transformDirection( cameraViewMatrix ).toVar( 'reflectVector' );
28
+
29
+ /**
30
+ * Used for sampling cube maps when using cube refraction mapping.
31
+ *
32
+ * @type {Node<vec3>}
33
+ */
10
34
  export const refractVector = /*@__PURE__*/ refractView.transformDirection( cameraViewMatrix ).toVar( 'reflectVector' );