super-three 0.171.0 → 0.173.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 (455) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +594 -427
  4. package/build/three.core.js +515 -81
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +79 -350
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +20 -7
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +29362 -3427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +29361 -3427
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -5
  15. package/examples/jsm/animation/CCDIKSolver.js +9 -7
  16. package/examples/jsm/capabilities/WebGPU.js +1 -1
  17. package/examples/jsm/controls/ArcballControls.js +48 -37
  18. package/examples/jsm/controls/OrbitControls.js +5 -4
  19. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  20. package/examples/jsm/curves/NURBSCurve.js +1 -1
  21. package/examples/jsm/curves/NURBSUtils.js +3 -0
  22. package/examples/jsm/effects/OutlineEffect.js +1 -1
  23. package/examples/jsm/exporters/GLTFExporter.js +34 -29
  24. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  25. package/examples/jsm/exporters/PLYExporter.js +2 -2
  26. package/examples/jsm/geometries/TextGeometry.js +1 -12
  27. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  28. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  29. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  30. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  31. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  32. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  33. package/examples/jsm/loaders/3MFLoader.js +6 -3
  34. package/examples/jsm/loaders/BVHLoader.js +1 -1
  35. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  36. package/examples/jsm/loaders/DDSLoader.js +42 -0
  37. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  38. package/examples/jsm/loaders/GLTFLoader.js +22 -4
  39. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  40. package/examples/jsm/loaders/KTXLoader.js +4 -4
  41. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  42. package/examples/jsm/loaders/LottieLoader.js +1 -1
  43. package/examples/jsm/loaders/MTLLoader.js +1 -0
  44. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  45. package/examples/jsm/loaders/PLYLoader.js +7 -7
  46. package/examples/jsm/loaders/PVRLoader.js +1 -1
  47. package/examples/jsm/loaders/SVGLoader.js +2 -2
  48. package/examples/jsm/loaders/TDSLoader.js +1 -2
  49. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  50. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  51. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  52. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  53. package/examples/jsm/math/ConvexHull.js +1 -1
  54. package/examples/jsm/math/OBB.js +17 -0
  55. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  56. package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
  57. package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
  58. package/examples/jsm/misc/Volume.js +27 -17
  59. package/examples/jsm/misc/VolumeSlice.js +7 -5
  60. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  61. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  62. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  63. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  64. package/examples/jsm/objects/Sky.js +2 -2
  65. package/examples/jsm/objects/SkyMesh.js +3 -3
  66. package/examples/jsm/objects/Water2.js +1 -1
  67. package/examples/jsm/objects/Water2Mesh.js +2 -2
  68. package/examples/jsm/objects/WaterMesh.js +29 -24
  69. package/examples/jsm/physics/JoltPhysics.js +7 -7
  70. package/examples/jsm/physics/RapierPhysics.js +4 -4
  71. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  72. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  73. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  74. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  75. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  76. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  77. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  78. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  79. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  80. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  81. package/examples/jsm/shaders/BokehShader2.js +1 -1
  82. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  83. package/examples/jsm/shaders/OutputShader.js +5 -1
  84. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  85. package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
  86. package/examples/jsm/transpiler/TSLEncoder.js +2 -0
  87. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  88. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  89. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  90. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  91. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  92. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  93. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  94. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  95. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  96. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  97. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  98. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  99. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  100. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  101. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  102. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  103. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  104. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  105. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  106. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  107. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  108. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  109. package/examples/jsm/tsl/display/Sepia.js +9 -0
  110. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  111. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  112. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  113. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  114. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  115. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  116. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  117. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  118. package/examples/jsm/utils/CameraUtils.js +4 -1
  119. package/examples/jsm/utils/GeometryUtils.js +22 -19
  120. package/examples/jsm/utils/SceneUtils.js +2 -2
  121. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  122. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  123. package/package.json +8 -3
  124. package/src/Three.Core.js +4 -0
  125. package/src/Three.Legacy.js +0 -21
  126. package/src/Three.TSL.js +18 -5
  127. package/src/Three.WebGPU.Nodes.js +2 -2
  128. package/src/Three.WebGPU.js +2 -2
  129. package/src/animation/PropertyBinding.js +2 -2
  130. package/src/cameras/ArrayCamera.js +1 -0
  131. package/src/cameras/PerspectiveCamera.js +18 -2
  132. package/src/constants.js +6 -1
  133. package/src/core/BufferAttribute.js +4 -0
  134. package/src/core/EventDispatcher.js +8 -6
  135. package/src/core/RenderTarget.js +18 -0
  136. package/src/core/RenderTarget3D.js +22 -0
  137. package/src/core/RenderTargetArray.js +22 -0
  138. package/src/extras/Earcut.js +1 -1
  139. package/src/extras/ImageUtils.js +1 -11
  140. package/src/extras/PMREMGenerator.js +20 -0
  141. package/src/extras/TextureUtils.js +6 -0
  142. package/src/helpers/CameraHelper.js +16 -13
  143. package/src/loaders/nodes/NodeLoader.js +59 -0
  144. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  145. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  146. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  147. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  148. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  149. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  150. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  151. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  152. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  153. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  154. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  155. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  156. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  157. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  158. package/src/materials/nodes/NodeMaterial.js +476 -23
  159. package/src/materials/nodes/NodeMaterials.js +0 -1
  160. package/src/materials/nodes/PointsNodeMaterial.js +121 -10
  161. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  162. package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
  163. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  164. package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
  165. package/src/nodes/Nodes.js +5 -6
  166. package/src/nodes/TSL.js +6 -3
  167. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  168. package/src/nodes/accessors/Arrays.js +47 -6
  169. package/src/nodes/accessors/BatchNode.js +42 -6
  170. package/src/nodes/accessors/Bitangent.js +37 -0
  171. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  172. package/src/nodes/accessors/BufferNode.js +63 -0
  173. package/src/nodes/accessors/BuiltinNode.js +38 -0
  174. package/src/nodes/accessors/Camera.js +113 -3
  175. package/src/nodes/accessors/ClippingNode.js +71 -2
  176. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  177. package/src/nodes/accessors/InstanceNode.js +85 -2
  178. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  179. package/src/nodes/accessors/Lights.js +50 -1
  180. package/src/nodes/accessors/MaterialNode.js +306 -12
  181. package/src/nodes/accessors/MaterialProperties.js +7 -0
  182. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  183. package/src/nodes/accessors/ModelNode.js +100 -5
  184. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  185. package/src/nodes/accessors/MorphNode.js +48 -4
  186. package/src/nodes/accessors/Normal.js +65 -5
  187. package/src/nodes/accessors/Object3DNode.js +101 -1
  188. package/src/nodes/accessors/PointUVNode.js +26 -0
  189. package/src/nodes/accessors/Position.js +56 -7
  190. package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
  191. package/src/nodes/accessors/ReferenceNode.js +201 -2
  192. package/src/nodes/accessors/ReflectVector.js +24 -0
  193. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  194. package/src/nodes/accessors/SceneNode.js +54 -0
  195. package/src/nodes/accessors/SkinningNode.js +127 -1
  196. package/src/nodes/accessors/StorageBufferNode.js +209 -8
  197. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  198. package/src/nodes/accessors/Tangent.js +38 -2
  199. package/src/nodes/accessors/Texture3DNode.js +91 -7
  200. package/src/nodes/accessors/TextureBicubic.js +12 -2
  201. package/src/nodes/accessors/TextureNode.js +316 -10
  202. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  203. package/src/nodes/accessors/UV.js +10 -1
  204. package/src/nodes/accessors/UniformArrayNode.js +231 -25
  205. package/src/nodes/accessors/UserDataNode.js +46 -0
  206. package/src/nodes/accessors/VelocityNode.js +80 -0
  207. package/src/nodes/accessors/VertexColorNode.js +39 -2
  208. package/src/nodes/code/CodeNode.js +95 -1
  209. package/src/nodes/code/ExpressionNode.js +28 -0
  210. package/src/nodes/code/FunctionCallNode.js +37 -0
  211. package/src/nodes/code/FunctionNode.js +45 -0
  212. package/src/nodes/code/ScriptableNode.js +223 -1
  213. package/src/nodes/code/ScriptableValueNode.js +85 -1
  214. package/src/nodes/core/ArrayNode.js +125 -0
  215. package/src/nodes/core/AssignNode.js +48 -2
  216. package/src/nodes/core/AttributeNode.js +43 -0
  217. package/src/nodes/core/BypassNode.js +47 -2
  218. package/src/nodes/core/CacheNode.js +53 -2
  219. package/src/nodes/core/ConstNode.js +32 -0
  220. package/src/nodes/core/ContextNode.js +65 -0
  221. package/src/nodes/core/IndexNode.js +68 -7
  222. package/src/nodes/core/InputNode.js +48 -0
  223. package/src/nodes/core/LightingModel.js +60 -0
  224. package/src/nodes/core/MRTNode.js +66 -0
  225. package/src/nodes/core/Node.js +350 -12
  226. package/src/nodes/core/NodeAttribute.js +38 -0
  227. package/src/nodes/core/NodeBuilder.js +1166 -26
  228. package/src/nodes/core/NodeCache.js +41 -2
  229. package/src/nodes/core/NodeCode.js +31 -0
  230. package/src/nodes/core/NodeFrame.js +123 -2
  231. package/src/nodes/core/NodeFunction.js +46 -0
  232. package/src/nodes/core/NodeFunctionInput.js +44 -0
  233. package/src/nodes/core/NodeParser.js +11 -0
  234. package/src/nodes/core/NodeUniform.js +52 -0
  235. package/src/nodes/core/NodeUtils.js +152 -1
  236. package/src/nodes/core/NodeVar.js +47 -1
  237. package/src/nodes/core/NodeVarying.js +28 -0
  238. package/src/nodes/core/OutputStructNode.js +51 -10
  239. package/src/nodes/core/ParameterNode.js +28 -0
  240. package/src/nodes/core/PropertyNode.js +232 -0
  241. package/src/nodes/core/StackNode.js +98 -1
  242. package/src/nodes/core/StructNode.js +121 -0
  243. package/src/nodes/core/StructType.js +13 -0
  244. package/src/nodes/core/StructTypeNode.js +105 -6
  245. package/src/nodes/core/TempNode.js +31 -5
  246. package/src/nodes/core/UniformGroupNode.js +82 -7
  247. package/src/nodes/core/UniformNode.js +66 -0
  248. package/src/nodes/core/VarNode.js +146 -7
  249. package/src/nodes/core/VaryingNode.js +100 -3
  250. package/src/nodes/core/constants.js +36 -0
  251. package/src/nodes/display/BlendModes.js +88 -1
  252. package/src/nodes/display/BumpMapNode.js +37 -0
  253. package/src/nodes/display/ColorAdjustment.js +53 -11
  254. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  255. package/src/nodes/display/ColorSpaceNode.js +82 -0
  256. package/src/nodes/display/FrontFacingNode.js +29 -0
  257. package/src/nodes/display/NormalMapNode.js +43 -0
  258. package/src/nodes/display/PassNode.js +300 -7
  259. package/src/nodes/display/PosterizeNode.js +33 -0
  260. package/src/nodes/display/RenderOutputNode.js +66 -1
  261. package/src/nodes/display/ScreenNode.js +96 -0
  262. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  263. package/src/nodes/display/ToneMappingNode.js +55 -2
  264. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  265. package/src/nodes/display/ViewportDepthNode.js +122 -8
  266. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  267. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  268. package/src/nodes/display/ViewportTextureNode.js +57 -0
  269. package/src/nodes/fog/Fog.js +110 -0
  270. package/src/nodes/functions/BasicLightingModel.js +24 -0
  271. package/src/nodes/functions/PhongLightingModel.js +34 -2
  272. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  273. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  274. package/src/nodes/functions/ToonLightingModel.js +20 -0
  275. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  276. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  277. package/src/nodes/geometry/RangeNode.js +54 -2
  278. package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
  279. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  280. package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
  281. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  282. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  283. package/src/nodes/lighting/AONode.js +18 -0
  284. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  285. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  286. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  287. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  288. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  289. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  290. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  291. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  292. package/src/nodes/lighting/IrradianceNode.js +17 -0
  293. package/src/nodes/lighting/LightProbeNode.js +20 -0
  294. package/src/nodes/lighting/LightUtils.js +12 -0
  295. package/src/nodes/lighting/LightingContextNode.js +48 -0
  296. package/src/nodes/lighting/LightingNode.js +15 -6
  297. package/src/nodes/lighting/LightsNode.js +132 -1
  298. package/src/nodes/lighting/PointLightNode.js +32 -1
  299. package/src/nodes/lighting/PointShadowNode.js +54 -1
  300. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  301. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  302. package/src/nodes/lighting/ShadowNode.js +241 -35
  303. package/src/nodes/lighting/SpotLightNode.js +43 -0
  304. package/src/nodes/math/ConditionalNode.js +78 -4
  305. package/src/nodes/math/Hash.js +9 -0
  306. package/src/nodes/math/MathNode.js +627 -11
  307. package/src/nodes/math/MathUtils.js +45 -1
  308. package/src/nodes/math/OperatorNode.js +329 -18
  309. package/src/nodes/math/TriNoise3D.js +18 -7
  310. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  311. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  312. package/src/nodes/pmrem/PMREMNode.js +133 -0
  313. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  314. package/src/nodes/procedural/Checker.js +9 -0
  315. package/src/nodes/shapes/Shapes.js +33 -0
  316. package/src/nodes/tsl/TSLBase.js +3 -2
  317. package/src/nodes/tsl/TSLCore.js +22 -2
  318. package/src/nodes/utils/ArrayElementNode.js +39 -3
  319. package/src/nodes/utils/ConvertNode.js +31 -0
  320. package/src/nodes/utils/CubeMapNode.js +78 -0
  321. package/src/nodes/utils/Discard.js +16 -0
  322. package/src/nodes/utils/EquirectUVNode.js +31 -1
  323. package/src/nodes/utils/FlipNode.js +38 -0
  324. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  325. package/src/nodes/utils/JoinNode.js +25 -0
  326. package/src/nodes/utils/LoopNode.js +82 -2
  327. package/src/nodes/utils/MatcapUVNode.js +17 -0
  328. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  329. package/src/nodes/utils/MemberNode.js +68 -0
  330. package/src/nodes/utils/Oscillators.js +33 -0
  331. package/src/nodes/utils/Packing.js +17 -0
  332. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  333. package/src/nodes/utils/RTTNode.js +123 -2
  334. package/src/nodes/utils/ReflectorNode.js +174 -4
  335. package/src/nodes/utils/RemapNode.js +79 -0
  336. package/src/nodes/utils/RotateNode.js +41 -0
  337. package/src/nodes/utils/SetNode.js +44 -1
  338. package/src/nodes/utils/SplitNode.js +55 -3
  339. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  340. package/src/nodes/utils/SpriteUtils.js +17 -0
  341. package/src/nodes/utils/StorageArrayElementNode.js +54 -0
  342. package/src/nodes/utils/Timer.js +40 -0
  343. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  344. package/src/nodes/utils/UVUtils.js +20 -0
  345. package/src/nodes/utils/ViewportUtils.js +13 -0
  346. package/src/objects/BatchedMesh.js +2 -3
  347. package/src/objects/ClippingGroup.js +49 -0
  348. package/src/objects/Line.js +6 -6
  349. package/src/renderers/WebGLRenderer.js +30 -4
  350. package/src/renderers/common/Animation.js +85 -0
  351. package/src/renderers/common/Attributes.js +36 -0
  352. package/src/renderers/common/Backend.js +502 -44
  353. package/src/renderers/common/Background.js +48 -1
  354. package/src/renderers/common/BindGroup.js +43 -0
  355. package/src/renderers/common/Binding.js +35 -0
  356. package/src/renderers/common/Bindings.js +93 -1
  357. package/src/renderers/common/Buffer.js +49 -0
  358. package/src/renderers/common/BufferUtils.js +27 -0
  359. package/src/renderers/common/BundleGroup.js +57 -0
  360. package/src/renderers/common/ChainMap.js +45 -6
  361. package/src/renderers/common/ClippingContext.js +108 -15
  362. package/src/renderers/common/Color4.js +40 -0
  363. package/src/renderers/common/ComputePipeline.js +24 -0
  364. package/src/renderers/common/CubeRenderTarget.js +13 -0
  365. package/src/renderers/common/DataMap.js +37 -1
  366. package/src/renderers/common/Geometries.js +91 -14
  367. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  368. package/src/renderers/common/Info.js +78 -35
  369. package/src/renderers/common/Lighting.js +34 -6
  370. package/src/renderers/common/Pipeline.js +22 -0
  371. package/src/renderers/common/Pipelines.js +148 -5
  372. package/src/renderers/common/PostProcessing.js +99 -11
  373. package/src/renderers/common/ProgrammableStage.js +60 -2
  374. package/src/renderers/common/QuadMesh.js +54 -5
  375. package/src/renderers/common/RenderBundle.js +14 -8
  376. package/src/renderers/common/RenderBundles.js +39 -10
  377. package/src/renderers/common/RenderContext.js +201 -2
  378. package/src/renderers/common/RenderContexts.js +59 -6
  379. package/src/renderers/common/RenderList.js +178 -0
  380. package/src/renderers/common/RenderLists.js +40 -3
  381. package/src/renderers/common/RenderObject.js +400 -17
  382. package/src/renderers/common/RenderObjects.js +103 -7
  383. package/src/renderers/common/RenderPipeline.js +24 -0
  384. package/src/renderers/common/Renderer.js +1170 -86
  385. package/src/renderers/common/RendererUtils.js +193 -0
  386. package/src/renderers/common/SampledTexture.js +120 -0
  387. package/src/renderers/common/Sampler.js +30 -0
  388. package/src/renderers/common/StorageBuffer.js +24 -0
  389. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  390. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  391. package/src/renderers/common/StorageTexture.js +38 -0
  392. package/src/renderers/common/Textures.js +97 -7
  393. package/src/renderers/common/TimestampQueryPool.js +39 -0
  394. package/src/renderers/common/Uniform.js +225 -3
  395. package/src/renderers/common/UniformBuffer.js +19 -0
  396. package/src/renderers/common/UniformsGroup.js +141 -2
  397. package/src/renderers/common/XRManager.js +1193 -0
  398. package/src/renderers/common/XRRenderTarget.js +74 -0
  399. package/src/renderers/common/extras/PMREMGenerator.js +76 -10
  400. package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
  401. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  402. package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
  403. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  404. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  405. package/src/renderers/common/nodes/NodeUniform.js +243 -2
  406. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  407. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  408. package/src/renderers/common/nodes/Nodes.js +352 -78
  409. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  410. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  411. package/src/renderers/webgl/WebGLBackground.js +4 -0
  412. package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
  413. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
  414. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
  415. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  416. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  417. package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
  418. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
  419. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
  420. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  421. package/src/renderers/webgpu/WebGPUBackend.js +578 -164
  422. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
  423. package/src/renderers/webgpu/WebGPURenderer.js +36 -0
  424. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  425. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  426. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
  427. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  428. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  429. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
  430. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
  431. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
  432. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
  433. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
  434. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
  435. package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
  436. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  437. package/src/renderers/webxr/WebXRManager.js +19 -2
  438. package/src/textures/Data3DTexture.js +2 -2
  439. package/src/textures/Texture.js +4 -0
  440. package/src/textures/VideoFrameTexture.js +35 -0
  441. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  442. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  443. package/examples/jsm/exporters/MMDExporter.js +0 -223
  444. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
  445. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  446. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  447. package/examples/jsm/objects/InstancedPoints.js +0 -19
  448. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  449. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  450. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  451. package/src/nodes/core/UniformGroup.js +0 -13
  452. package/src/nodes/fog/FogExp2Node.js +0 -35
  453. package/src/nodes/fog/FogNode.js +0 -50
  454. package/src/nodes/fog/FogRangeNode.js +0 -36
  455. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -4,6 +4,15 @@ import { cameraNear, cameraFar } from '../accessors/Camera.js';
