@plastic-software/three 0.179.0 → 0.181.1

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 (430) hide show
  1. package/build/three.cjs +1108 -591
  2. package/build/three.core.js +616 -345
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +488 -250
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +37 -6
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +6576 -2152
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +6575 -2151
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  13. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  14. package/examples/jsm/Addons.js +1 -1
  15. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  16. package/examples/jsm/controls/ArcballControls.js +8 -8
  17. package/examples/jsm/controls/DragControls.js +7 -57
  18. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  19. package/examples/jsm/controls/FlyControls.js +1 -1
  20. package/examples/jsm/controls/OrbitControls.js +2 -2
  21. package/examples/jsm/controls/PointerLockControls.js +2 -10
  22. package/examples/jsm/controls/TrackballControls.js +1 -1
  23. package/examples/jsm/controls/TransformControls.js +1 -1
  24. package/examples/jsm/effects/AsciiEffect.js +8 -8
  25. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  26. package/examples/jsm/exporters/EXRExporter.js +1 -1
  27. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  28. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  29. package/examples/jsm/exporters/PLYExporter.js +1 -1
  30. package/examples/jsm/exporters/USDZExporter.js +9 -2
  31. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  32. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  33. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  34. package/examples/jsm/geometries/TextGeometry.js +3 -2
  35. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  36. package/examples/jsm/helpers/ViewHelper.js +43 -5
  37. package/examples/jsm/inspector/Inspector.js +427 -0
  38. package/examples/jsm/inspector/RendererInspector.js +415 -0
  39. package/examples/jsm/inspector/tabs/Console.js +204 -0
  40. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  41. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  42. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  43. package/examples/jsm/inspector/ui/Graph.js +95 -0
  44. package/examples/jsm/inspector/ui/Item.js +170 -0
  45. package/examples/jsm/inspector/ui/List.js +75 -0
  46. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  47. package/examples/jsm/inspector/ui/Style.js +654 -0
  48. package/examples/jsm/inspector/ui/Tab.js +46 -0
  49. package/examples/jsm/inspector/ui/Values.js +423 -0
  50. package/examples/jsm/inspector/ui/utils.js +56 -0
  51. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  52. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  53. package/examples/jsm/interactive/SelectionBox.js +30 -0
  54. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  55. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  56. package/examples/jsm/lines/Line2.js +3 -3
  57. package/examples/jsm/lines/LineGeometry.js +1 -1
  58. package/examples/jsm/lines/LineSegments2.js +2 -2
  59. package/examples/jsm/lines/Wireframe.js +2 -2
  60. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  61. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  62. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  63. package/examples/jsm/loaders/3MFLoader.js +1 -1
  64. package/examples/jsm/loaders/ColladaLoader.js +3 -3
  65. package/examples/jsm/loaders/DDSLoader.js +1 -1
  66. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  67. package/examples/jsm/loaders/EXRLoader.js +5 -5
  68. package/examples/jsm/loaders/FBXLoader.js +2 -2
  69. package/examples/jsm/loaders/FontLoader.js +23 -5
  70. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  71. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  72. package/examples/jsm/loaders/HDRLoader.js +486 -0
  73. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  74. package/examples/jsm/loaders/KTXLoader.js +2 -2
  75. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  76. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  77. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  78. package/examples/jsm/loaders/LWOLoader.js +2 -2
  79. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  80. package/examples/jsm/loaders/OBJLoader.js +1 -1
  81. package/examples/jsm/loaders/PDBLoader.js +1 -1
  82. package/examples/jsm/loaders/RGBELoader.js +7 -473
  83. package/examples/jsm/loaders/SVGLoader.js +2 -2
  84. package/examples/jsm/loaders/TTFLoader.js +4 -4
  85. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  86. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  87. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  88. package/examples/jsm/math/ColorSpaces.js +19 -1
  89. package/examples/jsm/math/ConvexHull.js +3 -3
  90. package/examples/jsm/math/ImprovedNoise.js +1 -1
  91. package/examples/jsm/math/Lut.js +2 -2
  92. package/examples/jsm/math/SimplexNoise.js +1 -1
  93. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  94. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  95. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  96. package/examples/jsm/misc/TubePainter.js +383 -40
  97. package/examples/jsm/misc/Volume.js +1 -1
  98. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  99. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  100. package/examples/jsm/objects/Sky.js +1 -1
  101. package/examples/jsm/objects/SkyMesh.js +1 -1
  102. package/examples/jsm/objects/Water.js +3 -3
  103. package/examples/jsm/objects/WaterMesh.js +6 -6
  104. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  105. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  106. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  107. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  108. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  109. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  110. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  111. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  112. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  113. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  114. package/examples/jsm/shaders/BokehShader.js +1 -1
  115. package/examples/jsm/shaders/BokehShader2.js +1 -1
  116. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  117. package/examples/jsm/shaders/FocusShader.js +1 -1
  118. package/examples/jsm/shaders/GTAOShader.js +2 -2
  119. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  120. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  122. package/examples/jsm/shaders/SSRShader.js +1 -1
  123. package/examples/jsm/shaders/SepiaShader.js +1 -1
  124. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  125. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  126. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +1 -1
  127. package/examples/jsm/shaders/VignetteShader.js +1 -1
  128. package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
  129. package/examples/jsm/transpiler/TSLEncoder.js +9 -10
  130. package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
  131. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  132. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  133. package/examples/jsm/tsl/display/BloomNode.js +7 -3
  134. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
  135. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  136. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  137. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  138. package/examples/jsm/tsl/display/GaussianBlurNode.js +49 -35
  139. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  140. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  141. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  142. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  143. package/examples/jsm/tsl/display/TRAANode.js +124 -7
  144. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  145. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  146. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  147. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  148. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  149. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  150. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  151. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  152. package/package.json +5 -10
  153. package/src/Three.Core.js +4 -2
  154. package/src/Three.TSL.js +36 -5
  155. package/src/Three.WebGPU.Nodes.js +2 -0
  156. package/src/Three.WebGPU.js +2 -0
  157. package/src/animation/AnimationClip.js +20 -4
  158. package/src/animation/AnimationMixer.js +3 -3
  159. package/src/animation/AnimationObjectGroup.js +2 -1
  160. package/src/animation/KeyframeTrack.js +7 -6
  161. package/src/animation/PropertyBinding.js +12 -11
  162. package/src/audio/Audio.js +10 -9
  163. package/src/audio/PositionalAudio.js +1 -1
  164. package/src/cameras/OrthographicCamera.js +1 -1
  165. package/src/cameras/PerspectiveCamera.js +1 -1
  166. package/src/cameras/StereoCamera.js +2 -2
  167. package/src/constants.js +11 -3
  168. package/src/core/BufferGeometry.js +10 -10
  169. package/src/core/EventDispatcher.js +1 -1
  170. package/src/core/InterleavedBuffer.js +1 -1
  171. package/src/core/InterleavedBufferAttribute.js +3 -2
  172. package/src/core/Object3D.js +3 -2
  173. package/src/core/Raycaster.js +2 -1
  174. package/src/core/RenderTarget.js +10 -1
  175. package/src/extras/Controls.js +5 -4
  176. package/src/extras/DataUtils.js +2 -1
  177. package/src/extras/Earcut.js +6 -0
  178. package/src/extras/ImageUtils.js +2 -2
  179. package/src/extras/PMREMGenerator.js +268 -55
  180. package/src/extras/TextureUtils.js +2 -1
  181. package/src/extras/core/Curve.js +2 -1
  182. package/src/extras/core/Interpolations.js +7 -1
  183. package/src/extras/core/ShapePath.js +4 -4
  184. package/src/extras/lib/earcut.js +8 -8
  185. package/src/geometries/BoxGeometry.js +1 -0
  186. package/src/geometries/CapsuleGeometry.js +1 -0
  187. package/src/geometries/CircleGeometry.js +1 -0
  188. package/src/geometries/ConeGeometry.js +1 -0
  189. package/src/geometries/CylinderGeometry.js +1 -0
  190. package/src/geometries/DodecahedronGeometry.js +1 -0
  191. package/src/geometries/ExtrudeGeometry.js +8 -6
  192. package/src/geometries/IcosahedronGeometry.js +1 -0
  193. package/src/geometries/LatheGeometry.js +1 -0
  194. package/src/geometries/OctahedronGeometry.js +1 -0
  195. package/src/geometries/PlaneGeometry.js +1 -0
  196. package/src/geometries/RingGeometry.js +1 -0
  197. package/src/geometries/ShapeGeometry.js +1 -0
  198. package/src/geometries/SphereGeometry.js +1 -0
  199. package/src/geometries/TetrahedronGeometry.js +1 -0
  200. package/src/geometries/TorusGeometry.js +1 -0
  201. package/src/geometries/TorusKnotGeometry.js +1 -0
  202. package/src/geometries/TubeGeometry.js +1 -0
  203. package/src/helpers/CameraHelper.js +1 -1
  204. package/src/lights/webgpu/ProjectorLight.js +1 -1
  205. package/src/loaders/AnimationLoader.js +2 -1
  206. package/src/loaders/AudioLoader.js +2 -1
  207. package/src/loaders/BufferGeometryLoader.js +2 -2
  208. package/src/loaders/Cache.js +2 -2
  209. package/src/loaders/DataTextureLoader.js +1 -1
  210. package/src/loaders/FileLoader.js +3 -2
  211. package/src/loaders/ImageBitmapLoader.js +5 -4
  212. package/src/loaders/ImageLoader.js +1 -1
  213. package/src/loaders/Loader.js +3 -3
  214. package/src/loaders/LoadingManager.js +25 -3
  215. package/src/loaders/MaterialLoader.js +3 -2
  216. package/src/loaders/ObjectLoader.js +13 -13
  217. package/src/loaders/TextureLoader.js +1 -1
  218. package/src/loaders/nodes/NodeLoader.js +3 -2
  219. package/src/materials/Material.js +16 -3
  220. package/src/materials/MeshBasicMaterial.js +1 -0
  221. package/src/materials/MeshDepthMaterial.js +1 -0
  222. package/src/materials/MeshDistanceMaterial.js +1 -1
  223. package/src/materials/MeshLambertMaterial.js +2 -1
  224. package/src/materials/MeshMatcapMaterial.js +22 -0
  225. package/src/materials/MeshNormalMaterial.js +1 -0
  226. package/src/materials/MeshPhongMaterial.js +2 -1
  227. package/src/materials/MeshPhysicalMaterial.js +2 -1
  228. package/src/materials/MeshStandardMaterial.js +8 -7
  229. package/src/materials/MeshToonMaterial.js +1 -0
  230. package/src/materials/PointsMaterial.js +1 -1
  231. package/src/materials/ShaderMaterial.js +2 -2
  232. package/src/materials/nodes/Line2NodeMaterial.js +2 -2
  233. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  234. package/src/materials/nodes/NodeMaterial.js +62 -22
  235. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  236. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  237. package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
  238. package/src/math/Color.js +6 -5
  239. package/src/math/ColorManagement.js +9 -3
  240. package/src/math/Cylindrical.js +1 -1
  241. package/src/math/Euler.js +2 -1
  242. package/src/math/MathUtils.js +13 -11
  243. package/src/math/Matrix2.js +1 -1
  244. package/src/math/Matrix3.js +2 -2
  245. package/src/math/Matrix4.js +7 -7
  246. package/src/math/Plane.js +1 -1
  247. package/src/math/Quaternion.js +68 -66
  248. package/src/math/Spherical.js +1 -1
  249. package/src/nodes/Nodes.js +4 -1
  250. package/src/nodes/TSL.js +4 -1
  251. package/src/nodes/accessors/BufferNode.js +1 -1
  252. package/src/nodes/accessors/Camera.js +133 -7
  253. package/src/nodes/accessors/ClippingNode.js +6 -5
  254. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  255. package/src/nodes/accessors/InstanceNode.js +25 -5
  256. package/src/nodes/accessors/Lights.js +10 -0
  257. package/src/nodes/accessors/Normal.js +5 -4
  258. package/src/nodes/accessors/Object3DNode.js +1 -1
  259. package/src/nodes/accessors/Position.js +18 -2
  260. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  261. package/src/nodes/accessors/ReferenceNode.js +3 -2
  262. package/src/nodes/accessors/SceneNode.js +2 -1
  263. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  264. package/src/nodes/accessors/StorageTextureNode.js +22 -0
  265. package/src/nodes/accessors/Texture3DNode.js +14 -1
  266. package/src/nodes/accessors/TextureNode.js +130 -44
  267. package/src/nodes/code/FunctionCallNode.js +24 -4
  268. package/src/nodes/code/FunctionNode.js +23 -0
  269. package/src/nodes/core/ArrayNode.js +1 -0
  270. package/src/nodes/core/AssignNode.js +4 -3
  271. package/src/nodes/core/AttributeNode.js +2 -1
  272. package/src/nodes/core/ContextNode.js +29 -10
  273. package/src/nodes/core/IndexNode.js +2 -2
  274. package/src/nodes/core/InputNode.js +2 -1
  275. package/src/nodes/core/InspectorNode.js +128 -0
  276. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
  277. package/src/nodes/core/Node.js +152 -31
  278. package/src/nodes/core/NodeBuilder.js +183 -35
  279. package/src/nodes/core/NodeFrame.js +21 -21
  280. package/src/nodes/core/NodeFunction.js +2 -1
  281. package/src/nodes/core/NodeParser.js +2 -1
  282. package/src/nodes/core/NodeUniform.js +1 -1
  283. package/src/nodes/core/NodeUtils.js +17 -91
  284. package/src/nodes/core/ParameterNode.js +31 -0
  285. package/src/nodes/core/PropertyNode.js +7 -0
  286. package/src/nodes/core/StackNode.js +43 -16
  287. package/src/nodes/core/StructNode.js +5 -5
  288. package/src/nodes/core/StructTypeNode.js +1 -0
  289. package/src/nodes/core/SubBuildNode.js +2 -2
  290. package/src/nodes/core/UniformNode.js +18 -10
  291. package/src/nodes/core/VarNode.js +70 -33
  292. package/src/nodes/core/VaryingNode.js +3 -2
  293. package/src/nodes/display/BlendModes.js +5 -4
  294. package/src/nodes/display/BumpMapNode.js +1 -1
  295. package/src/nodes/display/ColorAdjustment.js +1 -1
  296. package/src/nodes/display/FrontFacingNode.js +4 -8
  297. package/src/nodes/display/NormalMapNode.js +2 -1
  298. package/src/nodes/display/PassNode.js +52 -11
  299. package/src/nodes/display/RenderOutputNode.js +28 -2
  300. package/src/nodes/display/ScreenNode.js +44 -14
  301. package/src/nodes/display/ToneMappingNode.js +31 -4
  302. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  303. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  304. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  305. package/src/nodes/display/ViewportTextureNode.js +42 -12
  306. package/src/nodes/fog/Fog.js +3 -2
  307. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  308. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  309. package/src/nodes/functions/BasicLightingModel.js +2 -1
  310. package/src/nodes/functions/PhysicalLightingModel.js +3 -2
  311. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  312. package/src/nodes/geometry/RangeNode.js +40 -4
  313. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  314. package/src/nodes/gpgpu/ComputeNode.js +17 -5
  315. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  316. package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
  317. package/src/nodes/lighting/EnvironmentNode.js +6 -6
  318. package/src/nodes/lighting/LightsNode.js +3 -4
  319. package/src/nodes/lighting/PointShadowNode.js +6 -0
  320. package/src/nodes/lighting/ShadowFilterNode.js +2 -0
  321. package/src/nodes/lighting/ShadowNode.js +75 -8
  322. package/src/nodes/math/BitcastNode.js +156 -0
  323. package/src/nodes/math/ConditionalNode.js +24 -7
  324. package/src/nodes/math/MathNode.js +25 -19
  325. package/src/nodes/math/OperatorNode.js +7 -5
  326. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  327. package/src/nodes/shapes/Shapes.js +1 -1
  328. package/src/nodes/tsl/TSLBase.js +5 -2
  329. package/src/nodes/tsl/TSLCore.js +460 -159
  330. package/src/nodes/utils/DebugNode.js +2 -1
  331. package/src/nodes/utils/EventNode.js +36 -0
  332. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  333. package/src/nodes/utils/JoinNode.js +6 -3
  334. package/src/nodes/utils/LoopNode.js +20 -24
  335. package/src/nodes/utils/MemberNode.js +59 -7
  336. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  337. package/src/nodes/utils/RTTNode.js +13 -3
  338. package/src/nodes/utils/ReflectorNode.js +58 -7
  339. package/src/nodes/utils/SampleNode.js +12 -2
  340. package/src/nodes/utils/SplitNode.js +11 -0
  341. package/src/nodes/utils/Timer.js +0 -47
  342. package/src/objects/BatchedMesh.js +2 -2
  343. package/src/objects/LOD.js +1 -1
  344. package/src/objects/Line.js +2 -1
  345. package/src/objects/LineSegments.js +2 -1
  346. package/src/objects/Skeleton.js +3 -2
  347. package/src/objects/SkinnedMesh.js +3 -1
  348. package/src/objects/Sprite.js +4 -3
  349. package/src/renderers/WebGLRenderer.js +48 -41
  350. package/src/renderers/common/Animation.js +13 -1
  351. package/src/renderers/common/Attributes.js +1 -1
  352. package/src/renderers/common/Backend.js +108 -27
  353. package/src/renderers/common/Background.js +2 -1
  354. package/src/renderers/common/Bindings.js +58 -2
  355. package/src/renderers/common/CanvasTarget.js +341 -0
  356. package/src/renderers/common/ChainMap.js +1 -1
  357. package/src/renderers/common/DataMap.js +1 -1
  358. package/src/renderers/common/Geometries.js +26 -0
  359. package/src/renderers/common/Info.js +4 -2
  360. package/src/renderers/common/InspectorBase.js +146 -0
  361. package/src/renderers/common/Pipelines.js +1 -1
  362. package/src/renderers/common/PostProcessing.js +6 -25
  363. package/src/renderers/common/QuadMesh.js +7 -1
  364. package/src/renderers/common/RenderContext.js +2 -2
  365. package/src/renderers/common/RenderList.js +7 -3
  366. package/src/renderers/common/RenderObject.js +16 -2
  367. package/src/renderers/common/RenderObjects.js +1 -1
  368. package/src/renderers/common/Renderer.js +473 -245
  369. package/src/renderers/common/RendererUtils.js +9 -0
  370. package/src/renderers/common/SampledTexture.js +9 -1
  371. package/src/renderers/common/Sampler.js +50 -12
  372. package/src/renderers/common/StorageTexture.js +9 -1
  373. package/src/renderers/common/Textures.js +121 -45
  374. package/src/renderers/common/TimestampQueryPool.js +65 -3
  375. package/src/renderers/common/UniformsGroup.js +2 -1
  376. package/src/renderers/common/XRManager.js +42 -22
  377. package/src/renderers/common/extras/PMREMGenerator.js +160 -65
  378. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  379. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  380. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  381. package/src/renderers/common/nodes/Nodes.js +38 -16
  382. package/src/renderers/shaders/DFGLUTData.js +64 -0
  383. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  384. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  386. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  387. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  388. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  389. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  390. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  391. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -15
  392. package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
  393. package/src/renderers/shaders/UniformsLib.js +1 -0
  394. package/src/renderers/shaders/UniformsUtils.js +25 -4
  395. package/src/renderers/webgl/WebGLCapabilities.js +2 -1
  396. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  397. package/src/renderers/webgl/WebGLInfo.js +3 -1
  398. package/src/renderers/webgl/WebGLProgram.js +15 -14
  399. package/src/renderers/webgl/WebGLPrograms.js +2 -1
  400. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  401. package/src/renderers/webgl/WebGLState.js +15 -14
  402. package/src/renderers/webgl/WebGLTextures.js +19 -14
  403. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  404. package/src/renderers/webgl/WebGLUtils.js +3 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
  407. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  408. package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
  409. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -19
  410. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  411. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  412. package/src/renderers/webgpu/WebGPUBackend.js +153 -123
  413. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  414. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  415. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
  416. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  417. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
  418. package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
  419. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
  420. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  421. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
  422. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  423. package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
  424. package/src/renderers/webxr/WebXRManager.js +42 -26
  425. package/src/textures/ExternalTexture.js +15 -4
  426. package/src/textures/Source.js +3 -2
  427. package/src/textures/Texture.js +3 -2
  428. package/src/textures/VideoTexture.js +2 -3
  429. package/src/utils.js +67 -3
  430. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
