@gnsx/three 0.185.15 → 0.186.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 (417) hide show
  1. package/build/three.cjs +10 -82600
  2. package/build/three.core.js +1303 -728
  3. package/build/three.module.js +439 -338
  4. package/build/three.tsl.js +74 -44
  5. package/build/three.webgpu.js +6036 -2184
  6. package/build/three.webgpu.nodes.js +6020 -2184
  7. package/examples/jsm/Addons.js +6 -6
  8. package/examples/jsm/controls/ArcballControls.js +1 -1
  9. package/examples/jsm/controls/FirstPersonControls.js +44 -20
  10. package/examples/jsm/controls/OrbitControls.js +9 -0
  11. package/examples/jsm/controls/TrackballControls.js +109 -4
  12. package/examples/jsm/csm/CSMShadowNode.js +13 -0
  13. package/examples/jsm/exporters/GLTFExporter.js +23 -7
  14. package/examples/jsm/exporters/USDZExporter.js +2 -2
  15. package/examples/jsm/generators/CityGenerator.js +377 -45
  16. package/examples/jsm/generators/ForestGenerator.js +12 -12
  17. package/examples/jsm/generators/TerrainGenerator.js +49 -37
  18. package/examples/jsm/generators/TreeGenerator.js +70 -76
  19. package/examples/jsm/generators/city/BenchGenerator.js +127 -0
  20. package/examples/jsm/generators/city/CarGenerator.js +479 -0
  21. package/examples/jsm/generators/city/CityGeneratorUtils.js +31 -0
  22. package/examples/jsm/generators/city/HydrantGenerator.js +106 -0
  23. package/examples/jsm/generators/city/InstancedMeshGenerator.js +86 -0
  24. package/examples/jsm/generators/city/PersonGenerator.js +447 -0
  25. package/examples/jsm/generators/city/SidewalkGenerator.js +33 -38
  26. package/examples/jsm/generators/city/SkyscraperGenerator.js +448 -48
  27. package/examples/jsm/generators/city/StreetTreeGenerator.js +231 -0
  28. package/examples/jsm/generators/city/StreetlightGenerator.js +100 -0
  29. package/examples/jsm/generators/city/TrafficlightGenerator.js +106 -0
  30. package/examples/jsm/generators/city/TrashcanGenerator.js +100 -0
  31. package/examples/jsm/geometries/BoxLineGeometry.js +1 -1
  32. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  33. package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -1
  34. package/examples/jsm/gpgpu/CountingSort.js +271 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +60 -239
  36. package/examples/jsm/helpers/LightProbeGridHelperWebGL.js +221 -0
  37. package/examples/jsm/inspector/Extension.js +94 -0
  38. package/examples/jsm/inspector/Inspector.js +145 -41
  39. package/examples/jsm/inspector/RendererInspector.js +100 -52
  40. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +2609 -0
  41. package/examples/jsm/inspector/extensions/color-grading/ColorWheel.js +352 -0
  42. package/examples/jsm/inspector/extensions/color-grading/CurveEditor.js +599 -0
  43. package/examples/jsm/inspector/extensions/color-grading/LUT3DStyle.js +1201 -0
  44. package/examples/jsm/inspector/extensions/color-grading/LUTMath.js +788 -0
  45. package/examples/jsm/inspector/extensions/color-grading/modules/BrightnessModule.js +72 -0
  46. package/examples/jsm/inspector/extensions/color-grading/modules/ColorWheelModule.js +112 -0
  47. package/examples/jsm/inspector/extensions/color-grading/modules/ContrastModule.js +82 -0
  48. package/examples/jsm/inspector/extensions/color-grading/modules/CurvesModule.js +109 -0
  49. package/examples/jsm/inspector/extensions/color-grading/modules/ExposureHueModule.js +110 -0
  50. package/examples/jsm/inspector/extensions/color-grading/modules/ExposureModule.js +73 -0
  51. package/examples/jsm/inspector/extensions/color-grading/modules/HueModule.js +78 -0
  52. package/examples/jsm/inspector/extensions/color-grading/modules/ImportedCubeModule.js +89 -0
  53. package/examples/jsm/inspector/extensions/color-grading/modules/Module.js +285 -0
  54. package/examples/jsm/inspector/extensions/color-grading/modules/OutputModule.js +101 -0
  55. package/examples/jsm/inspector/extensions/color-grading/modules/RendererModule.js +225 -0
  56. package/examples/jsm/inspector/extensions/color-grading/modules/SatVibranceModule.js +102 -0
  57. package/examples/jsm/inspector/extensions/color-grading/modules/SaturationModule.js +76 -0
  58. package/examples/jsm/inspector/extensions/color-grading/modules/VibranceModule.js +76 -0
  59. package/examples/jsm/inspector/extensions/color-grading/modules/WhiteBalanceModule.js +86 -0
  60. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +26 -31
  61. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -0
  62. package/examples/jsm/inspector/tabs/Memory.js +0 -2
  63. package/examples/jsm/inspector/tabs/Settings.js +4 -0
  64. package/examples/jsm/inspector/tabs/Timeline.js +223 -171
  65. package/examples/jsm/inspector/tabs/Viewer.js +515 -21
  66. package/examples/jsm/inspector/ui/List.js +15 -9
  67. package/examples/jsm/inspector/ui/Profiler.js +170 -14
  68. package/examples/jsm/inspector/ui/Style.js +269 -23
  69. package/examples/jsm/inspector/ui/Tab.js +2 -0
  70. package/examples/jsm/inspector/ui/Values.js +14 -2
  71. package/examples/jsm/interactive/HTMLMesh.js +19 -3
  72. package/examples/jsm/lighting/LightProbeGrid.js +484 -889
  73. package/examples/jsm/lighting/LightProbeGridUtils.js +107 -0
  74. package/examples/jsm/lighting/LightProbeGridWebGL.js +841 -0
  75. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +194 -0
  76. package/examples/jsm/lighting/vxgi/VXGINode.js +660 -0
  77. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +478 -0
  78. package/examples/jsm/lighting/vxgi/VXGIVolume.js +1430 -0
  79. package/examples/jsm/lights/SunLight.js +95 -0
  80. package/examples/jsm/lights/SunLightNode.js +56 -0
  81. package/examples/jsm/lights/SunLightShadow.js +319 -0
  82. package/examples/jsm/lights/SunShadowNode.js +312 -0
  83. package/examples/jsm/loaders/3DMLoader.js +150 -49
  84. package/examples/jsm/loaders/3MFLoader.js +202 -1
  85. package/examples/jsm/loaders/FBXLoader.js +81 -5
  86. package/examples/jsm/loaders/GLTFGaussianSplatLoaderExtension.js +330 -0
  87. package/examples/jsm/loaders/GLTFLoader.js +79 -14
  88. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +386 -0
  89. package/examples/jsm/loaders/KSPLATLoader.js +463 -0
  90. package/examples/jsm/loaders/MaterialXLoader.js +111 -1010
  91. package/examples/jsm/loaders/PCDLoader.js +1 -1
  92. package/examples/jsm/loaders/SPLATLoader.js +139 -0
  93. package/examples/jsm/loaders/SPZLoader.js +561 -0
  94. package/examples/jsm/loaders/materialx/MaterialXArchive.js +108 -0
  95. package/examples/jsm/loaders/materialx/MaterialXDocument.js +878 -0
  96. package/examples/jsm/loaders/materialx/MaterialXHextile.js +183 -0
  97. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +376 -0
  98. package/examples/jsm/loaders/materialx/MaterialXLog.js +75 -0
  99. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +4 -0
  100. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +1021 -0
  101. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +661 -0
  102. package/examples/jsm/loaders/materialx/MaterialXUtils.js +57 -0
  103. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +997 -0
  104. package/examples/jsm/loaders/materialx/parse/MaterialXParser.js +28 -0
  105. package/examples/jsm/loaders/usd/USDAParser.js +15 -2
  106. package/examples/jsm/loaders/usd/USDCParser.js +1 -4
  107. package/examples/jsm/loaders/usd/USDComposer.js +80 -42
  108. package/examples/jsm/materials/WoodNodeMaterial.js +6 -108
  109. package/examples/jsm/misc/RollerCoaster.js +2 -2
  110. package/examples/jsm/misc/SculptGL.LICENSE.txt +21 -0
  111. package/examples/jsm/misc/Sculptor.js +1679 -0
  112. package/examples/jsm/misc/SculptorMesh.js +1504 -0
  113. package/examples/jsm/misc/SculptorTools.js +1180 -0
  114. package/examples/jsm/misc/SculptorUtils.js +345 -0
  115. package/examples/jsm/misc/TubePainter.js +28 -16
  116. package/examples/jsm/misc/VolumeSlice.js +24 -24
  117. package/examples/jsm/modifiers/SimplifyModifier.js +63 -556
  118. package/examples/jsm/objects/GaussianSplat.js +1039 -0
  119. package/examples/jsm/objects/Sky.js +66 -45
  120. package/examples/jsm/objects/SkyMesh.js +70 -51
  121. package/examples/jsm/physics/JoltPhysics.js +1 -1
  122. package/examples/jsm/postprocessing/AfterimagePass.js +4 -2
  123. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  124. package/examples/jsm/postprocessing/GTAOPass.js +1 -1
  125. package/examples/jsm/postprocessing/OutlinePass.js +5 -5
  126. package/examples/jsm/postprocessing/SAOPass.js +1 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +1 -1
  128. package/examples/jsm/postprocessing/SSRPass.js +4 -2
  129. package/examples/jsm/postprocessing/SavePass.js +1 -1
  130. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  131. package/examples/jsm/postprocessing/UnrealBloomPass.js +30 -13
  132. package/examples/jsm/renderers/CSS2DRenderer.js +29 -5
  133. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  134. package/examples/jsm/shaders/ExposureShader.js +1 -1
  135. package/examples/jsm/shaders/FilmShader.js +2 -1
  136. package/examples/jsm/transpiler/AST.js +21 -2
  137. package/examples/jsm/transpiler/GLSLDecoder.js +498 -8
  138. package/examples/jsm/transpiler/TSLEncoder.js +82 -10
  139. package/examples/jsm/transpiler/WGSLEncoder.js +33 -4
  140. package/examples/jsm/tsl/WebGLNodesHandler.js +29 -39
  141. package/examples/jsm/tsl/display/AfterImageNode.js +2 -0
  142. package/examples/jsm/tsl/display/AnaglyphPassNode.js +3 -2
  143. package/examples/jsm/tsl/display/BilateralBlurNode.js +5 -2
  144. package/examples/jsm/tsl/display/BloomNode.js +55 -30
  145. package/examples/jsm/tsl/display/DenoiseNode.js +21 -1
  146. package/examples/jsm/tsl/display/DepthOfFieldNode.js +24 -6
  147. package/examples/jsm/tsl/display/DotScreenNode.js +11 -11
  148. package/examples/jsm/tsl/display/FSR1Node.js +8 -4
  149. package/examples/jsm/tsl/display/GTAONode.js +199 -86
  150. package/examples/jsm/tsl/display/GaussianBlurNode.js +65 -52
  151. package/examples/jsm/tsl/display/GodraysNode.js +5 -2
  152. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +2 -2
  153. package/examples/jsm/tsl/display/LensflareNode.js +5 -2
  154. package/examples/jsm/tsl/display/OITPassNode.js +352 -0
  155. package/examples/jsm/tsl/display/OutlineNode.js +2 -0
  156. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +3 -2
  157. package/examples/jsm/tsl/display/RGBShiftNode.js +9 -9
  158. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +7 -4
  159. package/examples/jsm/tsl/display/RetroPassNode.js +1 -1
  160. package/examples/jsm/tsl/display/SMAANode.js +22 -61
  161. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -4
  162. package/examples/jsm/tsl/display/SSAONode.js +436 -0
  163. package/examples/jsm/tsl/display/SSGINode.js +5 -2
  164. package/examples/jsm/tsl/display/SSRNode.js +7 -2
  165. package/examples/jsm/tsl/display/SSSNode.js +5 -2
  166. package/examples/jsm/tsl/display/SharpenNode.js +5 -4
  167. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -3
  168. package/examples/jsm/tsl/display/StereoPassNode.js +1 -3
  169. package/examples/jsm/tsl/display/TAAUNode.js +22 -125
  170. package/examples/jsm/tsl/display/TRAANode.js +16 -142
  171. package/examples/jsm/tsl/display/TemporalReprojectNode.js +21 -15
  172. package/examples/jsm/tsl/display/depthAwareBlur.js +63 -0
  173. package/examples/jsm/tsl/display/hashBlur.js +3 -2
  174. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +38 -27
  175. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +136 -0
  176. package/examples/jsm/tsl/math/voronoiNoise.js +112 -0
  177. package/examples/jsm/tsl/shadows/TileShadowNode.js +4 -6
  178. package/examples/jsm/tsl/utils/Raymarching.js +5 -5
  179. package/examples/jsm/tsl/utils/SoftParticles.js +60 -0
  180. package/examples/jsm/tsl/utils/TAAUtils.js +195 -0
  181. package/examples/jsm/utils/BufferGeometryUtils.js +14 -14
  182. package/examples/jsm/utils/GaussianSplatUtils.js +229 -0
  183. package/examples/jsm/utils/WebGLTextureUtils.js +1 -1
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/WebGLXRFallback.js +2 -16
  186. package/examples/jsm/webxr/XRControllerModelFactory.js +16 -4
  187. package/package.json +9 -16
  188. package/src/Three.Core.js +2 -1
  189. package/src/Three.TSL.js +73 -43
  190. package/src/Three.WebGPU.Nodes.js +1 -0
  191. package/src/Three.WebGPU.js +1 -0
  192. package/src/animation/AnimationClip.js +15 -2
  193. package/src/animation/AnimationObjectGroup.js +18 -6
  194. package/src/animation/AnimationUtils.js +26 -0
  195. package/src/animation/KeyframeTrack.js +37 -0
  196. package/src/constants.js +23 -1
  197. package/src/core/BufferAttribute.js +3 -2
  198. package/src/core/BufferGeometry.js +1 -1
  199. package/src/core/InterleavedBuffer.js +5 -1
  200. package/src/core/Object3D.js +40 -12
  201. package/src/core/Raycaster.js +4 -0
  202. package/src/core/RenderTarget.js +99 -9
  203. package/src/core/RenderTarget3D.js +12 -8
  204. package/src/extras/Controls.js +0 -8
  205. package/src/extras/PMREMGenerator.js +99 -205
  206. package/src/geometries/TorusGeometry.js +1 -1
  207. package/src/helpers/ArrowHelper.js +2 -0
  208. package/src/helpers/AxesHelper.js +2 -0
  209. package/src/helpers/Box3Helper.js +2 -0
  210. package/src/helpers/BoxHelper.js +2 -0
  211. package/src/helpers/CameraHelper.js +2 -0
  212. package/src/helpers/DirectionalLightHelper.js +2 -0
  213. package/src/helpers/GridHelper.js +2 -0
  214. package/src/helpers/HemisphereLightHelper.js +2 -0
  215. package/src/helpers/PlaneHelper.js +2 -0
  216. package/src/helpers/PointLightHelper.js +2 -0
  217. package/src/helpers/PolarGridHelper.js +2 -0
  218. package/src/helpers/SkeletonHelper.js +2 -0
  219. package/src/helpers/SpotLightHelper.js +2 -0
  220. package/src/lights/Light.js +0 -10
  221. package/src/lights/LightShadow.js +43 -12
  222. package/src/lights/SpotLightShadow.js +18 -0
  223. package/src/loaders/BufferGeometryLoader.js +5 -0
  224. package/src/loaders/ImageBitmapLoader.js +3 -1
  225. package/src/loaders/ObjectLoader.js +8 -5
  226. package/src/materials/Material.js +80 -57
  227. package/src/materials/MeshPhysicalMaterial.js +32 -0
  228. package/src/materials/nodes/Line2NodeMaterial.js +17 -8
  229. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +42 -5
  230. package/src/materials/nodes/NodeMaterial.js +19 -13
  231. package/src/materials/nodes/PointsNodeMaterial.js +2 -1
  232. package/src/materials/nodes/manager/NodeMaterialObserver.js +282 -55
  233. package/src/math/Frustum.js +9 -0
  234. package/src/math/FrustumArray.js +1 -1
  235. package/src/math/MathUtils.js +5 -3
  236. package/src/math/Matrix4.js +2 -9
  237. package/src/math/Plane.js +30 -1
  238. package/src/math/Quaternion.js +0 -10
  239. package/src/math/Ray.js +95 -45
  240. package/src/math/Triangle.js +0 -2
  241. package/src/math/Vector3.js +2 -2
  242. package/src/math/Vector4.js +0 -4
  243. package/src/math/interpolants/BezierInterpolant.js +36 -23
  244. package/src/nodes/Nodes.js +2 -0
  245. package/src/nodes/TSL.js +11 -3
  246. package/src/nodes/accessors/Batch.js +85 -13
  247. package/src/nodes/accessors/BufferAttributeNode.js +1 -1
  248. package/src/nodes/accessors/BuiltinNode.js +1 -1
  249. package/src/nodes/accessors/Instance.js +19 -18
  250. package/src/nodes/accessors/MaterialNode.js +9 -0
  251. package/src/nodes/accessors/ModelNode.js +85 -9
  252. package/src/nodes/accessors/ReferenceBaseNode.js +1 -70
  253. package/src/nodes/accessors/ReferenceElementNode.js +72 -0
  254. package/src/nodes/accessors/ReferenceNode.js +1 -70
  255. package/src/nodes/accessors/Skinning.js +124 -12
  256. package/src/nodes/accessors/StorageTextureNode.js +7 -3
  257. package/src/nodes/accessors/Texture3DNode.js +1 -1
  258. package/src/nodes/accessors/TextureNode.js +51 -21
  259. package/src/nodes/accessors/TextureSizeNode.js +4 -2
  260. package/src/nodes/accessors/UniformArrayNode.js +30 -5
  261. package/src/nodes/code/CodeNode.js +1 -1
  262. package/src/nodes/code/FunctionNode.js +12 -2
  263. package/src/nodes/core/ArrayNode.js +2 -2
  264. package/src/nodes/core/ContextNode.js +57 -4
  265. package/src/nodes/core/IndexNode.js +69 -4
  266. package/src/nodes/core/InspectorNode.js +2 -2
  267. package/src/nodes/core/MRTNode.js +44 -2
  268. package/src/nodes/core/Node.js +6 -3
  269. package/src/nodes/core/NodeBuilder.js +65 -50
  270. package/src/nodes/core/NodeFrame.js +11 -3
  271. package/src/nodes/core/NodeUtils.js +88 -0
  272. package/src/nodes/core/PropertyNode.js +8 -0
  273. package/src/nodes/core/StackNode.js +0 -1
  274. package/src/nodes/core/StructNode.js +4 -3
  275. package/src/nodes/core/UniformGroupNode.js +3 -2
  276. package/src/nodes/core/UniformNode.js +26 -12
  277. package/src/nodes/core/VarNode.js +0 -1
  278. package/src/nodes/display/BumpMapNode.js +2 -2
  279. package/src/nodes/display/ColorAdjustment.js +1 -1
  280. package/src/nodes/display/PassNode.js +76 -15
  281. package/src/nodes/display/ScreenNode.js +22 -65
  282. package/src/nodes/fog/Fog.js +4 -4
  283. package/src/nodes/functions/BSDF/BRDF_GGX.js +6 -6
  284. package/src/nodes/functions/BSDF/BRDF_Sheen.js +1 -1
  285. package/src/nodes/functions/BSDF/DFGLUT.js +2 -1
  286. package/src/nodes/functions/BSDF/LTC.js +1 -1
  287. package/src/nodes/functions/PhongLightingModel.js +1 -1
  288. package/src/nodes/functions/PhysicalLightingModel.js +83 -25
  289. package/src/nodes/functions/ToonLightingModel.js +2 -2
  290. package/src/nodes/functions/material/getParallaxCorrectNormal.js +3 -3
  291. package/src/nodes/gpgpu/AtomicFunctionNode.js +64 -13
  292. package/src/nodes/gpgpu/BarrierNode.js +13 -4
  293. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  294. package/src/nodes/gpgpu/ComputeNode.js +20 -17
  295. package/src/nodes/gpgpu/SubgroupFunctionNode.js +165 -37
  296. package/src/nodes/gpgpu/WorkgroupInfoNode.js +44 -6
  297. package/src/nodes/lighting/EnvironmentNode.js +40 -4
  298. package/src/nodes/lighting/LightsNode.js +20 -4
  299. package/src/nodes/lighting/ShadowBaseNode.js +158 -1
  300. package/src/nodes/lighting/ShadowFilterNode.js +2 -106
  301. package/src/nodes/lighting/ShadowNode.js +22 -91
  302. package/src/nodes/materialx/{lib/mx_hsv.js → MaterialXColor.js} +3 -6
  303. package/src/nodes/materialx/{lib/mx_transform_color.js → MaterialXColorTransform.js} +3 -6
  304. package/src/nodes/materialx/MaterialXCore.js +37 -0
  305. package/src/nodes/materialx/MaterialXNodes.js +64 -72
  306. package/src/nodes/materialx/{lib/mx_noise.js → MaterialXNoise.js} +426 -197
  307. package/src/nodes/math/BitcountNode.js +24 -4
  308. package/src/nodes/math/MathNode.js +4 -4
  309. package/src/nodes/math/MathUtils.js +15 -4
  310. package/src/nodes/math/OperatorNode.js +2 -2
  311. package/src/nodes/math/PackFloatNode.js +29 -1
  312. package/src/nodes/math/Packed4x8IntegerNode.js +433 -0
  313. package/src/nodes/math/UnpackFloatNode.js +30 -2
  314. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  315. package/src/nodes/pmrem/PMREMNode.js +1 -1
  316. package/src/nodes/pmrem/PMREMUtils.js +31 -74
  317. package/src/nodes/shapes/Shapes.js +1 -1
  318. package/src/nodes/tsl/TSLCore.js +1 -31
  319. package/src/nodes/utils/EventNode.js +75 -0
  320. package/src/nodes/utils/LoopNode.js +54 -13
  321. package/src/nodes/utils/PostProcessingUtils.js +23 -2
  322. package/src/nodes/utils/RTTNode.js +97 -32
  323. package/src/nodes/utils/ReflectorNode.js +8 -4
  324. package/src/nodes/utils/RotateNode.js +85 -8
  325. package/src/nodes/utils/SpriteUtils.js +58 -23
  326. package/src/objects/BatchedMesh.js +6 -0
  327. package/src/objects/InstancedMesh.js +1 -1
  328. package/src/objects/LOD.js +1 -1
  329. package/src/objects/Line.js +12 -0
  330. package/src/objects/Mesh.js +12 -0
  331. package/src/objects/Points.js +12 -0
  332. package/src/objects/Sprite.js +12 -0
  333. package/src/renderers/WebGLRenderer.js +93 -27
  334. package/src/renderers/common/Animation.js +12 -2
  335. package/src/renderers/common/Backend.js +38 -10
  336. package/src/renderers/common/BindGroup.js +0 -1
  337. package/src/renderers/common/Bindings.js +50 -4
  338. package/src/renderers/common/BundleGroup.js +4 -0
  339. package/src/renderers/common/ClippingContext.js +11 -1
  340. package/src/renderers/common/Color4.js +9 -0
  341. package/src/renderers/common/Constants.js +0 -5
  342. package/src/renderers/common/DirectRenderPipeline.js +233 -0
  343. package/src/renderers/common/Geometries.js +24 -3
  344. package/src/renderers/common/Info.js +3 -3
  345. package/src/renderers/common/InspectorBase.js +37 -8
  346. package/src/renderers/common/Lighting.js +11 -4
  347. package/src/renderers/common/Pipelines.js +6 -4
  348. package/src/renderers/common/QuadMesh.js +16 -2
  349. package/src/renderers/common/RenderContext.js +8 -0
  350. package/src/renderers/common/RenderList.js +53 -19
  351. package/src/renderers/common/RenderLists.js +58 -11
  352. package/src/renderers/common/RenderObject.js +14 -0
  353. package/src/renderers/common/RenderObjects.js +14 -9
  354. package/src/renderers/common/RenderPipeline.js +52 -44
  355. package/src/renderers/common/Renderer.js +226 -55
  356. package/src/renderers/common/Storage3DTexture.js +16 -0
  357. package/src/renderers/common/Textures.js +3 -3
  358. package/src/renderers/common/XRManager.js +79 -72
  359. package/src/renderers/common/extras/PMREMGenerator.js +76 -144
  360. package/src/renderers/common/nodes/NodeManager.js +144 -6
  361. package/src/renderers/common/nodes/NodeStorageBuffer.js +3 -1
  362. package/src/renderers/common/nodes/NodeUniformBuffer.js +3 -1
  363. package/src/renderers/shaders/DFGLUTData.js +2 -1
  364. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +4 -2
  365. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +48 -0
  366. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +53 -4
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +20 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +20 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +61 -57
  371. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +82 -0
  372. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +9 -0
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +8 -1
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +15 -0
  375. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
  376. package/src/renderers/shaders/ShaderLib.js +1 -0
  377. package/src/renderers/shaders/UniformsLib.js +16 -0
  378. package/src/renderers/webgl/WebGLAnimation.js +2 -2
  379. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  380. package/src/renderers/webgl/WebGLLights.js +74 -4
  381. package/src/renderers/webgl/WebGLMaterials.js +6 -0
  382. package/src/renderers/webgl/WebGLOutput.js +36 -24
  383. package/src/renderers/webgl/WebGLProgram.js +3 -0
  384. package/src/renderers/webgl/WebGLPrograms.js +8 -0
  385. package/src/renderers/webgl/WebGLRenderLists.js +6 -10
  386. package/src/renderers/webgl/WebGLShadowMap.js +47 -44
  387. package/src/renderers/webgl/WebGLTextures.js +7 -7
  388. package/src/renderers/webgl-fallback/WebGLBackend.js +153 -45
  389. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +83 -29
  390. package/src/renderers/webgl-fallback/utils/WebGLState.js +163 -17
  391. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +32 -5
  392. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +11 -4
  393. package/src/renderers/webgpu/WebGPUBackend.js +513 -145
  394. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -20
  395. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -1
  396. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -12
  397. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +24 -14
  398. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +80 -14
  399. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -7
  400. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +9 -3
  401. package/src/renderers/webgpu/utils/WebGPUUtils.js +16 -4
  402. package/src/renderers/webxr/WebXRManager.js +25 -2
  403. package/src/scenes/Scene.js +3 -3
  404. package/src/textures/CompressedArrayTexture.js +16 -0
  405. package/src/textures/Data3DTexture.js +16 -0
  406. package/src/textures/DataArrayTexture.js +16 -0
  407. package/src/textures/DepthTexture.js +3 -3
  408. package/src/textures/Texture.js +3 -3
  409. package/src/textures/{Source.js → TextureSource.js} +39 -8
  410. package/build/three.core.min.js +0 -6
  411. package/build/three.module.min.js +0 -6
  412. package/build/three.tsl.min.js +0 -6
  413. package/build/three.webgpu.min.js +0 -6
  414. package/build/three.webgpu.nodes.min.js +0 -6
  415. package/examples/jsm/libs/ecsy.module.js +0 -1792
  416. package/examples/jsm/loaders/LottieLoader.js +0 -130
  417. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +0 -52
