super-three 0.184.0 → 0.185.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/build/three.cjs +1260 -927
  2. package/build/three.core.js +1104 -829
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +156 -98
  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 +7538 -3367
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +7538 -3366
  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 +53 -15
  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 +106 -76
  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 -71
  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 +90 -37
  232. package/src/nodes/lighting/PointShadowNode.js +6 -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 +19 -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 +41 -4
  259. package/src/renderers/common/RenderObject.js +73 -13
  260. package/src/renderers/common/Renderer.js +281 -108
  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 +12 -5
  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
@@ -594,6 +594,17 @@ class Renderer {
594
594
  */
595
595
  this.onDeviceLost = this._onDeviceLost;
596
596
 
597
+ /**
598
+ * A callback function that defines what should happen when an uncaptured
599
+ * backend error is reported (e.g. a WebGPU validation/out-of-memory/internal
600
+ * error raised outside an error scope). Applications can override this to
601
+ * surface errors in their own UI without letting them escalate to a device
602
+ * loss. The default implementation logs to the console.
603
+ *
604
+ * @type {Function}
605
+ */
606
+ this.onError = this._onError;
607
+
597
608
  /**
598
609
  * Defines the type of output buffers. The default `HalfFloatType` is recommend for
599
610
  * best quality. To save memory and bandwidth, `UnsignedByteType` might be used.
@@ -650,6 +661,16 @@ class Renderer {
650
661
  */
651
662
  this._compilationPromises = null;
652
663
 
664
+ /**
665
+ * When an override material is in use, this property points to the current
666
+ * source material during the rendering of a render object.
667
+ *
668
+ * @private
669
+ * @type {?Material}
670
+ * @default null
671
+ */
672
+ this._currentSourceMaterial = null;
673
+
653
674
  /**
654
675
  * Whether the renderer should render transparent render objects or not.
655
676
  *
@@ -716,10 +737,13 @@ class Renderer {
716
737
  onShaderError: null,
717
738
  getShaderAsync: async ( scene, camera, object ) => {
718
739
 
719
- await this.compileAsync( scene, camera );
740
+ await this.compileAsync( object, camera, scene );
741
+
742
+ const useFrameBufferTarget = this.needsFrameBufferTarget && this._renderTarget === null;
743
+ const renderTarget = useFrameBufferTarget ? this._getFrameBufferTarget() : ( this._renderTarget || this._outputRenderTarget );
720
744
 
721
745
  const renderList = this._renderLists.get( scene, camera );
722
- const renderContext = this._renderContexts.get( this._renderTarget, this._mrt );
746
+ const renderContext = this._renderContexts.get( renderTarget, this._mrt );
723
747
 
724
748
  const material = scene.overrideMaterial || object.material;
725
749
 
@@ -912,10 +936,29 @@ class Renderer {
912
936
 
913
937
  //
914
938
 
939
+ if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
940
+
941
+ camera = this._updateCamera( camera );
942
+
943
+ //
944
+
915
945
  sceneRef.onBeforeRender( this, scene, camera, renderTarget );
916
946
 
917
947
  //
918
948
 
949
+ const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
950
+
951
+ if ( camera.isArrayCamera ) {
952
+
953
+ frustum.setFromArrayCamera( camera );
954
+
955
+ } else {
956
+
957
+ _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
958
+ frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
959
+
960
+ }
961
+
919
962
  // Use sceneRef for render list to ensure lightsNode matches between compileAsync and render
920
963
  const renderList = this._renderLists.get( sceneRef, camera );
921
964
  renderList.begin();
@@ -997,12 +1040,11 @@ class Renderer {
997
1040
  renderObject.drawRange = item.object.geometry.drawRange;
998
1041
  renderObject.group = item.group;
999
1042
 
1000
- this._geometries.updateForRender( renderObject );
1001
-
1002
1043
  // Use async node building to yield to main thread
1003
1044
  await this._nodes.getForRenderAsync( renderObject );
1004
1045
 
1005
1046
  this._nodes.updateBefore( renderObject );
1047
+ this._geometries.updateForRender( renderObject );
1006
1048
  this._nodes.updateForRender( renderObject );
1007
1049
  this._bindings.updateForRender( renderObject );
1008
1050
 
@@ -1196,6 +1238,41 @@ class Renderer {
1196
1238
 
1197
1239
  }
1198
1240
 
1241
+ /**
1242
+ * Default implementation of the uncaptured backend error callback.
1243
+ *
1244
+ * @private
1245
+ * @param {Object} info - Information about the uncaptured error.
1246
+ */
1247
+ _onError( info ) {
1248
+
1249
+ let errorMessage = `WebGPURenderer: Uncaptured ${ info.api } ${ info.type }`;
1250
+
1251
+ if ( info.message ) {
1252
+
1253
+ errorMessage += `: ${ info.message }`;
1254
+
1255
+ }
1256
+
1257
+ error( errorMessage );
1258
+
1259
+ }
1260
+
1261
+ /**
1262
+ * Returns `true` if the cached GPU render bundle for the given bundle group is
1263
+ * out-of-date and must be recorded again.
1264
+ *
1265
+ * @private
1266
+ * @param {BundleGroup} bundleGroup - The bundle group.
1267
+ * @param {Object} renderBundleData - The backend data of the render bundle.
1268
+ * @return {boolean} Whether the cached render bundle needs an update.
1269
+ */
1270
+ _bundleNeedsUpdate( bundleGroup, renderBundleData ) {
1271
+
1272
+ return renderBundleData.bundleGPU === undefined || bundleGroup.version !== renderBundleData.version;
1273
+
1274
+ }
1275
+
1199
1276
  /**
1200
1277
  * Renders the given render bundle.
1201
1278
  *
@@ -1214,20 +1291,12 @@ class Renderer {
1214
1291
 
1215
1292
  const renderBundle = this._bundles.get( bundleGroup, camera, renderContext );
1216
1293
  const renderBundleData = this.backend.get( renderBundle );
1217
-
1218
- const needsUpdate = bundleGroup.version !== renderBundleData.version;
1219
- const renderBundleNeedsUpdate = needsUpdate || renderBundleData.bundleGPU === undefined;
1294
+ const renderBundleNeedsUpdate = this._bundleNeedsUpdate( bundleGroup, renderBundleData );
1220
1295
 
1221
1296
  if ( renderBundleNeedsUpdate ) {
1222
1297
 
1223
1298
  this.backend.beginBundle( renderContext );
1224
1299
 
1225
- if ( renderBundleData.renderObjects === undefined || needsUpdate ) {
1226
-
1227
- renderBundleData.renderObjects = [];
1228
-
1229
- }
1230
-
1231
1300
  this._currentRenderBundle = renderBundle;
1232
1301
 
1233
1302
  const {
@@ -1259,6 +1328,7 @@ class Renderer {
1259
1328
 
1260
1329
  this._nodes.updateBefore( renderObject );
1261
1330
 
1331
+ this._geometries.updateForRender( renderObject );
1262
1332
  this._nodes.updateForRender( renderObject );
1263
1333
  this._bindings.updateForRender( renderObject );
1264
1334
 
@@ -1293,7 +1363,7 @@ class Renderer {
1293
1363
 
1294
1364
  if ( this._initialized === false ) {
1295
1365
 
1296
- throw new Error( 'Renderer: .render() called before the backend is initialized. Use "await renderer.init();" before rendering.' );
1366
+ throw new Error( 'THREE.Renderer: .render() called before the backend is initialized. Use "await renderer.init();" before rendering.' );
1297
1367
 
1298
1368
  }
1299
1369
 
@@ -1313,6 +1383,37 @@ class Renderer {
1313
1383
 
1314
1384
  }
1315
1385
 
1386
+ _renderOutputLayers( quad, renderTarget ) {
1387
+
1388
+ if ( renderTarget.texture.isArrayTexture !== true || renderTarget.texture.image.depth <= 1 ) {
1389
+
1390
+ this._renderScene( quad, quad.camera, false );
1391
+ return;
1392
+
1393
+ }
1394
+
1395
+ const currentActiveCubeFace = this._activeCubeFace;
1396
+
1397
+ try {
1398
+
1399
+ for ( let layer = 0; layer < renderTarget.texture.image.depth; layer ++ ) {
1400
+
1401
+ this._nodes.setOutputLayerIndex( layer );
1402
+ this._activeCubeFace = layer;
1403
+
1404
+ this._renderScene( quad, quad.camera, false );
1405
+
1406
+ }
1407
+
1408
+ } finally {
1409
+
1410
+ this._nodes.setOutputLayerIndex( 0 );
1411
+ this._activeCubeFace = currentActiveCubeFace;
1412
+
1413
+ }
1414
+
1415
+ }
1416
+
1316
1417
  /**
1317
1418
  * Returns an internal render target which is used when computing the output tone mapping
1318
1419
  * and color space conversion. Unlike in `WebGLRenderer`, this is done in a separate render
@@ -1398,6 +1499,7 @@ class Renderer {
1398
1499
  frameBufferTarget.scissor.multiplyScalar( pixelRatio );
1399
1500
  frameBufferTarget.scissorTest = scissorTest;
1400
1501
  frameBufferTarget.multiview = outputRenderTarget !== null ? outputRenderTarget.multiview : false;
1502
+ frameBufferTarget.useArrayDepthTexture = outputRenderTarget !== null ? outputRenderTarget.useArrayDepthTexture : false;
1401
1503
  frameBufferTarget.resolveDepthBuffer = outputRenderTarget !== null ? outputRenderTarget.resolveDepthBuffer : true;
1402
1504
  frameBufferTarget._autoAllocateDepthBuffer = outputRenderTarget !== null ? outputRenderTarget._autoAllocateDepthBuffer : false;
1403
1505
 
@@ -1431,6 +1533,8 @@ class Renderer {
1431
1533
  const previousRenderObjectFunction = this._currentRenderObjectFunction;
1432
1534
  const previousHandleObjectFunction = this._handleObjectFunction;
1433
1535
 
1536
+ this.lighting.beginRender( scene );
1537
+
1434
1538
  //
1435
1539
 
1436
1540
  this._callDepth ++;
@@ -1504,87 +1608,9 @@ class Renderer {
1504
1608
 
1505
1609
  //
1506
1610
 
1507
-
1508
- const xr = this.xr;
1509
-
1510
- if ( xr.isPresenting === false ) {
1511
-
1512
- let projectionMatrixNeedsUpdate = false;
1513
-
1514
- // reversed depth
1515
-
1516
- if ( this.reversedDepthBuffer === true && camera.reversedDepth !== true ) {
1517
-
1518
- camera._reversedDepth = true;
1519
-
1520
- if ( camera.isArrayCamera ) {
1521
-
1522
- for ( const subCamera of camera.cameras ) {
1523
-
1524
- subCamera._reversedDepth = true;
1525
-
1526
- }
1527
-
1528
- }
1529
-
1530
- projectionMatrixNeedsUpdate = true;
1531
-
1532
- }
1533
-
1534
- // WebGPU/WebGL coordinate system
1535
-
1536
- const coordinateSystem = this.coordinateSystem;
1537
-
1538
- if ( camera.coordinateSystem !== coordinateSystem ) {
1539
-
1540
- camera.coordinateSystem = coordinateSystem;
1541
-
1542
- if ( camera.isArrayCamera ) {
1543
-
1544
- for ( const subCamera of camera.cameras ) {
1545
-
1546
- subCamera.coordinateSystem = coordinateSystem;
1547
-
1548
- }
1549
-
1550
- }
1551
-
1552
- projectionMatrixNeedsUpdate = true;
1553
-
1554
- }
1555
-
1556
- // camera update
1557
-
1558
- if ( projectionMatrixNeedsUpdate === true ) {
1559
-
1560
- camera.updateProjectionMatrix();
1561
-
1562
- if ( camera.isArrayCamera ) {
1563
-
1564
- for ( const subCamera of camera.cameras ) {
1565
-
1566
- subCamera.updateProjectionMatrix();
1567
-
1568
- }
1569
-
1570
- }
1571
-
1572
- }
1573
-
1574
- }
1575
-
1576
- //
1577
-
1578
1611
  if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
1579
1612
 
1580
- if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
1581
-
1582
- if ( xr.enabled === true && xr.isPresenting === true ) {
1583
-
1584
- if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );
1585
- camera = xr.getCamera(); // use XR camera for rendering
1586
-
1587
- }
1613
+ camera = this._updateCamera( camera );
1588
1614
 
1589
1615
  //
1590
1616
 
@@ -1632,7 +1658,11 @@ class Renderer {
1632
1658
 
1633
1659
  const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
1634
1660
 
1635
- if ( ! camera.isArrayCamera ) {
1661
+ if ( camera.isArrayCamera ) {
1662
+
1663
+ frustum.setFromArrayCamera( camera );
1664
+
1665
+ } else {
1636
1666
 
1637
1667
  _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
1638
1668
  frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
@@ -1648,7 +1678,7 @@ class Renderer {
1648
1678
 
1649
1679
  if ( this.sortObjects === true ) {
1650
1680
 
1651
- renderList.sort( this._opaqueSort, this._transparentSort );
1681
+ renderList.sort( this._opaqueSort, this._transparentSort, camera.reversedDepth );
1652
1682
 
1653
1683
  }
1654
1684
 
@@ -1731,11 +1761,12 @@ class Renderer {
1731
1761
  // restore render tree
1732
1762
 
1733
1763
  nodeFrame.renderId = previousRenderId;
1734
-
1735
1764
  this._currentRenderContext = previousRenderContext;
1736
1765
  this._currentRenderObjectFunction = previousRenderObjectFunction;
1737
1766
  this._handleObjectFunction = previousHandleObjectFunction;
1738
1767
 
1768
+ this.lighting.finishRender( scene );
1769
+
1739
1770
  //
1740
1771
 
1741
1772
  this._callDepth --;
@@ -1837,8 +1868,7 @@ class Renderer {
1837
1868
 
1838
1869
  this.autoClear = false;
1839
1870
  this.xr.enabled = false;
1840
-
1841
- this._renderScene( quad, quad.camera, false );
1871
+ this._renderOutputLayers( quad, renderTarget );
1842
1872
 
1843
1873
  this.autoClear = currentAutoClear;
1844
1874
  this.xr.enabled = currentXR;
@@ -2269,7 +2299,7 @@ class Renderer {
2269
2299
 
2270
2300
  if ( this._initialized === false ) {
2271
2301
 
2272
- throw new Error( 'Renderer: .clear() called before the backend is initialized. Use "await renderer.init();" before before using this method.' );
2302
+ throw new Error( 'THREE.Renderer: .clear() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
2273
2303
 
2274
2304
  }
2275
2305
 
@@ -2842,7 +2872,7 @@ class Renderer {
2842
2872
 
2843
2873
  if ( this._initialized === false ) {
2844
2874
 
2845
- throw new Error( 'Renderer: .hasFeature() called before the backend is initialized. Use "await renderer.init();" before before using this method.' );
2875
+ throw new Error( 'THREE.Renderer: .hasFeature() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
2846
2876
 
2847
2877
  }
2848
2878
 
@@ -2892,7 +2922,7 @@ class Renderer {
2892
2922
 
2893
2923
  if ( this._initialized === false ) {
2894
2924
 
2895
- throw new Error( 'Renderer: .initTexture() called before the backend is initialized. Use "await renderer.init();" before before using this method.' );
2925
+ throw new Error( 'THREE.Renderer: .initTexture() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
2896
2926
 
2897
2927
  }
2898
2928
 
@@ -2909,7 +2939,7 @@ class Renderer {
2909
2939
 
2910
2940
  if ( this._initialized === false ) {
2911
2941
 
2912
- throw new Error( 'Renderer: .initRenderTarget() called before the backend is initialized. Use "await renderer.init();" before before using this method.' );
2942
+ throw new Error( 'THREE.Renderer: .initRenderTarget() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
2913
2943
 
2914
2944
  }
2915
2945
 
@@ -3073,7 +3103,7 @@ class Renderer {
3073
3103
 
3074
3104
  const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
3075
3105
 
3076
- if ( ! object.frustumCulled || frustum.intersectsSprite( object, camera ) ) {
3106
+ if ( ! object.frustumCulled || frustum.intersectsSprite( object ) ) {
3077
3107
 
3078
3108
  if ( this.sortObjects === true ) {
3079
3109
 
@@ -3099,7 +3129,7 @@ class Renderer {
3099
3129
 
3100
3130
  const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
3101
3131
 
3102
- if ( ! object.frustumCulled || frustum.intersectsObject( object, camera ) ) {
3132
+ if ( ! object.frustumCulled || frustum.intersectsObject( object ) ) {
3103
3133
 
3104
3134
  const { geometry, material } = object;
3105
3135
 
@@ -3148,9 +3178,40 @@ class Renderer {
3148
3178
  const baseRenderList = renderList;
3149
3179
 
3150
3180
  // replace render list
3181
+
3151
3182
  renderList = this._renderLists.get( object, camera );
3152
3183
 
3153
- renderList.begin();
3184
+ const renderBundle = this._bundles.get( object, camera, this._currentRenderContext );
3185
+ const renderBundleData = this.backend.get( renderBundle );
3186
+ const renderBundleNeedsUpdate = this._bundleNeedsUpdate( object, renderBundleData );
3187
+
3188
+ if ( renderBundleNeedsUpdate ) {
3189
+
3190
+ // update render list if necessary
3191
+
3192
+ renderList.begin();
3193
+
3194
+ if ( renderBundleData.renderObjects === undefined ) {
3195
+
3196
+ renderBundleData.renderObjects = [];
3197
+
3198
+ } else {
3199
+
3200
+ renderBundleData.renderObjects.length = 0;
3201
+
3202
+ }
3203
+
3204
+ const children = object.children;
3205
+
3206
+ for ( let i = 0, l = children.length; i < l; i ++ ) {
3207
+
3208
+ this._projectObject( children[ i ], camera, groupOrder, renderList, clippingContext );
3209
+
3210
+ }
3211
+
3212
+ renderList.finish();
3213
+
3214
+ }
3154
3215
 
3155
3216
  baseRenderList.pushBundle( {
3156
3217
  bundleGroup: object,
@@ -3158,10 +3219,12 @@ class Renderer {
3158
3219
  renderList,
3159
3220
  } );
3160
3221
 
3161
- renderList.finish();
3222
+ return;
3162
3223
 
3163
3224
  }
3164
3225
 
3226
+ //
3227
+
3165
3228
  const children = object.children;
3166
3229
 
3167
3230
  for ( let i = 0, l = children.length; i < l; i ++ ) {
@@ -3278,7 +3341,7 @@ class Renderer {
3278
3341
 
3279
3342
  if ( cache === undefined || cache.version !== version ) {
3280
3343
 
3281
- const hasMap = material.map !== null;
3344
+ const hasMap = material.map && material.map.isTexture;
3282
3345
  const hasColorNode = material.colorNode && material.colorNode.isNode;
3283
3346
  const hasCastShadowNode = material.castShadowNode && material.castShadowNode.isNode;
3284
3347
  const hasMaskNode = ( material.maskShadowNode && material.maskShadowNode.isNode ) || ( material.maskNode && material.maskNode.isNode );
@@ -3371,6 +3434,98 @@ class Renderer {
3371
3434
 
3372
3435
  }
3373
3436
 
3437
+ /**
3438
+ * Updates the camera so it's prepared for rendering operations.
3439
+ *
3440
+ * @private
3441
+ * @param {Camera} camera - The camera to update.
3442
+ * @return {Camera} The returned camera might be different depending on whether XR is used or not.
3443
+ */
3444
+ _updateCamera( camera ) {
3445
+
3446
+ const xr = this.xr;
3447
+
3448
+ if ( xr.isPresenting === false ) {
3449
+
3450
+ let projectionMatrixNeedsUpdate = false;
3451
+
3452
+ // reversed depth
3453
+
3454
+ if ( this.reversedDepthBuffer === true && camera.reversedDepth !== true ) {
3455
+
3456
+ camera._reversedDepth = true;
3457
+
3458
+ if ( camera.isArrayCamera ) {
3459
+
3460
+ for ( const subCamera of camera.cameras ) {
3461
+
3462
+ subCamera._reversedDepth = true;
3463
+
3464
+ }
3465
+
3466
+ }
3467
+
3468
+ projectionMatrixNeedsUpdate = true;
3469
+
3470
+ }
3471
+
3472
+ // WebGPU/WebGL coordinate system
3473
+
3474
+ const coordinateSystem = this.coordinateSystem;
3475
+
3476
+ if ( camera.coordinateSystem !== coordinateSystem ) {
3477
+
3478
+ camera.coordinateSystem = coordinateSystem;
3479
+
3480
+ if ( camera.isArrayCamera ) {
3481
+
3482
+ for ( const subCamera of camera.cameras ) {
3483
+
3484
+ subCamera.coordinateSystem = coordinateSystem;
3485
+
3486
+ }
3487
+
3488
+ }
3489
+
3490
+ projectionMatrixNeedsUpdate = true;
3491
+
3492
+ }
3493
+
3494
+ // camera update
3495
+
3496
+ if ( projectionMatrixNeedsUpdate === true ) {
3497
+
3498
+ camera.updateProjectionMatrix();
3499
+
3500
+ if ( camera.isArrayCamera ) {
3501
+
3502
+ for ( const subCamera of camera.cameras ) {
3503
+
3504
+ subCamera.updateProjectionMatrix();
3505
+
3506
+ }
3507
+
3508
+ }
3509
+
3510
+ }
3511
+
3512
+ }
3513
+
3514
+ if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
3515
+
3516
+ // handle XR
3517
+
3518
+ if ( xr.enabled === true && xr.isPresenting === true ) {
3519
+
3520
+ if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );
3521
+ camera = xr.getCamera(); // use XR camera for rendering
3522
+
3523
+ }
3524
+
3525
+ return camera;
3526
+
3527
+ }
3528
+
3374
3529
  /**
3375
3530
  * This method represents the default render object function that manages the render lifecycle
3376
3531
  * of the object.
@@ -3392,6 +3547,11 @@ class Renderer {
3392
3547
  let materialDepthNode;
3393
3548
  let materialPositionNode;
3394
3549
  let materialSide;
3550
+ let materialDisplacementMap;
3551
+ let materialDisplacementScale;
3552
+ let materialDisplacementBias;
3553
+
3554
+ const previousSourceMaterial = this._currentSourceMaterial;
3395
3555
 
3396
3556
  //
3397
3557
 
@@ -3401,6 +3561,8 @@ class Renderer {
3401
3561
 
3402
3562
  if ( material.allowOverride === true && scene.overrideMaterial !== null ) {
3403
3563
 
3564
+ this._currentSourceMaterial = material;
3565
+
3404
3566
  const overrideMaterial = scene.overrideMaterial;
3405
3567
 
3406
3568
  materialOverride = true;
@@ -3410,6 +3572,9 @@ class Renderer {
3410
3572
  materialDepthNode = ( overrideMaterial.isNodeMaterial ) ? overrideMaterial.depthNode : null;
3411
3573
  materialPositionNode = ( overrideMaterial.isNodeMaterial ) ? overrideMaterial.positionNode : null;
3412
3574
  materialSide = scene.overrideMaterial.side;
3575
+ materialDisplacementMap = overrideMaterial.displacementMap;
3576
+ materialDisplacementScale = overrideMaterial.displacementScale;
3577
+ materialDisplacementBias = overrideMaterial.displacementBias;
3413
3578
 
3414
3579
  if ( material.positionNode && material.positionNode.isNode ) {
3415
3580
 
@@ -3419,6 +3584,9 @@ class Renderer {
3419
3584
 
3420
3585
  overrideMaterial.alphaTest = material.alphaTest;
3421
3586
  overrideMaterial.alphaMap = material.alphaMap;
3587
+ overrideMaterial.displacementMap = material.displacementMap;
3588
+ overrideMaterial.displacementScale = material.displacementScale;
3589
+ overrideMaterial.displacementBias = material.displacementBias;
3422
3590
  overrideMaterial.transparent = material.transparent || material.transmission > 0 ||
3423
3591
  ( material.transmissionNode && material.transmissionNode.isNode ) ||
3424
3592
  ( material.backdropNode && material.backdropNode.isNode );
@@ -3473,9 +3641,14 @@ class Renderer {
3473
3641
  scene.overrideMaterial.depthNode = materialDepthNode;
3474
3642
  scene.overrideMaterial.positionNode = materialPositionNode;
3475
3643
  scene.overrideMaterial.side = materialSide;
3644
+ scene.overrideMaterial.displacementMap = materialDisplacementMap;
3645
+ scene.overrideMaterial.displacementScale = materialDisplacementScale;
3646
+ scene.overrideMaterial.displacementBias = materialDisplacementBias;
3476
3647
 
3477
3648
  }
3478
3649
 
3650
+ this._currentSourceMaterial = previousSourceMaterial;
3651
+
3479
3652
  //
3480
3653
 
3481
3654
  object.onAfterRender( this, scene, camera, geometry, material, group );
@@ -3492,7 +3665,7 @@ class Renderer {
3492
3665
 
3493
3666
  if ( this._initialized === false ) {
3494
3667
 
3495
- throw new Error( 'Renderer: .hasCompatibility() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
3668
+ throw new Error( 'THREE.Renderer: .hasCompatibility() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
3496
3669
 
3497
3670
  }
3498
3671