@plastic-software/three 0.175.13 → 0.178.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 (529) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +7747 -6792
  3. package/build/three.core.js +7371 -6576
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +190 -30
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +19 -11
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +4989 -2235
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +5082 -2469
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -1
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -27
  17. package/examples/jsm/capabilities/WebGPU.js +1 -0
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +62 -14
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +18 -4
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +49 -35
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +12 -10
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +2 -1
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +7 -0
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/lighting/TiledLighting.js +1 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +1 -0
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  79. package/examples/jsm/lines/Line2.js +1 -0
  80. package/examples/jsm/lines/LineGeometry.js +1 -0
  81. package/examples/jsm/lines/LineMaterial.js +4 -4
  82. package/examples/jsm/lines/LineSegments2.js +1 -0
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  84. package/examples/jsm/lines/Wireframe.js +1 -0
  85. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  88. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  89. package/examples/jsm/loaders/3DMLoader.js +1 -0
  90. package/examples/jsm/loaders/3MFLoader.js +1 -0
  91. package/examples/jsm/loaders/AMFLoader.js +1 -0
  92. package/examples/jsm/loaders/BVHLoader.js +1 -0
  93. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  94. package/examples/jsm/loaders/DDSLoader.js +1 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  96. package/examples/jsm/loaders/EXRLoader.js +1 -0
  97. package/examples/jsm/loaders/FBXLoader.js +25 -23
  98. package/examples/jsm/loaders/FontLoader.js +1 -0
  99. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  100. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  102. package/examples/jsm/loaders/IESLoader.js +1 -0
  103. package/examples/jsm/loaders/KMZLoader.js +1 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  105. package/examples/jsm/loaders/KTXLoader.js +1 -0
  106. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  107. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  108. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  110. package/examples/jsm/loaders/LWOLoader.js +1 -13
  111. package/examples/jsm/loaders/LottieLoader.js +15 -0
  112. package/examples/jsm/loaders/MD2Loader.js +1 -0
  113. package/examples/jsm/loaders/MDDLoader.js +1 -0
  114. package/examples/jsm/loaders/MTLLoader.js +4 -3
  115. package/examples/jsm/loaders/MaterialXLoader.js +1 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  117. package/examples/jsm/loaders/OBJLoader.js +1 -0
  118. package/examples/jsm/loaders/PCDLoader.js +122 -19
  119. package/examples/jsm/loaders/PDBLoader.js +1 -0
  120. package/examples/jsm/loaders/PLYLoader.js +1 -0
  121. package/examples/jsm/loaders/PVRLoader.js +1 -0
  122. package/examples/jsm/loaders/RGBELoader.js +1 -0
  123. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  124. package/examples/jsm/loaders/STLLoader.js +1 -0
  125. package/examples/jsm/loaders/SVGLoader.js +1 -0
  126. package/examples/jsm/loaders/TDSLoader.js +1 -0
  127. package/examples/jsm/loaders/TGALoader.js +1 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  129. package/examples/jsm/loaders/TTFLoader.js +1 -0
  130. package/examples/jsm/loaders/USDZLoader.js +1 -0
  131. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  132. package/examples/jsm/loaders/VOXLoader.js +1 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  134. package/examples/jsm/loaders/VTKLoader.js +1 -0
  135. package/examples/jsm/loaders/XYZLoader.js +1 -0
  136. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  137. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  138. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  139. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  140. package/examples/jsm/math/Capsule.js +2 -0
  141. package/examples/jsm/math/ColorConverter.js +1 -0
  142. package/examples/jsm/math/ConvexHull.js +2 -0
  143. package/examples/jsm/math/ImprovedNoise.js +19 -14
  144. package/examples/jsm/math/Lut.js +2 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  146. package/examples/jsm/math/OBB.js +2 -0
  147. package/examples/jsm/math/Octree.js +20 -1
  148. package/examples/jsm/math/SimplexNoise.js +2 -0
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  150. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  151. package/examples/jsm/misc/Gyroscope.js +1 -0
  152. package/examples/jsm/misc/MD2Character.js +2 -0
  153. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  154. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  158. package/examples/jsm/misc/RollerCoaster.js +5 -0
  159. package/examples/jsm/misc/Timer.js +2 -0
  160. package/examples/jsm/misc/TubePainter.js +1 -0
  161. package/examples/jsm/misc/Volume.js +2 -0
  162. package/examples/jsm/misc/VolumeSlice.js +1 -0
  163. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  167. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  168. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  169. package/examples/jsm/objects/Lensflare.js +3 -0
  170. package/examples/jsm/objects/LensflareMesh.js +1 -0
  171. package/examples/jsm/objects/MarchingCubes.js +2 -0
  172. package/examples/jsm/objects/Reflector.js +1 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  174. package/examples/jsm/objects/Refractor.js +1 -0
  175. package/examples/jsm/objects/ShadowMesh.js +1 -0
  176. package/examples/jsm/objects/Sky.js +2 -1
  177. package/examples/jsm/objects/SkyMesh.js +20 -17
  178. package/examples/jsm/objects/Water.js +1 -0
  179. package/examples/jsm/objects/Water2.js +1 -0
  180. package/examples/jsm/objects/Water2Mesh.js +3 -1
  181. package/examples/jsm/objects/WaterMesh.js +2 -1
  182. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  183. package/examples/jsm/physics/JoltPhysics.js +1 -0
  184. package/examples/jsm/physics/RapierPhysics.js +139 -12
  185. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  186. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  187. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  188. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  190. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  191. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  192. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  193. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  194. package/examples/jsm/postprocessing/GTAOPass.js +4 -3
  195. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  196. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  197. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  198. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  199. package/examples/jsm/postprocessing/OutlinePass.js +5 -2
  200. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  201. package/examples/jsm/postprocessing/Pass.js +3 -1
  202. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  203. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  204. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  205. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  206. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  207. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  208. package/examples/jsm/postprocessing/SSAOPass.js +2 -1
  209. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  210. package/examples/jsm/postprocessing/SavePass.js +2 -1
  211. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  212. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  213. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  214. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  215. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  216. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  217. package/examples/jsm/renderers/Projector.js +2 -0
  218. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  219. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  220. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  221. package/examples/jsm/shaders/BasicShader.js +4 -1
  222. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  223. package/examples/jsm/shaders/BlendShader.js +4 -1
  224. package/examples/jsm/shaders/BokehShader.js +4 -1
  225. package/examples/jsm/shaders/BokehShader2.js +4 -1
  226. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  227. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  228. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  229. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  230. package/examples/jsm/shaders/CopyShader.js +4 -1
  231. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  232. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  233. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  234. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  235. package/examples/jsm/shaders/ExposureShader.js +4 -1
  236. package/examples/jsm/shaders/FXAAShader.js +4 -1
  237. package/examples/jsm/shaders/FilmShader.js +4 -1
  238. package/examples/jsm/shaders/FocusShader.js +4 -1
  239. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  240. package/examples/jsm/shaders/GTAOShader.js +4 -1
  241. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  242. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  243. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  244. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  245. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  246. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  247. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  248. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  249. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  250. package/examples/jsm/shaders/MirrorShader.js +4 -1
  251. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  252. package/examples/jsm/shaders/OutputShader.js +4 -1
  253. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  254. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  255. package/examples/jsm/shaders/SAOShader.js +4 -1
  256. package/examples/jsm/shaders/SMAAShader.js +1 -0
  257. package/examples/jsm/shaders/SSAOShader.js +4 -1
  258. package/examples/jsm/shaders/SSRShader.js +1 -0
  259. package/examples/jsm/shaders/SepiaShader.js +4 -1
  260. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  261. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  262. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  263. package/examples/jsm/shaders/ToonShader.js +2 -1
  264. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  265. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +4 -1
  266. package/examples/jsm/shaders/VelocityShader.js +4 -1
  267. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  268. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  269. package/examples/jsm/shaders/VignetteShader.js +4 -1
  270. package/examples/jsm/shaders/VolumeShader.js +5 -2
  271. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  272. package/examples/jsm/textures/FlakesTexture.js +2 -0
  273. package/examples/jsm/transpiler/AST.js +381 -30
  274. package/examples/jsm/transpiler/GLSLDecoder.js +226 -87
  275. package/examples/jsm/transpiler/Linker.js +327 -0
  276. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  277. package/examples/jsm/transpiler/Transpiler.js +19 -1
  278. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  279. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  280. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  281. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  282. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  283. package/examples/jsm/tsl/display/BloomNode.js +1 -0
  284. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  285. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  286. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  287. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  288. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  289. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  290. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  291. package/examples/jsm/tsl/display/GaussianBlurNode.js +4 -29
  292. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  293. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  294. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  295. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  296. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  297. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  298. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  299. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  300. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  301. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  302. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  303. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  304. package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
  305. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  306. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  307. package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
  308. package/examples/jsm/tsl/math/Bayer.js +4 -1
  309. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  310. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  311. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  312. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  313. package/examples/jsm/utils/CameraUtils.js +4 -1
  314. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  315. package/examples/jsm/utils/GeometryUtils.js +4 -1
  316. package/examples/jsm/utils/LDrawUtils.js +2 -0
  317. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  318. package/examples/jsm/utils/SceneUtils.js +4 -1
  319. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  320. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  321. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  322. package/examples/jsm/utils/SortUtils.js +4 -1
  323. package/examples/jsm/utils/UVsDebug.js +4 -1
  324. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  325. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  326. package/examples/jsm/utils/WorkerPool.js +2 -0
  327. package/examples/jsm/webxr/ARButton.js +1 -0
  328. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  329. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  330. package/examples/jsm/webxr/Text2D.js +4 -1
  331. package/examples/jsm/webxr/VRButton.js +1 -0
  332. package/examples/jsm/webxr/XRButton.js +1 -0
  333. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  334. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  335. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  336. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  338. package/examples/jsm/webxr/XRPlanes.js +1 -0
  339. package/package.json +6 -4
  340. package/src/Three.Core.js +1 -1
  341. package/src/Three.TSL.js +18 -10
  342. package/src/Three.WebGPU.Nodes.js +1 -0
  343. package/src/Three.WebGPU.js +3 -0
  344. package/src/audio/AudioListener.js +13 -10
  345. package/src/cameras/ArrayCamera.js +9 -1
  346. package/src/constants.js +47 -20
  347. package/src/core/BufferAttribute.js +3 -3
  348. package/src/core/BufferGeometry.js +2 -5
  349. package/src/core/Clock.js +2 -8
  350. package/src/core/GLBufferAttribute.js +13 -1
  351. package/src/core/Object3D.js +23 -22
  352. package/src/core/RenderTarget.js +65 -21
  353. package/src/core/RenderTarget3D.js +1 -0
  354. package/src/extras/TextureUtils.js +1 -5
  355. package/src/extras/core/Curve.js +1 -1
  356. package/src/extras/core/Path.js +22 -22
  357. package/src/geometries/CapsuleGeometry.js +167 -17
  358. package/src/geometries/ExtrudeGeometry.js +39 -29
  359. package/src/helpers/ArrowHelper.js +2 -2
  360. package/src/helpers/SkeletonHelper.js +1 -1
  361. package/src/lights/LightShadow.js +14 -0
  362. package/src/lights/SpotLightShadow.js +9 -1
  363. package/src/lights/webgpu/ProjectorLight.js +46 -0
  364. package/src/loaders/BufferGeometryLoader.js +1 -10
  365. package/src/loaders/FileLoader.js +2 -2
  366. package/src/loaders/ImageBitmapLoader.js +25 -9
  367. package/src/loaders/ImageLoader.js +55 -8
  368. package/src/loaders/ObjectLoader.js +44 -16
  369. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  370. package/src/materials/Material.js +1 -7
  371. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  372. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  373. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  374. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  375. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  376. package/src/materials/nodes/NodeMaterial.js +105 -19
  377. package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
  378. package/src/math/Box3.js +28 -0
  379. package/src/math/Color.js +7 -7
  380. package/src/math/ColorManagement.js +22 -3
  381. package/src/math/Frustum.js +6 -1
  382. package/src/math/FrustumArray.js +253 -0
  383. package/src/math/Quaternion.js +1 -1
  384. package/src/math/Ray.js +2 -0
  385. package/src/math/Sphere.js +28 -0
  386. package/src/nodes/Nodes.js +2 -3
  387. package/src/nodes/TSL.js +5 -3
  388. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  389. package/src/nodes/accessors/Bitangent.js +54 -26
  390. package/src/nodes/accessors/Camera.js +31 -4
  391. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  392. package/src/nodes/accessors/InstanceNode.js +5 -4
  393. package/src/nodes/accessors/Lights.js +2 -2
  394. package/src/nodes/accessors/MaterialNode.js +4 -0
  395. package/src/nodes/accessors/ModelNode.js +1 -1
  396. package/src/nodes/accessors/Normal.js +102 -16
  397. package/src/nodes/accessors/Object3DNode.js +7 -8
  398. package/src/nodes/accessors/Position.js +14 -4
  399. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  400. package/src/nodes/accessors/ReferenceNode.js +1 -1
  401. package/src/nodes/accessors/ReflectVector.js +3 -3
  402. package/src/nodes/accessors/SkinningNode.js +3 -2
  403. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  404. package/src/nodes/accessors/StorageTextureNode.js +14 -3
  405. package/src/nodes/accessors/Tangent.js +25 -17
  406. package/src/nodes/accessors/TangentUtils.js +46 -0
  407. package/src/nodes/accessors/TextureBicubic.js +21 -3
  408. package/src/nodes/accessors/TextureNode.js +59 -8
  409. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  410. package/src/nodes/accessors/VelocityNode.js +1 -0
  411. package/src/nodes/accessors/VertexColorNode.js +4 -4
  412. package/src/nodes/code/CodeNode.js +8 -11
  413. package/src/nodes/core/AssignNode.js +27 -5
  414. package/src/nodes/core/AttributeNode.js +2 -2
  415. package/src/nodes/core/ContextNode.js +7 -3
  416. package/src/nodes/core/Node.js +69 -20
  417. package/src/nodes/core/NodeBuilder.js +248 -29
  418. package/src/nodes/core/NodeUtils.js +42 -0
  419. package/src/nodes/core/NodeVarying.js +19 -1
  420. package/src/nodes/core/PropertyNode.js +8 -12
  421. package/src/nodes/core/StackNode.js +129 -26
  422. package/src/nodes/core/StructTypeNode.js +26 -4
  423. package/src/nodes/core/SubBuildNode.js +89 -0
  424. package/src/nodes/core/VarNode.js +11 -2
  425. package/src/nodes/core/VaryingNode.js +45 -24
  426. package/src/nodes/display/BlendModes.js +42 -1
  427. package/src/nodes/display/ColorSpaceNode.js +4 -27
  428. package/src/nodes/display/FrontFacingNode.js +34 -2
  429. package/src/nodes/display/NormalMapNode.js +19 -50
  430. package/src/nodes/display/PassNode.js +18 -19
  431. package/src/nodes/display/ScreenNode.js +0 -26
  432. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  433. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  434. package/src/nodes/functions/PhongLightingModel.js +3 -3
  435. package/src/nodes/functions/PhysicalLightingModel.js +14 -14
  436. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  437. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  438. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  439. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  440. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  441. package/src/nodes/gpgpu/ComputeNode.js +1 -1
  442. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  443. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  444. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  445. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  446. package/src/nodes/lighting/LightsNode.js +29 -11
  447. package/src/nodes/lighting/ProjectorLightNode.js +78 -0
  448. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  449. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  450. package/src/nodes/lighting/ShadowNode.js +174 -242
  451. package/src/nodes/lighting/SpotLightNode.js +44 -7
  452. package/src/nodes/materialx/lib/mx_noise.js +1 -1
  453. package/src/nodes/math/ConditionalNode.js +0 -19
  454. package/src/nodes/math/MathNode.js +68 -21
  455. package/src/nodes/math/OperatorNode.js +108 -98
  456. package/src/nodes/shapes/Shapes.js +5 -4
  457. package/src/nodes/tsl/TSLBase.js +1 -0
  458. package/src/nodes/tsl/TSLCore.js +160 -65
  459. package/src/nodes/utils/DebugNode.js +15 -3
  460. package/src/nodes/utils/Discard.js +2 -2
  461. package/src/nodes/utils/EquirectUV.js +27 -0
  462. package/src/nodes/utils/LoopNode.js +64 -34
  463. package/src/nodes/utils/MatcapUV.js +22 -0
  464. package/src/nodes/utils/RTTNode.js +13 -5
  465. package/src/nodes/utils/ReflectorNode.js +77 -7
  466. package/src/nodes/utils/SampleNode.js +81 -0
  467. package/src/nodes/utils/TriplanarTextures.js +65 -0
  468. package/src/objects/BatchedMesh.js +16 -4
  469. package/src/objects/Mesh.js +9 -0
  470. package/src/objects/Skeleton.js +1 -1
  471. package/src/objects/Sprite.js +9 -0
  472. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  473. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  474. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  475. package/src/renderers/WebGLRenderer.js +25 -11
  476. package/src/renderers/common/Animation.js +2 -2
  477. package/src/renderers/common/Background.js +13 -2
  478. package/src/renderers/common/CubeRenderTarget.js +1 -1
  479. package/src/renderers/common/RenderList.js +0 -4
  480. package/src/renderers/common/RenderObject.js +80 -4
  481. package/src/renderers/common/Renderer.js +116 -8
  482. package/src/renderers/common/Storage3DTexture.js +79 -0
  483. package/src/renderers/common/StorageArrayTexture.js +63 -0
  484. package/src/renderers/common/Textures.js +15 -21
  485. package/src/renderers/common/TimestampQueryPool.js +1 -0
  486. package/src/renderers/common/Uniform.js +1 -1
  487. package/src/renderers/common/UniformsGroup.js +14 -18
  488. package/src/renderers/common/XRManager.js +157 -27
  489. package/src/renderers/common/XRRenderTarget.js +21 -4
  490. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  491. package/src/renderers/common/nodes/Nodes.js +13 -3
  492. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +1 -1
  493. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  494. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  495. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  496. package/src/renderers/webgl/WebGLPrograms.js +4 -2
  497. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  498. package/src/renderers/webgl/WebGLState.js +4 -4
  499. package/src/renderers/webgl/WebGLTextures.js +144 -4
  500. package/src/renderers/webgl/WebGLUtils.js +1 -3
  501. package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  504. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  507. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  508. package/src/renderers/webgpu/WebGPUBackend.js +451 -128
  509. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  510. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  511. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  512. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +86 -33
  513. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  514. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  515. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +28 -5
  516. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  517. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
  519. package/src/renderers/webxr/WebXRController.js +1 -1
  520. package/src/renderers/webxr/WebXRManager.js +2 -1
  521. package/src/textures/DepthTexture.js +6 -10
  522. package/src/textures/Source.js +22 -0
  523. package/src/textures/Texture.js +118 -1
  524. package/src/textures/VideoTexture.js +1 -1
  525. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  526. package/src/core/RenderTargetArray.js +0 -40
  527. package/src/nodes/utils/EquirectUVNode.js +0 -65
  528. package/src/nodes/utils/MatcapUVNode.js +0 -49
  529. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -1,41 +1,11 @@
