super-three 0.171.0 → 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
@@ -6,11 +6,20 @@ import { nodeImmutable, float, vec2, vec3, mat2 } from '../tsl/TSLBase.js';
6
6
  import { uniform } from '../core/UniformNode.js';
7
7
  import { normalMap } from '../display/NormalMapNode.js';
8
8
  import { bumpMap } from '../display/BumpMapNode.js';
9
-
10
9
  import { Vector2 } from '../../math/Vector2.js';
11
10
 
11
+ /** @module MaterialNode **/
12
+
12
13
  const _propertyCache = new Map();
13
14
 
15
+ /**
16
+ * This class should simplify the node access to material properties.
17
+ * It internal uses reference nodes to make sure changes to material
18
+ * properties are automatically reflected to predefined TSL objects
19
+ * like e.g. `materialColor`.
20
+ *
21
+ * @augments Node
22
+ */
14
23
  class MaterialNode extends Node {
15
24
 
16
25
  static get type() {
@@ -19,14 +28,31 @@ class MaterialNode extends Node {
19
28
 
20
29
  }
21
30
 
31
+ /**
32
+ * Constructs a new material node.
33
+ *
34
+ * @param {String} scope - The scope defines what kind of material property is referred by the node.
35
+ */
22
36
  constructor( scope ) {
23
37
 
24
38
  super();
25
39
 
40
+ /**
41
+ * The scope defines what material property is referred by the node.
42
+ *
43
+ * @type {String}
44
+ */
26
45
  this.scope = scope;
27
46
 
28
47
  }
29
48
 
49
+ /**
50
+ * Returns a cached reference node for the given property and type.
51
+ *
52
+ * @param {String} property - The name of the material property.
53
+ * @param {String} type - The uniform type of the property.
54
+ * @return {MaterialReferenceNode} A material reference node representing the property access.
55
+ */
30
56
  getCache( property, type ) {
31
57
 
32
58
  let node = _propertyCache.get( property );
@@ -43,24 +69,49 @@ class MaterialNode extends Node {
43
69
 
44
70
  }
45
71
 
72
+ /**
73
+ * Returns a float-typed material reference node for the given property name.
74
+ *
75
+ * @param {String} property - The name of the material property.
76
+ * @return {MaterialReferenceNode<float>} A material reference node representing the property access.
77
+ */
46
78
  getFloat( property ) {
47
79
 
48
80
  return this.getCache( property, 'float' );
49
81
 
50
82
  }
51
83
 
84
+ /**
85
+ * Returns a color-typed material reference node for the given property name.
86
+ *
87
+ * @param {String} property - The name of the material property.
88
+ * @return {MaterialReferenceNode<color>} A material reference node representing the property access.
89
+ */
52
90
  getColor( property ) {
53
91
 
54
92
  return this.getCache( property, 'color' );
55
93
 
56
94
  }
57
95
 
96
+ /**
97
+ * Returns a texture-typed material reference node for the given property name.
98
+ *
99
+ * @param {String} property - The name of the material property.
100
+ * @return {MaterialReferenceNode} A material reference node representing the property access.
101
+ */
58
102
  getTexture( property ) {
59
103
 
60
104
  return this.getCache( property === 'map' ? 'map' : property + 'Map', 'texture' );
61
105
 
62
106
  }
63
107
 
108
+ /**
109
+ * The node setup is done depending on the selected scope. Multiple material properties
110
+ * might be grouped into a single node composition if they logically belong together.
111
+ *
112
+ * @param {NodeBuilder} builder - The current node builder.
113
+ * @return {Node} The node representing the selected scope.
114
+ */
64
115
  setup( builder ) {
65
116
 
66
117
  const material = builder.context.material;
@@ -110,15 +161,15 @@ class MaterialNode extends Node {
110
161
 
111
162
  } else if ( scope === MaterialNode.SPECULAR_INTENSITY ) {
112
163
 
113
- const specularIntensity = this.getFloat( scope );
164
+ const specularIntensityNode = this.getFloat( scope );
114
165
 
115
- if ( material.specularMap ) {
166
+ if ( material.specularIntensityMap && material.specularIntensityMap.isTexture === true ) {
116
167
 
117
- node = specularIntensity.mul( this.getTexture( scope ).a );
168
+ node = specularIntensityNode.mul( this.getTexture( scope ).a );
118
169
 
119
170
  } else {
120
171
 
121
- node = specularIntensity;
172
+ node = specularIntensityNode;
122
173
 
123
174
  }
124
175
 
@@ -333,7 +384,7 @@ class MaterialNode extends Node {
333
384
 
334
385
  node = this.getTexture( scope ).rgb.mul( this.getFloat( 'lightMapIntensity' ) );
335
386
 
336
- } else if ( scope === MaterialNode.AO_MAP ) {
387
+ } else if ( scope === MaterialNode.AO ) {
337
388
 
338
389
  node = this.getTexture( scope ).r.sub( 1.0 ).mul( this.getFloat( 'aoMapIntensity' ) ).add( 1.0 );
339
390
 
@@ -387,49 +438,292 @@ MaterialNode.LINE_DASH_OFFSET = 'dashOffset';
387
438
  MaterialNode.POINT_WIDTH = 'pointWidth';
388
439
  MaterialNode.DISPERSION = 'dispersion';
389
440
  MaterialNode.LIGHT_MAP = 'light';
390
- MaterialNode.AO_MAP = 'ao';
441
+ MaterialNode.AO = 'ao';
391
442
 
392
443
  export default MaterialNode;
393
444
 
445
+ /**
446
+ * TSL object that represents alpha test of the current material.
447
+ *
448
+ * @type {Node<float>}
449
+ */
394
450
  export const materialAlphaTest = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.ALPHA_TEST );
451
+
452
+ /**
453
+ * TSL object that represents the diffuse color of the current material.
454
+ * The value is composed via `color` * `map`.
455
+ *
456
+ * @type {Node<vec3>}
457
+ */
395
458
  export const materialColor = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.COLOR );
459
+
460
+ /**
461
+ * TSL object that represents the shininess of the current material.
462
+ *
463
+ * @type {Node<float>}
464
+ */
396
465
  export const materialShininess = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.SHININESS );
466
+
467
+ /**
468
+ * TSL object that represents the emissive color of the current material.
469
+ * The value is composed via `emissive` * `emissiveIntensity` * `emissiveMap`.
470
+ *
471
+ * @type {Node<vec3>}
472
+ */
397
473
  export const materialEmissive = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.EMISSIVE );
474
+
475
+ /**
476
+ * TSL object that represents the opacity of the current material.
477
+ * The value is composed via `opacity` * `alphaMap`.
478
+ *
479
+ * @type {Node<float>}
480
+ */
398
481
  export const materialOpacity = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.OPACITY );
482
+
483
+ /**
484
+ * TSL object that represents the specular of the current material.
485
+ *
486
+ * @type {Node<vec3>}
487
+ */
399
488
  export const materialSpecular = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.SPECULAR );
400
489
 
490
+ /**
491
+ * TSL object that represents the specular intensity of the current material.
492
+ * The value is composed via `specularIntensity` * `specularMap.a`.
493
+ *
494
+ * @type {Node<float>}
495
+ */
401
496
  export const materialSpecularIntensity = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.SPECULAR_INTENSITY );