@@ -1,9 +1,10 @@
1
1
  import { uniform } from '../core/UniformNode.js';
2
2
  import { renderGroup, sharedUniformGroup } from '../core/UniformGroupNode.js';
3
3
  import { Vector3 } from '../../math/Vector3.js';
4
- import { Fn } from '../tsl/TSLBase.js';
4
+ import { Fn, vec4 } from '../tsl/TSLBase.js';
5
5
  import { uniformArray } from './UniformArrayNode.js';
6
6
  import { builtin } from './BuiltinNode.js';
7
+ import { screenSize } from '../display/ScreenNode.js';
7
8
 
8
9
  /**
9
10
  * TSL object that represents the current `index` value of the camera if used ArrayCamera.
@@ -51,7 +52,7 @@ export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
51
52
 
52
53
  const cameraProjectionMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraProjectionMatrices' );
53
54
 
54
- cameraProjectionMatrix = cameraProjectionMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toVar( 'cameraProjectionMatrix' );
55
+ cameraProjectionMatrix = cameraProjectionMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraProjectionMatrix' );
55
56
 
56
57
  } else {
57
58
 
@@ -85,7 +86,7 @@ export const cameraProjectionMatrixInverse = /*@__PURE__*/ ( Fn( ( { camera } )
85
86
 
86
87
  const cameraProjectionMatricesInverse = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraProjectionMatricesInverse' );
87
88
 
88
- cameraProjectionMatrixInverse = cameraProjectionMatricesInverse.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toVar( 'cameraProjectionMatrixInverse' );
89
+ cameraProjectionMatrixInverse = cameraProjectionMatricesInverse.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraProjectionMatrixInverse' );
89
90
 
90
91
  } else {
91
92
 
@@ -119,7 +120,7 @@ export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
119
120
 
120
121
  const cameraViewMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraViewMatrices' );
121
122
 
122
- cameraViewMatrix = cameraViewMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toVar( 'cameraViewMatrix' );
123
+ cameraViewMatrix = cameraViewMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraViewMatrix' );
123
124
 
124
125
  } else {
125
126
 
@@ -137,7 +138,33 @@ export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
137
138
  * @tsl
138
139
  * @type {UniformNode<mat4>}
139
140
  */
140
- export const cameraWorldMatrix = /*@__PURE__*/ uniform( 'mat4' ).setName( 'cameraWorldMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorld );
141
+ export const cameraWorldMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
142
+
143
+ let cameraWorldMatrix;
144
+
145
+ if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
146
+
147
+ const matrices = [];
148
+
149
+ for ( const subCamera of camera.cameras ) {
150
+
151
+ matrices.push( subCamera.matrixWorld );
152
+
153
+ }
154
+
155
+ const cameraWorldMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraWorldMatrices' );
156
+
157
+ cameraWorldMatrix = cameraWorldMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraWorldMatrix' );
158
+
159
+ } else {
160
+
161
+ cameraWorldMatrix = uniform( 'mat4' ).setName( 'cameraWorldMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorld );
162
+
163
+ }
164
+
165
+ return cameraWorldMatrix;
166
+
167
+ } ).once() )();
141
168
 