@@ -1,7 +1,123 @@
1
1
  import Node from '../core/Node.js';
2
+ import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
3
+ import ChainMap from '../../renderers/common/ChainMap.js';
4
+ import { getDataFromObject } from '../core/NodeUtils.js';
2
5
  import { NodeUpdateType } from '../core/constants.js';
3
- import { property } from '../tsl/TSLBase.js';
6
+ import { property, vec4 } from '../tsl/TSLBase.js';
4
7
  import { positionWorld } from '../accessors/Position.js';
8
+ import { NoBlending, VSMShadowMap } from '../../constants.js';
9
+
10
+ const _shadowMaterialLib = /*@__PURE__*/ new WeakMap();
11
+ const _shadowRenderObjectLibrary = /*@__PURE__*/ new ChainMap();
12
+ const _shadowRenderObjectKeys = [];
13
+
14
+ /**
15
+ * Retrieves or creates a shadow material for the given light source.
16
+ *
17
+ * This function checks if a shadow material already exists for the provided light.
18
+ * If not, it creates a new `NodeMaterial` configured for shadow rendering and stores it
19
+ * in the `shadowMaterialLib` for future use.
20
+ *
21
+ * @private
22
+ * @function
23
+ * @param {Light} light - The light source for which the shadow material is needed.
24
+ * If the light is a point light, a depth node is calculated
25
+ * using the linear shadow distance.
26
+ * @returns {NodeMaterial} The shadow material associated with the given light.
27
+ */
28
+ const _getShadowMaterial = ( light ) => {
29
+
30
+ let material = _shadowMaterialLib.get( light );
31
+
32
+ if ( material === undefined ) {
33
+
34
+ material = new NodeMaterial();
35
+ material.colorNode = vec4( 0, 0, 0, 1 );
36
+ material.isShadowPassMaterial = true; // Use to avoid other overrideMaterial override material.colorNode unintentionally when using material.shadowNode
37
+ material.name = 'ShadowMaterial';
38
+ material.blending = NoBlending;
39
+ material.fog = false;
40
+
41
+ _shadowMaterialLib.set( light, material );
42
+
43
+ }
44
+
45
+ return material;
46
+
47
+ };
48
+
49
+ /**
50
+ * Disposes the shadow material for the given light source.
51
+ *
52
+ * @private
53
+ * @param {Light} light - The light source.
54
+ */
55
+ const _disposeShadowMaterial = ( light ) => {
56
+
57
+ const material = _shadowMaterialLib.get( light );
58
+
59
+ if ( material !== undefined ) {
60
+
61
+ material.dispose();
62
+ _shadowMaterialLib.delete( light );
63
+
64
+ }
65
+
66
+ };
67
+
68
+ /**
69
+ * Creates a function to render shadow objects in a scene.
70
+ *
71
+ * @private
72
+ * @function
73
+ * @param {Renderer} renderer - The renderer.
74
+ * @param {LightShadow} shadow - The light shadow object containing shadow properties.
75
+ * @param {number} shadowType - The type of shadow map (e.g., BasicShadowMap).
76
+ * @param {boolean} useVelocity - Whether to use velocity data for rendering.
77
+ * @return {shadowRenderObjectFunction} A function that renders shadow objects.
78
+ */
79
+ const _getShadowRenderObjectFunction = ( renderer, shadow, shadowType, useVelocity ) => {
80
+
81
+ _shadowRenderObjectKeys[ 0 ] = renderer;
82
+ _shadowRenderObjectKeys[ 1 ] = shadow;
83
+
84
+ let renderObjectFunction = _shadowRenderObjectLibrary.get( _shadowRenderObjectKeys );
85
+
86
+ if ( renderObjectFunction === undefined || ( renderObjectFunction.shadowType !== shadowType || renderObjectFunction.useVelocity !== useVelocity ) ) {
87
+
88
+ renderObjectFunction = ( object, scene, _camera, geometry, material, group, lightsNode, clippingContext, passId ) => {
89
+
90
+ if ( object.castShadow === true || ( object.receiveShadow && shadowType === VSMShadowMap ) ) {
91
+
92
+ if ( useVelocity ) {
93
+
94
+ getDataFromObject( object ).useVelocity = true;
95
+
96
+ }
97
+
98
+ object.onBeforeShadow( renderer, object, _camera, shadow.camera, geometry, scene.overrideMaterial, group );
99
+
100
+ renderer.renderObject( object, scene, _camera, geometry, material, group, lightsNode, clippingContext, passId );
101
+
102
+ object.onAfterShadow( renderer, object, _camera, shadow.camera, geometry, scene.overrideMaterial, group );
103
+
104
+ }
105
+
106
+ };
107
+
108
+ renderObjectFunction.shadowType = shadowType;
109
+ renderObjectFunction.useVelocity = useVelocity;
110
+
111
+ _shadowRenderObjectLibrary.set( _shadowRenderObjectKeys, renderObjectFunction );
112
+
113
+ }
114
+
115
+ _shadowRenderObjectKeys[ 0 ] = null;
116
+ _shadowRenderObjectKeys[ 1 ] = null;
117
+
118
+ return renderObjectFunction;
119
+
120
+ };
5
121
 
