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
@@ -1,6 +1,7 @@
1
1
  import InputNode from './InputNode.js';
2
+ import StackTrace from '../core/StackTrace.js';
2
3
  import { objectGroup } from './UniformGroupNode.js';
3
- import { nodeObject, getConstNodeType } from '../tsl/TSLCore.js';
4
+ import { getConstNodeType } from '../tsl/TSLCore.js';
4
5
  import { getValueFromType } from './NodeUtils.js';
5
6
  import { warn } from '../../utils.js';
6
7
 
@@ -78,7 +79,7 @@ class UniformNode extends InputNode {
78
79
  */
79
80
  label( name ) {
80
81
 
81
- warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
82
+ warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.', new StackTrace() ); // @deprecated r179
82
83
 
83
84
  return this.setName( name );
84
85
 
@@ -235,9 +236,24 @@ export const uniform = ( value, type ) => {
235
236
 
236
237
  }
237
238
 
238
- // @TODO: get ConstNode from .traverse() in the future
239
- value = ( value && value.isNode === true ) ? ( value.node && value.node.value ) || value.value : value;
239
+ if ( value && value.isNode === true ) {
240
240
 
241
- return nodeObject( new UniformNode( value, nodeType ) );
241
+ let v = value.value;
242
+
243
+ value.traverse( n => {
244
+
245
+ if ( n.isConstNode === true ) {
246
+
247
+ v = n.value;
248
+
249
+ }
250
+
251
+ } );
252
+
253
+ value = v;
254
+
255
+ }
256
+
257
+ return new UniformNode( value, nodeType );
242
258
 
243
259
  };
@@ -112,6 +112,22 @@ class VarNode extends Node {
112
112
 
113
113
  }
114
114
 
115
+ /**
116
+ * Checks if this node is used for intent.
117
+ *
118
+ * @param {NodeBuilder} builder - The node builder.
119
+ * @returns {boolean} Whether this node is used for intent.
120
+ */
121
+ isIntent( builder ) {
122
+
123
+ const data = builder.getDataFromNode( this );
124
+
125
+ if ( data.forceDeclaration === true ) return false;
126
+
127
+ return this.intent;
128
+
129
+ }
130
+
115
131
  /**
116
132
  * Returns the intent flag of this node.
117
133
  *
@@ -135,7 +151,7 @@ class VarNode extends Node {
135
151
 
136
152
  }
137
153
 
138
- getNodeType( builder ) {
154
+ generateNodeType( builder ) {
139
155
 
140
156
  return this.node.getNodeType( builder );
141
157
 
@@ -149,49 +165,58 @@ class VarNode extends Node {
149
165
 
150
166
  isAssign( builder ) {
151
167
 
152
- const properties = builder.getNodeProperties( this );
168
+ const data = builder.getDataFromNode( this );
153
169
 
154
- let assign = properties.assign;
170
+ return data.assign;
155
171
 
156
- if ( assign !== true ) {
172
+ }
157
173
 
158
- if ( this.node.isShaderCallNodeInternal && this.node.shaderNode.getLayout() === null ) {
174
+ build( ...params ) {
159
175
 
160
- if ( builder.fnCall && builder.fnCall.shaderNode ) {
176
+ const builder = params[ 0 ];
161
177
 
162
- const shaderNodeData = builder.getDataFromNode( this.node.shaderNode );
178
+ if ( this._hasStack( builder ) === false && builder.buildStage === 'setup' ) {
163
179
 
164
- if ( shaderNodeData.hasLoop ) {
180
+ if ( builder.context.nodeLoop || builder.context.nodeBlock ) {
165
181
 
166
- assign = true;
182
+ let addBefore = false;
167
183
 
168
- }
184
+ if ( this.node.isShaderCallNodeInternal && this.node.shaderNode.getLayout() === null ) {
169
185
 
170
- }
186
+ if ( builder.fnCall && builder.fnCall.shaderNode ) {
171
187
 
172
- }
188
+ const shaderNodeData = builder.getDataFromNode( this.node.shaderNode );
173
189
 
174
- }
190
+ if ( shaderNodeData.hasLoop ) {
175
191
 
176
- return assign;
192
+ const data = builder.getDataFromNode( this );
193
+ data.forceDeclaration = true;
177
194
 
178
- }
195
+ addBefore = true;
179
196
 
180
- build( ...params ) {
197
+ }
181
198
 
182
- const builder = params[ 0 ];
199
+ }
183
200
 
184
- if ( this._hasStack( builder ) === false && builder.buildStage === 'setup' ) {
201
+ }
185
202
 
186
- if ( builder.context.nodeLoop || builder.context.nodeBlock ) {
203
+ const baseStack = builder.getBaseStack();
204
+
205
+ if ( addBefore ) {
206
+
207
+ baseStack.addToStackBefore( this );
187
208
 
188
- builder.getBaseStack().addToStack( this );
209
+ } else {
210
+
211
+ baseStack.addToStack( this );
212
+
213
+ }
189
214
 
190
215
  }
191
216
 
192
217
  }
193
218
 
194
- if ( this.intent === true ) {
219
+ if ( this.isIntent( builder ) ) {
195
220
 
196
221
  if ( this.isAssign( builder ) !== true ) {
197
222
 
@@ -227,9 +252,9 @@ class VarNode extends Node {
227
252
 
228
253
  if ( nodeType == 'void' ) {
229
254
 
230
- if ( this.intent !== true ) {
255
+ if ( this.isIntent( builder ) !== true ) {
231
256
 
232
- error( 'TSL: ".toVar()" can not be used with void type.' );
257
+ error( 'TSL: ".toVar()" can not be used with void type.', this.stackTrace );
233
258
 
234
259
  }
235
260
 
@@ -2,7 +2,6 @@ import Node from './Node.js';
2
2
  import { NodeShaderStage } from './constants.js';
3
3
  import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
4
4
  import { subBuild } from './SubBuildNode.js';
5
- import { warn } from '../../utils.js';
6
5
 
7
6
  /**
8
7
  * Class for representing shader varyings as nodes. Varyings are create from
@@ -37,7 +36,7 @@ class VaryingNode extends Node {
37
36
  *
38
37
  * @type {Node}
39
38
  */
40
- this.node = node;
39
+ this.node = subBuild( node, 'VERTEX' );
41
40
 
42
41
  /**
43
42
  * The name of the varying in the shader. If no name is defined,
@@ -105,7 +104,7 @@ class VaryingNode extends Node {
105
104
 
106
105
  }
107
106
 
108
- getNodeType( builder ) {
107
+ generateNodeType( builder ) {
109
108
 
110
109
  // VaryingNode is auto type
111
110
 
@@ -209,19 +208,3 @@ export const vertexStage = ( node ) => varying( node );
209
208
 
210
209
  addMethodChaining( 'toVarying', varying );
211
210
  addMethodChaining( 'toVertexStage', vertexStage );
212
-
213
- // Deprecated
214
-
215
- addMethodChaining( 'varying', ( ...params ) => { // @deprecated, r173
216
-
217
- warn( 'TSL: .varying() has been renamed to .toVarying().' );
218
- return varying( ...params );
219
-
220
- } );
221
-
222
- addMethodChaining( 'vertexStage', ( ...params ) => { // @deprecated, r173
223
-
224
- warn( 'TSL: .vertexStage() has been renamed to .toVertexStage().' );
225
- return varying( ...params );
226
-
227
- } );
@@ -1,6 +1,5 @@
1
1
  import { Fn, If, vec4 } from '../tsl/TSLBase.js';
2
2
  import { mix, min, step } from '../math/MathNode.js';
3
- import { warn } from '../../utils.js';
4
3
 
5
4
  /**
6
5
  * Represents a "Color Burn" blend mode.
@@ -170,66 +169,3 @@ export const unpremultiplyAlpha = /*@__PURE__*/ Fn( ( [ color ] ) => {
170
169
  return vec4( color.rgb.div( color.a ), color.a );
171
170
 
172
171
  }, { color: 'vec4', return: 'vec4' } );
173
-
174
-
175
- // Deprecated
176
-
177
- /**
178
- * @tsl
179
- * @function
180
- * @deprecated since r171. Use {@link blendBurn} instead.
181
- *
182
- * @param {...any} params
183
- * @returns {Function}
184
- */
185
- export const burn = ( ...params ) => { // @deprecated, r171
186
-
187
- warn( 'TSL: "burn" has been renamed. Use "blendBurn" instead.' );
188
- return blendBurn( params );
189
-
190
- };
191
-
192
- /**
193
- * @tsl
194
- * @function
195
- * @deprecated since r171. Use {@link blendDodge} instead.
196
- *
197
- * @param {...any} params
198
- * @returns {Function}
199
- */
200
- export const dodge = ( ...params ) => { // @deprecated, r171
201
-
202
- warn( 'TSL: "dodge" has been renamed. Use "blendDodge" instead.' );
203
- return blendDodge( params );
204
-
205
- };
206
-
207
- /**
208
- * @tsl
209
- * @function
210
- * @deprecated since r171. Use {@link blendScreen} instead.
211
- *
212
- * @param {...any} params
213
- * @returns {Function}
214
- */
215
- export const screen = ( ...params ) => { // @deprecated, r171
216
-
217
- warn( 'TSL: "screen" has been renamed. Use "blendScreen" instead.' );
218
- return blendScreen( params );
219
-
220
- };
221
-
222
- /**
223
- * @tsl
224
- * @function
225
- * @deprecated since r171. Use {@link blendOverlay} instead.
226
- *
227
- * @param {...any} params
228
- * @returns {Function}
229
- */
230
- export const overlay = ( ...params ) => { // @deprecated, r171
231
-
232
- warn( 'TSL: "overlay" has been renamed. Use "blendOverlay" instead.' );
233
- return blendOverlay( params );
234
-
235
- };
@@ -139,3 +139,20 @@ export const cdl = /*@__PURE__*/ Fn( ( [
139
139
  return vec4( v.rgb, color.a );
140
140
 
141
141
  } );
142
+
143
+ /**
144
+ * TSL function for creating a posterize effect which reduces the number of colors
145
+ * in an image, resulting in a more blocky and stylized appearance.
146
+ *
147
+ * @tsl
148
+ * @function
149
+ * @param {Node} sourceNode - The input color.
150
+ * @param {Node} stepsNode - Controls the intensity of the posterization effect. A lower number results in a more blocky appearance.
151
+ * @returns {Node} The posterized color.
152
+ */
153
+ export const posterize = Fn( ( [ source, steps ] ) => {
154
+
155
+ return source.mul( steps ).floor().div( steps );
156
+
157
+ } );
158
+
@@ -135,7 +135,7 @@ export default ColorSpaceNode;
135
135
  * @param {string} targetColorSpace - The target color space.
136
136
  * @returns {ColorSpaceNode}
137
137
  */
138
- export const workingToColorSpace = ( node, targetColorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), WORKING_COLOR_SPACE, targetColorSpace ) );
138
+ export const workingToColorSpace = ( node, targetColorSpace ) => new ColorSpaceNode( nodeObject( node ), WORKING_COLOR_SPACE, targetColorSpace );
139
139
 
