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
@@ -6,6 +6,16 @@ import { Matrix4 } from '../../math/Matrix4.js';
6
6
  import { cameraViewMatrix } from './Camera.js';
7
7
  import { Matrix3 } from '../../math/Matrix3.js';
8
8
 
9
+ /** @module ModelNode **/
10
+
11
+ /**
12
+ * This type of node is a specialized version of `Object3DNode`
13
+ * with larger set of model related metrics. Unlike `Object3DNode`,
14
+ * `ModelNode` extracts the reference to the 3D object from the
15
+ * current node frame state.
16
+ *
17
+ * @augments module:Object3DNode~Object3DNode
18
+ */
9
19
  class ModelNode extends Object3DNode {
10
20
 
11
21
  static get type() {
@@ -14,12 +24,23 @@ class ModelNode extends Object3DNode {
14
24
 
15
25
  }
16
26
 
27
+ /**
28
+ * Constructs a new object model node.
29
+ *
30
+ * @param {('position'|'viewPosition'|'direction'|'scale'|'worldMatrix')} scope - The node represents a different type of transformation depending on the scope.
31
+ */
17
32
  constructor( scope ) {
18
33
 
19
34
  super( scope );
20
35
 
21
36
  }
22
37
 
38
+ /**
39
+ * Extracts the model reference from the frame state and then
40
+ * updates the uniform value depending on the scope.
41
+ *
42
+ * @param {NodeFrame} frame - The current node frame.
43
+ */
23
44
  update( frame ) {
24
45
 
25
46
  this.object3d = frame.object;
@@ -32,16 +53,84 @@ class ModelNode extends Object3DNode {
32
53
 
33
54
  export default ModelNode;
34
55
 
56
+ /**
57
+ * TSL object that represents the object's direction in world space.
58
+ *
59
+ * @type {ModelNode<vec3>}
60
+ */
35
61
  export const modelDirection = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.DIRECTION );
62
+
63
+ /**
64
+ * TSL object that represents the object's world matrix.
65
+ *
66
+ * @type {ModelNode<mat4>}
67
+ */
36
68
  export const modelWorldMatrix = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX );
69
+
70
+ /**
71
+ * TSL object that represents the object's position in world space.
72
+ *
73
+ * @type {ModelNode<vec3>}
74
+ */
37
75
  export const modelPosition = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.POSITION );
76
+
77
+ /**
78
+ * TSL object that represents the object's scale in world space.
79
+ *
80
+ * @type {ModelNode<vec3>}
81
+ */
38
82
  export const modelScale = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.SCALE );
83
+
84
+ /**
85
+ * TSL object that represents the object's position in view/camera space.
86
+ *
87
+ * @type {ModelNode<vec3>}
88
+ */
39
89
  export const modelViewPosition = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.VIEW_POSITION );
90
+
91
+ /**
92
+ * TSL object that represents the object's normal matrix.
93
+ *
94
+ * @type {UniformNode<mat3>}
95
+ */
40
96
  export const modelNormalMatrix = /*@__PURE__*/ uniform( new Matrix3() ).onObjectUpdate( ( { object }, self ) => self.value.getNormalMatrix( object.matrixWorld ) );
97
+
98
+ /**
99
+ * TSL object that represents the object's inverse world matrix.
100
+ *
101
+ * @type {UniformNode<mat4>}
102
+ */
41
103
  export const modelWorldMatrixInverse = /*@__PURE__*/ uniform( new Matrix4() ).onObjectUpdate( ( { object }, self ) => self.value.copy( object.matrixWorld ).invert() );
42
- export const modelViewMatrix = /*@__PURE__*/ cameraViewMatrix.mul( modelWorldMatrix ).toVar( 'modelViewMatrix' );
43
104
 
