super-three 0.177.0 → 0.181.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 (501) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +1994 -749
  3. package/build/three.core.js +1358 -506
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +631 -247
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +113 -33
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +9571 -3424
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +9397 -3426
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  14. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  15. package/examples/jsm/Addons.js +2 -3
  16. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  17. package/examples/jsm/capabilities/WebGL.js +0 -27
  18. package/examples/jsm/capabilities/WebGPU.js +1 -1
  19. package/examples/jsm/controls/ArcballControls.js +9 -9
  20. package/examples/jsm/controls/DragControls.js +7 -57
  21. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  22. package/examples/jsm/controls/FlyControls.js +1 -1
  23. package/examples/jsm/controls/OrbitControls.js +2 -2
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +1 -1
  26. package/examples/jsm/controls/TransformControls.js +62 -15
  27. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  28. package/examples/jsm/effects/AsciiEffect.js +8 -8
  29. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  30. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  31. package/examples/jsm/exporters/EXRExporter.js +1 -1
  32. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  33. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  34. package/examples/jsm/exporters/PLYExporter.js +1 -1
  35. package/examples/jsm/exporters/USDZExporter.js +683 -299
  36. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  37. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  38. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  39. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  40. package/examples/jsm/geometries/TextGeometry.js +3 -2
  41. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  42. package/examples/jsm/helpers/ViewHelper.js +43 -5
  43. package/examples/jsm/inspector/Inspector.js +427 -0
  44. package/examples/jsm/inspector/RendererInspector.js +415 -0
  45. package/examples/jsm/inspector/tabs/Console.js +204 -0
  46. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  47. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  48. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  49. package/examples/jsm/inspector/ui/Graph.js +95 -0
  50. package/examples/jsm/inspector/ui/Item.js +170 -0
  51. package/examples/jsm/inspector/ui/List.js +75 -0
  52. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  53. package/examples/jsm/inspector/ui/Style.js +654 -0
  54. package/examples/jsm/inspector/ui/Tab.js +46 -0
  55. package/examples/jsm/inspector/ui/Values.js +423 -0
  56. package/examples/jsm/inspector/ui/utils.js +56 -0
  57. package/examples/jsm/interactive/HTMLMesh.js +11 -13
  58. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  59. package/examples/jsm/interactive/SelectionBox.js +30 -0
  60. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  61. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  62. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  63. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  64. package/examples/jsm/lines/Line2.js +3 -3
  65. package/examples/jsm/lines/LineGeometry.js +1 -1
  66. package/examples/jsm/lines/LineSegments2.js +2 -2
  67. package/examples/jsm/lines/Wireframe.js +2 -2
  68. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  69. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  70. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  71. package/examples/jsm/loaders/3MFLoader.js +1 -1
  72. package/examples/jsm/loaders/ColladaLoader.js +4 -4
  73. package/examples/jsm/loaders/DDSLoader.js +1 -1
  74. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  75. package/examples/jsm/loaders/EXRLoader.js +210 -22
  76. package/examples/jsm/loaders/FBXLoader.js +4 -4
  77. package/examples/jsm/loaders/FontLoader.js +23 -5
  78. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  79. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  80. package/examples/jsm/loaders/HDRLoader.js +486 -0
  81. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  82. package/examples/jsm/loaders/KTXLoader.js +2 -2
  83. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  84. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  85. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  86. package/examples/jsm/loaders/LWOLoader.js +2 -2
  87. package/examples/jsm/loaders/MaterialXLoader.js +233 -34
  88. package/examples/jsm/loaders/OBJLoader.js +1 -1
  89. package/examples/jsm/loaders/PDBLoader.js +1 -1
  90. package/examples/jsm/loaders/RGBELoader.js +7 -473
  91. package/examples/jsm/loaders/SVGLoader.js +2 -2
  92. package/examples/jsm/loaders/TTFLoader.js +13 -1
  93. package/examples/jsm/loaders/USDLoader.js +219 -0
  94. package/examples/jsm/loaders/USDZLoader.js +4 -892
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  96. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  97. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  98. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  99. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  100. package/examples/jsm/math/ColorSpaces.js +19 -1
  101. package/examples/jsm/math/ConvexHull.js +3 -3
  102. package/examples/jsm/math/ImprovedNoise.js +1 -1
  103. package/examples/jsm/math/Lut.js +2 -2
  104. package/examples/jsm/math/SimplexNoise.js +1 -1
  105. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  106. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  107. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  108. package/examples/jsm/misc/TubePainter.js +383 -40
  109. package/examples/jsm/misc/Volume.js +1 -1
  110. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  111. package/examples/jsm/objects/LensflareMesh.js +3 -3
  112. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  113. package/examples/jsm/objects/Sky.js +1 -1
  114. package/examples/jsm/objects/SkyMesh.js +3 -3
  115. package/examples/jsm/objects/Water.js +3 -3
  116. package/examples/jsm/objects/WaterMesh.js +6 -6
  117. package/examples/jsm/physics/RapierPhysics.js +95 -16
  118. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  119. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  120. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  121. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  122. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  123. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  124. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  125. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  126. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  127. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  128. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  129. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  130. package/examples/jsm/shaders/BokehShader.js +1 -1
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  133. package/examples/jsm/shaders/FocusShader.js +1 -1
  134. package/examples/jsm/shaders/GTAOShader.js +2 -2
  135. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  136. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  137. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  138. package/examples/jsm/shaders/SSRShader.js +1 -1
  139. package/examples/jsm/shaders/SepiaShader.js +1 -1
  140. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  141. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  142. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  143. package/examples/jsm/shaders/VignetteShader.js +1 -1
  144. package/examples/jsm/transpiler/AST.js +381 -30
  145. package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
  146. package/examples/jsm/transpiler/Linker.js +327 -0
  147. package/examples/jsm/transpiler/TSLEncoder.js +196 -92
  148. package/examples/jsm/transpiler/Transpiler.js +17 -1
  149. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  150. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  151. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  152. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  153. package/examples/jsm/tsl/display/BloomNode.js +11 -6
  154. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  155. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  156. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  157. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  158. package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
  159. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  160. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  161. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  162. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  163. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  164. package/examples/jsm/tsl/display/TRAANode.js +578 -0
  165. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  166. package/examples/jsm/tsl/display/hashBlur.js +18 -20
  167. package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
  168. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  169. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  170. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  171. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  172. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  173. package/package.json +5 -10
  174. package/src/Three.Core.js +5 -2
  175. package/src/Three.TSL.js +112 -32
  176. package/src/Three.WebGPU.Nodes.js +2 -0
  177. package/src/Three.WebGPU.js +4 -0
  178. package/src/animation/AnimationClip.js +20 -4
  179. package/src/animation/AnimationMixer.js +3 -3
  180. package/src/animation/AnimationObjectGroup.js +2 -1
  181. package/src/animation/KeyframeTrack.js +8 -7
  182. package/src/animation/PropertyBinding.js +12 -11
  183. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  184. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  185. package/src/audio/Audio.js +10 -9
  186. package/src/audio/PositionalAudio.js +1 -1
  187. package/src/cameras/Camera.js +14 -0
  188. package/src/cameras/OrthographicCamera.js +2 -2
  189. package/src/cameras/PerspectiveCamera.js +2 -2
  190. package/src/cameras/StereoCamera.js +2 -2
  191. package/src/constants.js +13 -5
  192. package/src/core/BufferAttribute.js +3 -3
  193. package/src/core/BufferGeometry.js +10 -10
  194. package/src/core/Clock.js +2 -8
  195. package/src/core/EventDispatcher.js +1 -1
  196. package/src/core/GLBufferAttribute.js +13 -1
  197. package/src/core/InterleavedBuffer.js +1 -1
  198. package/src/core/InterleavedBufferAttribute.js +3 -2
  199. package/src/core/Object3D.js +4 -3
  200. package/src/core/Raycaster.js +2 -1
  201. package/src/core/RenderTarget.js +10 -1
  202. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  203. package/src/extras/Controls.js +5 -4
  204. package/src/extras/DataUtils.js +2 -1
  205. package/src/extras/Earcut.js +6 -0
  206. package/src/extras/ImageUtils.js +2 -2
  207. package/src/extras/PMREMGenerator.js +279 -55
  208. package/src/extras/TextureUtils.js +2 -1
  209. package/src/extras/core/Curve.js +2 -1
  210. package/src/extras/core/Interpolations.js +7 -1
  211. package/src/extras/core/Path.js +22 -22
  212. package/src/extras/core/ShapePath.js +4 -4
  213. package/src/extras/lib/earcut.js +8 -8
  214. package/src/geometries/BoxGeometry.js +1 -0
  215. package/src/geometries/CapsuleGeometry.js +1 -0
  216. package/src/geometries/CircleGeometry.js +1 -0
  217. package/src/geometries/ConeGeometry.js +1 -0
  218. package/src/geometries/CylinderGeometry.js +1 -0
  219. package/src/geometries/DodecahedronGeometry.js +1 -0
  220. package/src/geometries/ExtrudeGeometry.js +8 -6
  221. package/src/geometries/IcosahedronGeometry.js +1 -0
  222. package/src/geometries/LatheGeometry.js +1 -0
  223. package/src/geometries/OctahedronGeometry.js +1 -0
  224. package/src/geometries/PlaneGeometry.js +1 -0
  225. package/src/geometries/RingGeometry.js +1 -0
  226. package/src/geometries/ShapeGeometry.js +1 -0
  227. package/src/geometries/SphereGeometry.js +1 -0
  228. package/src/geometries/TetrahedronGeometry.js +1 -0
  229. package/src/geometries/TorusGeometry.js +1 -0
  230. package/src/geometries/TorusKnotGeometry.js +1 -0
  231. package/src/geometries/TubeGeometry.js +1 -0
  232. package/src/helpers/CameraHelper.js +42 -12
  233. package/src/helpers/SkeletonHelper.js +35 -6
  234. package/src/lights/LightShadow.js +21 -8
  235. package/src/lights/PointLightShadow.js +1 -1
  236. package/src/lights/webgpu/ProjectorLight.js +1 -1
  237. package/src/loaders/AnimationLoader.js +2 -1
  238. package/src/loaders/AudioLoader.js +2 -1
  239. package/src/loaders/BufferGeometryLoader.js +2 -2
  240. package/src/loaders/Cache.js +2 -2
  241. package/src/loaders/DataTextureLoader.js +1 -1
  242. package/src/loaders/FileLoader.js +29 -5
  243. package/src/loaders/ImageBitmapLoader.js +32 -8
  244. package/src/loaders/ImageLoader.js +56 -9
  245. package/src/loaders/Loader.js +17 -3
  246. package/src/loaders/LoadingManager.js +45 -0
  247. package/src/loaders/MaterialLoader.js +3 -2
  248. package/src/loaders/ObjectLoader.js +13 -13
  249. package/src/loaders/TextureLoader.js +1 -1
  250. package/src/loaders/nodes/NodeLoader.js +3 -2
  251. package/src/materials/Material.js +16 -3
  252. package/src/materials/MeshBasicMaterial.js +2 -1
  253. package/src/materials/MeshDepthMaterial.js +1 -0
  254. package/src/materials/MeshDistanceMaterial.js +1 -1
  255. package/src/materials/MeshLambertMaterial.js +2 -1
  256. package/src/materials/MeshMatcapMaterial.js +22 -0
  257. package/src/materials/MeshNormalMaterial.js +1 -0
  258. package/src/materials/MeshPhongMaterial.js +2 -1
  259. package/src/materials/MeshPhysicalMaterial.js +2 -1
  260. package/src/materials/MeshStandardMaterial.js +8 -7
  261. package/src/materials/MeshToonMaterial.js +1 -0
  262. package/src/materials/PointsMaterial.js +1 -1
  263. package/src/materials/ShaderMaterial.js +2 -2
  264. package/src/materials/nodes/Line2NodeMaterial.js +2 -10
  265. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  266. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  267. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  268. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  269. package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
  270. package/src/materials/nodes/NodeMaterial.js +90 -27
  271. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  272. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  273. package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
  274. package/src/math/Color.js +6 -5
  275. package/src/math/ColorManagement.js +9 -3
  276. package/src/math/Cylindrical.js +1 -1
  277. package/src/math/Euler.js +2 -1
  278. package/src/math/Frustum.js +25 -9
  279. package/src/math/FrustumArray.js +10 -5
  280. package/src/math/Line3.js +129 -2
  281. package/src/math/MathUtils.js +13 -11
  282. package/src/math/Matrix2.js +1 -1
  283. package/src/math/Matrix3.js +2 -2
  284. package/src/math/Matrix4.js +55 -34
  285. package/src/math/Plane.js +1 -1
  286. package/src/math/Quaternion.js +69 -67
  287. package/src/math/Spherical.js +3 -3
  288. package/src/nodes/Nodes.js +6 -4
  289. package/src/nodes/TSL.js +9 -4
  290. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  291. package/src/nodes/accessors/Bitangent.js +31 -25
  292. package/src/nodes/accessors/BufferNode.js +1 -1
  293. package/src/nodes/accessors/Camera.js +142 -16
  294. package/src/nodes/accessors/ClippingNode.js +6 -5
  295. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  296. package/src/nodes/accessors/InstanceNode.js +25 -5
  297. package/src/nodes/accessors/Lights.js +10 -0
  298. package/src/nodes/accessors/Normal.js +97 -30
  299. package/src/nodes/accessors/Object3DNode.js +2 -2
  300. package/src/nodes/accessors/Position.js +25 -9
  301. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  302. package/src/nodes/accessors/ReferenceNode.js +20 -4
  303. package/src/nodes/accessors/ReflectVector.js +3 -3
  304. package/src/nodes/accessors/SceneNode.js +3 -2
  305. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  306. package/src/nodes/accessors/StorageTextureNode.js +23 -1
  307. package/src/nodes/accessors/Tangent.js +25 -17
  308. package/src/nodes/accessors/TangentUtils.js +46 -0
  309. package/src/nodes/accessors/Texture3DNode.js +14 -1
  310. package/src/nodes/accessors/TextureBicubic.js +21 -3
  311. package/src/nodes/accessors/TextureNode.js +142 -44
  312. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  313. package/src/nodes/code/FunctionCallNode.js +24 -4
  314. package/src/nodes/code/FunctionNode.js +23 -0
  315. package/src/nodes/core/ArrayNode.js +13 -0
  316. package/src/nodes/core/AssignNode.js +6 -2
  317. package/src/nodes/core/AttributeNode.js +2 -1
  318. package/src/nodes/core/ContextNode.js +48 -10
  319. package/src/nodes/core/IndexNode.js +2 -2
  320. package/src/nodes/core/InputNode.js +2 -1
  321. package/src/nodes/core/InspectorNode.js +128 -0
  322. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
  323. package/src/nodes/core/Node.js +167 -34
  324. package/src/nodes/core/NodeBuilder.js +404 -120
  325. package/src/nodes/core/NodeFrame.js +21 -21
  326. package/src/nodes/core/NodeFunction.js +2 -1
  327. package/src/nodes/core/NodeParser.js +2 -1
  328. package/src/nodes/core/NodeUniform.js +1 -1
  329. package/src/nodes/core/NodeUtils.js +17 -88
  330. package/src/nodes/core/ParameterNode.js +31 -0
  331. package/src/nodes/core/PropertyNode.js +7 -0
  332. package/src/nodes/core/StackNode.js +77 -30
  333. package/src/nodes/core/StructNode.js +5 -5
  334. package/src/nodes/core/StructTypeNode.js +1 -0
  335. package/src/nodes/core/SubBuildNode.js +89 -0
  336. package/src/nodes/core/UniformNode.js +80 -14
  337. package/src/nodes/core/VarNode.js +142 -16
  338. package/src/nodes/core/VaryingNode.js +9 -6
  339. package/src/nodes/display/BlendModes.js +7 -6
  340. package/src/nodes/display/BumpMapNode.js +1 -1
  341. package/src/nodes/display/ColorAdjustment.js +1 -1
  342. package/src/nodes/display/FrontFacingNode.js +35 -7
  343. package/src/nodes/display/NormalMapNode.js +20 -50
  344. package/src/nodes/display/PassNode.js +206 -17
  345. package/src/nodes/display/RenderOutputNode.js +28 -2
  346. package/src/nodes/display/ScreenNode.js +44 -40
  347. package/src/nodes/display/ToneMappingNode.js +31 -4
  348. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  349. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  350. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  351. package/src/nodes/display/ViewportTextureNode.js +94 -4
  352. package/src/nodes/fog/Fog.js +3 -2
  353. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  354. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  355. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  356. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  357. package/src/nodes/functions/BasicLightingModel.js +2 -1
  358. package/src/nodes/functions/PhongLightingModel.js +3 -3
  359. package/src/nodes/functions/PhysicalLightingModel.js +19 -18
  360. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  361. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  362. package/src/nodes/geometry/RangeNode.js +40 -4
  363. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  364. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  365. package/src/nodes/gpgpu/ComputeNode.js +81 -25
  366. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  367. package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
  368. package/src/nodes/lighting/EnvironmentNode.js +11 -11
  369. package/src/nodes/lighting/LightsNode.js +7 -8
  370. package/src/nodes/lighting/PointShadowNode.js +6 -0
  371. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  372. package/src/nodes/lighting/ShadowFilterNode.js +3 -1
  373. package/src/nodes/lighting/ShadowNode.js +77 -10
  374. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  375. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  376. package/src/nodes/math/BitcastNode.js +156 -0
  377. package/src/nodes/math/ConditionalNode.js +25 -27
  378. package/src/nodes/math/MathNode.js +106 -65
  379. package/src/nodes/math/OperatorNode.js +28 -43
  380. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  381. package/src/nodes/shapes/Shapes.js +1 -1
  382. package/src/nodes/tsl/TSLBase.js +6 -2
  383. package/src/nodes/tsl/TSLCore.js +546 -186
  384. package/src/nodes/utils/DebugNode.js +3 -2
  385. package/src/nodes/utils/EquirectUV.js +27 -0
  386. package/src/nodes/utils/EventNode.js +119 -0
  387. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  388. package/src/nodes/utils/JoinNode.js +6 -3
  389. package/src/nodes/utils/LoopNode.js +20 -41
  390. package/src/nodes/utils/MatcapUV.js +22 -0
  391. package/src/nodes/utils/MemberNode.js +59 -7
  392. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  393. package/src/nodes/utils/RTTNode.js +33 -6
  394. package/src/nodes/utils/ReflectorNode.js +68 -10
  395. package/src/nodes/utils/SampleNode.js +91 -0
  396. package/src/nodes/utils/SplitNode.js +11 -0
  397. package/src/nodes/utils/Timer.js +0 -47
  398. package/src/nodes/utils/TriplanarTextures.js +65 -0
  399. package/src/objects/BatchedMesh.js +6 -4
  400. package/src/objects/LOD.js +1 -1
  401. package/src/objects/Line.js +2 -1
  402. package/src/objects/LineSegments.js +2 -1
  403. package/src/objects/Skeleton.js +3 -2
  404. package/src/objects/SkinnedMesh.js +3 -1
  405. package/src/objects/Sprite.js +4 -3
  406. package/src/renderers/WebGLRenderer.js +77 -66
  407. package/src/renderers/common/Animation.js +13 -1
  408. package/src/renderers/common/Attributes.js +1 -1
  409. package/src/renderers/common/Backend.js +108 -27
  410. package/src/renderers/common/Background.js +4 -3
  411. package/src/renderers/common/Bindings.js +76 -19
  412. package/src/renderers/common/CanvasTarget.js +341 -0
  413. package/src/renderers/common/ChainMap.js +1 -1
  414. package/src/renderers/common/Color4.js +2 -2
  415. package/src/renderers/common/CubeRenderTarget.js +1 -1
  416. package/src/renderers/common/DataMap.js +1 -1
  417. package/src/renderers/common/Geometries.js +26 -0
  418. package/src/renderers/common/Info.js +4 -2
  419. package/src/renderers/common/InspectorBase.js +146 -0
  420. package/src/renderers/common/Pipelines.js +1 -1
  421. package/src/renderers/common/PostProcessing.js +61 -25
  422. package/src/renderers/common/QuadMesh.js +7 -1
  423. package/src/renderers/common/RenderContext.js +2 -2
  424. package/src/renderers/common/RenderList.js +7 -3
  425. package/src/renderers/common/RenderObject.js +84 -5
  426. package/src/renderers/common/RenderObjects.js +1 -1
  427. package/src/renderers/common/Renderer.js +486 -255
  428. package/src/renderers/common/RendererUtils.js +9 -0
  429. package/src/renderers/common/SampledTexture.js +8 -68
  430. package/src/renderers/common/Sampler.js +117 -0
  431. package/src/renderers/common/Storage3DTexture.js +100 -0
  432. package/src/renderers/common/StorageArrayTexture.js +84 -0
  433. package/src/renderers/common/StorageTexture.js +27 -0
  434. package/src/renderers/common/Textures.js +138 -46
  435. package/src/renderers/common/TimestampQueryPool.js +65 -3
  436. package/src/renderers/common/UniformsGroup.js +2 -1
  437. package/src/renderers/common/XRManager.js +63 -24
  438. package/src/renderers/common/XRRenderTarget.js +21 -4
  439. package/src/renderers/common/extras/PMREMGenerator.js +161 -66
  440. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  441. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  442. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  443. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  444. package/src/renderers/common/nodes/Nodes.js +38 -16
  445. package/src/renderers/shaders/DFGLUTData.js +64 -0
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  447. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  450. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  451. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  454. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  455. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  456. package/src/renderers/shaders/UniformsLib.js +1 -0
  457. package/src/renderers/shaders/UniformsUtils.js +25 -4
  458. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  459. package/src/renderers/webgl/WebGLCapabilities.js +4 -3
  460. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  461. package/src/renderers/webgl/WebGLInfo.js +3 -1
  462. package/src/renderers/webgl/WebGLProgram.js +25 -18
  463. package/src/renderers/webgl/WebGLPrograms.js +9 -6
  464. package/src/renderers/webgl/WebGLShadowMap.js +13 -2
  465. package/src/renderers/webgl/WebGLState.js +17 -16
  466. package/src/renderers/webgl/WebGLTextures.js +38 -21
  467. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  468. package/src/renderers/webgl/WebGLUtils.js +3 -2
  469. package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
  470. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
  471. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  472. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  473. package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
  474. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
  475. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  476. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  477. package/src/renderers/webgpu/WebGPUBackend.js +205 -128
  478. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  479. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  480. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
  481. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
  482. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
  483. package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
  484. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
  485. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  486. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
  487. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  488. package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
  489. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  490. package/src/renderers/webxr/WebXRManager.js +89 -13
  491. package/src/textures/ExternalTexture.js +56 -0
  492. package/src/textures/FramebufferTexture.js +2 -2
  493. package/src/textures/Source.js +14 -3
  494. package/src/textures/Texture.js +3 -2
  495. package/src/textures/VideoTexture.js +29 -2
  496. package/src/utils.js +67 -3
  497. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  498. package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
  499. package/src/nodes/utils/EquirectUVNode.js +0 -65
  500. package/src/nodes/utils/MatcapUVNode.js +0 -49
  501. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -1,6 +1,6 @@