497
+
498
+ /**
499
+ * TSL object that represents the specular color of the current material.
500
+ * The value is composed via `specularColor` * `specularMap.rgb`.
501
+ *
502
+ * @type {Node<vec3>}
503
+ */
402
504
  export const materialSpecularColor = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.SPECULAR_COLOR );
403
505
 
506
+ /**
507
+ * TSL object that represents the specular strength of the current material.
508
+ * The value is composed via `specularMap.r`.
509
+ *
510
+ * @type {Node<float>}
511
+ */
404
512
  export const materialSpecularStrength = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.SPECULAR_STRENGTH );
513
+
514
+ /**
515
+ * TSL object that represents the reflectivity of the current material.
516
+ *
517
+ * @type {Node<float>}
518
+ */
405
519
  export const materialReflectivity = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.REFLECTIVITY );
520
+
521
+ /**
522
+ * TSL object that represents the roughness of the current material.
523
+ * The value is composed via `roughness` * `roughnessMap.g`
524
+ *
525
+ * @type {Node<float>}
526
+ */
406
527
  export const materialRoughness = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.ROUGHNESS );
528
+
529
+ /**
530
+ * TSL object that represents the metalness of the current material.
531
+ * The value is composed via `metalness` * `metalnessMap.b`
532
+ *
533
+ * @type {Node<float>}
534
+ */
407
535
  export const materialMetalness = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.METALNESS );