1
1
  import TempNode from '../core/TempNode.js';
2
- import { add } from '../math/OperatorNode.js';
3
2
 
4
3
  import { normalView, transformNormalToView } from '../accessors/Normal.js';
5
- import { positionView } from '../accessors/Position.js';
6
4
  import { TBNViewMatrix } from '../accessors/AccessorsUtils.js';
7
- import { uv } from '../accessors/UV.js';
8
- import { faceDirection } from './FrontFacingNode.js';
9
- import { Fn, nodeProxy, vec3 } from '../tsl/TSLBase.js';
5
+ import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
10
6
 
11
7
  import { TangentSpaceNormalMap, ObjectSpaceNormalMap } from '../../constants.js';
12
-
13
- // Normal Mapping Without Precomputed Tangents
14
- // http://www.thetenthplanet.de/archives/1180
15
-
16
- const perturbNormal2Arb = /*@__PURE__*/ Fn( ( inputs ) => {
17
-
18
- const { eye_pos, surf_norm, mapN, uv } = inputs;
19
-
20
- const q0 = eye_pos.dFdx();
21
- const q1 = eye_pos.dFdy();
22
- const st0 = uv.dFdx();
23
- const st1 = uv.dFdy();
24
-
25
- const N = surf_norm; // normalized
26
-
27
- const q1perp = q1.cross( N );
28
- const q0perp = N.cross( q0 );
29
-
30
- const T = q1perp.mul( st0.x ).add( q0perp.mul( st1.x ) );
31
- const B = q1perp.mul( st0.y ).add( q0perp.mul( st1.y ) );
32
-
33
- const det = T.dot( T ).max( B.dot( B ) );
34
- const scale = faceDirection.mul( det.inverseSqrt() );
35
-
36
- return add( T.mul( mapN.x, scale ), B.mul( mapN.y, scale ), N.mul( mapN.z ) ).normalize();
37
-
38
- } );
8
+ import { directionToFaceDirection } from './FrontFacingNode.js';
39
9
 