6
122
  /**
7
123
  * Base class for all shadow nodes.
@@ -55,6 +171,47 @@ class ShadowBaseNode extends Node {
55
171
 
56
172
  }
57
173
 
174
+ /**
175
+ * Retrieves or creates a shadow material for the shadow casting light source.
176
+ *
177
+ * This method checks if a shadow material already exists for the provided light in the internal library.
178
+ * If not, it creates a new `NodeMaterial` configured for shadow rendering and stores it for future use.
179
+ *
180
+ * @return {NodeMaterial} The shadow material associated with the given light.
181
+ */
182
+ getShadowMaterial() {
183
+
184
+ return _getShadowMaterial( this.light );
185
+
186
+ }
187
+
188
+ /**
189
+ * Disposes the shadow material for the shadow casting light source.
190
+ */
191
+ disposeShadowMaterial() {
192
+
193
+ _disposeShadowMaterial( this.light );
194
+
195
+ }
196
+
197
+ /**
198
+ * Returns a function to render shadow objects in a scene for the given light shadow and renderer.
199
+ *
200
+ * @param {Renderer} renderer - The renderer.
201
+ * @param {LightShadow} [shadow=this.light.shadow] - The light shadow object containing shadow properties.
202
+ * @return {Function} A function that renders shadow objects.
203
+ */
204
+ getShadowRenderObjectFunction( renderer, shadow = this.light.shadow ) {
205
+
206
+ const shadowType = renderer.shadowMap.type;
207
+
208
+ const currentMRT = renderer.getMRT();
209
+ const useVelocity = currentMRT ? currentMRT.has( 'velocity' ) : false;
210
+
211
+ return _getShadowRenderObjectFunction( renderer, shadow, shadowType, useVelocity );
212
+
213
+ }
214
+
58
215
  /**
59
216
  * Setups the shadow position node which is by default the predefined TSL node object `shadowPositionWorld`.
60
217
  *
@@ -1,15 +1,11 @@
1
- import { float, vec2, vec4, If, Fn, ivec2 } from '../tsl/TSLBase.js';
1
+ import { float, vec2, If, Fn } from '../tsl/TSLBase.js';
2
2
  import { reference } from '../accessors/ReferenceNode.js';
3
3
  import { texture } from '../accessors/TextureNode.js';
4
- import { mix, fract, step, max, clamp } from '../math/MathNode.js';
4
+ import { step, max, clamp } from '../math/MathNode.js';
5
5
  import { add, sub } from '../math/OperatorNode.js';
6
6
  import { renderGroup } from '../core/UniformGroupNode.js';
7
- import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
8
7
  import { screenCoordinate } from '../display/ScreenNode.js';
9
8
  import { interleavedGradientNoise, vogelDiskSample } from '../utils/PostProcessingUtils.js';
10
- import { NoBlending } from '../../constants.js';
11
-
12
- const shadowMaterialLib = /*@__PURE__*/ new WeakMap();
13
9
 
