super-three 0.170.1 → 0.172.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +157 -49
  3. package/build/three.core.js +104 -42
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +53 -8
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +10 -5
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +21191 -1008
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +21189 -1008
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -5
  14. package/examples/jsm/animation/CCDIKSolver.js +3 -2
  15. package/examples/jsm/controls/ArcballControls.js +28 -19
  16. package/examples/jsm/controls/OrbitControls.js +5 -4
  17. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  18. package/examples/jsm/curves/NURBSCurve.js +1 -1
  19. package/examples/jsm/curves/NURBSUtils.js +3 -0
  20. package/examples/jsm/effects/OutlineEffect.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +11 -7
  22. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  23. package/examples/jsm/exporters/PLYExporter.js +2 -2
  24. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  25. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  26. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  27. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  28. package/examples/jsm/loaders/3MFLoader.js +6 -3
  29. package/examples/jsm/loaders/BVHLoader.js +1 -1
  30. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  31. package/examples/jsm/loaders/DDSLoader.js +42 -0
  32. package/examples/jsm/loaders/GCodeLoader.js +1 -1
  33. package/examples/jsm/loaders/GLTFLoader.js +22 -2
  34. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  35. package/examples/jsm/loaders/KTXLoader.js +4 -4
  36. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  37. package/examples/jsm/loaders/LottieLoader.js +1 -1
  38. package/examples/jsm/loaders/MTLLoader.js +1 -0
  39. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  40. package/examples/jsm/loaders/PLYLoader.js +7 -7
  41. package/examples/jsm/loaders/PVRLoader.js +1 -1
  42. package/examples/jsm/loaders/SVGLoader.js +2 -2
  43. package/examples/jsm/loaders/TDSLoader.js +1 -1
  44. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  45. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  46. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  47. package/examples/jsm/math/ConvexHull.js +1 -1
  48. package/examples/jsm/math/OBB.js +17 -0
  49. package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
  50. package/examples/jsm/misc/Volume.js +20 -12
  51. package/examples/jsm/misc/VolumeSlice.js +2 -2
  52. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  53. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  54. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  55. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  56. package/examples/jsm/objects/Sky.js +2 -2
  57. package/examples/jsm/objects/SkyMesh.js +3 -3
  58. package/examples/jsm/objects/Water2.js +1 -1
  59. package/examples/jsm/objects/Water2Mesh.js +2 -2
  60. package/examples/jsm/objects/WaterMesh.js +4 -4
  61. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  62. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  63. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  64. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  65. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  66. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  67. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  68. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  69. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  70. package/examples/jsm/shaders/BokehShader2.js +1 -1
  71. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  72. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  73. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  74. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  75. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  76. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  77. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  78. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  79. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  80. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  81. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  82. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  83. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  84. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  85. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  86. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  87. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  88. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  89. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  90. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  91. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  92. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  93. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  94. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  95. package/examples/jsm/tsl/display/Sepia.js +9 -0
  96. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  97. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  98. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  99. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  100. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  101. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  102. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  103. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  104. package/examples/jsm/utils/CameraUtils.js +4 -1
  105. package/examples/jsm/utils/GeometryUtils.js +22 -19
  106. package/examples/jsm/utils/SceneUtils.js +2 -2
  107. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  108. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  109. package/package.json +8 -3
  110. package/src/Three.Core.js +2 -0
  111. package/src/Three.Legacy.js +0 -21
  112. package/src/Three.TSL.js +9 -4
  113. package/src/Three.WebGPU.Nodes.js +2 -2
  114. package/src/Three.WebGPU.js +2 -2
  115. package/src/animation/PropertyBinding.js +2 -2
  116. package/src/cameras/PerspectiveCamera.js +18 -2
  117. package/src/constants.js +1 -1
  118. package/src/core/RenderTarget.js +18 -0
  119. package/src/core/RenderTarget3D.js +22 -0
  120. package/src/core/RenderTargetArray.js +22 -0
  121. package/src/extras/Earcut.js +1 -1
  122. package/src/extras/PMREMGenerator.js +20 -0
  123. package/src/extras/TextureUtils.js +6 -0
  124. package/src/helpers/CameraHelper.js +16 -13
  125. package/src/loaders/nodes/NodeLoader.js +59 -0
  126. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  127. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  128. package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
  129. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  130. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  131. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  132. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  133. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  134. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  135. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  136. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  137. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  138. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  139. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  140. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  141. package/src/materials/nodes/NodeMaterial.js +474 -21
  142. package/src/materials/nodes/PointsNodeMaterial.js +22 -13
  143. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  144. package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
  145. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  146. package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
  147. package/src/nodes/Nodes.js +1 -6
  148. package/src/nodes/TSL.js +2 -3
  149. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  150. package/src/nodes/accessors/Arrays.js +24 -5
  151. package/src/nodes/accessors/BatchNode.js +39 -3
  152. package/src/nodes/accessors/Bitangent.js +37 -0
  153. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  154. package/src/nodes/accessors/BufferNode.js +63 -0
  155. package/src/nodes/accessors/BuiltinNode.js +38 -0
  156. package/src/nodes/accessors/Camera.js +49 -0
  157. package/src/nodes/accessors/ClippingNode.js +71 -2
  158. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  159. package/src/nodes/accessors/InstanceNode.js +85 -2
  160. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  161. package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
  162. package/src/nodes/accessors/Lights.js +50 -1
  163. package/src/nodes/accessors/MaterialNode.js +302 -8
  164. package/src/nodes/accessors/MaterialProperties.js +7 -0
  165. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  166. package/src/nodes/accessors/ModelNode.js +100 -5
  167. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  168. package/src/nodes/accessors/MorphNode.js +48 -4
  169. package/src/nodes/accessors/Normal.js +59 -3
  170. package/src/nodes/accessors/Object3DNode.js +102 -1
  171. package/src/nodes/accessors/PointUVNode.js +26 -0
  172. package/src/nodes/accessors/Position.js +53 -4
  173. package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
  174. package/src/nodes/accessors/ReferenceNode.js +202 -2
  175. package/src/nodes/accessors/ReflectVector.js +24 -0
  176. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  177. package/src/nodes/accessors/SceneNode.js +54 -0
  178. package/src/nodes/accessors/SkinningNode.js +127 -1
  179. package/src/nodes/accessors/StorageBufferNode.js +168 -4
  180. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  181. package/src/nodes/accessors/Tangent.js +36 -0
  182. package/src/nodes/accessors/Texture3DNode.js +89 -5
  183. package/src/nodes/accessors/TextureBicubic.js +12 -2
  184. package/src/nodes/accessors/TextureNode.js +309 -10
  185. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  186. package/src/nodes/accessors/UV.js +10 -1
  187. package/src/nodes/accessors/UniformArrayNode.js +223 -23
  188. package/src/nodes/accessors/UserDataNode.js +46 -0
  189. package/src/nodes/accessors/VelocityNode.js +82 -0
  190. package/src/nodes/accessors/VertexColorNode.js +39 -2
  191. package/src/nodes/code/CodeNode.js +95 -1
  192. package/src/nodes/code/ExpressionNode.js +28 -0
  193. package/src/nodes/code/FunctionCallNode.js +37 -0
  194. package/src/nodes/code/FunctionNode.js +45 -0
  195. package/src/nodes/code/ScriptableNode.js +223 -1
  196. package/src/nodes/code/ScriptableValueNode.js +85 -1
  197. package/src/nodes/core/AssignNode.js +48 -2
  198. package/src/nodes/core/AttributeNode.js +43 -0
  199. package/src/nodes/core/BypassNode.js +47 -2
  200. package/src/nodes/core/CacheNode.js +53 -2
  201. package/src/nodes/core/ConstNode.js +24 -0
  202. package/src/nodes/core/ContextNode.js +65 -0
  203. package/src/nodes/core/IndexNode.js +68 -7
  204. package/src/nodes/core/InputNode.js +48 -0
  205. package/src/nodes/core/LightingModel.js +60 -0
  206. package/src/nodes/core/MRTNode.js +66 -0
  207. package/src/nodes/core/Node.js +337 -12
  208. package/src/nodes/core/NodeAttribute.js +38 -0
  209. package/src/nodes/core/NodeBuilder.js +945 -15
  210. package/src/nodes/core/NodeCache.js +41 -2
  211. package/src/nodes/core/NodeCode.js +31 -0
  212. package/src/nodes/core/NodeFrame.js +123 -2
  213. package/src/nodes/core/NodeFunction.js +46 -0
  214. package/src/nodes/core/NodeFunctionInput.js +44 -0
  215. package/src/nodes/core/NodeParser.js +11 -0
  216. package/src/nodes/core/NodeUniform.js +52 -0
  217. package/src/nodes/core/NodeUtils.js +141 -0
  218. package/src/nodes/core/NodeVar.js +30 -0
  219. package/src/nodes/core/NodeVarying.js +28 -0
  220. package/src/nodes/core/OutputStructNode.js +33 -2
  221. package/src/nodes/core/ParameterNode.js +28 -0
  222. package/src/nodes/core/PropertyNode.js +232 -0
  223. package/src/nodes/core/StackNode.js +78 -0
  224. package/src/nodes/core/StructTypeNode.js +39 -1
  225. package/src/nodes/core/TempNode.js +30 -4
  226. package/src/nodes/core/UniformGroupNode.js +82 -7
  227. package/src/nodes/core/UniformNode.js +66 -0
  228. package/src/nodes/core/VarNode.js +52 -0
  229. package/src/nodes/core/VaryingNode.js +83 -2
  230. package/src/nodes/core/constants.js +36 -0
  231. package/src/nodes/display/BumpMapNode.js +37 -0
  232. package/src/nodes/display/ColorAdjustment.js +53 -11
  233. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  234. package/src/nodes/display/ColorSpaceNode.js +82 -0
  235. package/src/nodes/display/FrontFacingNode.js +29 -0
  236. package/src/nodes/display/NormalMapNode.js +43 -0
  237. package/src/nodes/display/PassNode.js +298 -7
  238. package/src/nodes/display/PosterizeNode.js +33 -0
  239. package/src/nodes/display/RenderOutputNode.js +66 -1
  240. package/src/nodes/display/ScreenNode.js +87 -0
  241. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  242. package/src/nodes/display/ToneMappingNode.js +55 -2
  243. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  244. package/src/nodes/display/ViewportDepthNode.js +122 -8
  245. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  246. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  247. package/src/nodes/display/ViewportTextureNode.js +57 -0
  248. package/src/nodes/fog/Fog.js +93 -0
  249. package/src/nodes/functions/BasicLightingModel.js +24 -0
  250. package/src/nodes/functions/PhongLightingModel.js +34 -2
  251. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  252. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  253. package/src/nodes/functions/ToonLightingModel.js +20 -0
  254. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  255. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  256. package/src/nodes/geometry/RangeNode.js +54 -2
  257. package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
  258. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  259. package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
  260. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  261. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  262. package/src/nodes/lighting/AONode.js +18 -0
  263. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  264. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  265. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  266. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  267. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  268. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  269. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  270. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  271. package/src/nodes/lighting/IrradianceNode.js +17 -0
  272. package/src/nodes/lighting/LightProbeNode.js +20 -0
  273. package/src/nodes/lighting/LightUtils.js +12 -0
  274. package/src/nodes/lighting/LightingContextNode.js +48 -0
  275. package/src/nodes/lighting/LightingNode.js +15 -6
  276. package/src/nodes/lighting/LightsNode.js +132 -1
  277. package/src/nodes/lighting/PointLightNode.js +32 -1
  278. package/src/nodes/lighting/PointShadowNode.js +54 -1
  279. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  280. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  281. package/src/nodes/lighting/ShadowNode.js +240 -34
  282. package/src/nodes/lighting/SpotLightNode.js +43 -0
  283. package/src/nodes/math/ConditionalNode.js +70 -3
  284. package/src/nodes/math/Hash.js +9 -0
  285. package/src/nodes/math/MathNode.js +614 -11
  286. package/src/nodes/math/MathUtils.js +45 -1
  287. package/src/nodes/math/OperatorNode.js +233 -0
  288. package/src/nodes/math/TriNoise3D.js +18 -7
  289. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  290. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  291. package/src/nodes/pmrem/PMREMNode.js +133 -0
  292. package/src/nodes/pmrem/PMREMUtils.js +1 -1
  293. package/src/nodes/procedural/Checker.js +9 -0
  294. package/src/nodes/tsl/TSLBase.js +2 -2
  295. package/src/nodes/utils/ArrayElementNode.js +38 -2
  296. package/src/nodes/utils/ConvertNode.js +31 -0
  297. package/src/nodes/utils/CubeMapNode.js +78 -0
  298. package/src/nodes/utils/Discard.js +16 -0
  299. package/src/nodes/utils/EquirectUVNode.js +31 -1
  300. package/src/nodes/utils/FlipNode.js +38 -0
  301. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  302. package/src/nodes/utils/JoinNode.js +25 -0
  303. package/src/nodes/utils/LoopNode.js +74 -1
  304. package/src/nodes/utils/MatcapUVNode.js +17 -0
  305. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  306. package/src/nodes/utils/Oscillators.js +33 -0
  307. package/src/nodes/utils/Packing.js +17 -0
  308. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  309. package/src/nodes/utils/RTTNode.js +123 -2
  310. package/src/nodes/utils/ReflectorNode.js +174 -4
  311. package/src/nodes/utils/RemapNode.js +79 -0
  312. package/src/nodes/utils/RotateNode.js +41 -0
  313. package/src/nodes/utils/SetNode.js +44 -1
  314. package/src/nodes/utils/SplitNode.js +55 -3
  315. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  316. package/src/nodes/utils/SpriteUtils.js +17 -0
  317. package/src/nodes/utils/StorageArrayElementNode.js +40 -0
  318. package/src/nodes/utils/Timer.js +19 -0
  319. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  320. package/src/nodes/utils/UVUtils.js +20 -0
  321. package/src/nodes/utils/ViewportUtils.js +13 -0
  322. package/src/objects/BatchedMesh.js +1 -2
  323. package/src/objects/ClippingGroup.js +49 -0
  324. package/src/renderers/WebGLRenderer.js +23 -4
  325. package/src/renderers/common/Animation.js +63 -0
  326. package/src/renderers/common/Attributes.js +36 -0
  327. package/src/renderers/common/Backend.js +467 -52
  328. package/src/renderers/common/Background.js +34 -1
  329. package/src/renderers/common/BindGroup.js +43 -0
  330. package/src/renderers/common/Binding.js +35 -0
  331. package/src/renderers/common/Bindings.js +93 -1
  332. package/src/renderers/common/Buffer.js +49 -0
  333. package/src/renderers/common/BufferUtils.js +27 -0
  334. package/src/renderers/common/BundleGroup.js +57 -0
  335. package/src/renderers/common/ChainMap.js +38 -1
  336. package/src/renderers/common/ClippingContext.js +107 -14
  337. package/src/renderers/common/Color4.js +36 -0
  338. package/src/renderers/common/ComputePipeline.js +24 -0
  339. package/src/renderers/common/CubeRenderTarget.js +13 -0
  340. package/src/renderers/common/DataMap.js +37 -1
  341. package/src/renderers/common/Geometries.js +98 -0
  342. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  343. package/src/renderers/common/Info.js +87 -0
  344. package/src/renderers/common/Lighting.js +26 -0
  345. package/src/renderers/common/Pipeline.js +22 -0
  346. package/src/renderers/common/Pipelines.js +148 -5
  347. package/src/renderers/common/PostProcessing.js +75 -3
  348. package/src/renderers/common/ProgrammableStage.js +60 -2
  349. package/src/renderers/common/QuadMesh.js +54 -5
  350. package/src/renderers/common/RenderBundle.js +14 -8
  351. package/src/renderers/common/RenderBundles.js +33 -10
  352. package/src/renderers/common/RenderContext.js +169 -4
  353. package/src/renderers/common/RenderContexts.js +42 -2
  354. package/src/renderers/common/RenderList.js +178 -0
  355. package/src/renderers/common/RenderLists.js +31 -0
  356. package/src/renderers/common/RenderObject.js +328 -4
  357. package/src/renderers/common/RenderObjects.js +101 -7
  358. package/src/renderers/common/RenderPipeline.js +24 -0
  359. package/src/renderers/common/Renderer.js +1096 -31
  360. package/src/renderers/common/RendererUtils.js +193 -0
  361. package/src/renderers/common/SampledTexture.js +121 -0
  362. package/src/renderers/common/Sampler.js +30 -0
  363. package/src/renderers/common/StorageBuffer.js +24 -0
  364. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  365. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  366. package/src/renderers/common/StorageTexture.js +38 -0
  367. package/src/renderers/common/Textures.js +83 -0
  368. package/src/renderers/common/Uniform.js +188 -2
  369. package/src/renderers/common/UniformBuffer.js +19 -0
  370. package/src/renderers/common/UniformsGroup.js +139 -2
  371. package/src/renderers/common/extras/PMREMGenerator.js +24 -3
  372. package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
  373. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  374. package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
  375. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  376. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  377. package/src/renderers/common/nodes/NodeUniform.js +189 -0
  378. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  379. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  380. package/src/renderers/common/nodes/Nodes.js +327 -60
  381. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  382. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  383. package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
  384. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
  385. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  386. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
  387. package/src/renderers/webgpu/WebGPUBackend.js +480 -49
  388. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
  389. package/src/renderers/webgpu/WebGPURenderer.js +35 -0
  390. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  391. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  392. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
  393. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  394. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  395. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
  396. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
  397. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
  398. package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
  399. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  400. package/src/renderers/webxr/WebXRManager.js +7 -1
  401. package/src/textures/Data3DTexture.js +2 -2
  402. package/src/textures/Texture.js +4 -0
  403. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  404. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  405. package/examples/jsm/exporters/MMDExporter.js +0 -223
  406. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  407. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  408. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  409. package/src/nodes/core/UniformGroup.js +0 -13
  410. package/src/nodes/fog/FogExp2Node.js +0 -35
  411. package/src/nodes/fog/FogNode.js +0 -50
  412. package/src/nodes/fog/FogRangeNode.js +0 -36
  413. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -9,6 +9,11 @@ import { MeshPhongMaterial } from '../MeshPhongMaterial.js';