40
10
  /**
41
11
  * This class can be used for applying normals maps to materials.
@@ -89,7 +59,7 @@ class NormalMapNode extends TempNode {
89
59
 
90
60
  }
91
61
 
92
- setup( builder ) {
62
+ setup( { material } ) {
93
63
 
94
64
  const { normalMapType, scaleNode } = this;
95
65
 
@@ -97,38 +67,37 @@ class NormalMapNode extends TempNode {
97
67
 
98
68
  if ( scaleNode !== null ) {
99
69
 
100
- normalMap = vec3( normalMap.xy.mul( scaleNode ), normalMap.z );
70
+ let scale = scaleNode;
71
+
72
+ if ( material.flatShading === true ) {
73
+
74
+ scale = directionToFaceDirection( scale );
75
+
76
+ }
77
+
78
+ normalMap = vec3( normalMap.xy.mul( scale ), normalMap.z );
101
79
 
102
80
  }
103
81
 
104
- let outputNode = null;
82
+ let output = null;
105
83
 
106
84
  if ( normalMapType === ObjectSpaceNormalMap ) {
107
85
 
108
- outputNode = transformNormalToView( normalMap );
86
+ output = transformNormalToView( normalMap );
109
87
 
110
88
  } else if ( normalMapType === TangentSpaceNormalMap ) {
111
89
 
112
- const tangent = builder.hasGeometryAttribute( 'tangent' );
113
-
114
- if ( tangent === true ) {
90
+ output = TBNViewMatrix.mul( normalMap ).normalize();
115
91
 
116
- outputNode = TBNViewMatrix.mul( normalMap ).normalize();
92
+ } else {
117
93
 
118
- } else {
94
+ console.error( `THREE.NodeMaterial: Unsupported normal map type: ${ normalMapType }` );
119
95
 
120
- outputNode = perturbNormal2Arb( {
121
- eye_pos: positionView,
122
- surf_norm: normalView,
123
- mapN: normalMap,
124
- uv: uv()
125
- } );
126
-
127
- }
96
+ output = normalView; // Fallback to default normal view
128
97
 
129
98
  }
130
99
 
131
- return outputNode;
100
+ return output;
132
101
 
133
102
  }
134
103
 
@@ -126,7 +126,16 @@ class PassMultipleTextureNode extends PassTextureNode {
126
126
 
127
127
  clone() {
128
128
 
129
- return new this.constructor( this.passNode, this.textureName, this.previousTexture );
129
+ const newNode = new this.constructor( this.passNode, this.textureName, this.previousTexture );
130
+ newNode.uvNode = this.uvNode;
131
+ newNode.levelNode = this.levelNode;
132
+ newNode.biasNode = this.biasNode;
133
+ newNode.sampler = this.sampler;
134
+ newNode.depthNode = this.depthNode;
135
+ newNode.compareNode = this.compareNode;
136
+ newNode.gradNode = this.gradNode;
137
+
138
+ return newNode;
130
139
 
131
140
  }
132
141
 
@@ -336,6 +345,14 @@ class PassNode extends TempNode {
336
345
  */