536
+
537
+ /**
538
+ * TSL object that represents the normal of the current material.
539
+ * The value will be either `normalMap` * `normalScale`, `bumpMap` * `bumpScale` or `normalView`.
540
+ *
541
+ * @type {Node<vec3>}
542
+ */
408
543
  export const materialNormal = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.NORMAL ).context( { getUV: null } );
544
+
545
+ /**
546
+ * TSL object that represents the clearcoat of the current material.
547
+ * The value is composed via `clearcoat` * `clearcoatMap.r`
548
+ *
549
+ * @type {Node<float>}
550
+ */
409
551
  export const materialClearcoat = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.CLEARCOAT );
552
+
553
+ /**
554
+ * TSL object that represents the clearcoat roughness of the current material.
555
+ * The value is composed via `clearcoatRoughness` * `clearcoatRoughnessMap.r`
556
+ *
557
+ * @type {Node<float>}
558
+ */
410
559
  export const materialClearcoatRoughness = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.CLEARCOAT_ROUGHNESS );
560
+
561
+ /**
562
+ * TSL object that represents the clearcoat normal of the current material.
563
+ * The value will be either `clearcoatNormalMap` or `normalView`.
564
+ *
565
+ * @type {Node<vec3>}
566
+ */
411
567
  export const materialClearcoatNormal = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.CLEARCOAT_NORMAL ).context( { getUV: null } );
568
+
569
+ /**
570
+ * TSL object that represents the rotation of the current sprite material.
571
+ *
572
+ * @type {Node<float>}
573
+ */
412
574
  export const materialRotation = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.ROTATION );
575
+
576
+ /**
577
+ * TSL object that represents the sheen color of the current material.
578
+ * The value is composed via `sheen` * `sheenColor` * `sheenColorMap`.
579
+ *
580
+ * @type {Node<vec3>}
581
+ */
413
582
  export const materialSheen = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.SHEEN );
583
+
584
+ /**
585
+ * TSL object that represents the sheen roughness of the current material.
586
+ * The value is composed via `sheenRoughness` * `sheenRoughnessMap.a` .
587
+ *
588
+ * @type {Node<float>}
589
+ */
414
590
  export const materialSheenRoughness = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.SHEEN_ROUGHNESS );
591
+
592
+ /**
593
+ * TSL object that represents the anisotropy of the current material.
594
+ *
595
+ * @type {Node<vec2>}
596
+ */
415
597
  export const materialAnisotropy = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.ANISOTROPY );
598
+
599
+ /**
600
+ * TSL object that represents the iridescence of the current material.
601
+ *
602
+ * @type {Node<float>}
603
+ */
416
604
  export const materialIridescence = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE );
605
+
606
+ /**
607
+ * TSL object that represents the iridescence IOR of the current material.
608
+ *
609
+ * @type {Node<float>}
610
+ */
417
611
  export const materialIridescenceIOR = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE_IOR );
612
+
613
+ /**
614
+ * TSL object that represents the iridescence thickness of the current material.
615
+ *
616
+ * @type {Node<float>}
617
+ */
418
618
  export const materialIridescenceThickness = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE_THICKNESS );
619
+
620
+ /**
621
+ * TSL object that represents the transmission of the current material.
622
+ * The value is composed via `transmission` * `transmissionMap.r`.
623
+ *
624
+ * @type {Node<float>}
625
+ */
419
626
  export const materialTransmission = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.TRANSMISSION );
627
+
628
+ /**
629
+ * TSL object that represents the thickness of the current material.
630
+ * The value is composed via `thickness` * `thicknessMap.g`.
631
+ *
632
+ * @type {Node<float>}
633
+ */
420
634
  export const materialThickness = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.THICKNESS );
635
+
636
+ /**
637
+ * TSL object that represents the IOR of the current material.
638
+ *
639
+ * @type {Node<float>}
640
+ */
421
641
  export const materialIOR = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.IOR );
642
+
643
+ /**
644
+ * TSL object that represents the attenuation distance of the current material.
645
+ *
646
+ * @type {Node<float>}
647
+ */
422
648
  export const materialAttenuationDistance = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.ATTENUATION_DISTANCE );
649
+
650
+ /**
651
+ * TSL object that represents the attenuation color of the current material.
652
+ *
653
+ * @type {Node<vec3>}
654
+ */
423
655
  export const materialAttenuationColor = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.ATTENUATION_COLOR );
