super-three 0.181.0 → 0.184.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 (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -98,14 +98,17 @@ void main() {
98
98
 
99
99
  #elif DEPTH_PACKING == 3201
100
100
 
101
+ // TODO Deprecate
101
102
  gl_FragColor = packDepthToRGBA( fragCoordZ );
102
103
 
103
104
  #elif DEPTH_PACKING == 3202
104
105
 
106
+ // TODO Deprecate
105
107
  gl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );
106
108
 
107
109
  #elif DEPTH_PACKING == 3203
108
110
 
111
+ // TODO Deprecate
109
112
  gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );
110
113
 
111
114
  #endif
@@ -50,7 +50,6 @@ uniform float farDistance;
50
50
  varying vec3 vWorldPosition;
51
51
 
52
52
  #include <common>
53
- #include <packing>
54
53
  #include <uv_pars_fragment>
55
54
  #include <map_pars_fragment>
56
55
  #include <alphamap_pars_fragment>
@@ -72,7 +71,7 @@ void main () {
72
71
  dist = ( dist - nearDistance ) / ( farDistance - nearDistance );
73
72
  dist = saturate( dist ); // clamp to [ 0, 1 ]
74
73
 
75
- gl_FragColor = packDepthToRGBA( dist );
74
+ gl_FragColor = vec4( dist, 0.0, 0.0, 1.0 );
76
75
 
77
76
  }
78
77
  `;
@@ -58,7 +58,6 @@ uniform vec3 emissive;
58
58
  uniform float opacity;
59
59
 
60
60
  #include <common>
61
- #include <packing>
62
61
  #include <dithering_pars_fragment>
63
62
  #include <color_pars_fragment>
64
63
  #include <uv_pars_fragment>
@@ -69,8 +68,10 @@ uniform float opacity;
69
68
  #include <aomap_pars_fragment>
70
69
  #include <lightmap_pars_fragment>
71
70
  #include <emissivemap_pars_fragment>
71
+ #include <cube_uv_reflection_fragment>
72
72
  #include <envmap_common_pars_fragment>
73
73
  #include <envmap_pars_fragment>
74
+ #include <envmap_physical_pars_fragment>
74
75
  #include <fog_pars_fragment>
75
76
  #include <bsdfs>
76
77
  #include <lights_pars_begin>
@@ -58,7 +58,6 @@ uniform float opacity;
58
58
 
59
59
  #endif
60
60
 
61
- #include <packing>
62
61
  #include <uv_pars_fragment>
63
62
  #include <normal_pars_fragment>
64
63
  #include <bumpmap_pars_fragment>
@@ -75,7 +74,7 @@ void main() {
75
74
  #include <normal_fragment_begin>
76
75
  #include <normal_fragment_maps>
77
76
 
78
- gl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );
77
+ gl_FragColor = vec4( normalize( normal ) * 0.5 + 0.5, diffuseColor.a );
79
78
 
80
79
  #ifdef OPAQUE
81
80
 
@@ -60,7 +60,6 @@ uniform float shininess;
60
60
  uniform float opacity;
61
61
 
62
62
  #include <common>
63
- #include <packing>
64
63
  #include <dithering_pars_fragment>
65
64
  #include <color_pars_fragment>
66
65
  #include <uv_pars_fragment>
@@ -71,8 +70,10 @@ uniform float opacity;
71
70
  #include <aomap_pars_fragment>
72
71
  #include <lightmap_pars_fragment>
73
72
  #include <emissivemap_pars_fragment>
73
+ #include <cube_uv_reflection_fragment>
74
74
  #include <envmap_common_pars_fragment>
75
75
  #include <envmap_pars_fragment>
76
+ #include <envmap_physical_pars_fragment>
76
77
  #include <fog_pars_fragment>
77
78
  #include <bsdfs>
78
79
  #include <lights_pars_begin>
@@ -130,7 +130,6 @@ uniform float opacity;
130
130
  varying vec3 vViewPosition;
131
131
 
132
132
  #include <common>
133
- #include <packing>
134
133
  #include <dithering_pars_fragment>
135
134
  #include <color_pars_fragment>
136
135
  #include <uv_pars_fragment>
@@ -199,14 +198,10 @@ void main() {
199
198
  vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
200
199
 
201
200
  #ifdef USE_SHEEN
202
-
203
- // Sheen energy compensation approximation calculation can be found at the end of
204
- // https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
205
- float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );
206
-
207
- outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;
208
-
209
- #endif
201
+
202
+ outgoingLight = outgoingLight + sheenSpecularDirect + sheenSpecularIndirect;
203
+
204
+ #endif
210
205
 
211
206
  #ifdef USE_CLEARCOAT
212
207
 
@@ -56,7 +56,6 @@ uniform vec3 emissive;
56
56
  uniform float opacity;
57
57
 
58
58
  #include <common>
59
- #include <packing>
60
59
  #include <dithering_pars_fragment>
61
60
  #include <color_pars_fragment>
62
61
  #include <uv_pars_fragment>
@@ -36,7 +36,6 @@ uniform vec3 color;
36
36
  uniform float opacity;
37
37
 
38
38
  #include <common>
39
- #include <packing>
40
39
  #include <fog_pars_fragment>
41
40
  #include <bsdfs>
42
41
  #include <lights_pars_begin>
@@ -53,6 +52,7 @@ void main() {
53
52
  #include <tonemapping_fragment>
54
53
  #include <colorspace_fragment>
55
54
  #include <fog_fragment>
55
+ #include <premultiplied_alpha_fragment>
56
56
 
57
57
  }
58
58
  `;