140
140
  /**
141
141
  * TSL function for converting a given color node from the given color space to the current working color space.
@@ -146,7 +146,7 @@ export const workingToColorSpace = ( node, targetColorSpace ) => nodeObject( new
146
146
  * @param {string} sourceColorSpace - The source color space.
147
147
  * @returns {ColorSpaceNode}
148
148
  */
149
- export const colorSpaceToWorking = ( node, sourceColorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), sourceColorSpace, WORKING_COLOR_SPACE ) );
149
+ export const colorSpaceToWorking = ( node, sourceColorSpace ) => new ColorSpaceNode( nodeObject( node ), sourceColorSpace, WORKING_COLOR_SPACE );
150
150
 
151
151
  /**
152
152
  * TSL function for converting a given color node from one color space to another one.
@@ -158,7 +158,7 @@ export const colorSpaceToWorking = ( node, sourceColorSpace ) => nodeObject( new
158
158
  * @param {string} targetColorSpace - The target color space.
159
159
  * @returns {ColorSpaceNode}
160
160
  */
161
- export const convertColorSpace = ( node, sourceColorSpace, targetColorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), sourceColorSpace, targetColorSpace ) );
161
+ export const convertColorSpace = ( node, sourceColorSpace, targetColorSpace ) => new ColorSpaceNode( nodeObject( node ), sourceColorSpace, targetColorSpace );
162
162
 