44
- export const highPrecisionModelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
105
+ /**
106
+ * TSL object that represents the object's model view matrix.
107
+ *
108
+ * @type {Node<mat4>}
109
+ */
110
+ export const modelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
111
+
112
+ return builder.renderer.nodes.modelViewMatrix || mediumpModelViewMatrix;
113
+
114
+ } ).once() )().toVar( 'modelViewMatrix' );
115
+
116
+ // GPU Precision
117
+
118
+ /**
119
+ * TSL object that represents the object's model view in `mediump` precision.
120
+ *
121
+ * @type {Node<mat4>}
122
+ */
123
+ export const mediumpModelViewMatrix = /*@__PURE__*/ cameraViewMatrix.mul( modelWorldMatrix );
124
+
125
+ // CPU Precision
126
+
127
+ /**
128
+ * TSL object that represents the object's model view in `highp` precision
129
+ * which is achieved by computing the matrix in JS and not in the shader.
130
+ *
131
+ * @type {Node<mat4>}
132
+ */
133
+ export const highpModelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
45
134
 
46
135
  builder.context.isHighPrecisionModelViewMatrix = true;
47
136
 
@@ -51,9 +140,15 @@ export const highPrecisionModelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
51
140
 
52
141
  } );
53
142
 
54
- } ).once() )().toVar( 'highPrecisionModelViewMatrix' );
143
+ } ).once() )().toVar( 'highpModelViewMatrix' );
55
144
 
56
- export const highPrecisionModelNormalViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
145
+ /**
146
+ * TSL object that represents the object's model normal view in `highp` precision
147
+ * which is achieved by computing the matrix in JS and not in the shader.
148
+ *
149
+ * @type {Node<mat3>}
150
+ */
151
+ export const highpModelNormalViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
57
152
 
58
153
  const isHighPrecisionModelViewMatrix = builder.context.isHighPrecisionModelViewMatrix;
59
154
 
@@ -69,4 +164,4 @@ export const highPrecisionModelNormalViewMatrix = /*@__PURE__*/ ( Fn( ( builder
69
164
 
70
165
  } );
71
166
 
72
- } ).once() )().toVar( 'highPrecisionModelNormalMatrix' );
167
+ } ).once() )().toVar( 'highpModelNormalViewMatrix' );
@@ -1,42 +1,14 @@
1
- import TempNode from '../core/TempNode.js';
2
- import { cameraProjectionMatrix } from './Camera.js';
3
- import { positionLocal } from './Position.js';
4
- import { nodeProxy, varying } from '../tsl/TSLBase.js';
5
- import { modelViewMatrix } from './ModelNode.js';
1
+ import { Fn } from '../tsl/TSLCore.js';
6
2
 
7
- class ModelViewProjectionNode extends TempNode {
3
+ /** @module ModelViewProjectionNode **/
8
4
 
9
- static get type() {
5
+ /**
6
+ * TSL object that represents the position in clip space after the model-view-projection transform of the current rendered object.
7
+ *
8
+ * @type {VaryingNode<vec4>}
9
+ */
10
+ export const modelViewProjection = /*@__PURE__*/ ( Fn( ( builder ) => {
10
11
 
11
- return 'ModelViewProjectionNode';
12
+ return builder.context.setupModelViewProjection();
12
13
 
13
- }
14
-
15
- constructor( positionNode = null ) {
16
-
17
- super( 'vec4' );
18
-
19
- this.positionNode = positionNode;
20
-
21
- }
22
-
23
- setup( builder ) {
24
-
25
- if ( builder.shaderStage === 'fragment' ) {
26
-
27
- return varying( builder.context.mvp );
28
-
29
- }
30
-
31
- const position = this.positionNode || positionLocal;
32
- const viewMatrix = builder.renderer.nodes.modelViewMatrix || modelViewMatrix;
33
-
34
- return cameraProjectionMatrix.mul( viewMatrix ).mul( position );
35
-
36
- }
37
-
38
- }
39
-
40
- export default ModelViewProjectionNode;
41
-
42
- export const modelViewProjection = /*@__PURE__*/ nodeProxy( ModelViewProjectionNode );
14
+ }, 'vec4' ).once() )().toVarying( 'v_modelViewProjection' );
@@ -1,13 +1,12 @@
1
1
  import Node from '../core/Node.js';
