@plastic-software/three 0.167.4 → 0.174.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 (747) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +36217 -23964
  4. package/build/three.core.js +48830 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +10175 -46744
  7. package/build/three.module.min.js +2 -3
  8. package/build/three.tsl.js +550 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +44348 -50671
  11. package/build/three.webgpu.min.js +2 -3
  12. package/build/three.webgpu.nodes.js +70301 -0
  13. package/build/three.webgpu.nodes.min.js +6 -0
  14. package/examples/jsm/Addons.js +3 -15
  15. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  16. package/examples/jsm/animation/CCDIKSolver.js +61 -11
  17. package/examples/jsm/capabilities/WebGL.js +27 -21
  18. package/examples/jsm/capabilities/WebGPU.js +1 -10
  19. package/examples/jsm/controls/ArcballControls.js +262 -231
  20. package/examples/jsm/controls/DragControls.js +1 -1
  21. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  22. package/examples/jsm/controls/FlyControls.js +194 -188
  23. package/examples/jsm/controls/OrbitControls.js +801 -777
  24. package/examples/jsm/controls/PointerLockControls.js +26 -20
  25. package/examples/jsm/controls/TrackballControls.js +469 -448
  26. package/examples/jsm/controls/TransformControls.js +119 -68
  27. package/examples/jsm/csm/CSM.js +2 -2
  28. package/examples/jsm/csm/CSMFrustum.js +7 -4
  29. package/examples/jsm/csm/CSMHelper.js +2 -0
  30. package/examples/jsm/csm/CSMShadowNode.js +442 -0
  31. package/examples/jsm/curves/NURBSCurve.js +33 -2
  32. package/examples/jsm/curves/NURBSUtils.js +3 -0
  33. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  34. package/examples/jsm/effects/OutlineEffect.js +1 -1
  35. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  36. package/examples/jsm/effects/StereoEffect.js +6 -1
  37. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  38. package/examples/jsm/exporters/EXRExporter.js +19 -11
  39. package/examples/jsm/exporters/GLTFExporter.js +181 -109
  40. package/examples/jsm/exporters/KTX2Exporter.js +54 -23
  41. package/examples/jsm/exporters/OBJExporter.js +5 -1
  42. package/examples/jsm/exporters/PLYExporter.js +11 -9
  43. package/examples/jsm/exporters/USDZExporter.js +50 -11
  44. package/examples/jsm/geometries/DecalGeometry.js +73 -21
  45. package/examples/jsm/geometries/TextGeometry.js +1 -12
  46. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  47. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  48. package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
  49. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  50. package/examples/jsm/interactive/HTMLMesh.js +1 -0
  51. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  52. package/examples/jsm/interactive/SelectionHelper.js +3 -1
  53. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  54. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  55. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  56. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  57. package/examples/jsm/lighting/TiledLighting.js +18 -0
  58. package/examples/jsm/lights/LightProbeGenerator.js +26 -12
  59. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  60. package/examples/jsm/lines/LineGeometry.js +25 -0
  61. package/examples/jsm/lines/LineMaterial.js +0 -1
  62. package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
  63. package/examples/jsm/lines/webgpu/Line2.js +2 -1
  64. package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
  65. package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
  66. package/examples/jsm/loaders/3DMLoader.js +1 -0
  67. package/examples/jsm/loaders/3MFLoader.js +104 -2
  68. package/examples/jsm/loaders/BVHLoader.js +1 -1
  69. package/examples/jsm/loaders/ColladaLoader.js +15 -12
  70. package/examples/jsm/loaders/DDSLoader.js +42 -0
  71. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  72. package/examples/jsm/loaders/FBXLoader.js +71 -22
  73. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  74. package/examples/jsm/loaders/GLTFLoader.js +29 -14
  75. package/examples/jsm/loaders/KTX2Loader.js +160 -58
  76. package/examples/jsm/loaders/KTXLoader.js +4 -4
  77. package/examples/jsm/loaders/LDrawLoader.js +22 -136
  78. package/examples/jsm/loaders/LottieLoader.js +2 -1
  79. package/examples/jsm/loaders/MTLLoader.js +27 -7
  80. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  81. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  82. package/examples/jsm/loaders/OBJLoader.js +5 -3
  83. package/examples/jsm/loaders/PCDLoader.js +14 -13
  84. package/examples/jsm/loaders/PDBLoader.js +3 -2
  85. package/examples/jsm/loaders/PLYLoader.js +15 -12
  86. package/examples/jsm/loaders/PVRLoader.js +1 -1
  87. package/examples/jsm/loaders/STLLoader.js +3 -2
  88. package/examples/jsm/loaders/SVGLoader.js +2 -2
  89. package/examples/jsm/loaders/TDSLoader.js +17 -18
  90. package/examples/jsm/loaders/VRMLLoader.js +17 -17
  91. package/examples/jsm/loaders/VTKLoader.js +4 -3
  92. package/examples/jsm/loaders/XYZLoader.js +3 -2
  93. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  94. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
  95. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
  96. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  97. package/examples/jsm/math/ColorSpaces.js +76 -0
  98. package/examples/jsm/math/ConvexHull.js +1 -1
  99. package/examples/jsm/math/OBB.js +17 -0
  100. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  101. package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
  102. package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
  103. package/examples/jsm/misc/Timer.js +27 -12
  104. package/examples/jsm/misc/Volume.js +28 -18
  105. package/examples/jsm/misc/VolumeSlice.js +19 -16
  106. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  107. package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
  108. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  109. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  110. package/examples/jsm/objects/LensflareMesh.js +324 -0
  111. package/examples/jsm/objects/Reflector.js +5 -2
  112. package/examples/jsm/objects/Sky.js +2 -2
  113. package/examples/jsm/objects/SkyMesh.js +14 -14
  114. package/examples/jsm/objects/Water2.js +1 -1
  115. package/examples/jsm/objects/Water2Mesh.js +11 -9
  116. package/examples/jsm/objects/WaterMesh.js +38 -33
  117. package/examples/jsm/physics/JoltPhysics.js +8 -8
  118. package/examples/jsm/physics/RapierPhysics.js +5 -5
  119. package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
  120. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  121. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  122. package/examples/jsm/postprocessing/OutlinePass.js +37 -51
  123. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  124. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  125. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  126. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  128. package/examples/jsm/postprocessing/SSRPass.js +8 -4
  129. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  130. package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
  131. package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
  132. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  133. package/examples/jsm/shaders/BokehShader2.js +1 -1
  134. package/examples/jsm/shaders/FXAAShader.js +225 -224
  135. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  136. package/examples/jsm/shaders/OutputShader.js +6 -2
  137. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  138. package/examples/jsm/transpiler/AST.js +12 -2
  139. package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
  140. package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
  141. package/examples/jsm/transpiler/TSLEncoder.js +96 -21
  142. package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
  143. package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
  144. package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
  145. package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
  146. package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
  147. package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
  148. package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
  149. package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
  150. package/examples/jsm/tsl/display/FXAANode.js +364 -0
  151. package/examples/jsm/tsl/display/FilmNode.js +100 -0
  152. package/examples/jsm/tsl/display/GTAONode.js +521 -0
  153. package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
  154. package/examples/jsm/tsl/display/LensflareNode.js +278 -0
  155. package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
  156. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  157. package/examples/jsm/tsl/display/OutlineNode.js +750 -0
  158. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
  159. package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
  160. package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
  161. package/examples/jsm/tsl/display/SMAANode.js +767 -0
  162. package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
  163. package/examples/jsm/tsl/display/SSRNode.js +538 -0
  164. package/examples/jsm/tsl/display/Sepia.js +24 -0
  165. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
  166. package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
  167. package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
  168. package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
  169. package/examples/jsm/tsl/display/TransitionNode.js +140 -0
  170. package/examples/jsm/tsl/display/hashBlur.js +34 -0
  171. package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
  172. package/examples/jsm/tsl/math/Bayer.js +18 -0
  173. package/examples/jsm/tsl/utils/Raymarching.js +65 -0
  174. package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
  175. package/examples/jsm/utils/CameraUtils.js +4 -1
  176. package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
  177. package/examples/jsm/utils/GeometryUtils.js +22 -19
  178. package/examples/jsm/utils/SceneOptimizer.js +410 -0
  179. package/examples/jsm/utils/SceneUtils.js +2 -2
  180. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  181. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  182. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  183. package/examples/jsm/utils/UVsDebug.js +1 -1
  184. package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
  185. package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
  186. package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
  187. package/examples/jsm/webxr/Text2D.js +6 -6
  188. package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
  189. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  190. package/package.json +14 -9
  191. package/src/Three.Core.js +182 -0
  192. package/src/Three.Legacy.js +0 -21
  193. package/src/Three.TSL.js +543 -0
  194. package/src/Three.WebGPU.Nodes.js +23 -0
  195. package/src/Three.WebGPU.js +13 -184
  196. package/src/Three.js +1 -176
  197. package/src/animation/AnimationClip.js +2 -2
  198. package/src/animation/AnimationObjectGroup.js +2 -2
  199. package/src/animation/AnimationUtils.js +1 -1
  200. package/src/animation/PropertyBinding.js +2 -2
  201. package/src/audio/Audio.js +379 -2
  202. package/src/audio/AudioAnalyser.js +58 -1
  203. package/src/audio/AudioContext.js +15 -0
  204. package/src/audio/AudioListener.js +76 -0
  205. package/src/audio/PositionalAudio.js +107 -0
  206. package/src/cameras/ArrayCamera.js +29 -0
  207. package/src/cameras/Camera.js +47 -0
  208. package/src/cameras/CubeCamera.js +66 -0
  209. package/src/cameras/OrthographicCamera.js +109 -0
  210. package/src/cameras/PerspectiveCamera.js +173 -34
  211. package/src/cameras/StereoCamera.js +48 -2
  212. package/src/constants.js +6 -6
  213. package/src/core/BufferAttribute.js +4 -9
  214. package/src/core/BufferGeometry.js +48 -8
  215. package/src/core/Clock.js +1 -1
  216. package/src/core/EventDispatcher.js +52 -8
  217. package/src/core/InterleavedBuffer.js +4 -13
  218. package/src/core/Object3D.js +573 -3
  219. package/src/core/RenderTarget.js +22 -4
  220. package/src/core/RenderTarget3D.js +22 -0
  221. package/src/core/RenderTargetArray.js +22 -0
  222. package/src/extras/Controls.js +104 -0
  223. package/src/extras/DataUtils.js +48 -8
  224. package/src/extras/Earcut.js +18 -7
  225. package/src/extras/ImageUtils.js +18 -11
  226. package/src/extras/PMREMGenerator.js +40 -9
  227. package/src/extras/ShapeUtils.js +24 -2
  228. package/src/extras/TextureUtils.js +96 -10
  229. package/src/extras/core/Curve.js +153 -53
  230. package/src/extras/core/CurvePath.js +63 -22
  231. package/src/extras/core/Interpolations.js +29 -3
  232. package/src/extras/core/Path.js +134 -1
  233. package/src/extras/core/Shape.js +66 -3
  234. package/src/extras/core/ShapePath.js +76 -0
  235. package/src/extras/curves/ArcCurve.js +22 -0
  236. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  237. package/src/extras/curves/CubicBezierCurve.js +67 -0
  238. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  239. package/src/extras/curves/EllipseCurve.js +102 -0
  240. package/src/extras/curves/LineCurve.js +36 -0
  241. package/src/extras/curves/LineCurve3.js +36 -0
  242. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  243. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  244. package/src/extras/curves/SplineCurve.js +48 -0
  245. package/src/geometries/BoxGeometry.js +38 -0
  246. package/src/geometries/CapsuleGeometry.js +34 -0
  247. package/src/geometries/CircleGeometry.js +40 -0
  248. package/src/geometries/ConeGeometry.js +38 -0
  249. package/src/geometries/CylinderGeometry.js +50 -4
  250. package/src/geometries/DodecahedronGeometry.js +32 -0
  251. package/src/geometries/EdgesGeometry.js +30 -2
  252. package/src/geometries/ExtrudeGeometry.js +52 -0
  253. package/src/geometries/IcosahedronGeometry.js +32 -0
  254. package/src/geometries/LatheGeometry.js +43 -3
  255. package/src/geometries/OctahedronGeometry.js +32 -0
  256. package/src/geometries/PlaneGeometry.js +34 -0
  257. package/src/geometries/PolyhedronGeometry.js +29 -0
  258. package/src/geometries/RingGeometry.js +36 -0
  259. package/src/geometries/ShapeGeometry.js +37 -0
  260. package/src/geometries/SphereGeometry.js +37 -0
  261. package/src/geometries/TetrahedronGeometry.js +32 -0
  262. package/src/geometries/TorusGeometry.js +35 -0
  263. package/src/geometries/TorusKnotGeometry.js +38 -0
  264. package/src/geometries/TubeGeometry.js +49 -0
  265. package/src/geometries/WireframeGeometry.js +32 -0
  266. package/src/helpers/ArrowHelper.js +60 -3
  267. package/src/helpers/AxesHelper.js +28 -0
  268. package/src/helpers/Box3Helper.js +28 -0
  269. package/src/helpers/BoxHelper.js +43 -7
  270. package/src/helpers/CameraHelper.js +61 -18
  271. package/src/helpers/DirectionalLightHelper.js +52 -0
  272. package/src/helpers/GridHelper.js +26 -0
  273. package/src/helpers/HemisphereLightHelper.js +39 -0
  274. package/src/helpers/PlaneHelper.js +33 -0
  275. package/src/helpers/PointLightHelper.js +43 -0
  276. package/src/helpers/PolarGridHelper.js +30 -0
  277. package/src/helpers/SkeletonHelper.js +39 -2
  278. package/src/helpers/SpotLightHelper.js +40 -0
  279. package/src/lights/AmbientLight.js +25 -0
  280. package/src/lights/DirectionalLight.js +57 -0
  281. package/src/lights/DirectionalLightShadow.js +15 -0
  282. package/src/lights/HemisphereLight.js +32 -0
  283. package/src/lights/Light.js +36 -0
  284. package/src/lights/LightProbe.js +43 -0
  285. package/src/lights/LightShadow.js +159 -0
  286. package/src/lights/PointLight.js +59 -0
  287. package/src/lights/PointLightShadow.js +21 -0
  288. package/src/lights/RectAreaLight.js +59 -0
  289. package/src/lights/SpotLight.js +102 -0
  290. package/src/lights/SpotLightShadow.js +24 -2
  291. package/src/lights/webgpu/IESSpotLight.js +21 -0
  292. package/src/loaders/Loader.js +132 -0
  293. package/src/loaders/MaterialLoader.js +7 -1
  294. package/src/loaders/nodes/NodeLoader.js +189 -0
  295. package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  296. package/src/loaders/nodes/NodeObjectLoader.js +151 -0
  297. package/src/materials/LineDashedMaterial.js +0 -1
  298. package/src/materials/Material.js +469 -7
  299. package/src/materials/MeshPhongMaterial.js +1 -1
  300. package/src/materials/MeshPhysicalMaterial.js +2 -2
  301. package/src/materials/MeshStandardMaterial.js +2 -2
  302. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
  303. package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  304. package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  305. package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
  306. package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  307. package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  308. package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  309. package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  310. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
  311. package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  312. package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
  313. package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  314. package/src/materials/nodes/NodeMaterial.js +1180 -0
  315. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
  316. package/src/materials/nodes/PointsNodeMaterial.js +153 -0
  317. package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
  318. package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
  319. package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
  320. package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
  321. package/src/math/Box2.js +177 -0
  322. package/src/math/Box3.js +243 -0
  323. package/src/math/Color.js +343 -0
  324. package/src/math/ColorManagement.js +143 -102
  325. package/src/math/Cylindrical.js +65 -6
  326. package/src/math/Euler.js +137 -4
  327. package/src/math/Frustum.js +83 -0
  328. package/src/math/Interpolant.js +87 -8
  329. package/src/math/Line3.js +96 -2
  330. package/src/math/MathUtils.js +182 -19
  331. package/src/math/Matrix2.js +70 -0
  332. package/src/math/Matrix3.js +229 -4
  333. package/src/math/Matrix4.js +368 -3
  334. package/src/math/Plane.js +164 -2
  335. package/src/math/Quaternion.js +265 -9
  336. package/src/math/Ray.js +160 -0
  337. package/src/math/Sphere.js +147 -0
  338. package/src/math/Spherical.js +73 -11
  339. package/src/math/SphericalHarmonics3.js +112 -14
  340. package/src/math/Triangle.js +230 -2
  341. package/src/math/Vector2.js +396 -10
  342. package/src/math/Vector3.js +550 -13
  343. package/src/math/Vector4.js +415 -9
  344. package/src/math/interpolants/CubicInterpolant.js +10 -1
  345. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  346. package/src/math/interpolants/LinearInterpolant.js +13 -0
  347. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  348. package/src/nodes/Nodes.js +84 -166
  349. package/src/nodes/TSL.js +167 -0
  350. package/src/nodes/accessors/AccessorsUtils.js +39 -10
  351. package/src/nodes/accessors/Arrays.js +68 -0
  352. package/src/nodes/accessors/BatchNode.js +93 -26
  353. package/src/nodes/accessors/Bitangent.js +54 -0
  354. package/src/nodes/accessors/BufferAttributeNode.js +189 -11
  355. package/src/nodes/accessors/BufferNode.js +70 -5
  356. package/src/nodes/accessors/BuiltinNode.js +63 -0
  357. package/src/nodes/accessors/Camera.js +129 -0
  358. package/src/nodes/accessors/ClippingNode.js +152 -43
  359. package/src/nodes/accessors/CubeTextureNode.js +76 -13
  360. package/src/nodes/accessors/InstanceNode.js +118 -35
  361. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  362. package/src/nodes/accessors/Lights.js +129 -0
  363. package/src/nodes/accessors/MaterialNode.js +394 -58
  364. package/src/nodes/accessors/MaterialProperties.js +57 -1
  365. package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
  366. package/src/nodes/accessors/ModelNode.js +159 -12
  367. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
  368. package/src/nodes/accessors/MorphNode.js +60 -13
  369. package/src/nodes/accessors/Normal.js +156 -0
  370. package/src/nodes/accessors/Object3DNode.js +154 -35
  371. package/src/nodes/accessors/PointUVNode.js +35 -6
  372. package/src/nodes/accessors/Position.js +64 -0
  373. package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  374. package/src/nodes/accessors/ReferenceNode.js +243 -6
  375. package/src/nodes/accessors/ReflectVector.js +36 -0
  376. package/src/nodes/accessors/RendererReferenceNode.js +57 -7
  377. package/src/nodes/accessors/SceneNode.js +98 -6
  378. package/src/nodes/accessors/SkinningNode.js +214 -21
  379. package/src/nodes/accessors/StorageBufferNode.js +288 -28
  380. package/src/nodes/accessors/StorageTextureNode.js +139 -12
  381. package/src/nodes/accessors/Tangent.js +62 -0
  382. package/src/nodes/accessors/Texture3DNode.js +98 -12
  383. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
  384. package/src/nodes/accessors/TextureNode.js +347 -34
  385. package/src/nodes/accessors/TextureSizeNode.js +51 -9
  386. package/src/nodes/accessors/UV.js +11 -0
  387. package/src/nodes/accessors/UniformArrayNode.js +241 -32
  388. package/src/nodes/accessors/UserDataNode.js +55 -7
  389. package/src/nodes/accessors/VelocityNode.js +223 -0
  390. package/src/nodes/accessors/VertexColorNode.js +45 -6
  391. package/src/nodes/code/CodeNode.js +108 -8
  392. package/src/nodes/code/ExpressionNode.js +38 -7
  393. package/src/nodes/code/FunctionCallNode.js +62 -11
  394. package/src/nodes/code/FunctionNode.js +54 -24
  395. package/src/nodes/code/ScriptableNode.js +241 -17
  396. package/src/nodes/code/ScriptableValueNode.js +93 -8
  397. package/src/nodes/core/ArrayNode.js +142 -0
  398. package/src/nodes/core/AssignNode.js +60 -12
  399. package/src/nodes/core/AttributeNode.js +55 -22
  400. package/src/nodes/core/BypassNode.js +59 -11
  401. package/src/nodes/core/CacheNode.js +64 -10
  402. package/src/nodes/core/ConstNode.js +38 -3
  403. package/src/nodes/core/ContextNode.js +87 -12
  404. package/src/nodes/core/IndexNode.js +102 -10
  405. package/src/nodes/core/InputNode.js +55 -3
  406. package/src/nodes/core/LightingModel.js +65 -5
  407. package/src/nodes/core/MRTNode.js +81 -7
  408. package/src/nodes/core/Node.js +368 -50
  409. package/src/nodes/core/NodeAttribute.js +38 -0
  410. package/src/nodes/core/NodeBuilder.js +1317 -83
  411. package/src/nodes/core/NodeCache.js +41 -2
  412. package/src/nodes/core/NodeCode.js +31 -0
  413. package/src/nodes/core/NodeFrame.js +123 -2
  414. package/src/nodes/core/NodeFunction.js +46 -0
  415. package/src/nodes/core/NodeFunctionInput.js +44 -0
  416. package/src/nodes/core/NodeParser.js +11 -0
  417. package/src/nodes/core/NodeUniform.js +52 -0
  418. package/src/nodes/core/NodeUtils.js +226 -6
  419. package/src/nodes/core/NodeVar.js +47 -1
  420. package/src/nodes/core/NodeVarying.js +28 -0
  421. package/src/nodes/core/OutputStructNode.js +61 -17
  422. package/src/nodes/core/ParameterNode.js +34 -4
  423. package/src/nodes/core/PropertyNode.js +296 -32
  424. package/src/nodes/core/StackNode.js +108 -8
  425. package/src/nodes/core/StructNode.js +120 -0
  426. package/src/nodes/core/StructType.js +13 -0
  427. package/src/nodes/core/StructTypeNode.js +116 -9
  428. package/src/nodes/core/TempNode.js +37 -7
  429. package/src/nodes/core/UniformGroupNode.js +98 -17
  430. package/src/nodes/core/UniformNode.js +72 -4
  431. package/src/nodes/core/VarNode.js +170 -13
  432. package/src/nodes/core/VaryingNode.js +109 -8
  433. package/src/nodes/core/constants.js +40 -0
  434. package/src/nodes/display/BlendModes.js +193 -0
  435. package/src/nodes/display/BumpMapNode.js +47 -10
  436. package/src/nodes/display/ColorAdjustment.js +141 -0
  437. package/src/nodes/display/ColorSpaceFunctions.js +54 -0
  438. package/src/nodes/display/ColorSpaceNode.js +147 -68
  439. package/src/nodes/display/FrontFacingNode.js +39 -6
  440. package/src/nodes/display/NormalMapNode.js +55 -13
  441. package/src/nodes/display/PassNode.js +420 -19
  442. package/src/nodes/display/PosterizeNode.js +40 -7
  443. package/src/nodes/display/RenderOutputNode.js +81 -13
  444. package/src/nodes/display/ScreenNode.js +286 -0
  445. package/src/nodes/display/ToneMappingFunctions.js +242 -0
  446. package/src/nodes/display/ToneMappingNode.js +68 -175
  447. package/src/nodes/display/ToonOutlinePassNode.js +183 -0
  448. package/src/nodes/display/ViewportDepthNode.js +210 -36
  449. package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
  450. package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
  451. package/src/nodes/display/ViewportTextureNode.js +68 -11
  452. package/src/nodes/fog/Fog.js +113 -0
  453. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  454. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  455. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  456. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  457. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  458. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  459. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  460. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  461. package/src/nodes/functions/BSDF/LTC.js +50 -6
  462. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  463. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  464. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  465. package/src/nodes/functions/BasicLightingModel.js +27 -6
  466. package/src/nodes/functions/PhongLightingModel.js +38 -8
  467. package/src/nodes/functions/PhysicalLightingModel.js +215 -51
  468. package/src/nodes/functions/ShadowMaskModel.js +24 -1
  469. package/src/nodes/functions/ToonLightingModel.js +24 -5
  470. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  471. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  472. package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
  473. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  474. package/src/nodes/functions/material/getRoughness.js +2 -2
  475. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  476. package/src/nodes/geometry/RangeNode.js +62 -7
  477. package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
  478. package/src/nodes/gpgpu/BarrierNode.js +89 -0
  479. package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
  480. package/src/nodes/gpgpu/ComputeNode.js +124 -9
  481. package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
  482. package/src/nodes/lighting/AONode.js +24 -3
  483. package/src/nodes/lighting/AmbientLightNode.js +16 -8
  484. package/src/nodes/lighting/AnalyticLightNode.js +151 -231
  485. package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
  486. package/src/nodes/lighting/BasicLightMapNode.js +25 -5
  487. package/src/nodes/lighting/DirectionalLightNode.js +19 -20
  488. package/src/nodes/lighting/EnvironmentNode.js +34 -17
  489. package/src/nodes/lighting/HemisphereLightNode.js +42 -11
  490. package/src/nodes/lighting/IESSpotLightNode.js +18 -9
  491. package/src/nodes/lighting/IrradianceNode.js +23 -3
  492. package/src/nodes/lighting/LightProbeNode.js +29 -36
  493. package/src/nodes/lighting/LightUtils.js +12 -4
  494. package/src/nodes/lighting/LightingContextNode.js +70 -21
  495. package/src/nodes/lighting/LightingNode.js +22 -9
  496. package/src/nodes/lighting/LightsNode.js +309 -86
  497. package/src/nodes/lighting/PointLightNode.js +66 -32
  498. package/src/nodes/lighting/PointShadowNode.js +306 -0
  499. package/src/nodes/lighting/RectAreaLightNode.js +61 -25
  500. package/src/nodes/lighting/ShadowBaseNode.js +92 -0
  501. package/src/nodes/lighting/ShadowNode.js +812 -0
  502. package/src/nodes/lighting/SpotLightNode.js +73 -31
  503. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  504. package/src/nodes/materialx/lib/mx_hsv.js +27 -22
  505. package/src/nodes/materialx/lib/mx_noise.js +70 -70
  506. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  507. package/src/nodes/math/ConditionalNode.js +230 -0
  508. package/src/nodes/math/Hash.js +21 -0
  509. package/src/nodes/math/MathNode.js +812 -131
  510. package/src/nodes/math/MathUtils.js +47 -8
  511. package/src/nodes/math/OperatorNode.js +410 -66
  512. package/src/nodes/math/TriNoise3D.js +32 -32
  513. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  514. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  515. package/src/nodes/pmrem/PMREMNode.js +188 -28
  516. package/src/nodes/pmrem/PMREMUtils.js +24 -24
  517. package/src/nodes/procedural/Checker.js +22 -0
  518. package/src/nodes/shapes/Shapes.js +32 -0
  519. package/src/nodes/tsl/TSLBase.js +31 -0
  520. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
  521. package/src/nodes/utils/ArrayElementNode.js +45 -5
  522. package/src/nodes/utils/ConvertNode.js +39 -4
  523. package/src/nodes/utils/CubeMapNode.js +88 -8
  524. package/src/nodes/utils/Discard.js +24 -0
  525. package/src/nodes/utils/EquirectUVNode.js +39 -7
  526. package/src/nodes/utils/FlipNode.js +106 -0
  527. package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
  528. package/src/nodes/utils/JoinNode.js +31 -3
  529. package/src/nodes/utils/LoopNode.js +95 -9
  530. package/src/nodes/utils/MatcapUVNode.js +27 -8
  531. package/src/nodes/utils/MaxMipLevelNode.js +57 -6
  532. package/src/nodes/utils/MemberNode.js +68 -0
  533. package/src/nodes/utils/Oscillators.js +41 -0
  534. package/src/nodes/utils/Packing.js +21 -0
  535. package/src/nodes/utils/PostProcessingUtils.js +95 -0
  536. package/src/nodes/utils/RTTNode.js +141 -9
  537. package/src/nodes/utils/ReflectorNode.js +295 -21
  538. package/src/nodes/utils/RemapNode.js +93 -10
  539. package/src/nodes/utils/RotateNode.js +48 -13
  540. package/src/nodes/utils/SetNode.js +50 -4
  541. package/src/nodes/utils/SplitNode.js +62 -6
  542. package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
  543. package/src/nodes/utils/SpriteUtils.js +21 -5
  544. package/src/nodes/utils/StorageArrayElementNode.js +64 -12
  545. package/src/nodes/utils/Timer.js +73 -0
  546. package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
  547. package/src/nodes/utils/UVUtils.js +27 -9
  548. package/src/nodes/utils/ViewportUtils.js +16 -4
  549. package/src/objects/BatchedMesh.js +808 -281
  550. package/src/objects/Bone.js +24 -0
  551. package/src/objects/ClippingGroup.js +68 -0
  552. package/src/objects/Group.js +24 -0
  553. package/src/objects/InstancedMesh.js +120 -2
  554. package/src/objects/LOD.js +120 -5
  555. package/src/objects/Line.js +89 -6
  556. package/src/objects/LineLoop.js +20 -0
  557. package/src/objects/LineSegments.js +18 -0
  558. package/src/objects/Mesh.js +82 -23
  559. package/src/objects/Points.js +62 -0
  560. package/src/objects/Skeleton.js +107 -2
  561. package/src/objects/SkinnedMesh.js +99 -5
  562. package/src/objects/Sprite.js +54 -0
  563. package/src/renderers/WebGLRenderer.js +274 -157
  564. package/src/renderers/common/Animation.js +109 -12
  565. package/src/renderers/common/Attributes.js +40 -0
  566. package/src/renderers/common/Backend.js +504 -44
  567. package/src/renderers/common/Background.js +67 -9
  568. package/src/renderers/common/BindGroup.js +45 -1
  569. package/src/renderers/common/Binding.js +35 -0
  570. package/src/renderers/common/Bindings.js +136 -19
  571. package/src/renderers/common/Buffer.js +49 -0
  572. package/src/renderers/common/BufferUtils.js +25 -0
  573. package/src/renderers/common/BundleGroup.js +83 -0
  574. package/src/renderers/common/ChainMap.js +45 -6
  575. package/src/renderers/common/ClippingContext.js +175 -80
  576. package/src/renderers/common/Color4.js +40 -0
  577. package/src/renderers/common/ComputePipeline.js +24 -0
  578. package/src/renderers/common/Constants.js +2 -1
  579. package/src/renderers/common/CubeRenderTarget.js +22 -3
  580. package/src/renderers/common/DataMap.js +37 -1
  581. package/src/renderers/common/Geometries.js +111 -14
  582. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  583. package/src/renderers/common/Info.js +78 -35
  584. package/src/renderers/common/Lighting.js +73 -0
  585. package/src/renderers/common/Pipeline.js +22 -0
  586. package/src/renderers/common/Pipelines.js +148 -5
  587. package/src/renderers/common/PostProcessing.js +112 -11
  588. package/src/renderers/common/ProgrammableStage.js +60 -2
  589. package/src/renderers/common/QuadMesh.js +56 -5
  590. package/src/renderers/common/RenderBundle.js +14 -8
  591. package/src/renderers/common/RenderBundles.js +39 -10
  592. package/src/renderers/common/RenderContext.js +205 -7
  593. package/src/renderers/common/RenderContexts.js +59 -6
  594. package/src/renderers/common/RenderList.js +230 -21
  595. package/src/renderers/common/RenderLists.js +45 -6
  596. package/src/renderers/common/RenderObject.js +552 -41
  597. package/src/renderers/common/RenderObjects.js +118 -9
  598. package/src/renderers/common/RenderPipeline.js +24 -0
  599. package/src/renderers/common/Renderer.js +1537 -239
  600. package/src/renderers/common/RendererUtils.js +191 -0
  601. package/src/renderers/common/SampledTexture.js +132 -3
  602. package/src/renderers/common/Sampler.js +30 -0
  603. package/src/renderers/common/StorageBuffer.js +24 -0
  604. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  605. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  606. package/src/renderers/common/StorageTexture.js +38 -0
  607. package/src/renderers/common/Textures.js +142 -32
  608. package/src/renderers/common/TimestampQueryPool.js +98 -0
  609. package/src/renderers/common/Uniform.js +225 -3
  610. package/src/renderers/common/UniformBuffer.js +19 -0
  611. package/src/renderers/common/UniformsGroup.js +157 -6
  612. package/src/renderers/common/XRManager.js +1185 -0
  613. package/src/renderers/common/XRRenderTarget.js +74 -0
  614. package/src/renderers/common/extras/PMREMGenerator.js +211 -53
  615. package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
  616. package/src/renderers/common/nodes/NodeLibrary.js +194 -0
  617. package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
  618. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  619. package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
  620. package/src/renderers/common/nodes/NodeUniform.js +285 -2
  621. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  622. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  623. package/src/renderers/common/nodes/Nodes.js +390 -70
  624. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  625. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  626. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  627. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  628. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  629. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  630. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  631. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  632. package/src/renderers/webgl/WebGLBackground.js +24 -1
  633. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  634. package/src/renderers/webgl/WebGLCapabilities.js +2 -0
  635. package/src/renderers/webgl/WebGLGeometries.js +0 -28
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  637. package/src/renderers/webgl/WebGLProgram.js +27 -29
  638. package/src/renderers/webgl/WebGLPrograms.js +24 -16
  639. package/src/renderers/webgl/WebGLState.js +68 -11
  640. package/src/renderers/webgl/WebGLTextures.js +49 -10
  641. package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
  642. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  643. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
  644. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
  645. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  646. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  647. package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
  648. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
  649. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
  650. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  651. package/src/renderers/webgpu/WebGPUBackend.js +816 -236
  652. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
  653. package/src/renderers/webgpu/WebGPURenderer.js +45 -6
  654. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
  655. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
  656. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
  657. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
  658. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  659. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
  660. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
  661. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
  662. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
  663. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
  664. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
  665. package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
  666. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  667. package/src/renderers/webxr/WebXRManager.js +54 -32
  668. package/src/scenes/Fog.js +60 -0
  669. package/src/scenes/FogExp2.js +51 -0
  670. package/src/scenes/Scene.js +87 -0
  671. package/src/textures/Data3DTexture.js +2 -2
  672. package/src/textures/DepthTexture.js +2 -0
  673. package/src/textures/Source.js +2 -2
  674. package/src/textures/Texture.js +368 -5
  675. package/src/textures/VideoFrameTexture.js +35 -0
  676. package/src/utils.js +33 -1
  677. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  678. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  679. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  680. package/examples/jsm/controls/Controls.js +0 -32
  681. package/examples/jsm/exporters/MMDExporter.js +0 -217
  682. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  683. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  684. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  685. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  686. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  687. package/examples/jsm/loaders/TiltLoader.js +0 -520
  688. package/examples/jsm/objects/InstancedPoints.js +0 -21
  689. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  690. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  691. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  692. package/src/nodes/accessors/BitangentNode.js +0 -13
  693. package/src/nodes/accessors/CameraNode.js +0 -19
  694. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  695. package/src/nodes/accessors/NormalNode.js +0 -14
  696. package/src/nodes/accessors/PositionNode.js +0 -10
  697. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  698. package/src/nodes/accessors/TangentNode.js +0 -23
  699. package/src/nodes/accessors/UVNode.js +0 -3
  700. package/src/nodes/core/NodeKeywords.js +0 -80
  701. package/src/nodes/core/UniformGroup.js +0 -13
  702. package/src/nodes/display/AfterImageNode.js +0 -152
  703. package/src/nodes/display/AnamorphicNode.js +0 -145
  704. package/src/nodes/display/BlendModeNode.js +0 -128
  705. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  706. package/src/nodes/display/DenoiseNode.js +0 -198
  707. package/src/nodes/display/DotScreenNode.js +0 -75
  708. package/src/nodes/display/FXAANode.js +0 -327
  709. package/src/nodes/display/FilmNode.js +0 -52
  710. package/src/nodes/display/GTAONode.js +0 -324
  711. package/src/nodes/display/GaussianBlurNode.js +0 -207
  712. package/src/nodes/display/Lut3DNode.js +0 -53
  713. package/src/nodes/display/RGBShiftNode.js +0 -49
  714. package/src/nodes/display/SepiaNode.js +0 -18
  715. package/src/nodes/display/TransitionNode.js +0 -76
  716. package/src/nodes/display/ViewportNode.js +0 -137
  717. package/src/nodes/fog/FogExp2Node.js +0 -34
  718. package/src/nodes/fog/FogNode.js +0 -48
  719. package/src/nodes/fog/FogRangeNode.js +0 -35
  720. package/src/nodes/lighting/LightNode.js +0 -57
  721. package/src/nodes/loaders/NodeLoader.js +0 -110
  722. package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
  723. package/src/nodes/loaders/NodeObjectLoader.js +0 -71
  724. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  725. package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
  726. package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
  727. package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
  728. package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
  729. package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
  730. package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  731. package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
  732. package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
  733. package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
  734. package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
  735. package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
  736. package/src/nodes/materials/NodeMaterial.js +0 -680
  737. package/src/nodes/materials/PointsNodeMaterial.js +0 -39
  738. package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
  739. package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
  740. package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
  741. package/src/nodes/math/CondNode.js +0 -139
  742. package/src/nodes/math/HashNode.js +0 -34
  743. package/src/nodes/procedural/CheckerNode.js +0 -42
  744. package/src/nodes/utils/DiscardNode.js +0 -28
  745. package/src/nodes/utils/OscNode.js +0 -81
  746. package/src/nodes/utils/PackingNode.js +0 -55
  747. package/src/nodes/utils/TimerNode.js +0 -94
