super-three 0.170.1 → 0.172.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 (413) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +157 -49
  3. package/build/three.core.js +104 -42
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +53 -8
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +10 -5
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +21191 -1008
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +21189 -1008
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -5
  14. package/examples/jsm/animation/CCDIKSolver.js +3 -2
  15. package/examples/jsm/controls/ArcballControls.js +28 -19
  16. package/examples/jsm/controls/OrbitControls.js +5 -4
  17. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  18. package/examples/jsm/curves/NURBSCurve.js +1 -1
  19. package/examples/jsm/curves/NURBSUtils.js +3 -0
  20. package/examples/jsm/effects/OutlineEffect.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +11 -7
  22. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  23. package/examples/jsm/exporters/PLYExporter.js +2 -2
  24. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  25. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  26. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  27. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  28. package/examples/jsm/loaders/3MFLoader.js +6 -3
  29. package/examples/jsm/loaders/BVHLoader.js +1 -1
  30. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  31. package/examples/jsm/loaders/DDSLoader.js +42 -0
  32. package/examples/jsm/loaders/GCodeLoader.js +1 -1
  33. package/examples/jsm/loaders/GLTFLoader.js +22 -2
  34. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  35. package/examples/jsm/loaders/KTXLoader.js +4 -4
  36. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  37. package/examples/jsm/loaders/LottieLoader.js +1 -1
  38. package/examples/jsm/loaders/MTLLoader.js +1 -0
  39. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  40. package/examples/jsm/loaders/PLYLoader.js +7 -7
  41. package/examples/jsm/loaders/PVRLoader.js +1 -1
  42. package/examples/jsm/loaders/SVGLoader.js +2 -2
  43. package/examples/jsm/loaders/TDSLoader.js +1 -1
  44. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  45. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  46. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  47. package/examples/jsm/math/ConvexHull.js +1 -1
  48. package/examples/jsm/math/OBB.js +17 -0
  49. package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
  50. package/examples/jsm/misc/Volume.js +20 -12
  51. package/examples/jsm/misc/VolumeSlice.js +2 -2
  52. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  53. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  54. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  55. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  56. package/examples/jsm/objects/Sky.js +2 -2
  57. package/examples/jsm/objects/SkyMesh.js +3 -3
  58. package/examples/jsm/objects/Water2.js +1 -1
  59. package/examples/jsm/objects/Water2Mesh.js +2 -2
  60. package/examples/jsm/objects/WaterMesh.js +4 -4
  61. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  62. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  63. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  64. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  65. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  66. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  67. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  68. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  69. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  70. package/examples/jsm/shaders/BokehShader2.js +1 -1
  71. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  72. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  73. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  74. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  75. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  76. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  77. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  78. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  79. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  80. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  81. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  82. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  83. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  84. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  85. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  86. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  87. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  88. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  89. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  90. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  91. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  92. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  93. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  94. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  95. package/examples/jsm/tsl/display/Sepia.js +9 -0
  96. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  97. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  98. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  99. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  100. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  101. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  102. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  103. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  104. package/examples/jsm/utils/CameraUtils.js +4 -1
  105. package/examples/jsm/utils/GeometryUtils.js +22 -19
  106. package/examples/jsm/utils/SceneUtils.js +2 -2
  107. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  108. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  109. package/package.json +8 -3
  110. package/src/Three.Core.js +2 -0
  111. package/src/Three.Legacy.js +0 -21
  112. package/src/Three.TSL.js +9 -4
  113. package/src/Three.WebGPU.Nodes.js +2 -2
  114. package/src/Three.WebGPU.js +2 -2
  115. package/src/animation/PropertyBinding.js +2 -2
  116. package/src/cameras/PerspectiveCamera.js +18 -2
  117. package/src/constants.js +1 -1
  118. package/src/core/RenderTarget.js +18 -0
  119. package/src/core/RenderTarget3D.js +22 -0
  120. package/src/core/RenderTargetArray.js +22 -0
  121. package/src/extras/Earcut.js +1 -1
  122. package/src/extras/PMREMGenerator.js +20 -0
  123. package/src/extras/TextureUtils.js +6 -0
  124. package/src/helpers/CameraHelper.js +16 -13
  125. package/src/loaders/nodes/NodeLoader.js +59 -0
  126. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  127. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  128. package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
  129. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  130. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  131. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  132. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  133. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  134. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  135. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  136. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  137. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  138. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  139. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  140. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  141. package/src/materials/nodes/NodeMaterial.js +474 -21
  142. package/src/materials/nodes/PointsNodeMaterial.js +22 -13
  143. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  144. package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
  145. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  146. package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
  147. package/src/nodes/Nodes.js +1 -6
  148. package/src/nodes/TSL.js +2 -3
  149. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  150. package/src/nodes/accessors/Arrays.js +24 -5
  151. package/src/nodes/accessors/BatchNode.js +39 -3
  152. package/src/nodes/accessors/Bitangent.js +37 -0
  153. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  154. package/src/nodes/accessors/BufferNode.js +63 -0
  155. package/src/nodes/accessors/BuiltinNode.js +38 -0
  156. package/src/nodes/accessors/Camera.js +49 -0
  157. package/src/nodes/accessors/ClippingNode.js +71 -2
  158. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  159. package/src/nodes/accessors/InstanceNode.js +85 -2
  160. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  161. package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
  162. package/src/nodes/accessors/Lights.js +50 -1
  163. package/src/nodes/accessors/MaterialNode.js +302 -8
  164. package/src/nodes/accessors/MaterialProperties.js +7 -0
  165. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  166. package/src/nodes/accessors/ModelNode.js +100 -5
  167. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  168. package/src/nodes/accessors/MorphNode.js +48 -4
  169. package/src/nodes/accessors/Normal.js +59 -3
  170. package/src/nodes/accessors/Object3DNode.js +102 -1
  171. package/src/nodes/accessors/PointUVNode.js +26 -0
  172. package/src/nodes/accessors/Position.js +53 -4
  173. package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
  174. package/src/nodes/accessors/ReferenceNode.js +202 -2
  175. package/src/nodes/accessors/ReflectVector.js +24 -0
  176. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  177. package/src/nodes/accessors/SceneNode.js +54 -0
  178. package/src/nodes/accessors/SkinningNode.js +127 -1
  179. package/src/nodes/accessors/StorageBufferNode.js +168 -4
  180. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  181. package/src/nodes/accessors/Tangent.js +36 -0
  182. package/src/nodes/accessors/Texture3DNode.js +89 -5
  183. package/src/nodes/accessors/TextureBicubic.js +12 -2
  184. package/src/nodes/accessors/TextureNode.js +309 -10
  185. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  186. package/src/nodes/accessors/UV.js +10 -1
  187. package/src/nodes/accessors/UniformArrayNode.js +223 -23
  188. package/src/nodes/accessors/UserDataNode.js +46 -0
  189. package/src/nodes/accessors/VelocityNode.js +82 -0
  190. package/src/nodes/accessors/VertexColorNode.js +39 -2
  191. package/src/nodes/code/CodeNode.js +95 -1
  192. package/src/nodes/code/ExpressionNode.js +28 -0
  193. package/src/nodes/code/FunctionCallNode.js +37 -0
  194. package/src/nodes/code/FunctionNode.js +45 -0
  195. package/src/nodes/code/ScriptableNode.js +223 -1
  196. package/src/nodes/code/ScriptableValueNode.js +85 -1
  197. package/src/nodes/core/AssignNode.js +48 -2
  198. package/src/nodes/core/AttributeNode.js +43 -0
  199. package/src/nodes/core/BypassNode.js +47 -2
  200. package/src/nodes/core/CacheNode.js +53 -2
  201. package/src/nodes/core/ConstNode.js +24 -0
  202. package/src/nodes/core/ContextNode.js +65 -0
  203. package/src/nodes/core/IndexNode.js +68 -7
  204. package/src/nodes/core/InputNode.js +48 -0
  205. package/src/nodes/core/LightingModel.js +60 -0
  206. package/src/nodes/core/MRTNode.js +66 -0
  207. package/src/nodes/core/Node.js +337 -12
  208. package/src/nodes/core/NodeAttribute.js +38 -0
  209. package/src/nodes/core/NodeBuilder.js +945 -15
  210. package/src/nodes/core/NodeCache.js +41 -2
  211. package/src/nodes/core/NodeCode.js +31 -0
  212. package/src/nodes/core/NodeFrame.js +123 -2
  213. package/src/nodes/core/NodeFunction.js +46 -0
  214. package/src/nodes/core/NodeFunctionInput.js +44 -0
  215. package/src/nodes/core/NodeParser.js +11 -0
  216. package/src/nodes/core/NodeUniform.js +52 -0
  217. package/src/nodes/core/NodeUtils.js +141 -0
  218. package/src/nodes/core/NodeVar.js +30 -0
  219. package/src/nodes/core/NodeVarying.js +28 -0
  220. package/src/nodes/core/OutputStructNode.js +33 -2
  221. package/src/nodes/core/ParameterNode.js +28 -0
  222. package/src/nodes/core/PropertyNode.js +232 -0
  223. package/src/nodes/core/StackNode.js +78 -0
  224. package/src/nodes/core/StructTypeNode.js +39 -1
  225. package/src/nodes/core/TempNode.js +30 -4
  226. package/src/nodes/core/UniformGroupNode.js +82 -7
  227. package/src/nodes/core/UniformNode.js +66 -0
  228. package/src/nodes/core/VarNode.js +52 -0
  229. package/src/nodes/core/VaryingNode.js +83 -2
  230. package/src/nodes/core/constants.js +36 -0
  231. package/src/nodes/display/BumpMapNode.js +37 -0
  232. package/src/nodes/display/ColorAdjustment.js +53 -11
  233. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  234. package/src/nodes/display/ColorSpaceNode.js +82 -0
  235. package/src/nodes/display/FrontFacingNode.js +29 -0
  236. package/src/nodes/display/NormalMapNode.js +43 -0
  237. package/src/nodes/display/PassNode.js +298 -7
  238. package/src/nodes/display/PosterizeNode.js +33 -0
  239. package/src/nodes/display/RenderOutputNode.js +66 -1
  240. package/src/nodes/display/ScreenNode.js +87 -0
  241. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  242. package/src/nodes/display/ToneMappingNode.js +55 -2
  243. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  244. package/src/nodes/display/ViewportDepthNode.js +122 -8
  245. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  246. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  247. package/src/nodes/display/ViewportTextureNode.js +57 -0
  248. package/src/nodes/fog/Fog.js +93 -0
  249. package/src/nodes/functions/BasicLightingModel.js +24 -0
  250. package/src/nodes/functions/PhongLightingModel.js +34 -2
  251. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  252. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  253. package/src/nodes/functions/ToonLightingModel.js +20 -0
  254. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  255. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  256. package/src/nodes/geometry/RangeNode.js +54 -2
  257. package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
  258. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  259. package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
  260. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  261. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  262. package/src/nodes/lighting/AONode.js +18 -0
  263. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  264. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  265. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  266. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  267. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  268. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  269. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  270. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  271. package/src/nodes/lighting/IrradianceNode.js +17 -0
  272. package/src/nodes/lighting/LightProbeNode.js +20 -0
  273. package/src/nodes/lighting/LightUtils.js +12 -0
  274. package/src/nodes/lighting/LightingContextNode.js +48 -0
  275. package/src/nodes/lighting/LightingNode.js +15 -6
  276. package/src/nodes/lighting/LightsNode.js +132 -1
  277. package/src/nodes/lighting/PointLightNode.js +32 -1
  278. package/src/nodes/lighting/PointShadowNode.js +54 -1
  279. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  280. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  281. package/src/nodes/lighting/ShadowNode.js +240 -34
  282. package/src/nodes/lighting/SpotLightNode.js +43 -0
  283. package/src/nodes/math/ConditionalNode.js +70 -3
  284. package/src/nodes/math/Hash.js +9 -0
  285. package/src/nodes/math/MathNode.js +614 -11
  286. package/src/nodes/math/MathUtils.js +45 -1
  287. package/src/nodes/math/OperatorNode.js +233 -0
  288. package/src/nodes/math/TriNoise3D.js +18 -7
  289. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  290. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  291. package/src/nodes/pmrem/PMREMNode.js +133 -0
  292. package/src/nodes/pmrem/PMREMUtils.js +1 -1
  293. package/src/nodes/procedural/Checker.js +9 -0
  294. package/src/nodes/tsl/TSLBase.js +2 -2
  295. package/src/nodes/utils/ArrayElementNode.js +38 -2
  296. package/src/nodes/utils/ConvertNode.js +31 -0
  297. package/src/nodes/utils/CubeMapNode.js +78 -0
  298. package/src/nodes/utils/Discard.js +16 -0
  299. package/src/nodes/utils/EquirectUVNode.js +31 -1
  300. package/src/nodes/utils/FlipNode.js +38 -0
  301. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  302. package/src/nodes/utils/JoinNode.js +25 -0
  303. package/src/nodes/utils/LoopNode.js +74 -1
  304. package/src/nodes/utils/MatcapUVNode.js +17 -0
  305. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  306. package/src/nodes/utils/Oscillators.js +33 -0
  307. package/src/nodes/utils/Packing.js +17 -0
  308. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  309. package/src/nodes/utils/RTTNode.js +123 -2
  310. package/src/nodes/utils/ReflectorNode.js +174 -4
  311. package/src/nodes/utils/RemapNode.js +79 -0
  312. package/src/nodes/utils/RotateNode.js +41 -0
  313. package/src/nodes/utils/SetNode.js +44 -1
  314. package/src/nodes/utils/SplitNode.js +55 -3
  315. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  316. package/src/nodes/utils/SpriteUtils.js +17 -0
  317. package/src/nodes/utils/StorageArrayElementNode.js +40 -0
  318. package/src/nodes/utils/Timer.js +19 -0
  319. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  320. package/src/nodes/utils/UVUtils.js +20 -0
  321. package/src/nodes/utils/ViewportUtils.js +13 -0
  322. package/src/objects/BatchedMesh.js +1 -2
  323. package/src/objects/ClippingGroup.js +49 -0
  324. package/src/renderers/WebGLRenderer.js +23 -4
  325. package/src/renderers/common/Animation.js +63 -0
  326. package/src/renderers/common/Attributes.js +36 -0
  327. package/src/renderers/common/Backend.js +467 -52
  328. package/src/renderers/common/Background.js +34 -1
  329. package/src/renderers/common/BindGroup.js +43 -0
  330. package/src/renderers/common/Binding.js +35 -0
  331. package/src/renderers/common/Bindings.js +93 -1
  332. package/src/renderers/common/Buffer.js +49 -0
  333. package/src/renderers/common/BufferUtils.js +27 -0
  334. package/src/renderers/common/BundleGroup.js +57 -0
  335. package/src/renderers/common/ChainMap.js +38 -1
  336. package/src/renderers/common/ClippingContext.js +107 -14
  337. package/src/renderers/common/Color4.js +36 -0
  338. package/src/renderers/common/ComputePipeline.js +24 -0
  339. package/src/renderers/common/CubeRenderTarget.js +13 -0
  340. package/src/renderers/common/DataMap.js +37 -1
  341. package/src/renderers/common/Geometries.js +98 -0
  342. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  343. package/src/renderers/common/Info.js +87 -0
  344. package/src/renderers/common/Lighting.js +26 -0
  345. package/src/renderers/common/Pipeline.js +22 -0
  346. package/src/renderers/common/Pipelines.js +148 -5
  347. package/src/renderers/common/PostProcessing.js +75 -3
  348. package/src/renderers/common/ProgrammableStage.js +60 -2
  349. package/src/renderers/common/QuadMesh.js +54 -5
  350. package/src/renderers/common/RenderBundle.js +14 -8
  351. package/src/renderers/common/RenderBundles.js +33 -10
  352. package/src/renderers/common/RenderContext.js +169 -4
  353. package/src/renderers/common/RenderContexts.js +42 -2
  354. package/src/renderers/common/RenderList.js +178 -0
  355. package/src/renderers/common/RenderLists.js +31 -0
  356. package/src/renderers/common/RenderObject.js +328 -4
  357. package/src/renderers/common/RenderObjects.js +101 -7
  358. package/src/renderers/common/RenderPipeline.js +24 -0
  359. package/src/renderers/common/Renderer.js +1096 -31
  360. package/src/renderers/common/RendererUtils.js +193 -0
  361. package/src/renderers/common/SampledTexture.js +121 -0
  362. package/src/renderers/common/Sampler.js +30 -0
  363. package/src/renderers/common/StorageBuffer.js +24 -0
  364. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  365. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  366. package/src/renderers/common/StorageTexture.js +38 -0
  367. package/src/renderers/common/Textures.js +83 -0
  368. package/src/renderers/common/Uniform.js +188 -2
  369. package/src/renderers/common/UniformBuffer.js +19 -0
  370. package/src/renderers/common/UniformsGroup.js +139 -2
  371. package/src/renderers/common/extras/PMREMGenerator.js +24 -3
  372. package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
  373. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  374. package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
  375. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  376. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  377. package/src/renderers/common/nodes/NodeUniform.js +189 -0
  378. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  379. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  380. package/src/renderers/common/nodes/Nodes.js +327 -60
  381. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  382. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  383. package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
  384. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
  385. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  386. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
  387. package/src/renderers/webgpu/WebGPUBackend.js +480 -49
  388. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
  389. package/src/renderers/webgpu/WebGPURenderer.js +35 -0
  390. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  391. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  392. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
  393. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  394. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  395. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
  396. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
  397. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
  398. package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
  399. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  400. package/src/renderers/webxr/WebXRManager.js +7 -1
  401. package/src/textures/Data3DTexture.js +2 -2
  402. package/src/textures/Texture.js +4 -0
  403. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  404. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  405. package/examples/jsm/exporters/MMDExporter.js +0 -223
  406. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  407. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  408. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  409. package/src/nodes/core/UniformGroup.js +0 -13
  410. package/src/nodes/fog/FogExp2Node.js +0 -35
  411. package/src/nodes/fog/FogNode.js +0 -50
  412. package/src/nodes/fog/FogRangeNode.js +0 -36
  413. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -8,6 +8,15 @@ import { tangentLocal } from './Tangent.js';