142
169
  /**
143
170
  * TSL object that represents the normal matrix of the camera used for the current render.
@@ -145,7 +172,33 @@ export const cameraWorldMatrix = /*@__PURE__*/ uniform( 'mat4' ).setName( 'camer
145
172
  * @tsl
146
173
  * @type {UniformNode<mat3>}
147
174
  */
148
- export const cameraNormalMatrix = /*@__PURE__*/ uniform( 'mat3' ).setName( 'cameraNormalMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.normalMatrix );
175
+ export const cameraNormalMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
176
+
177
+ let cameraNormalMatrix;
178
+
179
+ if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
180
+
181
+ const matrices = [];
182
+
183
+ for ( const subCamera of camera.cameras ) {
184
+
185
+ matrices.push( subCamera.normalMatrix );
186
+
187
+ }
188
+
189
+ const cameraNormalMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraNormalMatrices' );
190
+
191
+ cameraNormalMatrix = cameraNormalMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraNormalMatrix' );
192
+
193
+ } else {
194
+
195
+ cameraNormalMatrix = uniform( 'mat3' ).setName( 'cameraNormalMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.normalMatrix );
196
+
197
+ }
198
+
199
+ return cameraNormalMatrix;
200
+
201
+ } ).once() )();
149
202
 
150
203
  /**
151
204
  * TSL object that represents the position in world space of the camera used for the current render.
@@ -153,4 +206,77 @@ export const cameraNormalMatrix = /*@__PURE__*/ uniform( 'mat3' ).setName( 'came
153
206
  * @tsl
154
207
  * @type {UniformNode<vec3>}
155
208
  */
156
- export const cameraPosition = /*@__PURE__*/ uniform( new Vector3() ).setName( 'cameraPosition' ).setGroup( renderGroup ).onRenderUpdate( ( { camera }, self ) => self.value.setFromMatrixPosition( camera.matrixWorld ) );
209
+ export const cameraPosition = /*@__PURE__*/ ( Fn( ( { camera } ) => {
210
+
211
+ let cameraPosition;
212
+
213
+ if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
214
+
215
+ const positions = [];
216
+
217
+ for ( let i = 0, l = camera.cameras.length; i < l; i ++ ) {
218
+
219
+ positions.push( new Vector3() );
220
+
221
+ }
222
+
223
+ const cameraPositions = uniformArray( positions ).setGroup( renderGroup ).setName( 'cameraPositions' ).onRenderUpdate( ( { camera }, self ) => {
224
+
225
+ const subCameras = camera.cameras;
226
+ const array = self.array;
227
+
228
+ for ( let i = 0, l = subCameras.length; i < l; i ++ ) {
229
+
230
+ array[ i ].setFromMatrixPosition( subCameras[ i ].matrixWorld );
231
+
232
+ }
233
+
234
+ } );
235
+
236
+ cameraPosition = cameraPositions.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraPosition' );
237
+
238
+ } else {
239
+
240
+ cameraPosition = uniform( new Vector3() ).setName( 'cameraPosition' ).setGroup( renderGroup ).onRenderUpdate( ( { camera }, self ) => self.value.setFromMatrixPosition( camera.matrixWorld ) );
241
+
242
+ }
243
+
244
+ return cameraPosition;
245
+
246
+ } ).once() )();
247
+
248
+
249
+ /**
250
+ * TSL object that represents the viewport of the camera used for the current render.
251
+ *
252
+ * @tsl
253
+ * @type {UniformNode<vec4>}
254
+ */
255
+ export const cameraViewport = /*@__PURE__*/ ( Fn( ( { camera } ) => {
256
+
257
+ let cameraViewport;
258
+
259
+ if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
260
+
261
+ const viewports = [];
262
+
263
+ for ( const subCamera of camera.cameras ) {
264
+
265
+ viewports.push( subCamera.viewport );
266
+
267
+ }
268
+
269
+ const cameraViewports = uniformArray( viewports, 'vec4' ).setGroup( renderGroup ).setName( 'cameraViewports' );
270
+
271
+ cameraViewport = cameraViewports.element( cameraIndex ).toConst( 'cameraViewport' );
272
+
273
+ } else {
274
+
275
+ // Fallback for single camera
276
+ cameraViewport = vec4( 0, 0, screenSize.x, screenSize.y ).toConst( 'cameraViewport' );
277
+
278
+ }
279
+
280
+ return cameraViewport;
281
+
282
+ } ).once() )();
@@ -7,6 +7,7 @@ import { Loop } from '../utils/LoopNode.js';
7
7
  import { smoothstep } from '../math/MathNode.js';
