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
@@ -1,6 +1,13 @@
1
1
  import Node from './Node.js';
2
2
  import { nodeObject, varying } from '../tsl/TSLBase.js';
3
3
 
4
+ /** @module AttributeNode **/
5
+
6
+ /**
7
+ * Base class for representing shader attributes as nodes.
8
+ *
9
+ * @augments Node
10
+ */
4
11
  class AttributeNode extends Node {
5
12
 
6
13
  static get type() {
@@ -9,10 +16,22 @@ class AttributeNode extends Node {
9
16
 
10
17
  }
11
18
 
19
+ /**
20
+ * Constructs a new attribute node.
21
+ *
22
+ * @param {String} attributeName - The name of the attribute.
23
+ * @param {String?} nodeType - The node type.
24
+ */
12
25
  constructor( attributeName, nodeType = null ) {
13
26
 
14
27
  super( nodeType );
15
28
 
29
+ /**
30
+ * `AttributeNode` sets this property to `true` by default.
31
+ *
32
+ * @type {Boolean}
33
+ * @default true
34
+ */
16
35
  this.global = true;
17
36
 
18
37
  this._attributeName = attributeName;
@@ -51,6 +70,14 @@ class AttributeNode extends Node {
51
70
 
52
71
  }
53
72
 
73
+ /**
74
+ * Sets the attribute name to the given value. The method can be
75
+ * overwritten in derived classes if the final name must be computed
76
+ * analytically.
77
+ *
78
+ * @param {String} attributeName - The name of the attribute.
79
+ * @return {AttributeNode} A reference to this node.
80
+ */
54
81
  setAttributeName( attributeName ) {
55
82
 
56
83
  this._attributeName = attributeName;
@@ -59,6 +86,14 @@ class AttributeNode extends Node {
59
86
 
60
87
  }
61
88
 
89
+ /**
90
+ * Returns the attribute name of this node. The method can be
91
+ * overwritten in derived classes if the final name must be computed
92
+ * analytically.
93
+ *
94
+ * @param {NodeBuilder} builder - The current node builder.
95
+ * @return {String} The attribute name.
96
+ */
62
97
  getAttributeName( /*builder*/ ) {
63
98
 
64
99
  return this._attributeName;
@@ -122,4 +157,12 @@ class AttributeNode extends Node {
122
157
 
123
158
  export default AttributeNode;
124
159
 
160
+ /**
161
+ * TSL function for creating an attribute node.
162
+ *
163
+ * @function
164
+ * @param {String} name - The name of the attribute.
165
+ * @param {String?} nodeType - The node type.
166
+ * @returns {AttributeNode}
167
+ */
125
168
  export const attribute = ( name, nodeType ) => nodeObject( new AttributeNode( name, nodeType ) );
@@ -1,6 +1,19 @@
1
1
  import Node from './Node.js';
2
2
  import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
3
3
 
4
+ /** @module BypassNode **/
5
+
6
+ /**
7
+ * The class generates the code of a given node but returns another node in the output.
8
+ * This can be used to call a method or node that does not return a value, i.e.
9
+ * type `void` on an input where returning a value is required. Example:
10
+ *
11
+ * ```js
12
+ * material.colorNode = myColor.bypass( runVoidFn() )
13
+ *```
14
+ *
15
+ * @augments Node
16
+ */
4
17
  class BypassNode extends Node {
5
18
 
6
19
  static get type() {
@@ -9,13 +22,37 @@ class BypassNode extends Node {
9
22
 
10
23
  }
11
24
 
12
- constructor( returnNode, callNode ) {
25
+ /**
26
+ * Constructs a new bypass node.
27
+ *
28
+ * @param {Node} outputNode - The output node.
29
+ * @param {Node} callNode - The call node.
30
+ */
31
+ constructor( outputNode, callNode ) {
13
32
 
14
33
  super();
15
34
 
35
+ /**
36
+ * This flag can be used for type testing.
37
+ *
38
+ * @type {Boolean}
39
+ * @readonly
40
+ * @default true
41
+ */
16
42
  this.isBypassNode = true;
17
43
 
18
- this.outputNode = returnNode;
44
+ /**
45
+ * The output node.
46
+ *
47
+ * @type {Node}
48
+ */
49
+ this.outputNode = outputNode;
50
+
51
+ /**
52
+ * The call node.
53
+ *
54
+ * @type {Node}
55
+ */
19
56
  this.callNode = callNode;
20
57
 
21
58
  }
@@ -44,6 +81,14 @@ class BypassNode extends Node {
44
81
 
45
82
  export default BypassNode;
46
83
 
84
+ /**
85
+ * TSL function for creating a bypass node.
86
+ *
87
+ * @function
88
+ * @param {Node} outputNode - The output node.
89
+ * @param {Node} callNode - The call node.
90
+ * @returns {BypassNode}
91
+ */
47
92
  export const bypass = /*@__PURE__*/ nodeProxy( BypassNode );
48
93
 
49
94
  addMethodChaining( 'bypass', bypass );
@@ -1,6 +1,15 @@
1
1
  import Node from './Node.js';
2
2
  import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
3
3
 
4
+ /** @module CacheNode **/
5
+
6
+ /**
7
+ * This node can be used as a cache management component for another node.
8
+ * Caching is in general used by default in {@link NodeBuilder} but this node
9
+ * allows the usage of a shared parent cache during the build process.
10
+ *
11
+ * @augments Node
12
+ */
4
13
  class CacheNode extends Node {
5
14
 
6
15
  static get type() {
@@ -9,20 +18,54 @@ class CacheNode extends Node {
9
18
 
10
19
  }
11
20
 
21
+ /**
22
+ * Constructs a new cache node.
23
+ *
24
+ * @param {Node} node - The node that should be cached.
25
+ * @param {Boolean} [parent=true] - Whether this node refers to a shared parent cache or not.
26
+ */
12
27
  constructor( node, parent = true ) {
13
28
 
14
29
  super();
15
30
 
31
+ /**
32
+ * The node that should be cached.
33
+ *
34
+ * @type {Node}
35
+ */
16
36
  this.node = node;
37
+
38
+ /**
39
+ * Whether this node refers to a shared parent cache or not.
40
+ *
41
+ * @type {Boolean}
42
+ * @default true
43
+ */
17
44
  this.parent = parent;
18
45
 
46
+ /**
47
+ * This flag can be used for type testing.
48
+ *
49
+ * @type {Boolean}
50
+ * @readonly
51
+ * @default true
52
+ */
19
53
  this.isCacheNode = true;
20
54
 
21
55
  }
22
56
 
23
57
  getNodeType( builder ) {
24
58
 
25
- return this.node.getNodeType( builder );
59
+ const previousCache = builder.getCache();
60
+ const cache = builder.getCacheFromNode( this, this.parent );
61
+
62
+ builder.setCache( cache );
63
+
64
+ const nodeType = this.node.getNodeType( builder );
65
+
66
+ builder.setCache( previousCache );
67
+
68
+ return nodeType;
26
69
 
27
70
  }
28
71
 
@@ -45,6 +88,14 @@ class CacheNode extends Node {
45
88
 
46
89
  export default CacheNode;
47
90
 
48
- export const cache = ( node, ...params ) => nodeObject( new CacheNode( nodeObject( node ), ...params ) );
91
+ /**
92
+ * TSL function for creating a cache node.
93
+ *
94
+ * @function
95
+ * @param {Node} node - The node that should be cached.
96
+ * @param {Boolean} parent - Whether this node refers to a shared parent cache or not.
97
+ * @returns {CacheNode}
98
+ */
99
+ export const cache = ( node, parent ) => nodeObject( new CacheNode( nodeObject( node ), parent ) );
49
100
 
50
101
  addMethodChaining( 'cache', cache );
@@ -1,5 +1,10 @@
1
1
  import InputNode from './InputNode.js';
2
2
 
3
+ /**
4
+ * Class for representing a constant value in the shader.
5
+ *
6
+ * @augments InputNode
7
+ */
3
8
  class ConstNode extends InputNode {
4
9
 
5
10
  static get type() {
@@ -8,14 +13,33 @@ class ConstNode extends InputNode {
8
13
 
9
14
  }
10
15
 
16
+ /**
17
+ * Constructs a new input node.
18
+ *
19
+ * @param {Any} value - The value of this node. Usually a JS primitive or three.js object (vector, matrix, color).
20
+ * @param {String?} nodeType - The node type. If no explicit type is defined, the node tries to derive the type from its value.
21
+ */
11
22
  constructor( value, nodeType = null ) {
12
23
 
13
24
  super( value, nodeType );
14
25
 
26
+ /**
27
+ * This flag can be used for type testing.
28
+ *
29
+ * @type {Boolean}
30
+ * @readonly
31
+ * @default true
32
+ */
15
33
  this.isConstNode = true;
16
34
 
17
35
  }
18
36
 
37
+ /**
38
+ * Generates the shader string of the value with the current node builder.
39
+ *
40
+ * @param {NodeBuilder} builder - The current node builder.
41
+ * @return {String} The generated value as a shader string.
42
+ */
19
43
  generateConst( builder ) {
20
44
 
21
45
  return builder.generateConst( this.getNodeType( builder ), this.value );
@@ -1,6 +1,18 @@
1
1
  import Node from './Node.js';
2
2
  import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
3
3
 
4
+ /** @module ContextNode **/
5
+
6
+ /**
7
+ * This node can be used as a context management component for another node.
8
+ * {@link NodeBuilder} performs its node building process in a specific context and
9
+ * this node allows the modify the context. A typical use case is to overwrite `getUV()` e.g.:
10
+ *
11
+ * ```js
12
+ *node.context( { getUV: () => customCoord } );
13
+ *```
14
+ * @augments Node
15
+ */
4
16
  class ContextNode extends Node {
5
17
 
6
18
  static get type() {
@@ -9,23 +21,59 @@ class ContextNode extends Node {
9
21
 
10
22
  }
11
23
 
24
+ /**
25
+ * Constructs a new context node.
26
+ *
27
+ * @param {Node} node - The node whose context should be modified.
28
+ * @param {Object} [value={}] - The modified context data.
29
+ */
12
30
  constructor( node, value = {} ) {
13
31
 
14
32
  super();
15
33
 
34
+ /**
35
+ * This flag can be used for type testing.
36
+ *
37
+ * @type {Boolean}
38
+ * @readonly
39
+ * @default true
40
+ */
16
41
  this.isContextNode = true;
17
42
 
43
+ /**
44
+ * The node whose context should be modified.
45
+ *
46
+ * @type {Node}
47
+ */
18
48
  this.node = node;
49
+
50
+ /**
51
+ * The modified context data.
52
+ *
53
+ * @type {Object}
54
+ * @default {}
55
+ */
19
56
  this.value = value;
20
57
 
21
58
  }
22
59
 
60
+ /**
61
+ * This method is overwritten to ensure it returns the reference to {@link module:ContextNode~ContextNode#node}.
62
+ *
63
+ * @return {Node} A reference to {@link module:ContextNode~ContextNode#node}.
64
+ */
23
65
  getScope() {
24
66
 
25
67
  return this.node.getScope();
26
68
 
27
69
  }
28
70
 
71
+ /**
72
+ * This method is overwritten to ensure it returns the type of {@link module:ContextNode~ContextNode#node}.
73
+ *
74
+ * @param {NodeBuilder} builder - The current node builder.
75
+ * @return {String} The node type.
76
+ */
29
77
  getNodeType( builder ) {
30
78
 
31
79
  return this.node.getNodeType( builder );
@@ -70,7 +118,24 @@ class ContextNode extends Node {
70
118
 
71
119
  export default ContextNode;
72
120
 
121
+ /**
122
+ * TSL function for creating a context node.
123
+ *
124
+ * @function
125
+ * @param {Node} node - The node whose context should be modified.
126
+ * @param {Object} [value={}] - The modified context data.
127
+ * @returns {ContextNode}
128
+ */
73
129
  export const context = /*@__PURE__*/ nodeProxy( ContextNode );
130
+
131
+ /**
132
+ * TSL function for defining a label context value for a given node.
133
+ *
134
+ * @function
135
+ * @param {Node} node - The node whose context should be modified.
136
+ * @param {String} name - The name/label to set.
137
+ * @returns {ContextNode}
138
+ */
74
139
  export const label = ( node, name ) => context( node, { label: name } );
75
140
 
76
141
  addMethodChaining( 'context', context );
@@ -1,6 +1,21 @@
1
1
  import Node from './Node.js';
2
2
  import { nodeImmutable, varying } from '../tsl/TSLBase.js';
3
3
 
4
+ /** @module IndexNode **/
5
+
6
+ /**
7
+ * This class represents shader indices of different types. The following predefined node
8
+ * objects cover frequent use cases:
9
+ *
10
+ * - `vertexIndex`: The index of a vertex within a mesh.
11
+ * - `instanceIndex`: The index of either a mesh instance or an invocation of a compute shader.
12
+ * - `drawIndex`: The index of a draw call.
13
+ * - `invocationLocalIndex`: The index of a compute invocation within the scope of a workgroup load.
14
+ * - `invocationSubgroupIndex`: The index of a compute invocation within the scope of a subgroup.
15
+ * - `subgroupIndex`: The index of the subgroup the current compute invocation belongs to.
16
+ *
17
+ * @augments Node
18
+ */
4
19
  class IndexNode extends Node {
5
20
 
6
21
  static get type() {
@@ -9,13 +24,30 @@ class IndexNode extends Node {
9
24
 
10
25
  }
11
26
 
27
+ /**
28
+ * Constructs a new index node.
29
+ *
30
+ * @param {('vertex'|'instance'|'subgroup'|'invocationLocal'|'invocationSubgroup'|'draw')} scope - The scope of the index node.
31
+ */
12
32
  constructor( scope ) {
13
33
 
14
34
  super( 'uint' );
15
35
 
36
+ /**
37
+ * The scope of the index node.
38
+ *
39
+ * @type {String}
40
+ */
16
41
  this.scope = scope;
17
42
 
18
- this.isInstanceIndexNode = true;
43
+ /**
44
+ * This flag can be used for type testing.
45
+ *
46
+ * @type {Boolean}
47
+ * @readonly
48
+ * @default true
49
+ */
50
+ this.isIndexNode = true;
19
51
 
20
52
  }
21
53
 
@@ -28,32 +60,26 @@ class IndexNode extends Node {
28
60
 
29
61
  if ( scope === IndexNode.VERTEX ) {
30
62
 
31
- // The index of a vertex within a mesh.
32
63
  propertyName = builder.getVertexIndex();
33
64
 
34
65
  } else if ( scope === IndexNode.INSTANCE ) {
35
66
 
36
- // The index of either a mesh instance or an invocation of a compute shader.
37
67
  propertyName = builder.getInstanceIndex();
38
68
 
39
69
  } else if ( scope === IndexNode.DRAW ) {
40
70
 
41
- // The index of a draw call.
42
71
  propertyName = builder.getDrawIndex();
43
72
 
44
73
  } else if ( scope === IndexNode.INVOCATION_LOCAL ) {
45
74
 
46
- // The index of a compute invocation within the scope of a workgroup load.
47
75
  propertyName = builder.getInvocationLocalIndex();
48
76
 
49
77
  } else if ( scope === IndexNode.INVOCATION_SUBGROUP ) {
50
78
 
51
- // The index of a compute invocation within the scope of a subgroup.
52
79
  propertyName = builder.getInvocationSubgroupIndex();
53
80
 
54
81
  } else if ( scope === IndexNode.SUBGROUP ) {
55
82
 
56
- // The index of the subgroup the current compute invocation belongs to.
57
83
  propertyName = builder.getSubgroupIndex();
58
84
 
59
85
  } else {
@@ -91,9 +117,44 @@ IndexNode.DRAW = 'draw';
91
117
 
92
118
  export default IndexNode;
93
119
 
120
+ /**
121
+ * TSL object that represents the index of a vertex within a mesh.
122
+ *
123
+ * @type {IndexNode}
124
+ */
94
125
  export const vertexIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.VERTEX );
126
+
127
+ /**
128
+ * TSL object that represents the index of either a mesh instance or an invocation of a compute shader.
129
+ *
130
+ * @type {IndexNode}
131
+ */
95
132
  export const instanceIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.INSTANCE );
133
+
134
+ /**
135
+ * TSL object that represents the index of the subgroup the current compute invocation belongs to.
136
+ *
137
+ * @type {IndexNode}
138
+ */
96
139
  export const subgroupIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.SUBGROUP );
140
+
141
+ /**
142
+ * TSL object that represents the index of a compute invocation within the scope of a subgroup.
143
+ *
144
+ * @type {IndexNode}
145
+ */
97
146
  export const invocationSubgroupIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.INVOCATION_SUBGROUP );
147
+
148
+ /**
149
+ * TSL object that represents the index of a compute invocation within the scope of a workgroup load.
150
+ *
151
+ * @type {IndexNode}
152
+ */
98
153
  export const invocationLocalIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.INVOCATION_LOCAL );
154
+
155
+ /**
156
+ * TSL object that represents the index of a draw call.
157
+ *
158
+ * @type {IndexNode}
159
+ */
99
160
  export const drawIndex = /*@__PURE__*/ nodeImmutable( IndexNode, IndexNode.DRAW );
@@ -1,6 +1,11 @@
1
1
  import Node from './Node.js';
2
2
  import { getValueType, getValueFromType, arrayBufferToBase64 } from './NodeUtils.js';
3
3
 
4
+ /**
5
+ * Base class for representing data input nodes.
6
+ *
7
+ * @augments Node
8
+ */
4
9
  class InputNode extends Node {
5
10
 
6
11
  static get type() {
@@ -9,13 +14,38 @@ class InputNode extends Node {
9
14
 
10
15
  }
11
16
 
17
+ /**
18
+ * Constructs a new input node.
19
+ *
20
+ * @param {Any} value - The value of this node. This can be a any JS primitive, functions, array buffers or even three.js objects (vector, matrices, colors).
21
+ * @param {String?} nodeType - The node type. If no explicit type is defined, the node tries to derive the type from its value.
22
+ */
12
23
  constructor( value, nodeType = null ) {
13
24
 
14
25
  super( nodeType );
15
26
 
27
+ /**
28
+ * This flag can be used for type testing.
29
+ *
30
+ * @type {Boolean}
31
+ * @readonly
32
+ * @default true
33
+ */
16
34
  this.isInputNode = true;
17
35
 
36
+ /**
37
+ * The value of this node. This can be a any JS primitive, functions, array buffers or even three.js objects (vector, matrices, colors).
38
+ *
39
+ * @type {Any}
40
+ */
18
41
  this.value = value;
42
+
43
+ /**
44
+ * The precision of the value in the shader.
45
+ *
46
+ * @type {('low'|'medium'|'high')?}
47
+ * @default null
48
+ */
19
49
  this.precision = null;
20
50
 
21
51
  }
@@ -32,12 +62,30 @@ class InputNode extends Node {
32
62
 
33
63
  }
34
64
 
65
+ /**
66
+ * Returns the input type of the node which is by default the node type. Derived modules
67
+ * might overwrite this method and use a fixed type or compute one analytically.
68
+ *
69
+ * A typical example for different input and node types are textures. The input type of a
70
+ * normal RGBA texture is `texture` whereas its node type is `vec4`.
71
+ *
72
+ * @param {NodeBuilder} builder - The current node builder.
73
+ * @return {String} The input type.
74
+ */
35
75
  getInputType( builder ) {
36
76
 
37
77
  return this.getNodeType( builder );
38
78
 
39
79
  }
40
80
 
81
+ /**
82
+ * Sets the precision to the given value. The method can be
83
+ * overwritten in derived classes if the final precision must be computed
84
+ * analytically.
85
+ *
86
+ * @param {('low'|'medium'|'high')} precision - The precision of the input value in the shader.
87
+ * @return {InputNode} A reference to this node.
88
+ */
41
89
  setPrecision( precision ) {
42
90
 
43
91
  this.precision = precision;
@@ -1,15 +1,75 @@
1
+ /**
2
+ * Abstract class for implementing lighting models. The module defines
3
+ * multiple methods that concrete lighting models can implement. These
4
+ * methods are executed at different points during the light evaluation
5
+ * process.
6
+ */
1
7
  class LightingModel {
2
8
 
9
+ /**
10
+ * This method is intended for setting up lighting model and context data
11
+ * which are later used in the evaluation process.
12
+ *
13
+ * @abstract
14
+ * @param {ContextNode} input - The current node context.
15
+ * @param {StackNode} stack - The current stack.
16
+ * @param {NodeBuilder} builder - The current node builder.
17
+ */
3
18
  start( /*input, stack, builder*/ ) { }
4
19
 
20
+ /**
21
+ * This method is intended for executing final tasks like final updates
22
+ * to the outgoing light.
23
+ *
24
+ * @abstract
25
+ * @param {ContextNode} input - The current node context.
26
+ * @param {StackNode} stack - The current stack.
27
+ * @param {NodeBuilder} builder - The current node builder.
28
+ */
5
29
  finish( /*input, stack, builder*/ ) { }
6
30
 
31
+ /**
32
+ * This method is intended for implementing the direct light term and
33
+ * executed during the build process of directional, point and spot light nodes.
34
+ *
35
+ * @abstract
36
+ * @param {Object} input - The input data.
37
+ * @param {StackNode} stack - The current stack.
38
+ * @param {NodeBuilder} builder - The current node builder.
39
+ */
7
40
  direct( /*input, stack, builder*/ ) { }
8
41
 
42
+ /**
43
+ * This method is intended for implementing the direct light term for
44
+ * rect area light nodes.
45
+ *
46
+ * @abstract
47
+ * @param {Object} input - The input data.
48
+ * @param {StackNode} stack - The current stack.
49
+ * @param {NodeBuilder} builder - The current node builder.
50
+ */
9
51
  directRectArea( /*input, stack, builder*/ ) {}
10
52
 
53
+ /**
54
+ * This method is intended for implementing the indirect light term.
55
+ *
56
+ * @abstract
57
+ * @param {ContextNode} input - The current node context.
58
+ * @param {StackNode} stack - The current stack.
59
+ * @param {NodeBuilder} builder - The current node builder.
60
+ */
11
61
  indirect( /*input, stack, builder*/ ) { }
12
62
 
63
+ /**
64
+ * This method is intended for implementing the ambient occlusion term.
65
+ * Unlike other methods, this method must be called manually by the lighting
66
+ * model in its indirect term.
67
+ *
68
+ * @abstract
69
+ * @param {ContextNode} input - The current node context.
70
+ * @param {StackNode} stack - The current stack.
71
+ * @param {NodeBuilder} builder - The current node builder.
72
+ */
13
73
  ambientOcclusion( /*input, stack, builder*/ ) { }
14
74
 
15
75
  }