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
@@ -0,0 +1,615 @@
1
+ import { Frustum, Matrix4, RenderTarget, Vector2, RendererUtils, QuadMesh, TempNode, NodeMaterial, NodeUpdateType, Vector3, Plane } from 'three/webgpu';
2
+ import { cubeTexture, clamp, viewZToPerspectiveDepth, logarithmicDepthToViewZ, float, Loop, max, Fn, passTexture, uv, dot, uniformArray, If, getViewPosition, uniform, vec4, add, interleavedGradientNoise, screenCoordinate, round, mul, uint, mix, exp, vec3, distance, pow, reference, lightPosition, vec2, bool, texture, perspectiveDepthToViewZ, lightShadowMatrix } from 'three/tsl';
3
+
4
+ const _quadMesh = /*@__PURE__*/ new QuadMesh();
5
+ const _size = /*@__PURE__*/ new Vector2();
6
+
7
+ const _DIRECTIONS = [
8
+ new Vector3( 1, 0, 0 ),
9
+ new Vector3( - 1, 0, 0 ),
10
+ new Vector3( 0, 1, 0 ),
11
+ new Vector3( 0, - 1, 0 ),
12
+ new Vector3( 0, 0, 1 ),
13
+ new Vector3( 0, 0, - 1 ),
14
+ ];
15
+
16
+ const _PLANES = _DIRECTIONS.map( () => new Plane() );
17
+ const _SCRATCH_VECTOR = new Vector3();
18
+ const _SCRATCH_MAT4 = new Matrix4();
19
+ const _SCRATCH_FRUSTUM = new Frustum();
20
+
21
+ let _rendererState;
22
+
23
+ /**
24
+ * Post-Processing node for apply Screen-space raymarched godrays to a scene.
25
+ *
26
+ * After the godrays have been computed, it's recommened to apply a Bilateral
27
+ * Blur to the result to mitigate raymarching and noise artifacts.
28
+ *
29
+ * The composite with the scene pass is ideally done with `depthAwareBlend()`,
30
+ * which mitigates aliasing and light leaking.
31
+ *
32
+ * ```js
33
+ * const godraysPass = godrays( scenePassDepth, camera, light );
34
+ *
35
+ * const blurPass = bilateralBlur( godraysPassColor ); // optional blur
36
+ *
37
+ * const outputBlurred = depthAwareBlend( scenePassColor, blurPassColor, scenePassDepth, camera, { blendColor, edgeRadius, edgeStrength } ); // composite
38
+ * ```
39
+ *
40
+ * Limitations:
41
+ *
42
+ * - Only point and directional lights are currently supported.
43
+ * - The effect requires a full shadow setup. Meaning shadows must be enabled in the renderer,
44
+ * 3D objects must cast and receive shadows and the main light must cast shadows.
45
+ *
46
+ * Reference: This Node is a part of [three-good-godrays](https://github.com/Ameobea/three-good-godrays).
47
+ *
48
+ * @augments TempNode
49
+ * @three_import import { godrays } from 'three/addons/tsl/display/GodraysNode.js';
50
+ */
51
+ class GodraysNode extends TempNode {
52
+
53
+ static get type() {
54
+
55
+ return 'GodraysNode';
56
+
57
+ }
58
+
59
+ /**
60
+ * Constructs a new Godrays node.
61
+ *
62
+ * @param {TextureNode} depthNode - A texture node that represents the scene's depth.
63
+ * @param {Camera} camera - The camera the scene is rendered with.
64
+ * @param {(DirectionalLight|PointLight)} light - The light the godrays are rendered for.
65
+ */
66
+ constructor( depthNode, camera, light ) {
67
+
68
+ super( 'vec4' );
69
+
70
+ /**
71
+ * A node that represents the beauty pass's depth.
72
+ *
73
+ * @type {TextureNode}
74
+ */
75
+ this.depthNode = depthNode;
76
+
77
+ /**
78
+ * The number of raymarching steps
79
+ *
80
+ * @type {UniformNode<uint>}
81
+ * @default 60
82
+ */
83
+ this.raymarchSteps = uniform( uint( 60 ) );
84
+
85
+ /**
86
+ * The rate of accumulation for the godrays. Higher values roughly equate to more humid air/denser fog.
87
+ *
88
+ * @type {UniformNode<float>}
89
+ * @default 0.7
90
+ */
91
+ this.density = uniform( float( 0.7 ) );
92
+
93
+ /**
94
+ * The maximum density of the godrays. Limits the maximum brightness of the godrays.
95
+ *
96
+ * @type {UniformNode<float>}
97
+ * @default 0.5
98
+ */
99
+ this.maxDensity = uniform( float( 0.5 ) );
100
+
101
+ /**
102
+ * Higher values decrease the accumulation of godrays the further away they are from the light source.
103
+ *
104
+ * @type {UniformNode<float>}
105
+ * @default 2
106
+ */
107
+ this.distanceAttenuation = uniform( float( 2 ) );
108
+
109
+ /**
110
+ * The resolution scale.
111
+ *
112
+ * @type {number}
113
+ */
114
+ this.resolutionScale = 0.5;
115
+
116
+ /**
117
+ * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders
118
+ * its effect once per frame in `updateBefore()`.
119
+ *
120
+ * @type {string}
121
+ * @default 'frame'
122
+ */
123
+ this.updateBeforeType = NodeUpdateType.FRAME;
124
+
125
+ // private uniforms
126
+
127
+ /**
128
+ * Represents the world matrix of the scene's camera.
129
+ *
130
+ * @private
131
+ * @type {UniformNode<mat4>}
132
+ */
133
+ this._cameraMatrixWorld = uniform( camera.matrixWorld );
134
+
135
+ /**
136
+ * Represents the inverse projection matrix of the scene's camera.
137
+ *
138
+ * @private
139
+ * @type {UniformNode<mat4>}
140
+ */
141
+ this._cameraProjectionMatrixInverse = uniform( camera.projectionMatrixInverse );
142
+
143
+ /**
144
+ * Represents the inverse projection matrix of the scene's camera.
145
+ *
146
+ * @private
147
+ * @type {UniformNode<mat4>}
148
+ */
149
+ this._premultipliedLightCameraMatrix = uniform( new Matrix4() );
150
+
151
+ /**
152
+ * Represents the world position of the scene's camera.
153
+ *
154
+ * @private
155
+ * @type {UniformNode<mat4>}
156
+ */
157
+ this._cameraPosition = uniform( new Vector3() );
158
+
159
+ /**
160
+ * Represents the near value of the scene's camera.
161
+ *
162
+ * @private
163
+ * @type {ReferenceNode<float>}
164
+ */
165
+ this._cameraNear = reference( 'near', 'float', camera );
166
+
167
+ /**
168
+ * Represents the far value of the scene's camera.
169
+ *
170
+ * @private
171
+ * @type {ReferenceNode<float>}
172
+ */
173
+ this._cameraFar = reference( 'far', 'float', camera );
174
+
175
+ /**
176
+ * The near value of the shadow camera.
177
+ *
178
+ * @private
179
+ * @type {ReferenceNode<float>}
180
+ */
181
+ this._shadowCameraNear = reference( 'near', 'float', light.shadow.camera );
182
+
183
+ /**
184
+ * The far value of the shadow camera.
185
+ *
186
+ * @private
187
+ * @type {ReferenceNode<float>}
188
+ */
189
+ this._shadowCameraFar = reference( 'far', 'float', light.shadow.camera );
190
+
191
+ this._fNormals = uniformArray( _DIRECTIONS.map( () => new Vector3() ) );
192
+ this._fConstants = uniformArray( _DIRECTIONS.map( () => 0 ) );
193
+
194
+ /**
195
+ * The light the godrays are rendered for.
196
+ *
197
+ * @private
198
+ * @type {(DirectionalLight|PointLight)}
199
+ */
200
+ this._light = light;
201
+
202
+ /**
203
+ * The camera the scene is rendered with.
204
+ *
205
+ * @private
206
+ * @type {Camera}
207
+ */
208
+ this._camera = camera;
209
+
210
+ /**
211
+ * The render target the godrays are rendered into.
212
+ *
213
+ * @private
214
+ * @type {RenderTarget}
215
+ */
216
+ this._godraysRenderTarget = new RenderTarget( 1, 1, { depthBuffer: false } );
217
+ this._godraysRenderTarget.texture.name = 'Godrays';
218
+
219
+ /**
220
+ * The material that is used to render the effect.
221
+ *
222
+ * @private
223
+ * @type {NodeMaterial}
224
+ */
225
+ this._material = new NodeMaterial();
226
+ this._material.name = 'Godrays';
227
+
228
+ /**
229
+ * The result of the effect is represented as a separate texture node.
230
+ *
231
+ * @private
232
+ * @type {PassTextureNode}
233
+ */
234
+ this._textureNode = passTexture( this, this._godraysRenderTarget.texture );
235
+
236
+
237
+ }
238
+
239
+ /**
240
+ * Returns the result of the effect as a texture node.
241
+ *
242
+ * @return {PassTextureNode} A texture node that represents the result of the effect.
243
+ */
244
+ getTextureNode() {
245
+
246
+ return this._textureNode;
247
+
248
+ }
249
+
250
+ /**
251
+ * Sets the size of the effect.
252
+ *
253
+ * @param {number} width - The width of the effect.
254
+ * @param {number} height - The height of the effect.
255
+ */
256
+ setSize( width, height ) {
257
+
258
+ width = Math.round( this.resolutionScale * width );
259
+ height = Math.round( this.resolutionScale * height );
260
+
261
+ this._godraysRenderTarget.setSize( width, height );
262
+
263
+ }
264
+
265
+ /**
266
+ * This method is used to render the effect once per frame.
267
+ *
268
+ * @param {NodeFrame} frame - The current node frame.
269
+ */
270
+ updateBefore( frame ) {
271
+
272
+ const { renderer } = frame;
273
+
274
+ _rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
275
+
276
+ //
277
+
278
+ const size = renderer.getDrawingBufferSize( _size );
279
+ this.setSize( size.width, size.height );
280
+
281
+ //
282
+
283
+ _quadMesh.material = this._material;
284
+ _quadMesh.name = 'Godrays';
285
+
286
+ this._updateLightParams();
287
+
288
+ this._cameraPosition.value.setFromMatrixPosition( this._camera.matrixWorld );
289
+
290
+ // clear
291
+
292
+ renderer.setClearColor( 0xffffff, 1 );
293
+
294
+ // godrays
295
+
296
+ renderer.setRenderTarget( this._godraysRenderTarget );
297
+ _quadMesh.render( renderer );
298
+
299
+ // restore
300
+
301
+ RendererUtils.restoreRendererState( renderer, _rendererState );
302
+
303
+ }
304
+
305
+ _updateLightParams() {
306
+
307
+ const light = this._light;
308
+ const shadowCamera = light.shadow.camera;
309
+
310
+ this._premultipliedLightCameraMatrix.value.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );
311
+
312
+ if ( light.isPointLight ) {
313
+
314
+ for ( let i = 0; i < _DIRECTIONS.length; i ++ ) {
315
+
316
+ const direction = _DIRECTIONS[ i ];
317
+ const plane = _PLANES[ i ];
318
+
319
+ _SCRATCH_VECTOR.copy( light.position );
320
+ _SCRATCH_VECTOR.addScaledVector( direction, shadowCamera.far );
321
+ plane.setFromNormalAndCoplanarPoint( direction, _SCRATCH_VECTOR );
322
+
323
+ this._fNormals.array[ i ].copy( plane.normal );
324
+ this._fConstants.array[ i ] = plane.constant;
325
+
326
+ }
327
+
328
+ } else if ( light.isDirectionalLight ) {
329
+
330
+ _SCRATCH_MAT4.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );
331
+ _SCRATCH_FRUSTUM.setFromProjectionMatrix( _SCRATCH_MAT4 );
332
+
333
+ for ( let i = 0; i < 6; i ++ ) {
334
+
335
+ const plane = _SCRATCH_FRUSTUM.planes[ i ];
336
+
337
+ this._fNormals.array[ i ].copy( plane.normal ).multiplyScalar( - 1 );
338
+ this._fConstants.array[ i ] = plane.constant * - 1;
339
+
340
+ }
341
+
342
+ }
343
+
344
+ }
345
+
346
+ /**
347
+ * This method is used to setup the effect's TSL code.
348
+ *
349
+ * @param {NodeBuilder} builder - The current node builder.
350
+ * @return {PassTextureNode}
351
+ */
352
+ setup( builder ) {
353
+
354
+ const uvNode = uv();
355
+ const lightPos = lightPosition( this._light );
356
+
357
+ const sampleDepth = ( uv ) => {
358
+
359
+ const depth = this.depthNode.sample( uv ).r;
360
+
361
+ if ( builder.renderer.logarithmicDepthBuffer === true ) {
362
+
363
+ const viewZ = logarithmicDepthToViewZ( depth, this._cameraNear, this._cameraFar );
364
+
365
+ return viewZToPerspectiveDepth( viewZ, this._cameraNear, this._cameraFar );
366
+
367
+ }
368
+
369
+ return depth;
370
+
371
+ };
372
+
373
+ const sdPlane = ( p, n, h ) => {
374
+
375
+ return dot( p, n ).add( h );
376
+
377
+ };
378
+
379
+ const intersectRayPlane = ( rayOrigin, rayDirection, planeNormal, planeDistance ) => {
380
+
381
+ const denom = dot( planeNormal, rayDirection );
382
+ return sdPlane( rayOrigin, planeNormal, planeDistance ).div( denom ).negate();
383
+
384
+ };
385
+
386
+ const computeShadowCoord = ( worldPos ) => {
387
+
388
+ const shadowPosition = lightShadowMatrix( this._light ).mul( worldPos );
389
+ const shadowCoord = shadowPosition.xyz.div( shadowPosition.w );
390
+
391
+ return vec3( shadowCoord.x, shadowCoord.y.oneMinus(), shadowCoord.z );
392
+
393
+ };
394
+
395
+ const inShadow = ( worldPos ) => {
396
+
397
+ if ( this._light.isPointLight ) {
398
+
399
+ const lightToPos = worldPos.sub( lightPos ).toConst();
400
+
401
+ const shadowPositionAbs = lightToPos.abs().toConst();
402
+ const viewZ = shadowPositionAbs.x.max( shadowPositionAbs.y ).max( shadowPositionAbs.z ).negate();
403
+
404
+ const depth = viewZToPerspectiveDepth( viewZ, this._shadowCameraNear, this._shadowCameraFar );
405
+
406
+ const result = cubeTexture( this._light.shadow.map.depthTexture, lightToPos ).compare( depth ).r;
407
+
408
+ return vec2( result.oneMinus().add( 0.005 ), viewZ.negate() );
409
+
410
+ } else if ( this._light.isDirectionalLight ) {
411
+
412
+ const shadowCoord = computeShadowCoord( worldPos ).toConst();
413
+
414
+ const frustumTest = shadowCoord.x.greaterThanEqual( 0 )
415
+ .and( shadowCoord.x.lessThanEqual( 1 ) )
416
+ .and( shadowCoord.y.greaterThanEqual( 0 ) )
417
+ .and( shadowCoord.y.lessThanEqual( 1 ) )
418
+ .and( shadowCoord.z.greaterThanEqual( 0 ) )
419
+ .and( shadowCoord.z.lessThanEqual( 1 ) );
420
+
421
+ const output = vec2( 1, 0 );
422
+
423
+ If( frustumTest.equal( true ), () => {
424
+
425
+ const result = texture( this._light.shadow.map.depthTexture, shadowCoord.xy ).compare( shadowCoord.z ).r;
426
+
427
+ const viewZ = perspectiveDepthToViewZ( shadowCoord.z, this._shadowCameraNear, this._shadowCameraFar );
428
+
429
+ output.assign( vec2( result.oneMinus(), viewZ.negate() ) );
430
+
431
+ } );
432
+
433
+ return output;
434
+
435
+ } else {
436
+
437
+ throw new Error( 'GodraysNode: Unsupported light type.' );
438
+
439
+ }
440
+
441
+ };
442
+
443
+ const godrays = Fn( () => {
444
+
445
+ const output = vec4( 0, 0, 0, 1 ).toVar();
446
+ const isEarlyOut = bool( false );
447
+
448
+ const depth = sampleDepth( uvNode ).toConst();
449
+ const viewPosition = getViewPosition( uvNode, depth, this._cameraProjectionMatrixInverse ).toConst();
450
+ const worldPosition = this._cameraMatrixWorld.mul( viewPosition );
451
+
452
+ const inBoxDist = float( - 10000.0 ).toVar();
453
+
454
+ Loop( 6, ( { i } ) => {
455
+
456
+ inBoxDist.assign( max( inBoxDist, sdPlane( this._cameraPosition, this._fNormals.element( i ), this._fConstants.element( i ) ) ) );
457
+
458
+ } );
459
+
460
+ const startPosition = this._cameraPosition.toVar();
461
+
462
+ If( inBoxDist.lessThan( 0 ), () => {
463
+
464
+ // If the ray target is outside the shadow box, move it to the nearest
465
+ // point on the box to avoid marching through unlit space
466
+
467
+ Loop( 6, ( { i } ) => {
468
+
469
+ If( sdPlane( worldPosition, this._fNormals.element( i ), this._fConstants.element( i ) ).greaterThan( 0 ), () => {
470
+
471
+ const direction = worldPosition.sub( this._cameraPosition ).toConst();
472
+
473
+ const t = intersectRayPlane( this._cameraPosition, direction, this._fNormals.element( i ), this._fConstants.element( i ) );
474
+
475
+ worldPosition.assign( this._cameraPosition.add( t.mul( direction ) ) );
476
+
477
+ } );
478
+
479
+ } );
480
+
481
+ } ).Else( () => {
482
+
483
+ // Find the first point where the ray intersects the shadow box (startPos)
484
+
485
+ const direction = worldPosition.sub( this._cameraPosition ).toConst();
486
+
487
+ const minT = float( 10000 ).toVar();
488
+
489
+ Loop( 6, ( { i } ) => {
490
+
491
+ const t = intersectRayPlane( this._cameraPosition, direction, this._fNormals.element( i ), this._fConstants.element( i ) );
492
+
493
+ If( t.lessThan( minT ).and( t.greaterThan( 0 ) ), () => {
494
+
495
+ minT.assign( t );
496
+
497
+ } );
498
+
499
+ } );
500
+
501
+ If( minT.equal( 10000 ), () => {
502
+
503
+ isEarlyOut.assign( true );
504
+
505
+ } ).Else( () => {
506
+
507
+ startPosition.assign( this._cameraPosition.add( minT.add( 0.001 ).mul( direction ) ) );
508
+
509
+ // If the ray target is outside the shadow box, move it to the nearest
510
+ // point on the box to avoid marching through unlit space
511
+
512
+ const endInBoxDist = float( - 10000 ).toVar();
513
+
514
+ Loop( 6, ( { i } ) => {
515
+
516
+ endInBoxDist.assign( max( endInBoxDist, sdPlane( worldPosition, this._fNormals.element( i ), this._fConstants.element( i ) ) ) );
517
+
518
+ } );
519
+
520
+
521
+ If( endInBoxDist.greaterThanEqual( 0 ), () => {
522
+
523
+ const minT = float( 10000 ).toVar();
524
+
525
+ Loop( 6, ( { i } ) => {
526
+
527
+ If( sdPlane( worldPosition, this._fNormals.element( i ), this._fConstants.element( i ) ).greaterThan( 0 ), () => {
528
+
529
+ const t = intersectRayPlane( startPosition, direction, this._fNormals.element( i ), this._fConstants.element( i ) );
530
+
531
+ If( t.lessThan( minT ).and( t.greaterThan( 0 ) ), () => {
532
+
533
+ minT.assign( t );
534
+
535
+ } );
536
+
537
+ } );
538
+
539
+ } );
540
+
541
+ If( minT.lessThan( worldPosition.distance( startPosition ) ), () => {
542
+
543
+ worldPosition.assign( startPosition.add( minT.mul( direction ) ) );
544
+
545
+ } );
546
+
547
+ } );
548
+
549
+ } );
550
+
551
+ } );
552
+
553
+ If( isEarlyOut.equal( false ), () => {
554
+
555
+ const illum = float( 0 ).toVar();
556
+
557
+ const noise = interleavedGradientNoise( screenCoordinate ).toConst();
558
+ const samplesFloat = round( add( this.raymarchSteps, mul( this.raymarchSteps.div( 8 ).add( 2 ), noise ) ) ).toConst();
559
+ const samples = uint( samplesFloat ).toConst();
560
+
561
+ Loop( samples, ( { i } ) => {
562
+
563
+ const samplePos = mix( startPosition, worldPosition, float( i ).div( samplesFloat ) ).toConst();
564
+ const shadowInfo = inShadow( samplePos );
565
+ const shadowAmount = shadowInfo.x.oneMinus().toConst();
566
+
567
+ illum.addAssign( shadowAmount.mul( distance( startPosition, worldPosition ).mul( this.density.div( 100 ) ) ).mul( pow( shadowInfo.y.div( this._shadowCameraFar ).oneMinus(), this.distanceAttenuation ) ) );
568
+
569
+ } );
570
+
571
+ illum.divAssign( samplesFloat );
572
+
573
+ output.assign( vec4( vec3( clamp( exp( illum.negate() ).oneMinus(), 0, this.maxDensity ) ), depth ) );
574
+
575
+
576
+ } );
577
+
578
+ return output;
579
+
580
+ } );
581
+
582
+ this._material.fragmentNode = godrays().context( builder.getSharedContext() );
583
+ this._material.needsUpdate = true;
584
+
585
+ return this._textureNode;
586
+
587
+ }
588
+
589
+ /**
590
+ * Frees internal resources. This method should be called
591
+ * when the effect is no longer required.
592
+ */
593
+ dispose() {
594
+
595
+ this._godraysRenderTarget.dispose();
596
+
597
+ this._material.dispose();
598
+
599
+ }
600
+
601
+ }
602
+
603
+ export default GodraysNode;
604
+
605
+ /**
606
+ * TSL function for creating a Godrays effect.
607
+ *
608
+ * @tsl
609
+ * @function
610
+ * @param {TextureNode} depthNode - A texture node that represents the scene's depth.
611
+ * @param {Camera} camera - The camera the scene is rendered with.
612
+ * @param {(DirectionalLight|PointLight)} light - The light the godrays are rendered for.
613
+ * @returns {GodraysNode}
614
+ */
615
+ export const godrays = ( depthNode, camera, light ) => new GodraysNode( depthNode, camera, light );
@@ -276,4 +276,4 @@ export default LensflareNode;
276
276
  * @param {number} [params.downSampleRatio=4] - Defines how downsampling since the effect is usually not rendered at full resolution.
277
277
  * @returns {LensflareNode}
278
278
  */
279
- export const lensflare = ( node, params ) => nodeObject( new LensflareNode( convertToTexture( node ), params ) );
279
+ export const lensflare = ( node, params ) => new LensflareNode( convertToTexture( node ), params );
@@ -106,4 +106,4 @@ export default Lut3DNode;
106
106
  * @param {Node<float> | number} intensity - Controls the intensity of the effect.
107
107
  * @returns {Lut3DNode}
108
108
  */
109
- export const lut3D = ( node, lut, size, intensity ) => nodeObject( new Lut3DNode( nodeObject( node ), nodeObject( lut ), size, nodeObject( intensity ) ) );
109
+ export const lut3D = ( node, lut, size, intensity ) => new Lut3DNode( nodeObject( node ), nodeObject( lut ), size, nodeObject( intensity ) );