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
@@ -4,8 +4,17 @@ import { screenUV } from './ScreenNode.js';
4
4
 
5
5
  import { FramebufferTexture } from '../../textures/FramebufferTexture.js';
6
6
 
7
+ /** @module ViewportSharedTextureNode **/
8
+
7
9
  let _sharedFramebuffer = null;
8
10
 
11
+ /**
12
+ * `ViewportTextureNode` creates an internal texture for each node instance. This module
13
+ * shares a texture across all instances of `ViewportSharedTextureNode`. It should
14
+ * be the first choice when using data of the default/screen framebuffer for performance reasons.
15
+ *
16
+ * @augments module:ViewportTextureNode~ViewportTextureNode
17
+ */
9
18
  class ViewportSharedTextureNode extends ViewportTextureNode {
10
19
 
11
20
  static get type() {
@@ -14,6 +23,12 @@ class ViewportSharedTextureNode extends ViewportTextureNode {
14
23
 
15
24
  }
16
25
 
26
+ /**
27
+ * Constructs a new viewport shared texture node.
28
+ *
29
+ * @param {Node} [uvNode=screenUV] - The uv node.
30
+ * @param {Node?} [levelNode=null] - The level node.
31
+ */
17
32
  constructor( uvNode = screenUV, levelNode = null ) {
18
33
 
19
34
  if ( _sharedFramebuffer === null ) {
@@ -36,4 +51,12 @@ class ViewportSharedTextureNode extends ViewportTextureNode {
36
51
 
37
52
  export default ViewportSharedTextureNode;
38
53
 
54
+ /**
55
+ * TSL function for creating a shared viewport texture node.
56
+ *
57
+ * @function
58
+ * @param {Node} [uvNode=screenUV] - The uv node.
59
+ * @param {Node?} [levelNode=null] - The level node.
60
+ * @returns {ViewportSharedTextureNode}
61
+ */
39
62
  export const viewportSharedTexture = /*@__PURE__*/ nodeProxy( ViewportSharedTextureNode );
@@ -7,8 +7,19 @@ import { Vector2 } from '../../math/Vector2.js';
7
7
  import { FramebufferTexture } from '../../textures/FramebufferTexture.js';
8
8
  import { LinearMipmapLinearFilter } from '../../constants.js';
9
9
 
10
+ /** @module ViewportTextureNode **/
11
+
10
12
  const _size = /*@__PURE__*/ new Vector2();
11
13
 
14
+ /**
15
+ * A special type of texture node which represents the data of the current viewport
16
+ * as a texture. The module extracts data from the current bound framebuffer with
17
+ * a copy operation so no extra render pass is required to produce the texture data
18
+ * (which is good for performance). `ViewportTextureNode` can be used as an input for a
19
+ * variety of effects like refractive or transmissive materials.
20
+ *
21
+ * @augments module:TextureNode~TextureNode
22
+ */
12
23
  class ViewportTextureNode extends TextureNode {
13
24
 
14
25
  static get type() {
@@ -17,6 +28,13 @@ class ViewportTextureNode extends TextureNode {
17
28
 
18
29
  }
19
30
 
31
+ /**
32
+ * Constructs a new viewport texture node.
33
+ *
34
+ * @param {Node} [uvNode=screenUV] - The uv node.
35
+ * @param {Node?} [levelNode=null] - The level node.
36
+ * @param {Texture?} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
37
+ */
20
38
  constructor( uvNode = screenUV, levelNode = null, framebufferTexture = null ) {
21
39
 
22
40
  if ( framebufferTexture === null ) {
@@ -28,10 +46,30 @@ class ViewportTextureNode extends TextureNode {
28
46
 
29
47
  super( framebufferTexture, uvNode, levelNode );
30
48
 
49
+ /**
50
+ * Whether to generate mipmaps or not.
51
+ *
52
+ * @type {Boolean}
53
+ * @default false
54
+ */
31
55
  this.generateMipmaps = false;
32
56
 
57
+ /**
58
+ * This flag can be used for type testing.
59
+ *
60
+ * @type {Boolean}
61
+ * @readonly
62
+ * @default true
63
+ */
33
64
  this.isOutputTextureNode = true;
34
65
 
66
+ /**
67
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders the
68
+ * scene once per frame in its {@link ViewportTextureNode#updateBefore} method.
69
+ *
70
+ * @type {String}
71
+ * @default 'frame'
72
+ */
35
73
  this.updateBeforeType = NodeUpdateType.FRAME;
36
74
 
37
75
  }
@@ -77,5 +115,24 @@ class ViewportTextureNode extends TextureNode {
77
115
 
78
116
  export default ViewportTextureNode;
79
117
 
118
+ /**
119
+ * TSL function for creating a viewport texture node.
120
+ *
121
+ * @function
122
+ * @param {Node} [uvNode=screenUV] - The uv node.
123
+ * @param {Node?} [levelNode=null] - The level node.
124
+ * @param {Texture?} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
125
+ * @returns {ViewportTextureNode}
126
+ */
80
127
  export const viewportTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode );
128
+
129
+ /**
130
+ * TSL function for creating a viewport texture node with enabled mipmap generation.
131
+ *
132
+ * @function
133
+ * @param {Node} [uvNode=screenUV] - The uv node.
134
+ * @param {Node?} [levelNode=null] - The level node.
135
+ * @param {Texture?} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
136
+ * @returns {ViewportTextureNode}
137
+ */
81
138
  export const viewportMipTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode, null, null, { generateMipmaps: true } );
@@ -0,0 +1,93 @@
1
+ import { positionView } from '../accessors/Position.js';
2
+ import { smoothstep } from '../math/MathNode.js';
3
+ import { Fn, output, vec4 } from '../tsl/TSLBase.js';
4
+
5
+ /** @module Fog **/
6
+
7
+ /**
8
+ * Returns a node that represents the `z` coordinate in view space
9
+ * for the current fragment. It's a different representation of the
10
+ * default depth value.
11
+ *
12
+ * This value can be part of a computation that defines how the fog
13
+ * density increases when moving away from the camera.
14
+ *
15
+ * @param {NodeBuilder} builder - The current node builder.
16
+ * @return {Node} The viewZ node.
17
+ */
18
+ function getViewZNode( builder ) {
19
+
20
+ let viewZ;
21
+
22
+ const getViewZ = builder.context.getViewZ;
23
+
24
+ if ( getViewZ !== undefined ) {
25
+
26
+ viewZ = getViewZ( this );
27
+
28
+ }
29
+
30
+ return ( viewZ || positionView.z ).negate();
31
+
32
+ }
33
+
34
+ /**
35
+ * Constructs a new range factor node.
36
+ *
37
+ * @function
38
+ * @param {Node} near - Defines the near value.
39
+ * @param {Node} far - Defines the far value.
40
+ */
41
+ export const rangeFogFactor = Fn( ( [ near, far ], builder ) => {
42
+
43
+ const viewZ = getViewZNode( builder );
44
+
45
+ return smoothstep( near, far, viewZ );
46
+
47
+ } );
48
+
49
+ /**
50
+ * Represents an exponential squared fog. This type of fog gives
51
+ * a clear view near the camera and a faster than exponentially
52
+ * densening fog farther from the camera.
53
+ *
54
+ * @function
55
+ * @param {Node} density - Defines the fog density.
56
+ */
57
+ export const densityFogFactor = Fn( ( [ density ], builder ) => {
58
+
59
+ const viewZ = getViewZNode( builder );
60
+
61
+ return density.mul( density, viewZ, viewZ ).negate().exp().oneMinus();
62
+
63
+ } );
64
+
65
+ /**
66
+ * This class can be used to configure a fog for the scene.
67
+ * Nodes of this type are assigned to `Scene.fogNode`.
68
+ *
69
+ * @function
70
+ * @param {Node} color - Defines the color of the fog.
71
+ * @param {Node} factor - Defines how the fog is factored in the scene.
72
+ */
73
+ export const fog = Fn( ( [ color, factor ] ) => {
74
+
75
+ return vec4( factor.toFloat().mix( output.rgb, color.toVec3() ), output.a );
76
+
77
+ } );
78
+
79
+ // Deprecated
80
+
81
+ export function rangeFog( color, near, far ) { // @deprecated, r171
82
+
83
+ console.warn( 'THREE.TSL: "rangeFog( color, near, far )" is deprecated. Use "fog( color, rangeFogFactor( near, far ) )" instead.' );
84
+ return fog( color, rangeFogFactor( near, far ) );
85
+
86
+ }
87
+
88
+ export function densityFog( color, density ) { // @deprecated, r171
89
+
90
+ console.warn( 'THREE.TSL: "densityFog( color, density )" is deprecated. Use "fog( color, densityFogFactor( density ) )" instead.' );
91
+ return fog( color, densityFogFactor( density ) );
92
+
93
+ }
@@ -5,14 +5,31 @@ import { materialSpecularStrength, materialReflectivity } from '../accessors/Mat
5
5
  import { mix } from '../math/MathNode.js';
6
6
  import { vec4 } from '../tsl/TSLBase.js';
7
7
 
8
+ /**
9
+ * Represents the lighting model for unlit materials. The only light contribution
10
+ * is baked indirect lighting modulated with ambient occlusion and the material's
11
+ * diffuse color. Environment mapping is supported. Used in {@link MeshBasicNodeMaterial}.
12
+ *
13
+ * @augments LightingModel
14
+ */
8
15
  class BasicLightingModel extends LightingModel {
9
16
 
17
+ /**
18
+ * Constructs a new basic lighting model.
19
+ */
10
20
  constructor() {
11
21
 
12
22
  super();
13
23
 
14
24
  }
15
25
 
26
+ /**
27
+ * Implements the baked indirect lighting with its modulation.
28
+ *
29
+ * @param {ContextNode} context - The current node context.
30
+ * @param {StackNode} stack - The current stack.
31
+ * @param {NodeBuilder} builder - The current node builder.
32
+ */
16
33
  indirect( context, stack, builder ) {
17
34
 
18
35
  const ambientOcclusion = context.ambientOcclusion;
@@ -41,6 +58,13 @@ class BasicLightingModel extends LightingModel {
41
58
 
42
59
  }
43
60
 
61
+ /**
62
+ * Implements the environment mapping.
63
+ *
64
+ * @param {ContextNode} context - The current node context.
65
+ * @param {StackNode} stack - The current stack.
66
+ * @param {NodeBuilder} builder - The current node builder.
67
+ */
44
68
  finish( context, stack, builder ) {
45
69
 
46
70
  const material = builder.material;
@@ -1,10 +1,9 @@
1
1
  import BasicLightingModel from './BasicLightingModel.js';
2
2
  import F_Schlick from './BSDF/F_Schlick.js';
3
3
  import BRDF_Lambert from './BSDF/BRDF_Lambert.js';
4
- import { diffuseColor } from '../core/PropertyNode.js';
4
+ import { diffuseColor, shininess, specularColor } from '../core/PropertyNode.js';
5
5
  import { transformedNormalView } from '../accessors/Normal.js';
6
6
  import { materialSpecularStrength } from '../accessors/MaterialNode.js';
7
- import { shininess, specularColor } from '../core/PropertyNode.js';
8
7
  import { positionViewDirection } from '../accessors/Position.js';
9
8
  import { Fn, float } from '../tsl/TSLBase.js';
10
9
 
@@ -31,16 +30,42 @@ const BRDF_BlinnPhong = /*@__PURE__*/ Fn( ( { lightDirection } ) => {
31
30
 
32
31
  } );
33
32
 
33
+ /**
34
+ * Represents the lighting model for a phong material. Used in {@link MeshPhongNodeMaterial}.
35
+ *
36
+ * @augments BasicLightingModel
37
+ */
34
38
  class PhongLightingModel extends BasicLightingModel {
35
39
 
40
+ /**
41
+ * Constructs a new phong lighting model.
42
+ *
43
+ * @param {Boolean} [specular=true] - Whether specular is supported or not.
44
+ */
36
45
  constructor( specular = true ) {
37
46
 
38
47
  super();
39
48
 
49
+ /**
50
+ * Whether specular is supported or not. Set this to `false` if you are
51
+ * looking for a Lambert-like material meaning a material for non-shiny
52
+ * surfaces, without specular highlights.
53
+ *
54
+ * @type {Boolean}
55
+ * @default true
56
+ */
40
57
  this.specular = specular;
41
58
 
42
59
  }
43
60
 
61
+ /**
62
+ * Implements the direct lighting. The specular portion is optional an can be controlled
63
+ * with the {@link PhongLightingModel#specular} flag.
64
+ *
65
+ * @param {Object} input - The input data.
66
+ * @param {StackNode} stack - The current stack.
67
+ * @param {NodeBuilder} builder - The current node builder.
68
+ */
44
69
  direct( { lightDirection, lightColor, reflectedLight } ) {
45
70
 
46
71
  const dotNL = transformedNormalView.dot( lightDirection ).clamp();
@@ -56,6 +81,13 @@ class PhongLightingModel extends BasicLightingModel {
56
81
 
57
82
  }
58
83
 
84
+ /**
85
+ * Implements the indirect lighting.
86
+ *
87
+ * @param {ContextNode} input - The current node context.
88
+ * @param {StackNode} stack - The current stack.
89
+ * @param {NodeBuilder} builder - The current node builder.
90
+ */
59
91
  indirect( { ambientOcclusion, irradiance, reflectedLight } ) {
60
92
 
61
93
  reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
@@ -31,7 +31,7 @@ const getVolumeTransmissionRay = /*@__PURE__*/ Fn( ( [ n, v, thickness, ior, mod
31
31
  // Direction of refracted light.
32
32
  const refractionVector = vec3( refract( v.negate(), normalize( n ), div( 1.0, ior ) ) );
33
33
 
34
- // Compute rotation-independant scaling of the model matrix.
34
+ // Compute rotation-independent scaling of the model matrix.
35
35
  const modelScale = vec3(
36
36
  length( modelMatrix[ 0 ].xyz ),
37
37
  length( modelMatrix[ 1 ].xyz ),
@@ -73,9 +73,9 @@ const viewportFrontSideTexture = /*@__PURE__*/ viewportMipTexture();
73
73
 
74
74
  const getTransmissionSample = /*@__PURE__*/ Fn( ( [ fragCoord, roughness, ior ], { material } ) => {
75
75
 
76
- const vTexture = material.side == BackSide ? viewportBackSideTexture : viewportFrontSideTexture;
76
+ const vTexture = material.side === BackSide ? viewportBackSideTexture : viewportFrontSideTexture;
77
77
 
78
- const transmissionSample = vTexture.uv( fragCoord );
78
+ const transmissionSample = vTexture.sample( fragCoord );
79
79
  //const transmissionSample = viewportMipTexture( fragCoord );
80
80
 
81
81
  const lod = log2( screenSize.x ).mul( applyIorToRoughness( roughness, ior ) );
@@ -311,7 +311,7 @@ const evalIridescence = /*@__PURE__*/ Fn( ( { outsideIOR, eta2, cosTheta1, thinF
311
311
  // Sheen
312
312
  //
313
313
 
314
- // This is a curve-fit approxmation to the "Charlie sheen" BRDF integrated over the hemisphere from
314
+ // This is a curve-fit approximation to the "Charlie sheen" BRDF integrated over the hemisphere from
315
315
  // Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF". The analysis can be found
316
316
  // in the Sheen section of https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
317
317
  const IBLSheenBRDF = /*@__PURE__*/ Fn( ( { normal, viewDir, roughness } ) => {
@@ -341,31 +341,140 @@ const IBLSheenBRDF = /*@__PURE__*/ Fn( ( { normal, viewDir, roughness } ) => {
341
341
  const clearcoatF0 = vec3( 0.04 );
342
342
  const clearcoatF90 = float( 1 );
343
343
 
344
- //
345
344
 
345
+ /**
346
+ * Represents the lighting model for a PBR material.
347
+ *
348
+ * @augments LightingModel
349
+ */
346
350
  class PhysicalLightingModel extends LightingModel {
347
351
 
352
+ /**
353
+ * Constructs a new physical lighting model.
354
+ *
355
+ * @param {Boolean} [clearcoat=false] - Whether clearcoat is supported or not.
356
+ * @param {Boolean} [sheen=false] - Whether sheen is supported or not.
357
+ * @param {Boolean} [iridescence=false] - Whether iridescence is supported or not.
358
+ * @param {Boolean} [anisotropy=false] - Whether anisotropy is supported or not.
359
+ * @param {Boolean} [transmission=false] - Whether transmission is supported or not.
360
+ * @param {Boolean} [dispersion=false] - Whether dispersion is supported or not.
361
+ */
348
362
  constructor( clearcoat = false, sheen = false, iridescence = false, anisotropy = false, transmission = false, dispersion = false ) {
349
363
 
350
364
  super();
351
365
 
366
+ /**
367
+ * Whether clearcoat is supported or not.
368
+ *
369
+ * @type {Boolean}
370
+ * @default false
371
+ */
352
372
  this.clearcoat = clearcoat;
373
+
374
+ /**
375
+ * Whether sheen is supported or not.
376
+ *
377
+ * @type {Boolean}
378
+ * @default false
379
+ */
353
380
  this.sheen = sheen;
381
+
382
+ /**
383
+ * Whether iridescence is supported or not.
384
+ *
385
+ * @type {Boolean}
386
+ * @default false
387
+ */
354
388
  this.iridescence = iridescence;
389
+
390
+ /**
391
+ * Whether anisotropy is supported or not.
392
+ *
393
+ * @type {Boolean}
394
+ * @default false
395
+ */
355
396
  this.anisotropy = anisotropy;
397
+
398
+ /**
399
+ * Whether transmission is supported or not.
400
+ *
401
+ * @type {Boolean}
402
+ * @default false
403
+ */
356
404
  this.transmission = transmission;
405
+
406
+ /**
407
+ * Whether dispersion is supported or not.
408
+ *
409
+ * @type {Boolean}
410
+ * @default false
411
+ */
357
412
  this.dispersion = dispersion;
358
413
 
414
+ /**
415
+ * The clear coat radiance.
416
+ *
417
+ * @type {Node?}
418
+ * @default null
419
+ */
359
420
  this.clearcoatRadiance = null;
421
+
422
+ /**
423
+ * The clear coat specular direct.
424
+ *
425
+ * @type {Node?}
426
+ * @default null
427
+ */
360
428
  this.clearcoatSpecularDirect = null;
429
+
430
+ /**
431
+ * The clear coat specular indirect.
432
+ *
433
+ * @type {Node?}
434
+ * @default null
435
+ */
361
436
  this.clearcoatSpecularIndirect = null;
437
+
438
+ /**
439
+ * The sheen specular direct.
440
+ *
441
+ * @type {Node?}
442
+ * @default null
443
+ */
362
444
  this.sheenSpecularDirect = null;
445
+
446
+ /**
447
+ * The sheen specular indirect.
448
+ *
449
+ * @type {Node?}
450
+ * @default null
451
+ */
363
452
  this.sheenSpecularIndirect = null;
453
+
454
+ /**
455
+ * The iridescence Fresnel.
456
+ *
457
+ * @type {Node?}
458
+ * @default null
459
+ */
364
460
  this.iridescenceFresnel = null;
461
+
462
+ /**
463
+ * The iridescence F0.
464
+ *
465
+ * @type {Node?}
466
+ * @default null
467
+ */
365
468
  this.iridescenceF0 = null;
366
469
 
367
470
  }
368
471
 
472
+ /**
473
+ * Depending on what features are requested, the method prepares certain node variables
474
+ * which are later used for lighting computations.
475
+ *
476
+ * @param {ContextNode} context - The current node context.
477
+ */
369
478
  start( context ) {
370
479
 
371
480
  if ( this.clearcoat === true ) {
@@ -432,7 +541,7 @@ class PhysicalLightingModel extends LightingModel {
432
541
  }
433
542
 
434
543
  // Fdez-Agüera's "Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting"
435
- // Approximates multiscattering in order to preserve energy.
544
+ // Approximates multi-scattering in order to preserve energy.
436
545
  // http://www.jcgt.org/published/0008/01/03/
437
546
 
438
547
  computeMultiscattering( singleScatter, multiScatter, specularF90 ) {
@@ -456,6 +565,13 @@ class PhysicalLightingModel extends LightingModel {
456
565
 
457
566
  }
458
567
 
568
+ /**
569
+ * Implements the direct light.
570
+ *
571
+ * @param {Object} input - The input data.
572
+ * @param {StackNode} stack - The current stack.
573
+ * @param {NodeBuilder} builder - The current node builder.
574
+ */
459
575
  direct( { lightDirection, lightColor, reflectedLight } ) {
460
576
 
461
577
  const dotNL = transformedNormalView.dot( lightDirection ).clamp();
@@ -482,6 +598,14 @@ class PhysicalLightingModel extends LightingModel {
482
598
 
483
599
  }
484
600
 
601
+ /**
602
+ * This method is intended for implementing the direct light term for
603
+ * rect area light nodes.
604
+ *
605
+ * @param {Object} input - The input data.
606
+ * @param {StackNode} stack - The current stack.
607
+ * @param {NodeBuilder} builder - The current node builder.
608
+ */
485
609
  directRectArea( { lightColor, lightPosition, halfWidth, halfHeight, reflectedLight, ltc_1, ltc_2 } ) {
486
610
 
487
611
  const p0 = lightPosition.add( halfWidth ).sub( halfHeight ); // counterclockwise; light shines in local neg z direction
@@ -495,8 +619,8 @@ class PhysicalLightingModel extends LightingModel {
495
619
 
496
620
  const uv = LTC_Uv( { N, V, roughness } );
497
621
 
498
- const t1 = ltc_1.uv( uv ).toVar();
499
- const t2 = ltc_2.uv( uv ).toVar();
622
+ const t1 = ltc_1.sample( uv ).toVar();
623
+ const t2 = ltc_2.sample( uv ).toVar();
500
624
 
501
625
  const mInv = mat3(
502
626
  vec3( t1.x, 0, t1.y ),
@@ -514,6 +638,13 @@ class PhysicalLightingModel extends LightingModel {
514
638
 
515
639
  }
516
640
 
641
+ /**
642
+ * Implements the indirect lighting.
643
+ *
644
+ * @param {ContextNode} context - The current node context.
645
+ * @param {StackNode} stack - The current stack.
646
+ * @param {NodeBuilder} builder - The current node builder.
647
+ */
517
648
  indirect( context, stack, builder ) {
518
649
 
519
650
  this.indirectDiffuse( context, stack, builder );
@@ -522,12 +653,26 @@ class PhysicalLightingModel extends LightingModel {
522
653
 
523
654
  }
524
655
 
656
+ /**
657
+ * Implements the indirect diffuse term.
658
+ *
659
+ * @param {ContextNode} input - The current node context.
660
+ * @param {StackNode} stack - The current stack.
661
+ * @param {NodeBuilder} builder - The current node builder.
662
+ */
525
663
  indirectDiffuse( { irradiance, reflectedLight } ) {
526
664
 
527
665
  reflectedLight.indirectDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor } ) ) );
528
666
 
529
667
  }
530
668
 
669
+ /**
670
+ * Implements the indirect specular term.
671
+ *
672
+ * @param {ContextNode} input - The current node context.
673
+ * @param {StackNode} stack - The current stack.
674
+ * @param {NodeBuilder} builder - The current node builder.
675
+ */
531
676
  indirectSpecular( { radiance, iblIrradiance, reflectedLight } ) {
532
677
 
533
678
  if ( this.sheen === true ) {
@@ -577,6 +722,13 @@ class PhysicalLightingModel extends LightingModel {
577
722
 
578
723
  }
579
724
 
725
+ /**
726
+ * Implements the ambient occlusion term.
727
+ *
728
+ * @param {ContextNode} input - The current node context.
729
+ * @param {StackNode} stack - The current stack.
730
+ * @param {NodeBuilder} builder - The current node builder.
731
+ */
580
732
  ambientOcclusion( { ambientOcclusion, reflectedLight } ) {
581
733
 
582
734
  const dotNV = transformedNormalView.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV
@@ -603,6 +755,13 @@ class PhysicalLightingModel extends LightingModel {
603
755
 
604
756
  }
605
757
 
758
+ /**
759
+ * Used for final lighting accumulations depending on the requested features.
760
+ *
761
+ * @param {ContextNode} context - The current node context.
762
+ * @param {StackNode} stack - The current stack.
763
+ * @param {NodeBuilder} builder - The current node builder.
764
+ */
606
765
  finish( context ) {
607
766
 
608
767
  const { outgoingLight } = context;
@@ -2,22 +2,45 @@ import LightingModel from '../core/LightingModel.js';
2
2
  import { diffuseColor } from '../core/PropertyNode.js';
3
3
  import { float } from '../tsl/TSLBase.js';
4
4
 
5
+ /**
6
+ * Represents lighting model for a shadow material. Used in {@link ShadowNodeMaterial}.
7
+ *
8
+ * @augments LightingModel
9
+ */
5
10
  class ShadowMaskModel extends LightingModel {
6
11
 
12
+ /**
13
+ * Constructs a new shadow mask model.
14
+ */
7
15
  constructor() {
8
16
 
9
17
  super();
10
18
 
19
+ /**
20
+ * The shadow mask node.
21
+ *
22
+ * @type {Node}
23
+ */
11
24
  this.shadowNode = float( 1 ).toVar( 'shadowMask' );
12
25
 
13
26
  }
14
27
 
28
+ /**
29
+ * Only used to save the shadow mask.
30
+ *
31
+ * @param {Object} input - The input data.
32
+ */
15
33
  direct( { shadowMask } ) {
16
34
 
17
35
  this.shadowNode.mulAssign( shadowMask );
18
36
 
19
37
  }
20
38
 
39
+ /**
40
+ * Uses the shadow mask to produce the final color.
41
+ *
42
+ * @param {ContextNode} context - The current node context.
43
+ */
21
44
  finish( context ) {
22
45
 
23
46
  diffuseColor.a.mulAssign( this.shadowNode.oneMinus() );