2
2
  import { NodeUpdateType } from '../core/constants.js';
3
- import { float, nodeProxy, Fn } from '../tsl/TSLBase.js';
3
+ import { float, nodeProxy, Fn, ivec2, int } from '../tsl/TSLBase.js';
4
4
  import { uniform } from '../core/UniformNode.js';
5
5
  import { reference } from './ReferenceNode.js';
6
6
  import { positionLocal } from './Position.js';
7
7
  import { normalLocal } from './Normal.js';
8
8
  import { textureLoad } from './TextureNode.js';
9
9
  import { instanceIndex, vertexIndex } from '../core/IndexNode.js';
10
- import { ivec2, int } from '../tsl/TSLBase.js';
11
10
  import { Loop } from '../utils/LoopNode.js';
12
11
 
13
12
  import { DataArrayTexture } from '../../textures/DataArrayTexture.js';
@@ -15,6 +14,8 @@ import { Vector2 } from '../../math/Vector2.js';
15
14
  import { Vector4 } from '../../math/Vector4.js';
16
15
  import { FloatType } from '../../constants.js';
17
16
 
17
+ /** @module MorphNode **/
18
+
18
19
  const _morphTextures = /*@__PURE__*/ new WeakMap();
19
20
  const _morphVec4 = /*@__PURE__*/ new Vector4();
20
21
 
@@ -157,7 +158,12 @@ function getEntry( geometry ) {
157
158
 
158
159
  }
159
160
 
