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
@@ -1,8 +1,52 @@
1
1
  import { sub, mul, div, add } from './OperatorNode.js';
2
2
  import { PI, pow, sin } from './MathNode.js';
3
3
 
4
- // remapping functions https://iquilezles.org/articles/functions/
4
+ /** @module MathUtils **/
5
+
6
+ /**
7
+ * A function that remaps the `[0,1]` interval into the `[0,1]` interval.
8
+ * The corners are mapped to `0` and the center to `1`.
9
+ * Reference: {@link https://iquilezles.org/articles/functions/}.
10
+ *
11
+ * @method
12
+ * @param {Node<float>} x - The value to remap.
13
+ * @param {Node<float>} k - Allows to control the remapping functions shape by rising the parabola to a power `k`.
14
+ * @return {Node<float>} The remapped value.
15
+ */
5
16
  export const parabola = ( x, k ) => pow( mul( 4.0, x.mul( sub( 1.0, x ) ) ), k );
17
+
18
+ /**
19
+ * A function that remaps the `[0,1]` interval into the `[0,1]` interval.
20
+ * Expands the sides and compresses the center, and keeps `0.5` mapped to `0.5`.
21
+ * Reference: {@link https://iquilezles.org/articles/functions/}.
22
+ *
23
+ * @method
24
+ * @param {Node<float>} x - The value to remap.
25
+ * @param {Node<float>} k - `k=1` is the identity curve,`k<1` produces the classic `gain()` shape, and `k>1` produces "s" shaped curves.
26
+ * @return {Node<float>} The remapped value.
27
+ */
6
28
  export const gain = ( x, k ) => x.lessThan( 0.5 ) ? parabola( x.mul( 2.0 ), k ).div( 2.0 ) : sub( 1.0, parabola( mul( sub( 1.0, x ), 2.0 ), k ).div( 2.0 ) );
29
+
30
+ /**
31
+ * A function that remaps the `[0,1]` interval into the `[0,1]` interval.
32
+ * A generalization of the `parabola()`. Keeps the corners mapped to 0 but allows the control of the shape one either side of the curve.
33
+ * Reference: {@link https://iquilezles.org/articles/functions/}.
34
+ *
35
+ * @method
36
+ * @param {Node<float>} x - The value to remap.
37
+ * @param {Node<float>} a - First control parameter.
38
+ * @param {Node<float>} b - Second control parameter.
39
+ * @return {Node<float>} The remapped value.
40
+ */
7
41
  export const pcurve = ( x, a, b ) => pow( div( pow( x, a ), add( pow( x, a ), pow( sub( 1.0, x ), b ) ) ), 1.0 / a );
42
+
43
+ /**
44
+ * A phase shifted sinus curve that starts at zero and ends at zero, with bouncing behavior.
45
+ * Reference: {@link https://iquilezles.org/articles/functions/}.
46
+ *
47
+ * @method
48
+ * @param {Node<float>} x - The value to compute the sin for.
49
+ * @param {Node<float>} k - Controls the amount of bounces.
50
+ * @return {Node<float>} The result value.
51
+ */
8
52
  export const sinc = ( x, k ) => sin( PI.mul( k.mul( x ).sub( 1.0 ) ) ).div( PI.mul( k.mul( x ).sub( 1.0 ) ) );
@@ -1,6 +1,14 @@
1
1
  import TempNode from '../core/TempNode.js';
2
2
  import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
3
3
 