1
1
  import { Clock, Vector3, Quaternion, Matrix4 } from 'three';
2
2
 
3
- const RAPIER_PATH = 'https://cdn.skypack.dev/@dimforge/rapier3d-compat@0.12.0';
3
+ const RAPIER_PATH = 'https://cdn.skypack.dev/@dimforge/rapier3d-compat@0.17.3';
4
4
 
5
5
  const frameRate = 60;
6
6
 
@@ -15,7 +15,16 @@ function getShape( geometry ) {
15
15
 
16
16
  // TODO change type to is*
17
17
 
18
- if ( geometry.type === 'BoxGeometry' ) {
18
+ if ( geometry.type === 'RoundedBoxGeometry' ) {
19
+
20
+ const sx = parameters.width !== undefined ? parameters.width / 2 : 0.5;
21
+ const sy = parameters.height !== undefined ? parameters.height / 2 : 0.5;
22
+ const sz = parameters.depth !== undefined ? parameters.depth / 2 : 0.5;
23
+ const radius = parameters.radius !== undefined ? parameters.radius : 0.1;
24
+
25
+ return RAPIER.ColliderDesc.roundCuboid( sx - radius, sy - radius, sz - radius, radius );
26
+
27
+ } else if ( geometry.type === 'BoxGeometry' ) {
19
28
 
20
29
  const sx = parameters.width !== undefined ? parameters.width / 2 : 0.5;
21
30
  const sy = parameters.height !== undefined ? parameters.height / 2 : 0.5;
@@ -132,18 +141,40 @@ async function RapierPhysics() {
132
141
  shape.setMass( mass );
133
142
  shape.setRestitution( restitution );
134
143
 
135
- const body = mesh.isInstancedMesh
144
+ const { body, collider } = mesh.isInstancedMesh
136
145
  ? createInstancedBody( mesh, mass, shape )
137
146
  : createBody( mesh.position, mesh.quaternion, mass, shape );
138
147
 
139
148
  if ( ! mesh.userData.physics ) mesh.userData.physics = {};
140
149
 
141
150
  mesh.userData.physics.body = body;
151
+ mesh.userData.physics.collider = collider;
142
152
 
143
153
  if ( mass > 0 ) {
144
154
 
145
155
  meshes.push( mesh );
146
- meshMap.set( mesh, body );
156
+ meshMap.set( mesh, { body, collider } );
157
+
158
+ }
159
+
160
+ }
161
+
162
+ function removeMesh( mesh ) {
163
+
164
+ const index = meshes.indexOf( mesh );
165
+
166
+ if ( index !== - 1 ) {
167
+
168
+ meshes.splice( index, 1 );
169
+ meshMap.delete( mesh );
170
+
171
+ if ( ! mesh.userData.physics ) return;
172
+
173
+ const body = mesh.userData.physics.body;
174
+ const collider = mesh.userData.physics.collider;
175
+
176
+ if ( body ) removeBody( body );
177
+ if ( collider ) removeCollider( collider );
147
178
 
148
179
  }
149
180
 
@@ -154,15 +185,18 @@ async function RapierPhysics() {
154
185
  const array = mesh.instanceMatrix.array;
155
186
 
156
187
  const bodies = [];
188
+ const colliders = [];
157
189
 
158
190
  for ( let i = 0; i < mesh.count; i ++ ) {
159
191
 
160
192
  const position = _vector.fromArray( array, i * 16 + 12 );
161
- bodies.push( createBody( position, null, mass, shape ) );
193
+ const { body, collider } = createBody( position, null, mass, shape );
194
+ bodies.push( body );
195
+ colliders.push( collider );
162
196
 
163
197
  }
164
198
 
165
- return bodies;
199
+ return { body: bodies, collider: colliders };
166
200
 
167
201
  }
168
202
 
@@ -173,15 +207,51 @@ async function RapierPhysics() {
173
207
  if ( quaternion !== null ) desc.setRotation( quaternion );
174
208
 
175
209
  const body = world.createRigidBody( desc );
176
- world.createCollider( shape, body );
210
+ const collider = world.createCollider( shape, body );
177
211
 
178
- return body;
212
+ return { body, collider };
213
+
214
+ }
215
+
216
+ function removeBody( body ) {
217
+
218
+ if ( Array.isArray( body ) ) {
219
+
220
+ for ( let i = 0; i < body.length; i ++ ) {
221
+
222
+ world.removeRigidBody( body[ i ] );
223
+
224
+ }
225
+
226
+ } else {
227
+
228
+ world.removeRigidBody( body );
229
+
230
+ }
231
+
232
+ }
233
+
234
+ function removeCollider( collider ) {
235
+
236
+ if ( Array.isArray( collider ) ) {
237
+
238
+ for ( let i = 0; i < collider.length; i ++ ) {
239
+
240
+ world.removeCollider( collider[ i ] );
241
+
242
+ }
243
+
244
+ } else {
245
+
246
+ world.removeCollider( collider );
247
+
248
+ }
179
249
 
180
250
  }
181
251
 
182
252
  function setMeshPosition( mesh, position, index = 0 ) {
183
253
 
184
- let body = meshMap.get( mesh );
254
+ let { body } = meshMap.get( mesh );
185
255
 
186
256
  if ( mesh.isInstancedMesh ) {
187
257
 
@@ -197,7 +267,7 @@ async function RapierPhysics() {
197
267
 
198
268
  function setMeshVelocity( mesh, velocity, index = 0 ) {
199
269
 
200
- let body = meshMap.get( mesh );
270
+ let { body } = meshMap.get( mesh );
201
271
 
202
272
  if ( mesh.isInstancedMesh ) {
203
273
 
@@ -212,17 +282,17 @@ async function RapierPhysics() {
212
282
  function addHeightfield( mesh, width, depth, heights, scale ) {
213
283
 
214
284
  const shape = RAPIER.ColliderDesc.heightfield( width, depth, heights, scale );
215
-
285
+
216
286
  const bodyDesc = RAPIER.RigidBodyDesc.fixed();
217
287
  bodyDesc.setTranslation( mesh.position.x, mesh.position.y, mesh.position.z );
218
288
  bodyDesc.setRotation( mesh.quaternion );
219
-
289
+
220
290
  const body = world.createRigidBody( bodyDesc );
221
291
  world.createCollider( shape, body );
222
-
292
+
223
293
  if ( ! mesh.userData.physics ) mesh.userData.physics = {};
224
294
  mesh.userData.physics.body = body;
225
-
295
+
226
296
  return body;
227
297
 
228
298
  }
@@ -245,7 +315,7 @@ async function RapierPhysics() {
245
315
  if ( mesh.isInstancedMesh ) {
246
316
 
247
317
  const array = mesh.instanceMatrix.array;
248
- const bodies = meshMap.get( mesh );
318
+ const { body: bodies } = meshMap.get( mesh );
249
319
 
250
320
  for ( let j = 0; j < bodies.length; j ++ ) {
251
321
 
@@ -263,7 +333,7 @@ async function RapierPhysics() {
263
333
 
264
334
  } else {
265
335
 
266
- const body = meshMap.get( mesh );
336
+ const { body } = meshMap.get( mesh );
267
337
 
268
338
  mesh.position.copy( body.translation() );
269
339
  mesh.quaternion.copy( body.rotation() );
@@ -306,6 +376,15 @@ async function RapierPhysics() {
306
376
  */
307
377
  addMesh: addMesh,
308
378
 
379
+ /**
380
+ * Removes the given mesh from this physics simulation.
381
+ *
382
+ * @method
383
+ * @name RapierPhysics#removeMesh
384
+ * @param {Mesh} mesh The mesh to remove.
385
+ */
386
+ removeMesh: removeMesh,
387
+
309
388
  /**
310
389
  * Set the position of the given mesh which is part of the physics simulation. Calling this
311
390
  * method will reset the current simulated velocity of the mesh.
@@ -103,7 +103,7 @@ class GTAOPass extends Pass {
103
103
  */
104
104
  this.output = 0;
105
105
  this._renderGBuffer = true;
106
- this._visibilityCache = new Map();
106
+ this._visibilityCache = [];
107
107
 
108
108
  /**
109
109
  * The AO blend intensity.
@@ -655,9 +655,12 @@ class GTAOPass extends Pass {
655
655
 
656
656
  scene.traverse( function ( object ) {
657
657
 
658
- cache.set( object, object.visible );
658
+ if ( ( object.isPoints || object.isLine || object.isLine2 ) && object.visible ) {
659
659
 
660
- if ( object.isPoints || object.isLine ) object.visible = false;
660
+ object.visible = false;
661
+ cache.push( object );
662
+
663
+ }
661
664
 
662
665
  } );
663
666
 
@@ -665,17 +668,15 @@ class GTAOPass extends Pass {
665
668
 
666
669
  _restoreVisibility() {
667
670
 
668
- const scene = this.scene;
669
671
  const cache = this._visibilityCache;
670
672
 
671
- scene.traverse( function ( object ) {
673
+ for ( let i = 0; i < cache.length; i ++ ) {
672
674
 
673
- const visible = cache.get( object );
674
- object.visible = visible;
675
+ cache[ i ].visible = true;
675
676
 
676
- } );
677
+ }
677
678
 
678
- cache.clear();
679
+ cache.length = 0;
679
680
 
680
681
  }
681
682
 
@@ -61,7 +61,7 @@ class GlitchPass extends Pass {
61
61
  // internals
62
62
 
63
63
  this._heightMap = this._generateHeightmap( dt_size );
64
- this.uniforms[ 'tDisp' ].value = this.heightMap;
64
+ this.uniforms[ 'tDisp' ].value = this._heightMap;
65
65
 
66
66
  this._fsQuad = new FullScreenQuad( this.material );
67
67
 
@@ -140,7 +140,7 @@ class GlitchPass extends Pass {
140
140
 
141
141
  this.material.dispose();
142
142
 
143
- this.heightMap.dispose();
143
+ this._heightMap.dispose();
144
144
 
145
145
  this._fsQuad.dispose();
146
146
 
@@ -494,37 +494,37 @@ class OutlinePass extends Pass {
494
494
 
495
495
  function VisibilityChangeCallBack( object ) {
496
496
 
497
- if ( object.isMesh || object.isSprite ) {
497
+ if ( object.isPoints || object.isLine || object.isLine2 ) {
498
498
 
499
- // only meshes and sprites are supported by OutlinePass
499
+ // the visibility of points and lines is always set to false in order to
500
+ // not affect the outline computation
500
501
 
501
- if ( ! selectionCache.has( object ) ) {
502
+ if ( bVisible === true ) {
502
503
 
503
- const visibility = object.visible;
504
+ object.visible = visibilityCache.get( object ); // restore
504
505
 
505
- if ( bVisible === false || visibilityCache.get( object ) === true ) {
506
+ } else {
506
507
 
507
- object.visible = bVisible;
508
+ visibilityCache.set( object, object.visible );
509
+ object.visible = bVisible;
508
510
 
509
- }
511
+ }
510
512
 
511
- visibilityCache.set( object, visibility );
513
+ } else if ( object.isMesh || object.isSprite ) {
512
514
 
513
- }
515
+ // only meshes and sprites are supported by OutlinePass
514
516
 
515
- } else if ( object.isPoints || object.isLine ) {
517
+ if ( ! selectionCache.has( object ) ) {
516
518
 
517
- // the visibility of points and lines is always set to false in order to
518
- // not affect the outline computation
519
+ const visibility = object.visible;
519
520
 
520
- if ( bVisible === true ) {
521
+ if ( bVisible === false || visibilityCache.get( object ) === true ) {
521
522
 
522
- object.visible = visibilityCache.get( object ); // restore
523
+ object.visible = bVisible;
523
524
 
524
- } else {
525
+ }
525
526
 
526
- visibilityCache.set( object, object.visible );
527
- object.visible = bVisible;
527
+ visibilityCache.set( object, visibility );
528
528
 
529
529
  }
530
530
 
@@ -139,7 +139,7 @@ class SSAOPass extends Pass {
139
139
  */
140
140
  this.maxDistance = 0.1;
141
141
 
142
- this._visibilityCache = new Map();
142
+ this._visibilityCache = [];
143
143
 
144
144
  //
145
145
 
@@ -489,9 +489,12 @@ class SSAOPass extends Pass {
489
489
 
490
490
  scene.traverse( function ( object ) {
491
491
 
492
- cache.set( object, object.visible );
492
+ if ( ( object.isPoints || object.isLine || object.isLine2 ) && object.visible ) {
493
493
 
494
- if ( object.isPoints || object.isLine ) object.visible = false;
494
+ object.visible = false;
495
+ cache.push( object );
496
+
497
+ }
495
498
 
496
499
  } );
497
500
 
@@ -499,17 +502,15 @@ class SSAOPass extends Pass {
499
502
 
500
503
  _restoreVisibility() {
501
504
 
502
- const scene = this.scene;
503
505
  const cache = this._visibilityCache;
504
506
 
505
- scene.traverse( function ( object ) {
507
+ for ( let i = 0; i < cache.length; i ++ ) {
506
508
 
507
- const visible = cache.get( object );
508
- object.visible = visible;
509
+ cache[ i ].visible = true;
509
510
 
510
- } );
511
+ }
511
512
 
512
- cache.clear();
513
+ cache.length = 0;
513
514
 
514
515
  }
515
516
 
@@ -137,6 +137,8 @@ class SSRPass extends Pass {
137
137
 
138
138
  this._selects = selects;
139
139
 
140
+ this._resolutionScale = 1;
141
+
140
142
  /**
141
143
  * Whether the pass is selective or not.
142
144
  *
@@ -457,6 +459,29 @@ class SSRPass extends Pass {
457
459
 
458
460
  }
459
461
 
462
+
463
+ /**
464
+ * The resolution scale. Valid values are in the range
465
+ * `[0,1]`. `1` means best quality but also results in
466
+ * more computational overhead. Setting to `0.5` means
467
+ * the effect is computed in half-resolution.
468
+ *
469
+ * @type {number}
470
+ * @default 1
471
+ */
472
+ get resolutionScale() {
473
+
474
+ return this._resolutionScale;
475
+
476
+ }
477
+
478
+ set resolutionScale( value ) {
479
+
480
+ this._resolutionScale = value;
481
+ this.setSize( this.width, this.height ); // force a resize when resolution scaling changes
482
+
483
+ }
484
+
460
485
  /**
461
486
  * Frees the GPU-related resources allocated by this instance. Call this
462
487
  * method whenever the pass is no longer used in your app.
@@ -661,23 +686,27 @@ class SSRPass extends Pass {
661
686
  this.width = width;
662
687
  this.height = height;
663
688
 
664
- this.ssrMaterial.defines.MAX_STEP = Math.sqrt( width * width + height * height );
689
+ const effectiveWidth = Math.round( this.resolutionScale * width );
690
+ const effectiveHeight = Math.round( this.resolutionScale * height );
691
+
692
+ this.ssrMaterial.defines.MAX_STEP = Math.sqrt( effectiveWidth * effectiveWidth + effectiveHeight * effectiveHeight );
665
693
  this.ssrMaterial.needsUpdate = true;
694
+
666
695
  this.beautyRenderTarget.setSize( width, height );
667
- this.prevRenderTarget.setSize( width, height );
668
- this.ssrRenderTarget.setSize( width, height );
669
696
  this.normalRenderTarget.setSize( width, height );
670
697
  this.metalnessRenderTarget.setSize( width, height );
671
- this.blurRenderTarget.setSize( width, height );
672
- this.blurRenderTarget2.setSize( width, height );
698
+ this.ssrRenderTarget.setSize( effectiveWidth, effectiveHeight );
699
+ this.prevRenderTarget.setSize( effectiveWidth, effectiveHeight );
700
+ this.blurRenderTarget.setSize( effectiveWidth, effectiveHeight );
701
+ this.blurRenderTarget2.setSize( effectiveWidth, effectiveHeight );
673
702
  // this.blurRenderTarget3.setSize(width, height);
674
703
 
675
- this.ssrMaterial.uniforms[ 'resolution' ].value.set( width, height );
704
+ this.ssrMaterial.uniforms[ 'resolution' ].value.set( effectiveWidth, effectiveHeight );
676
705
  this.ssrMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );
677
706
  this.ssrMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );
678
707
 
679
- this.blurMaterial.uniforms[ 'resolution' ].value.set( width, height );
680
- this.blurMaterial2.uniforms[ 'resolution' ].value.set( width, height );
708
+ this.blurMaterial.uniforms[ 'resolution' ].value.set( effectiveWidth, effectiveHeight );
709
+ this.blurMaterial2.uniforms[ 'resolution' ].value.set( effectiveWidth, effectiveHeight );
681
710
 
682
711
  }
683
712
 
@@ -22,7 +22,7 @@ import { LuminosityHighPassShader } from '../shaders/LuminosityHighPassShader.js
22
22
  * When using this pass, tone mapping must be enabled in the renderer settings.
23
23
  *
24
24
  * Reference:
25
- * - [Bloom in Unreal Engine]{@link https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/Bloom/}
25
+ * - [Bloom in Unreal Engine](https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/Bloom/)
26
26
  *
27
27
  * ```js
28
28
  * const resolution = new THREE.Vector2( window.innerWidth, window.innerHeight );
@@ -145,7 +145,9 @@ class UnrealBloomPass extends Pass {
145
145
  // gaussian blur materials
146
146
 
147
147
  this.separableBlurMaterials = [];
148
- const kernelSizeArray = [ 3, 5, 7, 9, 11 ];
148
+ // These sizes have been changed to account for the altered coefficients-calculation to avoid blockiness,
149
+ // while retaining the same blur-strength. For details see https://github.com/mrdoob/three.js/pull/31528
150
+ const kernelSizeArray = [ 6, 10, 14, 18, 22 ];
149
151
  resx = Math.round( this.resolution.x / 2 );
150
152
  resy = Math.round( this.resolution.y / 2 );
151
153
 
@@ -376,10 +378,11 @@ class UnrealBloomPass extends Pass {
376
378
  _getSeparableBlurMaterial( kernelRadius ) {
377
379
 
378
380
  const coefficients = [];
381
+ const sigma = kernelRadius / 3;
379
382
 
380
383
  for ( let i = 0; i < kernelRadius; i ++ ) {
381
384
 
382
- coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( kernelRadius * kernelRadius ) ) / kernelRadius );
385
+ coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( sigma * sigma ) ) / sigma );
383
386
 
384
387
  }
385
388
 
@@ -420,10 +423,9 @@ class UnrealBloomPass extends Pass {
420
423
  vec2 uvOffset = direction * invSize * x;
421
424
  vec3 sample1 = texture2D( colorTexture, vUv + uvOffset ).rgb;
422
425
  vec3 sample2 = texture2D( colorTexture, vUv - uvOffset ).rgb;
423
- diffuseSum += (sample1 + sample2) * w;
424
- weightSum += 2.0 * w;
426
+ diffuseSum += ( sample1 + sample2 ) * w;
425
427
  }
426
- gl_FragColor = vec4(diffuseSum/weightSum, 1.0);
428
+ gl_FragColor = vec4( diffuseSum, 1.0 );
427
429
  }`
428
430
  } );
429
431
 
@@ -16,7 +16,7 @@ class CSS2DObject extends Object3D {
16
16
  /**
17
17
  * Constructs a new CSS2D object.
18
18
  *
19
- * @param {DOMElement} [element] - The DOM element.
19
+ * @param {HTMLElement} [element] - The DOM element.
20
20
  */
21
21
  constructor( element = document.createElement( 'div' ) ) {
22
22
 
@@ -34,7 +34,7 @@ class CSS2DObject extends Object3D {
34
34
  /**
35
35
  * The DOM element which defines the appearance of this 3D object.
36
36
  *
37
- * @type {DOMElement}
37
+ * @type {HTMLElement}
38
38
  * @readonly
39
39
  * @default true
40
40
  */
@@ -59,6 +59,7 @@ class CSS2DObject extends Object3D {
59
59
  this.traverse( function ( object ) {
60
60
 
61
61
  if (
62
+ object.element &&
62
63
  object.element instanceof object.element.ownerDocument.defaultView.Element &&
63
64
  object.element.parentNode !== null
64
65
  ) {
@@ -132,10 +133,20 @@ class CSS2DRenderer {
132
133
  /**
133
134
  * The DOM where the renderer appends its child-elements.
134
135
  *
135
- * @type {DOMElement}
136
+ * @type {HTMLElement}
136
137
  */
137
138
  this.domElement = domElement;
138
139
 
140
+ /**
141
+ * Controls whether the renderer assigns `z-index` values to CSS2DObject DOM elements.
142
+ * If set to `true`, z-index values are assigned first based on the `renderOrder`
143
+ * and secondly - the distance to the camera. If set to `false`, no z-index values are assigned.
144
+ *
145
+ * @type {boolean}
146
+ * @default true
147
+ */
148
+ this.sortObjects = true;
149
+
139
150
  /**
140
151
  * Returns an object containing the width and height of the renderer.
141
152
  *
@@ -165,7 +176,7 @@ class CSS2DRenderer {
165
176
  _viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );
166
177
 
167
178
  renderObject( scene, scene, camera );
168
- zOrder( scene );
179
+ if ( this.sortObjects ) zOrder( scene );
169
180
 
170
181
  };
171
182
 
@@ -310,7 +321,7 @@ class CSS2DRenderer {
310
321
  * Constructor parameters of `CSS2DRenderer`.
311
322
  *
312
323
  * @typedef {Object} CSS2DRenderer~Parameters
313
- * @property {DOMElement} [element] - A DOM element where the renderer appends its child-elements.
324
+ * @property {HTMLElement} [element] - A DOM element where the renderer appends its child-elements.
314
325
  * If not passed in here, a new div element will be created.
315
326
  **/
316
327
 
@@ -22,7 +22,7 @@ class CSS3DObject extends Object3D {
22
22
  /**
23
23
  * Constructs a new CSS3D object.
24
24
  *
25
- * @param {DOMElement} [element] - The DOM element.
25
+ * @param {HTMLElement} [element] - The DOM element.
26
26
  */
27
27
  constructor( element = document.createElement( 'div' ) ) {
28
28
 
@@ -40,7 +40,7 @@ class CSS3DObject extends Object3D {
40
40
  /**
41
41
  * The DOM element which defines the appearance of this 3D object.
42
42
  *
43
- * @type {DOMElement}
43
+ * @type {HTMLElement}
44
44
  * @readonly
45
45
  * @default true
46
46
  */
@@ -56,6 +56,7 @@ class CSS3DObject extends Object3D {
56
56
  this.traverse( function ( object ) {
57
57
 
58
58
  if (
59
+ object.element &&
59
60
  object.element instanceof object.element.ownerDocument.defaultView.Element &&
60
61
  object.element.parentNode !== null
61
62
  ) {
@@ -94,7 +95,7 @@ class CSS3DSprite extends CSS3DObject {
94
95
  /**
95
96
  * Constructs a new CSS3D sprite object.
96
97
  *
97
- * @param {DOMElement} [element] - The DOM element.
98
+ * @param {HTMLElement} [element] - The DOM element.
98
99
  */
99
100
  constructor( element ) {
100
101
 
@@ -138,7 +139,7 @@ const _matrix2 = new Matrix4();
138
139
 
139
140
  /**
140
141
  * This renderer can be used to apply hierarchical 3D transformations to DOM elements
141
- * via the CSS3 [transform]{@link https://www.w3schools.com/cssref/css3_pr_transform.asp} property.
142
+ * via the CSS3 [transform](https://www.w3schools.com/cssref/css3_pr_transform.asp) property.
142
143
  * `CSS3DRenderer` is particularly interesting if you want to apply 3D effects to a website without
143
144
  * canvas based rendering. It can also be used in order to combine DOM elements with WebGLcontent.
144
145
  *
@@ -179,7 +180,7 @@ class CSS3DRenderer {
179
180
  /**
180
181
  * The DOM where the renderer appends its child-elements.
181
182
  *
182
- * @type {DOMElement}
183
+ * @type {HTMLElement}
183
184
  */
184
185
  this.domElement = domElement;
185
186
 
@@ -446,7 +447,7 @@ class CSS3DRenderer {
446
447
  * Constructor parameters of `CSS3DRenderer`.
447
448
  *
448
449
  * @typedef {Object} CSS3DRenderer~Parameters
449
- * @property {DOMElement} [element] - A DOM element where the renderer appends its child-elements.
450
+ * @property {HTMLElement} [element] - A DOM element where the renderer appends its child-elements.
450
451
  * If not passed in here, a new div element will be created.
451
452
  **/
452
453
 
@@ -120,7 +120,7 @@ class SVGRenderer {
120
120
  /**
121
121
  * The DOM where the renderer appends its child-elements.
122
122
  *
123
- * @type {DOMElement}
123
+ * @type {SVGSVGElement}
124
124
  */
125
125
  this.domElement = _svg;
126
126
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  /**
7
7
  * ACES Filmic Tone Mapping Shader by Stephen Hill.
8
- * Reference: [ltc_blit.fs]{@link https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs}
8
+ * Reference: [ltc_blit.fs](https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs)
9
9
  *
10
10
  * This implementation of ACES is modified to accommodate a brighter viewing environment.
11
11
  * The scale factor of 1/0.6 is subjective. See discussion in #19621.
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  /**
7
- * Inspired by [Three.js FBO motion trails]{@link https://codepen.io/brunoimbrizi/pen/MoRJaN?page=1&}.
7
+ * Inspired by [Three.js FBO motion trails](https://codepen.io/brunoimbrizi/pen/MoRJaN?page=1&).
8
8
  *
9
9
  * @constant
10
10
  * @type {ShaderMaterial~Shader}
@@ -6,7 +6,7 @@
6
6
 
7
7
  /**
8
8
  * Bleach bypass shader [http://en.wikipedia.org/wiki/Bleach_bypass] based on
9
- * [Nvidia Shader library]{@link http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html#post_bleach_bypass}.
9
+ * [Nvidia Shader library](http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html#post_bleach_bypass).
10
10
  *
11
11
  * @constant
12
12
  * @type {ShaderMaterial~Shader}
@@ -5,7 +5,7 @@
5
5
 
6
6
  /**
7
7
  * Depth-of-field shader with bokeh ported from
8
- * [GLSL shader by Martins Upitis]{@link http://artmartinsh.blogspot.com/2010/02/glsl-lens-blur-filter-with-bokeh.html}.
8
+ * [GLSL shader by Martins Upitis](http://artmartinsh.blogspot.com/2010/02/glsl-lens-blur-filter-with-bokeh.html).
9
9
  *
10
10
  * @constant
11
11
  * @type {ShaderMaterial~Shader}
@@ -9,7 +9,7 @@ import {
9
9
 
10
10
  /**
11
11
  * Depth-of-field shader with bokeh ported from
12
- * [GLSL shader by Martins Upitis]{@link http://blenderartists.org/forum/showthread.php?237488-GLSL-depth-of-field-with-bokeh-v2-4-(update)}.
12
+ * [GLSL shader by Martins Upitis](http://blenderartists.org/forum/showthread.php?237488-GLSL-depth-of-field-with-bokeh-v2-4-(update)).
13
13
  *
14
14
  * Requires #define RINGS and SAMPLES integers
15
15
  *