@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
@@ -470,6 +470,8 @@ class Curve {
470
470
 
471
471
  this.arcLengthDivisions = source.arcLengthDivisions;
472
472
 
473
+ this.cacheArcLengths = null;
474
+
473
475
  return this;
474
476
 
475
477
  }
@@ -507,6 +509,8 @@ class Curve {
507
509
 
508
510
  this.arcLengthDivisions = json.arcLengthDivisions;
509
511
 
512
+ this.cacheArcLengths = null;
513
+
510
514
  return this;
511
515
 
512
516
  }
@@ -35,6 +35,15 @@ class CurvePath extends Curve {
35
35
  */
36
36
  this.autoClose = false;
37
37
 
38
+ /**
39
+ * An internal cache that holds precomputed curve length values.
40
+ *
41
+ * @private
42
+ * @type {?Array<number>}
43
+ * @default null
44
+ */
45
+ this.cacheLengths = null;
46
+
38
47
  }
39
48
 
40
49
  /**
@@ -250,6 +259,8 @@ class CurvePath extends Curve {
250
259
 
251
260
  this.autoClose = source.autoClose;
252
261
 
262
+ this.cacheLengths = null;
263
+
253
264
  return this;
254
265
 
255
266
  }
@@ -286,6 +297,8 @@ class CurvePath extends Curve {
286
297
 
287
298
  }
288
299
 
300
+ this.cacheLengths = null;
301
+
289
302
  return this;
290
303
 
291
304
  }
@@ -30,7 +30,7 @@ class ShapePath {
30
30
  * The paths that have been generated for this shape.
31
31
  *
32
32
  * @type {Array<Path>}
33
- * @default null
33
+ * @default []
34
34
  */
35
35
  this.subPaths = [];
36
36
 