9
9
 
10
10
  const _defaultValues = /*@__PURE__*/ new MeshPhongMaterial();
11
11
 
12
+ /**
13
+ * Node material version of `MeshPhongMaterial`.
14
+ *
15
+ * @augments NodeMaterial
16
+ */
12
17
  class MeshPhongNodeMaterial extends NodeMaterial {
13
18
 
14
19
  static get type() {
@@ -17,15 +22,56 @@ class MeshPhongNodeMaterial extends NodeMaterial {
17
22
 
18
23
  }
19
24
 
25
+ /**
26
+ * Constructs a new mesh lambert node material.
27
+ *
28
+ * @param {Object?} parameters - The configuration parameter.
29
+ */
20
30
  constructor( parameters ) {
21
31
 
22
32
  super();
23
33
 
34
+ /**
35
+ * This flag can be used for type testing.
36
+ *
37
+ * @type {Boolean}
38
+ * @readonly
39
+ * @default true
40
+ */
24
41
  this.isMeshPhongNodeMaterial = true;
25
42
 
43
+ /**
44
+ * Set to `true` because phong materials react on lights.
45
+ *
46
+ * @type {Boolean}
47
+ * @default true
48
+ */
26
49
  this.lights = true;
27
50
 
51
+ /**
52
+ * The shininess of phong materials is by default inferred from the `shininess`
53
+ * property. This node property allows to overwrite the default
54
+ * and define the shininess with a node instead.
55
+ *
56
+ * If you don't want to overwrite the shininess but modify the existing
57
+ * value instead, use {@link module:MaterialNode.materialShininess}.
58
+ *
59
+ * @type {Node<float>?}
60
+ * @default null
61
+ */
28
62
  this.shininessNode = null;
63
+
64
+ /**
65
+ * The specular color of phong materials is by default inferred from the
66
+ * `specular` property. This node property allows to overwrite the default
67
+ * and define the specular color with a node instead.
68
+ *
69
+ * If you don't want to overwrite the specular color but modify the existing
70
+ * value instead, use {@link module:MaterialNode.materialSpecular}.
71
+ *
72
+ * @type {Node<vec3>?}
73
+ * @default null
74
+ */
29
75
  this.specularNode = null;
30
76
 
31
77
  this.setDefaultValues( _defaultValues );
@@ -34,6 +80,13 @@ class MeshPhongNodeMaterial extends NodeMaterial {
34
80
 
35
81
  }
36
82
 
83
+ /**
84
+ * Overwritten since this type of material uses {@link BasicEnvironmentNode}
85
+ * to implement the default environment mapping.
86
+ *
87
+ * @param {NodeBuilder} builder - The current node builder.
88
+ * @return {BasicEnvironmentNode<vec3>?} The environment node.
89
+ */
37
90
  setupEnvironment( builder ) {
38
91
 
39
92
  const envNode = super.setupEnvironment( builder );
@@ -42,13 +95,23 @@ class MeshPhongNodeMaterial extends NodeMaterial {
42
95
 
43
96
  }
44
97
 
98
+ /**
99
+ * Setups the lighting model.
100
+ *
101
+ * @return {PhongLightingModel} The lighting model.
102
+ */
45
103
  setupLightingModel( /*builder*/ ) {
46
104
 
47
105
  return new PhongLightingModel();
48
106
 
49
107
  }
50
108
 
51
- setupVariants() {
109
+ /**
110
+ * Setups the phong specific node variables.
111
+ *
112
+ * @param {NodeBuilder} builder - The current node builder.
113
+ */
114
+ setupVariants( /*builder*/ ) {
52
115
 
53
116
  // SHININESS
54
117
 
@@ -11,6 +11,11 @@ import { MeshPhysicalMaterial } from '../MeshPhysicalMaterial.js';
11
11
 
12
12
  const _defaultValues = /*@__PURE__*/ new MeshPhysicalMaterial();
13
13
 
14
+ /**
15
+ * Node material version of `MeshPhysicalMaterial`.
16
+ *
17
+ * @augments MeshStandardNodeMaterial
18
+ */
14
19
  class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
15
20
 
16
21
  static get type() {
@@ -19,33 +24,243 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
19
24
 
20
25
  }
21
26
 
27
+ /**
28
+ * Constructs a new mesh physical node material.
29
+ *
30
+ * @param {Object?} parameters - The configuration parameter.
31
+ */
22
32
  constructor( parameters ) {
23
33
 
24
34
  super();
25
35
 
36
+ /**
37
+ * This flag can be used for type testing.
38
+ *
39
+ * @type {Boolean}
40
+ * @readonly
41
+ * @default true
42
+ */
26
43
  this.isMeshPhysicalNodeMaterial = true;
27
44
 
45
+ /**
46
+ * The clearcoat of physical materials is by default inferred from the `clearcoat`
47
+ * and `clearcoatMap` properties. This node property allows to overwrite the default
48
+ * and define the clearcoat with a node instead.
49
+ *
50
+ * If you don't want to overwrite the clearcoat but modify the existing
51
+ * value instead, use {@link module:MaterialNode.materialClearcoat}.
52
+ *
53
+ * @type {Node<float>?}
54
+ * @default null
55
+ */
28
56
  this.clearcoatNode = null;
57
+
58
+ /**
59
+ * The clearcoat roughness of physical materials is by default inferred from the `clearcoatRoughness`
60
+ * and `clearcoatRoughnessMap` properties. This node property allows to overwrite the default
61
+ * and define the clearcoat roughness with a node instead.
62
+ *
63
+ * If you don't want to overwrite the clearcoat roughness but modify the existing
64
+ * value instead, use {@link module:MaterialNode.materialClearcoatRoughness}.
65
+ *
66
+ * @type {Node<float>?}
67
+ * @default null
68
+ */
29
69
  this.clearcoatRoughnessNode = null;
70
+
71
+ /**
72
+ * The clearcoat normal of physical materials is by default inferred from the `clearcoatNormalMap`
73
+ * property. This node property allows to overwrite the default
74
+ * and define the clearcoat normal with a node instead.
75
+ *
76
+ * If you don't want to overwrite the clearcoat normal but modify the existing
77
+ * value instead, use {@link module:MaterialNode.materialClearcoatNormal}.
78
+ *
79
+ * @type {Node<vec3>?}
80
+ * @default null
81
+ */
30
82
  this.clearcoatNormalNode = null;
31
83
 
84
+ /**
85
+ * The sheen of physical materials is by default inferred from the `sheen`, `sheenColor`
86
+ * and `sheenColorMap` properties. This node property allows to overwrite the default
87
+ * and define the sheen with a node instead.
88
+ *
89
+ * If you don't want to overwrite the sheen but modify the existing
90
+ * value instead, use {@link module:MaterialNode.materialSheen}.
91
+ *
92
+ * @type {Node<vec3>?}
93
+ * @default null
94
+ */
32
95
  this.sheenNode = null;
96
+
97
+ /**
98
+ * The sheen roughness of physical materials is by default inferred from the `sheenRoughness` and
99
+ * `sheenRoughnessMap` properties. This node property allows to overwrite the default
100
+ * and define the sheen roughness with a node instead.
101
+ *
102
+ * If you don't want to overwrite the sheen roughness but modify the existing
103
+ * value instead, use {@link module:MaterialNode.materialSheenRoughness}.
104
+ *
105
+ * @type {Node<float>?}
106
+ * @default null
107
+ */
33
108
  this.sheenRoughnessNode = null;
34
109
 
110
+ /**
111
+ * The iridescence of physical materials is by default inferred from the `iridescence`
112
+ * property. This node property allows to overwrite the default
113
+ * and define the iridescence with a node instead.
114
+ *
115
+ * If you don't want to overwrite the iridescence but modify the existing
116
+ * value instead, use {@link module:MaterialNode.materialIridescence}.
117
+ *
118
+ * @type {Node<float>?}
119
+ * @default null
120
+ */
35
121
  this.iridescenceNode = null;
122
+
123
+ /**
124
+ * The iridescence IOR of physical materials is by default inferred from the `iridescenceIOR`
125
+ * property. This node property allows to overwrite the default
126
+ * and define the iridescence IOR with a node instead.
127
+ *
128
+ * If you don't want to overwrite the iridescence IOR but modify the existing
129
+ * value instead, use {@link module:MaterialNode.materialIridescenceIOR}.
130
+ *
131
+ * @type {Node<float>?}
132
+ * @default null
133
+ */
36
134
  this.iridescenceIORNode = null;
135
+
136
+ /**
137
+ * The iridescence thickness of physical materials is by default inferred from the `iridescenceThicknessRange`
138
+ * and `iridescenceThicknessMap` properties. This node property allows to overwrite the default
139
+ * and define the iridescence thickness with a node instead.
140
+ *
141
+ * If you don't want to overwrite the iridescence thickness but modify the existing
142
+ * value instead, use {@link module:MaterialNode.materialIridescenceThickness}.
143
+ *
144
+ * @type {Node<float>?}
145
+ * @default null
146
+ */
37
147
  this.iridescenceThicknessNode = null;
38
148
 
149
+ /**
150
+ * The specular intensity of physical materials is by default inferred from the `specularIntensity`
151
+ * and `specularIntensityMap` properties. This node property allows to overwrite the default
152
+ * and define the specular intensity with a node instead.
153
+ *
154
+ * If you don't want to overwrite the specular intensity but modify the existing
155
+ * value instead, use {@link module:MaterialNode.materialSpecularIntensity}.
156
+ *
157
+ * @type {Node<float>?}
158
+ * @default null
159
+ */
39
160
  this.specularIntensityNode = null;
161
+
162
+ /**
163
+ * The specular color of physical materials is by default inferred from the `specularColor`
164
+ * and `specularColorMap` properties. This node property allows to overwrite the default
165
+ * and define the specular color with a node instead.
166
+ *
167
+ * If you don't want to overwrite the specular color but modify the existing
168
+ * value instead, use {@link module:MaterialNode.materialSpecularColor}.
169
+ *
170
+ * @type {Node<vec3>?}
171
+ * @default null
172
+ */
40
173
  this.specularColorNode = null;
41
174
 
175
+ /**
176
+ * The ior of physical materials is by default inferred from the `ior`
177
+ * property. This node property allows to overwrite the default
178
+ * and define the ior with a node instead.
179
+ *
180
+ * If you don't want to overwrite the ior but modify the existing
181
+ * value instead, use {@link module:MaterialNode.materialIOR}.
182
+ *
183
+ * @type {Node<float>?}
184
+ * @default null
185
+ */
42
186
  this.iorNode = null;
187
+
188
+ /**
189
+ * The transmission of physical materials is by default inferred from the `transmission` and
190
+ * `transmissionMap` properties. This node property allows to overwrite the default
191
+ * and define the transmission with a node instead.
192
+ *
193
+ * If you don't want to overwrite the transmission but modify the existing
194
+ * value instead, use {@link module:MaterialNode.materialTransmission}.
195
+ *
196
+ * @type {Node<float>?}
197
+ * @default null
198
+ */
43
199
  this.transmissionNode = null;
200
+
201
+ /**
202
+ * The thickness of physical materials is by default inferred from the `thickness` and
203
+ * `thicknessMap` properties. This node property allows to overwrite the default
204
+ * and define the thickness with a node instead.
205
+ *
206
+ * If you don't want to overwrite the thickness but modify the existing
207
+ * value instead, use {@link module:MaterialNode.materialThickness}.
208
+ *
209
+ * @type {Node<float>?}
210
+ * @default null
211
+ */
44
212
  this.thicknessNode = null;
213
+
214
+ /**
215
+ * The attenuation distance of physical materials is by default inferred from the
216
+ * `attenuationDistance` property. This node property allows to overwrite the default
217
+ * and define the attenuation distance with a node instead.
218
+ *
219
+ * If you don't want to overwrite the attenuation distance but modify the existing
220
+ * value instead, use {@link module:MaterialNode.materialAttenuationDistance}.
221
+ *
222
+ * @type {Node<float>?}
223
+ * @default null
224
+ */
45
225
  this.attenuationDistanceNode = null;
226
+
227
+ /**
228
+ * The attenuation color of physical materials is by default inferred from the
229
+ * `attenuationColor` property. This node property allows to overwrite the default
230
+ * and define the attenuation color with a node instead.
231
+ *
232
+ * If you don't want to overwrite the attenuation color but modify the existing
233
+ * value instead, use {@link module:MaterialNode.materialAttenuationColor}.
234
+ *
235
+ * @type {Node<vec3>?}
236
+ * @default null
237
+ */
46
238
  this.attenuationColorNode = null;
239
+
240
+ /**
241
+ * The dispersion of physical materials is by default inferred from the
242
+ * `dispersion` property. This node property allows to overwrite the default
243
+ * and define the dispersion with a node instead.
244
+ *
245
+ * If you don't want to overwrite the dispersion but modify the existing
246
+ * value instead, use {@link module:MaterialNode.materialDispersion}.
247
+ *
248
+ * @type {Node<float>?}
249
+ * @default null
250
+ */
47
251
  this.dispersionNode = null;
48
252
 
253
+ /**
254
+ * The anisotropy of physical materials is by default inferred from the
255
+ * `anisotropy` property. This node property allows to overwrite the default
256
+ * and define the anisotropy with a node instead.
257
+ *
258
+ * If you don't want to overwrite the anisotropy but modify the existing
259
+ * value instead, use {@link module:MaterialNode.materialAnisotropy}.
260
+ *
261
+ * @type {Node<float>?}
262
+ * @default null
263
+ */
49
264
  this.anisotropyNode = null;
50
265
 
51
266
  this.setDefaultValues( _defaultValues );
@@ -54,42 +269,81 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
54
269
 
55
270
  }
56
271
 
272
+ /**
273
+ * Whether the lighting model should use clearcoat or not.
274
+ *
275
+ * @type {Boolean}
276
+ * @default true
277
+ */
57
278
  get useClearcoat() {
58
279
 
59
280
  return this.clearcoat > 0 || this.clearcoatNode !== null;
60
281
 
61
282
  }
62
283
 
284
+ /**
285
+ * Whether the lighting model should use iridescence or not.
286
+ *
287
+ * @type {Boolean}
288
+ * @default true
289
+ */
63
290
  get useIridescence() {
64
291
 
65
292
  return this.iridescence > 0 || this.iridescenceNode !== null;
66
293
 
67
294
  }
68
295
 
296
+ /**
297
+ * Whether the lighting model should use sheen or not.
298
+ *
299
+ * @type {Boolean}
300
+ * @default true
301
+ */
69
302
  get useSheen() {
70
303
 
71
304
  return this.sheen > 0 || this.sheenNode !== null;
72
305
 
73
306
  }
74
307
 
308
+ /**
309
+ * Whether the lighting model should use anisotropy or not.
310
+ *
311
+ * @type {Boolean}
312
+ * @default true
313
+ */
75
314
  get useAnisotropy() {
76
315
 
77
316
  return this.anisotropy > 0 || this.anisotropyNode !== null;
78
317
 
79
318
  }
80
319
 
320
+ /**
321
+ * Whether the lighting model should use transmission or not.
322
+ *
323
+ * @type {Boolean}
324
+ * @default true
325
+ */
81
326
  get useTransmission() {
82
327
 
83
328
  return this.transmission > 0 || this.transmissionNode !== null;
84
329
 
85
330
  }
86
331
 
332
+ /**
333
+ * Whether the lighting model should use dispersion or not.
334
+ *
335
+ * @type {Boolean}
336
+ * @default true
337
+ */
87
338
  get useDispersion() {
88
339
 
89
340
  return this.dispersion > 0 || this.dispersionNode !== null;
90
341
 
91
342
  }
92
343
 
344
+ /**
345
+ * Setups the specular related node variables.
346
+ */
93
347
  setupSpecular() {
94
348
 
95
349
  const iorNode = this.iorNode ? float( this.iorNode ) : materialIOR;
@@ -100,12 +354,22 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
100
354
 
101
355
  }
102
356
 
357
+ /**
358
+ * Setups the lighting model.
359
+ *
360
+ * @return {PhysicalLightingModel} The lighting model.
361
+ */
103
362
  setupLightingModel( /*builder*/ ) {
104
363
 
105
364
  return new PhysicalLightingModel( this.useClearcoat, this.useSheen, this.useIridescence, this.useAnisotropy, this.useTransmission, this.useDispersion );
106
365
 
107
366
  }
108
367
 
368
+ /**
369
+ * Setups the physical specific node variables.
370
+ *
371
+ * @param {NodeBuilder} builder - The current node builder.
372
+ */
109
373
  setupVariants( builder ) {
110
374
 
111
375
  super.setupVariants( builder );
@@ -201,6 +465,11 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
201
465
 
202
466
  }
203
467
 
468
+ /**
469
+ * Setups the clearcoat normal node.
470
+ *
471
+ * @return {Node<vec3>} The clearcoat noraml.
472
+ */
204
473
  setupClearcoatNormal() {
205
474
 
206
475
  return this.clearcoatNormalNode ? vec3( this.clearcoatNormalNode ) : materialClearcoatNormal;
@@ -4,16 +4,49 @@ import { transformedNormalView } from '../../nodes/accessors/Normal.js';
4
4
  import { positionViewDirection } from '../../nodes/accessors/Position.js';
5
5
  import { float, vec3 } from '../../nodes/tsl/TSLBase.js';
6
6
 
7
- class SSSLightingModel extends PhysicalLightingModel {
8
-
9
- constructor( useClearcoat, useSheen, useIridescence, useSSS ) {
7
+ /** @module MeshSSSNodeMaterial **/
10
8
 
11
- super( useClearcoat, useSheen, useIridescence );
9
+ /**
10
+ * Represents the lighting model for {@link MeshSSSNodeMaterial}.
11
+ *
12
+ * @augments PhysicalLightingModel
13
+ */
14
+ class SSSLightingModel extends PhysicalLightingModel {
12
15
 
13
- this.useSSS = useSSS;
16
+ /**
17
+ * Constructs a new physical lighting model.
18
+ *
19
+ * @param {Boolean} [clearcoat=false] - Whether clearcoat is supported or not.
20
+ * @param {Boolean} [sheen=false] - Whether sheen is supported or not.
21
+ * @param {Boolean} [iridescence=false] - Whether iridescence is supported or not.
22
+ * @param {Boolean} [anisotropy=false] - Whether anisotropy is supported or not.
23
+ * @param {Boolean} [transmission=false] - Whether transmission is supported or not.
24
+ * @param {Boolean} [dispersion=false] - Whether dispersion is supported or not.
25
+ * @param {Boolean} [sss=false] - Whether SSS is supported or not.
26
+ */
27
+ constructor( clearcoat = false, sheen = false, iridescence = false, anisotropy = false, transmission = false, dispersion = false, sss = false ) {
28
+
29
+ super( clearcoat, sheen, iridescence, anisotropy, transmission, dispersion );
30
+
31
+ /**
32
+ * Whether the lighting model should use SSS or not.
33
+ *
34
+ * @type {Boolean}
35
+ * @default false
36
+ */
37
+ this.useSSS = sss;
14
38
 
15
39
  }
16
40
 
41
+ /**
42
+ * Extends the default implementation with a SSS term.
43
+ *
44
+ * Reference: [Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look]{@link https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/}
45
+ *
46
+ * @param {Object} input - The input data.
47
+ * @param {StackNode} stack - The current stack.
48
+ * @param {NodeBuilder} builder - The current node builder.
49
+ */
17
50
  direct( { lightDirection, lightColor, reflectedLight }, stack, builder ) {
18
51
 
19
52
  if ( this.useSSS === true ) {
@@ -36,6 +69,12 @@ class SSSLightingModel extends PhysicalLightingModel {
36
69
 
37
70
  }
38
71
 
72
+ /**
73
+ * This node material is an experimental extension of {@link MeshPhysicalNodeMaterial}
74
+ * that implements a Subsurface scattering (SSS) term.
75
+ *
76
+ * @augments MeshPhysicalNodeMaterial
77
+ */
39
78
  class MeshSSSNodeMaterial extends MeshPhysicalNodeMaterial {
40
79
 
41
80
  static get type() {
@@ -44,28 +83,80 @@ class MeshSSSNodeMaterial extends MeshPhysicalNodeMaterial {
44
83
 
45
84
  }
46
85
 
86
+ /**
87
+ * Constructs a new mesh SSS node material.
88
+ *
89
+ * @param {Object?} parameters - The configuration parameter.
90
+ */
47
91
  constructor( parameters ) {
48
92
 
49
93
  super( parameters );
50
94
 
95
+ /**
96
+ * Represents the thickness color.
97
+ *
98
+ * @type {Node<vec3>?}
99
+ * @default null
100
+ */
51
101
  this.thicknessColorNode = null;
102
+
103
+ /**
104
+ * Represents the distortion factor.
105
+ *
106
+ * @type {Node<float>?}
107
+ */
52
108
  this.thicknessDistortionNode = float( 0.1 );
109
+
110
+ /**
111
+ * Represents the thickness ambient factor.
112
+ *
113
+ * @type {Node<float>?}
114
+ */
53
115
  this.thicknessAmbientNode = float( 0.0 );
116
+
117
+ /**
118
+ * Represents the thickness attenuation.
119
+ *
120
+ * @type {Node<float>?}
121
+ */
54
122
  this.thicknessAttenuationNode = float( .1 );
123
+
124
+ /**
125
+ * Represents the thickness power.
126
+ *
127
+ * @type {Node<float>?}
128
+ */
55
129
  this.thicknessPowerNode = float( 2.0 );
130
+
131
+ /**
132
+ * Represents the thickness scale.
133
+ *
134
+ * @type {Node<float>?}
135
+ */
56
136
  this.thicknessScaleNode = float( 10.0 );
57
137
 
58
138
  }
59
139
 
140
+ /**
141
+ * Whether the lighting model should use SSS or not.
142
+ *
143
+ * @type {Boolean}
144
+ * @default true
145
+ */
60
146
  get useSSS() {
61
147
 
62
148
  return this.thicknessColorNode !== null;
63
149
 
64
150
  }
65
151
 
152
+ /**
153
+ * Setups the lighting model.
154
+ *
155
+ * @return {SSSLightingModel} The lighting model.
156
+ */
66
157
  setupLightingModel( /*builder*/ ) {
67
158
 
68
- return new SSSLightingModel( this.useClearcoat, this.useSheen, this.useIridescence, this.useSSS );
159
+ return new SSSLightingModel( this.useClearcoat, this.useSheen, this.useIridescence, this.useAnisotropy, this.useTransmission, this.useDispersion, this.useSSS );
69
160
 
70
161
  }
71
162