160
-
161
+ /**
162
+ * This node implements the vertex transformation shader logic which is required
163
+ * for morph target animation.
164
+ *
165
+ * @augments Node
166
+ */
161
167
  class MorphNode extends Node {
162
168
 
163
169
  static get type() {
@@ -166,17 +172,43 @@ class MorphNode extends Node {
166
172
 
167
173
  }
168
174
 
175
+ /**
176
+ * Constructs a new morph node.
177
+ *
178
+ * @param {Mesh} mesh - The mesh holding the morph targets.
179
+ */
169
180
  constructor( mesh ) {
170
181
 
171
182
  super( 'void' );
172
183
 
184
+ /**
185
+ * The mesh holding the morph targets.
186
+ *
187
+ * @type {Mesh}
188
+ */
173
189
  this.mesh = mesh;
190
+
191
+ /**
192
+ * A uniform node which represents the morph base influence value.
193
+ *
194
+ * @type {UniformNode<float>}
195
+ */
174
196
  this.morphBaseInfluence = uniform( 1 );
175
197
 
198
+ /**
199
+ * The update type overwritten since morph nodes are updated per object.
200
+ *
201
+ * @type {String}
202
+ */
176
203
  this.updateType = NodeUpdateType.OBJECT;
177
204
 
178
205
  }
179
206
 
207
+ /**
208
+ * Setups the morph node by assigning the transformed vertex data to predefined node variables.
209
+ *
210
+ * @param {NodeBuilder} builder - The current node builder.
211
+ */
180
212
  setup( builder ) {
181
213
 
182
214
  const { geometry } = builder;
@@ -240,7 +272,12 @@ class MorphNode extends Node {
240
272
 
241
273
  }
242
274
 
243
- update() {
275
+ /**
276
+ * Updates the state of the morphed mesh by updating the base influence.
277
+ *
278
+ * @param {NodeFrame} frame - The current node frame.
279
+ */
280
+ update( /*frame*/ ) {
244
281
 
245
282
  const morphBaseInfluence = this.morphBaseInfluence;
246
283
 
@@ -260,4 +297,11 @@ class MorphNode extends Node {
260
297
 
261
298
  export default MorphNode;
262
299
 
300
+ /**
301
+ * TSL function for creating a morph node.
302
+ *
303
+ * @function
304
+ * @param {Mesh} mesh - The mesh holding the morph targets.
305
+ * @returns {MorphNode}
306
+ */
263
307
  export const morphReference = /*@__PURE__*/ nodeProxy( MorphNode );
@@ -1,13 +1,24 @@
1
1
  import { attribute } from '../core/AttributeNode.js';
2
2
  import { cameraViewMatrix } from './Camera.js';
3
3
  import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js';
4
- import { mat3, vec3 } from '../tsl/TSLBase.js';
4
+ import { mat3, vec3, Fn, varying } from '../tsl/TSLBase.js';
5
5
  import { positionView } from './Position.js';
6
- import { Fn, varying } from '../tsl/TSLBase.js';
7
6
  import { faceDirection } from '../display/FrontFacingNode.js';
8
7
 
8
+ /** @module Normal **/
9
+
10
+ /**
11
+ * TSL object that represents the normal attribute of the current rendered object.
12
+ *
13
+ * @type {Node<vec3>}
14
+ */
9
15
  export const normalGeometry = /*@__PURE__*/ attribute( 'normal', 'vec3' );
10
16
 
17
+ /**
18
+ * TSL object that represents the vertex normal in local space of the current rendered object.
19
+ *
20
+ * @type {Node<vec3>}
21
+ */
11
22
  export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
12
23
 
13
24
  if ( builder.geometry.hasAttribute( 'normal' ) === false ) {
@@ -22,8 +33,18 @@ export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
22
33
 
23
34
  }, 'vec3' ).once() )().toVar( 'normalLocal' );
24
35
 
36
+ /**
37
+ * TSL object that represents the flat vertex normal in view space of the current rendered object.
38
+ *
39
+ * @type {Node<vec3>}
40
+ */
25
41
  export const normalFlat = /*@__PURE__*/ positionView.dFdx().cross( positionView.dFdy() ).normalize().toVar( 'normalFlat' );
26
42
 
43
+ /**
44
+ * TSL object that represents the vertex normal in view space of the current rendered object.
45
+ *
46
+ * @type {Node<vec3>}
47
+ */
27
48
  export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
28
49
 
29
50
  let node;
@@ -42,23 +63,54 @@ export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
42
63
 
43
64
  }, 'vec3' ).once() )().toVar( 'normalView' );
44
65
 
66
+ /**
67
+ * TSL object that represents the vertex normal in world space of the current rendered object.
68
+ *
69
+ * @type {Node<vec3>}
70
+ */
45
71
  export const normalWorld = /*@__PURE__*/ varying( normalView.transformDirection( cameraViewMatrix ), 'v_normalWorld' ).normalize().toVar( 'normalWorld' );
46
72
 
73
+ /**
74
+ * TSL object that represents the transformed vertex normal in view space of the current rendered object.
75
+ *
76
+ * @type {Node<vec3>}
77
+ */
47
78
  export const transformedNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
48
79
 
49
- return builder.context.setupNormal();
80
+ // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
50
81
 
51
- }, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedNormalView' );
82
+ return builder.context.setupNormal().context( { getUV: null } );
52
83
 
84
+ }, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedNormalView' );
53
85
 
86
+ /**
87
+ * TSL object that represents the transformed vertex normal in world space of the current rendered object.
88
+ *
89
+ * @type {Node<vec3>}
90
+ */
54
91
  export const transformedNormalWorld = /*@__PURE__*/ transformedNormalView.transformDirection( cameraViewMatrix ).toVar( 'transformedNormalWorld' );
55
92
 
93
+ /**
94
+ * TSL object that represents the transformed clearcoat vertex normal in view space of the current rendered object.
95
+ *
96
+ * @type {Node<vec3>}
97
+ */
56
98
  export const transformedClearcoatNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
57
99
 
58
- return builder.context.setupClearcoatNormal();
100
+ // Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
101
+
102
+ return builder.context.setupClearcoatNormal().context( { getUV: null } );
59
103
 
60
104
  }, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedClearcoatNormalView' );
61
105
 