163
163
  addMethodChaining( 'workingToColorSpace', workingToColorSpace );
164
164
  addMethodChaining( 'colorSpaceToWorking', colorSpaceToWorking );
@@ -4,8 +4,9 @@ import { normalView, transformNormalToView } from '../accessors/Normal.js';
4
4
  import { TBNViewMatrix } from '../accessors/AccessorsUtils.js';
5
5
  import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
6
6
 
7
- import { TangentSpaceNormalMap, ObjectSpaceNormalMap } from '../../constants.js';
7
+ import { TangentSpaceNormalMap, ObjectSpaceNormalMap, NoNormalPacking, NormalRGPacking, NormalGAPacking } from '../../constants.js';
8
8
  import { directionToFaceDirection } from './FrontFacingNode.js';
9
+ import { unpackNormal } from '../utils/Packing.js';
9
10
  import { error } from '../../utils.js';
10
11
 
11
12
  /**
@@ -58,19 +59,53 @@ class NormalMapNode extends TempNode {
58
59
  */
59
60
  this.normalMapType = TangentSpaceNormalMap;
60
61
 
62
+ /**
63
+ * Controls how to unpack the sampled normal map values.
64
+ *
65
+ * @type {string}
66
+ * @default NoNormalPacking
67
+ */
68
+ this.unpackNormalMode = NoNormalPacking;
69
+
61
70
  }