8
8
  import { uniformArray } from './UniformArrayNode.js';
9
9
  import { builtin } from './BuiltinNode.js';
10
+ import { renderGroup } from '../core/UniformGroupNode.js';
10
11
 
11
12
  /**
12
13
  * This node is used in {@link NodeMaterial} to setup the clipping
@@ -94,7 +95,7 @@ class ClippingNode extends Node {
94
95
 
95
96
  if ( this.hardwareClipping === false && numUnionPlanes > 0 ) {
96
97
 
97
- const clippingPlanes = uniformArray( unionPlanes );
98
+ const clippingPlanes = uniformArray( unionPlanes ).setGroup( renderGroup );
98
99
 
99
100
  Loop( numUnionPlanes, ( { i } ) => {
100
101
 
@@ -113,7 +114,7 @@ class ClippingNode extends Node {
113
114
 
114
115
  if ( numIntersectionPlanes > 0 ) {
115
116
 
116
- const clippingPlanes = uniformArray( intersectionPlanes );
117
+ const clippingPlanes = uniformArray( intersectionPlanes ).setGroup( renderGroup );
117
118
  const intersectionClipOpacity = float( 1 ).toVar( 'intersectionClipOpacity' );
118
119
 
119
120
  Loop( numIntersectionPlanes, ( { i } ) => {
@@ -154,7 +155,7 @@ class ClippingNode extends Node {
154
155
 
155
156
  if ( this.hardwareClipping === false && numUnionPlanes > 0 ) {
156
157
 
157
- const clippingPlanes = uniformArray( unionPlanes );
158
+ const clippingPlanes = uniformArray( unionPlanes ).setGroup( renderGroup );
158
159
 
159
160
  Loop( numUnionPlanes, ( { i } ) => {
160
161
 
@@ -169,7 +170,7 @@ class ClippingNode extends Node {
169
170
 
170
171
  if ( numIntersectionPlanes > 0 ) {
171
172
 
172
- const clippingPlanes = uniformArray( intersectionPlanes );
173
+ const clippingPlanes = uniformArray( intersectionPlanes ).setGroup( renderGroup );
173
174
  const clipped = bool( true ).toVar( 'clipped' );
174
175
 
175
176
  Loop( numIntersectionPlanes, ( { i } ) => {
@@ -202,7 +203,7 @@ class ClippingNode extends Node {
202
203
 
203
204
  return Fn( () => {
204
205
 
205
- const clippingPlanes = uniformArray( unionPlanes );
206
+ const clippingPlanes = uniformArray( unionPlanes ).setGroup( renderGroup );
206
207
  const hw_clip_distances = builtin( builder.getClipDistance() );
207
208
 
208
209
  Loop( numUnionPlanes, ( { i } ) => {
@@ -6,6 +6,7 @@ import { CubeReflectionMapping, CubeRefractionMapping, WebGPUCoordinateSystem }
6
6
  import { materialEnvRotation } from './MaterialProperties.js';
7
7
 
8
8
  import { CubeTexture } from '../../textures/CubeTexture.js';
9
+ import { error } from '../../utils.js';
9
10
 
10
11
  const EmptyTexture = /*@__PURE__*/ new CubeTexture();