106
+ /**
107
+ * Transforms the normal with the given matrix.
108
+ *
109
+ * @function
110
+ * @param {Node<vec3>} normal - The normal.
111
+ * @param {Node<mat3>} [matrix=modelWorldMatrix] - The matrix.
112
+ * @return {Node<vec3>} The transformed normal.
113
+ */
62
114
  export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorldMatrix ] ) => {
63
115
 
64
116
  const m = mat3( matrix );
@@ -69,6 +121,14 @@ export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorld
69
121
 
70
122
  } );
71
123
 
124
+ /**
125
+ * Transforms the given normal from local to view space.
126
+ *
127
+ * @function
128
+ * @param {Node<vec3>} normal - The normal.
129
+ * @param {NodeBuilder} builder - The current node builder.
130
+ * @return {Node<vec3>} The transformed normal.
131
+ */
72
132
  export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) => {
73
133
 
74
134
  const modelNormalViewMatrix = builder.renderer.nodes.modelNormalViewMatrix;
@@ -2,9 +2,23 @@ import Node from '../core/Node.js';
2
2
  import { NodeUpdateType } from '../core/constants.js';
3
3
  import UniformNode from '../core/UniformNode.js';
4
4
  import { nodeProxy } from '../tsl/TSLBase.js';
5
-
6
5
  import { Vector3 } from '../../math/Vector3.js';
7
6
 
7
+ /** @module Object3DNode **/
8
+
9
+ /**
10
+ * This node can be used to access transformation related metrics of 3D objects.
11
+ * Depending on the selected scope, a different metric is represented as a uniform
12
+ * in the shader. The following scopes are supported:
13
+ *
14
+ * - `POSITION`: The object's position in world space.
15
+ * - `VIEW_POSITION`: The object's position in view/camera space.
16
+ * - `DIRECTION`: The object's direction in world space.
17
+ * - `SCALE`: The object's scale in world space.
18
+ * - `WORLD_MATRIX`: The object's matrix in world space.
19
+ *
20
+ * @augments Node
21
+ */
8
22
  class Object3DNode extends Node {
9
23
 
10
24
  static get type() {
@@ -13,19 +27,54 @@ class Object3DNode extends Node {
13
27
 
14
28
  }
15
29
 
30
+ /**
31
+ * Constructs a new object 3D node.
32
+ *
33
+ * @param {('position'|'viewPosition'|'direction'|'scale'|'worldMatrix')} scope - The node represents a different type of transformation depending on the scope.
34
+ * @param {Object3D?} [object3d=null] - The 3D object.
35
+ */
16
36
  constructor( scope, object3d = null ) {
17
37
 
18
38
  super();
19
39
 
40
+ /**
41
+ * The node reports a different type of transformation depending on the scope.
42
+ *
43
+ * @type {('position'|'viewPosition'|'direction'|'scale'|'worldMatrix')}
44
+ */
20
45
  this.scope = scope;
46
+
47
+ /**
48
+ * The 3D object.
49
+ *
50
+ * @type {Object3D?}
51
+ * @default null
52
+ */
21
53
  this.object3d = object3d;
22
54
 
55
+ /**
56
+ * Overwritten since this type of node is updated per object.
57
+ *
58
+ * @type {String}
59
+ * @default 'object'
60
+ */
23
61
  this.updateType = NodeUpdateType.OBJECT;
24
62
 
63
+ /**
64
+ * Holds the value of the node as a uniform.
65
+ *
66
+ * @private
67
+ * @type {UniformNode}
68
+ */
25
69
  this._uniformNode = new UniformNode( null );
26
70
 
27
71
  }
28
72
 
73
+ /**
74
+ * Overwritten since the node type is inferred from the scope.
75
+ *
76
+ * @return {String} The node type.
77
+ */
29
78
  getNodeType() {
30
79
 
31
80
  const scope = this.scope;
@@ -42,6 +91,11 @@ class Object3DNode extends Node {
42
91
 
43
92
  }
44
93
 
94
+ /**
95
+ * Updates the uniform value depending on the scope.
96
+ *
97
+ * @param {NodeFrame} frame - The current node frame.
98
+ */
45
99
  update( frame ) {
46
100
 
47
101
  const object = this.object3d;
@@ -83,6 +137,13 @@ class Object3DNode extends Node {
83
137
 
84
138
  }
85
139
 
140
+ /**
141
+ * Generates the code snippet of the uniform node. The node type of the uniform
142
+ * node also depends on the selected scope.
143
+ *
144
+ * @param {NodeBuilder} builder - The current node builder.
145
+ * @return {String} The generated code snippet.
146
+ */
86
147
  generate( builder ) {
87
148
 
88
149
  const scope = this.scope;
@@ -127,8 +188,47 @@ Object3DNode.DIRECTION = 'direction';
127
188
 
128
189
  export default Object3DNode;
129
190
 
191
+ /**
192
+ * TSL function for creating an object 3D node that represents the object's direction in world space.
193
+ *
194
+ * @function
195
+ * @param {Object3D?} [object3d=null] - The 3D object.
196
+ * @returns {Object3DNode<vec3>}
197
+ */
130
198
  export const objectDirection = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.DIRECTION );
199
+
200
+ /**
201
+ * TSL function for creating an object 3D node that represents the object's world matrix.
202
+ *
203
+ * @function
204
+ * @param {Object3D?} [object3d=null] - The 3D object.
205
+ * @returns {Object3DNode<mat4>}
206
+ */
131
207
  export const objectWorldMatrix = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.WORLD_MATRIX );
208
+
209
+ /**
210
+ * TSL function for creating an object 3D node that represents the object's position in world space.
211
+ *
212
+ * @function
213
+ * @param {Object3D?} [object3d=null] - The 3D object.
214
+ * @returns {Object3DNode<vec3>}
215
+ */
132
216
  export const objectPosition = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.POSITION );
217
+
218
+ /**
219
+ * TSL function for creating an object 3D node that represents the object's scale in world space.
220
+ *
221
+ * @function
222
+ * @param {Object3D?} [object3d=null] - The 3D object.
223
+ * @returns {Object3DNode<vec3>}
224
+ */
133
225
  export const objectScale = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.SCALE );
226
+
227
+ /**
228
+ * TSL function for creating an object 3D node that represents the object's position in view/camera space.
229
+ *
230
+ * @function
231
+ * @param {Object3D?} [object3d=null] - The 3D object.
232
+ * @returns {Object3DNode<vec3>}
233
+ */
134
234
  export const objectViewPosition = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.VIEW_POSITION );
@@ -1,6 +1,17 @@
1
1
  import Node from '../core/Node.js';
2
2
  import { nodeImmutable } from '../tsl/TSLBase.js';
3
3
 
4
+ /** @module PointUVNode **/
5
+
6
+ /**
7
+ * A node for representing the uv coordinates of points.
8
+ *
9
+ * Can only be used with a WebGL backend. In WebGPU, point
10
+ * primitives always have the size of one pixel and can thus
11
+ * can't be used as sprite-like objects that display textures.
12
+ *
13
+ * @augments Node
14
+ */
4
15
  class PointUVNode extends Node {
5
16
 
6
17
  static get type() {
@@ -9,10 +20,20 @@ class PointUVNode extends Node {
9
20
 
10
21
  }
11
22
 
23
+ /**
24
+ * Constructs a new point uv node.
25
+ */
12
26
  constructor() {
13
27
 
14
28
  super( 'vec2' );
15
29
 
30
+ /**
31
+ * This flag can be used for type testing.
32
+ *
33
+ * @type {Boolean}
34
+ * @readonly
35
+ * @default true
36
+ */
16
37
  this.isPointUVNode = true;
17
38
 
18
39
  }
@@ -27,4 +48,9 @@ class PointUVNode extends Node {
27
48
 
28
49
  export default PointUVNode;
29
50
 
51
+ /**
52
+ * TSL object that represents the uv coordinates of points.
53
+ *
54
+ * @type {PointUVNode}
55
+ */
30
56
  export const pointUV = /*@__PURE__*/ nodeImmutable( PointUVNode );
@@ -1,10 +1,59 @@
1
1
  import { attribute } from '../core/AttributeNode.js';
2
- import { modelWorldMatrix, modelViewMatrix } from './ModelNode.js';
2
+ import { Fn } from '../tsl/TSLCore.js';
3
+ import { modelWorldMatrix } from './ModelNode.js';
3
4
 
5
+ /** @module Position **/
6
+
7
+ /**
8
+ * TSL object that represents the position attribute of the current rendered object.
9
+ *
10
+ * @type {AttributeNode<vec3>}
11
+ */
4
12
  export const positionGeometry = /*@__PURE__*/ attribute( 'position', 'vec3' );
5
- export const positionLocal = /*@__PURE__*/ positionGeometry.varying( 'positionLocal' );
6
- export const positionPrevious = /*@__PURE__*/ positionGeometry.varying( 'positionPrevious' );
7
- export const positionWorld = /*@__PURE__*/ modelWorldMatrix.mul( positionLocal ).xyz.varying( 'v_positionWorld' );
8
- export const positionWorldDirection = /*@__PURE__*/ positionLocal.transformDirection( modelWorldMatrix ).varying( 'v_positionWorldDirection' ).normalize().toVar( 'positionWorldDirection' );
9
- export const positionView = /*@__PURE__*/ modelViewMatrix.mul( positionLocal ).xyz.varying( 'v_positionView' );
10
- export const positionViewDirection = /*@__PURE__*/ positionView.negate().varying( 'v_positionViewDirection' ).normalize().toVar( 'positionViewDirection' );
13
+
14
+ /**
15
+ * TSL object that represents the vertex position in local space of the current rendered object.
16
+ *
17
+ * @type {AttributeNode<vec3>}
18
+ */
19
+ export const positionLocal = /*@__PURE__*/ positionGeometry.toVarying( 'positionLocal' );
20
+
21
+ /**
22
+ * TSL object that represents the previous vertex position in local space of the current rendered object.
23
+ * Used in context of {@link module:VelocityNode~VelocityNode} for rendering motion vectors.
24
+ *
25
+ * @type {AttributeNode<vec3>}
26
+ */
27
+ export const positionPrevious = /*@__PURE__*/ positionGeometry.toVarying( 'positionPrevious' );
28
+
29
+ /**
30
+ * TSL object that represents the vertex position in world space of the current rendered object.
31
+ *
32
+ * @type {VaryingNode<vec3>}
33
+ */
34
+ export const positionWorld = /*@__PURE__*/ modelWorldMatrix.mul( positionLocal ).xyz.toVarying( 'v_positionWorld' ).context( { needsPositionReassign: true } );
35
+
36
+ /**
37
+ * TSL object that represents the position world direction of the current rendered object.
38
+ *
39
+ * @type {Node<vec3>}
40
+ */
41
+ export const positionWorldDirection = /*@__PURE__*/ positionLocal.transformDirection( modelWorldMatrix ).toVarying( 'v_positionWorldDirection' ).normalize().toVar( 'positionWorldDirection' ).context( { needsPositionReassign: true } );
42
+
43
+ /**
44
+ * TSL object that represents the vertex position in view space of the current rendered object.
45
+ *
46
+ * @type {VaryingNode<vec3>}
47
+ */
48
+ export const positionView = /*@__PURE__*/ ( Fn( ( builder ) => {
49
+
50
+ return builder.context.setupPositionView();
51
+
52
+ }, 'vec3' ).once() )().toVarying( 'v_positionView' ).context( { needsPositionReassign: true } );
53
+
54
+ /**
55
+ * TSL object that represents the position view direction of the current rendered object.
56
+ *
57
+ * @type {VaryingNode<vec3>}
58
+ */
59
+ export const positionViewDirection = /*@__PURE__*/ positionView.negate().toVarying( 'v_positionViewDirection' ).normalize().toVar( 'positionViewDirection' );