@plastic-software/three 0.181.3 → 0.183.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 (437) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +11330 -10017
  4. package/build/three.core.js +10011 -9493
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1414 -631
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +21 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +8007 -5427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +8005 -5426
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +2 -2
  16. package/examples/jsm/controls/ArcballControls.js +3 -3
  17. package/examples/jsm/controls/MapControls.js +55 -1
  18. package/examples/jsm/controls/OrbitControls.js +109 -6
  19. package/examples/jsm/controls/TrackballControls.js +6 -6
  20. package/examples/jsm/csm/CSM.js +2 -1
  21. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  22. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  23. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  24. package/examples/jsm/exporters/EXRExporter.js +1 -1
  25. package/examples/jsm/exporters/GLTFExporter.js +131 -4
  26. package/examples/jsm/exporters/USDZExporter.js +22 -3
  27. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  28. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  29. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  30. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  31. package/examples/jsm/helpers/ViewHelper.js +67 -8
  32. package/examples/jsm/inspector/Inspector.js +74 -14
  33. package/examples/jsm/inspector/RendererInspector.js +12 -2
  34. package/examples/jsm/inspector/tabs/Console.js +41 -7
  35. package/examples/jsm/inspector/tabs/Parameters.js +18 -2
  36. package/examples/jsm/inspector/tabs/Performance.js +2 -2
  37. package/examples/jsm/inspector/tabs/Viewer.js +4 -4
  38. package/examples/jsm/inspector/ui/Profiler.js +1836 -31
  39. package/examples/jsm/inspector/ui/Style.js +973 -14
  40. package/examples/jsm/inspector/ui/Tab.js +188 -1
  41. package/examples/jsm/inspector/ui/Values.js +17 -1
  42. package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
  43. package/examples/jsm/lines/LineMaterial.js +6 -0
  44. package/examples/jsm/loaders/3DMLoader.js +5 -4
  45. package/examples/jsm/loaders/3MFLoader.js +2 -2
  46. package/examples/jsm/loaders/AMFLoader.js +2 -2
  47. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  48. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  49. package/examples/jsm/loaders/EXRLoader.js +5 -5
  50. package/examples/jsm/loaders/FBXLoader.js +2 -4
  51. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  52. package/examples/jsm/loaders/GLTFLoader.js +122 -171
  53. package/examples/jsm/loaders/HDRLoader.js +0 -1
  54. package/examples/jsm/loaders/KMZLoader.js +5 -5
  55. package/examples/jsm/loaders/KTX2Loader.js +19 -3
  56. package/examples/jsm/loaders/LDrawLoader.js +2 -3
  57. package/examples/jsm/loaders/LWOLoader.js +7 -39
  58. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  59. package/examples/jsm/loaders/PCDLoader.js +4 -2
  60. package/examples/jsm/loaders/SVGLoader.js +1 -1
  61. package/examples/jsm/loaders/TDSLoader.js +0 -2
  62. package/examples/jsm/loaders/TGALoader.js +0 -2
  63. package/examples/jsm/loaders/USDLoader.js +100 -40
  64. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  65. package/examples/jsm/loaders/VOXLoader.js +660 -117
  66. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  67. package/examples/jsm/loaders/VTKLoader.js +37 -24
  68. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  69. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  70. package/examples/jsm/loaders/usd/USDAParser.js +447 -366
  71. package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
  72. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  73. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  74. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  75. package/examples/jsm/math/Octree.js +131 -1
  76. package/examples/jsm/misc/Volume.js +0 -1
  77. package/examples/jsm/misc/VolumeSlice.js +0 -1
  78. package/examples/jsm/objects/LensflareMesh.js +1 -1
  79. package/examples/jsm/objects/Sky.js +76 -4
  80. package/examples/jsm/objects/SkyMesh.js +127 -10
  81. package/examples/jsm/objects/Water.js +4 -3
  82. package/examples/jsm/objects/Water2.js +5 -3
  83. package/examples/jsm/objects/WaterMesh.js +5 -7
  84. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  85. package/examples/jsm/physics/JoltPhysics.js +10 -6
  86. package/examples/jsm/physics/RapierPhysics.js +9 -5
  87. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  88. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  89. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  90. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  91. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  92. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  93. package/examples/jsm/renderers/Projector.js +268 -30
  94. package/examples/jsm/renderers/SVGRenderer.js +193 -60
  95. package/examples/jsm/shaders/GTAOShader.js +19 -6
  96. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  97. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  98. package/examples/jsm/shaders/SAOShader.js +17 -4
  99. package/examples/jsm/shaders/SSAOShader.js +11 -1
  100. package/examples/jsm/shaders/SSRShader.js +6 -5
  101. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  102. package/examples/jsm/shaders/VignetteShader.js +1 -1
  103. package/examples/jsm/transpiler/AST.js +44 -0
  104. package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
  105. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  106. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  107. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  108. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  109. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  110. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  111. package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
  112. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  113. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  114. package/examples/jsm/tsl/display/CRT.js +150 -0
  115. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  116. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  117. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  118. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  119. package/examples/jsm/tsl/display/GTAONode.js +5 -4
  120. package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
  121. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  122. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  123. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  124. package/examples/jsm/tsl/display/OutlineNode.js +3 -3
  125. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  126. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  127. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  128. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  129. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  130. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  131. package/examples/jsm/tsl/display/SSGINode.js +8 -20
  132. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  133. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  134. package/examples/jsm/tsl/display/Shape.js +29 -0
  135. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  136. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  137. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  138. package/examples/jsm/tsl/display/TRAANode.js +273 -125
  139. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  140. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  141. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  142. package/examples/jsm/tsl/math/Bayer.js +40 -1
  143. package/examples/jsm/utils/LDrawUtils.js +1 -1
  144. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  145. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  146. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  147. package/package.json +20 -26
  148. package/src/Three.Core.js +2 -1
  149. package/src/Three.TSL.js +19 -11
  150. package/src/Three.WebGPU.Nodes.js +2 -0
  151. package/src/Three.WebGPU.js +3 -0
  152. package/src/Three.js +1 -0
  153. package/src/animation/AnimationAction.js +1 -1
  154. package/src/animation/AnimationClip.js +1 -1
  155. package/src/animation/AnimationMixer.js +6 -0
  156. package/src/animation/AnimationUtils.js +1 -12
  157. package/src/animation/KeyframeTrack.js +47 -8
  158. package/src/animation/PropertyMixer.js +4 -4
  159. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  160. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  161. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  162. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  163. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  164. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  165. package/src/audio/Audio.js +1 -1
  166. package/src/audio/AudioListener.js +5 -3
  167. package/src/cameras/Camera.js +32 -2
  168. package/src/cameras/CubeCamera.js +20 -0
  169. package/src/constants.js +90 -5
  170. package/src/core/BufferGeometry.js +14 -2
  171. package/src/core/Clock.js +7 -0
  172. package/src/core/Object3D.js +56 -4
  173. package/src/core/Raycaster.js +2 -2
  174. package/src/core/RenderTarget.js +3 -4
  175. package/src/extras/PMREMGenerator.js +7 -18
  176. package/src/extras/TextureUtils.js +5 -1
  177. package/src/geometries/ExtrudeGeometry.js +2 -2
  178. package/src/geometries/PolyhedronGeometry.js +1 -1
  179. package/src/geometries/TorusGeometry.js +8 -3
  180. package/src/helpers/CameraHelper.js +3 -0
  181. package/src/helpers/DirectionalLightHelper.js +4 -1
  182. package/src/helpers/HemisphereLightHelper.js +3 -0
  183. package/src/helpers/PointLightHelper.js +1 -25
  184. package/src/helpers/SpotLightHelper.js +3 -0
  185. package/src/lights/DirectionalLight.js +13 -0
  186. package/src/lights/HemisphereLight.js +10 -0
  187. package/src/lights/Light.js +1 -11
  188. package/src/lights/LightProbe.js +0 -15
  189. package/src/lights/LightShadow.js +15 -6
  190. package/src/lights/PointLight.js +15 -0
  191. package/src/lights/PointLightShadow.js +0 -86
  192. package/src/lights/SpotLight.js +22 -1
  193. package/src/lights/webgpu/IESSpotLight.js +2 -1
  194. package/src/loaders/Cache.js +28 -0
  195. package/src/loaders/FileLoader.js +1 -1
  196. package/src/loaders/ImageBitmapLoader.js +8 -3
  197. package/src/loaders/Loader.js +6 -0
  198. package/src/loaders/MaterialLoader.js +2 -1
  199. package/src/loaders/ObjectLoader.js +21 -2
  200. package/src/loaders/nodes/NodeLoader.js +2 -2
  201. package/src/materials/Material.js +2 -0
  202. package/src/materials/MeshLambertMaterial.js +9 -0
  203. package/src/materials/MeshPhongMaterial.js +9 -0
  204. package/src/materials/ShaderMaterial.js +20 -1
  205. package/src/materials/nodes/Line2NodeMaterial.js +7 -7
  206. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  207. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  208. package/src/materials/nodes/NodeMaterial.js +72 -25
  209. package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
  210. package/src/math/Line3.js +3 -5
  211. package/src/math/MathUtils.js +10 -10
  212. package/src/math/Matrix4.js +74 -65
  213. package/src/math/Quaternion.js +3 -29
  214. package/src/math/Sphere.js +1 -1
  215. package/src/math/Vector3.js +3 -5
  216. package/src/math/interpolants/BezierInterpolant.js +108 -0
  217. package/src/nodes/Nodes.js +87 -68
  218. package/src/nodes/TSL.js +6 -6
  219. package/src/nodes/accessors/Arrays.js +1 -1
  220. package/src/nodes/accessors/BatchNode.js +10 -10
  221. package/src/nodes/accessors/Bitangent.js +5 -5
  222. package/src/nodes/accessors/BufferAttributeNode.js +98 -12
  223. package/src/nodes/accessors/BufferNode.js +29 -2
  224. package/src/nodes/accessors/Camera.js +149 -28
  225. package/src/nodes/accessors/ClippingNode.js +4 -4
  226. package/src/nodes/accessors/CubeTextureNode.js +20 -1
  227. package/src/nodes/accessors/InstanceNode.js +148 -43
  228. package/src/nodes/accessors/MaterialNode.js +9 -1
  229. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  230. package/src/nodes/accessors/ModelNode.js +1 -1
  231. package/src/nodes/accessors/Normal.js +11 -11
  232. package/src/nodes/accessors/Position.js +34 -2
  233. package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
  234. package/src/nodes/accessors/ReferenceNode.js +4 -4
  235. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  236. package/src/nodes/accessors/SceneProperties.js +53 -0
  237. package/src/nodes/accessors/SkinningNode.js +27 -26
  238. package/src/nodes/accessors/StorageBufferNode.js +4 -21
  239. package/src/nodes/accessors/StorageTextureNode.js +37 -1
  240. package/src/nodes/accessors/Tangent.js +4 -14
  241. package/src/nodes/accessors/Texture3DNode.js +32 -35
  242. package/src/nodes/accessors/TextureNode.js +58 -22
  243. package/src/nodes/accessors/UniformArrayNode.js +4 -2
  244. package/src/nodes/accessors/UserDataNode.js +1 -2
  245. package/src/nodes/accessors/VertexColorNode.js +1 -2
  246. package/src/nodes/code/FunctionNode.js +1 -2
  247. package/src/nodes/core/ArrayNode.js +20 -1
  248. package/src/nodes/core/AssignNode.js +2 -2
  249. package/src/nodes/core/AttributeNode.js +2 -2
  250. package/src/nodes/core/ContextNode.js +103 -4
  251. package/src/nodes/core/MRTNode.js +48 -2
  252. package/src/nodes/core/Node.js +29 -3
  253. package/src/nodes/core/NodeBuilder.js +170 -53
  254. package/src/nodes/core/NodeError.js +28 -0
  255. package/src/nodes/core/NodeFrame.js +12 -4
  256. package/src/nodes/core/NodeUtils.js +10 -8
  257. package/src/nodes/core/OutputStructNode.js +12 -10
  258. package/src/nodes/core/ParameterNode.js +3 -3
  259. package/src/nodes/core/PropertyNode.js +19 -3
  260. package/src/nodes/core/StackNode.js +65 -16
  261. package/src/nodes/core/StackTrace.js +139 -0
  262. package/src/nodes/core/StructNode.js +16 -2
  263. package/src/nodes/core/StructTypeNode.js +11 -17
  264. package/src/nodes/core/SubBuildNode.js +1 -1
  265. package/src/nodes/core/UniformNode.js +21 -5
  266. package/src/nodes/core/VarNode.js +47 -22
  267. package/src/nodes/core/VaryingNode.js +1 -18
  268. package/src/nodes/display/BlendModes.js +0 -64
  269. package/src/nodes/display/ColorAdjustment.js +17 -0
  270. package/src/nodes/display/ColorSpaceNode.js +3 -3
  271. package/src/nodes/display/NormalMapNode.js +39 -4
  272. package/src/nodes/display/PassNode.js +98 -9
  273. package/src/nodes/display/RenderOutputNode.js +3 -3
  274. package/src/nodes/display/ScreenNode.js +3 -1
  275. package/src/nodes/display/ToneMappingNode.js +1 -1
  276. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  277. package/src/nodes/display/ViewportDepthNode.js +52 -4
  278. package/src/nodes/display/ViewportTextureNode.js +21 -4
  279. package/src/nodes/fog/Fog.js +18 -35
  280. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  281. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  282. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  283. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  284. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  285. package/src/nodes/geometry/RangeNode.js +4 -2
  286. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
  287. package/src/nodes/gpgpu/ComputeNode.js +5 -4
  288. package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
  289. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  290. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  291. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  292. package/src/nodes/lighting/LightsNode.js +2 -2
  293. package/src/nodes/lighting/PointShadowNode.js +162 -149
  294. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  295. package/src/nodes/lighting/ShadowNode.js +97 -41
  296. package/src/nodes/math/BitcountNode.js +433 -0
  297. package/src/nodes/math/ConditionalNode.js +2 -2
  298. package/src/nodes/math/MathNode.js +3 -40
  299. package/src/nodes/math/OperatorNode.js +2 -1
  300. package/src/nodes/math/PackFloatNode.js +98 -0
  301. package/src/nodes/math/UnpackFloatNode.js +96 -0
  302. package/src/nodes/pmrem/PMREMNode.js +1 -1
  303. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  304. package/src/nodes/tsl/TSLCore.js +17 -14
  305. package/src/nodes/utils/ArrayElementNode.js +13 -0
  306. package/src/nodes/utils/DebugNode.js +11 -11
  307. package/src/nodes/utils/EventNode.js +1 -2
  308. package/src/nodes/utils/JoinNode.js +2 -2
  309. package/src/nodes/utils/LoopNode.js +1 -1
  310. package/src/nodes/utils/MemberNode.js +1 -1
  311. package/src/nodes/utils/Packing.js +13 -1
  312. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  313. package/src/nodes/utils/RTTNode.js +1 -1
  314. package/src/nodes/utils/ReflectorNode.js +3 -4
  315. package/src/nodes/utils/SampleNode.js +1 -1
  316. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  317. package/src/nodes/utils/UVUtils.js +28 -0
  318. package/src/objects/BatchedMesh.js +27 -14
  319. package/src/objects/InstancedMesh.js +11 -0
  320. package/src/objects/Line.js +1 -1
  321. package/src/objects/Mesh.js +1 -1
  322. package/src/objects/Points.js +1 -1
  323. package/src/objects/Skeleton.js +9 -0
  324. package/src/renderers/WebGLRenderer.js +178 -92
  325. package/src/renderers/common/Backend.js +29 -0
  326. package/src/renderers/common/Background.js +24 -11
  327. package/src/renderers/common/BindGroup.js +1 -9
  328. package/src/renderers/common/Binding.js +11 -0
  329. package/src/renderers/common/Bindings.js +27 -12
  330. package/src/renderers/common/BlendMode.js +143 -0
  331. package/src/renderers/common/Buffer.js +40 -0
  332. package/src/renderers/common/BundleGroup.js +1 -1
  333. package/src/renderers/common/ChainMap.js +30 -6
  334. package/src/renderers/common/CubeRenderTarget.js +50 -6
  335. package/src/renderers/common/Geometries.js +29 -3
  336. package/src/renderers/common/Lighting.js +5 -21
  337. package/src/renderers/common/Pipelines.js +4 -4
  338. package/src/renderers/common/PostProcessing.js +8 -206
  339. package/src/renderers/common/RenderBundles.js +2 -1
  340. package/src/renderers/common/RenderContext.js +16 -0
  341. package/src/renderers/common/RenderContexts.js +33 -49
  342. package/src/renderers/common/RenderLists.js +2 -1
  343. package/src/renderers/common/RenderObject.js +15 -3
  344. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  345. package/src/renderers/common/RenderObjects.js +18 -2
  346. package/src/renderers/common/RenderPipeline.js +203 -17
  347. package/src/renderers/common/Renderer.js +257 -72
  348. package/src/renderers/common/Sampler.js +4 -4
  349. package/src/renderers/common/StorageBuffer.js +13 -1
  350. package/src/renderers/common/Textures.js +17 -1
  351. package/src/renderers/common/TimestampQueryPool.js +5 -3
  352. package/src/renderers/common/Uniform.js +8 -0
  353. package/src/renderers/common/UniformsGroup.js +61 -0
  354. package/src/renderers/common/XRManager.js +3 -2
  355. package/src/renderers/common/extras/PMREMGenerator.js +2 -8
  356. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  357. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
  358. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  359. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  360. package/src/renderers/shaders/DFGLUTData.js +19 -34
  361. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  362. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  363. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  364. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  365. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  366. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  371. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
  372. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  375. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  376. package/src/renderers/shaders/ShaderChunk.js +3 -3
  377. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  378. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  379. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  380. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  381. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  382. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  383. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  384. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  386. package/src/renderers/shaders/ShaderLib.js +7 -5
  387. package/src/renderers/shaders/UniformsLib.js +0 -3
  388. package/src/renderers/webgl/WebGLBackground.js +2 -2
  389. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  390. package/src/renderers/webgl/WebGLCapabilities.js +3 -4
  391. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  392. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  393. package/src/renderers/webgl/WebGLLights.js +18 -1
  394. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  395. package/src/renderers/webgl/WebGLObjects.js +3 -1
  396. package/src/renderers/webgl/WebGLOutput.js +267 -0
  397. package/src/renderers/webgl/WebGLProgram.js +45 -109
  398. package/src/renderers/webgl/WebGLPrograms.js +45 -49
  399. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  400. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  401. package/src/renderers/webgl/WebGLState.js +32 -37
  402. package/src/renderers/webgl/WebGLTextures.js +89 -28
  403. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  404. package/src/renderers/webgl/WebGLUtils.js +6 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
  407. package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
  408. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
  409. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
  410. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  411. package/src/renderers/webgpu/WebGPUBackend.js +119 -13
  412. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  413. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
  414. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
  415. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  416. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
  417. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  418. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  419. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
  420. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  421. package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
  422. package/src/renderers/webxr/WebXRManager.js +2 -2
  423. package/src/textures/CubeDepthTexture.js +76 -0
  424. package/src/textures/Source.js +1 -1
  425. package/src/textures/Texture.js +3 -3
  426. package/src/utils.js +258 -3
  427. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  428. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  429. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  430. package/src/nodes/accessors/SceneNode.js +0 -145
  431. package/src/nodes/code/ScriptableNode.js +0 -726
  432. package/src/nodes/code/ScriptableValueNode.js +0 -253
  433. package/src/nodes/display/PosterizeNode.js +0 -65
  434. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  435. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  436. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  437. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,223 +1,25 @@