656
+
657
+ /**
658
+ * TSL object that represents the scale of the current dashed line material.
659
+ *
660
+ * @type {Node<float>}
661
+ */
424
662
  export const materialLineScale = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.LINE_SCALE );
663
+
664
+ /**
665
+ * TSL object that represents the dash size of the current dashed line material.
666
+ *
667
+ * @type {Node<float>}
668
+ */
425
669
  export const materialLineDashSize = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.LINE_DASH_SIZE );
670
+
671
+ /**
672
+ * TSL object that represents the gap size of the current dashed line material.
673
+ *
674
+ * @type {Node<float>}
675
+ */
426
676
  export const materialLineGapSize = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.LINE_GAP_SIZE );
677
+
678
+ /**
679
+ * TSL object that represents the line width of the current line material.
680
+ *
681
+ * @type {Node<float>}
682
+ */
427
683
  export const materialLineWidth = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.LINE_WIDTH );
684
+
685
+ /**
686
+ * TSL object that represents the dash offset of the current line material.
687
+ *
688
+ * @type {Node<float>}
689
+ */
428
690
  export const materialLineDashOffset = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.LINE_DASH_OFFSET );
691
+
692
+ /**
693
+ * TSL object that represents the point width of the current points material.
694
+ *
695
+ * @type {Node<float>}
696
+ */
429
697
  export const materialPointWidth = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.POINT_WIDTH );
698
+
699
+ /**
700
+ * TSL object that represents the dispersion of the current material.
701
+ *
702
+ * @type {Node<float>}
703
+ */
430
704
  export const materialDispersion = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.DISPERSION );
705
+
706
+ /**
707
+ * TSL object that represents the light map of the current material.
708
+ * The value is composed via `lightMapIntensity` * `lightMap.rgb`.
709
+ *
710
+ * @type {Node<vec3>}
711
+ */
431
712
  export const materialLightMap = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.LIGHT_MAP );
