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
@@ -8,10 +8,19 @@ import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
8
8
  import { WebGLCoordinateSystem } from '../../constants.js';
9
9
  import { Texture } from '../../textures/Texture.js';
10
10
 
11
+ /** @module PMREMNode **/
12
+
11
13
  let _generator = null;
12
14
 
13
15
  const _cache = new WeakMap();
14
16
 
17
+ /**
18
+ * Generates the cubeUV size based on the given image height.
19
+ *
20
+ * @private
21
+ * @param {Number} imageHeight - The image height.
22
+ * @return {{texelWidth: Number,texelHeight: Number, maxMip: Number}} The result object.
23
+ */
15
24
  function _generateCubeUVSize( imageHeight ) {
16
25
 
17
26
  const maxMip = Math.log2( imageHeight ) - 2;
@@ -24,6 +33,13 @@ function _generateCubeUVSize( imageHeight ) {
24
33
 
25
34
  }
26
35
 
36
+ /**
37
+ * Generates a PMREM from the given texture .
38
+ *
39
+ * @private
40
+ * @param {Texture} texture - The texture to create the PMREM for.
41
+ * @return {Texture} The PMREM.
42
+ */
27
43
  function _getPMREMFromTexture( texture ) {
28
44
 
29
45
  let cacheTexture = _cache.get( texture );
@@ -71,6 +87,17 @@ function _getPMREMFromTexture( texture ) {
71
87
 
72
88
  }
73
89
 
90
+ /**
91
+ * This node represents a PMREM which is a special type of preprocessed
92
+ * environment map intended for PBR materials.
93
+ *
94
+ * ```js
95
+ * const material = new MeshStandardNodeMaterial();
96
+ * material.envNode = pmremTexture( envMap );
97
+ * ```
98
+ *
99
+ * @augments TempNode
100
+ */
74
101
  class PMREMNode extends TempNode {
75
102
 
76
103
  static get type() {
@@ -79,27 +106,98 @@ class PMREMNode extends TempNode {
79
106
 
80
107
  }
81
108
 
109
+ /**
110
+ * Constructs a new function overloading node.
111
+ *
112
+ * @param {Texture} value - The input texture.
113
+ * @param {Node<vec2>} [uvNode=null] - The uv node.
114
+ * @param {Node<float>} [levelNode=null] - The level node.
115
+ */
82
116
  constructor( value, uvNode = null, levelNode = null ) {
83
117
 
84
118
  super( 'vec3' );
85
119
 
120
+ /**
121
+ * Reference to the input texture.
122
+ *
123
+ * @private
124
+ * @type {Texture}
125
+ */
86
126
  this._value = value;
127
+
128
+ /**
129
+ * Reference to the generated PMREM.
130
+ *
131
+ * @private
132
+ * @type {Texture | null}
133
+ * @default null
134
+ */
87
135
  this._pmrem = null;
88
136
 
137
+ /**
138
+ * The uv node.
139
+ *
140
+ * @type {Node<vec2>}
141
+ */
89
142
  this.uvNode = uvNode;
143
+
144
+ /**
145
+ * The level node.
146
+ *
147
+ * @type {Node<float>}
148
+ */
90
149
  this.levelNode = levelNode;
91
150
 
151
+ /**
152
+ * Reference to a PMREM generator.
153
+ *
154
+ * @private
155
+ * @type {PMREMGenerator}
156
+ * @default null
157
+ */
92
158
  this._generator = null;
93
159
 
94
160
  const defaultTexture = new Texture();
95
161
  defaultTexture.isRenderTargetTexture = true;
96
162
 
163
+ /**
164
+ * The texture node holding the generated PMREM.
165
+ *
166
+ * @private
167
+ * @type {TextureNode}
168
+ */
97
169
  this._texture = texture( defaultTexture );
98
170
 
171
+ /**
172
+ * A uniform representing the PMREM's width.
173
+ *
174
+ * @private
175
+ * @type {UniformNode<float>}
176
+ */
99
177
  this._width = uniform( 0 );
178
+
179
+ /**
180
+ * A uniform representing the PMREM's height.
181
+ *
182
+ * @private
183
+ * @type {UniformNode<float>}
184
+ */
100
185
  this._height = uniform( 0 );
186
+
187
+ /**
188
+ * A uniform representing the PMREM's max Mip.
189
+ *
190
+ * @private
191
+ * @type {UniformNode<float>}
192
+ */
101
193
  this._maxMip = uniform( 0 );
102
194
 
195
+ /**
196
+ * The `updateBeforeType` is set to `NodeUpdateType.RENDER`.
197
+ *
198
+ * @type {String}
199
+ * @default 'render'
200
+ */
103
201
  this.updateBeforeType = NodeUpdateType.RENDER;
104
202
 
105
203
  }
@@ -111,12 +209,22 @@ class PMREMNode extends TempNode {
111
209
 
112
210
  }
113
211
 
212
+ /**
213
+ * The node's texture value.
214
+ *
215
+ * @type {Texture}
216
+ */
114
217
  get value() {
115
218
 
116
219
  return this._value;
117
220
 
118
221
  }
119
222
 
223
+ /**
224
+ * Uses the given PMREM texture to update internal values.
225
+ *
226
+ * @param {Texture} texture - The PMREM texture.
227
+ */
120
228
  updateFromTexture( texture ) {
121
229
 
122
230
  const cubeUVSize = _generateCubeUVSize( texture.image.height );
@@ -191,6 +299,8 @@ class PMREMNode extends TempNode {
191
299
 
192
300
  }
193
301
 
302
+ uvNode = vec3( uvNode.x, uvNode.y.negate(), uvNode.z );
303
+
194
304
  //
195
305
 
196
306
  let levelNode = this.levelNode;
@@ -211,6 +321,13 @@ class PMREMNode extends TempNode {
211
321
 
212
322
  export default PMREMNode;
213
323
 
324
+ /**
325
+ * Returns `true` if the given cube map image has been fully loaded.
326
+ *
327
+ * @private
328
+ * @param {Array<(Image|Object)>} image - The cube map image.
329
+ * @return {Boolean} Whether the given cube map is ready or not.
330
+ */
214
331
  function isCubeMapReady( image ) {
215
332
 
216
333
  if ( image === null || image === undefined ) return false;
@@ -229,6 +346,13 @@ function isCubeMapReady( image ) {
229
346
 
230
347
  }
231
348
 
349
+ /**
350
+ * Returns `true` if the given equirectangular image has been fully loaded.
351
+ *
352
+ * @private
353
+ * @param {(Image|Object)} image - The equirectangular image.
354
+ * @return {Boolean} Whether the given cube map is ready or not.
355
+ */
232
356
  function isEquirectangularMapReady( image ) {
233
357
 
234
358
  if ( image === null || image === undefined ) return false;
@@ -237,4 +361,13 @@ function isEquirectangularMapReady( image ) {
237
361
 
238
362
  }
239
363
 
364
+ /**
365
+ * TSL function for creating a PMREM node.
366
+ *
367
+ * @function
368
+ * @param {Texture} value - The input texture.
369
+ * @param {Node<vec2>} [uvNode=null] - The uv node.
370
+ * @param {Node<float>} [levelNode=null] - The level node.
371
+ * @returns {PMREMNode}
372
+ */
240
373
  export const pmremTexture = /*@__PURE__*/ nodeProxy( PMREMNode );
@@ -237,7 +237,7 @@ const bilinearCubeUV = /*@__PURE__*/ Fn( ( [ envMap, direction_immutable, mipInt
237
237
  uv.x.mulAssign( CUBEUV_TEXEL_WIDTH );
238
238
  uv.y.mulAssign( CUBEUV_TEXEL_HEIGHT );
239
239
 
240
- return envMap.uv( uv ).grad( vec2(), vec2() ); // disable anisotropic filtering
240
+ return envMap.sample( uv ).grad( vec2(), vec2() ); // disable anisotropic filtering
241
241
 
242
242
  } );
243
243
 
@@ -267,7 +267,7 @@ export const blur = /*@__PURE__*/ Fn( ( { n, latitudinal, poleAxis, outputDirect
267
267
  axis.assign( normalize( axis ) );
268
268
 
269
269
  const gl_FragColor = vec3().toVar();
270
- gl_FragColor.addAssign( weights.element( int( 0 ) ).mul( getSample( { theta: 0.0, axis, outputDirection, mipInt, envMap, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP } ) ) );
270
+ gl_FragColor.addAssign( weights.element( 0 ).mul( getSample( { theta: 0.0, axis, outputDirection, mipInt, envMap, CUBEUV_TEXEL_WIDTH, CUBEUV_TEXEL_HEIGHT, CUBEUV_MAX_MIP } ) ) );
271
271
 
272
272
  Loop( { start: int( 1 ), end: n }, ( { i } ) => {
273
273
 
@@ -1,6 +1,15 @@
1
1
  import { uv } from '../accessors/UV.js';
2
2
  import { Fn } from '../tsl/TSLBase.js';
3
3
 
4
+ /** @module Procedural **/
5
+
6
+ /**
7
+ * Creates a 2x2 checkerboard pattern that can be used as procedural texture data.
8
+ *
9
+ * @method
10
+ * @param {Node<vec2>} coord - The uv coordinates.
11
+ * @return {Node<float>} The result data.
12
+ */
4
13
  export const checker = /*@__PURE__*/ Fn( ( [ coord = uv() ] ) => {
5
14
 
6
15
  const uv = coord.mul( 2.0 );
@@ -0,0 +1,33 @@
1
+ import { Fn, float } from '../tsl/TSLBase.js';
2
+ import { lengthSq, smoothstep } from '../math/MathNode.js';
3
+ import { uv } from '../accessors/UV.js';
4
+
5
+ /** @module Shapes **/
6
+
7
+ /**
8
+ * Generates a circle based on the uv coordinates.
9
+ *
10
+ * @method
11
+ * @param {Node<vec2>} coord - The uv to generate the circle.
12
+ * @return {Node<float>} The circle shape.
13
+ */
14
+ export const shapeCircle = Fn( ( [ coord = uv() ], { renderer, material } ) => {
15
+
16
+ const alpha = float( 1 ).toVar();
17
+ const len2 = lengthSq( coord.mul( 2 ).sub( 1 ) );
18
+
19
+ if ( material.alphaToCoverage && renderer.samples > 1 ) {
20
+
21
+ const dlen = float( len2.fwidth() ).toVar();
22
+
23
+ alpha.assign( smoothstep( dlen.oneMinus(), dlen.add( 1 ), len2 ).oneMinus() );
24
+
25
+ } else {
26
+
27
+ len2.greaterThan( 1.0 ).discard();
28
+
29
+ }
30
+
31
+ return alpha;
32
+
33
+ } );
@@ -2,8 +2,9 @@
2
2
  // TSL Base Syntax
3
3
 
4
4
  export * from './TSLCore.js'; // float(), vec2(), vec3(), vec4(), mat3(), mat4(), Fn(), If(), element(), nodeObject(), nodeProxy(), ...
5
+ export * from '../core/ArrayNode.js'; // array(), .toArray()
5
6
  export * from '../core/UniformNode.js'; // uniform()
6
- export * from '../core/PropertyNode.js'; // property() <-> TODO: Seperate Material Properties in other file
7
+ export * from '../core/PropertyNode.js'; // property() <-> TODO: Separate Material Properties in other file
7
8
  export * from '../core/AssignNode.js'; // .assign()
8
9
  export * from '../code/FunctionCallNode.js'; // .call()
9
10
  export * from '../math/OperatorNode.js'; // .add(), .sub(), ...
@@ -11,7 +12,7 @@ export * from '../math/MathNode.js'; // abs(), floor(), ...
11
12
  export * from '../math/ConditionalNode.js'; // select(), ...
12
13
  export * from '../core/ContextNode.js'; // .context()
13
14
  export * from '../core/VarNode.js'; // .var() -> TODO: Maybe rename .toVar() -> .var()
14
- export * from '../core/VaryingNode.js'; // varying() -> TODO: Add vertexStage()
15
+ export * from '../core/VaryingNode.js'; // varying(), vertexStage()
15
16
  export * from '../display/ColorSpaceNode.js'; // .toColorSpace()
16
17
  export * from '../display/ToneMappingNode.js'; // .toToneMapping()
17
18
  export * from '../accessors/BufferAttributeNode.js'; // .toAttribute()
@@ -6,9 +6,10 @@ import SplitNode from '../utils/SplitNode.js';
6
6
  import SetNode from '../utils/SetNode.js';
7
7
  import FlipNode from '../utils/FlipNode.js';
8
8
  import ConstNode from '../core/ConstNode.js';
9
+ import MemberNode from '../utils/MemberNode.js';
9
10
  import { getValueFromType, getValueType } from '../core/NodeUtils.js';
10
11
 
11
- //
12
+ /** @module TSLCore **/
12
13
 
13
14
  let currentStack = null;
14
15
 
@@ -112,6 +113,12 @@ const shaderNodeHandler = {
112
113
 
113
114
  return nodeObject( new ArrayElementNode( nodeObj, new ConstNode( Number( prop ), 'uint' ) ) );
114
115
 
116
+ } else if ( /^get$/.test( prop ) === true ) {
117
+
118
+ // accessing properties
119
+
120
+ return ( value ) => nodeObject( new MemberNode( nodeObj, value ) );
121
+
115
122
  }
116
123
 
117
124
  }
@@ -261,6 +268,12 @@ class ShaderCallNodeInternal extends Node {
261
268
 
262
269
  }
263
270
 
271
+ getMemberType( builder, name ) {
272
+
273
+ return this.getOutputNode( builder ).getMemberType( builder, name );
274
+
275
+ }
276
+
264
277
  call( builder ) {
265
278
 
266
279
  const { shaderNode, inputNodes } = this;
@@ -305,7 +318,7 @@ class ShaderCallNodeInternal extends Node {
305
318
  } else {
306
319
 
307
320
  const jsFunc = shaderNode.jsFunc;
308
- const outputNode = inputNodes !== null ? jsFunc( inputNodes, builder ) : jsFunc( builder );
321
+ const outputNode = inputNodes !== null || jsFunc.length > 1 ? jsFunc( inputNodes || [], builder ) : jsFunc( builder );
309
322
 
310
323
  result = nodeObject( outputNode );
311
324
 
@@ -553,6 +566,13 @@ export const Fn = ( jsFunc, nodeType ) => {
553
566
 
554
567
  };
555
568
 
569
+ /**
570
+ * @function
571
+ * @deprecated since r168. Use {@link Fn} instead.
572
+ *
573
+ * @param {...any} params
574
+ * @returns {Function}
575
+ */
556
576
  export const tslFn = ( ...params ) => { // @deprecated, r168
557
577
 
558
578
  console.warn( 'TSL.ShaderNode: tslFn() has been renamed to Fn().' );
@@ -1,24 +1,60 @@
1
1
  import Node from '../core/Node.js';
2
2
 
3
- class ArrayElementNode extends Node {
3
+ /**
4
+ * Base class for representing element access on an array-like
5
+ * node data structures.
6
+ *
7
+ * @augments Node
8
+ */
9
+ class ArrayElementNode extends Node { // @TODO: If extending from TempNode it breaks webgpu_compute
4
10
 
5
11
  static get type() {
6
12
 
7
13
  return 'ArrayElementNode';
8
14
 
9
- } // @TODO: If extending from TempNode it breaks webgpu_compute
15
+ }
10
16
 
17
+ /**
18
+ * Constructs an array element node.
19
+ *
20
+ * @param {Node} node - The array-like node.
21
+ * @param {Node} indexNode - The index node that defines the element access.
22
+ */
11
23
  constructor( node, indexNode ) {
12
24
 
13
25
  super();
14
26
 
27
+ /**
28
+ * The array-like node.
29
+ *
30
+ * @type {Node}
31
+ */
15
32
  this.node = node;
33
+
34
+ /**
35
+ * The index node that defines the element access.
36
+ *
37
+ * @type {Node}
38
+ */
16
39
  this.indexNode = indexNode;
17
40
 
41
+ /**
42
+ * This flag can be used for type testing.
43
+ *
44
+ * @type {Boolean}
45
+ * @readonly
46
+ * @default true
47
+ */
18
48
  this.isArrayElementNode = true;
19
49
 
20
50
  }
21
51
 
52
+ /**
53
+ * This method is overwritten since the node type is inferred from the array-like node.
54
+ *
55
+ * @param {NodeBuilder} builder - The current node builder.
56
+ * @return {String} The node type.
57
+ */
22
58
  getNodeType( builder ) {
23
59
 
24
60
  return this.node.getElementType( builder );
@@ -30,7 +66,7 @@ class ArrayElementNode extends Node {
30
66
  const nodeSnippet = this.node.build( builder );
31
67
  const indexSnippet = this.indexNode.build( builder, 'uint' );
32
68
 
33
- return `${nodeSnippet}[ ${indexSnippet} ]`;
69
+ return `${ nodeSnippet }[ ${ indexSnippet } ]`;
34
70
 
35
71
  }
36
72
 
@@ -1,5 +1,12 @@
1
1
  import Node from '../core/Node.js';
2
2
 
3
+ /**
4
+ * This module is part of the TSL core and usually not used in app level code.
5
+ * It represents a convert operation during the shader generation process
6
+ * meaning it converts the data type of a node to a target data type.
7
+ *
8
+ * @augments Node
9
+ */
3
10
  class ConvertNode extends Node {
4
11
 
5
12
  static get type() {
@@ -8,15 +15,39 @@ class ConvertNode extends Node {
8
15
 
9
16
  }
10
17
 
18
+ /**
19
+ * Constructs a new convert node.
20
+ *
21
+ * @param {Node} node - The node which type should be converted.
22
+ * @param {String} convertTo - The target node type. Multiple types can be defined by separating them with a `|` sign.
23
+ */
11
24
  constructor( node, convertTo ) {
12
25
 
13
26
  super();
14
27
 
28
+ /**
29
+ * The node which type should be converted.
30
+ *
31
+ * @type {Node}
32
+ */
15
33
  this.node = node;
34
+
35
+ /**
36
+ * The target node type. Multiple types can be defined by separating them with a `|` sign.
37
+ *
38
+ * @type {String}
39
+ */
16
40
  this.convertTo = convertTo;
17
41
 
18
42
  }
19
43
 
44
+ /**
45
+ * This method is overwritten since the implementation tries to infer the best
46
+ * matching type from the {@link ConvertNode#convertTo} property.
47
+ *
48
+ * @param {NodeBuilder} builder - The current node builder.
49
+ * @return {String} The node type.
50
+ */
20
51
  getNodeType( builder ) {
21
52
 
22
53
  const requestType = this.node.getNodeType( builder );
@@ -6,8 +6,16 @@ import { cubeTexture } from '../accessors/CubeTextureNode.js';
6
6
  import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
7
7
  import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../constants.js';
8
8
 
9
+ /** @module CubeMapNode **/
10
+
9
11
  const _cache = new WeakMap();
10
12
 
13
+ /**
14
+ * This node can be used to automatically convert environment maps in the
15
+ * equirectangular format into the cube map format.
16
+ *
17
+ * @augments TempNode
18
+ */
11
19
  class CubeMapNode extends TempNode {
12
20
 
13
21
  static get type() {
@@ -16,20 +24,59 @@ class CubeMapNode extends TempNode {
16
24
 
17
25
  }
18
26
 
27
+ /**
28
+ * Constructs a new cube map node.
29
+ *
30
+ * @param {Node} envNode - The node representing the environment map.
31
+ */
19
32
  constructor( envNode ) {
20
33
 
21
34
  super( 'vec3' );
22
35
 
36
+ /**
37
+ * The node representing the environment map.
38
+ *
39
+ * @type {Node}
40
+ */
23
41
  this.envNode = envNode;
24
42
 
43
+ /**
44
+ * A reference to the internal cube texture.
45
+ *
46
+ * @private
47
+ * @type {CubeTexture}
48
+ * @default null
49
+ */
25
50
  this._cubeTexture = null;
51
+
52
+ /**
53
+ * A reference to the internal cube texture node.
54
+ *
55
+ * @private
56
+ * @type {CubeTextureNode}
57
+ */
26
58
  this._cubeTextureNode = cubeTexture();
27
59
 
28
60
  const defaultTexture = new CubeTexture();
29
61
  defaultTexture.isRenderTargetTexture = true;
30
62
 
63
+ /**
64
+ * A default cube texture that acts as a placeholder.
65
+ * It is used when the conversion from equirectangular to cube
66
+ * map has not finished yet for a given texture.
67
+ *
68
+ * @private
69
+ * @type {CubeTexture}
70
+ */
31
71
  this._defaultTexture = defaultTexture;
32
72
 
73
+ /**
74
+ * The `updateBeforeType` is set to `NodeUpdateType.RENDER` since the node updates
75
+ * the texture once per render in its {@link CubeMapNode#updateBefore} method.
76
+ *
77
+ * @type {String}
78
+ * @default 'render'
79
+ */
33
80
  this.updateBeforeType = NodeUpdateType.RENDER;
34
81
 
35
82
  }
@@ -117,6 +164,14 @@ class CubeMapNode extends TempNode {
117
164
 
118
165
  export default CubeMapNode;
119
166
 
167
+ /**
168
+ * Returns true if the given equirectangular image has been fully loaded
169
+ * and is ready for further processing.
170
+ *
171
+ * @private
172
+ * @param {Image} image - The equirectangular image to check.
173
+ * @return {Boolean} Whether the image is ready or not.
174
+ */
120
175
  function isEquirectangularMapReady( image ) {
121
176
 
122
177
  if ( image === null || image === undefined ) return false;
@@ -125,6 +180,14 @@ function isEquirectangularMapReady( image ) {
125
180
 
126
181
  }
127
182
 
183
+ /**
184
+ * This function is executed when `dispose()` is called on the equirectangular
185
+ * texture. In this case, the generated cube map with its render target
186
+ * is deleted as well.
187
+ *
188
+ * @private
189
+ * @param {Object} event - The event object.
190
+ */
128
191
  function onTextureDispose( event ) {
129
192
 
130
193
  const texture = event.target;
@@ -143,6 +206,14 @@ function onTextureDispose( event ) {
143
206
 
144
207
  }
145
208
 
209
+ /**
210
+ * This function makes sure the generated cube map uses the correct
211
+ * texture mapping that corresponds to the equirectangular original.
212
+ *
213
+ * @private
214
+ * @param {Texture} texture - The cube texture.
215
+ * @param {Number} mapping - The original texture mapping.
216
+ */
146
217
  function mapTextureMapping( texture, mapping ) {
147
218
 
148
219
  if ( mapping === EquirectangularReflectionMapping ) {
@@ -157,4 +228,11 @@ function mapTextureMapping( texture, mapping ) {
157
228
 
158
229
  }
159
230
 
231
+ /**
232
+ * TSL function for creating a cube map node.
233
+ *
234
+ * @function
235
+ * @param {Node} envNode - The node representing the environment map.
236
+ * @returns {CubeMapNode}
237
+ */
160
238
  export const cubeMapNode = /*@__PURE__*/ nodeProxy( CubeMapNode );
@@ -2,7 +2,23 @@ import { select } from '../math/ConditionalNode.js';
2
2
  import { expression } from '../code/ExpressionNode.js';
3
3
  import { addMethodChaining } from '../tsl/TSLCore.js';
4
4
 
5
+ /** @module Discard **/
6
+
7
+ /**
8
+ * Represents a `discard` shader operation in TSL.
9
+ *
10
+ * @method
11
+ * @param {ConditionalNode?} conditional - An optional conditional node. It allows to decide whether the discard should be executed or not.
12
+ * @return {Node} The `discard` expression.
13
+ */
5
14
  export const Discard = ( conditional ) => ( conditional ? select( conditional, expression( 'discard' ) ) : expression( 'discard' ) ).append();
15
+
16
+ /**
17
+ * Represents a `return` shader operation in TSL.
18
+ *
19
+ * @method
20
+ * @return {ExpressionNode} The `return` expression.
21
+ */
6
22
  export const Return = () => expression( 'return' ).append();
7
23
 
8
24
  addMethodChaining( 'discard', Discard );