@@ -64,7 +64,7 @@ class EdgesGeometry extends BufferGeometry {
64
64
  const vertKeys = [ 'a', 'b', 'c' ];
65
65
  const hashes = new Array( 3 );
66
66
 
67
- const edgeData = {};
67
+ const edgeData = new Map();
68
68
  const vertices = [];
69
69
  for ( let i = 0; i < indexCount; i += 3 ) {
70
70
 
@@ -113,29 +113,31 @@ class EdgesGeometry extends BufferGeometry {
113
113
  const hash = `${ vecHash0 }_${ vecHash1 }`;
114
114
  const reverseHash = `${ vecHash1 }_${ vecHash0 }`;
115
115
 
116
- if ( reverseHash in edgeData && edgeData[ reverseHash ] ) {
116
+ const sibling = edgeData.get( reverseHash );
117
+
118
+ if ( sibling ) {
117
119
 
118
120
  // if we found a sibling edge add it into the vertex array if
119
121
  // it meets the angle threshold and delete the edge from the map.
120
- if ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {
122
+ if ( _normal.dot( sibling.normal ) <= thresholdDot ) {
121
123
 
122
124
  vertices.push( v0.x, v0.y, v0.z );
123
125
  vertices.push( v1.x, v1.y, v1.z );
124
126
 
125
127
  }
126
128
 
127
- edgeData[ reverseHash ] = null;
129
+ edgeData.set( reverseHash, null );
128
130
 
129
- } else if ( ! ( hash in edgeData ) ) {
131
+ } else if ( ! edgeData.has( hash ) ) {
130
132
 
131
133
  // if we've already got an edge here then skip adding a new one
132
- edgeData[ hash ] = {
134
+ edgeData.set( hash, {
133
135
 
134
136
  index0: indexArr[ j ],
135
137
  index1: indexArr[ jNext ],
136
138
  normal: _normal.clone(),
137
139
 
138
- };
140
+ } );
139
141
 
140
142
  }
141
143
 
@@ -144,11 +146,11 @@ class EdgesGeometry extends BufferGeometry {
144
146
  }
145
147
 
146
148
  // iterate over all remaining, unmatched edges and add them to the vertex array
147
- for ( const key in edgeData ) {
149
+ for ( const edge of edgeData.values() ) {
148
150
 
149
- if ( edgeData[ key ] ) {
151
+ if ( edge ) {
150
152
 
151
- const { index0, index1 } = edgeData[ key ];
153
+ const { index0, index1 } = edge;
152
154
  _v0.fromBufferAttribute( positionAttr, index0 );
153
155
  _v1.fromBufferAttribute( positionAttr, index1 );
154
156
 
@@ -103,6 +103,8 @@ class LatheGeometry extends BufferGeometry {
103
103
 
104
104
  case ( points.length - 1 ): // special handling for last Vertex on path
105
105
 
106
+ prevNormal.normalize();
107
+
106
108
  initNormals.push( prevNormal.x, prevNormal.y, prevNormal.z );
107
109
 
108
110
  break;
@@ -27,7 +27,7 @@ class PolarGridHelper extends LineSegments {
27
27
  *
28
28
  * @param {number} [radius=10] - The radius of the polar grid. This can be any positive number.
29
29
  * @param {number} [sectors=16] - The number of sectors the grid will be divided into. This can be any positive integer.
30
- * @param {number} [rings=16] - The number of rings. This can be any positive integer.
30
+ * @param {number} [rings=8] - The number of rings. This can be any positive integer.
31
31
  * @param {number} [divisions=64] - The number of line segments used for each circle. This can be any positive integer.
32
32
  * @param {number|Color|string} [color1=0x444444] - The first color used for grid elements.
33
33
  * @param {number|Color|string} [color2=0x888888] - The second color used for grid elements.
@@ -10,6 +10,17 @@ import { Color } from '../math/Color.js';
10
10
  */
11
11
  class Light extends Object3D {
12
12
 
13
+ /**
14
+ * Registers the node class that `WebGPURenderer` uses to shade lights of this type.
15
+ *
16
+ * @param {AnalyticLightNode.constructor} lightNodeClass - The light node class.
17
+ */
18
+ static registerNode( lightNodeClass ) {
19
+
20
+ this.prototype._lightNode = lightNodeClass;
21
+
22
+ }
23
+
13
24
  /**
14
25
  * Constructs a new light.
15
26
  *
@@ -41,6 +41,8 @@ class LightProbe extends Light {
41
41
  */
42
42
  this.isLightProbe = true;
43
43
 
44
+ this.type = 'LightProbe';
45
+
44
46
  /**
45
47
  * A light probe uses spherical harmonics to encode lighting information.
46
48
  *
@@ -331,6 +331,7 @@ class LightShadow {
331
331
  this.blurSamples = source.blurSamples;
332
332
 
333
333
  this.mapSize.copy( source.mapSize );
334
+ this.mapType = source.mapType;
334
335
 
335
336
  this.biasNode = source.biasNode;
336
337
 
@@ -365,6 +366,7 @@ class LightShadow {
365
366
  object.radius = this.radius;
366
367
  object.blurSamples = this.blurSamples;
367
368
  object.mapSize = this.mapSize.toArray();
369
+ object.mapType = this.mapType;
368
370
 
369
371
  object.camera = this.camera.toJSON( false ).object;
370
372
  delete object.camera.matrix;
@@ -41,6 +41,8 @@ class AnimationLoader extends Loader {
41
41
  const scope = this;
42
42
 
43
43
  const loader = new FileLoader( this.manager );
44
+ loader.setPriority( this.priority );
45
+ loader.setCache( this.cache );
44
46
  loader.setPath( this.path );
45
47
  loader.setRequestHeader( this.requestHeader );
46
48
  loader.setWithCredentials( this.withCredentials );
@@ -47,6 +47,8 @@ class AudioLoader extends Loader {
47
47
  const scope = this;
48
48
 
49
49
  const loader = new FileLoader( this.manager );
50
+ loader.setPriority( this.priority );
51
+ loader.setCache( this.cache );
50
52
  loader.setResponseType( 'arraybuffer' );
51
53
  loader.setPath( this.path );
52
54
  loader.setRequestHeader( this.requestHeader );
@@ -50,6 +50,8 @@ class BufferGeometryLoader extends Loader {
50
50
  const scope = this;
51
51
 
52
52
  const loader = new FileLoader( scope.manager );
53
+ loader.setPriority( scope.priority );
54
+ loader.setCache( scope.cache );
53
55
  loader.setPath( scope.path );
54
56
  loader.setRequestHeader( scope.requestHeader );
55
57
  loader.setWithCredentials( scope.withCredentials );
@@ -47,6 +47,8 @@ class CompressedTextureLoader extends Loader {
47
47
  const texture = new CompressedTexture();
48
48
 
49
49
  const loader = new FileLoader( this.manager );
50
+ loader.setPriority( this.priority );
51
+ loader.setCache( this.cache );
50
52
  loader.setPath( this.path );
51
53
  loader.setResponseType( 'arraybuffer' );
52
54
  loader.setRequestHeader( this.requestHeader );
@@ -62,6 +62,8 @@ class CubeTextureLoader extends Loader {
62
62
  texture.colorSpace = SRGBColorSpace;
63
63
 
64
64
  const loader = new ImageLoader( this.manager );
65
+ loader.setPriority( this.priority );
66
+ loader.setCache( this.cache );
65
67
  loader.setCrossOrigin( this.crossOrigin );
66
68
  loader.setPath( this.path );
67
69
 
@@ -46,6 +46,8 @@ class DataTextureLoader extends Loader {
46
46
  const texture = new DataTexture();
47
47
 
48
48
  const loader = new FileLoader( this.manager );
49
+ loader.setPriority( this.priority );
50
+ loader.setCache( this.cache );
49
51
  loader.setResponseType( 'arraybuffer' );
50
52
  loader.setRequestHeader( this.requestHeader );
51
53
  loader.setPath( this.path );
@@ -130,6 +130,8 @@ class FileLoader extends Loader {
130
130
  const req = new Request( url, {
131
131
  headers: new Headers( this.requestHeader ),
132
132
  credentials: this.withCredentials ? 'include' : 'same-origin',
133
+ priority: this.priority,
134
+ cache: this.cache,
133
135
  signal: ( typeof AbortSignal.any === 'function' ) ? AbortSignal.any( [ this._abortController.signal, this.manager.abortController.signal ] ) : this._abortController.signal
134
136
  } );
135
137
 
@@ -166,8 +166,10 @@ class ImageBitmapLoader extends Loader {
166
166
  }
167
167
 
168
168
  const fetchOptions = {};
169
- fetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';
169
+ fetchOptions.credentials = ( this.withCredentials || this.crossOrigin !== 'anonymous' ) ? 'include' : 'same-origin';
170
170
  fetchOptions.headers = this.requestHeader;
171
+ fetchOptions.priority = this.priority;
172
+ fetchOptions.cache = this.cache;
171
173
  fetchOptions.signal = ( typeof AbortSignal.any === 'function' ) ? AbortSignal.any( [ this._abortController.signal, this.manager.abortController.signal ] ) : this._abortController.signal;
172
174
 
173
175
  const promise = fetch( url, fetchOptions ).then( function ( res ) {
@@ -156,6 +156,7 @@ class ImageLoader extends Loader {
156
156
  Cache.add( `image:${url}`, image );
157
157
  scope.manager.itemStart( url );
158
158
 
159
+ image.fetchPriority = this.priority;
159
160
  image.src = url;
160
161
 
161
162
  return image;
@@ -61,6 +61,23 @@ class Loader {
61
61
  */
62
62
  this.requestHeader = {};
63
63
 
64
+ /**
65
+ * The request priority hint. Image loaders use `HTMLImageElement.fetchPriority`.
66
+ *
67
+ * @type {('high'|'low'|'auto')}
68
+ * @default 'auto'
69
+ */
70
+ this.priority = 'auto';
71
+
72
+ /**
73
+ * The HTTP cache mode passed to `fetch()`. This does not affect {@link Cache}
74
+ * or loaders using `HTMLImageElement`.
75
+ *
76
+ * @type {('default'|'no-store'|'reload'|'no-cache'|'force-cache')}
77
+ * @default 'default'
78
+ */
79
+ this.cache = 'default';
80
+
64
81
  if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {
65
82
 
66
83
  __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );
@@ -179,6 +196,36 @@ class Loader {
179
196
 
180
197
  }
181
198
 
199
+ /**
200
+ * Sets a browser scheduling hint. Browsers may ignore this hint.
201
+ * Internally created loaders inherit it. Loaders supplied by the application
202
+ * (for example decoder loaders or loading manager handlers) retain their own settings.
203
+ *
204
+ * @param {('high'|'low'|'auto')} value - The request priority hint.
205
+ * @return {Loader} A reference to this instance.
206
+ */
207
+ setPriority( value ) {
208
+
209
+ this.priority = value;
210
+ return this;
211
+
212
+ }
213
+
214
+ /**
215
+ * Sets the HTTP cache mode for fetch requests. `no-cache` revalidates cached
216
+ * responses; `no-store` bypasses the HTTP cache. This does not affect
217
+ * {@link Cache} or image element requests.
218
+ *
219
+ * @param {('default'|'no-store'|'reload'|'no-cache'|'force-cache')} value - The HTTP cache mode.
220
+ * @return {Loader} A reference to this instance.
221
+ */
222
+ setCache( value ) {
223
+
224
+ this.cache = value;
225
+ return this;
226
+
227
+ }
228
+
182
229
  /**
183
230
  * This method can be implemented in loaders for aborting ongoing requests.
184
231
  *
@@ -69,6 +69,8 @@ class MaterialLoader extends Loader {
69
69
  const scope = this;
70
70
 
71
71
  const loader = new FileLoader( scope.manager );
72
+ loader.setPriority( scope.priority );
73
+ loader.setCache( scope.cache );
72
74
  loader.setPath( scope.path );
73
75
  loader.setRequestHeader( scope.requestHeader );
74
76
  loader.setWithCredentials( scope.withCredentials );
@@ -4,7 +4,6 @@ import {
4
4
  CubeRefractionMapping,
5
5
  EquirectangularReflectionMapping,
6
6
  EquirectangularRefractionMapping,
7
- CubeUVReflectionMapping,
8
7
 
9
8
  RepeatWrapping,
10
9
  ClampToEdgeWrapping,
@@ -112,6 +111,8 @@ class ObjectLoader extends Loader {
112
111
  this.resourcePath = this.resourcePath || path;
113
112
 
114
113
  const loader = new FileLoader( this.manager );
114
+ loader.setPriority( this.priority );
115
+ loader.setCache( this.cache );
115
116
  loader.setPath( this.path );
116
117
  loader.setRequestHeader( this.requestHeader );
117
118
  loader.setWithCredentials( this.withCredentials );
@@ -166,6 +167,8 @@ class ObjectLoader extends Loader {
166
167
  this.resourcePath = this.resourcePath || path;
167
168
 
168
169
  const loader = new FileLoader( this.manager );
170
+ loader.setPriority( this.priority );
171
+ loader.setCache( this.cache );
169
172
  loader.setPath( this.path );
170
173
  loader.setRequestHeader( this.requestHeader );
171
174
  loader.setWithCredentials( this.withCredentials );
@@ -511,6 +514,8 @@ class ObjectLoader extends Loader {
511
514
  const manager = new LoadingManager( onLoad );
512
515
 
513
516
  loader = new ImageLoader( manager );
517
+ loader.setPriority( this.priority );
518
+ loader.setCache( this.cache );
514
519
  loader.setCrossOrigin( this.crossOrigin );
515
520
 
516
521
  for ( let i = 0, il = json.length; i < il; i ++ ) {
@@ -608,6 +613,8 @@ class ObjectLoader extends Loader {
608
613
  if ( json !== undefined && json.length > 0 ) {
609
614
 
610
615
  loader = new ImageLoader( this.manager );
616
+ loader.setPriority( this.priority );
617
+ loader.setCache( this.cache );
611
618
  loader.setCrossOrigin( this.crossOrigin );
612
619
 
613
620
  for ( let i = 0, il = json.length; i < il; i ++ ) {
@@ -756,6 +763,7 @@ class ObjectLoader extends Loader {
756
763
  if ( data.flipY !== undefined ) texture.flipY = data.flipY;
757
764
 
758
765
  if ( data.generateMipmaps !== undefined ) texture.generateMipmaps = data.generateMipmaps;
766
+ if ( data.mipmapsAutoUpdate !== undefined ) texture.mipmapsAutoUpdate = data.mipmapsAutoUpdate;
759
767
  if ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;
760
768
  if ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;
761
769
  if ( data.compareFunction !== undefined ) texture.compareFunction = data.compareFunction;
@@ -945,6 +953,8 @@ class ObjectLoader extends Loader {
945
953
  object = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );
946
954
  object.target = data.target || '';
947
955
 
956
+ if ( data.map !== undefined ) object.map = getTexture( data.map );
957
+
948
958
  break;
949
959
 
950
960
  case 'HemisphereLight':
@@ -1034,8 +1044,8 @@ class ObjectLoader extends Loader {
1034
1044
  } );
1035
1045
  object._instanceInfo = data.instanceInfo;
1036
1046
 
1037
- object._availableInstanceIds = data._availableInstanceIds;
1038
- object._availableGeometryIds = data._availableGeometryIds;
1047
+ object._availableInstanceIds = data.availableInstanceIds;
1048
+ object._availableGeometryIds = data.availableGeometryIds;
1039
1049
 
1040
1050
  object._nextIndexStart = data.nextIndexStart;
1041
1051
  object._nextVertexStart = data.nextVertexStart;
@@ -1106,6 +1116,8 @@ class ObjectLoader extends Loader {
1106
1116
 
1107
1117
  object = new Sprite( getMaterial( data.material ) );
1108
1118
 
1119
+ if ( data.center !== undefined ) object.center.fromArray( data.center );
1120
+
1109
1121
  break;
1110
1122
 
1111
1123
  case 'Group':
@@ -1130,12 +1142,21 @@ class ObjectLoader extends Loader {
1130
1142
 
1131
1143
  if ( data.name !== undefined ) object.name = data.name;
1132
1144
 
1145
+ if ( data.pivot !== undefined ) object.pivot = new Vector3().fromArray( data.pivot );
1146
+
1133
1147
  if ( data.matrix !== undefined ) {
1134
1148
 
1135
1149
  object.matrix.fromArray( data.matrix );
1136
1150
 
1137
1151
  if ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;
1138
- if ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );
1152
+
1153
+ if ( object.matrixAutoUpdate ) {
1154
+
1155
+ object.matrix.decompose( object.position, object.quaternion, object.scale );
1156
+
1157
+ if ( object.pivot !== null ) object.position.copy( object.pivot ).applyMatrix4( object.matrix ).sub( object.pivot );
1158
+
1159
+ }
1139
1160
 
1140
1161
  } else {
1141
1162
 
@@ -1148,8 +1169,6 @@ class ObjectLoader extends Loader {
1148
1169
 
1149
1170
  if ( data.up !== undefined ) object.up.fromArray( data.up );
1150
1171
 
1151
- if ( data.pivot !== undefined ) object.pivot = new Vector3().fromArray( data.pivot );
1152
-
1153
1172
  if ( data.morphTargetDictionary !== undefined ) object.morphTargetDictionary = Object.assign( {}, data.morphTargetDictionary );
1154
1173
  if ( data.morphTargetInfluences !== undefined ) object.morphTargetInfluences = data.morphTargetInfluences.slice();
1155
1174
 
@@ -1166,6 +1185,7 @@ class ObjectLoader extends Loader {
1166
1185
  if ( data.shadow.focus !== undefined ) object.shadow.focus = data.shadow.focus;
1167
1186
  if ( data.shadow.aspect !== undefined ) object.shadow.aspect = data.shadow.aspect;
1168
1187
  if ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );
1188
+ if ( data.shadow.mapType !== undefined ) object.shadow.mapType = data.shadow.mapType;
1169
1189
  if ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );
1170
1190
 
1171
1191
  }
@@ -1287,8 +1307,7 @@ const TEXTURE_MAPPING = {
1287
1307
  CubeReflectionMapping: CubeReflectionMapping,
1288
1308
  CubeRefractionMapping: CubeRefractionMapping,
1289
1309
  EquirectangularReflectionMapping: EquirectangularReflectionMapping,
1290
- EquirectangularRefractionMapping: EquirectangularRefractionMapping,
1291
- CubeUVReflectionMapping: CubeUVReflectionMapping
1310
+ EquirectangularRefractionMapping: EquirectangularRefractionMapping
1292
1311
  };
1293
1312
 
1294
1313
  const TEXTURE_WRAPPING = {
@@ -38,9 +38,9 @@ class TextureLoader extends Loader {
38
38
  * may pop up in your scene once the respective loading process is finished.
39
39
  *
40
40
  * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
41
- * @param {function(Texture)} onLoad - Executed when the loading process has been finished.
42
- * @param {onProgressCallback} onProgress - Unsupported in this loader.
43
- * @param {onErrorCallback} onError - Executed when errors occur.
41
+ * @param {function(Texture)} [onLoad] - Executed when the loading process has been finished.
42
+ * @param {onProgressCallback} [onProgress] - Unsupported in this loader.
43
+ * @param {onErrorCallback} [onError] - Executed when errors occur.
44
44
  * @return {Texture} The texture.
45
45
  */
46
46
  load( url, onLoad, onProgress, onError ) {
@@ -48,6 +48,8 @@ class TextureLoader extends Loader {
48
48
  const texture = new Texture();
49
49
 
50
50
  const loader = new ImageLoader( this.manager );
51
+ loader.setPriority( this.priority );
52
+ loader.setCache( this.cache );
51
53
  loader.setCrossOrigin( this.crossOrigin );
52
54
  loader.setPath( this.path );
53
55
 
@@ -47,6 +47,8 @@ class NodeLoader extends Loader {
47
47
  load( url, onLoad, onProgress, onError ) {
48
48
 
49
49
  const loader = new FileLoader( this.manager );
50
+ loader.setPriority( this.priority );
51
+ loader.setCache( this.cache );
50
52
  loader.setPath( this.path );
51
53
  loader.setRequestHeader( this.requestHeader );
52
54
  loader.setWithCredentials( this.withCredentials );
@@ -702,6 +702,13 @@ class Material extends EventDispatcher {
702
702
  if ( this.shininess !== undefined ) data.shininess = this.shininess;
703
703
  if ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;
704
704
  if ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;
705
+ if ( this.diffuseRoughness !== undefined ) data.diffuseRoughness = this.diffuseRoughness;
706
+
707
+ if ( this.diffuseRoughnessMap && this.diffuseRoughnessMap.isTexture ) {
708
+
709
+ data.diffuseRoughnessMap = this.diffuseRoughnessMap.toJSON( meta ).uuid;
710
+
711
+ }
705
712
 
706
713
  if ( this.clearcoatMap && this.clearcoatMap.isTexture ) {
707
714
 
@@ -739,7 +746,8 @@ class Material extends EventDispatcher {
739
746
 
740
747
  if ( this.iridescence !== undefined ) data.iridescence = this.iridescence;
741
748
  if ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;
742
- if ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;
749
+ if ( this.iridescenceThicknessMinimum !== undefined ) data.iridescenceThicknessMinimum = this.iridescenceThicknessMinimum;
750
+ if ( this.iridescenceThicknessMaximum !== undefined ) data.iridescenceThicknessMaximum = this.iridescenceThicknessMaximum;
743
751
 
744
752
  if ( this.iridescenceMap && this.iridescenceMap.isTexture ) {
745
753
 
@@ -926,11 +934,21 @@ class Material extends EventDispatcher {
926
934
  if ( json.shininess !== undefined ) this.shininess = json.shininess;
927
935
  if ( json.clearcoat !== undefined ) this.clearcoat = json.clearcoat;
928
936
  if ( json.clearcoatRoughness !== undefined ) this.clearcoatRoughness = json.clearcoatRoughness;
937
+ if ( json.diffuseRoughness !== undefined ) this.diffuseRoughness = json.diffuseRoughness;
929
938
  if ( json.dispersion !== undefined ) this.dispersion = json.dispersion;
930
939
  if ( json.retroreflectivity !== undefined ) this.retroreflectivity = json.retroreflectivity;
931
940
  if ( json.iridescence !== undefined ) this.iridescence = json.iridescence;
932
941
  if ( json.iridescenceIOR !== undefined ) this.iridescenceIOR = json.iridescenceIOR;
933
- if ( json.iridescenceThicknessRange !== undefined ) this.iridescenceThicknessRange = json.iridescenceThicknessRange;
942
+ if ( json.iridescenceThicknessMinimum !== undefined ) this.iridescenceThicknessMinimum = json.iridescenceThicknessMinimum;
943
+ if ( json.iridescenceThicknessMaximum !== undefined ) this.iridescenceThicknessMaximum = json.iridescenceThicknessMaximum;
944
+
945
+ if ( json.iridescenceThicknessRange !== undefined ) { // @deprecated r187
946
+
947
+ this.iridescenceThicknessMinimum = json.iridescenceThicknessRange[ 0 ];
948
+ this.iridescenceThicknessMaximum = json.iridescenceThicknessRange[ 1 ];
949
+
950
+ }
951
+
934
952
  if ( json.transmission !== undefined ) this.transmission = json.transmission;
935
953
  if ( json.thickness !== undefined ) this.thickness = json.thickness;
936
954
  if ( json.attenuationDistance !== undefined ) this.attenuationDistance = json.attenuationDistance;
@@ -1083,6 +1101,7 @@ class Material extends EventDispatcher {
1083
1101
  if ( json.clearcoatRoughnessMap !== undefined ) this.clearcoatRoughnessMap = textures[ json.clearcoatRoughnessMap ] || null;
1084
1102
  if ( json.clearcoatNormalMap !== undefined ) this.clearcoatNormalMap = textures[ json.clearcoatNormalMap ] || null;
1085
1103
  if ( json.clearcoatNormalScale !== undefined ) this.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );
1104
+ if ( json.diffuseRoughnessMap !== undefined ) this.diffuseRoughnessMap = textures[ json.diffuseRoughnessMap ] || null;
1086
1105
 
1087
1106
  if ( json.iridescenceMap !== undefined ) this.iridescenceMap = textures[ json.iridescenceMap ] || null;
1088
1107
  if ( json.iridescenceThicknessMap !== undefined ) this.iridescenceThicknessMap = textures[ json.iridescenceThicknessMap ] || null;
@@ -95,7 +95,7 @@ class MeshDepthMaterial extends Material {
95
95
  * map set, this value is not applied.
96
96
  *
97
97
  * @type {number}
98
- * @default 0
98
+ * @default 1
99
99
  */
100
100
  this.displacementScale = 1;
101
101
 
@@ -90,7 +90,7 @@ class MeshDistanceMaterial extends Material {
90
90
  * map set, this value is not applied.
91
91
  *
92
92
  * @type {number}
93
- * @default 0
93
+ * @default 1
94
94
  */
95
95
  this.displacementScale = 1;
96
96
 
@@ -221,7 +221,7 @@ class MeshLambertMaterial extends Material {
221
221
  * map set, this value is not applied.
222
222
  *
223
223
  * @type {number}
224
- * @default 0
224
+ * @default 1
225
225
  */
226
226
  this.displacementScale = 1;
227
227
 
@@ -157,7 +157,7 @@ class MeshMatcapMaterial extends Material {
157
157
  * map set, this value is not applied.
158
158
  *
159
159
  * @type {number}
160
- * @default 0
160
+ * @default 1
161
161
  */
162
162
  this.displacementScale = 1;
163
163
 
@@ -109,7 +109,7 @@ class MeshNormalMaterial extends Material {
109
109
  * map set, this value is not applied.
110
110
  *
111
111
  * @type {number}
112
- * @default 0
112
+ * @default 1
113
113
  */
114
114
  this.displacementScale = 1;
115
115
 
@@ -236,7 +236,7 @@ class MeshPhongMaterial extends Material {
236
236
  * map set, this value is not applied.
237
237
  *
238
238
  * @type {number}
239
- * @default 0
239
+ * @default 1
240
240
  */
241
241
  this.displacementScale = 1;
242
242