4
4
  import { positionView } from '../accessors/Position.js';
5
5
  import { viewportDepthTexture } from './ViewportDepthTextureNode.js';
6
6
 
7
+ /** @module ViewportDepthNode **/
8
+
9
+ /**
10
+ * This node offers a collection of features in context of the depth logic in the fragment shader.
11
+ * Depending on {@link ViewportDepthNode#scope}, it can be used to define a depth value for the current
12
+ * fragment or for depth evaluation purposes.
13
+ *
14
+ * @augments Node
15
+ */
7
16
  class ViewportDepthNode extends Node {
8
17
 
9
18
  static get type() {
@@ -12,13 +21,44 @@ class ViewportDepthNode extends Node {
12
21
 
13
22
  }
14
23
 
24
+ /**
25
+ * Constructs a new viewport depth node.
26
+ *
27
+ * @param {('depth'|'depthBase'|'linearDepth')} scope - The node's scope.
28
+ * @param {Node?} [valueNode=null] - The value node.
29
+ */
15
30
  constructor( scope, valueNode = null ) {
16
31
 
17
32
  super( 'float' );
18
33
 
34
+ /**
35
+ * The node behaves differently depending on which scope is selected.
36
+ *
37
+ * - `ViewportDepthNode.DEPTH_BASE`: Allows to define a value for the current fragment's depth.
38
+ * - `ViewportDepthNode.DEPTH`: Represents the depth value for the current fragment (`valueNode` is ignored).
39
+ * - `ViewportDepthNode.LINEAR_DEPTH`: Represents the linear (orthographic) depth value of the current fragment.
40
+ * If a `valueNode` is set, the scope can be used to convert perspective depth data to linear data.
41
+ *
42
+ * @type {('depth'|'depthBase'|'linearDepth')}
43
+ */
19
44
  this.scope = scope;
45
+
46
+ /**
47
+ * Can be used to define a custom depth value.
48
+ * The property is ignored in the `ViewportDepthNode.DEPTH` scope.
49
+ *
50
+ * @type {Node?}
51
+ * @default null
52
+ */
20
53
  this.valueNode = valueNode;
21
54
 
55
+ /**
56
+ * This flag can be used for type testing.
57
+ *
58
+ * @type {Boolean}
59
+ * @readonly
60
+ * @default true
61
+ */
22
62
  this.isViewportDepthNode = true;
23
63
 
24
64
  }
@@ -102,21 +142,61 @@ export default ViewportDepthNode;
102
142
 
103
143
  // NOTE: viewZ, the z-coordinate in camera space, is negative for points in front of the camera
104
144
 
105
- // -near maps to 0; -far maps to 1
145
+ /**
146
+ * TSL function for converting a viewZ value to an orthographic depth value.
147
+ *
148
+ * @function
149
+ * @param {Node<float>} viewZ - The viewZ node.
150
+ * @param {Node<float>} near - The camera's near value.
151
+ * @param {Node<float>} far - The camera's far value.
152
+ * @returns {Node<float>}
153
+ */
106
154
  export const viewZToOrthographicDepth = ( viewZ, near, far ) => viewZ.add( near ).div( near.sub( far ) );
107
155
 
108
- // maps orthographic depth in [ 0, 1 ] to viewZ
156
+ /**
157
+ * TSL function for converting an orthographic depth value to a viewZ value.
158
+ *
159
+ * @function
160
+ * @param {Node<float>} depth - The orthographic depth.
161
+ * @param {Node<float>} near - The camera's near value.
162
+ * @param {Node<float>} far - The camera's far value.
163
+ * @returns {Node<float>}
164
+ */
109
165
  export const orthographicDepthToViewZ = ( depth, near, far ) => near.sub( far ).mul( depth ).sub( near );
110
166
 
111
- // NOTE: https://twitter.com/gonnavis/status/1377183786949959682
112
-
113
- // -near maps to 0; -far maps to 1
167
+ /**
168
+ * TSL function for converting a viewZ value to a perspective depth value.
169
+ *
170
+ * Note: {link https://twitter.com/gonnavis/status/1377183786949959682}.
171
+ *
172
+ * @function
173
+ * @param {Node<float>} viewZ - The viewZ node.
174
+ * @param {Node<float>} near - The camera's near value.
175
+ * @param {Node<float>} far - The camera's far value.
176
+ * @returns {Node<float>}
177
+ */
114
178
  export const viewZToPerspectiveDepth = ( viewZ, near, far ) => near.add( viewZ ).mul( far ).div( far.sub( near ).mul( viewZ ) );
115
179
 
116
- // maps perspective depth in [ 0, 1 ] to viewZ
180
+ /**
181
+ * TSL function for converting a perspective depth value to a viewZ value.
182
+ *
183
+ * @function
184
+ * @param {Node<float>} depth - The perspective depth.
185
+ * @param {Node<float>} near - The camera's near value.
186
+ * @param {Node<float>} far - The camera's far value.
187
+ * @returns {Node<float>}
188
+ */
117
189
  export const perspectiveDepthToViewZ = ( depth, near, far ) => near.mul( far ).div( far.sub( near ).mul( depth ).sub( far ) );
118
190
 
119
- // -near maps to 0; -far maps to 1
191
+ /**
192
+ * TSL function for converting a viewZ value to a logarithmic depth value.
193
+ *
194
+ * @function
195
+ * @param {Node<float>} viewZ - The viewZ node.
196
+ * @param {Node<float>} near - The camera's near value.
197
+ * @param {Node<float>} far - The camera's far value.
198
+ * @returns {Node<float>}
199
+ */
120
200
  export const viewZToLogarithmicDepth = ( viewZ, near, far ) => {
121
201
 
122
202
  // NOTE: viewZ must be negative--see explanation at the end of this comment block.
@@ -152,7 +232,15 @@ export const viewZToLogarithmicDepth = ( viewZ, near, far ) => {
152
232
 
153
233
  };
154
234
 
155
- // maps logarithmic depth in [ 0, 1 ] to viewZ
235
+ /**
236
+ * TSL function for converting a logarithmic depth value to a viewZ value.
237
+ *
238
+ * @function
239
+ * @param {Node<float>} depth - The logarithmic depth.
240
+ * @param {Node<float>} near - The camera's near value.
241
+ * @param {Node<float>} far - The camera's far value.
242
+ * @returns {Node<float>}
243
+ */
156
244
  export const logarithmicDepthToViewZ = ( depth, near, far ) => {
157
245
 
158
246
  // NOTE: we add a 'negate()' call to the return value here to maintain consistency with
@@ -163,10 +251,36 @@ export const logarithmicDepthToViewZ = ( depth, near, far ) => {
163
251
 
164
252
  };
165
253
 
254
+ /**
255
+ * TSL function for defining a value for the current fragment's depth.
256
+ *
257
+ * @function
258
+ * @param {Node<float>} value - The depth value to set.
259
+ * @returns {ViewportDepthNode<float>}
260
+ */
166
261
  const depthBase = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.DEPTH_BASE );
167
262
 
263
+ /**
264
+ * TSL object that represents the depth value for the current fragment.
265
+ *
266
+ * @type {ViewportDepthNode}
267
+ */
168
268
  export const depth = /*@__PURE__*/ nodeImmutable( ViewportDepthNode, ViewportDepthNode.DEPTH );
269
+
270
+ /**
271
+ * TSL function for converting a perspective depth value to linear depth.
272
+ *
273
+ * @function
274
+ * @param {Node<float>} value - The perspective depth.
275
+ * @returns {ViewportDepthNode<float>}
276
+ */
169
277
  export const linearDepth = /*@__PURE__*/ nodeProxy( ViewportDepthNode, ViewportDepthNode.LINEAR_DEPTH );
278
+
279
+ /**
280
+ * TSL object that represents the linear (orthographic) depth value of the current fragment
281
+ *
282
+ * @type {ViewportDepthNode}
283
+ */
170
284
  export const viewportLinearDepth = /*@__PURE__*/ linearDepth( viewportDepthTexture() );
171
285
 
172
286
  depth.assign = ( value ) => depthBase( value );
@@ -4,8 +4,17 @@ import { screenUV } from './ScreenNode.js';
4
4
 
5
5
  import { DepthTexture } from '../../textures/DepthTexture.js';
6
6
 
7
+ /** @module ViewportDepthTextureNode **/
8
+
7
9
  let sharedDepthbuffer = null;
8
10
 
11
+ /**
12
+ * Represents the depth of the current viewport as a texture. This module
13
+ * can be used in combination with viewport texture to achieve effects
14
+ * that require depth evaluation.
15
+ *
16
+ * @augments module:ViewportTextureNode~ViewportTextureNode
17
+ */
9
18
  class ViewportDepthTextureNode extends ViewportTextureNode {
10
19
 
11
20
  static get type() {
@@ -14,6 +23,12 @@ class ViewportDepthTextureNode extends ViewportTextureNode {
14
23
 
15
24
  }
16
25
 
26
+ /**
27
+ * Constructs a new viewport depth 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 ( sharedDepthbuffer === null ) {
@@ -30,4 +45,12 @@ class ViewportDepthTextureNode extends ViewportTextureNode {
30
45
 
31
46
  export default ViewportDepthTextureNode;
32
47
 
48
+ /**
49
+ * TSL function for a viewport depth texture node.
50
+ *
51
+ * @function
52
+ * @param {Node} [uvNode=screenUV] - The uv node.
53
+ * @param {Node?} [levelNode=null] - The level node.
54
+ * @returns {ViewportDepthTextureNode}
55
+ */
33
56
  export const viewportDepthTexture = /*@__PURE__*/ nodeProxy( ViewportDepthTextureNode );
@@ -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,110 @@
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
+ /**
82
+ * @function
83
+ * @deprecated since r171. Use `fog( color, rangeFogFactor( near, far ) )` instead.
84
+ *
85
+ * @param {Node} color
86
+ * @param {Node} near
87
+ * @param {Node} far
88
+ * @returns {Function}
89
+ */
90
+ export function rangeFog( color, near, far ) { // @deprecated, r171
91
+
92
+ console.warn( 'THREE.TSL: "rangeFog( color, near, far )" is deprecated. Use "fog( color, rangeFogFactor( near, far ) )" instead.' );
93
+ return fog( color, rangeFogFactor( near, far ) );
94
+
95
+ }
96
+
97
+ /**
98
+ * @function
99
+ * @deprecated since r171. Use `fog( color, densityFogFactor( density ) )` instead.
100
+ *
101
+ * @param {Node} color
102
+ * @param {Node} density
103
+ * @returns {Function}
104
+ */
105
+ export function densityFog( color, density ) { // @deprecated, r171
106
+
107
+ console.warn( 'THREE.TSL: "densityFog( color, density )" is deprecated. Use "fog( color, densityFogFactor( density ) )" instead.' );
108
+ return fog( color, densityFogFactor( density ) );
109
+
110
+ }
@@ -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 } ) ) );