@gnsx/three 0.184.20 → 0.185.3

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 (366) hide show
  1. package/build/three.cjs +1261 -926
  2. package/build/three.core.js +1104 -829
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +157 -97
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +11 -4
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +7542 -3371
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +7542 -3370
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +3 -0
  13. package/examples/jsm/controls/ArcballControls.js +6 -2
  14. package/examples/jsm/controls/FirstPersonControls.js +79 -42
  15. package/examples/jsm/controls/TransformControls.js +68 -15
  16. package/examples/jsm/csm/CSMFrustum.js +31 -6
  17. package/examples/jsm/csm/CSMShadowNode.js +4 -1
  18. package/examples/jsm/effects/AsciiEffect.js +14 -1
  19. package/examples/jsm/exporters/DRACOExporter.js +27 -6
  20. package/examples/jsm/exporters/GLTFExporter.js +114 -12
  21. package/examples/jsm/exporters/PLYExporter.js +286 -73
  22. package/examples/jsm/exporters/USDZExporter.js +347 -112
  23. package/examples/jsm/generators/CityGenerator.js +346 -0
  24. package/examples/jsm/generators/ForestGenerator.js +347 -0
  25. package/examples/jsm/generators/TerrainGenerator.js +504 -0
  26. package/examples/jsm/generators/TreeGenerator.js +377 -0
  27. package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
  28. package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
  29. package/examples/jsm/geometries/LoftGeometry.js +355 -0
  30. package/examples/jsm/helpers/LightProbeGridHelper.js +1 -1
  31. package/examples/jsm/helpers/LightProbeHelper.js +5 -4
  32. package/examples/jsm/helpers/ViewHelper.js +16 -6
  33. package/examples/jsm/inspector/Inspector.js +67 -58
  34. package/examples/jsm/inspector/RendererInspector.js +152 -36
  35. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +1 -1
  36. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -1
  37. package/examples/jsm/inspector/tabs/Console.js +200 -18
  38. package/examples/jsm/inspector/tabs/Memory.js +8 -0
  39. package/examples/jsm/inspector/tabs/Parameters.js +64 -4
  40. package/examples/jsm/inspector/tabs/Performance.js +21 -6
  41. package/examples/jsm/inspector/tabs/Settings.js +51 -9
  42. package/examples/jsm/inspector/tabs/Timeline.js +178 -93
  43. package/examples/jsm/inspector/tabs/Viewer.js +628 -16
  44. package/examples/jsm/inspector/ui/Graph.js +162 -25
  45. package/examples/jsm/inspector/ui/Item.js +92 -13
  46. package/examples/jsm/inspector/ui/List.js +1 -1
  47. package/examples/jsm/inspector/ui/Profiler.js +90 -45
  48. package/examples/jsm/inspector/ui/Style.js +1788 -1401
  49. package/examples/jsm/inspector/ui/Tab.js +5 -3
  50. package/examples/jsm/inspector/ui/Values.js +71 -6
  51. package/examples/jsm/inspector/ui/utils.js +130 -10
  52. package/examples/jsm/libs/basis/README.md +0 -1
  53. package/examples/jsm/libs/demuxer_mp4.js +3 -3
  54. package/examples/jsm/libs/draco/README.md +0 -1
  55. package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
  56. package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
  57. package/examples/jsm/libs/mikktspace.module.js +34 -9
  58. package/examples/jsm/lighting/ClusteredLighting.js +55 -0
  59. package/examples/jsm/lighting/LightProbeGrid.js +124 -91
  60. package/examples/jsm/lines/LineMaterial.js +38 -15
  61. package/examples/jsm/lines/LineSegments2.js +8 -0
  62. package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
  63. package/examples/jsm/loaders/3DMLoader.js +1 -1
  64. package/examples/jsm/loaders/DRACOLoader.js +46 -13
  65. package/examples/jsm/loaders/EXRLoader.js +27 -55
  66. package/examples/jsm/loaders/HDRLoader.js +6 -28
  67. package/examples/jsm/loaders/KTX2Loader.js +31 -12
  68. package/examples/jsm/loaders/LDrawLoader.js +8 -8
  69. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  70. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  71. package/examples/jsm/loaders/LWOLoader.js +4 -0
  72. package/examples/jsm/loaders/LottieLoader.js +1 -1
  73. package/examples/jsm/loaders/MaterialXLoader.js +31 -9
  74. package/examples/jsm/loaders/NRRDLoader.js +3 -3
  75. package/examples/jsm/loaders/PCDLoader.js +7 -7
  76. package/examples/jsm/loaders/PLYLoader.js +218 -55
  77. package/examples/jsm/loaders/SVGLoader.js +547 -495
  78. package/examples/jsm/loaders/TTFLoader.js +1 -1
  79. package/examples/jsm/loaders/USDLoader.js +33 -9
  80. package/examples/jsm/loaders/VRMLLoader.js +1 -1
  81. package/examples/jsm/loaders/usd/USDAParser.js +93 -20
  82. package/examples/jsm/loaders/usd/USDCParser.js +1 -1
  83. package/examples/jsm/loaders/usd/USDComposer.js +52 -19
  84. package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
  85. package/examples/jsm/misc/Volume.js +2 -2
  86. package/examples/jsm/objects/GroundedSkybox.js +1 -1
  87. package/examples/jsm/objects/Reflector.js +2 -3
  88. package/examples/jsm/objects/Water2Mesh.js +1 -1
  89. package/examples/jsm/physics/AmmoPhysics.js +15 -8
  90. package/examples/jsm/physics/RapierPhysics.js +27 -2
  91. package/examples/jsm/shaders/VolumeShader.js +31 -44
  92. package/examples/jsm/transpiler/GLSLDecoder.js +6 -6
  93. package/examples/jsm/transpiler/Linker.js +1 -1
  94. package/examples/jsm/tsl/display/BloomNode.js +59 -19
  95. package/examples/jsm/tsl/display/DepthOfFieldNode.js +2 -2
  96. package/examples/jsm/tsl/display/FXAANode.js +11 -12
  97. package/examples/jsm/tsl/display/GTAONode.js +34 -13
  98. package/examples/jsm/tsl/display/GodraysNode.js +1 -1
  99. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
  100. package/examples/jsm/tsl/display/PixelationPassNode.js +2 -2
  101. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
  102. package/examples/jsm/tsl/display/SSAAPassNode.js +13 -25
  103. package/examples/jsm/tsl/display/SSGINode.js +89 -39
  104. package/examples/jsm/tsl/display/SSRNode.js +829 -132
  105. package/examples/jsm/tsl/display/SSSNode.js +2 -2
  106. package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
  107. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
  108. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +1 -1
  109. package/examples/jsm/tsl/math/curlNoise.js +107 -0
  110. package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
  111. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
  112. package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
  113. package/examples/jsm/tsl/utils/RNoise.js +51 -0
  114. package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
  115. package/examples/jsm/utils/BufferGeometryUtils.js +126 -59
  116. package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
  117. package/examples/jsm/utils/SceneOptimizer.js +1 -1
  118. package/examples/jsm/webxr/ARButton.js +1 -1
  119. package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
  120. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
  121. package/package.json +7 -7
  122. package/src/Three.TSL.js +10 -3
  123. package/src/Three.WebGPU.js +4 -0
  124. package/src/animation/AnimationAction.js +15 -11
  125. package/src/animation/AnimationClip.js +0 -139
  126. package/src/animation/KeyframeTrack.js +2 -2
  127. package/src/animation/PropertyBinding.js +2 -2
  128. package/src/cameras/Camera.js +2 -2
  129. package/src/cameras/StereoCamera.js +5 -2
  130. package/src/constants.js +1 -1
  131. package/src/core/BufferGeometry.js +29 -7
  132. package/src/core/Object3D.js +17 -7
  133. package/src/core/Raycaster.js +1 -1
  134. package/src/core/RenderTarget.js +15 -2
  135. package/src/extras/PMREMGenerator.js +6 -4
  136. package/src/extras/TextureUtils.js +1 -1
  137. package/src/extras/core/ShapePath.js +149 -160
  138. package/src/geometries/SphereGeometry.js +8 -3
  139. package/src/helpers/DirectionalLightHelper.js +2 -0
  140. package/src/helpers/HemisphereLightHelper.js +2 -0
  141. package/src/helpers/PointLightHelper.js +2 -0
  142. package/src/helpers/SpotLightHelper.js +1 -1
  143. package/src/loaders/DataTextureLoader.js +69 -38
  144. package/src/loaders/LoadingManager.js +5 -0
  145. package/src/loaders/MaterialLoader.js +36 -266
  146. package/src/loaders/ObjectLoader.js +3 -1
  147. package/src/materials/LineBasicMaterial.js +4 -0
  148. package/src/materials/Material.js +196 -1
  149. package/src/materials/MeshBasicMaterial.js +24 -0
  150. package/src/materials/MeshDepthMaterial.js +10 -0
  151. package/src/materials/MeshDistanceMaterial.js +10 -0
  152. package/src/materials/MeshLambertMaterial.js +40 -1
  153. package/src/materials/MeshMatcapMaterial.js +25 -1
  154. package/src/materials/MeshNormalMaterial.js +9 -1
  155. package/src/materials/MeshPhongMaterial.js +40 -1
  156. package/src/materials/MeshPhysicalMaterial.js +38 -0
  157. package/src/materials/MeshStandardMaterial.js +42 -1
  158. package/src/materials/MeshToonMaterial.js +34 -1
  159. package/src/materials/PointsMaterial.js +7 -0
  160. package/src/materials/ShaderMaterial.js +86 -0
  161. package/src/materials/SpriteMaterial.js +7 -0
  162. package/src/materials/nodes/Line2NodeMaterial.js +378 -322
  163. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  164. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  165. package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
  166. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +0 -30
  167. package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
  168. package/src/materials/nodes/MeshStandardNodeMaterial.js +0 -11
  169. package/src/materials/nodes/NodeMaterial.js +115 -74
  170. package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
  171. package/src/materials/nodes/manager/NodeMaterialObserver.js +49 -20
  172. package/src/math/Box3.js +5 -0
  173. package/src/math/FrustumArray.js +103 -133
  174. package/src/math/Interpolant.js +1 -1
  175. package/src/math/MathUtils.js +2 -2
  176. package/src/math/Matrix3.js +11 -0
  177. package/src/math/Matrix4.js +28 -3
  178. package/src/math/Vector2.js +2 -2
  179. package/src/math/Vector3.js +2 -2
  180. package/src/math/Vector4.js +2 -2
  181. package/src/math/interpolants/BezierInterpolant.js +4 -6
  182. package/src/nodes/Nodes.js +2 -5
  183. package/src/nodes/TSL.js +8 -6
  184. package/src/nodes/accessors/Arrays.js +4 -4
  185. package/src/nodes/accessors/Batch.js +108 -0
  186. package/src/nodes/accessors/Bitangent.js +2 -2
  187. package/src/nodes/accessors/BufferAttributeNode.js +13 -2
  188. package/src/nodes/accessors/Camera.js +7 -7
  189. package/src/nodes/accessors/ClippingNode.js +1 -1
  190. package/src/nodes/accessors/Instance.js +264 -0
  191. package/src/nodes/accessors/MaterialNode.js +18 -2
  192. package/src/nodes/accessors/MaterialProperties.js +4 -3
  193. package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
  194. package/src/nodes/accessors/Normal.js +13 -13
  195. package/src/nodes/accessors/Position.js +5 -1
  196. package/src/nodes/accessors/ReferenceNode.js +1 -0
  197. package/src/nodes/accessors/ReflectVector.js +3 -3
  198. package/src/nodes/accessors/SceneProperties.js +1 -1
  199. package/src/nodes/accessors/Skinning.js +263 -0
  200. package/src/nodes/accessors/StorageBufferNode.js +2 -2
  201. package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
  202. package/src/nodes/accessors/StorageTextureNode.js +39 -7
  203. package/src/nodes/accessors/Tangent.js +4 -4
  204. package/src/nodes/accessors/TextureNode.js +60 -5
  205. package/src/nodes/code/FunctionNode.js +2 -16
  206. package/src/nodes/core/MRTNode.js +7 -2
  207. package/src/nodes/core/Node.js +39 -2
  208. package/src/nodes/core/NodeBuilder.js +201 -41
  209. package/src/nodes/core/NodeUtils.js +13 -13
  210. package/src/nodes/core/OutputStructNode.js +1 -1
  211. package/src/nodes/core/OverrideContextNode.js +153 -0
  212. package/src/nodes/core/PropertyNode.js +51 -5
  213. package/src/nodes/core/StackNode.js +56 -34
  214. package/src/nodes/core/StructNode.js +4 -6
  215. package/src/nodes/core/StructTypeNode.js +6 -6
  216. package/src/nodes/core/VarNode.js +8 -0
  217. package/src/nodes/core/VaryingNode.js +12 -2
  218. package/src/nodes/display/BlendModes.js +1 -41
  219. package/src/nodes/display/BumpMapNode.js +6 -1
  220. package/src/nodes/display/ColorAdjustment.js +10 -9
  221. package/src/nodes/display/FrontFacingNode.js +38 -9
  222. package/src/nodes/display/NormalMapNode.js +2 -2
  223. package/src/nodes/display/PassNode.js +35 -43
  224. package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
  225. package/src/nodes/display/RenderOutputNode.js +12 -3
  226. package/src/nodes/functions/VolumetricLightingModel.js +40 -7
  227. package/src/nodes/gpgpu/WorkgroupInfoNode.js +1 -1
  228. package/src/nodes/lighting/EnvironmentNode.js +2 -2
  229. package/src/nodes/lighting/IESSpotLightNode.js +40 -2
  230. package/src/nodes/lighting/LightingContextNode.js +10 -2
  231. package/src/nodes/lighting/LightsNode.js +92 -37
  232. package/src/nodes/lighting/PointShadowNode.js +7 -1
  233. package/src/nodes/lighting/ShadowFilterNode.js +21 -52
  234. package/src/nodes/lighting/ShadowNode.js +34 -14
  235. package/src/nodes/materialx/lib/mx_noise.js +2 -2
  236. package/src/nodes/math/ConditionalNode.js +3 -3
  237. package/src/nodes/math/MathNode.js +39 -11
  238. package/src/nodes/math/OperatorNode.js +23 -23
  239. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  240. package/src/nodes/pmrem/PMREMNode.js +33 -2
  241. package/src/nodes/tsl/TSLCore.js +63 -18
  242. package/src/nodes/utils/EquirectUV.js +30 -5
  243. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  244. package/src/nodes/utils/Packing.js +35 -4
  245. package/src/nodes/utils/RTTNode.js +40 -24
  246. package/src/nodes/utils/ReflectorNode.js +1 -0
  247. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  248. package/src/objects/BatchedMesh.js +22 -14
  249. package/src/objects/InstancedMesh.js +0 -11
  250. package/src/objects/Skeleton.js +0 -9
  251. package/src/renderers/WebGLRenderer.js +21 -15
  252. package/src/renderers/common/Backend.js +49 -5
  253. package/src/renderers/common/Bindings.js +114 -45
  254. package/src/renderers/common/Buffer.js +9 -0
  255. package/src/renderers/common/ClippingContext.js +10 -2
  256. package/src/renderers/common/Info.js +63 -22
  257. package/src/renderers/common/Lighting.js +53 -5
  258. package/src/renderers/common/RenderList.js +42 -4
  259. package/src/renderers/common/RenderObject.js +73 -13
  260. package/src/renderers/common/Renderer.js +282 -109
  261. package/src/renderers/common/Sampler.js +16 -48
  262. package/src/renderers/common/Textures.js +32 -5
  263. package/src/renderers/common/TimestampQueryPool.js +1 -1
  264. package/src/renderers/common/UniformsGroup.js +31 -9
  265. package/src/renderers/common/XRManager.js +340 -22
  266. package/src/renderers/common/extras/PMREMGenerator.js +15 -38
  267. package/src/renderers/common/nodes/NodeBuilderState.js +9 -1
  268. package/src/renderers/common/nodes/NodeLibrary.js +4 -4
  269. package/src/renderers/common/nodes/NodeManager.js +63 -14
  270. package/src/renderers/common/nodes/NodeUniformBuffer.js +13 -0
  271. package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
  272. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
  273. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
  274. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  275. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
  276. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
  277. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +1 -1
  278. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
  279. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
  280. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +1 -1
  281. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  282. package/src/renderers/shaders/ShaderLib/distance.glsl.js +1 -1
  283. package/src/renderers/webgl/WebGLOutput.js +2 -1
  284. package/src/renderers/webgl/WebGLProgram.js +5 -4
  285. package/src/renderers/webgl/WebGLPrograms.js +11 -4
  286. package/src/renderers/webgl/WebGLRenderLists.js +9 -1
  287. package/src/renderers/webgl/WebGLShaderCache.js +5 -11
  288. package/src/renderers/webgl/WebGLTextures.js +20 -7
  289. package/src/renderers/webgl/WebGLUniformsGroups.js +66 -38
  290. package/src/renderers/webgl-fallback/WebGLBackend.js +84 -25
  291. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +138 -8
  292. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  293. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +52 -22
  294. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +4 -2
  295. package/src/renderers/webgpu/WebGPUBackend.js +480 -169
  296. package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
  297. package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
  298. package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
  299. package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
  300. package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
  301. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
  302. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
  303. package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
  304. package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
  305. package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
  306. package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
  307. package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
  308. package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
  309. package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
  310. package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
  311. package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
  312. package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
  313. package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
  314. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
  315. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
  316. package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
  317. package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
  318. package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
  319. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
  320. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +164 -7
  321. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
  322. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +98 -38
  323. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +72 -68
  324. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +164 -69
  325. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +158 -95
  326. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +297 -141
  327. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +33 -18
  328. package/src/renderers/webgpu/utils/WebGPUUtils.js +38 -3
  329. package/src/textures/DepthTexture.js +1 -1
  330. package/src/textures/ExternalTexture.js +0 -3
  331. package/examples/fonts/LICENSE +0 -13
  332. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  333. package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
  334. package/examples/fonts/README.md +0 -11
  335. package/examples/fonts/droid/NOTICE +0 -190
  336. package/examples/fonts/droid/README.txt +0 -18
  337. package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
  338. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
  339. package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
  340. package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
  341. package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
  342. package/examples/fonts/gentilis_bold.typeface.json +0 -1
  343. package/examples/fonts/gentilis_regular.typeface.json +0 -1
  344. package/examples/fonts/helvetiker_bold.typeface.json +0 -1
  345. package/examples/fonts/helvetiker_regular.typeface.json +0 -1
  346. package/examples/fonts/optimer_bold.typeface.json +0 -1
  347. package/examples/fonts/optimer_regular.typeface.json +0 -1
  348. package/examples/fonts/ttf/README.md +0 -9
  349. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  350. package/examples/jsm/inspector/extensions/extensions.json +0 -6
  351. package/examples/jsm/libs/ammo.wasm.js +0 -822
  352. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  353. package/examples/jsm/libs/draco/draco_encoder.js +0 -33
  354. package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
  355. package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
  356. package/examples/jsm/libs/opentype.module.js +0 -14506
  357. package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
  358. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
  359. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  360. package/examples/jsm/lighting/TiledLighting.js +0 -42
  361. package/examples/jsm/tsl/display/AnamorphicNode.js +0 -293
  362. package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
  363. package/src/nodes/accessors/BatchNode.js +0 -163
  364. package/src/nodes/accessors/InstanceNode.js +0 -349
  365. package/src/nodes/accessors/InstancedMeshNode.js +0 -50
  366. package/src/nodes/accessors/SkinningNode.js +0 -328