@@ -0,0 +1,74 @@
1
+ import { RenderTarget } from '../../core/RenderTarget.js';
2
+
3
+ /**
4
+ * A special type of render target that is used when rendering
5
+ * with the WebXR Device API.
6
+ *
7
+ * @private
8
+ * @augments RenderTarget
9
+ */
10
+ class XRRenderTarget extends RenderTarget {
11
+
12
+ /**
13
+ * Constructs a new XR render target.
14
+ *
15
+ * @param {number} [width=1] - The width of the render target.
16
+ * @param {number} [height=1] - The height of the render target.
17
+ * @param {Object} [options={}] - The configuration options.
18
+ */
19
+ constructor( width = 1, height = 1, options = {} ) {
20
+
21
+ super( width, height, options );
22
+
23
+ /**
24
+ * This flag can be used for type testing.
25
+ *
26
+ * @type {boolean}
27
+ * @readonly
28
+ * @default true
29
+ */
30
+ this.isXRRenderTarget = true;
31
+
32
+ /**
33
+ * Whether the attachments of the render target
34
+ * are defined by external textures. This flag is
35
+ * set to `true` when using the WebXR Layers API.
36
+ *
37
+ * @type {boolean}
38
+ * @default false
39
+ */
40
+ this.hasExternalTextures = false;
41
+
42
+ /**
43
+ * Whether a depth buffer should automatically be allocated
44
+ * for this XR render target or not.
45
+ *
46
+ * Allocating a depth buffer is the default behavior of XR render
47
+ * targets. However, when using the WebXR Layers API, this flag
48
+ * must be set to `false` when the `ignoreDepthValues` property of
49
+ * the projection layers evaluates to `false`.
50
+ *
51
+ * Reference: {@link https://www.w3.org/TR/webxrlayers-1/#dom-xrprojectionlayer-ignoredepthvalues}.
52
+ *
53
+ * @type {boolean}
54
+ * @default true
55
+ */
56
+ this.autoAllocateDepthBuffer = true;
57
+
58
+ }
59
+
60
+ copy( source ) {
61
+
62
+ super.copy( source );
63
+
64
+ this.hasExternalTextures = source.hasExternalTextures;
65
+ this.autoAllocateDepthBuffer = source.autoAllocateDepthBuffer;
66
+
67
+ return this;
68
+
69
+ }
70
+
71
+
72
+ }
73
+
74
+ export { XRRenderTarget };
@@ -1,12 +1,12 @@
1
- import NodeMaterial from '../../../nodes/materials/NodeMaterial.js';
1
+ import NodeMaterial from '../../../materials/nodes/NodeMaterial.js';
2
2
  import { getDirection, blur } from '../../../nodes/pmrem/PMREMUtils.js';