8
8
  import { instanceIndex, drawIndex } from '../core/IndexNode.js';
9
9
  import { varyingProperty } from '../core/PropertyNode.js';
10
10
 
11
+ /** @module BatchNode **/
12
+
13
+ /**
14
+ * This node implements the vertex shader logic which is required
15
+ * when rendering 3D objects via batching. `BatchNode` must be used
16
+ * with instances of {@link BatchedMesh}.
17
+ *
18
+ * @augments Node
19
+ */
11
20
  class BatchNode extends Node {
12
21
 
13
22
  static get type() {
@@ -16,21 +25,41 @@ class BatchNode extends Node {
16
25
 
17
26
  }
18
27
 
28
+ /**
29
+ * Constructs a new batch node.
30
+ *
31
+ * @param {BatchedMesh} batchMesh - A reference to batched mesh.
32
+ */
19
33
  constructor( batchMesh ) {
20
34
 
21
35
  super( 'void' );
22
36
 
37
+ /**
38
+ * A reference to batched mesh.
39
+ *
40
+ * @type {BatchedMesh}
41
+ */
23
42
  this.batchMesh = batchMesh;
24
43
 
25
-
44
+ /**
45
+ * The batching index node.
46
+ *
47
+ * @type {IndexNode?}
48
+ * @default null
49
+ */
26
50
  this.batchingIdNode = null;
27
51
 
28
52
  }
29
53
 
54
+ /**
55
+ * Setups the internal buffers and nodes and assigns the transformed vertex data
56
+ * to predefined node variables for accumulation. That follows the same patterns
57
+ * like with morph and skinning nodes.
58
+ *
59
+ * @param {NodeBuilder} builder - The current node builder.
60
+ */
30
61
  setup( builder ) {
31
62
 
32
- // POSITION
33
-
34
63
  if ( this.batchingIdNode === null ) {
35
64
 
36
65
  if ( builder.getDrawIndex() === null ) {
@@ -125,4 +154,11 @@ class BatchNode extends Node {
125
154
 
126
155
  export default BatchNode;
127
156
 
157
+ /**
158
+ * TSL function for creating a batch node.
159
+ *
160
+ * @function
161
+ * @param {BatchedMesh} batchMesh - A reference to batched mesh.
162
+ * @returns {BatchNode}
163
+ */
128
164
  export const batch = /*@__PURE__*/ nodeProxy( BatchNode );
@@ -3,11 +3,48 @@ import { cameraViewMatrix } from './Camera.js';
3
3
  import { normalGeometry, normalLocal, normalView, normalWorld, transformedNormalView } from './Normal.js';
4
4
  import { tangentGeometry, tangentLocal, tangentView, tangentWorld, transformedTangentView } from './Tangent.js';
5
5
 
6
+ /** @module Bitangent **/
7
+
6
8
  const getBitangent = ( crossNormalTangent ) => crossNormalTangent.mul( tangentGeometry.w ).xyz;
7
9
 
10
+ /**
11
+ * TSL object that represents the bitangent attribute of the current rendered object.
12
+ *
13
+ * @type {Node<vec3>}
14
+ */
8
15
  export const bitangentGeometry = /*@__PURE__*/ varying( getBitangent( normalGeometry.cross( tangentGeometry ) ), 'v_bitangentGeometry' ).normalize().toVar( 'bitangentGeometry' );
16
+
17
+ /**
18
+ * TSL object that represents the vertex bitangent in local space of the current rendered object.
19
+ *
20
+ * @type {Node<vec3>}
21
+ */
9
22
  export const bitangentLocal = /*@__PURE__*/ varying( getBitangent( normalLocal.cross( tangentLocal ) ), 'v_bitangentLocal' ).normalize().toVar( 'bitangentLocal' );
23
+
24
+ /**
25
+ * TSL object that represents the vertex bitangent in view space of the current rendered object.
26
+ *
27
+ * @type {Node<vec4>}
28
+ */
10
29
  export const bitangentView = /*@__PURE__*/ varying( getBitangent( normalView.cross( tangentView ) ), 'v_bitangentView' ).normalize().toVar( 'bitangentView' );
30
+
31
+ /**
32
+ * TSL object that represents the vertex bitangent in world space of the current rendered object.
33
+ *
34
+ * @type {Node<vec4>}
35
+ */
11
36
  export const bitangentWorld = /*@__PURE__*/ varying( getBitangent( normalWorld.cross( tangentWorld ) ), 'v_bitangentWorld' ).normalize().toVar( 'bitangentWorld' );
37
+
38
+ /**
39
+ * TSL object that represents the transformed vertex bitangent in view space of the current rendered object.
40
+ *
41
+ * @type {Node<vec4>}
42
+ */
12
43
  export const transformedBitangentView = /*@__PURE__*/ getBitangent( transformedNormalView.cross( transformedTangentView ) ).normalize().toVar( 'transformedBitangentView' );
44
+
45
+ /**
46
+ * TSL object that represents the transformed vertex bitangent in world space of the current rendered object.
47
+ *
48
+ * @type {Node<vec4>}
49
+ */
13
50
  export const transformedBitangentWorld = /*@__PURE__*/ transformedBitangentView.transformDirection( cameraViewMatrix ).normalize().toVar( 'transformedBitangentWorld' );
@@ -6,6 +6,30 @@ import { InterleavedBufferAttribute } from '../../core/InterleavedBufferAttribut
6
6
  import { InterleavedBuffer } from '../../core/InterleavedBuffer.js';
7
7
  import { StaticDrawUsage, DynamicDrawUsage } from '../../constants.js';
8
8
 
9
+ /** @module BufferAttributeNode **/
10
+
11
+ /**
12
+ * In earlier `three.js` versions it was only possible to define attribute data
13
+ * on geometry level. With `BufferAttributeNode`, it is also possible to do this
14
+ * on the node level.
15
+ * ```js
16
+ * const geometry = new THREE.PlaneGeometry();
17
+ * const positionAttribute = geometry.getAttribute( 'position' );
18
+ *
19
+ * const colors = [];
20
+ * for ( let i = 0; i < position.count; i ++ ) {
21
+ * colors.push( 1, 0, 0 );
22
+ * }
23
+ *
24
+ * material.colorNode = bufferAttribute( new THREE.Float32BufferAttribute( colors, 3 ) );
25
+ * ```
26
+ * This new approach is especially interesting when geometry data are generated via
27
+ * compute shaders. The below line converts a storage buffer into an attribute node.
28
+ * ```js
29
+ * material.positionNode = positionBuffer.toAttribute();
30
+ * ```
31
+ * @augments InputNode
32
+ */
9
33
  class BufferAttributeNode extends InputNode {
10
34
 
11
35
  static get type() {
@@ -14,21 +38,82 @@ class BufferAttributeNode extends InputNode {
14
38
 
15
39
  }
16
40
 
41
+ /**
42
+ * Constructs a new buffer attribute node.
43
+ *
44
+ * @param {BufferAttribute|InterleavedBuffer|TypedArray} value - The attribute data.
45
+ * @param {String?} [bufferType=null] - The buffer type (e.g. `'vec3'`).
46
+ * @param {Number} [bufferStride=0] - The buffer stride.
47
+ * @param {Number} [bufferOffset=0] - The buffer offset.
48
+ */
17
49
  constructor( value, bufferType = null, bufferStride = 0, bufferOffset = 0 ) {
18
50
 
19
51
  super( value, bufferType );
20
52
 
53
+ /**
54
+ * This flag can be used for type testing.
55
+ *
56
+ * @type {Boolean}
57
+ * @readonly
58
+ * @default true
59
+ */
21
60
  this.isBufferNode = true;
22
61
 
62
+ /**
63
+ * The buffer type (e.g. `'vec3'`).
64
+ *
65
+ * @type {String}
66
+ * @default null
67
+ */
23
68
  this.bufferType = bufferType;
69
+
70
+ /**
71
+ * The buffer stride.
72
+ *
73
+ * @type {Number}
74
+ * @default 0
75
+ */
24
76
  this.bufferStride = bufferStride;
77
+
78
+ /**
79
+ * The buffer offset.
80
+ *
81
+ * @type {Number}
82
+ * @default 0
83
+ */
25
84
  this.bufferOffset = bufferOffset;
26
85
 
86
+ /**
87
+ * The usage property. Set this to `THREE.DynamicDrawUsage` via `.setUsage()`,
88
+ * if you are planning to update the attribute data per frame.
89
+ *
90
+ * @type {Number}
91
+ * @default StaticDrawUsage
92
+ */
27
93
  this.usage = StaticDrawUsage;
94
+
95
+ /**
96
+ * Whether the attribute is instanced or not.
97
+ *
98
+ * @type {Boolean}
99
+ * @default false
100
+ */
28
101
  this.instanced = false;
29
102
 
103
+ /**
104
+ * A reference to the buffer attribute.
105
+ *
106
+ * @type {BufferAttribute?}
107
+ * @default null
108
+ */
30
109
  this.attribute = null;
31
110
 
111
+ /**
112
+ * `BufferAttributeNode` sets this property to `true` by default.
113
+ *
114
+ * @type {Boolean}
115
+ * @default true
116
+ */
32
117
  this.global = true;
33
118
 
34
119
  if ( value && value.isBufferAttribute === true ) {
@@ -41,6 +126,13 @@ class BufferAttributeNode extends InputNode {
41
126
 
42
127
  }
43
128
 
129
+ /**
130
+ * This method is overwritten since the attribute data might be shared
131
+ * and thus the hash should be shared as well.
132
+ *
133
+ * @param {NodeBuilder} builder - The current node builder.
134
+ * @return {String} The hash.
135
+ */
44
136
  getHash( builder ) {
45
137
 
46
138
  if ( this.bufferStride === 0 && this.bufferOffset === 0 ) {
@@ -65,6 +157,13 @@ class BufferAttributeNode extends InputNode {
65
157
 
66
158
  }
67
159
 
160
+ /**
161
+ * This method is overwritten since the node type is inferred from
162
+ * the buffer attribute.
163
+ *
164
+ * @param {NodeBuilder} builder - The current node builder.
165
+ * @return {String} The node type.
166
+ */
68
167
  getNodeType( builder ) {
69
168
 
70
169
  if ( this.bufferType === null ) {
@@ -77,6 +176,13 @@ class BufferAttributeNode extends InputNode {
77
176
 
78
177
  }
79
178
 
179
+ /**
180
+ * Depending on which value was passed to the node, `setup()` behaves
181
+ * differently. If no instance of `BufferAttribute` was passed, the method
182
+ * creates an internal attribute and configures it respectively.
183
+ *
184
+ * @param {NodeBuilder} builder - The current node builder.
185
+ */
80
186
  setup( builder ) {
81
187
 
82
188
  if ( this.attribute !== null ) return;
@@ -97,6 +203,12 @@ class BufferAttributeNode extends InputNode {
97
203
 
98
204
  }
99
205
 
206
+ /**
207
+ * Generates the code snippet of the buffer attribute node.
208
+ *
209
+ * @param {NodeBuilder} builder - The current node builder.
210
+ * @return {String} The generated code snippet.
211
+ */
100
212
  generate( builder ) {
101
213
 
102
214
  const nodeType = this.getNodeType( builder );
@@ -124,12 +236,24 @@ class BufferAttributeNode extends InputNode {
124
236
 
125
237
  }
126
238
 
239
+ /**
240
+ * Overwrites the default implementation to return a fixed value `'bufferAttribute'`.
241
+ *
242
+ * @param {NodeBuilder} builder - The current node builder.
243
+ * @return {String} The input type.
244
+ */
127
245
  getInputType( /*builder*/ ) {
128
246
 
129
247
  return 'bufferAttribute';
130
248
 
131
249
  }
132
250
 
251
+ /**
252
+ * Sets the `usage` property to the given value.
253
+ *
254
+ * @param {Number} value - The usage to set.
255
+ * @return {BufferAttributeNode} A reference to this node.
256
+ */
133
257
  setUsage( value ) {
134
258
 
135
259
  this.usage = value;
@@ -144,6 +268,12 @@ class BufferAttributeNode extends InputNode {
144
268
 
145
269
  }
146
270
 
271
+ /**
272
+ * Sets the `instanced` property to the given value.
273
+ *
274
+ * @param {Number} value - The value to set.
275
+ * @return {BufferAttributeNode} A reference to this node.
276
+ */
147
277
  setInstanced( value ) {
148
278
 
149
279
  this.instanced = value;
@@ -156,10 +286,53 @@ class BufferAttributeNode extends InputNode {
156
286
 
157
287
  export default BufferAttributeNode;
158
288
 
159
- export const bufferAttribute = ( array, type, stride, offset ) => nodeObject( new BufferAttributeNode( array, type, stride, offset ) );
160
- export const dynamicBufferAttribute = ( array, type, stride, offset ) => bufferAttribute( array, type, stride, offset ).setUsage( DynamicDrawUsage );
161
-
162
- export const instancedBufferAttribute = ( array, type, stride, offset ) => bufferAttribute( array, type, stride, offset ).setInstanced( true );
163
- export const instancedDynamicBufferAttribute = ( array, type, stride, offset ) => dynamicBufferAttribute( array, type, stride, offset ).setInstanced( true );
289
+ /**
290
+ * TSL function for creating a buffer attribute node.
291
+ *
292
+ * @function
293
+ * @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.
294
+ * @param {String?} [type=null] - The buffer type (e.g. `'vec3'`).
295
+ * @param {Number} [stride=0] - The buffer stride.
296
+ * @param {Number} [offset=0] - The buffer offset.
297
+ * @returns {BufferAttributeNode}
298
+ */
299
+ export const bufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => nodeObject( new BufferAttributeNode( array, type, stride, offset ) );
300
+
301
+ /**
302
+ * TSL function for creating a buffer attribute node but with dynamic draw usage.
303
+ * Use this function if attribute data are updated per frame.
304
+ *
305
+ * @function
306
+ * @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.
307
+ * @param {String?} [type=null] - The buffer type (e.g. `'vec3'`).
308
+ * @param {Number} [stride=0] - The buffer stride.
309
+ * @param {Number} [offset=0] - The buffer offset.
310
+ * @returns {BufferAttributeNode}
311
+ */
312
+ export const dynamicBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => bufferAttribute( array, type, stride, offset ).setUsage( DynamicDrawUsage );
313
+
314
+ /**
315
+ * TSL function for creating a buffer attribute node but with enabled instancing
316
+ *
317
+ * @function
318
+ * @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.
319
+ * @param {String?} [type=null] - The buffer type (e.g. `'vec3'`).
320
+ * @param {Number} [stride=0] - The buffer stride.
321
+ * @param {Number} [offset=0] - The buffer offset.
322
+ * @returns {BufferAttributeNode}
323
+ */
324
+ export const instancedBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => bufferAttribute( array, type, stride, offset ).setInstanced( true );
325
+
326
+ /**
327
+ * TSL function for creating a buffer attribute node but with dynamic draw usage and enabled instancing
328
+ *
329
+ * @function
330
+ * @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.
331
+ * @param {String?} [type=null] - The buffer type (e.g. `'vec3'`).
332
+ * @param {Number} [stride=0] - The buffer stride.
333
+ * @param {Number} [offset=0] - The buffer offset.
334
+ * @returns {BufferAttributeNode}
335
+ */
336
+ export const instancedDynamicBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => dynamicBufferAttribute( array, type, stride, offset ).setInstanced( true );
164
337
 
165
338
  addMethodChaining( 'toAttribute', ( bufferNode ) => bufferAttribute( bufferNode.value ) );
@@ -1,6 +1,22 @@
1
1
  import UniformNode from '../core/UniformNode.js';
2
2
  import { nodeObject } from '../tsl/TSLBase.js';
3
3
 
4
+ /** @module BufferNode **/
5
+
6
+ /**
7
+ * A special type of uniform node which represents array-like data
8
+ * as uniform buffers. The access usually happens via `element()`
9
+ * which returns an instance of {@link ArrayElementNode}. For example:
10
+ *
11
+ * ```js
12
+ * const bufferNode = buffer( array, 'mat4', count );
13
+ * const matrixNode = bufferNode.element( index ); // access a matrix from the buffer
14
+ * ```
15
+ * In general, it is recommended to use the more managed {@link UniformArrayNode}
16
+ * since it handles more input types and automatically cares about buffer paddings.
17
+ *
18
+ * @augments module:UniformNode~UniformNode
19
+ */
4
20
  class BufferNode extends UniformNode {
5
21
 
6
22
  static get type() {
@@ -9,23 +25,61 @@ class BufferNode extends UniformNode {
9
25
 
10
26
  }
11
27
 
28
+ /**
29
+ * Constructs a new buffer node.
30
+ *
31
+ * @param {Array<Number>} value - Array-like buffer data.
32
+ * @param {String} bufferType - The data type of the buffer.
33
+ * @param {Number} [bufferCount=0] - The count of buffer elements.
34
+ */
12
35
  constructor( value, bufferType, bufferCount = 0 ) {
13
36
 
14
37
  super( value, bufferType );
15
38
 
39
+ /**
40
+ * This flag can be used for type testing.
41
+ *
42
+ * @type {Boolean}
43
+ * @readonly
44
+ * @default true
45
+ */
16
46
  this.isBufferNode = true;
17
47
 
48
+ /**
49
+ * The data type of the buffer.
50
+ *
51
+ * @type {String}
52
+ */
18
53
  this.bufferType = bufferType;
54
+
55
+ /**
56
+ * The uniform node that holds the value of the reference node.
57
+ *
58
+ * @type {Number}
59
+ * @default 0
60
+ */
19
61
  this.bufferCount = bufferCount;
20
62
 
21
63
  }
22
64
 
65
+ /**
66
+ * The data type of the buffer elements.
67
+ *
68
+ * @param {NodeBuilder} builder - The current node builder.
69
+ * @return {String} The element type.
70
+ */
23
71
  getElementType( builder ) {
24
72
 
25
73
  return this.getNodeType( builder );
26
74
 
27
75
  }
28
76
 
77
+ /**
78
+ * Overwrites the default implementation to return a fixed value `'buffer'`.
79
+ *
80
+ * @param {NodeBuilder} builder - The current node builder.
81
+ * @return {String} The input type.
82
+ */
29
83
  getInputType( /*builder*/ ) {
30
84
 
31
85
  return 'buffer';
@@ -36,4 +90,13 @@ class BufferNode extends UniformNode {
36
90
 
37
91
  export default BufferNode;
38
92
 
93
+ /**
94
+ * TSL function for creating a buffer node.
95
+ *
96
+ * @function
97
+ * @param {Array} value - Array-like buffer data.
98
+ * @param {String} type - The data type of a buffer element.
99
+ * @param {Number} count - The count of buffer elements.
100
+ * @returns {BufferNode}
101
+ */
39
102
  export const buffer = ( value, type, count ) => nodeObject( new BufferNode( value, type, count ) );
@@ -1,18 +1,49 @@
1
1
  import Node from '../core/Node.js';
2
2
  import { nodeProxy } from '../tsl/TSLBase.js';
3
3
 
4
+ /** @module BuiltinNode **/
5
+
6
+ /**
7
+ * The node allows to set values for built-in shader variables. That is
8
+ * required for features like hardware-accelerated vertex clipping.
9
+ *
10
+ * @augments Node
11
+ */
4
12
  class BuiltinNode extends Node {
5
13
 
14
+ /**
15
+ * Constructs a new builtin node.
16
+ *
17
+ * @param {String} name - The name of the built-in shader variable.
18
+ */
6
19
  constructor( name ) {
7
20
 
8
21
  super( 'float' );
9
22
 
23
+ /**
24
+ * The name of the built-in shader variable.
25
+ *
26
+ * @type {String}
27
+ */
10
28
  this.name = name;
11
29
 
30
+ /**
31
+ * This flag can be used for type testing.
32
+ *
33
+ * @type {Boolean}
34
+ * @readonly
35
+ * @default true
36
+ */
12
37
  this.isBuiltinNode = true;
13
38
 
14
39
  }
15
40
 
41
+ /**
42
+ * Generates the code snippet of the builtin node.
43
+ *
44
+ * @param {NodeBuilder} builder - The current node builder.
45
+ * @return {String} The generated code snippet.
46
+ */
16
47
  generate( /* builder */ ) {
17
48
 
18
49
  return this.name;
@@ -23,4 +54,11 @@ class BuiltinNode extends Node {
23
54
 
24
55
  export default BuiltinNode;
25
56
 
57
+ /**
58
+ * TSL function for creating a builtin node.
59
+ *
60
+ * @function
61
+ * @param {String} name - The name of the built-in shader variable.
62
+ * @returns {BuiltinNode}
63
+ */
26
64
  export const builtin = nodeProxy( BuiltinNode );
@@ -2,11 +2,60 @@ import { uniform } from '../core/UniformNode.js';
2
2
  import { renderGroup } from '../core/UniformGroupNode.js';
3
3
  import { Vector3 } from '../../math/Vector3.js';
4
4
 
5
+ /** @module Camera **/
6
+
7
+ /**
8
+ * TSL object that represents the `near` value of the camera used for the current render.
9
+ *
10
+ * @type {UniformNode<float>}
11
+ */
5
12
  export const cameraNear = /*@__PURE__*/ uniform( 'float' ).label( 'cameraNear' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.near );
13
+
14
+ /**
15
+ * TSL object that represents the `far` value of the camera used for the current render.
16
+ *
17
+ * @type {UniformNode<float>}
18
+ */
6
19
  export const cameraFar = /*@__PURE__*/ uniform( 'float' ).label( 'cameraFar' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.far );
20
+
21
+ /**
22
+ * TSL object that represents the projection matrix of the camera used for the current render.
23
+ *
24
+ * @type {UniformNode<mat4>}
25
+ */
7
26
  export const cameraProjectionMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraProjectionMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrix );
27
+
28
+ /**
29
+ * TSL object that represents the inverse projection matrix of the camera used for the current render.
30
+ *
31
+ * @type {UniformNode<mat4>}
32
+ */
8
33
  export const cameraProjectionMatrixInverse = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraProjectionMatrixInverse' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrixInverse );
34
+
35
+ /**
36
+ * TSL object that represents the view matrix of the camera used for the current render.
37
+ *
38
+ * @type {UniformNode<mat4>}
39
+ */
9
40
  export const cameraViewMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraViewMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorldInverse );
41
+
42
+ /**
43
+ * TSL object that represents the world matrix of the camera used for the current render.
44
+ *
45
+ * @type {UniformNode<mat4>}
46
+ */
10
47
  export const cameraWorldMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraWorldMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorld );
48
+
49
+ /**
50
+ * TSL object that represents the normal matrix of the camera used for the current render.
51
+ *
52
+ * @type {UniformNode<mat3>}
53
+ */
11
54
  export const cameraNormalMatrix = /*@__PURE__*/ uniform( 'mat3' ).label( 'cameraNormalMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.normalMatrix );
55
+
56
+ /**
57
+ * TSL object that represents the position in world space of the camera used for the current render.
58
+ *
59
+ * @type {UniformNode<vec3>}
60
+ */
12
61
  export const cameraPosition = /*@__PURE__*/ uniform( new Vector3() ).label( 'cameraPosition' ).setGroup( renderGroup ).onRenderUpdate( ( { camera }, self ) => self.value.setFromMatrixPosition( camera.matrixWorld ) );