@@ -599,6 +599,17 @@ class Renderer {
599
599
  */
600
600
  this.onDeviceLost = this._onDeviceLost;
601
601
 
602
+ /**
603
+ * A callback function that defines what should happen when an uncaptured
604
+ * backend error is reported (e.g. a WebGPU validation/out-of-memory/internal
605
+ * error raised outside an error scope). Applications can override this to
606
+ * surface errors in their own UI without letting them escalate to a device
607
+ * loss. The default implementation logs to the console.
608
+ *
609
+ * @type {Function}
610
+ */
611
+ this.onError = this._onError;
612
+
602
613
  /**
603
614
  * Defines the type of output buffers. The default `HalfFloatType` is recommend for
604
615
  * best quality. To save memory and bandwidth, `UnsignedByteType` might be used.
@@ -655,6 +666,16 @@ class Renderer {
655
666
  */
656
667
  this._compilationPromises = null;
657
668
 
669
+ /**
670
+ * When an override material is in use, this property points to the current
671
+ * source material during the rendering of a render object.
672
+ *
673
+ * @private
674
+ * @type {?Material}
675
+ * @default null
676
+ */
677
+ this._currentSourceMaterial = null;
678
+
658
679
  /**
659
680
  * Whether the renderer should render transparent render objects or not.
660
681
  *
@@ -721,10 +742,13 @@ class Renderer {
721
742
  onShaderError: null,
722
743
  getShaderAsync: async ( scene, camera, object ) => {
723
744
 
724
- await this.compileAsync( scene, camera );
745
+ await this.compileAsync( object, camera, scene );
746
+
747
+ const useFrameBufferTarget = this.needsFrameBufferTarget && this._renderTarget === null;
748
+ const renderTarget = useFrameBufferTarget ? this._getFrameBufferTarget() : ( this._renderTarget || this._outputRenderTarget );
725
749
 
726
750
  const renderList = this._renderLists.get( scene, camera );
727
- const renderContext = this._renderContexts.get( this._renderTarget, this._mrt );
751
+ const renderContext = this._renderContexts.get( renderTarget, this._mrt );
728
752
 
729
753
  const material = scene.overrideMaterial || object.material;
730
754
 
@@ -917,10 +941,29 @@ class Renderer {
917
941
 
918
942
  //
919
943
 
944
+ if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
945
+
946
+ camera = this._updateCamera( camera );
947
+
948
+ //
949
+
920
950
  sceneRef.onBeforeRender( this, scene, camera, renderTarget );
921
951
 
922
952
  //
923
953
 
954
+ const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
955
+
956
+ if ( camera.isArrayCamera ) {
957
+
958
+ frustum.setFromArrayCamera( camera );
959
+
960
+ } else {
961
+
962
+ _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
963
+ frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
964
+
965
+ }
966
+
924
967
  // Use sceneRef for render list to ensure lightsNode matches between compileAsync and render
925
968
  const renderList = this._renderLists.get( sceneRef, camera );
926
969
  renderList.begin();
@@ -1006,12 +1049,11 @@ class Renderer {
1006
1049
  renderObject.drawRange = item.object.geometry.drawRange;
1007
1050
  renderObject.group = item.group;
1008
1051
 
1009
- this._geometries.updateForRender( renderObject );
1010
-
1011
1052
  // Use async node building to yield to main thread
1012
1053
  await this._nodes.getForRenderAsync( renderObject );
1013
1054
 
1014
1055
  this._nodes.updateBefore( renderObject );
1056
+ this._geometries.updateForRender( renderObject );
1015
1057
  this._nodes.updateForRender( renderObject );
1016
1058
  this._bindings.updateForRender( renderObject );
1017
1059
 
@@ -1205,6 +1247,41 @@ class Renderer {
1205
1247
 
1206
1248
  }
1207
1249
 
1250
+ /**
1251
+ * Default implementation of the uncaptured backend error callback.
1252
+ *
1253
+ * @private
1254
+ * @param {Object} info - Information about the uncaptured error.
1255
+ */
1256
+ _onError( info ) {
1257
+
1258
+ let errorMessage = `WebGPURenderer: Uncaptured ${ info.api } ${ info.type }`;
1259
+
1260
+ if ( info.message ) {
1261
+
1262
+ errorMessage += `: ${ info.message }`;
1263
+
1264
+ }
1265
+
1266
+ error( errorMessage );
1267
+
1268
+ }
1269
+
1270
+ /**
1271
+ * Returns `true` if the cached GPU render bundle for the given bundle group is
1272
+ * out-of-date and must be recorded again.
1273
+ *
1274
+ * @private
1275
+ * @param {BundleGroup} bundleGroup - The bundle group.
1276
+ * @param {Object} renderBundleData - The backend data of the render bundle.
1277
+ * @return {boolean} Whether the cached render bundle needs an update.
1278
+ */
1279
+ _bundleNeedsUpdate( bundleGroup, renderBundleData ) {
1280
+
1281
+ return renderBundleData.bundleGPU === undefined || bundleGroup.version !== renderBundleData.version;
1282
+
1283
+ }
1284
+
1208
1285
  /**
1209
1286
  * Renders the given render bundle.
1210
1287
  *
@@ -1227,20 +1304,12 @@ class Renderer {
1227
1304
 
1228
1305
  const renderBundle = this._bundles.get( bundleGroup, camera, renderContext );
1229
1306
  const renderBundleData = this.backend.get( renderBundle );
1230
-
1231
- const needsUpdate = bundleGroup.version !== renderBundleData.version;
1232
- const renderBundleNeedsUpdate = needsUpdate || renderBundleData.bundleGPU === undefined;
1307
+ const renderBundleNeedsUpdate = this._bundleNeedsUpdate( bundleGroup, renderBundleData );
1233
1308
 
1234
1309
  if ( renderBundleNeedsUpdate ) {
1235
1310
 
1236
1311
  this.backend.beginBundle( renderContext );
1237
1312
 
1238
- if ( renderBundleData.renderObjects === undefined || needsUpdate ) {
1239
-
1240
- renderBundleData.renderObjects = [];
1241
-
1242
- }
1243
-
1244
1313
  this._currentRenderBundle = renderBundle;
1245
1314
 
1246
1315
  const {
@@ -1272,6 +1341,7 @@ class Renderer {
1272
1341
 
1273
1342
  this._nodes.updateBefore( renderObject );
1274
1343
 
1344
+ this._geometries.updateForRender( renderObject );
1275
1345
  this._nodes.updateForRender( renderObject );
1276
1346
  this._bindings.updateForRender( renderObject );
1277
1347
 
@@ -1314,7 +1384,7 @@ class Renderer {
1314
1384
 
1315
1385
  if ( this._initialized === false ) {
1316
1386
 
1317
- throw new Error( 'Renderer: .render() called before the backend is initialized. Use "await renderer.init();" before rendering.' );
1387
+ throw new Error( 'THREE.Renderer: .render() called before the backend is initialized. Use "await renderer.init();" before rendering.' );
1318
1388
 
1319
1389
  }
1320
1390
 
@@ -1338,6 +1408,37 @@ class Renderer {
1338
1408
 
1339
1409
  }
1340
1410
 
1411
+ _renderOutputLayers( quad, renderTarget ) {
1412
+
1413
+ if ( renderTarget.texture.isArrayTexture !== true || renderTarget.texture.image.depth <= 1 ) {
1414
+
1415
+ this._renderScene( quad, quad.camera, false );
1416
+ return;
1417
+
1418
+ }
1419
+
1420
+ const currentActiveCubeFace = this._activeCubeFace;
1421
+
1422
+ try {
1423
+
1424
+ for ( let layer = 0; layer < renderTarget.texture.image.depth; layer ++ ) {
1425
+
1426
+ this._nodes.setOutputLayerIndex( layer );
1427
+ this._activeCubeFace = layer;
1428
+
1429
+ this._renderScene( quad, quad.camera, false );
1430
+
1431
+ }
1432
+
1433
+ } finally {
1434
+
1435
+ this._nodes.setOutputLayerIndex( 0 );
1436
+ this._activeCubeFace = currentActiveCubeFace;
1437
+
1438
+ }
1439
+
1440
+ }
1441
+
1341
1442
  /**
1342
1443
  * Returns an internal render target which is used when computing the output tone mapping
1343
1444
  * and color space conversion. Unlike in `WebGLRenderer`, this is done in a separate render
@@ -1423,6 +1524,7 @@ class Renderer {
1423
1524
  frameBufferTarget.scissor.multiplyScalar( pixelRatio );
1424
1525
  frameBufferTarget.scissorTest = scissorTest;
1425
1526
  frameBufferTarget.multiview = outputRenderTarget !== null ? outputRenderTarget.multiview : false;
1527
+ frameBufferTarget.useArrayDepthTexture = outputRenderTarget !== null ? outputRenderTarget.useArrayDepthTexture : false;
1426
1528
  frameBufferTarget.resolveDepthBuffer = outputRenderTarget !== null ? outputRenderTarget.resolveDepthBuffer : true;
1427
1529
  frameBufferTarget._autoAllocateDepthBuffer = outputRenderTarget !== null ? outputRenderTarget._autoAllocateDepthBuffer : false;
1428
1530
 
@@ -1460,6 +1562,8 @@ class Renderer {
1460
1562
  const previousRenderObjectFunction = this._currentRenderObjectFunction;
1461
1563
  const previousHandleObjectFunction = this._handleObjectFunction;
1462
1564
 
1565
+ this.lighting.beginRender( scene );
1566
+
1463
1567
  //
1464
1568
 
1465
1569
  this._callDepth ++;
@@ -1533,77 +1637,6 @@ class Renderer {
1533
1637
 
1534
1638
  //
1535
1639
 
1536
-
1537
- const xr = this.xr;
1538
-
1539
- if ( xr.isPresenting === false ) {
1540
-
1541
- let projectionMatrixNeedsUpdate = false;
1542
-
1543
- // reversed depth
1544
-
1545
- if ( this.reversedDepthBuffer === true && camera.reversedDepth !== true ) {
1546
-
1547
- camera._reversedDepth = true;
1548
-
1549
- if ( camera.isArrayCamera ) {
1550
-
1551
- for ( const subCamera of camera.cameras ) {
1552
-
1553
- subCamera._reversedDepth = true;
1554
-
1555
- }
1556
-
1557
- }
1558
-
1559
- projectionMatrixNeedsUpdate = true;
1560
-
1561
- }
1562
-
1563
- // WebGPU/WebGL coordinate system
1564
-
1565
- const coordinateSystem = this.coordinateSystem;
1566
-
1567
- if ( camera.coordinateSystem !== coordinateSystem ) {
1568
-
1569
- camera.coordinateSystem = coordinateSystem;
1570
-
1571
- if ( camera.isArrayCamera ) {
1572
-
1573
- for ( const subCamera of camera.cameras ) {
1574
-
1575
- subCamera.coordinateSystem = coordinateSystem;
1576
-
1577
- }
1578
-
1579
- }
1580
-
1581
- projectionMatrixNeedsUpdate = true;
1582
-
1583
- }
1584
-
1585
- // camera update
1586
-
1587
- if ( projectionMatrixNeedsUpdate === true ) {
1588
-
1589
- camera.updateProjectionMatrix();
1590
-
1591
- if ( camera.isArrayCamera ) {
1592
-
1593
- for ( const subCamera of camera.cameras ) {
1594
-
1595
- subCamera.updateProjectionMatrix();
1596
-
1597
- }
1598
-
1599
- }
1600
-
1601
- }
1602
-
1603
- }
1604
-
1605
- //
1606
-
1607
1640
  // WITH_GENESYS
1608
1641
  ProfilerService.begin( 'scene.updateMatrixWorld' );
1609
1642
  // !WITH_GENESYS
@@ -1612,14 +1645,7 @@ class Renderer {
1612
1645
  ProfilerService.end( 'scene.updateMatrixWorld' );
1613
1646
  // !WITH_GENESYS
1614
1647
 
1615
- if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
1616
-
1617
- if ( xr.enabled === true && xr.isPresenting === true ) {
1618
-
1619
- if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );
1620
- camera = xr.getCamera(); // use XR camera for rendering
1621
-
1622
- }
1648
+ camera = this._updateCamera( camera );
1623
1649
 
1624
1650
  //
1625
1651
 
@@ -1667,7 +1693,11 @@ class Renderer {
1667
1693
 
1668
1694
  const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
1669
1695
 
1670
- if ( ! camera.isArrayCamera ) {
1696
+ if ( camera.isArrayCamera ) {
1697
+
1698
+ frustum.setFromArrayCamera( camera );
1699
+
1700
+ } else {
1671
1701
 
1672
1702
  _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
1673
1703
  frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
@@ -1695,7 +1725,7 @@ class Renderer {
1695
1725
 
1696
1726
  if ( this.sortObjects === true ) {
1697
1727
 
1698
- renderList.sort( this._opaqueSort, this._transparentSort );
1728
+ renderList.sort( this._opaqueSort, this._transparentSort, camera.reversedDepth );
1699
1729
 
1700
1730
  }
1701
1731
 
@@ -1782,11 +1812,12 @@ class Renderer {
1782
1812
  // restore render tree
1783
1813
 
1784
1814
  nodeFrame.renderId = previousRenderId;
1785
-
1786
1815
  this._currentRenderContext = previousRenderContext;
1787
1816
  this._currentRenderObjectFunction = previousRenderObjectFunction;
1788
1817
  this._handleObjectFunction = previousHandleObjectFunction;
1789
1818
 
1819
+ this.lighting.finishRender( scene );
1820
+
1790
1821
  //
1791
1822
 
1792
1823
  this._callDepth --;
@@ -1892,8 +1923,7 @@ class Renderer {
1892
1923
 
1893
1924
  this.autoClear = false;
1894
1925
  this.xr.enabled = false;
1895
-
1896
- this._renderScene( quad, quad.camera, false );
1926
+ this._renderOutputLayers( quad, renderTarget );
1897
1927
 
1898
1928
  this.autoClear = currentAutoClear;
1899
1929
  this.xr.enabled = currentXR;
@@ -2324,7 +2354,7 @@ class Renderer {
2324
2354
 
2325
2355
  if ( this._initialized === false ) {
2326
2356
 
2327
- throw new Error( 'Renderer: .clear() called before the backend is initialized. Use "await renderer.init();" before before using this method.' );
2357
+ throw new Error( 'THREE.Renderer: .clear() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
2328
2358
 
2329
2359
  }
2330
2360
 
@@ -2586,7 +2616,7 @@ class Renderer {
2586
2616
 
2587
2617
  // WITH_GENESYS
2588
2618
  // Drop the strong reference to the active `RenderContext` so module-level
2589
- // `WeakMap<RenderContext, …>` caches can release entries once
2619
+ // `WeakMap<RenderContext, �?>` caches can release entries once
2590
2620
  // `_renderContexts.dispose()` has cleared its dictionary.
2591
2621
  this._currentRenderContext = null;
2592
2622
  // !WITH_GENESYS
@@ -2931,7 +2961,7 @@ class Renderer {
2931
2961
 
2932
2962
  if ( this._initialized === false ) {
2933
2963
 
2934
- throw new Error( 'Renderer: .hasFeature() called before the backend is initialized. Use "await renderer.init();" before before using this method.' );
2964
+ throw new Error( 'THREE.Renderer: .hasFeature() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
2935
2965
 
2936
2966
  }
2937
2967
 
@@ -2981,7 +3011,7 @@ class Renderer {
2981
3011
 
2982
3012
  if ( this._initialized === false ) {
2983
3013
 
2984
- throw new Error( 'Renderer: .initTexture() called before the backend is initialized. Use "await renderer.init();" before before using this method.' );
3014
+ throw new Error( 'THREE.Renderer: .initTexture() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
2985
3015
 
2986
3016
  }
2987
3017
 
@@ -2998,7 +3028,7 @@ class Renderer {
2998
3028
 
2999
3029
  if ( this._initialized === false ) {
3000
3030
 
3001
- throw new Error( 'Renderer: .initRenderTarget() called before the backend is initialized. Use "await renderer.init();" before before using this method.' );
3031
+ throw new Error( 'THREE.Renderer: .initRenderTarget() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
3002
3032
 
3003
3033
  }
3004
3034
 
@@ -3166,7 +3196,7 @@ class Renderer {
3166
3196
 
3167
3197
  const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
3168
3198
 
3169
- if ( ! object.frustumCulled || frustum.intersectsSprite( object, camera ) ) {
3199
+ if ( ! object.frustumCulled || frustum.intersectsSprite( object ) ) {
3170
3200
 
3171
3201
  if ( this.sortObjects === true ) {
3172
3202
 
@@ -3192,7 +3222,7 @@ class Renderer {
3192
3222
 
3193
3223
  const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
3194
3224
 
3195
- if ( ! object.frustumCulled || frustum.intersectsObject( object, camera ) ) {
3225
+ if ( ! object.frustumCulled || frustum.intersectsObject( object ) ) {
3196
3226
 
3197
3227
  const { geometry, material } = object;
3198
3228
 
@@ -3241,9 +3271,40 @@ class Renderer {
3241
3271
  const baseRenderList = renderList;
3242
3272
 
3243
3273
  // replace render list
3274
+
3244
3275
  renderList = this._renderLists.get( object, camera );
3245
3276
 
3246
- renderList.begin();
3277
+ const renderBundle = this._bundles.get( object, camera, this._currentRenderContext );
3278
+ const renderBundleData = this.backend.get( renderBundle );
3279
+ const renderBundleNeedsUpdate = this._bundleNeedsUpdate( object, renderBundleData );
3280
+
3281
+ if ( renderBundleNeedsUpdate ) {
3282
+
3283
+ // update render list if necessary
3284
+
3285
+ renderList.begin();
3286
+
3287
+ if ( renderBundleData.renderObjects === undefined ) {
3288
+
3289
+ renderBundleData.renderObjects = [];
3290
+
3291
+ } else {
3292
+
3293
+ renderBundleData.renderObjects.length = 0;
3294
+
3295
+ }
3296
+
3297
+ const children = object.children;
3298
+
3299
+ for ( let i = 0, l = children.length; i < l; i ++ ) {
3300
+
3301
+ this._projectObject( children[ i ], camera, groupOrder, renderList, clippingContext );
3302
+
3303
+ }
3304
+
3305
+ renderList.finish();
3306
+
3307
+ }
3247
3308
 
3248
3309
  baseRenderList.pushBundle( {
3249
3310
  bundleGroup: object,
@@ -3251,10 +3312,12 @@ class Renderer {
3251
3312
  renderList,
3252
3313
  } );
3253
3314
 
3254
- renderList.finish();
3315
+ return;
3255
3316
 
3256
3317
  }
3257
3318
 
3319
+ //
3320
+
3258
3321
  const children = object.children;
3259
3322
 
3260
3323
  for ( let i = 0, l = children.length; i < l; i ++ ) {
@@ -3388,7 +3451,7 @@ class Renderer {
3388
3451
 
3389
3452
  if ( cache === undefined || cache.version !== version ) {
3390
3453
 
3391
- const hasMap = material.map !== null;
3454
+ const hasMap = material.map && material.map.isTexture;
3392
3455
  const hasColorNode = material.colorNode && material.colorNode.isNode;
3393
3456
  const hasCastShadowNode = material.castShadowNode && material.castShadowNode.isNode;
3394
3457
  const hasMaskNode = ( material.maskShadowNode && material.maskShadowNode.isNode ) || ( material.maskNode && material.maskNode.isNode );
@@ -3481,6 +3544,98 @@ class Renderer {
3481
3544
 
3482
3545
  }
3483
3546
 
3547
+ /**
3548
+ * Updates the camera so it's prepared for rendering operations.
3549
+ *
3550
+ * @private
3551
+ * @param {Camera} camera - The camera to update.
3552
+ * @return {Camera} The returned camera might be different depending on whether XR is used or not.
3553
+ */
3554
+ _updateCamera( camera ) {
3555
+
3556
+ const xr = this.xr;
3557
+
3558
+ if ( xr.isPresenting === false ) {
3559
+
3560
+ let projectionMatrixNeedsUpdate = false;
3561
+
3562
+ // reversed depth
3563
+
3564
+ if ( this.reversedDepthBuffer === true && camera.reversedDepth !== true ) {
3565
+
3566
+ camera._reversedDepth = true;
3567
+
3568
+ if ( camera.isArrayCamera ) {
3569
+
3570
+ for ( const subCamera of camera.cameras ) {
3571
+
3572
+ subCamera._reversedDepth = true;
3573
+
3574
+ }
3575
+
3576
+ }
3577
+
3578
+ projectionMatrixNeedsUpdate = true;
3579
+
3580
+ }
3581
+
3582
+ // WebGPU/WebGL coordinate system
3583
+
3584
+ const coordinateSystem = this.coordinateSystem;
3585
+
3586
+ if ( camera.coordinateSystem !== coordinateSystem ) {
3587
+
3588
+ camera.coordinateSystem = coordinateSystem;
3589
+
3590
+ if ( camera.isArrayCamera ) {
3591
+
3592
+ for ( const subCamera of camera.cameras ) {
3593
+
3594
+ subCamera.coordinateSystem = coordinateSystem;
3595
+
3596
+ }
3597
+
3598
+ }
3599
+
3600
+ projectionMatrixNeedsUpdate = true;
3601
+
3602
+ }
3603
+
3604
+ // camera update
3605
+
3606
+ if ( projectionMatrixNeedsUpdate === true ) {
3607
+
3608
+ camera.updateProjectionMatrix();
3609
+
3610
+ if ( camera.isArrayCamera ) {
3611
+
3612
+ for ( const subCamera of camera.cameras ) {
3613
+
3614
+ subCamera.updateProjectionMatrix();
3615
+
3616
+ }
3617
+
3618
+ }
3619
+
3620
+ }
3621
+
3622
+ }
3623
+
3624
+ if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
3625
+
3626
+ // handle XR
3627
+
3628
+ if ( xr.enabled === true && xr.isPresenting === true ) {
3629
+
3630
+ if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );
3631
+ camera = xr.getCamera(); // use XR camera for rendering
3632
+
3633
+ }
3634
+
3635
+ return camera;
3636
+
3637
+ }
3638
+
3484
3639
  /**
3485
3640
  * This method represents the default render object function that manages the render lifecycle
3486
3641
  * of the object.
@@ -3502,6 +3657,11 @@ class Renderer {
3502
3657
  let materialDepthNode;
3503
3658
  let materialPositionNode;
3504
3659
  let materialSide;
3660
+ let materialDisplacementMap;
3661
+ let materialDisplacementScale;
3662
+ let materialDisplacementBias;
3663
+
3664
+ const previousSourceMaterial = this._currentSourceMaterial;
3505
3665
 
3506
3666
  //
3507
3667
 
@@ -3511,6 +3671,8 @@ class Renderer {
3511
3671
 
3512
3672
  if ( material.allowOverride === true && scene.overrideMaterial !== null ) {
3513
3673
 
3674
+ this._currentSourceMaterial = material;
3675
+
3514
3676
  const overrideMaterial = scene.overrideMaterial;
3515
3677
 
3516
3678
  materialOverride = true;
@@ -3520,6 +3682,9 @@ class Renderer {
3520
3682
  materialDepthNode = ( overrideMaterial.isNodeMaterial ) ? overrideMaterial.depthNode : null;
3521
3683
  materialPositionNode = ( overrideMaterial.isNodeMaterial ) ? overrideMaterial.positionNode : null;
3522
3684
  materialSide = scene.overrideMaterial.side;
3685
+ materialDisplacementMap = overrideMaterial.displacementMap;
3686
+ materialDisplacementScale = overrideMaterial.displacementScale;
3687
+ materialDisplacementBias = overrideMaterial.displacementBias;
3523
3688
 
3524
3689
  if ( material.positionNode && material.positionNode.isNode ) {
3525
3690
 
@@ -3529,6 +3694,9 @@ class Renderer {
3529
3694
 
3530
3695
  overrideMaterial.alphaTest = material.alphaTest;
3531
3696
  overrideMaterial.alphaMap = material.alphaMap;
3697
+ overrideMaterial.displacementMap = material.displacementMap;
3698
+ overrideMaterial.displacementScale = material.displacementScale;
3699
+ overrideMaterial.displacementBias = material.displacementBias;
3532
3700
  overrideMaterial.transparent = material.transparent || material.transmission > 0 ||
3533
3701
  ( material.transmissionNode && material.transmissionNode.isNode ) ||
3534
3702
  ( material.backdropNode && material.backdropNode.isNode );
@@ -3583,9 +3751,14 @@ class Renderer {
3583
3751
  scene.overrideMaterial.depthNode = materialDepthNode;
3584
3752
  scene.overrideMaterial.positionNode = materialPositionNode;
3585
3753
  scene.overrideMaterial.side = materialSide;
3754
+ scene.overrideMaterial.displacementMap = materialDisplacementMap;
3755
+ scene.overrideMaterial.displacementScale = materialDisplacementScale;
3756
+ scene.overrideMaterial.displacementBias = materialDisplacementBias;
3586
3757
 
3587
3758
  }
3588
3759
 
3760
+ this._currentSourceMaterial = previousSourceMaterial;
3761
+
3589
3762
  //
3590
3763
 
3591
3764
  object.onAfterRender( this, scene, camera, geometry, material, group );
@@ -3602,7 +3775,7 @@ class Renderer {
3602
3775
 
3603
3776
  if ( this._initialized === false ) {
3604
3777
 
3605
- throw new Error( 'Renderer: .hasCompatibility() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
3778
+ throw new Error( 'THREE.Renderer: .hasCompatibility() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
3606
3779
 
3607
3780
  }
3608
3781