3
3
  import { equirectUV } from '../../../nodes/utils/EquirectUVNode.js';
4
4
  import { uniform } from '../../../nodes/core/UniformNode.js';
5
5
  import { uniformArray } from '../../../nodes/accessors/UniformArrayNode.js';
6
6
  import { texture } from '../../../nodes/accessors/TextureNode.js';
7
7
  import { cubeTexture } from '../../../nodes/accessors/CubeTextureNode.js';
8
- import { float, vec3 } from '../../../nodes/shadernode/ShaderNode.js';
9
- import { uv } from '../../../nodes/accessors/UVNode.js';
8
+ import { float, vec3 } from '../../../nodes/tsl/TSLBase.js';
9
+ import { uv } from '../../../nodes/accessors/UV.js';
10
10
  import { attribute } from '../../../nodes/core/AttributeNode.js';
11
11
 
12
12
  import { OrthographicCamera } from '../../../cameras/OrthographicCamera.js';
@@ -69,7 +69,11 @@ const _axisDirections = [
69
69
  /*@__PURE__*/ new Vector3( 1, 1, 1 )
70
70
  ];
71
71
 
72
- //
72
+ const _origin = /*@__PURE__*/ new Vector3();
73
+
74
+ // maps blur materials to their uniforms dictionary
75
+
76
+ const _uniformsMap = new WeakMap();
73
77
 
