@unikia/upe-renderer 0.186.110 → 0.187.11

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 (506) hide show
  1. package/README.md +5 -7
  2. package/UPSTREAM.md +4 -4
  3. package/build/three.core.js +853 -277
  4. package/build/three.module.js +1098 -1280
  5. package/build/three.tsl.js +41938 -686
  6. package/build/three.webgpu.js +10604 -49055
  7. package/build/three.webgpu.nodes.js +9249 -5788
  8. package/examples/jsm/Addons.js +2 -0
  9. package/examples/jsm/animation/CCDIKSolver.js +17 -5
  10. package/examples/jsm/controls/FirstPersonControls.js +1 -1
  11. package/examples/jsm/controls/OrbitControls.js +27 -14
  12. package/examples/jsm/csm/CSMShader.js +74 -3
  13. package/examples/jsm/curves/CurveExtras.js +4 -4
  14. package/examples/jsm/curves/NURBSCurve.js +14 -0
  15. package/examples/jsm/exporters/EXRExporter.js +673 -16
  16. package/examples/jsm/exporters/GLTFExporter.js +4 -4
  17. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  18. package/examples/jsm/exporters/OBJExporter.js +48 -5
  19. package/examples/jsm/exporters/PLYExporter.js +22 -11
  20. package/examples/jsm/generators/CityGenerator.js +3 -2
  21. package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
  22. package/examples/jsm/gpgpu/BitonicSort.js +30 -23
  23. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
  24. package/examples/jsm/inspector/Extension.js +1 -1
  25. package/examples/jsm/inspector/Inspector.js +6 -46
  26. package/examples/jsm/inspector/RendererInspector.js +43 -8
  27. package/examples/jsm/inspector/Storage.js +49 -0
  28. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
  29. package/examples/jsm/inspector/tabs/Parameters.js +5 -1
  30. package/examples/jsm/inspector/tabs/Performance.js +22 -7
  31. package/examples/jsm/inspector/tabs/Settings.js +1 -1
  32. package/examples/jsm/inspector/tabs/Timeline.js +83 -7
  33. package/examples/jsm/inspector/tabs/Viewer.js +25 -10
  34. package/examples/jsm/inspector/ui/Profiler.js +1 -1
  35. package/examples/jsm/inspector/ui/Style.js +21 -53
  36. package/examples/jsm/inspector/ui/Values.js +28 -3
  37. package/examples/jsm/libs/fflate.module.js +83 -56
  38. package/examples/jsm/libs/mikktspace.README.md +27 -0
  39. package/examples/jsm/libs/mikktspace.module.js +721 -109
  40. package/examples/jsm/lighting/ClusteredLighting.js +100 -2
  41. package/examples/jsm/lighting/LightMapper.js +295 -0
  42. package/examples/jsm/lighting/LightProbeGrid.js +242 -139
  43. package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
  44. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
  45. package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
  46. package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
  47. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
  48. package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
  49. package/examples/jsm/lights/SunLight.js +9 -4
  50. package/examples/jsm/lights/SunLightNode.js +3 -3
  51. package/examples/jsm/lines/LineMaterial.js +26 -10
  52. package/examples/jsm/loaders/3DMLoader.js +10 -1
  53. package/examples/jsm/loaders/3MFLoader.js +5 -1
  54. package/examples/jsm/loaders/AMFLoader.js +2 -0
  55. package/examples/jsm/loaders/BVHLoader.js +2 -0
  56. package/examples/jsm/loaders/ColladaLoader.js +8 -0
  57. package/examples/jsm/loaders/DDSLoader.js +1 -1
  58. package/examples/jsm/loaders/DRACOLoader.js +5 -1
  59. package/examples/jsm/loaders/EXRLoader.js +120 -104
  60. package/examples/jsm/loaders/FBXLoader.js +4 -0
  61. package/examples/jsm/loaders/FontLoader.js +2 -0
  62. package/examples/jsm/loaders/GCodeLoader.js +5 -9
  63. package/examples/jsm/loaders/GLTFLoader.js +112 -31
  64. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
  65. package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
  66. package/examples/jsm/loaders/IESLoader.js +46 -12
  67. package/examples/jsm/loaders/JXLLoader.js +159 -0
  68. package/examples/jsm/loaders/KMZLoader.js +6 -0
  69. package/examples/jsm/loaders/KSPLATLoader.js +2 -0
  70. package/examples/jsm/loaders/KTX2Loader.js +49 -4
  71. package/examples/jsm/loaders/KTXLoader.js +5 -3
  72. package/examples/jsm/loaders/LDrawLoader.js +15 -22
  73. package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
  74. package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
  75. package/examples/jsm/loaders/LUTImageLoader.js +2 -0
  76. package/examples/jsm/loaders/LWOLoader.js +6 -0
  77. package/examples/jsm/loaders/MD2Loader.js +2 -0
  78. package/examples/jsm/loaders/MDDLoader.js +4 -0
  79. package/examples/jsm/loaders/MTLLoader.js +8 -0
  80. package/examples/jsm/loaders/MaterialXLoader.js +57 -5
  81. package/examples/jsm/loaders/NRRDLoader.js +4 -2
  82. package/examples/jsm/loaders/OBJLoader.js +10 -4
  83. package/examples/jsm/loaders/PCDLoader.js +6 -2
  84. package/examples/jsm/loaders/PDBLoader.js +5 -3
  85. package/examples/jsm/loaders/PLYLoader.js +39 -15
  86. package/examples/jsm/loaders/PVRLoader.js +2 -2
  87. package/examples/jsm/loaders/SPLATLoader.js +2 -0
  88. package/examples/jsm/loaders/SPZLoader.js +2 -0
  89. package/examples/jsm/loaders/STLLoader.js +3 -1
  90. package/examples/jsm/loaders/SVGLoader.js +27 -49
  91. package/examples/jsm/loaders/TDSLoader.js +4 -0
  92. package/examples/jsm/loaders/TGALoader.js +6 -5
  93. package/examples/jsm/loaders/TTFLoader.js +2 -0
  94. package/examples/jsm/loaders/USDLoader.js +14 -0
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
  96. package/examples/jsm/loaders/VOXLoader.js +3 -0
  97. package/examples/jsm/loaders/VRMLLoader.js +4 -0
  98. package/examples/jsm/loaders/VTKLoader.js +2 -0
  99. package/examples/jsm/loaders/XYZLoader.js +2 -0
  100. package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
  101. package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
  102. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
  103. package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
  104. package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
  105. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
  106. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
  107. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
  108. package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
  109. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
  110. package/examples/jsm/loaders/usd/USDAParser.js +56 -47
  111. package/examples/jsm/loaders/usd/USDComposer.js +25 -30
  112. package/examples/jsm/math/ColorConverter.js +7 -3
  113. package/examples/jsm/math/Lut.js +2 -2
  114. package/examples/jsm/math/OBB.js +3 -3
  115. package/examples/jsm/math/Octree.js +20 -17
  116. package/examples/jsm/objects/GaussianSplat.js +5 -4
  117. package/examples/jsm/objects/Reflector.js +5 -0
  118. package/examples/jsm/objects/SkyMesh.js +14 -7
  119. package/examples/jsm/objects/Water2Mesh.js +2 -2
  120. package/examples/jsm/physics/RapierPhysics.js +2 -2
  121. package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
  122. package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
  123. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  124. package/examples/jsm/postprocessing/GTAOPass.js +26 -18
  125. package/examples/jsm/renderers/SVGRenderer.js +3 -2
  126. package/examples/jsm/shaders/GTAOShader.js +7 -4
  127. package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
  128. package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
  129. package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
  130. package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
  131. package/examples/jsm/tsl/display/BloomNode.js +3 -3
  132. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
  133. package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
  134. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  135. package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
  136. package/examples/jsm/tsl/display/FSR1Node.js +3 -3
  137. package/examples/jsm/tsl/display/FXAANode.js +3 -10
  138. package/examples/jsm/tsl/display/FilmNode.js +3 -3
  139. package/examples/jsm/tsl/display/GTAONode.js +33 -25
  140. package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
  141. package/examples/jsm/tsl/display/GodraysNode.js +5 -19
  142. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
  143. package/examples/jsm/tsl/display/LensflareNode.js +3 -3
  144. package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
  145. package/examples/jsm/tsl/display/OITPassNode.js +0 -11
  146. package/examples/jsm/tsl/display/OutlineNode.js +107 -5
  147. package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
  148. package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
  149. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
  150. package/examples/jsm/tsl/display/SMAANode.js +3 -3
  151. package/examples/jsm/tsl/display/SSAONode.js +6 -20
  152. package/examples/jsm/tsl/display/SSGINode.js +36 -29
  153. package/examples/jsm/tsl/display/SSRNode.js +135 -63
  154. package/examples/jsm/tsl/display/SSSNode.js +6 -20
  155. package/examples/jsm/tsl/display/SharpenNode.js +3 -3
  156. package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
  157. package/examples/jsm/tsl/display/TAAUNode.js +10 -42
  158. package/examples/jsm/tsl/display/TRAANode.js +11 -43
  159. package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
  160. package/examples/jsm/tsl/display/TransitionNode.js +3 -3
  161. package/examples/jsm/tsl/display/lensDirt.js +30 -0
  162. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
  163. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
  164. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
  165. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
  166. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
  167. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
  168. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
  169. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
  170. package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
  171. package/examples/jsm/tsl/utils/Raymarching.js +1 -1
  172. package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
  173. package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
  174. package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
  175. package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
  176. package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
  177. package/examples/jsm/utils/SceneOptimizer.js +2 -1
  178. package/examples/jsm/utils/SceneUtils.js +1 -1
  179. package/examples/jsm/utils/unwrapUVs.js +865 -0
  180. package/examples/jsm/webxr/XREstimatedLight.js +11 -4
  181. package/package.json +3 -3
  182. package/src/Three.TSL.js +2 -683
  183. package/src/Three.WebGPU.Nodes.js +2 -1
  184. package/src/Three.WebGPU.js +2 -1
  185. package/src/animation/AnimationAction.js +1 -1
  186. package/src/animation/AnimationUtils.js +1 -3
  187. package/src/animation/KeyframeTrack.js +19 -0
  188. package/src/cameras/ArrayCamera.js +12 -0
  189. package/src/cameras/CubeCamera.js +3 -3
  190. package/src/constants.js +1 -9
  191. package/src/core/BufferAttribute.js +57 -21
  192. package/src/core/BufferGeometry.js +5 -13
  193. package/src/core/Clock.js +1 -1
  194. package/src/core/InterleavedBuffer.js +28 -18
  195. package/src/core/InterleavedBufferAttribute.js +54 -20
  196. package/src/core/Object3D.js +19 -9
  197. package/src/core/Raycaster.js +2 -0
  198. package/src/core/RenderTarget.js +11 -5
  199. package/src/core/UniformsGroup.js +7 -3
  200. package/src/extras/PMREMGenerator.js +392 -685
  201. package/src/extras/core/Curve.js +4 -0
  202. package/src/extras/core/CurvePath.js +13 -0
  203. package/src/extras/core/ShapePath.js +1 -1
  204. package/src/geometries/EdgesGeometry.js +12 -10
  205. package/src/geometries/LatheGeometry.js +2 -0
  206. package/src/helpers/PolarGridHelper.js +1 -1
  207. package/src/lights/Light.js +11 -0
  208. package/src/lights/LightProbe.js +2 -0
  209. package/src/lights/LightShadow.js +2 -0
  210. package/src/loaders/AnimationLoader.js +2 -0
  211. package/src/loaders/AudioLoader.js +2 -0
  212. package/src/loaders/BufferGeometryLoader.js +2 -0
  213. package/src/loaders/CompressedTextureLoader.js +2 -0
  214. package/src/loaders/CubeTextureLoader.js +2 -0
  215. package/src/loaders/DataTextureLoader.js +2 -0
  216. package/src/loaders/FileLoader.js +2 -0
  217. package/src/loaders/ImageBitmapLoader.js +3 -1
  218. package/src/loaders/ImageLoader.js +1 -0
  219. package/src/loaders/Loader.js +47 -0
  220. package/src/loaders/MaterialLoader.js +2 -0
  221. package/src/loaders/ObjectLoader.js +27 -8
  222. package/src/loaders/TextureLoader.js +5 -3
  223. package/src/loaders/nodes/NodeLoader.js +2 -0
  224. package/src/materials/Material.js +21 -2
  225. package/src/materials/MeshDepthMaterial.js +1 -1
  226. package/src/materials/MeshDistanceMaterial.js +1 -1
  227. package/src/materials/MeshLambertMaterial.js +1 -1
  228. package/src/materials/MeshMatcapMaterial.js +1 -1
  229. package/src/materials/MeshNormalMaterial.js +1 -1
  230. package/src/materials/MeshPhongMaterial.js +1 -1
  231. package/src/materials/MeshPhysicalMaterial.js +90 -11
  232. package/src/materials/MeshStandardMaterial.js +1 -1
  233. package/src/materials/MeshToonMaterial.js +1 -1
  234. package/src/materials/nodes/Line2NodeMaterial.js +32 -10
  235. package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
  236. package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
  237. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
  238. package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
  239. package/src/materials/nodes/NodeMaterial.js +36 -16
  240. package/src/materials/nodes/NodeMaterialInstance.js +193 -0
  241. package/src/materials/nodes/NodeMaterials.js +1 -0
  242. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  243. package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
  244. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
  245. package/src/math/Box3.js +2 -2
  246. package/src/math/Color.js +8 -8
  247. package/src/math/ColorManagement.js +2 -21
  248. package/src/math/FrustumArray.js +12 -0
  249. package/src/math/Interpolant.js +1 -1
  250. package/src/math/Line3.js +2 -4
  251. package/src/math/MathUtils.js +33 -46
  252. package/src/math/Matrix2.js +1 -1
  253. package/src/math/Matrix3.js +1 -1
  254. package/src/math/Matrix4.js +1 -1
  255. package/src/math/Triangle.js +2 -1
  256. package/src/math/Vector2.js +1 -1
  257. package/src/math/Vector3.js +1 -1
  258. package/src/math/Vector4.js +1 -1
  259. package/src/nodes/Nodes.js +1 -0
  260. package/src/nodes/TSL.js +2 -0
  261. package/src/nodes/accessors/Arrays.js +1 -1
  262. package/src/nodes/accessors/Batch.js +29 -23
  263. package/src/nodes/accessors/BufferAttributeNode.js +21 -1
  264. package/src/nodes/accessors/BuiltinNode.js +6 -0
  265. package/src/nodes/accessors/Camera.js +100 -93
  266. package/src/nodes/accessors/ClippingNode.js +17 -6
  267. package/src/nodes/accessors/CubeTextureNode.js +12 -24
  268. package/src/nodes/accessors/Instance.js +198 -160
  269. package/src/nodes/accessors/Lights.js +19 -6
  270. package/src/nodes/accessors/MaterialNode.js +33 -4
  271. package/src/nodes/accessors/Morph.js +81 -22
  272. package/src/nodes/accessors/Normal.js +0 -42
  273. package/src/nodes/accessors/Object3DNode.js +6 -0
  274. package/src/nodes/accessors/PointUVNode.js +6 -0
  275. package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
  276. package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
  277. package/src/nodes/accessors/ReferenceNode.js +6 -0
  278. package/src/nodes/accessors/Skinning.js +57 -52
  279. package/src/nodes/accessors/StorageBufferNode.js +3 -12
  280. package/src/nodes/accessors/TextureBicubic.js +30 -27
  281. package/src/nodes/accessors/TextureNode.js +164 -78
  282. package/src/nodes/accessors/TextureSizeNode.js +6 -0
  283. package/src/nodes/accessors/UniformArrayNode.js +8 -15
  284. package/src/nodes/accessors/VelocityNode.js +13 -8
  285. package/src/nodes/code/CodeNode.js +6 -0
  286. package/src/nodes/code/ExpressionNode.js +6 -0
  287. package/src/nodes/code/FunctionCallNode.js +3 -3
  288. package/src/nodes/code/FunctionNode.js +15 -13
  289. package/src/nodes/core/ArrayNode.js +3 -3
  290. package/src/nodes/core/AssignNode.js +10 -9
  291. package/src/nodes/core/AttributeNode.js +39 -0
  292. package/src/nodes/core/BypassNode.js +6 -0
  293. package/src/nodes/core/ConstNode.js +31 -1
  294. package/src/nodes/core/ContextNode.js +11 -6
  295. package/src/nodes/core/IndexNode.js +6 -0
  296. package/src/nodes/core/InputNode.js +6 -0
  297. package/src/nodes/core/InspectorNode.js +17 -31
  298. package/src/nodes/core/IsolateNode.js +8 -0
  299. package/src/nodes/core/Node.js +367 -67
  300. package/src/nodes/core/NodeBuilder.js +664 -222
  301. package/src/nodes/core/NodeUtils.js +25 -0
  302. package/src/nodes/core/NodeVar.js +10 -1
  303. package/src/nodes/core/OutputStructNode.js +6 -0
  304. package/src/nodes/core/OverrideContextNode.js +38 -37
  305. package/src/nodes/core/PropertyNode.js +14 -0
  306. package/src/nodes/core/StackNode.js +33 -21
  307. package/src/nodes/core/StructNode.js +6 -0
  308. package/src/nodes/core/StructTypeNode.js +6 -0
  309. package/src/nodes/core/SubBuildNode.js +8 -0
  310. package/src/nodes/core/TempNode.js +10 -35
  311. package/src/nodes/core/UniformGroupNode.js +6 -0
  312. package/src/nodes/core/VarNode.js +43 -135
  313. package/src/nodes/core/VaryingNode.js +33 -2
  314. package/src/nodes/display/BlendModes.js +5 -40
  315. package/src/nodes/display/BumpMapNode.js +17 -7
  316. package/src/nodes/display/ColorAdjustment.js +22 -10
  317. package/src/nodes/display/ColorSpaceFunctions.js +2 -14
  318. package/src/nodes/display/ColorSpaceNode.js +3 -3
  319. package/src/nodes/display/FrontFacingNode.js +6 -0
  320. package/src/nodes/display/NormalMapNode.js +3 -3
  321. package/src/nodes/display/PassNode.js +75 -16
  322. package/src/nodes/display/RenderOutputNode.js +22 -5
  323. package/src/nodes/display/ScreenNode.js +6 -0
  324. package/src/nodes/display/ToneMappingFunctions.js +9 -51
  325. package/src/nodes/display/ToneMappingNode.js +3 -3
  326. package/src/nodes/display/ToonOutlinePassNode.js +66 -2
  327. package/src/nodes/display/ViewportDepthNode.js +34 -4
  328. package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
  329. package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
  330. package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
  331. package/src/nodes/functions/BSDF/D_GGX.js +1 -8
  332. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
  333. package/src/nodes/functions/BSDF/LTC.js +20 -47
  334. package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
  335. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
  336. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
  337. package/src/nodes/functions/PhysicalLightingModel.js +84 -51
  338. package/src/nodes/functions/VolumetricLightingModel.js +1 -1
  339. package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
  340. package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
  341. package/src/nodes/functions/material/getRoughness.js +3 -1
  342. package/src/nodes/geometry/RangeNode.js +52 -69
  343. package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
  344. package/src/nodes/gpgpu/BarrierNode.js +6 -0
  345. package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
  346. package/src/nodes/gpgpu/ComputeNode.js +6 -0
  347. package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
  348. package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
  349. package/src/nodes/lighting/AnalyticLightNode.js +7 -14
  350. package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
  351. package/src/nodes/lighting/EnvironmentNode.js +58 -8
  352. package/src/nodes/lighting/IESSpotLightNode.js +19 -4
  353. package/src/nodes/lighting/LightProbeNode.js +2 -1
  354. package/src/nodes/lighting/LightUtils.js +2 -2
  355. package/src/nodes/lighting/LightingNode.js +6 -0
  356. package/src/nodes/lighting/LightsNode.js +26 -32
  357. package/src/nodes/lighting/PointShadowNode.js +92 -48
  358. package/src/nodes/lighting/ProjectorLightNode.js +1 -1
  359. package/src/nodes/lighting/RectAreaLightNode.js +13 -14
  360. package/src/nodes/lighting/ShadowBaseNode.js +9 -17
  361. package/src/nodes/lighting/ShadowFilterNode.js +26 -3
  362. package/src/nodes/lighting/ShadowNode.js +13 -11
  363. package/src/nodes/materialx/MaterialXColor.js +2 -14
  364. package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
  365. package/src/nodes/materialx/MaterialXNodes.js +8 -11
  366. package/src/nodes/materialx/MaterialXNoise.js +195 -454
  367. package/src/nodes/math/BitcastNode.js +5 -5
  368. package/src/nodes/math/BitcountNode.js +18 -46
  369. package/src/nodes/math/ConditionalNode.js +92 -22
  370. package/src/nodes/math/Hash.js +1 -1
  371. package/src/nodes/math/MathNode.js +86 -64
  372. package/src/nodes/math/MathUtils.js +2 -2
  373. package/src/nodes/math/OperatorNode.js +42 -59
  374. package/src/nodes/math/PackFloatNode.js +9 -9
  375. package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
  376. package/src/nodes/math/TriNoise3D.js +3 -23
  377. package/src/nodes/math/UnpackFloatNode.js +9 -9
  378. package/src/nodes/pmrem/PMREMNode.js +38 -75
  379. package/src/nodes/pmrem/PMREMUtils.js +108 -272
  380. package/src/nodes/procedural/Checker.js +1 -1
  381. package/src/nodes/tsl/TSLCore.js +199 -74
  382. package/src/nodes/utils/ArrayElementNode.js +19 -1
  383. package/src/nodes/utils/CubeMapNode.js +3 -3
  384. package/src/nodes/utils/DebugNode.js +2 -2
  385. package/src/nodes/utils/EventNode.js +6 -0
  386. package/src/nodes/utils/FlipNode.js +3 -3
  387. package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
  388. package/src/nodes/utils/JoinNode.js +3 -3
  389. package/src/nodes/utils/LoopNode.js +14 -9
  390. package/src/nodes/utils/MemberNode.js +18 -0
  391. package/src/nodes/utils/PostProcessingUtils.js +20 -25
  392. package/src/nodes/utils/RTTNode.js +2 -0
  393. package/src/nodes/utils/ReflectorNode.js +24 -0
  394. package/src/nodes/utils/RotateNode.js +3 -3
  395. package/src/nodes/utils/SampleNode.js +6 -0
  396. package/src/nodes/utils/SetNode.js +3 -3
  397. package/src/nodes/utils/SplitNode.js +6 -0
  398. package/src/nodes/utils/UVUtils.js +2 -2
  399. package/src/objects/BatchedMesh.js +146 -15
  400. package/src/objects/InstancedMesh.js +12 -4
  401. package/src/objects/Line.js +20 -0
  402. package/src/objects/Mesh.js +8 -0
  403. package/src/objects/Points.js +20 -0
  404. package/src/objects/Skeleton.js +26 -0
  405. package/src/objects/SkinnedMesh.js +3 -3
  406. package/src/objects/Sprite.js +10 -0
  407. package/src/renderers/WebGLRenderer.js +104 -70
  408. package/src/renderers/common/Animation.js +5 -1
  409. package/src/renderers/common/Attributes.js +67 -57
  410. package/src/renderers/common/Backend.js +78 -3
  411. package/src/renderers/common/BindGroup.js +11 -0
  412. package/src/renderers/common/Binding.js +0 -11
  413. package/src/renderers/common/Bindings.js +116 -10
  414. package/src/renderers/common/Buffer.js +1 -1
  415. package/src/renderers/common/ClippingContext.js +12 -1
  416. package/src/renderers/common/ComputePipeline.js +17 -1
  417. package/src/renderers/common/DirectRenderPipeline.js +7 -3
  418. package/src/renderers/common/Geometries.js +170 -132
  419. package/src/renderers/common/Info.js +1 -1
  420. package/src/renderers/common/InspectorBase.js +5 -5
  421. package/src/renderers/common/Lighting.js +59 -0
  422. package/src/renderers/common/Pipelines.js +26 -12
  423. package/src/renderers/common/ProgrammableStage.js +1 -17
  424. package/src/renderers/common/RenderContext.js +21 -0
  425. package/src/renderers/common/RenderContexts.js +13 -4
  426. package/src/renderers/common/RenderObject.js +111 -35
  427. package/src/renderers/common/RenderObjects.js +37 -19
  428. package/src/renderers/common/Renderer.js +537 -295
  429. package/src/renderers/common/RendererUtils.js +15 -0
  430. package/src/renderers/common/StandardDrawingPipeline.js +343 -0
  431. package/src/renderers/common/Storage3DTexture.js +11 -0
  432. package/src/renderers/common/StorageArrayTexture.js +10 -0
  433. package/src/renderers/common/StorageTexture.js +0 -9
  434. package/src/renderers/common/Textures.js +144 -37
  435. package/src/renderers/common/UniformsGroup.js +19 -0
  436. package/src/renderers/common/XRManager.js +10 -91
  437. package/src/renderers/common/extras/PMREMGenerator.js +298 -576
  438. package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
  439. package/src/renderers/common/nodes/NodeLibrary.js +11 -35
  440. package/src/renderers/common/nodes/NodeManager.js +80 -31
  441. package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
  442. package/src/renderers/common/nodes/NodeSampler.js +14 -0
  443. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  444. package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
  445. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
  446. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
  447. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
  448. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
  449. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
  451. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
  452. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
  453. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
  454. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
  455. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
  456. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
  457. package/src/renderers/shaders/ShaderChunk.js +0 -2
  458. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
  459. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  461. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
  462. package/src/renderers/shaders/ShaderLib.js +3 -0
  463. package/src/renderers/shaders/UniformsLib.js +4 -5
  464. package/src/renderers/webgl/WebGLBackground.js +3 -3
  465. package/src/renderers/webgl/WebGLBindingStates.js +4 -2
  466. package/src/renderers/webgl/WebGLCapabilities.js +7 -1
  467. package/src/renderers/webgl/WebGLEnvironments.js +2 -2
  468. package/src/renderers/webgl/WebGLGeometries.js +42 -14
  469. package/src/renderers/webgl/WebGLMaterials.js +15 -2
  470. package/src/renderers/webgl/WebGLOutput.js +37 -1
  471. package/src/renderers/webgl/WebGLProgram.js +13 -54
  472. package/src/renderers/webgl/WebGLPrograms.js +22 -8
  473. package/src/renderers/webgl/WebGLRenderStates.js +11 -8
  474. package/src/renderers/webgl/WebGLShadowMap.js +6 -4
  475. package/src/renderers/webgl/WebGLState.js +10 -6
  476. package/src/renderers/webgl/WebGLTextures.js +129 -77
  477. package/src/renderers/webgl/WebGLUniforms.js +44 -6
  478. package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
  479. package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
  480. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
  481. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
  482. package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
  483. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
  484. package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
  485. package/src/renderers/webgpu/WebGPUBackend.js +140 -82
  486. package/src/renderers/webgpu/WebGPURenderer.js +1 -1
  487. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
  488. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
  489. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
  490. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
  491. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
  492. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
  493. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
  494. package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
  495. package/src/renderers/webxr/WebXRController.js +3 -3
  496. package/src/renderers/webxr/WebXRManager.js +5 -90
  497. package/src/scenes/Scene.js +4 -4
  498. package/src/textures/CompressedTexture.js +2 -2
  499. package/src/textures/DepthTexture.js +2 -2
  500. package/src/textures/FramebufferTexture.js +11 -0
  501. package/src/textures/Texture.js +29 -1
  502. package/src/textures/TextureSource.js +1 -1
  503. package/src/upe.js +1 -1
  504. package/src/utils.js +4 -4
  505. package/examples/jsm/libs/surfaceNet.js +0 -201
  506. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