4
+ /** @module OperatorNode **/
5
+
6
+ /**
7
+ * This node represents basic mathematical and logical operations like addition,
8
+ * subtraction or comparisons (e.g. `equal()`).
9
+ *
10
+ * @augments TempNode
11
+ */
4
12
  class OperatorNode extends TempNode {
5
13
 
6
14
  static get type() {
@@ -9,6 +17,14 @@ class OperatorNode extends TempNode {
9
17
 
10
18
  }
11
19
 
20
+ /**
21
+ * Constructs a new operator node.
22
+ *
23
+ * @param {String} op - The operator.
24
+ * @param {Node} aNode - The first input.
25
+ * @param {Node} bNode - The second input.
26
+ * @param {...Node} params - Additional input parameters.
27
+ */
12
28
  constructor( op, aNode, bNode, ...params ) {
13
29
 
14
30
  super();
@@ -28,12 +44,37 @@ class OperatorNode extends TempNode {
28
44
 
29
45
  }
30
46
 
47
+ /**
48
+ * The operator.
49
+ *
50
+ * @type {String}
51
+ */
31
52
  this.op = op;
53
+
54
+ /**
55
+ * The first input.
56
+ *
57
+ * @type {Node}
58
+ */
32
59
  this.aNode = aNode;
60
+
61
+ /**
62
+ * The second input.
63
+ *
64
+ * @type {Node}
65
+ */
33
66
  this.bNode = bNode;
34
67
 
35
68
  }
36
69
 
70
+ /**
71
+ * This method is overwritten since the node type is inferred from the operator
72
+ * and the input node types.
73
+ *
74
+ * @param {NodeBuilder} builder - The current node builder.
75
+ * @param {String} output - The current output string.
76
+ * @return {String} The node type.
77
+ */
37
78
  getNodeType( builder, output ) {
38
79
 
39
80
  const op = this.op;
@@ -264,26 +305,218 @@ class OperatorNode extends TempNode {
264
305
 
265
306
  export default OperatorNode;
266
307
 
308
+ /**
309
+ * Returns the addition of two or more value.
310
+ *
311
+ * @function
312
+ * @param {Node} aNode - The first input.
313
+ * @param {Node} bNode - The second input.
314
+ * @param {...Node} params - Additional input parameters.
315
+ * @returns {OperatorNode}
316
+ */
267
317
  export const add = /*@__PURE__*/ nodeProxy( OperatorNode, '+' );
318
+
319
+ /**
320
+ * Returns the subtraction of two or more value.
321
+ *
322
+ * @function
323
+ * @param {Node} aNode - The first input.
324
+ * @param {Node} bNode - The second input.
325
+ * @param {...Node} params - Additional input parameters.
326
+ * @returns {OperatorNode}
327
+ */
268
328
  export const sub = /*@__PURE__*/ nodeProxy( OperatorNode, '-' );
329
+
330
+ /**
331
+ * Returns the multiplication of two or more value.
332
+ *
333
+ * @function
334
+ * @param {Node} aNode - The first input.
335
+ * @param {Node} bNode - The second input.
336
+ * @param {...Node} params - Additional input parameters.
337
+ * @returns {OperatorNode}
338
+ */
269
339
  export const mul = /*@__PURE__*/ nodeProxy( OperatorNode, '*' );
340
+
341
+ /**
342
+ * Returns the division of two or more value.
343
+ *
344
+ * @function
345
+ * @param {Node} aNode - The first input.
346
+ * @param {Node} bNode - The second input.
347
+ * @param {...Node} params - Additional input parameters.
348
+ * @returns {OperatorNode}
349
+ */
270
350
  export const div = /*@__PURE__*/ nodeProxy( OperatorNode, '/' );
351
+
352
+ /**
353
+ * Computes the remainder of dividing the first node by the second, for integer values.
354
+ *
355
+ * @function
356
+ * @param {Node} aNode - The first input.
357
+ * @param {Node} bNode - The second input.
358
+ * @returns {OperatorNode}
359
+ */
271
360
  export const modInt = /*@__PURE__*/ nodeProxy( OperatorNode, '%' );
361
+
362
+ /**
363
+ * Checks if two nodes are equal.
364
+ *
365
+ * @function
366
+ * @param {Node} aNode - The first input.
367
+ * @param {Node} bNode - The second input.
368
+ * @returns {OperatorNode}
369
+ */
272
370
  export const equal = /*@__PURE__*/ nodeProxy( OperatorNode, '==' );
371
+
372
+ /**
373
+ * Checks if two nodes are not equal.
374
+ *
375
+ * @function
376
+ * @param {Node} aNode - The first input.
377
+ * @param {Node} bNode - The second input.
378
+ * @returns {OperatorNode}
379
+ */
273
380
  export const notEqual = /*@__PURE__*/ nodeProxy( OperatorNode, '!=' );
381
+
382
+ /**
383
+ * Checks if the first node is less than the second.
384
+ *
385
+ * @function
386
+ * @param {Node} aNode - The first input.
387
+ * @param {Node} bNode - The second input.
388
+ * @returns {OperatorNode}
389
+ */
274
390
  export const lessThan = /*@__PURE__*/ nodeProxy( OperatorNode, '<' );
391
+
392
+ /**
393
+ * Checks if the first node is greater than the second.
394
+ *
395
+ * @function
396
+ * @param {Node} aNode - The first input.
397
+ * @param {Node} bNode - The second input.
398
+ * @returns {OperatorNode}
399
+ */
275
400
  export const greaterThan = /*@__PURE__*/ nodeProxy( OperatorNode, '>' );
401
+
402
+ /**
403
+ * Checks if the first node is less than or equal to the second.
404
+ *
405
+ * @function
406
+ * @param {Node} aNode - The first input.
407
+ * @param {Node} bNode - The second input.
408
+ * @returns {OperatorNode}
409
+ */
276
410
  export const lessThanEqual = /*@__PURE__*/ nodeProxy( OperatorNode, '<=' );
411
+
412
+ /**
413
+ * Checks if the first node is greater than or equal to the second.
414
+ *
415
+ * @function
416
+ * @param {Node} aNode - The first input.
417
+ * @param {Node} bNode - The second input.
418
+ * @returns {OperatorNode}
419
+ */
277
420
  export const greaterThanEqual = /*@__PURE__*/ nodeProxy( OperatorNode, '>=' );
421
+
422
+ /**
423
+ * Performs logical AND on two nodes.
424
+ *
425
+ * @function
426
+ * @param {Node} aNode - The first input.
427
+ * @param {Node} bNode - The second input.
428
+ * @returns {OperatorNode}
429
+ */
278
430
  export const and = /*@__PURE__*/ nodeProxy( OperatorNode, '&&' );
431
+
432
+ /**
433
+ * Performs logical OR on two nodes.
434
+ *
435
+ * @function
436
+ * @param {Node} aNode - The first input.
437
+ * @param {Node} bNode - The second input.
438
+ * @returns {OperatorNode}
439
+ */
279
440
  export const or = /*@__PURE__*/ nodeProxy( OperatorNode, '||' );
441
+
442
+ /**
443
+ * Performs logical NOT on a node.
444
+ *
445
+ * @function
446
+ * @param {Node} aNode - The first input.
447
+ * @param {Node} bNode - The second input.
448
+ * @returns {OperatorNode}
449
+ */
280
450
  export const not = /*@__PURE__*/ nodeProxy( OperatorNode, '!' );
451
+
452
+ /**
453
+ * Performs logical XOR on two nodes.
454
+ *
455
+ * @function
456
+ * @param {Node} aNode - The first input.
457
+ * @param {Node} bNode - The second input.
458
+ * @returns {OperatorNode}
459
+ */
281
460
  export const xor = /*@__PURE__*/ nodeProxy( OperatorNode, '^^' );
461
+
462
+ /**
463
+ * Performs bitwise AND on two nodes.
464
+ *
465
+ * @function
466
+ * @param {Node} aNode - The first input.
467
+ * @param {Node} bNode - The second input.
468
+ * @returns {OperatorNode}
469
+ */
282
470
  export const bitAnd = /*@__PURE__*/ nodeProxy( OperatorNode, '&' );
471
+
472
+ /**
473
+ * Performs bitwise NOT on a node.
474
+ *
475
+ * @function
476
+ * @param {Node} aNode - The first input.
477
+ * @param {Node} bNode - The second input.
478
+ * @returns {OperatorNode}
479
+ */
283
480
  export const bitNot = /*@__PURE__*/ nodeProxy( OperatorNode, '~' );
481
+
482
+ /**
483
+ * Performs bitwise OR on two nodes.
484
+ *
485
+ * @function
486
+ * @param {Node} aNode - The first input.
487
+ * @param {Node} bNode - The second input.
488
+ * @returns {OperatorNode}
489
+ */
284
490
  export const bitOr = /*@__PURE__*/ nodeProxy( OperatorNode, '|' );
491
+
492
+ /**
493
+ * Performs bitwise XOR on two nodes.
494
+ *
495
+ * @function
496
+ * @param {Node} aNode - The first input.
497
+ * @param {Node} bNode - The second input.
498
+ * @returns {OperatorNode}
499
+ */
285
500
  export const bitXor = /*@__PURE__*/ nodeProxy( OperatorNode, '^' );
501
+
502
+ /**
503
+ * Shifts a node to the left.
504
+ *
505
+ * @function
506
+ * @param {Node} aNode - The node to shift.
507
+ * @param {Node} bNode - The value to shift.
508
+ * @returns {OperatorNode}
509
+ */
286
510
  export const shiftLeft = /*@__PURE__*/ nodeProxy( OperatorNode, '<<' );
511
+
512
+ /**
513
+ * Shifts a node to the right.
514
+ *
515
+ * @function
516
+ * @param {Node} aNode - The node to shift.
517
+ * @param {Node} bNode - The value to shift.
518
+ * @returns {OperatorNode}
519
+ */
287
520
  export const shiftRight = /*@__PURE__*/ nodeProxy( OperatorNode, '>>' );
288
521
 
289
522
  addMethodChaining( 'add', add );
@@ -3,7 +3,9 @@
3
3
  import { Loop } from '../utils/LoopNode.js';
4
4
  import { float, vec3, Fn } from '../tsl/TSLBase.js';
5
5
 
6
- export const tri = /*@__PURE__*/ Fn( ( [ x ] ) => {
6
+ /** @module TriNoise3D **/
7
+
8
+ const tri = /*@__PURE__*/ Fn( ( [ x ] ) => {
7
9
 
8
10
  return x.fract().sub( .5 ).abs();
9
11
 
@@ -15,7 +17,7 @@ export const tri = /*@__PURE__*/ Fn( ( [ x ] ) => {
15
17
  ]
16
18
  } );
17
19
 
18
- export const tri3 = /*@__PURE__*/ Fn( ( [ p ] ) => {
20
+ const tri3 = /*@__PURE__*/ Fn( ( [ p ] ) => {
19
21
 
20
22
  return vec3( tri( p.z.add( tri( p.y.mul( 1. ) ) ) ), tri( p.z.add( tri( p.x.mul( 1. ) ) ) ), tri( p.y.add( tri( p.x.mul( 1. ) ) ) ) );
21
23
 
@@ -27,9 +29,18 @@ export const tri3 = /*@__PURE__*/ Fn( ( [ p ] ) => {
27
29
  ]
28
30
  } );
29
31
 
30
- export const triNoise3D = /*@__PURE__*/ Fn( ( [ p_immutable, spd, time ] ) => {
32
+ /**
33
+ * Generates a noise value from the given position, speed and time parameters.
34
+ *
35
+ * @method
36
+ * @param {Node<vec3>} position - The position.
37
+ * @param {Node<float>} speed - The speed.
38
+ * @param {Node<float>} time - The time.
39
+ * @return {Node<float>} The generated noise.
40
+ */
41
+ export const triNoise3D = /*@__PURE__*/ Fn( ( [ position, speed, time ] ) => {
31
42
 
32
- const p = vec3( p_immutable ).toVar();
43
+ const p = vec3( position ).toVar();
33
44
  const z = float( 1.4 ).toVar();
34
45
  const rz = float( 0.0 ).toVar();
35
46
  const bp = vec3( p ).toVar();
@@ -37,7 +48,7 @@ export const triNoise3D = /*@__PURE__*/ Fn( ( [ p_immutable, spd, time ] ) => {
37
48
  Loop( { start: float( 0.0 ), end: float( 3.0 ), type: 'float', condition: '<=' }, () => {
38
49
 
39
50
  const dg = vec3( tri3( bp.mul( 2.0 ) ) ).toVar();
40
- p.addAssign( dg.add( time.mul( float( 0.1 ).mul( spd ) ) ) );
51
+ p.addAssign( dg.add( time.mul( float( 0.1 ).mul( speed ) ) ) );
41
52
  bp.mulAssign( 1.8 );
42
53
  z.mulAssign( 1.5 );
43
54
  p.mulAssign( 1.2 );
@@ -54,8 +65,8 @@ export const triNoise3D = /*@__PURE__*/ Fn( ( [ p_immutable, spd, time ] ) => {
54
65
  name: 'triNoise3D',
55
66
  type: 'float',
56
67
  inputs: [
57
- { name: 'p', type: 'vec3' },
58
- { name: 'spd', type: 'float' },
68
+ { name: 'position', type: 'vec3' },
69
+ { name: 'speed', type: 'float' },
59
70
  { name: 'time', type: 'float' }
60
71
  ]
61
72
  } );
@@ -101,8 +101,18 @@ const parse = ( source ) => {
101
101
 
102
102
  };
103
103
 
104
+ /**
105
+ * This class represents a GLSL node function.
106
+ *
107
+ * @augments NodeFunction
108
+ */
104
109
  class GLSLNodeFunction extends NodeFunction {
105
110
 
111
+ /**
112
+ * Constructs a new GLSL node function.
113
+ *
114
+ * @param {String} source - The GLSL source.
115
+ */
106
116
  constructor( source ) {
107
117
 
108
118
  const { type, inputs, name, precision, inputsCode, blockCode, headerCode } = parse( source );
@@ -115,6 +125,12 @@ class GLSLNodeFunction extends NodeFunction {
115
125
 
116
126
  }
117
127
 
128
+ /**
129
+ * This method returns the GLSL code of the node function.
130
+ *
131
+ * @param {String} [name=this.name] - The function's name.
132
+ * @return {String} The shader code.
133
+ */
118
134
  getCode( name = this.name ) {
119
135
 
120
136
  let code;
@@ -1,8 +1,19 @@
1
1
  import NodeParser from '../core/NodeParser.js';
2
2
  import GLSLNodeFunction from './GLSLNodeFunction.js';
3
3
 
4
+ /**
5
+ * A GLSL node parser.
6
+ *
7
+ * @augments NodeParser
8
+ */
4
9
  class GLSLNodeParser extends NodeParser {
5
10
 
11
+ /**
12
+ * The method parses the given GLSL code an returns a node function.
13
+ *
14
+ * @param {String} source - The GLSL code.
15
+ * @return {GLSLNodeFunction} A node function.
16
+ */
6
17
  parseFunction( source ) {
7
18
 
8
19
  return new GLSLNodeFunction( source );
@@ -8,10 +8,19 @@ import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
8
8
  import { WebGLCoordinateSystem } from '../../constants.js';
9
9
  import { Texture } from '../../textures/Texture.js';
10
10
 
11
+ /** @module PMREMNode **/
12
+
11
13
  let _generator = null;
12
14
 
13
15
  const _cache = new WeakMap();
14
16
 
17
+ /**
18
+ * Generates the cubeUV size based on the given image height.
19
+ *
20
+ * @private
21
+ * @param {Number} imageHeight - The image height.
22
+ * @return {{texelWidth: Number,texelHeight: Number, maxMip: Number}} The result object.
23
+ */
15
24
  function _generateCubeUVSize( imageHeight ) {
16
25
 
17
26
  const maxMip = Math.log2( imageHeight ) - 2;
@@ -24,6 +33,13 @@ function _generateCubeUVSize( imageHeight ) {
24
33
 
25
34
  }
26
35
 
36
+ /**
37
+ * Generates a PMREM from the given texture .
38
+ *
39
+ * @private
40
+ * @param {Texture} texture - The texture to create the PMREM for.
41
+ * @return {Texture} The PMREM.
42
+ */
27
43
  function _getPMREMFromTexture( texture ) {
28
44
 
29
45
  let cacheTexture = _cache.get( texture );
@@ -71,6 +87,17 @@ function _getPMREMFromTexture( texture ) {
71
87
 
72
88
  }
73
89
 
90
+ /**
91
+ * This node represents a PMREM which is a special type of preprocessed
92
+ * environment map intended for PBR materials.
93
+ *
94
+ * ```js
95
+ * const material = new MeshStandardNodeMaterial();
96
+ * material.envNode = pmremTexture( envMap );
97
+ * ```
98
+ *
99
+ * @augments TempNode
100
+ */
74
101
  class PMREMNode extends TempNode {
75
102
 
76
103
  static get type() {
@@ -79,27 +106,98 @@ class PMREMNode extends TempNode {
79
106
 
80
107
  }
81
108
 
109
+ /**
110
+ * Constructs a new function overloading node.
111
+ *
112
+ * @param {Texture} value - The input texture.
113
+ * @param {Node<vec2>} [uvNode=null] - The uv node.
114
+ * @param {Node<float>} [levelNode=null] - The level node.
115
+ */
82
116
  constructor( value, uvNode = null, levelNode = null ) {
83
117
 
84
118
  super( 'vec3' );
85
119
 
120
+ /**
121
+ * Reference to the input texture.
122
+ *
123
+ * @private
124
+ * @type {Texture}
125
+ */
86
126
  this._value = value;
127
+
128
+ /**
129
+ * Reference to the generated PMREM.
130
+ *
131
+ * @private
132
+ * @type {Texture | null}
133
+ * @default null
134
+ */
87
135
  this._pmrem = null;
88
136
 
137
+ /**
138
+ * The uv node.
139
+ *
140
+ * @type {Node<vec2>}
141
+ */
89
142
  this.uvNode = uvNode;
143
+
144
+ /**
145
+ * The level node.
146
+ *
147
+ * @type {Node<float>}
148
+ */
90
149
  this.levelNode = levelNode;
91
150
 
151
+ /**
152
+ * Reference to a PMREM generator.
153
+ *
154
+ * @private
155
+ * @type {PMREMGenerator}
156
+ * @default null
157
+ */
92
158
  this._generator = null;
93
159
 
94
160
  const defaultTexture = new Texture();
95
161
  defaultTexture.isRenderTargetTexture = true;
96
162
 
163
+ /**
164
+ * The texture node holding the generated PMREM.
165
+ *
166
+ * @private
167
+ * @type {TextureNode}
168
+ */
97
169
  this._texture = texture( defaultTexture );
98
170
 
171
+ /**
172
+ * A uniform representing the PMREM's width.
173
+ *
174
+ * @private
175
+ * @type {UniformNode<float>}
176
+ */
99
177
  this._width = uniform( 0 );
178
+
179
+ /**
180
+ * A uniform representing the PMREM's height.
181
+ *
182
+ * @private
183
+ * @type {UniformNode<float>}
184
+ */
100
185
  this._height = uniform( 0 );
186
+
187
+ /**
188
+ * A uniform representing the PMREM's max Mip.
189
+ *
190
+ * @private
191
+ * @type {UniformNode<float>}
192
+ */
101
193
  this._maxMip = uniform( 0 );
102
194
 
195
+ /**
196
+ * The `updateBeforeType` is set to `NodeUpdateType.RENDER`.
197
+ *
198
+ * @type {String}
199
+ * @default 'render'
200
+ */
103
201
  this.updateBeforeType = NodeUpdateType.RENDER;
104
202
 
105
203
  }
@@ -111,12 +209,22 @@ class PMREMNode extends TempNode {
111
209
 
112
210
  }
113
211
 
212
+ /**
213
+ * The node's texture value.
214
+ *
215
+ * @type {Texture}
216
+ */
114
217
  get value() {
115
218
 
116
219
  return this._value;
117
220
 
118
221
  }
119
222
 
223
+ /**
224
+ * Uses the given PMREM texture to update internal values.
225
+ *
226
+ * @param {Texture} texture - The PMREM texture.
227
+ */
120
228
  updateFromTexture( texture ) {
121
229
 
122
230
  const cubeUVSize = _generateCubeUVSize( texture.image.height );
@@ -191,6 +299,8 @@ class PMREMNode extends TempNode {
191
299
 
192
300
  }
193
301
 
302
+ uvNode = vec3( uvNode.x, uvNode.y.negate(), uvNode.z );
303
+
194
304
  //
195
305
 
196
306
  let levelNode = this.levelNode;
@@ -211,6 +321,13 @@ class PMREMNode extends TempNode {
211
321
 
212
322
  export default PMREMNode;
213
323
 
324
+ /**
325
+ * Returns `true` if the given cube map image has been fully loaded.
326
+ *
327
+ * @private
328
+ * @param {Array<(Image|Object)>} image - The cube map image.
329
+ * @return {Boolean} Whether the given cube map is ready or not.
330
+ */
214
331
  function isCubeMapReady( image ) {
215
332
 
216
333
  if ( image === null || image === undefined ) return false;
@@ -229,6 +346,13 @@ function isCubeMapReady( image ) {
229
346
 
230
347
  }
231
348
 
349
+ /**
350
+ * Returns `true` if the given equirectangular image has been fully loaded.
351
+ *
352
+ * @private
353
+ * @param {(Image|Object)} image - The equirectangular image.
354
+ * @return {Boolean} Whether the given cube map is ready or not.
355
+ */
232
356
  function isEquirectangularMapReady( image ) {
233
357
 
234
358
  if ( image === null || image === undefined ) return false;
@@ -237,4 +361,13 @@ function isEquirectangularMapReady( image ) {
237
361
 
238
362
  }
239
363
 
364
+ /**
365
+ * TSL function for creating a PMREM node.
366
+ *
367
+ * @function
368
+ * @param {Texture} value - The input texture.
369
+ * @param {Node<vec2>} [uvNode=null] - The uv node.
370
+ * @param {Node<float>} [levelNode=null] - The level node.
371
+ * @returns {PMREMNode}
372
+ */
240
373
  export const pmremTexture = /*@__PURE__*/ nodeProxy( PMREMNode );
@@ -237,7 +237,7 @@ const bilinearCubeUV = /*@__PURE__*/ Fn( ( [ envMap, direction_immutable, mipInt
237
237
  uv.x.mulAssign( CUBEUV_TEXEL_WIDTH );
238
238
  uv.y.mulAssign( CUBEUV_TEXEL_HEIGHT );
239
239
 
240
- return envMap.uv( uv ).grad( vec2(), vec2() ); // disable anisotropic filtering
240
+ return envMap.sample( uv ).grad( vec2(), vec2() ); // disable anisotropic filtering
241
241
 
242
242
  } );
243
243
 
@@ -1,6 +1,15 @@
1
1
  import { uv } from '../accessors/UV.js';
2
2
  import { Fn } from '../tsl/TSLBase.js';
3
3
 
4
+ /** @module Procedural **/
5
+
6
+ /**
7
+ * Creates a 2x2 checkerboard pattern that can be used as procedural texture data.
8
+ *
9
+ * @method
10
+ * @param {Node<vec2>} coord - The uv coordinates.
11
+ * @return {Node<float>} The result data.
12
+ */
4
13
  export const checker = /*@__PURE__*/ Fn( ( [ coord = uv() ] ) => {
5
14
 
6
15
  const uv = coord.mul( 2.0 );