62
71
 
63
- setup( { material } ) {
72
+ setup( builder ) {
64
73
 
65
- const { normalMapType, scaleNode } = this;
74
+ const { normalMapType, scaleNode, unpackNormalMode } = this;
66
75
 
67
76
  let normalMap = this.node.mul( 2.0 ).sub( 1.0 );
68
77
 
78
+ if ( normalMapType === TangentSpaceNormalMap ) {
79
+
80
+ if ( unpackNormalMode === NormalRGPacking ) {
81
+
82
+ normalMap = unpackNormal( normalMap.xy );
83
+
84
+ } else if ( unpackNormalMode === NormalGAPacking ) {
85
+
86
+ normalMap = unpackNormal( normalMap.yw );
87
+
88
+ } else if ( unpackNormalMode !== NoNormalPacking ) {
89
+
90
+ error( `THREE.NodeMaterial: Unexpected unpack normal mode: ${ unpackNormalMode }` );
91
+
92
+ }
93
+
94
+ } else {
95
+
96
+ if ( unpackNormalMode !== NoNormalPacking ) {
97
+
98
+ error( `THREE.NodeMaterial: Normal map type '${ normalMapType }' is not compatible with unpack normal mode '${ unpackNormalMode }'` );
99
+
100
+ }
101
+
102
+ }
103
+
69
104
  if ( scaleNode !== null ) {
70
105
 
71
106
  let scale = scaleNode;
72
107
 
73
- if ( material.flatShading === true ) {
108
+ if ( builder.isFlatShading() === true ) {
74
109
 
75
110
  scale = directionToFaceDirection( scale );
76
111
 
@@ -1,11 +1,11 @@
1
1
  import TempNode from '../core/TempNode.js';
2
2
  import { default as TextureNode/*, texture*/ } from '../accessors/TextureNode.js';
3
3
  import { NodeUpdateType } from '../core/constants.js';
4
- import { nodeObject } from '../tsl/TSLBase.js';
4
+ import { context } from '../tsl/TSLBase.js';
5
5
  import { uniform } from '../core/UniformNode.js';
6
6
  import { viewZToOrthographicDepth, perspectiveDepthToViewZ } from './ViewportDepthNode.js';
7
7
 
8
- import { HalfFloatType/*, FloatType*/ } from '../../constants.js';
8
+ import { HalfFloatType, FloatType } from '../../constants.js';
9
9
  import { Vector2 } from '../../math/Vector2.js';
10
10
  import { Vector4 } from '../../math/Vector4.js';
11
11
  import { DepthTexture } from '../../textures/DepthTexture.js';
@@ -44,13 +44,23 @@ class PassTextureNode extends TextureNode {
44
44
  */
45
45
  this.passNode = passNode;
46
46
 
47
+ /**
48
+ * This flag can be used for type testing.
49
+ *
50
+ * @type {boolean}
51
+ * @default true
52
+ * @readonly
53
+ */
54
+ this.isPassTextureNode = true;
55
+
47
56
  this.setUpdateMatrix( false );
48
57
 
49
58
  }
50
59
 
51
60
  setup( builder ) {
52
61
 
53
- this.passNode.build( builder );
62
+ const properties = builder.getNodeProperties( this );
63
+ properties.passNode = this.passNode;
54
64
 
55
65
  return super.setup( builder );
56
66
 
@@ -107,6 +117,15 @@ class PassMultipleTextureNode extends PassTextureNode {
107
117
  */
108
118
  this.previousTexture = previousTexture;
109
119
 
120
+ /**
121
+ * This flag can be used for type testing.
122
+ *
123
+ * @type {boolean}
124
+ * @default true
125
+ * @readonly
126
+ */
127
+ this.isPassMultipleTextureNode = true;
128
+
110
129
  }
111
130
 
112
131
  /**
@@ -150,7 +169,7 @@ class PassMultipleTextureNode extends PassTextureNode {
150
169
  * via MRT for further processing.
151
170
  *
152
171
  * ```js
153
- * const postProcessing = new PostProcessing( renderer );
172
+ * const postProcessing = new RenderPipeline( renderer );
154
173
  *
155
174
  * const scenePass = pass( scene, camera );
156
175
  *
@@ -248,6 +267,45 @@ class PassNode extends TempNode {
248
267
  */
249
268
  this.renderTarget = renderTarget;
250
269
 
270
+ /**
271
+ * An optional override material for the pass.
272
+ *
273
+ * @type {Material|null}
274
+ */
275
+ this.overrideMaterial = null;
276
+
277
+ /**
278
+ * Whether the pass is transparent.
279
+ *
280
+ * @type {boolean}
281
+ * @default false
282
+ */
283
+ this.transparent = true;
284
+
285
+ /**
286
+ * Whether the pass is opaque.
287
+ *
288
+ * @type {boolean}
289
+ * @default true
290
+ */
291
+ this.opaque = true;
292
+
293
+ /**
294
+ * An optional global context for the pass.
295
+ *
296
+ * @type {ContextNode|null}
297
+ */
298
+ this.contextNode = null;
299
+
300
+ /**
301
+ * A cache for the context node.
302
+ *
303
+ * @private
304
+ * @type {?Object}
305
+ * @default null
306
+ */
307
+ this._contextNodeCache = null;
308
+
251
309
  /**
252
310
  * A dictionary holding the internal result textures.
253
311
  *
@@ -584,7 +642,7 @@ class PassNode extends TempNode {
584
642
 
585
643
  if ( textureNode === undefined ) {
586
644
 
587
- textureNode = nodeObject( new PassMultipleTextureNode( this, name ) );
645
+ textureNode = new PassMultipleTextureNode( this, name );
588
646
  textureNode.updateTexture();
589
647
  this._textureNodes[ name ] = textureNode;
590
648
 
@@ -608,7 +666,7 @@ class PassNode extends TempNode {
608
666
 
609
667
  if ( this._textureNodes[ name ] === undefined ) this.getTextureNode( name );
610
668
 
611
- textureNode = nodeObject( new PassMultipleTextureNode( this, name, true ) );
669
+ textureNode = new PassMultipleTextureNode( this, name, true );
612
670
  textureNode.updateTexture();
613
671
  this._previousTextureNodes[ name ] = textureNode;
614
672
 
@@ -697,7 +755,13 @@ class PassNode extends TempNode {
697
755
 
698
756
  this.renderTarget.samples = this.options.samples === undefined ? renderer.samples : this.options.samples;
699
757
 
700
- this.renderTarget.texture.type = renderer.getColorBufferType();
758
+ this.renderTarget.texture.type = renderer.getOutputBufferType();
759
+
760
+ if ( renderer.reversedDepthBuffer === true ) {
761
+
762
+ this.renderTarget.depthTexture.type = FloatType;
763
+
764
+ }
701
765
 
702
766
  return this.scope === PassNode.COLOR ? this.getTextureNode() : this.getLinearDepthNode();
703
767
 
@@ -738,7 +802,11 @@ class PassNode extends TempNode {
738
802
  const currentRenderTarget = renderer.getRenderTarget();
739
803
  const currentMRT = renderer.getMRT();
740
804
  const currentAutoClear = renderer.autoClear;
805
+ const currentTransparent = renderer.transparent;
806
+ const currentOpaque = renderer.opaque;
741
807
  const currentMask = camera.layers.mask;
808
+ const currentContextNode = renderer.contextNode;
809
+ const currentOverrideMaterial = scene.overrideMaterial;
742
810
 
743
811
  this._cameraNear.value = camera.near;
744
812
  this._cameraFar.value = camera.far;
@@ -755,9 +823,32 @@ class PassNode extends TempNode {
755
823
 
756
824
  }
757
825
 
826
+ if ( this.overrideMaterial !== null ) {
827
+
828
+ scene.overrideMaterial = this.overrideMaterial;
829
+
830
+ }
831
+
758
832
  renderer.setRenderTarget( this.renderTarget );
759
833
  renderer.setMRT( this._mrt );
760
834
  renderer.autoClear = true;
835
+ renderer.transparent = this.transparent;
836
+ renderer.opaque = this.opaque;
837
+
838
+ if ( this.contextNode !== null ) {
839
+
840
+ if ( this._contextNodeCache === null || this._contextNodeCache.version !== this.version ) {
841
+
842
+ this._contextNodeCache = {
843
+ version: this.version,
844
+ context: context( { ...renderer.contextNode.getFlowContextData(), ...this.contextNode.getFlowContextData() } )
845
+ };
846
+
847
+ }
848
+
849
+ renderer.contextNode = this._contextNodeCache.context;
850
+
851
+ }
761
852
 
762
853
  const currentSceneName = scene.name;
763
854
 
@@ -766,10 +857,14 @@ class PassNode extends TempNode {
766
857
  renderer.render( scene, camera );
767
858
 
768
859
  scene.name = currentSceneName;
860
+ scene.overrideMaterial = currentOverrideMaterial;
769
861
 
770
862
  renderer.setRenderTarget( currentRenderTarget );
771
863
  renderer.setMRT( currentMRT );
772
864
  renderer.autoClear = currentAutoClear;
865
+ renderer.transparent = currentTransparent;
866
+ renderer.opaque = currentOpaque;
867
+ renderer.contextNode = currentContextNode;
773
868
 
774
869
  camera.layers.mask = currentMask;
775
870
 
@@ -791,8 +886,26 @@ class PassNode extends TempNode {
791
886
 
792
887
  this.renderTarget.setSize( effectiveWidth, effectiveHeight );
793
888
 
794
- if ( this._scissor !== null ) this.renderTarget.scissor.copy( this._scissor );
795
- if ( this._viewport !== null ) this.renderTarget.viewport.copy( this._viewport );
889
+ // scissor
890
+
891
+ if ( this._scissor !== null ) {
892
+
893
+ this.renderTarget.scissor.copy( this._scissor ).multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();
894
+ this.renderTarget.scissorTest = true;
895
+
896
+ } else {
897
+
898
+ this.renderTarget.scissorTest = false;
899
+
900
+ }
901
+
902
+ // viewport
903
+
904
+ if ( this._viewport !== null ) {
905
+
906
+ this.renderTarget.viewport.copy( this._viewport ).multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();
907
+
908
+ }
796
909
 
797
910
  }
798
911
 
@@ -827,8 +940,6 @@ class PassNode extends TempNode {
827
940
 
828
941
  }
829
942
 
830
- this._scissor.multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();
831
-
832
943
  }
833
944
 
834
945
  }
@@ -863,8 +974,6 @@ class PassNode extends TempNode {
863
974
 
864
975
  }
865
976
 
866
- this._viewport.multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();
867
-
868
977
  }
869
978
 
870
979
  }
@@ -920,7 +1029,7 @@ export default PassNode;
920
1029
  * @param {Object} options - Options for the internal render target.
921
1030
  * @returns {PassNode}
922
1031
  */
923
- export const pass = ( scene, camera, options ) => nodeObject( new PassNode( PassNode.COLOR, scene, camera, options ) );
1032
+ export const pass = ( scene, camera, options ) => new PassNode( PassNode.COLOR, scene, camera, options );
924
1033
 
925
1034
  /**
926
1035
  * TSL function for creating a pass texture node.
@@ -931,7 +1040,7 @@ export const pass = ( scene, camera, options ) => nodeObject( new PassNode( Pass
931
1040
  * @param {Texture} texture - The output texture.
932
1041
  * @returns {PassTextureNode}
933
1042
  */
934
- export const passTexture = ( pass, texture ) => nodeObject( new PassTextureNode( pass, texture ) );
1043
+ export const passTexture = ( pass, texture ) => new PassTextureNode( pass, texture );
935
1044
 
936
1045
  /**
937
1046
  * TSL function for creating a depth pass node.
@@ -943,4 +1052,4 @@ export const passTexture = ( pass, texture ) => nodeObject( new PassTextureNode(
943
1052
  * @param {Object} options - Options for the internal render target.
944
1053
  * @returns {PassNode}
945
1054
  */
946
- export const depthPass = ( scene, camera, options ) => nodeObject( new PassNode( PassNode.DEPTH, scene, camera, options ) );
1055
+ export const depthPass = ( scene, camera, options ) => new PassNode( PassNode.DEPTH, scene, camera, options );