14
10
  /**
15
11
  * A shadow filtering function performing basic filtering. This is in fact an unfiltered version of the shadow map
@@ -85,54 +81,6 @@ export const PCFShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord,
85
81
 
86
82
  } );
87
83
 
88
- /**
89
- * A shadow filtering function performing PCF soft filtering.
90
- *
91
- * @method
92
- * @param {Object} inputs - The input parameter object.
93
- * @param {DepthTexture} inputs.depthTexture - A reference to the shadow map's texture data.
94
- * @param {Node<vec3>} inputs.shadowCoord - The shadow coordinates.
95
- * @param {LightShadow} inputs.shadow - The light shadow.
96
- * @return {Node<float>} The filtering result.
97
- */
98
- export const PCFSoftShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord, shadow, depthLayer } ) => {
99
-
100
- const mapSize = reference( 'mapSize', 'vec2', shadow ).setGroup( renderGroup );
101
-
102
- const texelSize = vec2( 1 ).div( mapSize );
103
-
104
- const uv = shadowCoord.xy;
105
- const f = fract( uv.mul( mapSize ).add( 0.5 ) ).toConst();
106
- uv.subAssign( f.sub( 0.5 ).mul( texelSize ) );
107
-
108
- const gatherCompare = ( offset ) => {
109
-
110
- let t = texture( depthTexture, uv ).offset( offset ).gather();
111
-
112
- if ( depthTexture.isArrayTexture ) {
113
-
114
- t = t.depth( depthLayer );
115
-
116
- }
117
-
118
- return t.compare( shadowCoord.z );
119
-
120
- };
121
-
122
- const c1 = gatherCompare( ivec2( - 1, 1 ) ).toConst();
123
- const c2 = gatherCompare( ivec2( 1, 1 ) ).toConst();
124
- const c3 = gatherCompare( ivec2( - 1, - 1 ) ).toConst();
125
- const c4 = gatherCompare( ivec2( 1, - 1 ) ).toConst();
126
-
127
- return add(
128
- mix( c1.x, c2.y, f.x ).add( c1.y ).add( c2.x ).mul( f.y ),
129
- mix( c1.w, c2.z, f.x ).add( c1.z ).add( c2.w ),
130
- mix( c3.x, c4.y, f.x ).add( c3.y ).add( c4.x ),
131
- mix( c3.w, c4.z, f.x ).add( c3.z ).add( c4.w ).mul( f.y.oneMinus() )
132
- ).mul( 1 / 9 );
133
-
134
- } );
135
-
136
84
  /**
137
85
  * A shadow filtering function performing VSM filtering.
138
86
  *
@@ -179,55 +127,3 @@ export const VSMShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord,
179
127
 
180
128
  } );
181
129
 
182
- /**
183
- * Retrieves or creates a shadow material for the given light source.
184
- *
185
- * This function checks if a shadow material already exists for the provided light.
186
- * If not, it creates a new `NodeMaterial` configured for shadow rendering and stores it
187
- * in the `shadowMaterialLib` for future use.
188
- *
189
- * @tsl
190
- * @function
191
- * @param {Light} light - The light source for which the shadow material is needed.
192
- * If the light is a point light, a depth node is calculated
193
- * using the linear shadow distance.
194
- * @returns {NodeMaterial} The shadow material associated with the given light.
195
- */
196
- export const getShadowMaterial = ( light ) => {
197
-
198
- let material = shadowMaterialLib.get( light );
199
-
200
- if ( material === undefined ) {
201
-
202
- material = new NodeMaterial();
203
- material.colorNode = vec4( 0, 0, 0, 1 );
204
- material.isShadowPassMaterial = true; // Use to avoid other overrideMaterial override material.colorNode unintentionally when using material.shadowNode
205
- material.name = 'ShadowMaterial';
206
- material.blending = NoBlending;
207
- material.fog = false;
208
-
209
- shadowMaterialLib.set( light, material );
210
-
211
- }
212
-
213
- return material;
214
-
215
- };
216
-
217
- /**
218
- * Disposes the shadow material for the given light source.
219
- *
220
- * @param {Light} light - The light source.
221
- */
222
- export const disposeShadowMaterial = ( light ) => {
223
-
224
- const material = shadowMaterialLib.get( light );
225
-
226
- if ( material !== undefined ) {
227
-
228
- material.dispose();
229
- shadowMaterialLib.delete( light );
230
-
231
- }
232
-
233
- };
@@ -1,6 +1,5 @@
1
1
  import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