432
- export const materialAOMap = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.AO_MAP );
713
+
714
+ /**
715
+ * TSL object that represents the ambient occlusion map of the current material.
716
+ * The value is composed via `aoMap.r` - 1 * `aoMapIntensity` + 1.
717
+ *
718
+ * @type {Node<float>}
719
+ */
720
+ export const materialAO = /*@__PURE__*/ nodeImmutable( MaterialNode, MaterialNode.AO );
721
+
722
+ /**
723
+ * TSL object that represents the anisotropy vector of the current material.
724
+ *
725
+ * @type {Node<vec2>}
726
+ */
433
727
  export const materialAnisotropyVector = /*@__PURE__*/ uniform( new Vector2() ).onReference( function ( frame ) {
434
728
 
435
729
  return frame.material;
@@ -1,3 +1,10 @@
1
1
  import { uniform } from '../core/UniformNode.js';
2
2
 
3
+ /** @module MaterialProperties **/
4
+
5
+ /**
6
+ * TSL object that represents the refraction ratio of the material used for rendering the current object.
7
+ *
8
+ * @type {UniformNode<float>}
9
+ */
3
10
  export const materialRefractionRatio = /*@__PURE__*/ uniform( 0 ).onReference( ( { material } ) => material ).onRenderUpdate( ( { material } ) => material.refractionRatio );
@@ -1,8 +1,19 @@
1
1
  import ReferenceNode from './ReferenceNode.js';
2
- //import { renderGroup } from '../core/UniformGroupNode.js';
3
- //import { NodeUpdateType } from '../core/constants.js';
4
2
  import { nodeObject } from '../tsl/TSLBase.js';
5
3
 
4
+ /** @module MaterialReferenceNode **/
5
+
6
+ /**
7
+ * This node is a special type of reference node which is intended
8
+ * for linking material properties with node values.
9
+ * ```js
10
+ * const opacityNode = materialReference( 'opacity', 'float', material );
11
+ * ```
12
+ * When changing `material.opacity`, the node value of `opacityNode` will
13
+ * automatically be updated.
14
+ *
15
+ * @augments module:ReferenceNode~ReferenceNode
16
+ */
6
17
  class MaterialReferenceNode extends ReferenceNode {
7
18
 
8
19
  static get type() {
@@ -11,26 +22,45 @@ class MaterialReferenceNode extends ReferenceNode {
11
22
 
12
23
  }
13
24
 
25
+ /**
26
+ * Constructs a new material reference node.
27
+ *
28
+ * @param {String} property - The name of the property the node refers to.
29
+ * @param {String} inputType - The uniform type that should be used to represent the property value.
30
+ * @param {Material?} [material=null] - The material the property belongs to. When no material is set,
31
+ * the node refers to the material of the current rendered object.
32
+ */
14
33
  constructor( property, inputType, material = null ) {
15
34
 
16
35
  super( property, inputType, material );
17
36
 
37
+ /**
38
+ * The material the property belongs to. When no material is set,
39
+ * the node refers to the material of the current rendered object.
40
+ *
41
+ * @type {Material?}
42
+ * @default null
43
+ */
18
44
  this.material = material;
19
45
 
20
- //this.updateType = NodeUpdateType.RENDER;
21
-
46
+ /**
47
+ * This flag can be used for type testing.
48
+ *
49
+ * @type {Boolean}
50
+ * @readonly
51
+ * @default true
52
+ */
22
53
  this.isMaterialReferenceNode = true;
23
54
 
24
55
  }
25
56
 
26
- /*setNodeType( node ) {
27
-
28
- super.setNodeType( node );
29
-
30
- this.node.groupNode = renderGroup;
31
-
32
- }*/
33
-
57
+ /**
58
+ * Updates the reference based on the given state. The state is only evaluated
59
+ * {@link module:MaterialReferenceNode~MaterialReferenceNode#material} is not set.
60
+ *
61
+ * @param {(NodeFrame|NodeBuilder)} state - The current state.
62
+ * @return {Object} The updated reference.
63
+ */
34
64
  updateReference( state ) {
35
65
 
36
66
  this.reference = this.material !== null ? this.material : state.material;
@@ -43,4 +73,14 @@ class MaterialReferenceNode extends ReferenceNode {
43
73
 
44
74
  export default MaterialReferenceNode;
45
75
 
46
- export const materialReference = ( name, type, material ) => nodeObject( new MaterialReferenceNode( name, type, material ) );
76
+ /**
77
+ * TSL function for creating a material reference node.
78
+ *
79
+ * @function
80
+ * @param {String} name - The name of the property the node refers to.
81
+ * @param {String} type - The uniform type that should be used to represent the property value.
82
+ * @param {Material?} [material=null] - The material the property belongs to.
83
+ * When no material is set, the node refers to the material of the current rendered object.
84
+ * @returns {MaterialReferenceNode}
85
+ */
86
+ export const materialReference = ( name, type, material = null ) => nodeObject( new MaterialReferenceNode( name, type, material ) );
@@ -6,6 +6,16 @@ import { Matrix4 } from '../../math/Matrix4.js';
6
6
  import { cameraViewMatrix } from './Camera.js';
7
7
  import { Matrix3 } from '../../math/Matrix3.js';
8
8
 
9
+ /** @module ModelNode **/
10
+
11
+ /**
12
+ * This type of node is a specialized version of `Object3DNode`
13
+ * with larger set of model related metrics. Unlike `Object3DNode`,
14
+ * `ModelNode` extracts the reference to the 3D object from the
15
+ * current node frame state.
16
+ *
17
+ * @augments module:Object3DNode~Object3DNode
18
+ */
9
19
  class ModelNode extends Object3DNode {
10
20
 
11
21
  static get type() {
@@ -14,12 +24,23 @@ class ModelNode extends Object3DNode {
14
24
 
15
25
  }
16
26
 
27
+ /**
28
+ * Constructs a new object model node.
29
+ *
30
+ * @param {('position'|'viewPosition'|'direction'|'scale'|'worldMatrix')} scope - The node represents a different type of transformation depending on the scope.
31
+ */
17
32
  constructor( scope ) {
18
33
 
19
34
  super( scope );
20
35
 
21
36
  }
22
37
 
38
+ /**
39
+ * Extracts the model reference from the frame state and then
40
+ * updates the uniform value depending on the scope.
41
+ *
42
+ * @param {NodeFrame} frame - The current node frame.
43
+ */
23
44
  update( frame ) {
24
45
 
25
46
  this.object3d = frame.object;
@@ -32,16 +53,84 @@ class ModelNode extends Object3DNode {
32
53
 
33
54
  export default ModelNode;
34
55
 
56
+ /**
57
+ * TSL object that represents the object's direction in world space.
58
+ *
59
+ * @type {ModelNode<vec3>}
60
+ */
35
61
  export const modelDirection = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.DIRECTION );
62
+
63
+ /**
64
+ * TSL object that represents the object's world matrix.
65
+ *
66
+ * @type {ModelNode<mat4>}
67
+ */
36
68
  export const modelWorldMatrix = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX );
69
+
70
+ /**
71
+ * TSL object that represents the object's position in world space.
72
+ *
73
+ * @type {ModelNode<vec3>}
74
+ */
37
75
  export const modelPosition = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.POSITION );
76
+
77
+ /**
78
+ * TSL object that represents the object's scale in world space.
79
+ *
80
+ * @type {ModelNode<vec3>}
81
+ */
38
82
  export const modelScale = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.SCALE );
83
+
84
+ /**
85
+ * TSL object that represents the object's position in view/camera space.
86
+ *
87
+ * @type {ModelNode<vec3>}
88
+ */
39
89
  export const modelViewPosition = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.VIEW_POSITION );
90
+
91
+ /**
92
+ * TSL object that represents the object's normal matrix.
93
+ *
94
+ * @type {UniformNode<mat3>}
95
+ */
40
96
  export const modelNormalMatrix = /*@__PURE__*/ uniform( new Matrix3() ).onObjectUpdate( ( { object }, self ) => self.value.getNormalMatrix( object.matrixWorld ) );
97
+
98
+ /**
99
+ * TSL object that represents the object's inverse world matrix.
100
+ *
101
+ * @type {UniformNode<mat4>}
102
+ */
41
103
  export const modelWorldMatrixInverse = /*@__PURE__*/ uniform( new Matrix4() ).onObjectUpdate( ( { object }, self ) => self.value.copy( object.matrixWorld ).invert() );
42
- export const modelViewMatrix = /*@__PURE__*/ cameraViewMatrix.mul( modelWorldMatrix ).toVar( 'modelViewMatrix' );
43
104
 
44
- export const highPrecisionModelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
105
+ /**
106
+ * TSL object that represents the object's model view matrix.
107
+ *
108
+ * @type {Node<mat4>}
109
+ */
110
+ export const modelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
111
+
112
+ return builder.renderer.nodes.modelViewMatrix || mediumpModelViewMatrix;
113
+
114
+ } ).once() )().toVar( 'modelViewMatrix' );
115
+
116
+ // GPU Precision
117
+
118
+ /**
119
+ * TSL object that represents the object's model view in `mediump` precision.
120
+ *
121
+ * @type {Node<mat4>}
122
+ */
123
+ export const mediumpModelViewMatrix = /*@__PURE__*/ cameraViewMatrix.mul( modelWorldMatrix );
124
+
125
+ // CPU Precision
126
+
127
+ /**
128
+ * TSL object that represents the object's model view in `highp` precision
129
+ * which is achieved by computing the matrix in JS and not in the shader.
130
+ *
131
+ * @type {Node<mat4>}
132
+ */
133
+ export const highpModelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
45
134
 
46
135
  builder.context.isHighPrecisionModelViewMatrix = true;
47
136
 
@@ -51,9 +140,15 @@ export const highPrecisionModelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
51
140
 
52
141
  } );
53
142
 
54
- } ).once() )().toVar( 'highPrecisionModelViewMatrix' );
143
+ } ).once() )().toVar( 'highpModelViewMatrix' );
55
144
 
56
- export const highPrecisionModelNormalViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
145
+ /**
146
+ * TSL object that represents the object's model normal view in `highp` precision
147
+ * which is achieved by computing the matrix in JS and not in the shader.
148
+ *
149
+ * @type {Node<mat3>}
150
+ */
151
+ export const highpModelNormalViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
57
152
 
58
153
  const isHighPrecisionModelViewMatrix = builder.context.isHighPrecisionModelViewMatrix;
59
154
 
@@ -69,4 +164,4 @@ export const highPrecisionModelNormalViewMatrix = /*@__PURE__*/ ( Fn( ( builder
69
164
 
70
165
  } );
71
166
 
72
- } ).once() )().toVar( 'highPrecisionModelNormalMatrix' );
167
+ } ).once() )().toVar( 'highpModelNormalViewMatrix' );