@@ -11,8 +11,6 @@ uniform sampler2D shadow_pass;
11
11
  uniform vec2 resolution;
12
12
  uniform float radius;
13
13
 
14
- #include <packing>
15
-
16
14
  void main() {
17
15
 
18
16
  const float samples = float( VSM_SAMPLES );
@@ -28,13 +26,13 @@ void main() {
28
26
 
29
27
  #ifdef HORIZONTAL_PASS
30
28
 
31
- vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );
29
+ vec2 distribution = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ).rg;
32
30
  mean += distribution.x;
33
31
  squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;
34
32
 
35
33
  #else
36
34
 
37
- float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );
35
+ float depth = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ).r;
38
36
  mean += depth;
39
37
  squared_mean += depth * depth;
40
38
 
@@ -45,9 +43,9 @@ void main() {
45
43
  mean = mean / samples;
46
44
  squared_mean = squared_mean / samples;
47
45
 
48
- float std_dev = sqrt( squared_mean - mean * mean );
46
+ float std_dev = sqrt( max( 0.0, squared_mean - mean * mean ) );
49
47
 
50
- gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );
48
+ gl_FragColor = vec4( mean, std_dev, 0.0, 1.0 );
51
49
 
52
50
  }
53
51
  `;
@@ -39,7 +39,8 @@ const ShaderLib = {
39
39
  UniformsLib.fog,
40
40
  UniformsLib.lights,
41
41
  {
42
- emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }
42
+ emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },
43
+ envMapIntensity: { value: 1 }
43
44
  }
44
45
  ] ),
45
46
 
@@ -65,7 +66,8 @@ const ShaderLib = {
65
66
  {
66
67
  emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },
67
68
  specular: { value: /*@__PURE__*/ new Color( 0x111111 ) },
68
- shininess: { value: 30 }
69
+ shininess: { value: 30 },
70
+ envMapIntensity: { value: 1 }
69
71
  }
70
72
  ] ),
71
73
 
@@ -230,7 +232,6 @@ const ShaderLib = {
230
232
 
231
233
  uniforms: {
232
234
  envMap: { value: null },
233
- flipEnvMap: { value: - 1 },
234
235
  backgroundBlurriness: { value: 0 },
235
236
  backgroundIntensity: { value: 1 },
236
237
  backgroundRotation: { value: /*@__PURE__*/ new Matrix3() }
@@ -265,7 +266,7 @@ const ShaderLib = {
265
266
 
266
267
  },
267
268
 
268
- distanceRGBA: {
269
+ distance: {
269
270
 
270
271
  uniforms: /*@__PURE__*/ mergeUniforms( [
271
272
  UniformsLib.common,
@@ -277,8 +278,8 @@ const ShaderLib = {
277
278
  }
278
279
  ] ),
279
280
 
280
- vertexShader: ShaderChunk.distanceRGBA_vert,
281
- fragmentShader: ShaderChunk.distanceRGBA_frag
281
+ vertexShader: ShaderChunk.distance_vert,
282
+ fragmentShader: ShaderChunk.distance_frag
282
283
 
283
284
  },
284
285
 
@@ -1,5 +1,6 @@
1
1
  import { Color } from '../../math/Color.js';
2
2
  import { Vector2 } from '../../math/Vector2.js';
3
+ import { Vector3 } from '../../math/Vector3.js';
3
4
  import { Matrix3 } from '../../math/Matrix3.js';
4
5
 
5
6
  // Uniforms library for shared webgl shaders
@@ -31,7 +32,6 @@ const UniformsLib = {
31
32
 
32
33
  envMap: { value: null },
33
34
  envMapRotation: { value: /*@__PURE__*/ new Matrix3() },
34
- flipEnvMap: { value: - 1 },
35
35
  reflectivity: { value: 1.0 }, // basic, lambert, phong
36
36
  ior: { value: 1.5 }, // physical
37
37
  refractionRatio: { value: 0.98 }, // basic, lambert, phong
@@ -135,7 +135,6 @@ const UniformsLib = {
135
135
  shadowMapSize: {}
136
136
  } },
137
137
 
138
- directionalShadowMap: { value: [] },
139
138
  directionalShadowMatrix: { value: [] },
140
139
 
141
140
  spotLights: { value: [], properties: {
@@ -157,7 +156,6 @@ const UniformsLib = {
157
156
  } },
158
157
 
159
158
  spotLightMap: { value: [] },
160
- spotShadowMap: { value: [] },
161
159
  spotLightMatrix: { value: [] },
162
160
 
163
161
  pointLights: { value: [], properties: {
@@ -177,7 +175,6 @@ const UniformsLib = {
177
175
  shadowCameraFar: {}
178
176
  } },
179
177
 
180
- pointShadowMap: { value: [] },
181
178
  pointShadowMatrix: { value: [] },
182
179
 
183
180
  hemisphereLights: { value: [], properties: {
@@ -195,7 +192,12 @@ const UniformsLib = {
195
192
  } },
196
193
 
197
194
  ltc_1: { value: null },
198
- ltc_2: { value: null }
195
+ ltc_2: { value: null },
196
+
197
+ probesSH: { value: null },
198
+ probesMin: { value: /*@__PURE__*/ new Vector3() },
199
+ probesMax: { value: /*@__PURE__*/ new Vector3() },
200
+ probesResolution: { value: /*@__PURE__*/ new Vector3() }
199
201
 
200
202
  },
201
203
 
@@ -27,10 +27,7 @@ export function cloneUniforms( src ) {
27
27
 
28
28
  const property = src[ u ][ p ];
29
29
 
30
- if ( property && ( property.isColor ||
31
- property.isMatrix3 || property.isMatrix4 ||
32
- property.isVector2 || property.isVector3 || property.isVector4 ||
33
- property.isTexture || property.isQuaternion ) ) {
30
+ if ( isThreeObject( property ) ) {
34
31
 
35
32
  if ( property.isRenderTargetTexture ) {
36
33
 
@@ -45,7 +42,23 @@ export function cloneUniforms( src ) {
45
42
 
46
43
  } else if ( Array.isArray( property ) ) {
47
44
 
48
- dst[ u ][ p ] = property.slice();
45
+ if ( isThreeObject( property[ 0 ] ) ) {
46
+
47
+ const clonedProperty = [];
48
+
49
+ for ( let i = 0, l = property.length; i < l; i ++ ) {
50
+
51
+ clonedProperty[ i ] = property[ i ].clone();
52
+
53
+ }
54
+
55
+ dst[ u ][ p ] = clonedProperty;
56
+
57
+ } else {
58
+
59
+ dst[ u ][ p ] = property.slice();
60
+
61
+ }
49
62
 
50
63
  } else {
51
64
 
@@ -89,6 +102,15 @@ export function mergeUniforms( uniforms ) {
89
102
 
90
103
  }
91
104
 
105
+ function isThreeObject( property ) {
106
+
107
+ return ( property && ( property.isColor ||
108
+ property.isMatrix3 || property.isMatrix4 ||
109
+ property.isVector2 || property.isVector3 || property.isVector4 ||
110
+ property.isTexture || property.isQuaternion ) );
111
+
112
+ }
113
+
92
114
  export function cloneUniformsGroups( src ) {
93
115
 
94
116
  const dst = [];
@@ -19,6 +19,7 @@ function WebGLAnimation() {
19
19
 
20
20
  if ( isAnimating === true ) return;
21
21
  if ( animationLoop === null ) return;
22
+ if ( context === null ) return;
22
23
 
23
24
  requestId = context.requestAnimationFrame( onAnimationFrame );
24
25
 
@@ -28,7 +29,7 @@ function WebGLAnimation() {
28
29
 
29
30
  stop: function () {
30
31
 
31
- context.cancelAnimationFrame( requestId );
32
+ if ( context !== null ) context.cancelAnimationFrame( requestId );
32
33
 
33
34
  isAnimating = false;
34
35
 
@@ -4,17 +4,19 @@ import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
4
4
  import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
5
5
  import { Color } from '../../math/Color.js';
6
6
  import { ColorManagement } from '../../math/ColorManagement.js';
7
- import { Euler } from '../../math/Euler.js';
7
+ import { Matrix3 } from '../../math/Matrix3.js';
8
8
  import { Matrix4 } from '../../math/Matrix4.js';
9
9
  import { Mesh } from '../../objects/Mesh.js';
10
10
  import { ShaderLib } from '../shaders/ShaderLib.js';
11
11
  import { cloneUniforms, getUnlitUniformColorSpace } from '../shaders/UniformsUtils.js';
12
12
 
13
13
  const _rgb = { r: 0, b: 0, g: 0 };
14
- const _e1 = /*@__PURE__*/ new Euler();
15
14
  const _m1 = /*@__PURE__*/ new Matrix4();
15
+ const _m = /*@__PURE__*/ new Matrix3();
16
16
 
17
- function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) {
17
+ _m.set( - 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0 );
18
+
19
+ function WebGLBackground( renderer, environments, state, objects, alpha, premultipliedAlpha ) {
18
20
 
19
21
  const clearColor = new Color( 0x000000 );
20
22
  let clearAlpha = alpha === true ? 0 : 1;
@@ -33,7 +35,7 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
33
35
  if ( background && background.isTexture ) {
34
36
 
35
37
  const usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background
36
- background = ( usePMREM ? cubeuvmaps : cubemaps ).get( background );
38
+ background = environments.get( background, usePMREM );
37
39
 
38
40
  }
39
41
 
@@ -130,24 +132,22 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
130
132
 
131
133
  }
132
134
 
133
- _e1.copy( scene.backgroundRotation );
134
135
 
135
- // accommodate left-handed frame
136
- _e1.x *= - 1; _e1.y *= - 1; _e1.z *= - 1;
136
+ boxMesh.material.uniforms.envMap.value = background;
137
+ boxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;
138
+ boxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;
139
+
140
+
141
+ // note: since the matrix is orthonormal, we can use the more-efficient transpose() in lieu of invert()
142
+ boxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( scene.backgroundRotation ) ).transpose();
137
143
 
138
144
  if ( background.isCubeTexture && background.isRenderTargetTexture === false ) {
139
145
 
140
- // environment maps which are not cube render targets or PMREMs follow a different convention
141
- _e1.y *= - 1;
142
- _e1.z *= - 1;
146
+ boxMesh.material.uniforms.backgroundRotation.value.premultiply( _m );
143
147
 
144
148
  }
145
149
 
146
- boxMesh.material.uniforms.envMap.value = background;
147
- boxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;
148
- boxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;
149
- boxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;
150
- boxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( _e1 ) );
150
+
151
151
  boxMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;
152
152
 
153
153
  if ( currentBackground !== background ||
@@ -14,7 +14,7 @@ function WebGLBindingStates( gl, attributes ) {
14
14
 
15
15
  let updateBuffers = false;
16
16
 
17
- const state = getBindingState( geometry, program, material );
17
+ const state = getBindingState( object, geometry, program, material );
18
18
 
19
19
  if ( currentState !== state ) {
20
20
 
@@ -67,16 +67,28 @@ function WebGLBindingStates( gl, attributes ) {
67
67
 
68
68
  }
69
69
 
70
- function getBindingState( geometry, program, material ) {
70
+ function getBindingState( object, geometry, program, material ) {
71
71
 
72
72
  const wireframe = ( material.wireframe === true );
73
73
 
74
- let programMap = bindingStates[ geometry.id ];
74
+ let objectMap = bindingStates[ geometry.id ];
75
+
76
+ if ( objectMap === undefined ) {
77
+
78
+ objectMap = {};
79
+ bindingStates[ geometry.id ] = objectMap;
80
+
81
+ }
82
+
83
+ // Each InstancedMesh requires unique binding states because it contains instanced attributes.
84
+ const objectId = ( object.isInstancedMesh === true ) ? object.id : 0;
85
+
86
+ let programMap = objectMap[ objectId ];
75
87
 
76
88
  if ( programMap === undefined ) {
77
89
 
78
90
  programMap = {};
79
- bindingStates[ geometry.id ] = programMap;
91
+ objectMap[ objectId ] = programMap;
80
92
 
81
93
  }
82
94
 
@@ -477,21 +489,27 @@ function WebGLBindingStates( gl, attributes ) {
477
489
 
478
490
  for ( const geometryId in bindingStates ) {
479
491
 
480
- const programMap = bindingStates[ geometryId ];
492
+ const objectMap = bindingStates[ geometryId ];
481
493
 
482
- for ( const programId in programMap ) {
494
+ for ( const objectId in objectMap ) {
483
495
 
484
- const stateMap = programMap[ programId ];
496
+ const programMap = objectMap[ objectId ];
485
497
 
486
- for ( const wireframe in stateMap ) {
498
+ for ( const programId in programMap ) {
487
499
 
488
- deleteVertexArrayObject( stateMap[ wireframe ].object );
500
+ const stateMap = programMap[ programId ];
489
501
 
490
- delete stateMap[ wireframe ];
502
+ for ( const wireframe in stateMap ) {
491
503
 
492
- }
504
+ deleteVertexArrayObject( stateMap[ wireframe ].object );
493
505
 
494
- delete programMap[ programId ];
506
+ delete stateMap[ wireframe ];
507
+
508
+ }
509
+
510
+ delete programMap[ programId ];
511
+
512
+ }
495
513
 
496
514
  }
497
515
 
@@ -505,21 +523,27 @@ function WebGLBindingStates( gl, attributes ) {
505
523
 
506
524
  if ( bindingStates[ geometry.id ] === undefined ) return;
507
525
 
508
- const programMap = bindingStates[ geometry.id ];
526
+ const objectMap = bindingStates[ geometry.id ];
509
527
 
510
- for ( const programId in programMap ) {
528
+ for ( const objectId in objectMap ) {
511
529
 
512
- const stateMap = programMap[ programId ];
530
+ const programMap = objectMap[ objectId ];
513
531
 
514
- for ( const wireframe in stateMap ) {
532
+ for ( const programId in programMap ) {
515
533
 
516
- deleteVertexArrayObject( stateMap[ wireframe ].object );
534
+ const stateMap = programMap[ programId ];
517
535
 
518
- delete stateMap[ wireframe ];
536
+ for ( const wireframe in stateMap ) {
519
537
 
520
- }
538
+ deleteVertexArrayObject( stateMap[ wireframe ].object );
521
539
 
522
- delete programMap[ programId ];
540
+ delete stateMap[ wireframe ];
541
+
542
+ }
543
+
544
+ delete programMap[ programId ];
545
+
546
+ }
523
547
 
524
548
  }
525
549
 
@@ -531,26 +555,73 @@ function WebGLBindingStates( gl, attributes ) {
531
555
 
532
556
  for ( const geometryId in bindingStates ) {
533
557
 
534
- const programMap = bindingStates[ geometryId ];
558
+ const objectMap = bindingStates[ geometryId ];
559
+
560
+ for ( const objectId in objectMap ) {
561
+
562
+ const programMap = objectMap[ objectId ];
563
+
564
+ if ( programMap[ program.id ] === undefined ) continue;
565
+
566
+ const stateMap = programMap[ program.id ];
567
+
568
+ for ( const wireframe in stateMap ) {
569
+
570
+ deleteVertexArrayObject( stateMap[ wireframe ].object );
571
+
572
+ delete stateMap[ wireframe ];
573
+
574
+ }
575
+
576
+ delete programMap[ program.id ];
577
+
578
+ }
579
+
580
+ }
581
+
582
+ }
583
+
584
+ function releaseStatesOfObject( object ) {
585
+
586
+ for ( const geometryId in bindingStates ) {
587
+
588
+ const objectMap = bindingStates[ geometryId ];
535
589
 
536
- if ( programMap[ program.id ] === undefined ) continue;
590
+ const objectId = ( object.isInstancedMesh === true ) ? object.id : 0;
537
591
 
538
- const stateMap = programMap[ program.id ];
592
+ const programMap = objectMap[ objectId ];
539
593
 
540
- for ( const wireframe in stateMap ) {
594
+ if ( programMap === undefined ) continue;
541
595
 
542
- deleteVertexArrayObject( stateMap[ wireframe ].object );
596
+ for ( const programId in programMap ) {
543
597
 
544
- delete stateMap[ wireframe ];
598
+ const stateMap = programMap[ programId ];
599
+
600
+ for ( const wireframe in stateMap ) {
601
+
602
+ deleteVertexArrayObject( stateMap[ wireframe ].object );
603
+
604
+ delete stateMap[ wireframe ];
605
+
606
+ }
607
+
608
+ delete programMap[ programId ];
545
609
 
546
610
  }
547
611
 
548
- delete programMap[ program.id ];
612
+ delete objectMap[ objectId ];
613
+
614
+ if ( Object.keys( objectMap ).length === 0 ) {
615
+
616
+ delete bindingStates[ geometryId ];
617
+
618
+ }
549
619
 
550
620
  }
551
621
 
552
622
  }
553
623
 
624
+
554
625
  function reset() {
555
626
 
556
627
  resetDefaultState();
@@ -580,6 +651,7 @@ function WebGLBindingStates( gl, attributes ) {
580
651
  resetDefaultState: resetDefaultState,
581
652
  dispose: dispose,
582
653
  releaseStatesOfGeometry: releaseStatesOfGeometry,
654
+ releaseStatesOfObject: releaseStatesOfObject,
583
655
  releaseStatesOfProgram: releaseStatesOfProgram,
584
656
 
585
657
  initAttributes: initAttributes,
@@ -44,44 +44,12 @@ function WebGLBufferRenderer( gl, extensions, info ) {
44
44
 
45
45
  }
46
46
 
47
- function renderMultiDrawInstances( starts, counts, drawCount, primcount ) {
48
-
49
- if ( drawCount === 0 ) return;
50
-
51
- const extension = extensions.get( 'WEBGL_multi_draw' );
52
-
53
- if ( extension === null ) {
54
-
55
- for ( let i = 0; i < starts.length; i ++ ) {
56
-
57
- renderInstances( starts[ i ], counts[ i ], primcount[ i ] );
58
-
59
- }
60
-
61
- } else {
62
-
63
- extension.multiDrawArraysInstancedWEBGL( mode, starts, 0, counts, 0, primcount, 0, drawCount );
64
-
65
- let elementCount = 0;
66
- for ( let i = 0; i < drawCount; i ++ ) {
67
-
68
- elementCount += counts[ i ] * primcount[ i ];
69
-
70
- }
71
-
72
- info.update( elementCount, mode, 1 );
73
-
74
- }
75
-
76
- }
77
-
78
47
  //
79
48
 
80
49
  this.setMode = setMode;
81
50
  this.render = render;
82
51
  this.renderInstances = renderInstances;
83
52
  this.renderMultiDraw = renderMultiDraw;
84
- this.renderMultiDrawInstances = renderMultiDrawInstances;
85
53
 
86
54
  }
87
55