11
12
 
@@ -76,7 +77,7 @@ class CubeTextureNode extends TextureNode {
76
77
 
77
78
  } else {
78
79
 
79
- console.error( 'THREE.CubeTextureNode: Mapping "%s" not supported.', texture.mapping );
80
+ error( 'CubeTextureNode: Mapping "%s" not supported.', texture.mapping );
80
81
 
81
82
  return vec3( 0, 0, 0 );
82
83
 
@@ -123,7 +124,7 @@ class CubeTextureNode extends TextureNode {
123
124
  */
124
125
  generateUV( builder, cubeUV ) {
125
126
 
126
- return cubeUV.build( builder, 'vec3' );
127
+ return cubeUV.build( builder, this.sampler === true ? 'vec3' : 'ivec3' );
127
128
 
128
129
  }
129
130
 
@@ -149,7 +150,7 @@ export const cubeTextureBase = /*@__PURE__*/ nodeProxy( CubeTextureNode ).setPar
149
150
  *
150
151
  * @tsl
151
152
  * @function
152
- * @param {?CubeTexture|CubeTextureNode} [value=EmptyTexture] - The cube texture.
153
+ * @param {?(CubeTexture|CubeTextureNode)} [value=EmptyTexture] - The cube texture.
153
154
  * @param {?Node<vec3>} [uvNode=null] - The uv node.
154
155
  * @param {?Node<int>} [levelNode=null] - The level node.
155
156
  * @param {?Node<float>} [biasNode=null] - The bias node.
@@ -162,7 +163,7 @@ export const cubeTexture = ( value = EmptyTexture, uvNode = null, levelNode = nu
162
163
  if ( value && value.isCubeTextureNode === true ) {
163
164
 
164
165
  textureNode = nodeObject( value.clone() );
165
- textureNode.referenceNode = value.getSelf(); // Ensure the reference is set to the original node
166
+ textureNode.referenceNode = value; // Ensure the reference is set to the original node
166
167
 
167
168
  if ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );
168
169
  if ( levelNode !== null ) textureNode.levelNode = nodeObject( levelNode );
@@ -109,7 +109,9 @@ class InstanceNode extends Node {
109
109
  */
110
110
  setup( builder ) {
111
111
 
112
- const { count, instanceMatrix, instanceColor } = this;
112
+ const { instanceMatrix, instanceColor } = this;
113
+
114
+ const { count } = instanceMatrix;
113
115
 
114
116
  let { instanceMatrixNode, instanceColorNode } = this;
115
117
 
@@ -193,15 +195,33 @@ class InstanceNode extends Node {
193
195
  */
194
196
  update( /*frame*/ ) {
195
197
 
196
- if ( this.instanceMatrix.usage !== DynamicDrawUsage && this.buffer !== null && this.instanceMatrix.version !== this.buffer.version ) {
198
+ if ( this.buffer !== null ) {
199
+
200
+ // keep update ranges in sync
201
+
202
+ this.buffer.clearUpdateRanges();
203
+ this.buffer.updateRanges.push( ... this.instanceMatrix.updateRanges );
197
204
 
198
- this.buffer.version = this.instanceMatrix.version;
205
+ // update version if necessary
206
+
207
+ if ( this.instanceMatrix.usage !== DynamicDrawUsage && this.instanceMatrix.version !== this.buffer.version ) {
208
+
209
+ this.buffer.version = this.instanceMatrix.version;
210
+
211
+ }
199
212
 
200
213
  }
201
214
 
202
- if ( this.instanceColor && this.instanceColor.usage !== DynamicDrawUsage && this.bufferColor !== null && this.instanceColor.version !== this.bufferColor.version ) {
215
+ if ( this.instanceColor && this.bufferColor !== null ) {
216
+
217
+ this.bufferColor.clearUpdateRanges();
218
+ this.bufferColor.updateRanges.push( ... this.instanceColor.updateRanges );
219
+
220
+ if ( this.instanceColor.usage !== DynamicDrawUsage && this.instanceColor.version !== this.bufferColor.version ) {
203
221
 
204
- this.bufferColor.version = this.instanceColor.version;
222
+ this.bufferColor.version = this.instanceColor.version;
223
+
224
+ }
205
225
 
206
226
  }
207
227
 
@@ -32,8 +32,18 @@ export function lightShadowMatrix( light ) {
32
32
 
33
33
  return data.shadowMatrix || ( data.shadowMatrix = uniform( 'mat4' ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => {
34
34
 
35
+ // normally, shadow matrices are updated in ShadowNode. However, if the shadow matrix is used outside
36
+ // of shadow rendering (like in ProjectorLightNode), the shadow matrix still requires an update
37
+
35
38
  if ( light.castShadow !== true || frame.renderer.shadowMap.enabled === false ) {
36
39
 
40
+ if ( light.shadow.camera.coordinateSystem !== frame.camera.coordinateSystem ) {
41
+
42
+ light.shadow.camera.coordinateSystem = frame.camera.coordinateSystem;
43
+ light.shadow.camera.updateProjectionMatrix();
44
+
45
+ }
46
+
37
47
  light.shadow.updateMatrices( light );
38
48
 
39
49
  }
@@ -4,6 +4,7 @@ import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js';
4
4
  import { mat3, vec3, Fn } from '../tsl/TSLBase.js';
5
5
  import { positionView } from './Position.js';
6
6
  import { directionToFaceDirection } from '../display/FrontFacingNode.js';
7
+ import { warn } from '../../utils.js';
7
8
 
8
9
  /**
9
10
  * TSL object that represents the normal attribute of the current rendered object in local space.
@@ -23,7 +24,7 @@ export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
23
24
 
24
25
  if ( builder.geometry.hasAttribute( 'normal' ) === false ) {
25
26
 
26
- console.warn( 'THREE.TSL: Vertex attribute "normal" not found on geometry.' );
27
+ warn( 'TSL: Vertex attribute "normal" not found on geometry.' );
27
28
 
28
29
  return vec3( 0, 1, 0 );
29
30
 
@@ -208,7 +209,7 @@ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) =
208
209
  */
209
210
  export const transformedNormalView = ( Fn( () => { // @deprecated, r177
210
211
 
211
- console.warn( 'THREE.TSL: "transformedNormalView" is deprecated. Use "normalView" instead.' );
212
+ warn( 'TSL: "transformedNormalView" is deprecated. Use "normalView" instead.' );
212
213
  return normalView;
213
214
 
214
215
  } ).once( [ 'NORMAL', 'VERTEX' ] ) )();
@@ -222,7 +223,7 @@ export const transformedNormalView = ( Fn( () => { // @deprecated, r177
222
223
  */
223
224
  export const transformedNormalWorld = ( Fn( () => { // @deprecated, r177
224
225
 
225
- console.warn( 'THREE.TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.' );
226
+ warn( 'TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.' );
226
227
  return normalWorld;
227
228
 
228
229
  } ).once( [ 'NORMAL', 'VERTEX' ] ) )();
@@ -236,7 +237,7 @@ export const transformedNormalWorld = ( Fn( () => { // @deprecated, r177
236
237
  */
237
238
  export const transformedClearcoatNormalView = ( Fn( () => { // @deprecated, r177
238
239
 
239
- console.warn( 'THREE.TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.' );
240
+ warn( 'TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.' );
240
241
  return clearcoatNormalView;
241
242
 
242
243
  } ).once( [ 'NORMAL', 'VERTEX' ] ) )();
@@ -73,7 +73,7 @@ class Object3DNode extends Node {
73
73
  /**
74
74
  * Overwritten since the node type is inferred from the scope.
75
75
  *
76
- * @return {string} The node type.
76
+ * @return {('mat4'|'vec3'|'float')} The node type.
77
77
  */
78
78
  getNodeType() {
79
79
 
@@ -1,5 +1,5 @@
1
1
  import { attribute } from '../core/AttributeNode.js';
2
- import { Fn } from '../tsl/TSLCore.js';
2
+ import { Fn, vec3 } from '../tsl/TSLCore.js';
3
3
  import { modelWorldMatrix } from './ModelNode.js';
4
4
 
5
5
  /**
@@ -71,4 +71,20 @@ export const positionView = /*@__PURE__*/ ( Fn( ( builder ) => {
71
71
  * @tsl
72
72
  * @type {VaryingNode<vec3>}
73
73
  */
74
- export const positionViewDirection = /*@__PURE__*/ positionView.negate().toVarying( 'v_positionViewDirection' ).normalize().toVar( 'positionViewDirection' );
74
+ export const positionViewDirection = /*@__PURE__*/ ( Fn( ( builder ) => {
75
+
76
+ let output;
77
+
78
+ if ( builder.camera.isOrthographicCamera ) {
79
+
80
+ output = vec3( 0, 0, 1 );
81
+
82
+ } else {
83
+
84
+ output = positionView.negate().toVarying( 'v_positionViewDirection' ).normalize();
85
+
86
+ }
87
+
88
+ return output.toVar( 'positionViewDirection' );
89
+
90
+ }, 'vec3' ).once( [ 'POSITION' ] ) )();
@@ -211,7 +211,7 @@ class ReferenceBaseNode extends Node {
211
211
  */
212
212
  setNodeType( uniformType ) {
213
213
 
214
- const node = uniform( null, uniformType ).getSelf();
214
+ const node = uniform( null, uniformType );
215
215
 
216
216
  if ( this.group !== null ) {
217
217
 
@@ -7,6 +7,7 @@ import { buffer } from './BufferNode.js';
7
7
  import { nodeObject } from '../tsl/TSLBase.js';
8
8
  import { uniformArray } from './UniformArrayNode.js';
9
9
  import ArrayElementNode from '../utils/ArrayElementNode.js';
10
+ import { warn } from '../../utils.js';
10
11
 
11
12
  // TODO: Avoid duplicated code and ues only ReferenceBaseNode or ReferenceNode
12
13
 
@@ -238,7 +239,7 @@ class ReferenceNode extends Node {
238
239
  */
239
240
  label( name ) {
240
241
 
241
- console.warn( 'THREE.TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
242
+ warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
242
243
 
243
244
  return this.setName( name );
244
245
 
@@ -284,7 +285,7 @@ class ReferenceNode extends Node {
284
285
 
285
286
  if ( this.name !== null ) node.setName( this.name );
286
287
 
287
- this.node = node.getSelf();
288
+ this.node = node;
288
289
 
289
290
  }
290
291
 
@@ -5,6 +5,7 @@ import Node from '../core/Node.js';
5
5
  import { renderGroup } from '../core/UniformGroupNode.js';
6
6
  import { nodeImmutable, uniform } from '../tsl/TSLBase.js';
7
7
  import { reference } from './ReferenceNode.js';
8
+ import { error } from '../../utils.js';
8
9
 
9
10
  const _e1 = /*@__PURE__*/ new Euler();
10
11
  const _m1 = /*@__PURE__*/ new Matrix4();
@@ -103,7 +104,7 @@ class SceneNode extends Node {
103
104
 
104
105
  } else {
105
106
 
106
- console.error( 'THREE.SceneNode: Unknown scope:', scope );
107
+ error( 'SceneNode: Unknown scope:', scope );
107
108
 
108
109
  }
109
110
 
@@ -4,6 +4,7 @@ import { nodeObject, varying } from '../tsl/TSLBase.js';
4
4
  import { storageElement } from '../utils/StorageArrayElementNode.js';
5
5
  import { NodeAccess } from '../core/constants.js';
6
6
  import { getTypeFromLength } from '../core/NodeUtils.js';
7
+ import { warn } from '../../utils.js';
7
8
 
8
9
  /**
9
10
  * This node is used in context of compute shaders and allows to define a
@@ -408,7 +409,7 @@ export const storage = ( value, type = null, count = 0 ) => nodeObject( new Stor
408
409
  */
409
410
  export const storageObject = ( value, type, count ) => { // @deprecated, r171
410
411
 
411
- console.warn( 'THREE.TSL: "storageObject()" is deprecated. Use "storage().setPBO( true )" instead.' );
412
+ warn( 'TSL: "storageObject()" is deprecated. Use "storage().setPBO( true )" instead.' );
412
413
 
413
414
  return storage( value, type, count ).setPBO( true );
414
415
 
@@ -60,6 +60,14 @@ class StorageTextureNode extends TextureNode {
60
60
  */
61
61
  this.storeNode = storeNode;
62
62
 
63
+ /**
64
+ * The mip level to write to for storage textures.
65
+ *
66
+ * @type {number}
67
+ * @default 0
68
+ */
69
+ this.mipLevel = 0;
70
+
63
71
  /**
64
72
  * This flag can be used for type testing.
65
73
  *
@@ -115,6 +123,19 @@ class StorageTextureNode extends TextureNode {
115
123
 
116
124
  }
117
125
 
126
+ /**
127
+ * Sets the mip level to write to.
128
+ *
129
+ * @param {number} level - The mip level.
130
+ * @return {StorageTextureNode} A reference to this node.
131
+ */
132
+ setMipLevel( level ) {
133
+
134
+ this.mipLevel = level;
135
+ return this;
136
+
137
+ }
138
+
118
139
  /**
119
140
  * Generates the code snippet of the storage node. If no `storeNode`
120
141
  * is defined, the texture node is generated as normal texture.
@@ -200,6 +221,7 @@ class StorageTextureNode extends TextureNode {
200
221
 
201
222
  const newNode = super.clone();
202
223
  newNode.storeNode = this.storeNode;
224
+ newNode.mipLevel = this.mipLevel;
203
225
  return newNode;
204
226
 
205
227
  }
@@ -153,7 +153,20 @@ class Texture3DNode extends TextureNode {
153
153
  */
154
154
  generateUV( builder, uvNode ) {
155
155
 
156
- return uvNode.build( builder, 'vec3' );
156
+ return uvNode.build( builder, this.sampler === true ? 'vec3' : 'ivec3' );
157
+
158
+ }
159
+
160
+ /**
161
+ * Generates the offset code snippet.
162
+ *
163
+ * @param {NodeBuilder} builder - The current node builder.
164
+ * @param {Node} offsetNode - The offset node to generate code for.
165
+ * @return {string} The generated code snippet.
166
+ */
167
+ generateOffset( builder, offsetNode ) {
168
+
169
+ return offsetNode.build( builder, 'ivec3' );
157
170
 
158
171
  }
159
172