1
- import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
2
- import { ColorManagement } from '../../math/ColorManagement.js';
3
- import { vec4, renderOutput } from '../../nodes/TSL.js';
4
- import { NoToneMapping } from '../../constants.js';
5
- import QuadMesh from '../../renderers/common/QuadMesh.js';
1
+ import RenderPipeline from './RenderPipeline.js';
6
2
  import { warnOnce } from '../../utils.js';
7
3
 
8
4
  /**
9
- * This module is responsible to manage the post processing setups in apps.
10
- * You usually create a single instance of this class and use it to define
11
- * the output of your post processing effect chain.
12
- * ```js
13
- * const postProcessing = new PostProcessing( renderer );
5
+ * @deprecated since r183. Use {@link RenderPipeline} instead. PostProcessing has been renamed to RenderPipeline.
14
6
  *
15
- * const scenePass = pass( scene, camera );
16
- *
17
- * postProcessing.outputNode = scenePass;
18
- * ```
19
- *
20
- * Note: This module can only be used with `WebGPURenderer`.
7
+ * This class is a wrapper for backward compatibility and will be removed in a future version.
21
8
  */
22
- class PostProcessing {
9
+ class PostProcessing extends RenderPipeline {
23
10
 
24
11
  /**
25
12
  * Constructs a new post processing management module.
26
13
  *
27
14
  * @param {Renderer} renderer - A reference to the renderer.
28
15
  * @param {Node<vec4>} outputNode - An optional output node.
16
+ * @deprecated since r183. Use {@link RenderPipeline} instead.
29
17
  */
30
- constructor( renderer, outputNode = vec4( 0, 0, 1, 1 ) ) {
31
-
32
- /**
33
- * A reference to the renderer.
34
- *
35
- * @type {Renderer}
36
- */
37
- this.renderer = renderer;
38
-
39
- /**
40
- * A node which defines the final output of the post
41
- * processing. This is usually the last node in a chain
42
- * of effect nodes.
43
- *
44
- * @type {Node<vec4>}
45
- */
46
- this.outputNode = outputNode;
47
-
48
- /**
49
- * Whether the default output tone mapping and color
50
- * space transformation should be enabled or not.
51
- *
52
- * It is enabled by default by it must be disabled when
53
- * effects must be executed after tone mapping and color
54
- * space conversion. A typical example is FXAA which
55
- * requires sRGB input.
56
- *
57
- * When set to `false`, the app must control the output
58
- * transformation with `RenderOutputNode`.
59
- *
60
- * ```js
61
- * const outputPass = renderOutput( scenePass );
62
- * ```
63
- *
64
- * @type {boolean}
65
- */
66
- this.outputColorTransform = true;
67
-
68
- /**
69
- * Must be set to `true` when the output node changes.
70
- *
71
- * @type {Node<vec4>}
72
- */
73
- this.needsUpdate = true;
74
-
75
- const material = new NodeMaterial();
76
- material.name = 'PostProcessing';
77
-
78
- /**
79
- * The full screen quad that is used to render
80
- * the effects.
81
- *
82
- * @private
83
- * @type {QuadMesh}
84
- */
85
- this._quadMesh = new QuadMesh( material );
86
- this._quadMesh.name = 'Post-Processing';
87
-
88
- /**
89
- * The context of the post processing stack.
90
- *
91
- * @private
92
- * @type {?Object}
93
- * @default null
94
- */
95
- this._context = null;
96
-
97
- }
98
-
99
- /**
100
- * When `PostProcessing` is used to apply post processing effects,
101
- * the application must use this version of `render()` inside
102
- * its animation loop (not the one from the renderer).
103
- */
104
- render() {
105
-
106
- const renderer = this.renderer;
107
-
108
- this._update();
109
-
110
- if ( this._context.onBeforePostProcessing !== null ) this._context.onBeforePostProcessing();
111
-
112
- const toneMapping = renderer.toneMapping;
113
- const outputColorSpace = renderer.outputColorSpace;
114
-
115
- renderer.toneMapping = NoToneMapping;
116
- renderer.outputColorSpace = ColorManagement.workingColorSpace;
117
-
118
- //
119
-
120
- const currentXR = renderer.xr.enabled;
121
- renderer.xr.enabled = false;
122
-
123
- this._quadMesh.render( renderer );
124
-
125
- renderer.xr.enabled = currentXR;
126
-
127
- //
128
-
129
- renderer.toneMapping = toneMapping;
130
- renderer.outputColorSpace = outputColorSpace;
131
-
132
- if ( this._context.onAfterPostProcessing !== null ) this._context.onAfterPostProcessing();
133
-
134
- }
135
-
136
- /**
137
- * Returns the current context of the post processing stack.
138
- *
139
- * @readonly
140
- * @type {?Object}
141
- */
142
- get context() {
143
-
144
- return this._context;
145
-
146
- }
147
-
148
- /**
149
- * Frees internal resources.
150
- */
151
- dispose() {
152
-
153
- this._quadMesh.material.dispose();
154
-
155
- }
156
-
157
- /**
158
- * Updates the state of the module.
159
- *
160
- * @private
161
- */
162
- _update() {
163
-
164
- if ( this.needsUpdate === true ) {
165
-
166
- const renderer = this.renderer;
167
-
168
- const toneMapping = renderer.toneMapping;
169
- const outputColorSpace = renderer.outputColorSpace;
170
-
171
- const context = {
172
- postProcessing: this,
173
- onBeforePostProcessing: null,
174
- onAfterPostProcessing: null
175
- };
176
-
177
- let outputNode = this.outputNode;
178
-
179
- if ( this.outputColorTransform === true ) {
180
-
181
- outputNode = outputNode.context( context );
182
-
183
- outputNode = renderOutput( outputNode, toneMapping, outputColorSpace );
184
-
185
- } else {
186
-
187
- context.toneMapping = toneMapping;
188
- context.outputColorSpace = outputColorSpace;
189
-
190
- outputNode = outputNode.context( context );
191
-
192
- }
193
-
194
- this._context = context;
195
-
196
- this._quadMesh.material.fragmentNode = outputNode;
197
- this._quadMesh.material.needsUpdate = true;
198
-
199
- this.needsUpdate = false;
200
-
201
- }
202
-
203
- }
204
-
205
- /**
206
- * When `PostProcessing` is used to apply post processing effects,
207
- * the application must use this version of `renderAsync()` inside
208
- * its animation loop (not the one from the renderer).
209
- *
210
- * @async
211
- * @deprecated
212
- * @return {Promise} A Promise that resolves when the render has been finished.
213
- */
214
- async renderAsync() {
215
-
216
- warnOnce( 'PostProcessing: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.' ); // @deprecated r181
18
+ constructor( renderer, outputNode ) {
217
19
 
218
- await this.renderer.init();
20
+ warnOnce( 'PostProcessing: "PostProcessing" has been renamed to "RenderPipeline". Please update your code to use "THREE.RenderPipeline" instead.' ); // @deprecated, r183
219
21
 
220
- this.render();
22
+ super( renderer, outputNode );
221
23
 
222
24
  }
223
25
 
@@ -47,7 +47,8 @@ class RenderBundles {
47
47
 
48
48
  }
49
49
 
50
- _chainKeys.length = 0;
50
+ _chainKeys[ 0 ] = null;
51
+ _chainKeys[ 1 ] = null;
51
52
 
52
53
  return bundle;
53
54
 
@@ -25,6 +25,14 @@ class RenderContext {
25
25
  */
26
26
  this.id = _id ++;
27
27
 
28
+ /**
29
+ * The MRT configuration.
30
+ *
31
+ * @type {?MRTNode}
32
+ * @default null
33
+ */
34
+ this.mrt = null;
35
+
28
36
  /**
29
37
  * Whether the current active framebuffer has a color attachment.
30
38
  *
@@ -214,6 +222,14 @@ class RenderContext {
214
222
  */
215
223
  this.clippingContext = null;
216
224
 
225
+ /**
226
+ * The current camera.
227
+ *
228
+ * @type {?Camera}
229
+ * @default null
230
+ */
231
+ this.camera = null;
232
+
217
233
  /**
218
234
  * This flag can be used for type testing.
219
235
  *
@@ -1,11 +1,4 @@
1
- import ChainMap from './ChainMap.js';
2
1
  import RenderContext from './RenderContext.js';
3
- import { Scene } from '../../scenes/Scene.js';
4
- import { Camera } from '../../cameras/Camera.js';
5
-
6
- const _chainKeys = [];
7
- const _defaultScene = /*@__PURE__*/ new Scene();
8
- const _defaultCamera = /*@__PURE__*/ new Camera();
9
2
 
10
3
  /**
11
4
  * This module manages the render contexts of the renderer.
@@ -16,31 +9,38 @@ class RenderContexts {
16
9
 
17
10
  /**
18
11
  * Constructs a new render context management component.
12
+ *
13
+ * @param {Renderer} renderer - The renderer.
19
14
  */
20
- constructor() {
15
+ constructor( renderer ) {
21
16
 
22
17
  /**
23
- * A dictionary that manages render contexts in chain maps
24
- * for each attachment state.
18
+ * The renderer.
25
19
  *
26
- * @type {Object<string,ChainMap>}
20
+ * @type {Renderer}
27
21
  */
28
- this.chainMaps = {};
22
+ this.renderer = renderer;
23
+
24
+ /**
25
+ * A dictionary that manages render contexts.
26
+ *
27
+ * @type {Object<string,RenderContext>}
28
+ */
29
+ this._renderContexts = {};
29
30
 
30
31
  }
31
32
 
32
33
  /**
33
34
  * Returns a render context for the given scene, camera and render target.
34
35
  *
35
- * @param {Scene} scene - The scene.
36
- * @param {Camera} camera - The camera that is used to render the scene.
37
36
  * @param {?RenderTarget} [renderTarget=null] - The active render target.
37
+ * @param {?MRTNode} [mrt=null] - The MRT configuration
38
+ * @param {?number} [callDepth=0] - The call depth of the renderer.
38
39
  * @return {RenderContext} The render context.
39
40
  */
40
- get( scene, camera, renderTarget = null ) {
41
+ get( renderTarget = null, mrt = null, callDepth = 0 ) {
41
42
 
42
- _chainKeys[ 0 ] = scene;
43
- _chainKeys[ 1 ] = camera;
43
+ //
44
44
 
45
45
  let attachmentState;
46
46
 
@@ -51,54 +51,38 @@ class RenderContexts {
51
51
  } else {
52
52
 
53
53
  const format = renderTarget.texture.format;
54
+ const type = renderTarget.texture.type;
54
55
  const count = renderTarget.textures.length;
55
56
 
56
- attachmentState = `${ count }:${ format }:${ renderTarget.samples }:${ renderTarget.depthBuffer }:${ renderTarget.stencilBuffer }`;
57
+ attachmentState = `${ count }:${ format }:${ type }:${ renderTarget.samples }:${ renderTarget.depthBuffer }:${ renderTarget.stencilBuffer }`;
57
58
 
58
59
  }
59
60
 
60
- const chainMap = this._getChainMap( attachmentState );
61
+ //
62
+
63
+ const mrtState = ( mrt !== null ) ? mrt.id : 'default';
61
64
 
62
- let renderState = chainMap.get( _chainKeys );
65
+ //
66
+
67
+ const renderStateKey = attachmentState + '-' + mrtState + '-' + callDepth;
68
+
69
+ let renderState = this._renderContexts[ renderStateKey ];
63
70
 
64
71
  if ( renderState === undefined ) {
65
72
 
66
73
  renderState = new RenderContext();
74
+ renderState.mrt = mrt;
67
75
 
68
- chainMap.set( _chainKeys, renderState );
76
+ this._renderContexts[ renderStateKey ] = renderState;
69
77
 
70
78
  }
71
79
 
72
- _chainKeys.length = 0;
73
-
74
80
  if ( renderTarget !== null ) renderState.sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples;
75
81
 
76
- return renderState;
82
+ renderState.clearDepthValue = this.renderer.getClearDepth();
83
+ renderState.clearStencilValue = this.renderer.getClearStencil();
77
84
 
78
- }
79
-
80
- /**
81
- * Returns a render context intended for clear operations.
82
- *
83
- * @param {?RenderTarget} [renderTarget=null] - The active render target.
84
- * @return {RenderContext} The render context.
85
- */
86
- getForClear( renderTarget = null ) {
87
-
88
- return this.get( _defaultScene, _defaultCamera, renderTarget );
89
-
90
- }
91
-
92
- /**
93
- * Returns a chain map for the given attachment state.
94
- *
95
- * @private
96
- * @param {string} attachmentState - The attachment state.
97
- * @return {ChainMap} The chain map.
98
- */
99
- _getChainMap( attachmentState ) {
100
-
101
- return this.chainMaps[ attachmentState ] || ( this.chainMaps[ attachmentState ] = new ChainMap() );
85
+ return renderState;
102
86
 
103
87
  }
104
88
 
@@ -107,7 +91,7 @@ class RenderContexts {
107
91
  */
108
92
  dispose() {
109
93
 
110
- this.chainMaps = {};
94
+ this._renderContexts = {};
111
95
 
112
96
  }
113
97
 
@@ -57,7 +57,8 @@ class RenderLists {
57
57
 
58
58
  }
59
59
 
60
- _chainKeys.length = 0;
60
+ _chainKeys[ 0 ] = null;
61
+ _chainKeys[ 1 ] = null;
61
62
 
62
63
  return list;
63
64
 
@@ -444,6 +444,17 @@ class RenderObject {
444
444
 
445
445
  }
446
446
 
447
+ /**
448
+ * Returns the byte offset into the indirect attribute buffer.
449
+ *
450
+ * @return {number|Array<number>} The byte offset into the indirect attribute buffer.
451
+ */
452
+ getIndirectOffset() {
453
+
454
+ return this._geometries.getIndirectOffset( this );
455
+
456
+ }
457
+
447
458
  /**
448
459
  * Returns an array that acts as a key for identifying the render object in a chain map.
449
460
  *
@@ -500,8 +511,7 @@ class RenderObject {
500
511
 
501
512
  // geometry attribute
502
513
  attribute = geometry.getAttribute( nodeAttribute.name );
503
-
504
- attributesId[ nodeAttribute.name ] = attribute.version;
514
+ attributesId[ nodeAttribute.name ] = attribute.id;
505
515
 
506
516
  }
507
517
 
@@ -778,6 +788,8 @@ class RenderObject {
778
788
 
779
789
  }
780
790
 
791
+ cacheKey += this.context.id + ',';
792
+
781
793
  cacheKey += object.receiveShadow + ',';
782
794
 
783
795
  return hashString( cacheKey );
@@ -869,7 +881,7 @@ class RenderObject {
869
881
 
870
882
  }
871
883
 
872
- cacheKey = hash( cacheKey, this.camera.id );
884
+ cacheKey = hash( cacheKey, this.renderer.contextNode.id, this.renderer.contextNode.version );
873
885
 
874
886
  return cacheKey;
875
887
 
@@ -0,0 +1,40 @@
1
+ import Pipeline from './Pipeline.js';
2
+
3
+ /**
4
+ * Class for representing render pipelines.
5
+ *
6
+ * @private
7
+ * @augments Pipeline
8
+ */
9
+ class RenderObjectPipeline extends Pipeline {
10
+
11
+ /**
12
+ * Constructs a new render object pipeline.
13
+ *
14
+ * @param {string} cacheKey - The pipeline's cache key.
15
+ * @param {ProgrammableStage} vertexProgram - The pipeline's vertex shader.
16
+ * @param {ProgrammableStage} fragmentProgram - The pipeline's fragment shader.
17
+ */
18
+ constructor( cacheKey, vertexProgram, fragmentProgram ) {
19
+
20
+ super( cacheKey );
21
+
22
+ /**
23
+ * The pipeline's vertex shader.
24
+ *
25
+ * @type {ProgrammableStage}
26
+ */
27
+ this.vertexProgram = vertexProgram;
28
+
29
+ /**
30
+ * The pipeline's fragment shader.
31
+ *
32
+ * @type {ProgrammableStage}
33
+ */
34
+ this.fragmentProgram = fragmentProgram;
35
+
36
+ }
37
+
38
+ }
39
+
40
+ export default RenderObjectPipeline;
@@ -91,12 +91,15 @@ class RenderObjects {
91
91
 
92
92
  const chainMap = this.getChainMap( passId );
93
93
 
94
- // reuse chainArray
94
+ // set chain keys
95
+
95
96
  _chainKeys[ 0 ] = object;
96
97
  _chainKeys[ 1 ] = material;
97
98
  _chainKeys[ 2 ] = renderContext;
98
99
  _chainKeys[ 3 ] = lightsNode;
99
100
 
101
+ //
102
+
100
103
  let renderObject = chainMap.get( _chainKeys );
101
104
 
102
105
  if ( renderObject === undefined ) {
@@ -107,6 +110,12 @@ class RenderObjects {
107
110
 
108
111
  } else {
109
112
 
113
+ // update references
114
+
115
+ renderObject.camera = camera;
116
+
117
+ //
118
+
110
119
  renderObject.updateClipping( clippingContext );
111
120
 
112
121
  if ( renderObject.needsGeometryUpdate ) {
@@ -133,7 +142,14 @@ class RenderObjects {
133
142
 
134
143
  }
135
144
 
136
- _chainKeys.length = 0;
145
+ // reset chain array
146
+
147
+ _chainKeys[ 0 ] = null;
148
+ _chainKeys[ 1 ] = null;
149
+ _chainKeys[ 2 ] = null;
150
+ _chainKeys[ 3 ] = null;
151
+
152
+ //
137
153
 
138
154
  return renderObject;
139
155