74
78
  // WebGPU Face indices
75
79
  const _faceLib = [
@@ -77,8 +81,8 @@ const _faceLib = [
77
81
  0, 4, 2
78
82
  ];
79
83
 
80
- const direction = getDirection( uv(), attribute( 'faceIndex' ) ).normalize();
81
- const outputDirection = vec3( direction.x, direction.y.negate(), direction.z );
84
+ const _direction = /*@__PURE__*/ getDirection( uv(), attribute( 'faceIndex' ) ).normalize();
85
+ const _outputDirection = /*@__PURE__*/ vec3( _direction.x, _direction.y, _direction.z );
82
86
 
83
87
  /**
84
88
  * This class generates a Prefiltered, Mipmapped Radiance Environment Map
@@ -91,10 +95,9 @@ const outputDirection = vec3( direction.x, direction.y.negate(), direction.z );
91
95
  * higher roughness levels. In this way we maintain resolution to smoothly
92
96
  * interpolate diffuse lighting while limiting sampling computation.
93
97
  *
94
- * Paper: Fast, Accurate Image-Based Lighting
95
- * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view
98
+ * Paper: Fast, Accurate Image-Based Lighting:
99
+ * {@link https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view}
96
100
  */
97
-
98
101
  class PMREMGenerator {
99
102
 
100
103
  constructor( renderer ) {
@@ -116,25 +119,61 @@ class PMREMGenerator {
116
119
 
117
120
  }
118
121
 
122
+ get _hasInitialized() {
123
+
124
+ return this._renderer.hasInitialized();
125
+
126
+ }
127
+
119
128
  /**
120
129
  * Generates a PMREM from a supplied Scene, which can be faster than using an
121
130
  * image if networking bandwidth is low. Optional sigma specifies a blur radius
122
131
  * in radians to be applied to the scene before PMREM generation. Optional near
123
- * and far planes ensure the scene is rendered in its entirety (the cubeCamera
124
- * is placed at the origin).
132
+ * and far planes ensure the scene is rendered in its entirety.
133
+ *
134
+ * @param {Scene} scene - The scene to be captured.
135
+ * @param {number} [sigma=0] - The blur radius in radians.
136
+ * @param {number} [near=0.1] - The near plane distance.
137
+ * @param {number} [far=100] - The far plane distance.
138
+ * @param {Object} [options={}] - The configuration options.
139
+ * @param {number} [options.size=256] - The texture size of the PMREM.
140
+ * @param {Vector3} [options.renderTarget=origin] - The position of the internal cube camera that renders the scene.
141
+ * @param {?RenderTarget} [options.renderTarget=null] - The render target to use.
142
+ * @return {RenderTarget} The resulting PMREM.
143
+ * @see {@link PMREMGenerator#fromSceneAsync}
125
144
  */
126
- fromScene( scene, sigma = 0, near = 0.1, far = 100 ) {
145
+ fromScene( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {
146
+
147
+ const {
148
+ size = 256,
149
+ position = _origin,
150
+ renderTarget = null,
151
+ } = options;
152
+
153
+ this._setSize( size );
154
+
155
+ if ( this._hasInitialized === false ) {
156
+
157
+ console.warn( 'THREE.PMREMGenerator: .fromScene() called before the backend is initialized. Try using .fromSceneAsync() instead.' );
158
+
159
+ const cubeUVRenderTarget = renderTarget || this._allocateTargets();
160
+
161
+ options.renderTarget = cubeUVRenderTarget;
162
+
163
+ this.fromSceneAsync( scene, sigma, near, far, options );
164
+
165
+ return cubeUVRenderTarget;
166
+
167
+ }
127
168
 
128
169
  _oldTarget = this._renderer.getRenderTarget();
129
170
  _oldActiveCubeFace = this._renderer.getActiveCubeFace();
130
171
  _oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
131
172
 
132
- this._setSize( 256 );
133
-
134
- const cubeUVRenderTarget = this._allocateTargets();
173
+ const cubeUVRenderTarget = renderTarget || this._allocateTargets();
135
174
  cubeUVRenderTarget.depthBuffer = true;
136
175
 
137
- this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );
176
+ this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position );
138
177
 
139
178
  if ( sigma > 0 ) {
140
179
 
@@ -150,13 +189,76 @@ class PMREMGenerator {
150
189
 
151
190
  }
152
191
 
192
+ /**
193
+ * Generates a PMREM from a supplied Scene, which can be faster than using an
194
+ * image if networking bandwidth is low. Optional sigma specifies a blur radius
195
+ * in radians to be applied to the scene before PMREM generation. Optional near
196
+ * and far planes ensure the scene is rendered in its entirety (the cubeCamera
197
+ * is placed at the origin).
198
+ *
199
+ * @param {Scene} scene - The scene to be captured.
200
+ * @param {number} [sigma=0] - The blur radius in radians.
201
+ * @param {number} [near=0.1] - The near plane distance.
202
+ * @param {number} [far=100] - The far plane distance.
203
+ * @param {Object} [options={}] - The configuration options.
204
+ * @param {number} [options.size=256] - The texture size of the PMREM.
205
+ * @param {Vector3} [options.position=origin] - The position of the internal cube camera that renders the scene.
206
+ * @param {?RenderTarget} [options.renderTarget=null] - The render target to use.
207
+ * @return {Promise<RenderTarget>} A Promise that resolve with the PMREM when the generation has been finished.
208
+ * @see {@link PMREMGenerator#fromScene}
209
+ */
210
+ async fromSceneAsync( scene, sigma = 0, near = 0.1, far = 100, options = {} ) {
211
+
212
+ if ( this._hasInitialized === false ) await this._renderer.init();
213
+
214
+ return this.fromScene( scene, sigma, near, far, options );
215
+
216
+ }
217
+
153
218
  /**
154
219
  * Generates a PMREM from an equirectangular texture, which can be either LDR
155
220
  * or HDR. The ideal input image size is 1k (1024 x 512),
156
221
  * as this matches best with the 256 x 256 cubemap output.
222
+ *
223
+ * @param {Texture} equirectangular - The equirectangular texture to be converted.
224
+ * @param {?RenderTarget} [renderTarget=null] - The render target to use.
225
+ * @return {RenderTarget} The resulting PMREM.
226
+ * @see {@link PMREMGenerator#fromEquirectangularAsync}
157
227
  */
158
228
  fromEquirectangular( equirectangular, renderTarget = null ) {
159
229
 
230
+ if ( this._hasInitialized === false ) {
231
+
232
+ console.warn( 'THREE.PMREMGenerator: .fromEquirectangular() called before the backend is initialized. Try using .fromEquirectangularAsync() instead.' );
233
+
234
+ this._setSizeFromTexture( equirectangular );
235
+
236
+ const cubeUVRenderTarget = renderTarget || this._allocateTargets();
237
+
238
+ this.fromEquirectangularAsync( equirectangular, cubeUVRenderTarget );
239
+
240
+ return cubeUVRenderTarget;
241
+
242
+ }
243
+
244
+ return this._fromTexture( equirectangular, renderTarget );
245
+
246
+ }
247
+
248
+ /**
249
+ * Generates a PMREM from an equirectangular texture, which can be either LDR
250
+ * or HDR. The ideal input image size is 1k (1024 x 512),
251
+ * as this matches best with the 256 x 256 cubemap output.
252
+ *
253
+ * @param {Texture} equirectangular - The equirectangular texture to be converted.
254
+ * @param {?RenderTarget} [renderTarget=null] - The render target to use.
255
+ * @return {Promise<RenderTarget>} The resulting PMREM.
256
+ * @see {@link PMREMGenerator#fromEquirectangular}
257
+ */
258
+ async fromEquirectangularAsync( equirectangular, renderTarget = null ) {
259
+
260
+ if ( this._hasInitialized === false ) await this._renderer.init();
261
+
160
262
  return this._fromTexture( equirectangular, renderTarget );
161
263
 
162
264
  }
@@ -165,9 +267,46 @@ class PMREMGenerator {
165
267
  * Generates a PMREM from an cubemap texture, which can be either LDR
166
268
  * or HDR. The ideal input cube size is 256 x 256,
167
269
  * as this matches best with the 256 x 256 cubemap output.
270
+ *
271
+ * @param {Texture} cubemap - The cubemap texture to be converted.
272
+ * @param {?RenderTarget} [renderTarget=null] - The render target to use.
273
+ * @return {RenderTarget} The resulting PMREM.
274
+ * @see {@link PMREMGenerator#fromCubemapAsync}
168
275
  */
169
276
  fromCubemap( cubemap, renderTarget = null ) {
170
277
 
278
+ if ( this._hasInitialized === false ) {
279
+
280
+ console.warn( 'THREE.PMREMGenerator: .fromCubemap() called before the backend is initialized. Try using .fromCubemapAsync() instead.' );
281
+
282
+ this._setSizeFromTexture( cubemap );
283
+
284
+ const cubeUVRenderTarget = renderTarget || this._allocateTargets();
285
+
286
+ this.fromCubemapAsync( cubemap, renderTarget );
287
+
288
+ return cubeUVRenderTarget;
289
+
290
+ }
291
+
292
+ return this._fromTexture( cubemap, renderTarget );
293
+
294
+ }
295
+
296
+ /**
297
+ * Generates a PMREM from an cubemap texture, which can be either LDR
298
+ * or HDR. The ideal input cube size is 256 x 256,
299
+ * with the 256 x 256 cubemap output.
300
+ *
301
+ * @param {Texture} cubemap - The cubemap texture to be converted.
302
+ * @param {?RenderTarget} [renderTarget=null] - The render target to use.
303
+ * @return {Promise<RenderTarget>} The resulting PMREM.
304
+ * @see {@link PMREMGenerator#fromCubemap}
305
+ */
306
+ async fromCubemapAsync( cubemap, renderTarget = null ) {
307
+
308
+ if ( this._hasInitialized === false ) await this._renderer.init();
309
+
171
310
  return this._fromTexture( cubemap, renderTarget );
172
311
 
173
312
  }
@@ -175,13 +314,15 @@ class PMREMGenerator {
175
314
  /**
176
315
  * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during
177
316
  * your texture's network fetch for increased concurrency.
317
+ *
318
+ * @returns {Promise}
178
319
  */
179
- compileCubemapShader() {
320
+ async compileCubemapShader() {
180
321
 
181
322
  if ( this._cubemapMaterial === null ) {
182
323
 
183
324
  this._cubemapMaterial = _getCubemapMaterial();
184
- this._compileMaterial( this._cubemapMaterial );
325
+ await this._compileMaterial( this._cubemapMaterial );
185
326
 
186
327
  }
187
328
 
@@ -190,13 +331,15 @@ class PMREMGenerator {
190
331
  /**
191
332
  * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during
192
333
  * your texture's network fetch for increased concurrency.
334
+ *
335
+ * @returns {Promise}
193
336
  */
194
- compileEquirectangularShader() {
337
+ async compileEquirectangularShader() {
195
338
 
196
339
  if ( this._equirectMaterial === null ) {
197
340
 
198
341
  this._equirectMaterial = _getEquirectMaterial();
199
- this._compileMaterial( this._equirectMaterial );
342
+ await this._compileMaterial( this._equirectMaterial );
200
343
 
201
344
  }
202
345
 
@@ -224,6 +367,20 @@ class PMREMGenerator {
224
367
 
225
368
  // private interface
226
369
 
370
+ _setSizeFromTexture( texture ) {
371
+
372
+ if ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {
373
+
374
+ this._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );
375
+
376
+ } else { // Equirectangular
377
+
378
+ this._setSize( texture.image.width / 4 );
379
+
380
+ }
381
+
382
+ }
383
+
227
384
  _setSize( cubeSize ) {
228
385
 
229
386
  this._lodMax = Math.floor( Math.log2( cubeSize ) );
@@ -255,15 +412,7 @@ class PMREMGenerator {
255
412
 
256
413
  _fromTexture( texture, renderTarget ) {
257
414
 
258
- if ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {
259
-
260
- this._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );
261
-
262
- } else { // Equirectangular
263
-
264
- this._setSize( texture.image.width / 4 );
265
-
266
- }
415
+ this._setSizeFromTexture( texture );
267
416
 
268
417
  _oldTarget = this._renderer.getRenderTarget();
269
418
  _oldActiveCubeFace = this._renderer.getActiveCubeFace();
@@ -316,24 +465,22 @@ class PMREMGenerator {
316
465
 
317
466
  }
318
467
 
319
- _compileMaterial( material ) {
320
-
321
- const tmpMesh = this._lodMeshes[ 0 ];
322
- tmpMesh.material = material;
468
+ async _compileMaterial( material ) {
323
469
 
324
- this._renderer.compile( tmpMesh, _flatCamera );
470
+ const tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );
471
+ await this._renderer.compile( tmpMesh, _flatCamera );
325
472
 
326
473
  }
327
474
 
328
- _sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {
475
+ _sceneToCubeUV( scene, near, far, cubeUVRenderTarget, position ) {
329
476
 
330
477
  const cubeCamera = _cubeCamera;
331
478
  cubeCamera.near = near;
332
479
  cubeCamera.far = far;
333
480
 
334
481
  // px, py, pz, nx, ny, nz
335
- const upSign = [ - 1, 1, - 1, - 1, - 1, - 1 ];
336
- const forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];
482
+ const upSign = [ 1, 1, 1, 1, - 1, 1 ];
483
+ const forwardSign = [ 1, - 1, 1, - 1, 1, - 1 ];
337
484
 
338
485
  const renderer = this._renderer;
339
486
 
@@ -395,17 +542,22 @@ class PMREMGenerator {
395
542
  if ( col === 0 ) {
396
543
 
397
544
  cubeCamera.up.set( 0, upSign[ i ], 0 );
398
- cubeCamera.lookAt( forwardSign[ i ], 0, 0 );
545
+ cubeCamera.position.set( position.x, position.y, position.z );
546
+ cubeCamera.lookAt( position.x + forwardSign[ i ], position.y, position.z );
399
547
 
400
548
  } else if ( col === 1 ) {
401
549
 
402
550
  cubeCamera.up.set( 0, 0, upSign[ i ] );
403
- cubeCamera.lookAt( 0, forwardSign[ i ], 0 );
551
+ cubeCamera.position.set( position.x, position.y, position.z );
552
+ cubeCamera.lookAt( position.x, position.y + forwardSign[ i ], position.z );
553
+
404
554
 
405
555
  } else {
406
556
 
407
557
  cubeCamera.up.set( 0, upSign[ i ], 0 );
408
- cubeCamera.lookAt( 0, 0, forwardSign[ i ] );
558
+ cubeCamera.position.set( position.x, position.y, position.z );
559
+ cubeCamera.lookAt( position.x, position.y, position.z + forwardSign[ i ] );
560
+
409
561
 
410
562
  }
411
563
 
@@ -488,6 +640,12 @@ class PMREMGenerator {
488
640
  * the blur latitudinally (around the poles), and then longitudinally (towards
489
641
  * the poles) to approximate the orthogonally-separable blur. It is least
490
642
  * accurate at the poles, but still does a decent job.
643
+ *
644
+ * @param {RenderTarget} cubeUVRenderTarget - The cubemap render target.
645
+ * @param {number} lodIn - The input level-of-detail.
646
+ * @param {number} lodOut - The output level-of-detail.
647
+ * @param {number} sigma - The blur radius in radians.
648
+ * @param {Vector3} [poleAxis] - The pole axis.
491
649
  */
492
650
  _blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {
493
651
 
@@ -530,7 +688,7 @@ class PMREMGenerator {
530
688
  const blurMesh = this._lodMeshes[ lodOut ];
531
689
  blurMesh.material = blurMaterial;
532
690
 
533
- const blurUniforms = blurMaterial.uniforms;
691
+ const blurUniforms = _uniformsMap.get( blurMaterial );
534
692
 
535
693
  const pixels = this._sizeLods[ lodIn ] - 1;
536
694
  const radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );
@@ -698,19 +856,18 @@ function _createRenderTarget( width, height, params ) {
698
856
 
699
857
  function _setViewport( target, x, y, width, height ) {
700
858
 
701
- const viewY = target.height - height - y;
702
-
703
- target.viewport.set( x, viewY, width, height );
704
- target.scissor.set( x, viewY, width, height );
859
+ target.viewport.set( x, y, width, height );
860
+ target.scissor.set( x, y, width, height );
705
861
 
706
862
  }
707
863
 
708
- function _getMaterial() {
864
+ function _getMaterial( type ) {
709
865
 
710
866
  const material = new NodeMaterial();
711
867
  material.depthTest = false;
712
868
  material.depthWrite = false;
713
869
  material.blending = NoBlending;
870
+ material.name = `PMREM_${ type }`;
714
871
 
715
872
  return material;
716
873
 
@@ -735,7 +892,7 @@ function _getBlurShader( lodMax, width, height ) {
735
892
  latitudinal,
736
893
  weights,
737
894
  poleAxis,
738
- outputDirection,
895
+ outputDirection: _outputDirection,
739
896
  dTheta,
740
897
  samples,
741
898
  envMap,
@@ -745,18 +902,19 @@ function _getBlurShader( lodMax, width, height ) {
745
902
  CUBEUV_MAX_MIP
746
903
  };
747
904
 
748
- const material = _getMaterial();
749
- material.uniforms = materialUniforms; // TODO: Move to outside of the material
905
+ const material = _getMaterial( 'blur' );
750
906
  material.fragmentNode = blur( { ...materialUniforms, latitudinal: latitudinal.equal( 1 ) } );
751
907
 
908
+ _uniformsMap.set( material, materialUniforms );
909
+
752
910
  return material;
753
911
 
754
912
  }
755
913
 
756
914
  function _getCubemapMaterial( envTexture ) {
757
915
 
758
- const material = _getMaterial();
759
- material.fragmentNode = cubeTexture( envTexture, outputDirection );
916
+ const material = _getMaterial( 'cubemap' );
917
+ material.fragmentNode = cubeTexture( envTexture, _outputDirection );
760
918
 
761
919
  return material;
762
920
 
@@ -764,8 +922,8 @@ function _getCubemapMaterial( envTexture ) {
764
922
 
765
923
  function _getEquirectMaterial( envTexture ) {
766
924
 
767
- const material = _getMaterial();
768
- material.fragmentNode = texture( envTexture, equirectUV( outputDirection ), 0 );
925
+ const material = _getMaterial( 'equirect' );
926
+ material.fragmentNode = texture( envTexture, equirectUV( _outputDirection ), 0 );
769
927
 
770
928
  return material;
771
929
 
@@ -1,38 +1,132 @@
1
1
  import BindGroup from '../BindGroup.js';
2
2
 
3
+ /**
4
+ * This module represents the state of a node builder after it was
5
+ * used to build the nodes for a render object. The state holds the
6
+ * results of the build for further processing in the renderer.
7
+ *
8
+ * Render objects with identical cache keys share the same node builder state.
9
+ *
10
+ * @private
11
+ */
3
12
  class NodeBuilderState {
4
13
 
5
- constructor( vertexShader, fragmentShader, computeShader, nodeAttributes, bindings, updateNodes, updateBeforeNodes, updateAfterNodes, instanceBindGroups = true, transforms = [] ) {
6
-
14
+ /**
15
+ * Constructs a new node builder state.
16
+ *
17
+ * @param {?string} vertexShader - The native vertex shader code.
18
+ * @param {?string} fragmentShader - The native fragment shader code.
19
+ * @param {?string} computeShader - The native compute shader code.
20
+ * @param {Array<NodeAttribute>} nodeAttributes - An array of node attributes.
21
+ * @param {Array<BindGroup>} bindings - An array of bind groups.
22
+ * @param {Array<Node>} updateNodes - An array of nodes that implement their `update()` method.
23
+ * @param {Array<Node>} updateBeforeNodes - An array of nodes that implement their `updateBefore()` method.
24
+ * @param {Array<Node>} updateAfterNodes - An array of nodes that implement their `updateAfter()` method.
25
+ * @param {NodeMaterialObserver} observer - A node material observer.
26
+ * @param {Array<Object>} transforms - An array with transform attribute objects. Only relevant when using compute shaders with WebGL 2.
27
+ */
28
+ constructor( vertexShader, fragmentShader, computeShader, nodeAttributes, bindings, updateNodes, updateBeforeNodes, updateAfterNodes, observer, transforms = [] ) {
29
+
30
+ /**
31
+ * The native vertex shader code.
32
+ *
33
+ * @type {string}
34
+ */
7
35
  this.vertexShader = vertexShader;
36
+
37
+ /**
38
+ * The native fragment shader code.
39
+ *
40
+ * @type {string}
41
+ */
8
42
  this.fragmentShader = fragmentShader;
43
+
44
+ /**
45
+ * The native compute shader code.
46
+ *
47
+ * @type {string}
48
+ */
9
49
  this.computeShader = computeShader;
50
+
51
+ /**
52
+ * An array with transform attribute objects.
53
+ * Only relevant when using compute shaders with WebGL 2.
54
+ *
55
+ * @type {Array<Object>}
56
+ */
10
57
  this.transforms = transforms;
11
58
 
59
+ /**
60
+ * An array of node attributes representing
61
+ * the attributes of the shaders.
62
+ *
63
+ * @type {Array<NodeAttribute>}
64
+ */
12
65
  this.nodeAttributes = nodeAttributes;
66
+
67
+ /**
68
+ * An array of bind groups representing the uniform or storage
69
+ * buffers, texture or samplers of the shader.
70
+ *
71
+ * @type {Array<BindGroup>}
72
+ */
13
73
  this.bindings = bindings;
14
74
 
75
+ /**
76
+ * An array of nodes that implement their `update()` method.
77
+ *
78
+ * @type {Array<Node>}
79
+ */
15
80
  this.updateNodes = updateNodes;
81
+
82
+ /**
83
+ * An array of nodes that implement their `updateBefore()` method.
84
+ *
85
+ * @type {Array<Node>}
86
+ */
16
87
  this.updateBeforeNodes = updateBeforeNodes;
17
- this.updateAfterNodes = updateAfterNodes;
18
88
 
19
- this.instanceBindGroups = instanceBindGroups;
89
+ /**
90
+ * An array of nodes that implement their `updateAfter()` method.
91
+ *
92
+ * @type {Array<Node>}
93
+ */
94
+ this.updateAfterNodes = updateAfterNodes;
20
95
 
96
+ /**
97
+ * A node material observer.
98
+ *
99
+ * @type {NodeMaterialObserver}
100
+ */
101
+ this.observer = observer;
102
+
103
+ /**
104
+ * How often this state is used by render objects.
105
+ *
106
+ * @type {number}
107
+ */
21
108
  this.usedTimes = 0;
22
109
 
23
110
  }
24
111
 
112
+ /**
113
+ * This method is used to create a array of bind groups based
114
+ * on the existing bind groups of this state. Shared groups are
115
+ * not cloned.
116
+ *
117
+ * @return {Array<BindGroup>} A array of bind groups.
118
+ */
25
119
  createBindings() {
26
120
 
27
121
  const bindings = [];
28
122
 
29
123
  for ( const instanceGroup of this.bindings ) {
30
124
 
31
- const shared = this.instanceBindGroups && instanceGroup.bindings[ 0 ].groupNode.shared;
125
+ const shared = instanceGroup.bindings[ 0 ].groupNode.shared; // All bindings in the group must have the same groupNode.
32
126
 
33
127
  if ( shared !== true ) {
34
128
 
35
- const bindingsGroup = new BindGroup( instanceGroup.name, [], instanceGroup.index );
129
+ const bindingsGroup = new BindGroup( instanceGroup.name, [], instanceGroup.index, instanceGroup );
36
130
  bindings.push( bindingsGroup );
37
131
 
38
132
  for ( const instanceBinding of instanceGroup.bindings ) {