2
2
  import QuadMesh from '../../renderers/common/QuadMesh.js';
3
- import ChainMap from '../../renderers/common/ChainMap.js';
4
3
  import ShadowBaseNode, { shadowPositionWorld } from './ShadowBaseNode.js';
5
4
  import { float, vec2, vec3, vec4, int, Fn } from '../tsl/TSLCore.js';
6
5
  import { reference } from '../accessors/ReferenceNode.js';
@@ -12,80 +11,20 @@ import { add } from '../math/OperatorNode.js';
12
11
  import { DepthTexture } from '../../textures/DepthTexture.js';
13
12
  import { Loop } from '../utils/LoopNode.js';
14
13
  import { screenCoordinate } from '../display/ScreenNode.js';
15
- import { Compatibility, GreaterEqualCompare, HalfFloatType, LessEqualCompare, LinearFilter, NearestFilter, PCFShadowMap, PCFSoftShadowMap, RGFormat, VSMShadowMap } from '../../constants.js';
14
+ import { Compatibility, GreaterEqualCompare, HalfFloatType, LessEqualCompare, LinearFilter, NearestFilter, PCFShadowMap, RGFormat, VSMShadowMap } from '../../constants.js';
16
15
  import { renderGroup } from '../core/UniformGroupNode.js';