@@ -81,7 +81,7 @@ class USDAParser {
81
81
  const value = line.slice( colonIdx + 1 ).trim();
82
82
 
83
83
  // Only process if key looks like a number (timeSamples frame)
84
- if ( /^[\d.]+$/.test( key ) ) {
84
+ if ( /^-?[\d.]+$/.test( key ) ) {
85
85
 
86
86
  target[ key ] = value;
87
87
 
@@ -235,39 +235,42 @@ class USDAParser {
235
235
 
236
236
  _stripBlockComments( text ) {
237
237
 
238
- // Iteratively remove /* ... */ comments without regex backtracking
238
+ // Iteratively remove /* ... */ comments without regex backtracking.
239
+ // Strings are copied as is since they may contain /* (e.g. path expressions)
240
+ const tokens = /\/\*|"""|'''|["']/g;
241
+
239
242
  let result = '';
240
243
  let i = 0;
241
244
 
242
245
  while ( i < text.length ) {
243
246
 
244
- // Check for block comment start
245
- if ( text[ i ] === '/' && i + 1 < text.length && text[ i + 1 ] === '*' ) {
247
+ tokens.lastIndex = i;
248
+ const match = tokens.exec( text );
246
249
 
247
- // Find the closing */
248
- let j = i + 2;
250
+ if ( match === null ) {
249
251
 
250
- while ( j < text.length ) {
252
+ result += text.slice( i );
253
+ break;
251
254
 
252
- if ( text[ j ] === '*' && j + 1 < text.length && text[ j + 1 ] === '/' ) {
255
+ }
253
256
 
254
- // Found closing, skip past it
255
- j += 2;
256
- break;
257
+ const start = match.index;
258
+ const token = match[ 0 ];
257
259
 
258
- }
260
+ if ( token === '/*' ) {
259
261
 
260
- j ++;
261
-
262
- }
262
+ result += text.slice( i, start );
263
263
 
264
264
  // Move past the comment (or to end if unclosed)
265
- i = j;
265
+ const end = text.indexOf( '*/', start + 2 );
266
+ i = ( end === - 1 ) ? text.length : end + 2;
266
267
 
267
268
  } else {
268
269
 
269
- result += text[ i ];
270
- i ++;
270
+ const end = this._findStringEnd( text, start, token );
271
+
272
+ result += text.slice( i, end );
273
+ i = end;
271
274
 
272
275
  }
273
276
 
@@ -277,57 +280,63 @@ class USDAParser {
277
280
 
278
281
  }
279
282
 
280
- _collapseTripleQuotedStrings( text ) {
283
+ _findStringEnd( text, start, quote ) {
281
284
 
282
- let result = '';
283
- let i = 0;
285
+ if ( quote.length === 3 ) {
284
286
 
285
- while ( i < text.length ) {
287
+ const end = text.indexOf( quote, start + 3 );
288
+ return ( end === - 1 ) ? text.length : end + 3;
286
289
 
287
- if ( i + 2 < text.length ) {
290
+ }
288
291
 
289
- const triple = text.slice( i, i + 3 );
292
+ // Single-line string with escapes, ends at the line end if unclosed
293
+ for ( let i = start + 1; i < text.length; i ++ ) {
290
294
 
291
- if ( triple === '\'\'\'' || triple === '"""' ) {
295
+ const ch = text[ i ];
292
296
 
293
- const quoteChar = triple;
294
- result += quoteChar;
295
- i += 3;
297
+ if ( ch === '\\' ) i ++;
298
+ else if ( ch === quote ) return i + 1;
299
+ else if ( ch === '\n' ) return i;
296
300
 
297
- while ( i < text.length ) {
301
+ }
298
302
 
299
- if ( i + 2 < text.length && text.slice( i, i + 3 ) === quoteChar ) {
303
+ return text.length;
300
304
 
301
- result += quoteChar;
302
- i += 3;
303
- break;
305
+ }
304
306
 
305
- } else {
307
+ _collapseTripleQuotedStrings( text ) {
306
308
 
307
- if ( text[ i ] === '\n' ) {
309
+ const tripleQuote = /'''|"""/g;
308
310
 
309
- result += '\\n';
311
+ let result = '';
312
+ let i = 0;
310
313
 
311
- } else if ( text[ i ] !== '\r' ) {
314
+ while ( i < text.length ) {
312
315
 
313
- result += text[ i ];
316
+ tripleQuote.lastIndex = i;
317
+ const match = tripleQuote.exec( text );
314
318
 
315
- }
319
+ if ( match === null ) {
316
320
 
317
- i ++;
321
+ result += text.slice( i );
322
+ break;
318
323
 
319
- }
324
+ }
320
325
 
321
- }
326
+ const start = match.index;
327
+ const quoteChar = match[ 0 ];
322
328
 
323
- continue;
329
+ result += text.slice( i, start );
324
330
 
325
- }
331
+ const end = text.indexOf( quoteChar, start + 3 );
332
+ const content = text.slice( start + 3, ( end === - 1 ) ? text.length : end );
326
333
 
327
- }
334
+ result += quoteChar + content.replace( /\r/g, '' ).replace( /\n/g, '\\n' );
335
+
336
+ if ( end === - 1 ) break;
328
337
 
329
- result += text[ i ];
330
- i ++;
338
+ result += quoteChar;
339
+ i = end + 3;
331
340
 
332
341
  }
333
342
 
@@ -11,7 +11,9 @@ import {
11
11
  DirectionalLight,
12
12
  Euler,
13
13
  Group,
14
+ ImageLoader,
14
15
  LoaderUtils,
16
+ LinearSRGBColorSpace,
15
17
  Matrix4,
16
18
  Mesh,
17
19
  MeshPhysicalMaterial,
@@ -79,11 +81,12 @@ const USD_CAMERA_DEFAULTS = {
79
81
  */
80
82
  class USDComposer {
81
83
 
82
- constructor( manager = null ) {
84
+ constructor( manager ) {
83
85
 
84
86
  this.textureCache = {};
85
87
  this.skinnedMeshes = [];
86
88
  this.manager = manager;
89
+ this.imageLoader = new ImageLoader( manager );
87
90
  this.texturePromises = [];
88
91
 
89
92
  }
@@ -894,6 +897,9 @@ class USDComposer {
894
897
  if ( referencedData.specsByPath ) {
895
898
 
896
899
  const composer = new USDComposer( this.manager );
900
+ composer.imageLoader.setCrossOrigin( this.imageLoader.crossOrigin );
901
+ composer.imageLoader.setPriority( this.imageLoader.priority );
902
+ composer.imageLoader.setCache( this.imageLoader.cache );
897
903
  const newBasePath = this._getBasePath( resolvedPath );
898
904
  const composedGroup = composer.compose( referencedData, this.assets, mergedVariants, newBasePath );
899
905
 
@@ -1330,7 +1336,7 @@ class USDComposer {
1330
1336
 
1331
1337
  if ( mat.color && mat.color.r === 1 && mat.color.g === 1 && mat.color.b === 1 && ! mat.map ) {
1332
1338
 
1333
- mat.color.setRGB( displayColor[ 0 ], displayColor[ 1 ], displayColor[ 2 ], SRGBColorSpace );
1339
+ mat.color.setRGB( displayColor[ 0 ], displayColor[ 1 ], displayColor[ 2 ], LinearSRGBColorSpace );
1334
1340
 
1335
1341
  }
1336
1342
 
@@ -3107,7 +3113,7 @@ class USDComposer {
3107
3113
 
3108
3114
  if ( Array.isArray( color ) && color.length >= 3 ) {
3109
3115
 
3110
- material.color.setRGB( color[ 0 ], color[ 1 ], color[ 2 ], SRGBColorSpace );
3116
+ material.color.setRGB( color[ 0 ], color[ 1 ], color[ 2 ], LinearSRGBColorSpace );
3111
3117
 
3112
3118
  }
3113
3119
 
@@ -3120,7 +3126,7 @@ class USDComposer {
3120
3126
  const scale = material.map.userData.scale;
3121
3127
  if ( Array.isArray( scale ) && scale.length >= 3 ) {
3122
3128
 
3123
- material.color.setRGB( scale[ 0 ], scale[ 1 ], scale[ 2 ], SRGBColorSpace );
3129
+ material.color.setRGB( scale[ 0 ], scale[ 1 ], scale[ 2 ], LinearSRGBColorSpace );
3124
3130
 
3125
3131
  }
3126
3132
 
@@ -3135,7 +3141,7 @@ class USDComposer {
3135
3141
 
3136
3142
  if ( Array.isArray( color ) && color.length >= 3 ) {
3137
3143
 
3138
- material.emissive.setRGB( color[ 0 ], color[ 1 ], color[ 2 ], SRGBColorSpace );
3144
+ material.emissive.setRGB( color[ 0 ], color[ 1 ], color[ 2 ], LinearSRGBColorSpace );
3139
3145
 
3140
3146
  }
3141
3147
 
@@ -3149,7 +3155,7 @@ class USDComposer {
3149
3155
  const scale = material.emissiveMap.userData.scale;
3150
3156
  if ( Array.isArray( scale ) && scale.length >= 3 ) {
3151
3157
 
3152
- material.emissive.setRGB( scale[ 0 ], scale[ 1 ], scale[ 2 ], SRGBColorSpace );
3158
+ material.emissive.setRGB( scale[ 0 ], scale[ 1 ], scale[ 2 ], LinearSRGBColorSpace );
3153
3159
 
3154
3160
  }
3155
3161
 
@@ -3228,7 +3234,7 @@ class USDComposer {
3228
3234
 
3229
3235
  if ( Array.isArray( color ) && color.length >= 3 ) {
3230
3236
 
3231
- material.specularColor.setRGB( color[ 0 ], color[ 1 ], color[ 2 ], SRGBColorSpace );
3237
+ material.specularColor.setRGB( color[ 0 ], color[ 1 ], color[ 2 ], LinearSRGBColorSpace );
3232
3238
 
3233
3239
  }
3234
3240
 
@@ -3241,7 +3247,7 @@ class USDComposer {
3241
3247
  const scale = material.specularColorMap.userData.scale;
3242
3248
  if ( Array.isArray( scale ) && scale.length >= 3 ) {
3243
3249
 
3244
- material.specularColor.setRGB( scale[ 0 ], scale[ 1 ], scale[ 2 ], SRGBColorSpace );
3250
+ material.specularColor.setRGB( scale[ 0 ], scale[ 1 ], scale[ 2 ], LinearSRGBColorSpace );
3245
3251
 
3246
3252
  }
3247
3253
 
@@ -3322,7 +3328,7 @@ class USDComposer {
3322
3328
 
3323
3329
  if ( Array.isArray( color ) && color.length >= 3 ) {
3324
3330
 
3325
- material.color.setRGB( color[ 0 ], color[ 1 ], color[ 2 ], SRGBColorSpace );
3331
+ material.color.setRGB( color[ 0 ], color[ 1 ], color[ 2 ], LinearSRGBColorSpace );
3326
3332
 
3327
3333
  }
3328
3334
 
@@ -3335,7 +3341,7 @@ class USDComposer {
3335
3341
  const scale = material.map.userData.scale;
3336
3342
  if ( Array.isArray( scale ) && scale.length >= 3 ) {
3337
3343
 
3338
- material.color.setRGB( scale[ 0 ], scale[ 1 ], scale[ 2 ], SRGBColorSpace );
3344
+ material.color.setRGB( scale[ 0 ], scale[ 1 ], scale[ 2 ], LinearSRGBColorSpace );
3339
3345
 
3340
3346
  }
3341
3347
 
@@ -3382,7 +3388,7 @@ class USDComposer {
3382
3388
 
3383
3389
  if ( Array.isArray( color ) && color.length >= 3 ) {
3384
3390
 
3385
- material.emissive.setRGB( color[ 0 ], color[ 1 ], color[ 2 ], SRGBColorSpace );
3391
+ material.emissive.setRGB( color[ 0 ], color[ 1 ], color[ 2 ], LinearSRGBColorSpace );
3386
3392
 
3387
3393
  }
3388
3394
 
@@ -3426,7 +3432,7 @@ class USDComposer {
3426
3432
 
3427
3433
  if ( transmissionColor !== undefined && Array.isArray( transmissionColor ) ) {
3428
3434
 
3429
- material.attenuationColor.setRGB( transmissionColor[ 0 ], transmissionColor[ 1 ], transmissionColor[ 2 ] );
3435
+ material.attenuationColor.setRGB( transmissionColor[ 0 ], transmissionColor[ 1 ], transmissionColor[ 2 ], LinearSRGBColorSpace );
3430
3436
  material.attenuationDistance = transmissionDepth || 1.0;
3431
3437
 
3432
3438
  }
@@ -3490,7 +3496,8 @@ class USDComposer {
3490
3496
 
3491
3497
  // OpenPBR uses micrometers, Three.js uses nanometers
3492
3498
  const thicknessNm = thinFilmThickness * 1000;
3493
- material.iridescenceThicknessRange = [ thicknessNm, thicknessNm ];
3499
+ material.iridescenceThicknessMinimum = thicknessNm;
3500
+ material.iridescenceThicknessMaximum = thicknessNm;
3494
3501
 
3495
3502
  }
3496
3503
 
@@ -3509,7 +3516,7 @@ class USDComposer {
3509
3516
 
3510
3517
  if ( specularColor !== undefined && Array.isArray( specularColor ) ) {
3511
3518
 
3512
- material.specularColor.setRGB( specularColor[ 0 ], specularColor[ 1 ], specularColor[ 2 ] );
3519
+ material.specularColor.setRGB( specularColor[ 0 ], specularColor[ 1 ], specularColor[ 2 ], LinearSRGBColorSpace );
3513
3520
 
3514
3521
  }
3515
3522
 
@@ -3870,13 +3877,7 @@ class USDComposer {
3870
3877
  // Try loading via LoadingManager if available
3871
3878
  if ( this.manager ) {
3872
3879
 
3873
- const url = this.manager.resolveURL( baseName );
3874
- if ( url !== baseName ) {
3875
-
3876
- // URL modifier found a match - load it
3877
- return this._createTextureFromData( url, textureAttrs, transformAttrs );
3878
-
3879
- }
3880
+ return this._createTextureFromData( baseName, textureAttrs, transformAttrs );
3880
3881
 
3881
3882
  }
3882
3883
 
@@ -3913,11 +3914,9 @@ class USDComposer {
3913
3914
 
3914
3915
  }
3915
3916
 
3916
- const image = new Image();
3917
-
3918
3917
  this.texturePromises.push( new Promise( ( resolve ) => {
3919
3918
 
3920
- image.onload = function () {
3919
+ this.imageLoader.load( url, function ( image ) {
3921
3920
 
3922
3921
  texture.image = image;
3923
3922
 
@@ -3939,9 +3938,7 @@ class USDComposer {
3939
3938
 
3940
3939
  resolve();
3941
3940
 
3942
- };
3943
-
3944
- image.onerror = function () {
3941
+ }, undefined, function () {
3945
3942
 
3946
3943
  console.warn( 'USDLoader: Failed to load texture:', url );
3947
3944
 
@@ -3953,12 +3950,10 @@ class USDComposer {
3953
3950
 
3954
3951
  resolve();
3955
3952
 
3956
- };
3953
+ } );
3957
3954
 
3958
3955
  } ) );
3959
3956
 
3960
- image.src = url;
3961
-
3962
3957
  return texture;
3963
3958
 
3964
3959
  }
@@ -27,7 +27,10 @@ class ColorConverter {
27
27
  s = MathUtils.clamp( s, 0, 1 );
28
28
  v = MathUtils.clamp( v, 0, 1 );
29
29
 
30
- return color.setHSL( h, ( s * v ) / ( ( h = ( 2 - s ) * v ) < 1 ? h : ( 2 - h ) ), h * 0.5 );
30
+ const l = ( 2 - s ) * v;
31
+ const saturation = ( l === 0 || l === 2 ) ? 0 : ( s * v ) / ( l < 1 ? l : ( 2 - l ) );
32
+
33
+ return color.setHSL( h, saturation, l * 0.5 );
31
34
 
32
35
  }
33
36
 
@@ -44,10 +47,11 @@ class ColorConverter {
44
47
 
45
48
  // based on https://gist.github.com/xpansive/1337890#file-index-js
46
49
  _hsl.s *= ( _hsl.l < 0.5 ) ? _hsl.l : ( 1 - _hsl.l );
50
+ const v = _hsl.l + _hsl.s;
47
51
 
48
52
  target.h = _hsl.h;
49
- target.s = 2 * _hsl.s / ( _hsl.l + _hsl.s );
50
- target.v = _hsl.l + _hsl.s;
53
+ target.s = v === 0 ? 0 : 2 * _hsl.s / v;
54
+ target.v = v;
51
55
 
52
56
  return target;
53
57
 
@@ -143,7 +143,7 @@ class Lut {
143
143
 
144
144
  // sample at 0
145
145
 
146
- this.lut.push( new Color( this.map[ 0 ][ 1 ] ) );
146
+ this.lut.push( new Color().setHex( this.map[ 0 ][ 1 ], LinearSRGBColorSpace ) );
147
147
 
148
148
  // sample at 1/n, ..., (n-1)/n
149
149
 
@@ -173,7 +173,7 @@ class Lut {
173
173
 
174
174
  // sample at 1
175
175
 
176
- this.lut.push( new Color( this.map[ this.map.length - 1 ][ 1 ] ) );
176
+ this.lut.push( new Color().setHex( this.map[ this.map.length - 1 ][ 1 ], LinearSRGBColorSpace ) );
177
177
 
178
178
  return this;
179
179
 
@@ -384,7 +384,7 @@ class OBB {
384
384
 
385
385
  // compute distance of the OBB's center from the plane
386
386
 
387
- const d = plane.normal.dot( this.center ) - plane.constant;
387
+ const d = plane.distanceToPoint( this.center );
388
388
 
389
389
  // Intersection occurs when distance d falls within [-r,+r] interval
390
390
 
@@ -515,9 +515,9 @@ class OBB {
515
515
  rotationMatrix.elements[ 7 ] *= invSZ;
516
516
  rotationMatrix.elements[ 8 ] *= invSZ;
517
517
 
518
- this.rotation.multiply( rotationMatrix );
518
+ this.rotation.premultiply( rotationMatrix );
519
519
 
520
- this.halfSize.x *= sx;
520
+ this.halfSize.x *= Math.abs( sx );
521
521
  this.halfSize.y *= sy;
522
522
  this.halfSize.z *= sz;
523
523
 
@@ -47,27 +47,27 @@ function lineToLineClosestPoints( line1, line2, target1 = null, target2 = null )
47
47
  const d1 = - d / c;
48
48
  const d2 = ( a - d ) / c;
49
49
 
50
- if ( Math.abs( d1 - 0.5 ) < Math.abs( d2 - 0.5 ) ) {
50
+ t1 = ( Math.abs( d1 - 0.5 ) < Math.abs( d2 - 0.5 ) ) ? 0 : 1;
51
51
 
52
- t1 = 0;
53
- t2 = d1;
52
+ } else {
54
53
 
55
- } else {
54
+ t1 = ( e * c - d * a ) / divisor;
56
55
 
57
- t1 = 1;
58
- t2 = d2;
56
+ }
59
57
 
60
- }
58
+ // clamp to the segments. if the closest point on the second segment has
59
+ // to be clamped, the one on the first segment must be recomputed
61
60
 
62
- } else {
61
+ t1 = Math.max( 0, Math.min( 1, t1 ) );
62
+ t2 = ( t1 * a - d ) / c;
63
63
 
64
- t1 = ( d * a + e * c ) / divisor;
65
- t2 = ( t1 * a - d ) / c;
64
+ if ( t2 < 0 || t2 > 1 ) {
66
65
 
67
- }
66
+ t2 = Math.max( 0, Math.min( 1, t2 ) );
68
67
 
69
- t2 = Math.max( 0, Math.min( 1, t2 ) );
70
- t1 = Math.max( 0, Math.min( 1, t1 ) );
68
+ if ( b > EPS ) t1 = Math.max( 0, Math.min( 1, ( t2 * a + e ) / b ) );
69
+
70
+ }
71
71
 
72
72
  if ( target1 ) {
73
73
 
@@ -222,7 +222,11 @@ class Octree {
222
222
  box.min.copy( this.box.min ).add( v.multiply( halfsize ) );
223
223
  box.max.copy( box.min ).add( halfsize );
224
224
 
225
- subTrees.push( new Octree( box ) );
225
+ const subTree = new Octree( box );
226
+ subTree.trianglesPerLeaf = this.trianglesPerLeaf;
227
+ subTree.maxLevel = this.maxLevel;
228
+
229
+ subTrees.push( subTree );
226
230
 
227
231
  }
228
232
 
@@ -424,7 +428,7 @@ class Octree {
424
428
  };
425
429
 
426
430
  // project the point onto the triangle surface
427
- intersection.point.addScaledVector( intersection.normal, distance );
431
+ intersection.point.addScaledVector( intersection.normal, - distance );
428
432
 
429
433
  return intersection;
430
434
 
@@ -444,8 +448,7 @@ class Octree {
444
448
 
445
449
  if ( ! sphere.intersectsPlane( _plane ) ) return false;
446
450
 
447
- const depth = Math.abs( _plane.distanceToSphere( sphere ) );
448
- const r2 = sphere.radius * sphere.radius - depth * depth;
451
+ const r2 = sphere.radius * sphere.radius;
449
452
 
450
453
  const plainPoint = _plane.projectPoint( sphere.center, _v1 );
451
454
 
@@ -15,6 +15,7 @@ import {
15
15
 
16
16
  import {
17
17
  Discard,
18
+ EPSILON,
18
19
  Fn,
19
20
  If,
20
21
  atan,
@@ -957,14 +958,14 @@ function createMaterialNodes( buffers, sort, localCameraPosition ) {
957
958
  const c = cBase.add( KERNEL_2D_SIZE ).toVar( 'cov2dC' );
958
959
  const detBase = aBase.mul( cBase ).sub( b.mul( b ) ).toVar( 'detBase' );
959
960
  const det = a.mul( c ).sub( b.mul( b ) ).toVar( 'det' );
960
- const alphaScale = sqrt( max( detBase.div( max( det, 0.000001 ) ), 0 ) ).toVar( 'alphaScale' );
961
+ const alphaScale = sqrt( max( detBase.div( max( det, EPSILON ) ), 0 ) ).toVar( 'alphaScale' );
961
962
 
962
963
  splatColor.assign( vec4( rgb.clamp( 0, 1 ), color.a.mul( alphaScale ) ) );
963
964
 
964
965
  const halfTrace = a.add( c ).mul( 0.5 ).toVar( 'halfTrace' );
965
- const radius = sqrt( max( a.sub( c ).mul( 0.5 ).pow2().add( b.mul( b ) ), 0.0000001 ) ).toVar( 'radius' );
966
- const lambda1 = max( halfTrace.add( radius ), 0.0000001 ).toVar( 'lambda1' );
967
- const lambda2 = max( halfTrace.sub( radius ), 0.0000001 ).toVar( 'lambda2' );
966
+ const radius = sqrt( max( a.sub( c ).mul( 0.5 ).pow2().add( b.mul( b ) ), EPSILON ) ).toVar( 'radius' );
967
+ const lambda1 = max( halfTrace.add( radius ), EPSILON ).toVar( 'lambda1' );
968
+ const lambda2 = max( halfTrace.sub( radius ), EPSILON ).toVar( 'lambda2' );
968
969
  const axis1 = vec2( 1, 0 ).toVar( 'axis1' );
969
970
 
970
971
  If( radius.greaterThan( 0.00001 ), () => {
@@ -156,6 +156,11 @@ class Reflector extends Mesh {
156
156
  reflectionCamera.updateMatrixWorld();
157
157
  reflectionCamera.projectionMatrix.copy( camera.projectionMatrix );
158
158
 
159
+ // The reflection is mirrored horizontally, so the view offset must be mirrored as well.
160
+
161
+ reflectionCamera.projectionMatrix.elements[ 8 ] *= - 1;
162
+ reflectionCamera.projectionMatrix.elements[ 12 ] *= - 1;
163
+
159
164
  // Update the texture matrix
160
165
  textureMatrix.set(
161
166
  0.5, 0.0, 0.0, 0.5,
@@ -51,28 +51,35 @@ class SkyMesh extends Mesh {
51
51
  super( new BoxGeometry( 1, 1, 1 ), material );
52
52
 
53
53
  /**
54
- * The turbidity uniform.
54
+ * The atmospheric turbidity which controls the amount of haze.
55
+ * Higher values produce a hazier sky.
55
56
  *
56
57
  * @type {UniformNode<float>}
57
58
  */
58
59
  this.turbidity = uniform( 2 );
59
60
 
60
61
  /**
61
- * The rayleigh uniform.
62
+ * The strength of Rayleigh scattering by air molecules
63
+ * which is responsible for the blue color of the sky.
64
+ * Higher values produce a brighter sky.
62
65
  *
63
66
  * @type {UniformNode<float>}
64
67
  */
65
68
  this.rayleigh = uniform( 1 );
66
69
 
67
70
  /**
68
- * The mieCoefficient uniform.
71
+ * The strength of Mie scattering by aerosol particles
72
+ * which controls the intensity of the glow around the sun.
73
+ * Higher values produce a brighter glow.
69
74
  *
70
75
  * @type {UniformNode<float>}
71
76
  */
72
77
  this.mieCoefficient = uniform( 0.005 );
73
78
 
74
79
  /**
75
- * The mieDirectionalG uniform.
80
+ * The directionality of Mie scattering which controls
81
+ * the size of the glow around the sun. Values closer to `1`
82
+ * produce a smaller and more concentrated halo.
76
83
  *
77
84
  * @type {UniformNode<float>}
78
85
  */
@@ -285,7 +292,7 @@ class SkyMesh extends Mesh {
285
292
 
286
293
  return fract( p.xx.add( p.yz ).mul( p.zy ) ).mul( 2.0 ).sub( 1.0 );
287
294
 
288
- } );
295
+ }, { i: 'vec2', return: 'vec2' } );
289
296
 
290
297
  // 2D gradient noise: isotropic lobes like Perlin at value-noise cost
291
298
  const noise = Fn( ( [ p ] ) => {
@@ -301,7 +308,7 @@ class SkyMesh extends Mesh {
301
308
 
302
309
  return mix( mix( a, b, u.x ), mix( c, d, u.x ), u.y ).mul( 1.6 ); // ~[-1,1]
303
310
 
304
- } );
311
+ }, { p: 'vec2', return: 'float' } );
305
312
 
306
313
  // fbm; per-octave drift makes clouds billow instead of scrolling as a rigid stamp
307
314
  const fbm = Fn( ( [ position, drift ] ) => {
@@ -320,7 +327,7 @@ class SkyMesh extends Mesh {
320
327
 
321
328
  return result;
322
329
 
323
- } );
330
+ }, { position: 'vec2', drift: 'vec2', return: 'float' } );
324
331
 
325
332
  // Clouds
326
333
  If( direction.y.greaterThan( 0.0 ).and( this.cloudCoverage.greaterThan( 0.0 ) ), () => {
@@ -5,7 +5,7 @@ import {
5
5
  Vector3,
6
6
  NodeMaterial,
7
7
  NodeUpdateType,
8
- TempNode
8
+ Node
9
9
  } from 'three/webgpu';
10
10
 
11
11
  import { Fn, vec2, viewportSafeUV, viewportSharedTexture, reflector, pow, float, abs, texture, uniform, vec4, cameraPosition, positionWorld, uv, mix, vec3, normalize, max, dot, screenUV } from 'three/tsl';
@@ -56,7 +56,7 @@ class WaterMesh extends Mesh {
56
56
 
57
57
  }
58
58
 
59
- class WaterNode extends TempNode {
59
+ class WaterNode extends Node {
60
60
 
61
61
  constructor( options, waterBody ) {
62
62
 
@@ -1,6 +1,6 @@
1
1
  import { Timer, Vector3, Quaternion, Matrix4 } from 'three';
2
2
 
3
- const RAPIER_PATH = 'https://cdn.skypack.dev/@dimforge/rapier3d-compat@0.17.3';
3
+ const RAPIER_PATH = 'https://cdn.jsdelivr.net/npm/@dimforge/rapier3d-compat@0.21.0/dist/rapier.mjs';
4
4
 
5
5
  const frameRate = 60;
6
6
 
@@ -321,7 +321,7 @@ async function RapierPhysics() {
321
321
 
322
322
  timer.update();
323
323
 
324
- world.timestep = timer.getDelta();
324
+ world.timestep = Math.min( timer.getDelta(), 1 / 30 );
325
325
  world.step();
326
326
 
327
327
  //