337
346
  this.updateBeforeType = NodeUpdateType.FRAME;
338
347
 
348
+ /**
349
+ * This flag is used for global cache.
350
+ *
351
+ * @type {boolean}
352
+ * @default true
353
+ */
354
+ this.global = true;
355
+
339
356
  }
340
357
 
341
358
  /**
@@ -404,17 +421,6 @@ class PassNode extends TempNode {
404
421
 
405
422
  }
406
423
 
407
- /**
408
- * The method is overwritten so it always returns `true`.
409
- *
410
- * @return {boolean} Whether this node is global or not.
411
- */
412
- isGlobal() {
413
-
414
- return true;
415
-
416
- }
417
-
418
424
  /**
419
425
  * Returns the texture for the given output name.
420
426
  *
@@ -589,13 +595,6 @@ class PassNode extends TempNode {
589
595
 
590
596
  this.renderTarget.samples = this.options.samples === undefined ? renderer.samples : this.options.samples;
591
597
 
592
- // TODO: Disable MSAA for WebGL backend for now
593
- if ( renderer.backend.isWebGLBackend === true ) {
594
-
595
- this.renderTarget.samples = 0;
596
-
597
- }
598
-
599
598
  this.renderTarget.texture.type = renderer.getColorBufferType();
600
599
 
601
600
  return this.scope === PassNode.COLOR ? this.getTextureNode() : this.getLinearDepthNode();
@@ -258,29 +258,3 @@ export const viewportResolution = /*@__PURE__*/ ( Fn( () => { // @deprecated, r1
258
258
  return screenSize;
259
259
 
260
260
  }, 'vec2' ).once() )();