17
16
  import { viewZToLogarithmicDepth, perspectiveDepthToViewZ, orthographicDepthToViewZ, viewZToOrthographicDepth } from '../display/ViewportDepthNode.js';
18
17
  import { lightShadowMatrix } from '../accessors/Lights.js';
19
18
  import { resetRendererAndSceneState, restoreRendererAndSceneState } from '../../renderers/common/RendererUtils.js';
20
- import { getDataFromObject } from '../core/NodeUtils.js';
21
- import { getShadowMaterial, disposeShadowMaterial, BasicShadowFilter, PCFShadowFilter, PCFSoftShadowFilter, VSMShadowFilter } from './ShadowFilterNode.js';
19
+ import { BasicShadowFilter, PCFShadowFilter, VSMShadowFilter } from './ShadowFilterNode.js';
22
20
  import { positionLocal } from '../accessors/Position.js';
23
21
  import { uniform } from '../core/UniformNode.js';
24
22
  import { equirectDirection } from '../utils/EquirectUV.js';
25
-
23
+ import { context } from '../core/ContextNode.js';
26
24
  // WITH_GENESYS
27
25
  import { ProfilerService } from '../../profiler/ProfilerService.js';
28
26
  // !WITH_GENESYS
29
27
 
30
- //
31
-
32
- const _shadowRenderObjectLibrary = /*@__PURE__*/ new ChainMap();
33
- const _shadowRenderObjectKeys = [];
34
-
35
- /**
36
- * Creates a function to render shadow objects in a scene.
37
- *
38
- * @tsl
39
- * @function
40
- * @param {Renderer} renderer - The renderer.
41
- * @param {LightShadow} shadow - The light shadow object containing shadow properties.
42
- * @param {number} shadowType - The type of shadow map (e.g., BasicShadowMap).
43
- * @param {boolean} useVelocity - Whether to use velocity data for rendering.
44
- * @return {shadowRenderObjectFunction} A function that renders shadow objects.
45
- */
46
- export const getShadowRenderObjectFunction = ( renderer, shadow, shadowType, useVelocity ) => {
47
-
48
- _shadowRenderObjectKeys[ 0 ] = renderer;
49
- _shadowRenderObjectKeys[ 1 ] = shadow;
50
-
51
- let renderObjectFunction = _shadowRenderObjectLibrary.get( _shadowRenderObjectKeys );
52
-
53
- if ( renderObjectFunction === undefined || ( renderObjectFunction.shadowType !== shadowType || renderObjectFunction.useVelocity !== useVelocity ) ) {
54
-
55
- renderObjectFunction = ( object, scene, _camera, geometry, material, group, lightsNode, clippingContext, passId ) => {
56
-
57
- if ( object.castShadow === true || ( object.receiveShadow && shadowType === VSMShadowMap ) ) {
58
-
59
- if ( useVelocity ) {
60
-
61
- getDataFromObject( object ).useVelocity = true;
62
-
63
- }
64
-
65
- object.onBeforeShadow( renderer, object, _camera, shadow.camera, geometry, scene.overrideMaterial, group );
66
-
67
- renderer.renderObject( object, scene, _camera, geometry, material, group, lightsNode, clippingContext, passId );
68
-
69
- object.onAfterShadow( renderer, object, _camera, shadow.camera, geometry, scene.overrideMaterial, group );
70
-
71
- }
72
-
73
- };
74
-
75
- renderObjectFunction.shadowType = shadowType;
76
- renderObjectFunction.useVelocity = useVelocity;
77
-
78
- _shadowRenderObjectLibrary.set( _shadowRenderObjectKeys, renderObjectFunction );
79
-
80
- }
81
-
82
- _shadowRenderObjectKeys[ 0 ] = null;
83
- _shadowRenderObjectKeys[ 1 ] = null;
84
-
85
- return renderObjectFunction;
86
-
87
- };
88
-
89
28
  /**
90
29
  * Represents the shader code for the first VSM render pass.
91
30
  *
@@ -178,7 +117,7 @@ const VSMPassHorizontal = /*@__PURE__*/ Fn( ( { samples, radius, size, shadowPas
178
117
 
179
118
  } );
180
119
 
181
- const _shadowFilterLib = [ BasicShadowFilter, PCFShadowFilter, PCFSoftShadowFilter, VSMShadowFilter ];
120
+ const _shadowFilterLib = [ BasicShadowFilter, PCFShadowFilter, null /* PCFSoftShadowMap, removed */, VSMShadowFilter ];
182
121
 
183
122
  //
184
123
 
@@ -427,7 +366,7 @@ class ShadowNode extends ShadowBaseNode {
427
366
  const shadowMapType = renderer.shadowMap.type;
428
367
  const hasTextureCompare = renderer.hasCompatibility( Compatibility.TEXTURE_COMPARE );
429
368
 
430
- if ( ( shadowMapType === PCFShadowMap || shadowMapType === PCFSoftShadowMap ) && hasTextureCompare ) {
369
+ if ( shadowMapType === PCFShadowMap && hasTextureCompare ) {
431
370
 
432
371
  depthTexture.minFilter = LinearFilter;
433
372
  depthTexture.magFilter = LinearFilter;
@@ -496,12 +435,16 @@ class ShadowNode extends ShadowBaseNode {
496
435
  const radius = reference( 'radius', 'float', shadow ).setGroup( renderGroup );
497
436
  const size = reference( 'mapSize', 'vec2', shadow ).setGroup( renderGroup );
498
437
 
438
+ const sharedContext = context( builder.getSharedContext() );
439
+
499
440
  let material = this.vsmMaterialVertical || ( this.vsmMaterialVertical = new NodeMaterial() );
500
- material.fragmentNode = VSMPassVertical( { samples, radius, size, shadowPass: shadowPassVertical, depthLayer: this.depthLayer } ).context( builder.getSharedContext() );
441
+ material.contextNode = sharedContext;
442
+ material.fragmentNode = VSMPassVertical( { samples, radius, size, shadowPass: shadowPassVertical, depthLayer: this.depthLayer } );
501
443
  material.name = 'VSMVertical';
502
444
 
503
445
  material = this.vsmMaterialHorizontal || ( this.vsmMaterialHorizontal = new NodeMaterial() );
504
- material.fragmentNode = VSMPassHorizontal( { samples, radius, size, shadowPass: shadowPassHorizontal, depthLayer: this.depthLayer } ).context( builder.getSharedContext() );
446
+ material.contextNode = sharedContext;
447
+ material.fragmentNode = VSMPassHorizontal( { samples, radius, size, shadowPass: shadowPassHorizontal, depthLayer: this.depthLayer } );
505
448
  material.name = 'VSMHorizontal';
506
449
 
507
450
  }
@@ -736,11 +679,11 @@ class ShadowNode extends ShadowBaseNode {
736
679
  */
737
680
  updateShadow( frame ) {
738
681
 
739
- const { shadowMap, light, shadow } = this;
682
+ const { shadowMap, shadow } = this;
740
683
  const { renderer, scene, camera } = frame;
741
684
 
742
685
  // WITH_GENESYS
743
- const lightLabel = `shadowMap.render.light (${light.name || light.type})`;
686
+ const lightLabel = `shadowMap.render.light (${this.light.name || this.light.type})`;
744
687
  ProfilerService.begin( lightLabel );
745
688
  // !WITH_GENESYS
746
689
 
@@ -759,17 +702,14 @@ class ShadowNode extends ShadowBaseNode {
759
702
 
760
703
  const currentRenderObjectFunction = renderer.getRenderObjectFunction();
761
704
 
762
- const currentMRT = renderer.getMRT();
763
- const useVelocity = currentMRT ? currentMRT.has( 'velocity' ) : false;
764
-
765
705
  // WITH_GENESYS
766
706
  ProfilerService.begin( 'shadowMap.render.setupPass' );
767
707
  // !WITH_GENESYS
768
708
  _rendererState = resetRendererAndSceneState( renderer, scene, _rendererState );
769
709
 
770
- scene.overrideMaterial = getShadowMaterial( light );
710
+ scene.overrideMaterial = this.getShadowMaterial();
771
711
 
772
- renderer.setRenderObjectFunction( getShadowRenderObjectFunction( renderer, shadow, shadowType, useVelocity ) );
712
+ renderer.setRenderObjectFunction( this.getShadowRenderObjectFunction( renderer, this.shadow || this.light.shadow ) );
773
713
 
774
714
  renderer.setClearColor( 0x000000, 0 );
775
715
 
@@ -861,7 +801,7 @@ class ShadowNode extends ShadowBaseNode {
861
801
 
862
802
  this._currentShadowType = null;
863
803
 
864
- disposeShadowMaterial( this.light );
804
+ this.disposeShadowMaterial();
865
805
 
866
806
  if ( this.shadowMap ) {
867
807
 
@@ -899,19 +839,23 @@ class ShadowNode extends ShadowBaseNode {
899
839
  */
900
840
  updateBefore( frame ) {
901
841
 
842
+ // do not render shadow maps during precompilation
843
+
844
+ if ( frame.renderer._isPreCompiling === true ) return;
845
+
902
846
  const { shadow } = this;
903
847
 
904
848
  let needsUpdate = shadow.needsUpdate || shadow.autoUpdate;
905
849
 
906
850
  if ( needsUpdate ) {
907
851
 
908
- if ( this._cameraFrameId[ frame.camera ] === frame.frameId ) {
852
+ if ( this._cameraFrameId.get( frame.camera ) === frame.frameId ) {
909
853
 
910
854
  needsUpdate = false;
911
855
 
912
856
  }
913
857
 
914
- this._cameraFrameId[ frame.camera ] = frame.frameId;
858
+ this._cameraFrameId.set( frame.camera, frame.frameId );
915
859
 
916
860
  }
917
861
 
@@ -933,19 +877,6 @@ class ShadowNode extends ShadowBaseNode {
933
877
 
934
878
  export default ShadowNode;
935
879
 
936
- /**
937
- * Shadow Render Object Function.
938
- *
939
- * @function shadowRenderObjectFunction
940
- * @param {Object3D} object - The 3D object to render.
941
- * @param {Scene} scene - The scene containing the object.
942
- * @param {Camera} _camera - The camera used for rendering.
943
- * @param {BufferGeometry} geometry - The geometry of the object.
944
- * @param {Material} material - The material of the object.
945
- * @param {Group} group - The group the object belongs to.
946
- * @param {...any} params - Additional parameters for rendering.
947
- */
948
-
949
880
  /**
950
881
  * TSL function for creating an instance of `ShadowNode`.
951
882
  *
@@ -1,9 +1,6 @@
1
- // Three.js Transpiler
2
- // https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/libraries/stdlib/genglsl/lib/mx_hsv.glsl
3
-
4
- import { int, float, vec3, If, Fn } from '../../tsl/TSLBase.js';
5
- import { add } from '../../math/OperatorNode.js';
6
- import { floor, trunc, max, min } from '../../math/MathNode.js';
1
+ import { int, float, vec3, If, Fn } from '../tsl/TSLBase.js';
2
+ import { add } from '../math/OperatorNode.js';
3
+ import { floor, trunc, max, min } from '../math/MathNode.js';
7
4
 
8
5
  export const mx_hsvtorgb = /*@__PURE__*/ Fn( ( [ hsv ] ) => {
9
6
 
@@ -1,9 +1,6 @@
1
- // Three.js Transpiler
2
- // https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/libraries/stdlib/genglsl/lib/mx_transform_color.glsl
3
-
4
- import { bvec3, vec3, Fn } from '../../tsl/TSLBase.js';
5
- import { greaterThan } from '../../math/OperatorNode.js';
6
- import { max, pow, mix } from '../../math/MathNode.js';
1
+ import { bvec3, vec3, Fn } from '../tsl/TSLBase.js';
2
+ import { greaterThan } from '../math/OperatorNode.js';
3
+ import { max, pow, mix } from '../math/MathNode.js';
7
4
 
8
5
  export const mx_srgb_texture_to_lin_rec709 = /*@__PURE__*/ Fn( ( [ color_immutable ] ) => {
9
6
 
@@ -0,0 +1,37 @@
1
+ import { float, vec2, vec3, add, sub, mul, sin, cos, normalize } from '../tsl/TSLBase.js';
2
+
3
+ export const mx_rotate2d = ( input, amount = 0 ) => {
4
+
5
+ input = vec2( input );
6
+ amount = float( amount );
7
+
8
+ const rotationRadians = mul( amount, Math.PI / 180.0 );
9
+ const sa = sin( rotationRadians );
10
+ const ca = cos( rotationRadians );
11
+ const x = input.x;
12
+ const y = input.y;
13
+
14
+ return vec2( add( mul( ca, x ), mul( sa, y ) ), sub( mul( ca, y ), mul( sa, x ) ) );
15
+
16
+ };
17
+
18
+ export const mx_rotate3d = ( input, amount = 0, axis = vec3( 0, 1, 0 ) ) => {
19
+
20
+ input = vec3( input );
21
+ amount = float( amount );
22
+ axis = vec3( axis );
23
+
24
+ const normalizedAxis = normalize( axis );
25
+ const rotationRadians = mul( amount, Math.PI / 180.0 );
26
+ const s = sin( rotationRadians );
27
+ const c = cos( rotationRadians );
28
+ const oc = sub( 1, c );
29
+
30
+ // based on https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula
31
+ // but the code in the Wikipedia article is for v' = M * v, where as
32
+ // MaterialX is v' = v * M, thus the order of parameters into the first cross are reversed
33
+ return input.mul( c )
34
+ .add( input.cross( normalizedAxis ).mul( s ) )
35
+ .add( normalizedAxis.mul( normalizedAxis.dot( input ).mul( oc ) ) );
36
+
37
+ };