261
-
262
- /**
263
- * @tsl
264
- * @deprecated since r168. Use {@link screenUV} instead.
265
- * @type {Node<vec2>}
266
- */
267
- export const viewportTopLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
268
-
269
- console.warn( 'THREE.TSL: "viewportTopLeft" is deprecated. Use "screenUV" instead.' );
270
-
271
- return screenUV;
272
-
273
- }, 'vec2' ).once() )();
274
-
275
- /**
276
- * @tsl
277
- * @deprecated since r168. Use `screenUV.flipY()` instead.
278
- * @type {Node<vec2>}
279
- */
280
- export const viewportBottomLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
281
-
282
- console.warn( 'THREE.TSL: "viewportBottomLeft" is deprecated. Use "screenUV.flipY()" instead.' );
283
-
284
- return screenUV.flipY();
285
-
286
- }, 'vec2' ).once() )();
@@ -3,17 +3,13 @@ import V_GGX_SmithCorrelated from './V_GGX_SmithCorrelated.js';
3
3
  import V_GGX_SmithCorrelated_Anisotropic from './V_GGX_SmithCorrelated_Anisotropic.js';
4
4
  import D_GGX from './D_GGX.js';
5
5
  import D_GGX_Anisotropic from './D_GGX_Anisotropic.js';
6
- import { transformedNormalView } from '../../accessors/Normal.js';
6
+ import { normalView as NormalView } from '../../accessors/Normal.js';
7
7
  import { positionViewDirection } from '../../accessors/Position.js';
8
8
  import { iridescence, alphaT, anisotropyT, anisotropyB } from '../../core/PropertyNode.js';
9
9
  import { Fn, defined } from '../../tsl/TSLBase.js';
10
10
 
11
11
  // GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility
12
- const BRDF_GGX = /*@__PURE__*/ Fn( ( inputs ) => {
13
-
14
- const { lightDirection, f0, f90, roughness, f, USE_IRIDESCENCE, USE_ANISOTROPY } = inputs;
15
-
16
- const normalView = inputs.normalView || transformedNormalView;
12
+ const BRDF_GGX = /*@__PURE__*/ Fn( ( { lightDirection, f0, f90, roughness, f, normalView = NormalView, USE_IRIDESCENCE, USE_ANISOTROPY } ) => {
17
13
 
18
14
  const alpha = roughness.pow2(); // UE4's roughness
19
15
 
@@ -1,4 +1,4 @@
1
- import { transformedNormalView } from '../../accessors/Normal.js';
1
+ import { normalView } from '../../accessors/Normal.js';
2
2
  import { positionViewDirection } from '../../accessors/Position.js';
3
3
  import { sheen, sheenRoughness } from '../../core/PropertyNode.js';
4
4
  import { Fn, float } from '../../tsl/TSLBase.js';
@@ -43,9 +43,9 @@ const BRDF_Sheen = /*@__PURE__*/ Fn( ( { lightDirection } ) => {
43
43
 
44
44
  const halfDir = lightDirection.add( positionViewDirection ).normalize();
45
45
 
46
- const dotNL = transformedNormalView.dot( lightDirection ).clamp();
47
- const dotNV = transformedNormalView.dot( positionViewDirection ).clamp();
48
- const dotNH = transformedNormalView.dot( halfDir ).clamp();
46
+ const dotNL = normalView.dot( lightDirection ).clamp();
47
+ const dotNV = normalView.dot( positionViewDirection ).clamp();
48
+ const dotNH = normalView.dot( halfDir ).clamp();
49
49
 
50
50
  const D = D_Charlie( { roughness: sheenRoughness, dotNH } );
51
51
  const V = V_Neubelt( { dotNV, dotNL } );
@@ -2,7 +2,7 @@ import BasicLightingModel from './BasicLightingModel.js';
2
2
  import F_Schlick from './BSDF/F_Schlick.js';
3
3
  import BRDF_Lambert from './BSDF/BRDF_Lambert.js';
4
4
  import { diffuseColor, shininess, specularColor } from '../core/PropertyNode.js';
5
- import { transformedNormalView } from '../accessors/Normal.js';
5
+ import { normalView } from '../accessors/Normal.js';
6
6
  import { materialSpecularStrength } from '../accessors/MaterialNode.js';
7
7
  import { positionViewDirection } from '../accessors/Position.js';
8
8
  import { Fn, float } from '../tsl/TSLBase.js';
@@ -19,7 +19,7 @@ const BRDF_BlinnPhong = /*@__PURE__*/ Fn( ( { lightDirection } ) => {
19
19
 
20
20
  const halfDir = lightDirection.add( positionViewDirection ).normalize();
21
21
 
22
- const dotNH = transformedNormalView.dot( halfDir ).clamp();
22
+ const dotNH = normalView.dot( halfDir ).clamp();
23
23
  const dotVH = positionViewDirection.dot( halfDir ).clamp();
24
24
 
25
25
  const F = F_Schlick( { f0: specularColor, f90: 1.0, dotVH } );
@@ -66,7 +66,7 @@ class PhongLightingModel extends BasicLightingModel {
66
66
  */
67
67
  direct( { lightDirection, lightColor, reflectedLight } ) {
68
68
 
69
- const dotNL = transformedNormalView.dot( lightDirection ).clamp();
69
+ const dotNL = normalView.dot( lightDirection ).clamp();
70
70
  const irradiance = dotNL.mul( lightColor );
71
71
 
72
72
  reflectedLight.directDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor: diffuseColor.rgb } ) ) );
@@ -8,7 +8,7 @@ import BRDF_Sheen from './BSDF/BRDF_Sheen.js';
8
8
  import { LTC_Evaluate, LTC_Uv } from './BSDF/LTC.js';
9
9
  import LightingModel from '../core/LightingModel.js';
10
10
  import { diffuseColor, specularColor, specularF90, roughness, clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, ior, thickness, transmission, attenuationDistance, attenuationColor, dispersion } from '../core/PropertyNode.js';
11
- import { transformedNormalView, transformedClearcoatNormalView, transformedNormalWorld } from '../accessors/Normal.js';
11
+ import { normalView, clearcoatNormalView, normalWorld } from '../accessors/Normal.js';
12
12
  import { positionViewDirection, positionView, positionWorld } from '../accessors/Position.js';
13
13
  import { Fn, float, vec2, vec3, vec4, mat3, If } from '../tsl/TSLBase.js';
14
14
  import { select } from '../math/ConditionalNode.js';
@@ -18,7 +18,7 @@ import { cameraPosition, cameraProjectionMatrix, cameraViewMatrix } from '../acc
18
18
  import { modelWorldMatrix } from '../accessors/ModelNode.js';
19
19
  import { screenSize } from '../display/ScreenNode.js';
20
20
  import { viewportMipTexture } from '../display/ViewportTextureNode.js';
21
- import { textureBicubic } from '../accessors/TextureBicubic.js';
21
+ import { textureBicubicLevel } from '../accessors/TextureBicubic.js';
22
22
  import { Loop } from '../utils/LoopNode.js';
23
23
  import { BackSide } from '../../constants.js';
24
24
 
@@ -80,7 +80,7 @@ const getTransmissionSample = /*@__PURE__*/ Fn( ( [ fragCoord, roughness, ior ],
80
80
 
81
81
  const lod = log2( screenSize.x ).mul( applyIorToRoughness( roughness, ior ) );
82
82
 
83
- return textureBicubic( transmissionSample, lod );
83
+ return textureBicubicLevel( transmissionSample, lod );
84
84
 
85
85
  } );
86
86
 
@@ -494,7 +494,7 @@ class PhysicalLightingModel extends LightingModel {
494
494
 
495
495
  if ( this.iridescence === true ) {
496
496
 
497
- const dotNVi = transformedNormalView.dot( positionViewDirection ).clamp();
497
+ const dotNVi = normalView.dot( positionViewDirection ).clamp();
498
498
 
499
499
  this.iridescenceFresnel = evalIridescence( {
500
500
  outsideIOR: float( 1.0 ),
@@ -512,7 +512,7 @@ class PhysicalLightingModel extends LightingModel {
512
512
 
513
513
  const position = positionWorld;
514
514
  const v = cameraPosition.sub( positionWorld ).normalize(); // TODO: Create Node for this, same issue in MaterialX
515
- const n = transformedNormalWorld;
515
+ const n = normalWorld;
516
516
 
517
517
  const context = builder.context;
518
518
 
@@ -550,7 +550,7 @@ class PhysicalLightingModel extends LightingModel {
550
550
 
551
551
  computeMultiscattering( singleScatter, multiScatter, specularF90 ) {
552
552
 
553
- const dotNV = transformedNormalView.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV
553
+ const dotNV = normalView.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV
554
554
 
555
555
  const fab = DFGApprox( { roughness, dotNV } );
556
556
 
@@ -577,7 +577,7 @@ class PhysicalLightingModel extends LightingModel {
577
577
  */
578
578
  direct( { lightDirection, lightColor, reflectedLight } ) {
579
579
 
580
- const dotNL = transformedNormalView.dot( lightDirection ).clamp();
580
+ const dotNL = normalView.dot( lightDirection ).clamp();
581
581
  const irradiance = dotNL.mul( lightColor );
582
582
 
583
583
  if ( this.sheen === true ) {
@@ -588,10 +588,10 @@ class PhysicalLightingModel extends LightingModel {
588
588
 
589
589
  if ( this.clearcoat === true ) {
590
590
 
591
- const dotNLcc = transformedClearcoatNormalView.dot( lightDirection ).clamp();
591
+ const dotNLcc = clearcoatNormalView.dot( lightDirection ).clamp();
592
592
  const ccIrradiance = dotNLcc.mul( lightColor );
593
593
 
594
- this.clearcoatSpecularDirect.addAssign( ccIrradiance.mul( BRDF_GGX( { lightDirection, f0: clearcoatF0, f90: clearcoatF90, roughness: clearcoatRoughness, normalView: transformedClearcoatNormalView } ) ) );
594
+ this.clearcoatSpecularDirect.addAssign( ccIrradiance.mul( BRDF_GGX( { lightDirection, f0: clearcoatF0, f90: clearcoatF90, roughness: clearcoatRoughness, normalView: clearcoatNormalView } ) ) );
595
595
 
596
596
  }
597
597
 
@@ -615,7 +615,7 @@ class PhysicalLightingModel extends LightingModel {
615
615
  const p2 = lightPosition.sub( halfWidth ).add( halfHeight );
616
616
  const p3 = lightPosition.add( halfWidth ).add( halfHeight );
617
617
 
618
- const N = transformedNormalView;
618
+ const N = normalView;
619
619
  const V = positionViewDirection;
620
620
  const P = positionView.toVar();
621
621
 
@@ -680,7 +680,7 @@ class PhysicalLightingModel extends LightingModel {
680
680
  this.sheenSpecularIndirect.addAssign( iblIrradiance.mul(
681
681
  sheen,
682
682
  IBLSheenBRDF( {
683
- normal: transformedNormalView,
683
+ normal: normalView,
684
684
  viewDir: positionViewDirection,
685
685
  roughness: sheenRoughness
686
686
  } )
@@ -690,7 +690,7 @@ class PhysicalLightingModel extends LightingModel {
690
690
 
691
691
  if ( this.clearcoat === true ) {
692
692
 
693
- const dotNVcc = transformedClearcoatNormalView.dot( positionViewDirection ).clamp();
693
+ const dotNVcc = clearcoatNormalView.dot( positionViewDirection ).clamp();
694
694
 
695
695
  const clearcoatEnv = EnvironmentBRDF( {
696
696
  dotNV: dotNVcc,
@@ -731,7 +731,7 @@ class PhysicalLightingModel extends LightingModel {
731
731
 
732
732
  const { ambientOcclusion, reflectedLight } = builder.context;
733
733
 
734
- const dotNV = transformedNormalView.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV
734
+ const dotNV = normalView.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV
735
735
 
736
736
  const aoNV = dotNV.add( ambientOcclusion );
737
737
  const aoExp = roughness.mul( - 16.0 ).oneMinus().negate().exp2();
@@ -766,7 +766,7 @@ class PhysicalLightingModel extends LightingModel {
766
766
 
767
767
  if ( this.clearcoat === true ) {
768
768
 
769
- const dotNVcc = transformedClearcoatNormalView.dot( positionViewDirection ).clamp();
769
+ const dotNVcc = clearcoatNormalView.dot( positionViewDirection ).clamp();
770
770
 
771
771
  const Fcc = F_Schlick( {
772
772
  dotVH: dotNVcc,
@@ -32,7 +32,11 @@ class ShadowMaskModel extends LightingModel {
32
32
  */
33
33
  direct( { lightNode } ) {
34
34
 
35
- this.shadowNode.mulAssign( lightNode.shadowNode );
35
+ if ( lightNode.shadowNode !== null ) {
36
+
37
+ this.shadowNode.mulAssign( lightNode.shadowNode );
38
+
39
+ }
36
40
 
37
41
  }
38
42
 
@@ -1,4 +1,4 @@
1
- import { normalView } from '../../accessors/Normal.js';
1
+ import { normalViewGeometry } from '../../accessors/Normal.js';
2
2
  import { float, Fn } from '../../tsl/TSLBase.js';
3
3
 
4
4
  const getGeometryRoughness = /*@__PURE__*/ Fn( ( builder ) => {
@@ -9,7 +9,7 @@ const getGeometryRoughness = /*@__PURE__*/ Fn( ( builder ) => {
9
9
 
10
10
  }
11
11
 
12
- const dxy = normalView.dFdx().abs().max( normalView.dFdy().abs() );
12
+ const dxy = normalViewGeometry.dFdx().abs().max( normalViewGeometry.dFdy().abs() );
13
13
  const geometryRoughness = dxy.x.max( dxy.y ).max( dxy.z );
14
14
 
15
15
  return geometryRoughness;
@@ -28,7 +28,7 @@ const getParallaxCorrectNormal = /*@__PURE__*/ Fn( ( [ normal, cubeSize, cubePos
28
28
  rbminmax.y = nDir.y.greaterThan( float( 0 ) ).select( rbmax.y, rbmin.y );
29
29
  rbminmax.z = nDir.z.greaterThan( float( 0 ) ).select( rbmax.z, rbmin.z );
30
30
 
31
- const correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z ).toVar();
31
+ const correction = min( rbminmax.x, rbminmax.y, rbminmax.z ).toVar();
32
32
  const boxIntersection = positionWorld.add( nDir.mul( correction ) ).toVar();
33
33
  return boxIntersection.sub( cubePos );
34
34
 
@@ -1,4 +1,5 @@
1
- import TempNode from '../core/TempNode.js';
1
+ import Node from '../core/Node.js';
2
+ import { expression } from '../code/ExpressionNode.js';
2
3
  import { nodeProxy } from '../tsl/TSLCore.js';
3
4
 
4
5
  /**
@@ -10,9 +11,9 @@ import { nodeProxy } from '../tsl/TSLCore.js';
10
11
  *
11
12
  * This node can only be used with a WebGPU backend.
12
13
  *
13
- * @augments TempNode
14
+ * @augments Node
14
15
  */
15
- class AtomicFunctionNode extends TempNode {
16
+ class AtomicFunctionNode extends Node {
16
17
 
17
18
  static get type() {
18
19
 
@@ -52,6 +53,14 @@ class AtomicFunctionNode extends TempNode {
52
53
  */
53
54
  this.valueNode = valueNode;
54
55
 
56
+ /**
57
+ * Creates a list of the parents for this node for detecting if the node needs to return a value.
58
+ *
59
+ * @type {boolean}
60
+ * @default true
61
+ */
62
+ this.parents = true;
63
+
55
64
  }
56
65
 
57
66
  /**
@@ -81,6 +90,9 @@ class AtomicFunctionNode extends TempNode {
81
90
 
82
91
  generate( builder ) {
83
92
 
93
+ const properties = builder.getNodeProperties( this );
94
+ const parents = properties.parents;
95
+
84
96
  const method = this.method;
85
97
 
86
98
  const type = this.getNodeType( builder );
@@ -101,14 +113,23 @@ class AtomicFunctionNode extends TempNode {
101
113
  }
102
114
 
103
115
  const methodSnippet = `${ builder.getMethod( method, type ) }( ${ params.join( ', ' ) } )`;
116
+ const isVoid = parents.length === 1 && parents[ 0 ].isStackNode === true;
104
117
 
105
- if ( b !== null ) {
118
+ if ( isVoid ) {
106
119
 
107
120
  builder.addLineFlowCode( methodSnippet, this );
108
121
 
109
- }
122
+ } else {
110
123
 
111
- return methodSnippet;
124
+ if ( properties.constNode === undefined ) {
125
+
126
+ properties.constNode = expression( methodSnippet, type ).toConst();
127
+
128
+ }
129
+
130
+ return properties.constNode.build( builder );
131
+
132
+ }
112
133
 
113
134
  }
114
135
 
@@ -150,10 +171,7 @@ const atomicNode = nodeProxy( AtomicFunctionNode );
150
171
  */
151
172
  export const atomicFunc = ( method, pointerNode, valueNode ) => {
152
173
 
153
- const node = atomicNode( method, pointerNode, valueNode );
154
- node.append();
155
-
156
- return node;
174
+ return atomicNode( method, pointerNode, valueNode ).toStack();
157
175
 
158
176
  };
159
177
 
@@ -63,7 +63,7 @@ const barrier = nodeProxy( BarrierNode );
63
63
  * @function
64
64
  * @returns {BarrierNode}
65
65
  */
66
- export const workgroupBarrier = () => barrier( 'workgroup' ).append();
66
+ export const workgroupBarrier = () => barrier( 'workgroup' ).toStack();
67
67
 
68
68
  /**
69
69
  * TSL function for creating a storage barrier. All invocations must
@@ -74,7 +74,7 @@ export const workgroupBarrier = () => barrier( 'workgroup' ).append();
74
74
  * @function
75
75
  * @returns {BarrierNode}
76
76
  */
77
- export const storageBarrier = () => barrier( 'storage' ).append();
77
+ export const storageBarrier = () => barrier( 'storage' ).toStack();
78
78
 
79
79
  /**
80
80
  * TSL function for creating a texture barrier. All invocations must
@@ -85,5 +85,5 @@ export const storageBarrier = () => barrier( 'storage' ).append();
85
85
  * @function
86
86
  * @returns {BarrierNode}
87
87
  */
88
- export const textureBarrier = () => barrier( 'texture' ).append();
88
+ export const textureBarrier = () => barrier( 'texture' ).toStack();
89
89
 
@@ -165,7 +165,7 @@ class ComputeNode extends Node {
165
165
 
166
166
  setup( builder ) {
167
167
 
168
- const result = this.computeNode.setup( builder );
168
+ const result = this.computeNode.build( builder );
169
169
 
170
170
  if ( result ) {
171
171
 
@@ -3,7 +3,6 @@ import { NodeUpdateType } from '../core/constants.js';
3
3
  import { uniform } from '../core/UniformNode.js';
4
4
  import { Color } from '../../math/Color.js';
5
5
  import { renderGroup } from '../core/UniformGroupNode.js';
6
- import { hash } from '../core/NodeUtils.js';
7
6
  import { shadow } from './ShadowNode.js';
8
7
  import { nodeObject } from '../tsl/TSLCore.js';
9
8
  import { lightViewPosition } from '../accessors/Lights.js';
@@ -99,24 +98,19 @@ class AnalyticLightNode extends LightingNode {
99
98
 
100
99
  }
101
100
 
102
- /**
103
- * Overwrites the default {@link Node#customCacheKey} implementation by including the
104
- * `light.id` and `light.castShadow` into the cache key.
105
- *
106
- * @return {number} The custom cache key.
107
- */
108
- customCacheKey() {
109
-
110
- return hash( this.light.id, this.light.castShadow ? 1 : 0 );
111
-
112
- }
113
-
114
101
  getHash() {
115
102
 
116
103
  return this.light.uuid;
117
104
 
118
105
  }
119
106
 
107
+ /**
108
+ * Returns a node representing a direction vector which points from the current
109
+ * position in view space to the light's position in view space.
110
+ *
111
+ * @param {NodeBuilder} builder - The builder object used for setting up the light.
112
+ * @return {Node<vec3>} The light vector node.
113
+ */
120
114
  getLightVector( builder ) {
121
115
 
122
116
  return lightViewPosition( this.light ).sub( builder.context.positionView || positionView );
@@ -2,10 +2,10 @@ import LightingNode from './LightingNode.js';
2
2
  import { cache } from '../core/CacheNode.js';
3
3
  import { roughness, clearcoatRoughness } from '../core/PropertyNode.js';
4
4
  import { cameraViewMatrix } from '../accessors/Camera.js';
5
- import { transformedClearcoatNormalView, transformedNormalView, transformedNormalWorld } from '../accessors/Normal.js';
5
+ import { normalView, clearcoatNormalView, normalWorld } from '../accessors/Normal.js';
6
6
  import { positionViewDirection } from '../accessors/Position.js';
7
7
  import { float } from '../tsl/TSLBase.js';
8
- import { transformedBentNormalView } from '../accessors/AccessorsUtils.js';
8
+ import { bentNormalView } from '../accessors/AccessorsUtils.js';
9
9
  import { pmremTexture } from '../pmrem/PMREMNode.js';
10
10
  import { materialEnvIntensity } from '../accessors/MaterialProperties.js';
11
11
 
@@ -72,10 +72,10 @@ class EnvironmentNode extends LightingNode {
72
72
  //
73
73
 
74
74
  const useAnisotropy = material.useAnisotropy === true || material.anisotropy > 0;
75
- const radianceNormalView = useAnisotropy ? transformedBentNormalView : transformedNormalView;
75
+ const radianceNormalView = useAnisotropy ? bentNormalView : normalView;
76
76
 
77
77
  const radiance = envNode.context( createRadianceContext( roughness, radianceNormalView ) ).mul( materialEnvIntensity );
78
- const irradiance = envNode.context( createIrradianceContext( transformedNormalWorld ) ).mul( Math.PI ).mul( materialEnvIntensity );
78
+ const irradiance = envNode.context( createIrradianceContext( normalWorld ) ).mul( Math.PI ).mul( materialEnvIntensity );
79
79
 
80
80
  const isolateRadiance = cache( radiance );
81
81
  const isolateIrradiance = cache( irradiance );
@@ -92,7 +92,7 @@ class EnvironmentNode extends LightingNode {
92
92
 
93
93
  if ( clearcoatRadiance ) {
94
94
 
95
- const clearcoatRadianceContext = envNode.context( createRadianceContext( clearcoatRoughness, transformedClearcoatNormalView ) ).mul( materialEnvIntensity );
95
+ const clearcoatRadianceContext = envNode.context( createRadianceContext( clearcoatRoughness, clearcoatNormalView ) ).mul( materialEnvIntensity );
96
96
  const isolateClearcoatRadiance = cache( clearcoatRadianceContext );
97
97
 
98
98
  clearcoatRadiance.addAssign( isolateClearcoatRadiance );
@@ -1,7 +1,7 @@
1
1
  import AnalyticLightNode from './AnalyticLightNode.js';
2
2
  import { uniform } from '../core/UniformNode.js';
3
3
  import { mix } from '../math/MathNode.js';
4
- import { normalView } from '../accessors/Normal.js';
4
+ import { normalWorld } from '../accessors/Normal.js';
5
5
  import { lightPosition } from '../accessors/Lights.js';
6
6
  import { renderGroup } from '../core/UniformGroupNode.js';
7
7
 
@@ -73,7 +73,7 @@ class HemisphereLightNode extends AnalyticLightNode {
73
73
 
74
74
  const { colorNode, groundColorNode, lightDirectionNode } = this;
75
75
 
76
- const dotNL = normalView.dot( lightDirectionNode );
76
+ const dotNL = normalWorld.dot( lightDirectionNode );
77
77
  const hemiDiffuseWeight = dotNL.mul( 0.5 ).add( 0.5 );
78
78
 
79
79
  const irradiance = mix( groundColorNode, colorNode, hemiDiffuseWeight );
@@ -18,10 +18,11 @@ class IESSpotLightNode extends SpotLightNode {
18
18
  /**
19
19
  * Overwrites the default implementation to compute an IES conform spot attenuation.
20
20
  *
21
+ * @param {NodeBuilder} builder - The node builder.
21
22
  * @param {Node<float>} angleCosine - The angle to compute the spot attenuation for.
22
23
  * @return {Node<float>} The spot attenuation.
23
24
  */
24
- getSpotAttenuation( angleCosine ) {
25
+ getSpotAttenuation( builder, angleCosine ) {
25
26
 
26
27
  const iesMap = this.light.iesMap;
27
28