@plastic-software/three 0.180.0 → 0.181.1

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 (357) hide show
  1. package/build/three.cjs +943 -486
  2. package/build/three.core.js +506 -327
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +435 -163
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +8 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +3753 -1177
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +3752 -1176
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  13. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  14. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  15. package/examples/jsm/controls/ArcballControls.js +1 -1
  16. package/examples/jsm/controls/DragControls.js +1 -1
  17. package/examples/jsm/controls/FirstPersonControls.js +1 -1
  18. package/examples/jsm/controls/FlyControls.js +1 -1
  19. package/examples/jsm/controls/OrbitControls.js +2 -2
  20. package/examples/jsm/controls/PointerLockControls.js +2 -2
  21. package/examples/jsm/controls/TrackballControls.js +1 -1
  22. package/examples/jsm/controls/TransformControls.js +1 -1
  23. package/examples/jsm/effects/AsciiEffect.js +8 -8
  24. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  25. package/examples/jsm/exporters/EXRExporter.js +1 -1
  26. package/examples/jsm/exporters/GLTFExporter.js +3 -3
  27. package/examples/jsm/exporters/USDZExporter.js +9 -2
  28. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  29. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  30. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  31. package/examples/jsm/geometries/TextGeometry.js +3 -2
  32. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  33. package/examples/jsm/helpers/ViewHelper.js +43 -5
  34. package/examples/jsm/inspector/Inspector.js +427 -0
  35. package/examples/jsm/inspector/RendererInspector.js +415 -0
  36. package/examples/jsm/inspector/tabs/Console.js +204 -0
  37. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  38. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  39. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  40. package/examples/jsm/inspector/ui/Graph.js +95 -0
  41. package/examples/jsm/inspector/ui/Item.js +170 -0
  42. package/examples/jsm/inspector/ui/List.js +75 -0
  43. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  44. package/examples/jsm/inspector/ui/Style.js +654 -0
  45. package/examples/jsm/inspector/ui/Tab.js +46 -0
  46. package/examples/jsm/inspector/ui/Values.js +423 -0
  47. package/examples/jsm/inspector/ui/utils.js +56 -0
  48. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  49. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  50. package/examples/jsm/interactive/SelectionBox.js +30 -0
  51. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  52. package/examples/jsm/loaders/3MFLoader.js +1 -1
  53. package/examples/jsm/loaders/ColladaLoader.js +2 -2
  54. package/examples/jsm/loaders/DDSLoader.js +1 -1
  55. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  56. package/examples/jsm/loaders/FBXLoader.js +2 -2
  57. package/examples/jsm/loaders/FontLoader.js +23 -5
  58. package/examples/jsm/loaders/GLTFLoader.js +5 -3
  59. package/examples/jsm/loaders/KTX2Loader.js +28 -21
  60. package/examples/jsm/loaders/KTXLoader.js +2 -2
  61. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  62. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  63. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  64. package/examples/jsm/loaders/LWOLoader.js +2 -2
  65. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  66. package/examples/jsm/loaders/OBJLoader.js +1 -1
  67. package/examples/jsm/loaders/PDBLoader.js +1 -1
  68. package/examples/jsm/loaders/SVGLoader.js +2 -2
  69. package/examples/jsm/loaders/UltraHDRLoader.js +1 -1
  70. package/examples/jsm/math/ConvexHull.js +1 -1
  71. package/examples/jsm/math/ImprovedNoise.js +1 -1
  72. package/examples/jsm/math/SimplexNoise.js +1 -1
  73. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  74. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  75. package/examples/jsm/misc/TubePainter.js +383 -40
  76. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  77. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  78. package/examples/jsm/objects/Sky.js +1 -1
  79. package/examples/jsm/objects/SkyMesh.js +1 -1
  80. package/examples/jsm/objects/Water.js +3 -3
  81. package/examples/jsm/objects/WaterMesh.js +6 -6
  82. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  83. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  84. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  85. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  86. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  87. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  88. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  89. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  90. package/examples/jsm/shaders/BokehShader.js +1 -1
  91. package/examples/jsm/shaders/BokehShader2.js +1 -1
  92. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  93. package/examples/jsm/shaders/FocusShader.js +1 -1
  94. package/examples/jsm/shaders/GTAOShader.js +2 -2
  95. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  96. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  97. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  98. package/examples/jsm/shaders/SSRShader.js +1 -1
  99. package/examples/jsm/shaders/SepiaShader.js +1 -1
  100. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  101. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  102. package/examples/jsm/shaders/VignetteShader.js +1 -1
  103. package/examples/jsm/transpiler/TSLEncoder.js +7 -0
  104. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  105. package/examples/jsm/tsl/display/AnamorphicNode.js +2 -1
  106. package/examples/jsm/tsl/display/BloomNode.js +4 -0
  107. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  108. package/examples/jsm/tsl/display/DepthOfFieldNode.js +7 -0
  109. package/examples/jsm/tsl/display/GTAONode.js +45 -5
  110. package/examples/jsm/tsl/display/GaussianBlurNode.js +5 -3
  111. package/examples/jsm/tsl/display/OutlineNode.js +11 -0
  112. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  113. package/examples/jsm/tsl/display/SSRNode.js +2 -0
  114. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  115. package/examples/jsm/tsl/display/TRAANode.js +123 -6
  116. package/examples/jsm/tsl/display/boxBlur.js +1 -0
  117. package/examples/jsm/tsl/display/hashBlur.js +1 -0
  118. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  119. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  120. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  121. package/package.json +5 -10
  122. package/src/Three.Core.js +3 -2
  123. package/src/Three.TSL.js +7 -1
  124. package/src/Three.WebGPU.Nodes.js +2 -0
  125. package/src/Three.WebGPU.js +2 -0
  126. package/src/animation/AnimationClip.js +3 -2
  127. package/src/animation/AnimationMixer.js +3 -3
  128. package/src/animation/AnimationObjectGroup.js +2 -1
  129. package/src/animation/KeyframeTrack.js +7 -6
  130. package/src/animation/PropertyBinding.js +12 -11
  131. package/src/audio/Audio.js +10 -9
  132. package/src/audio/PositionalAudio.js +1 -1
  133. package/src/cameras/OrthographicCamera.js +1 -1
  134. package/src/cameras/PerspectiveCamera.js +1 -1
  135. package/src/cameras/StereoCamera.js +2 -2
  136. package/src/constants.js +1 -1
  137. package/src/core/BufferGeometry.js +8 -8
  138. package/src/core/EventDispatcher.js +1 -1
  139. package/src/core/InterleavedBuffer.js +1 -1
  140. package/src/core/InterleavedBufferAttribute.js +3 -2
  141. package/src/core/Object3D.js +3 -2
  142. package/src/core/Raycaster.js +2 -1
  143. package/src/core/RenderTarget.js +10 -1
  144. package/src/extras/Controls.js +5 -4
  145. package/src/extras/DataUtils.js +2 -1
  146. package/src/extras/Earcut.js +6 -0
  147. package/src/extras/ImageUtils.js +2 -2
  148. package/src/extras/PMREMGenerator.js +268 -55
  149. package/src/extras/core/Curve.js +2 -1
  150. package/src/extras/core/Interpolations.js +7 -1
  151. package/src/extras/core/ShapePath.js +4 -4
  152. package/src/extras/lib/earcut.js +7 -7
  153. package/src/geometries/BoxGeometry.js +1 -0
  154. package/src/geometries/CapsuleGeometry.js +1 -0
  155. package/src/geometries/CircleGeometry.js +1 -0
  156. package/src/geometries/ConeGeometry.js +1 -0
  157. package/src/geometries/CylinderGeometry.js +1 -0
  158. package/src/geometries/DodecahedronGeometry.js +1 -0
  159. package/src/geometries/ExtrudeGeometry.js +8 -6
  160. package/src/geometries/IcosahedronGeometry.js +1 -0
  161. package/src/geometries/LatheGeometry.js +1 -0
  162. package/src/geometries/OctahedronGeometry.js +1 -0
  163. package/src/geometries/PlaneGeometry.js +1 -0
  164. package/src/geometries/RingGeometry.js +1 -0
  165. package/src/geometries/ShapeGeometry.js +1 -0
  166. package/src/geometries/SphereGeometry.js +1 -0
  167. package/src/geometries/TetrahedronGeometry.js +1 -0
  168. package/src/geometries/TorusGeometry.js +1 -0
  169. package/src/geometries/TorusKnotGeometry.js +1 -0
  170. package/src/geometries/TubeGeometry.js +1 -0
  171. package/src/helpers/CameraHelper.js +1 -1
  172. package/src/loaders/AnimationLoader.js +2 -1
  173. package/src/loaders/AudioLoader.js +2 -1
  174. package/src/loaders/BufferGeometryLoader.js +2 -2
  175. package/src/loaders/Cache.js +2 -2
  176. package/src/loaders/DataTextureLoader.js +1 -1
  177. package/src/loaders/FileLoader.js +3 -2
  178. package/src/loaders/ImageBitmapLoader.js +5 -4
  179. package/src/loaders/ImageLoader.js +1 -1
  180. package/src/loaders/Loader.js +3 -3
  181. package/src/loaders/LoadingManager.js +25 -3
  182. package/src/loaders/MaterialLoader.js +3 -2
  183. package/src/loaders/ObjectLoader.js +13 -13
  184. package/src/loaders/TextureLoader.js +1 -1
  185. package/src/loaders/nodes/NodeLoader.js +3 -2
  186. package/src/materials/Material.js +4 -3
  187. package/src/materials/MeshBasicMaterial.js +1 -0
  188. package/src/materials/MeshDepthMaterial.js +1 -0
  189. package/src/materials/MeshLambertMaterial.js +2 -1
  190. package/src/materials/MeshMatcapMaterial.js +22 -0
  191. package/src/materials/MeshNormalMaterial.js +1 -0
  192. package/src/materials/MeshPhongMaterial.js +2 -1
  193. package/src/materials/MeshPhysicalMaterial.js +2 -1
  194. package/src/materials/MeshStandardMaterial.js +8 -7
  195. package/src/materials/MeshToonMaterial.js +1 -0
  196. package/src/materials/PointsMaterial.js +1 -1
  197. package/src/materials/ShaderMaterial.js +2 -2
  198. package/src/materials/nodes/Line2NodeMaterial.js +2 -2
  199. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  200. package/src/materials/nodes/NodeMaterial.js +62 -22
  201. package/src/materials/nodes/manager/NodeMaterialObserver.js +2 -1
  202. package/src/math/Color.js +6 -5
  203. package/src/math/ColorManagement.js +2 -2
  204. package/src/math/Cylindrical.js +1 -1
  205. package/src/math/Euler.js +2 -1
  206. package/src/math/MathUtils.js +13 -11
  207. package/src/math/Matrix2.js +1 -1
  208. package/src/math/Matrix3.js +2 -2
  209. package/src/math/Matrix4.js +7 -7
  210. package/src/math/Plane.js +1 -1
  211. package/src/math/Quaternion.js +68 -66
  212. package/src/math/Spherical.js +1 -1
  213. package/src/nodes/Nodes.js +1 -1
  214. package/src/nodes/TSL.js +1 -1
  215. package/src/nodes/accessors/CubeTextureNode.js +3 -2
  216. package/src/nodes/accessors/InstanceNode.js +22 -4
  217. package/src/nodes/accessors/Lights.js +10 -0
  218. package/src/nodes/accessors/Normal.js +5 -4
  219. package/src/nodes/accessors/Position.js +18 -2
  220. package/src/nodes/accessors/ReferenceNode.js +2 -1
  221. package/src/nodes/accessors/SceneNode.js +2 -1
  222. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  223. package/src/nodes/accessors/StorageTextureNode.js +22 -0
  224. package/src/nodes/accessors/Texture3DNode.js +1 -1
  225. package/src/nodes/accessors/TextureNode.js +61 -27
  226. package/src/nodes/code/FunctionCallNode.js +5 -4
  227. package/src/nodes/core/ArrayNode.js +1 -0
  228. package/src/nodes/core/AttributeNode.js +2 -1
  229. package/src/nodes/core/ContextNode.js +5 -10
  230. package/src/nodes/core/IndexNode.js +2 -2
  231. package/src/nodes/core/InputNode.js +2 -1
  232. package/src/nodes/core/InspectorNode.js +128 -0
  233. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
  234. package/src/nodes/core/Node.js +137 -12
  235. package/src/nodes/core/NodeBuilder.js +135 -21
  236. package/src/nodes/core/NodeFrame.js +20 -20
  237. package/src/nodes/core/NodeFunction.js +2 -1
  238. package/src/nodes/core/NodeParser.js +2 -1
  239. package/src/nodes/core/NodeUtils.js +17 -90
  240. package/src/nodes/core/ParameterNode.js +31 -0
  241. package/src/nodes/core/PropertyNode.js +7 -0
  242. package/src/nodes/core/StackNode.js +16 -14
  243. package/src/nodes/core/UniformNode.js +2 -1
  244. package/src/nodes/core/VarNode.js +70 -12
  245. package/src/nodes/core/VaryingNode.js +3 -2
  246. package/src/nodes/display/BlendModes.js +5 -4
  247. package/src/nodes/display/BumpMapNode.js +1 -1
  248. package/src/nodes/display/ColorAdjustment.js +1 -1
  249. package/src/nodes/display/NormalMapNode.js +2 -1
  250. package/src/nodes/display/PassNode.js +51 -10
  251. package/src/nodes/display/RenderOutputNode.js +28 -2
  252. package/src/nodes/display/ScreenNode.js +2 -1
  253. package/src/nodes/display/ToneMappingNode.js +31 -4
  254. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  255. package/src/nodes/fog/Fog.js +3 -2
  256. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  257. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  258. package/src/nodes/functions/BasicLightingModel.js +2 -1
  259. package/src/nodes/functions/PhysicalLightingModel.js +3 -2
  260. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  261. package/src/nodes/geometry/RangeNode.js +40 -4
  262. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  263. package/src/nodes/gpgpu/ComputeNode.js +17 -5
  264. package/src/nodes/gpgpu/SubgroupFunctionNode.js +25 -0
  265. package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
  266. package/src/nodes/lighting/EnvironmentNode.js +6 -6
  267. package/src/nodes/lighting/LightsNode.js +2 -3
  268. package/src/nodes/lighting/PointShadowNode.js +6 -0
  269. package/src/nodes/lighting/ShadowFilterNode.js +2 -0
  270. package/src/nodes/lighting/ShadowNode.js +75 -8
  271. package/src/nodes/math/ConditionalNode.js +6 -5
  272. package/src/nodes/math/MathNode.js +22 -4
  273. package/src/nodes/math/OperatorNode.js +3 -2
  274. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  275. package/src/nodes/shapes/Shapes.js +1 -1
  276. package/src/nodes/tsl/TSLBase.js +5 -2
  277. package/src/nodes/tsl/TSLCore.js +36 -15
  278. package/src/nodes/utils/DebugNode.js +2 -1
  279. package/src/nodes/utils/EventNode.js +36 -0
  280. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  281. package/src/nodes/utils/JoinNode.js +3 -2
  282. package/src/nodes/utils/LoopNode.js +20 -24
  283. package/src/nodes/utils/MemberNode.js +2 -1
  284. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  285. package/src/nodes/utils/RTTNode.js +12 -2
  286. package/src/nodes/utils/ReflectorNode.js +10 -3
  287. package/src/objects/Line.js +2 -1
  288. package/src/objects/LineSegments.js +2 -1
  289. package/src/objects/Skeleton.js +3 -2
  290. package/src/objects/SkinnedMesh.js +3 -1
  291. package/src/objects/Sprite.js +2 -1
  292. package/src/renderers/WebGLRenderer.js +48 -32
  293. package/src/renderers/common/Animation.js +13 -1
  294. package/src/renderers/common/Backend.js +93 -30
  295. package/src/renderers/common/Background.js +2 -1
  296. package/src/renderers/common/Bindings.js +56 -2
  297. package/src/renderers/common/CanvasTarget.js +341 -0
  298. package/src/renderers/common/Geometries.js +26 -0
  299. package/src/renderers/common/Info.js +4 -2
  300. package/src/renderers/common/InspectorBase.js +146 -0
  301. package/src/renderers/common/PostProcessing.js +6 -25
  302. package/src/renderers/common/QuadMesh.js +7 -1
  303. package/src/renderers/common/RenderList.js +7 -3
  304. package/src/renderers/common/RenderObject.js +3 -1
  305. package/src/renderers/common/RenderObjects.js +1 -1
  306. package/src/renderers/common/Renderer.js +436 -228
  307. package/src/renderers/common/RendererUtils.js +9 -0
  308. package/src/renderers/common/SampledTexture.js +8 -0
  309. package/src/renderers/common/Sampler.js +37 -11
  310. package/src/renderers/common/StorageTexture.js +9 -1
  311. package/src/renderers/common/Textures.js +89 -35
  312. package/src/renderers/common/TimestampQueryPool.js +63 -1
  313. package/src/renderers/common/UniformsGroup.js +2 -1
  314. package/src/renderers/common/XRManager.js +7 -3
  315. package/src/renderers/common/extras/PMREMGenerator.js +160 -65
  316. package/src/renderers/common/nodes/NodeLibrary.js +4 -2
  317. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  318. package/src/renderers/common/nodes/Nodes.js +38 -16
  319. package/src/renderers/shaders/DFGLUTData.js +64 -0
  320. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  321. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  322. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  323. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  324. package/src/renderers/shaders/UniformsLib.js +1 -0
  325. package/src/renderers/shaders/UniformsUtils.js +25 -4
  326. package/src/renderers/webgl/WebGLCapabilities.js +2 -1
  327. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  328. package/src/renderers/webgl/WebGLInfo.js +3 -1
  329. package/src/renderers/webgl/WebGLProgram.js +11 -10
  330. package/src/renderers/webgl/WebGLPrograms.js +2 -1
  331. package/src/renderers/webgl/WebGLShadowMap.js +2 -1
  332. package/src/renderers/webgl/WebGLState.js +15 -14
  333. package/src/renderers/webgl/WebGLTextures.js +18 -14
  334. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  335. package/src/renderers/webgl-fallback/WebGLBackend.js +22 -41
  336. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +74 -11
  337. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  338. package/src/renderers/webgl-fallback/utils/WebGLState.js +6 -5
  339. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +117 -16
  340. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +42 -12
  341. package/src/renderers/webgpu/WebGPUBackend.js +134 -108
  342. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  343. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  344. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -19
  345. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  346. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
  347. package/src/renderers/webgpu/utils/WebGPUConstants.js +5 -0
  348. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +44 -16
  349. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  350. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +146 -74
  351. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +29 -6
  352. package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
  353. package/src/renderers/webxr/WebXRManager.js +3 -2
  354. package/src/textures/Source.js +2 -1
  355. package/src/textures/Texture.js +3 -2
  356. package/src/textures/VideoTexture.js +2 -0
  357. package/src/utils.js +67 -3
@@ -42,9 +42,7 @@ function TubePainter() {
42
42
  geometry.setAttribute( 'color', colors );
43
43
  geometry.drawRange.count = 0;
44
44
 
45
- const material = new MeshStandardMaterial( {
46
- vertexColors: true
47
- } );
45
+ const material = new MeshStandardMaterial( { vertexColors: true } );
48
46
 
49
47
  const mesh = new Mesh( geometry, material );
50
48
  mesh.frustumCulled = false;
@@ -55,7 +53,7 @@ function TubePainter() {
55
53
 
56
54
  const PI2 = Math.PI * 2;
57
55
 
58
- const sides = 10;
56
+ const sides = 15;
59
57
  const array = [];
60
58
  const radius = 0.01 * size;
61
59
 
@@ -72,33 +70,263 @@ function TubePainter() {
72
70
 
73
71
  //
74
72
 
73
+ const vector = new Vector3();
74
+
75
75
  const vector1 = new Vector3();
76
76
  const vector2 = new Vector3();
77
77
  const vector3 = new Vector3();
78
78
  const vector4 = new Vector3();
79
79
 
80
- const color = new Color( 0xffffff );
81
- let size = 1;
80
+ const color1 = new Color( 0xffffff );
81
+ const color2 = new Color( 0xffffff );
82
82
 
83
- function stroke( position1, position2, matrix1, matrix2 ) {
83
+ let size1 = 1;
84
+ let size2 = 1;
84
85
 
85
- if ( position1.distanceToSquared( position2 ) === 0 ) return;
86
+ function addCap( position, matrix, isEndCap, capSize ) {
86
87
 
87
88
  let count = geometry.drawRange.count;
88
89
 
89
- const points = getPoints( size );
90
+ const points = getPoints( capSize );
91
+ const sides = points.length;
92
+ const radius = 0.01 * capSize;
93
+ const latSegments = 4;
94
+ const directionSign = isEndCap ? - 1 : 1;
95
+
96
+ for ( let lat = 0; lat < latSegments; lat ++ ) {
97
+
98
+ const phi1 = ( lat / latSegments ) * Math.PI * 0.5;
99
+ const phi2 = ( ( lat + 1 ) / latSegments ) * Math.PI * 0.5;
100
+
101
+ const z1 = Math.sin( phi1 ) * radius * directionSign;
102
+ const r1 = Math.cos( phi1 ) * radius;
103
+
104
+ const z2 = Math.sin( phi2 ) * radius * directionSign;
105
+ const r2 = Math.cos( phi2 ) * radius;
106
+
107
+ for ( let i = 0; i < sides; i ++ ) {
108
+
109
+ const theta1 = ( i / sides ) * Math.PI * 2;
110
+ const theta2 = ( ( i + 1 ) / sides ) * Math.PI * 2;
111
+
112
+ // First ring
113
+ const x1 = Math.sin( theta1 ) * r1;
114
+ const y1 = Math.cos( theta1 ) * r1;
115
+
116
+ const x2 = Math.sin( theta2 ) * r1;
117
+ const y2 = Math.cos( theta2 ) * r1;
118
+
119
+ // Second ring
120
+ const x3 = Math.sin( theta1 ) * r2;
121
+ const y3 = Math.cos( theta1 ) * r2;
122
+
123
+ const x4 = Math.sin( theta2 ) * r2;
124
+ const y4 = Math.cos( theta2 ) * r2;
125
+
126
+ // Transform to world space
127
+ vector1.set( x1, y1, z1 ).applyMatrix4( matrix ).add( position );
128
+ vector2.set( x2, y2, z1 ).applyMatrix4( matrix ).add( position );
129
+ vector3.set( x3, y3, z2 ).applyMatrix4( matrix ).add( position );
130
+ vector4.set( x4, y4, z2 ).applyMatrix4( matrix ).add( position );
131
+
132
+ // First triangle
133
+ normal.set( x1, y1, z1 ).normalize().transformDirection( matrix );
134
+ vector.set( x2, y2, z1 ).normalize().transformDirection( matrix );
135
+ side.set( x3, y3, z2 ).normalize().transformDirection( matrix );
136
+
137
+ if ( isEndCap ) {
138
+
139
+ vector1.toArray( positions.array, count * 3 );
140
+ vector2.toArray( positions.array, ( count + 1 ) * 3 );
141
+ vector3.toArray( positions.array, ( count + 2 ) * 3 );
142
+
143
+ normal.toArray( normals.array, count * 3 );
144
+ vector.toArray( normals.array, ( count + 1 ) * 3 );
145
+ side.toArray( normals.array, ( count + 2 ) * 3 );
146
+
147
+ } else {
148
+
149
+ vector1.toArray( positions.array, count * 3 );
150
+ vector3.toArray( positions.array, ( count + 1 ) * 3 );
151
+ vector2.toArray( positions.array, ( count + 2 ) * 3 );
152
+
153
+ normal.toArray( normals.array, count * 3 );
154
+ side.toArray( normals.array, ( count + 1 ) * 3 );
155
+ vector.toArray( normals.array, ( count + 2 ) * 3 );
156
+
157
+ }
158
+
159
+ color1.toArray( colors.array, count * 3 );
160
+ color1.toArray( colors.array, ( count + 1 ) * 3 );
161
+ color1.toArray( colors.array, ( count + 2 ) * 3 );
162
+
163
+ count += 3;
164
+
165
+ // Second triangle
166
+ if ( r2 > 0.001 ) {
167
+
168
+ normal.set( x2, y2, z1 ).normalize().transformDirection( matrix );
169
+ vector.set( x4, y4, z2 ).normalize().transformDirection( matrix );
170
+ side.set( x3, y3, z2 ).normalize().transformDirection( matrix );
171
+
172
+ if ( isEndCap ) {
173
+
174
+ vector2.toArray( positions.array, count * 3 );
175
+ vector4.toArray( positions.array, ( count + 1 ) * 3 );
176
+ vector3.toArray( positions.array, ( count + 2 ) * 3 );
177
+
178
+ normal.toArray( normals.array, count * 3 );
179
+ vector.toArray( normals.array, ( count + 1 ) * 3 );
180
+ side.toArray( normals.array, ( count + 2 ) * 3 );
181
+
182
+ } else {
183
+
184
+ vector3.toArray( positions.array, count * 3 );
185
+ vector4.toArray( positions.array, ( count + 1 ) * 3 );
186
+ vector2.toArray( positions.array, ( count + 2 ) * 3 );
187
+
188
+ side.toArray( normals.array, count * 3 );
189
+ vector.toArray( normals.array, ( count + 1 ) * 3 );
190
+ normal.toArray( normals.array, ( count + 2 ) * 3 );
191
+
192
+ }
193
+
194
+ color1.toArray( colors.array, count * 3 );
195
+ color1.toArray( colors.array, ( count + 1 ) * 3 );
196
+ color1.toArray( colors.array, ( count + 2 ) * 3 );
197
+
198
+ count += 3;
199
+
200
+ }
201
+
202
+ }
203
+
204
+ }
205
+
206
+ geometry.drawRange.count = count;
207
+
208
+ }
209
+
210
+ function updateEndCap( position, matrix, capSize ) {
211
+
212
+ if ( endCapStartIndex === null ) return;
213
+
214
+ const points = getPoints( capSize );
215
+ const sides = points.length;
216
+ const radius = 0.01 * capSize;
217
+ const latSegments = 4;
218
+
219
+ let count = endCapStartIndex;
220
+
221
+ for ( let lat = 0; lat < latSegments; lat ++ ) {
222
+
223
+ const phi1 = ( lat / latSegments ) * Math.PI * 0.5;
224
+ const phi2 = ( ( lat + 1 ) / latSegments ) * Math.PI * 0.5;
225
+
226
+ const z1 = - Math.sin( phi1 ) * radius;
227
+ const r1 = Math.cos( phi1 ) * radius;
228
+
229
+ const z2 = - Math.sin( phi2 ) * radius;
230
+ const r2 = Math.cos( phi2 ) * radius;
231
+
232
+ for ( let i = 0; i < sides; i ++ ) {
233
+
234
+ const theta1 = ( i / sides ) * Math.PI * 2;
235
+ const theta2 = ( ( i + 1 ) / sides ) * Math.PI * 2;
236
+
237
+ // First ring
238
+ const x1 = Math.sin( theta1 ) * r1;
239
+ const y1 = Math.cos( theta1 ) * r1;
240
+
241
+ const x2 = Math.sin( theta2 ) * r1;
242
+ const y2 = Math.cos( theta2 ) * r1;
243
+
244
+ // Second ring
245
+ const x3 = Math.sin( theta1 ) * r2;
246
+ const y3 = Math.cos( theta1 ) * r2;
247
+
248
+ const x4 = Math.sin( theta2 ) * r2;
249
+ const y4 = Math.cos( theta2 ) * r2;
250
+
251
+ // Transform positions to world space
252
+ vector1.set( x1, y1, z1 ).applyMatrix4( matrix ).add( position );
253
+ vector2.set( x2, y2, z1 ).applyMatrix4( matrix ).add( position );
254
+ vector3.set( x3, y3, z2 ).applyMatrix4( matrix ).add( position );
255
+ vector4.set( x4, y4, z2 ).applyMatrix4( matrix ).add( position );
256
+
257
+ // Transform normals to world space
258
+ normal.set( x1, y1, z1 ).normalize().transformDirection( matrix );
259
+ vector.set( x2, y2, z1 ).normalize().transformDirection( matrix );
260
+ side.set( x3, y3, z2 ).normalize().transformDirection( matrix );
261
+
262
+ // First triangle
263
+ vector1.toArray( positions.array, count * 3 );
264
+ vector2.toArray( positions.array, ( count + 1 ) * 3 );
265
+ vector3.toArray( positions.array, ( count + 2 ) * 3 );
266
+
267
+ normal.toArray( normals.array, count * 3 );
268
+ vector.toArray( normals.array, ( count + 1 ) * 3 );
269
+ side.toArray( normals.array, ( count + 2 ) * 3 );
270
+
271
+ color1.toArray( colors.array, count * 3 );
272
+ color1.toArray( colors.array, ( count + 1 ) * 3 );
273
+ color1.toArray( colors.array, ( count + 2 ) * 3 );
274
+
275
+ count += 3;
276
+
277
+ // Second triangle
278
+ if ( r2 > 0.001 ) {
279
+
280
+ normal.set( x2, y2, z1 ).normalize().transformDirection( matrix );
281
+ vector.set( x4, y4, z2 ).normalize().transformDirection( matrix );
282
+ side.set( x3, y3, z2 ).normalize().transformDirection( matrix );
283
+
284
+ vector2.toArray( positions.array, count * 3 );
285
+ vector4.toArray( positions.array, ( count + 1 ) * 3 );
286
+ vector3.toArray( positions.array, ( count + 2 ) * 3 );
287
+
288
+ normal.toArray( normals.array, count * 3 );
289
+ vector.toArray( normals.array, ( count + 1 ) * 3 );
290
+ side.toArray( normals.array, ( count + 2 ) * 3 );
291
+
292
+ color1.toArray( colors.array, count * 3 );
293
+ color1.toArray( colors.array, ( count + 1 ) * 3 );
294
+ color1.toArray( colors.array, ( count + 2 ) * 3 );
295
+
296
+ count += 3;
297
+
298
+ }
299
+
300
+ }
301
+
302
+ }
303
+
304
+ positions.addUpdateRange( endCapStartIndex * 3, endCapVertexCount * 3 );
305
+ normals.addUpdateRange( endCapStartIndex * 3, endCapVertexCount * 3 );
306
+ colors.addUpdateRange( endCapStartIndex * 3, endCapVertexCount * 3 );
307
+
308
+ }
309
+
310
+ function stroke( position1, position2, matrix1, matrix2, size1, size2 ) {
311
+
312
+ if ( position1.distanceToSquared( position2 ) === 0 ) return;
313
+
314
+ let count = geometry.drawRange.count;
90
315
 
91
- for ( let i = 0, il = points.length; i < il; i ++ ) {
316
+ const points1 = getPoints( size1 );
317
+ const points2 = getPoints( size2 );
92
318
 
93
- const vertex1 = points[ i ];
94
- const vertex2 = points[ ( i + 1 ) % il ];
319
+ for ( let i = 0, il = points2.length; i < il; i ++ ) {
95
320
 
96
- // positions
321
+ const vertex1_2 = points2[ i ];
322
+ const vertex2_2 = points2[ ( i + 1 ) % il ];
323
+ const vertex1_1 = points1[ i ];
324
+ const vertex2_1 = points1[ ( i + 1 ) % il ];
97
325
 
98
- vector1.copy( vertex1 ).applyMatrix4( matrix2 ).add( position2 );
99
- vector2.copy( vertex2 ).applyMatrix4( matrix2 ).add( position2 );
100
- vector3.copy( vertex2 ).applyMatrix4( matrix1 ).add( position1 );
101
- vector4.copy( vertex1 ).applyMatrix4( matrix1 ).add( position1 );
326
+ vector1.copy( vertex1_2 ).applyMatrix4( matrix2 ).add( position2 );
327
+ vector2.copy( vertex2_2 ).applyMatrix4( matrix2 ).add( position2 );
328
+ vector3.copy( vertex2_1 ).applyMatrix4( matrix1 ).add( position1 );
329
+ vector4.copy( vertex1_1 ).applyMatrix4( matrix1 ).add( position1 );
102
330
 
103
331
  vector1.toArray( positions.array, ( count + 0 ) * 3 );
104
332
  vector2.toArray( positions.array, ( count + 1 ) * 3 );
@@ -108,12 +336,10 @@ function TubePainter() {
108
336
  vector3.toArray( positions.array, ( count + 4 ) * 3 );
109
337
  vector4.toArray( positions.array, ( count + 5 ) * 3 );
110
338
 
111
- // normals
112
-
113
- vector1.copy( vertex1 ).applyMatrix4( matrix2 ).normalize();
114
- vector2.copy( vertex2 ).applyMatrix4( matrix2 ).normalize();
115
- vector3.copy( vertex2 ).applyMatrix4( matrix1 ).normalize();
116
- vector4.copy( vertex1 ).applyMatrix4( matrix1 ).normalize();
339
+ vector1.copy( vertex1_2 ).applyMatrix4( matrix2 ).normalize();
340
+ vector2.copy( vertex2_2 ).applyMatrix4( matrix2 ).normalize();
341
+ vector3.copy( vertex2_1 ).applyMatrix4( matrix1 ).normalize();
342
+ vector4.copy( vertex1_1 ).applyMatrix4( matrix1 ).normalize();
117
343
 
118
344
  vector1.toArray( normals.array, ( count + 0 ) * 3 );
119
345
  vector2.toArray( normals.array, ( count + 1 ) * 3 );
@@ -123,15 +349,13 @@ function TubePainter() {
123
349
  vector3.toArray( normals.array, ( count + 4 ) * 3 );
124
350
  vector4.toArray( normals.array, ( count + 5 ) * 3 );
125
351
 
126
- // colors
127
-
128
- color.toArray( colors.array, ( count + 0 ) * 3 );
129
- color.toArray( colors.array, ( count + 1 ) * 3 );
130
- color.toArray( colors.array, ( count + 2 ) * 3 );
352
+ color2.toArray( colors.array, ( count + 0 ) * 3 );
353
+ color2.toArray( colors.array, ( count + 1 ) * 3 );
354
+ color1.toArray( colors.array, ( count + 2 ) * 3 );
131
355
 
132
- color.toArray( colors.array, ( count + 3 ) * 3 );
133
- color.toArray( colors.array, ( count + 4 ) * 3 );
134
- color.toArray( colors.array, ( count + 5 ) * 3 );
356
+ color2.toArray( colors.array, ( count + 3 ) * 3 );
357
+ color1.toArray( colors.array, ( count + 4 ) * 3 );
358
+ color1.toArray( colors.array, ( count + 5 ) * 3 );
135
359
 
136
360
  count += 6;
137
361
 
@@ -143,7 +367,9 @@ function TubePainter() {
143
367
 
144
368
  //
145
369
 
146
- const up = new Vector3( 0, 1, 0 );
370
+ const direction = new Vector3();
371
+ const normal = new Vector3();
372
+ const side = new Vector3();
147
373
 
148
374
  const point1 = new Vector3();
149
375
  const point2 = new Vector3();
@@ -151,31 +377,139 @@ function TubePainter() {
151
377
  const matrix1 = new Matrix4();
152
378
  const matrix2 = new Matrix4();
153
379
 
154
- function moveTo( position ) {
380
+ const lastNormal = new Vector3();
381
+ const prevDirection = new Vector3();
382
+ const rotationAxis = new Vector3();
155
383
 
156
- point1.copy( position );
157
- matrix1.lookAt( point2, point1, up );
384
+ let isFirstSegment = true;
385
+
386
+ let endCapStartIndex = null;
387
+ let endCapVertexCount = 0;
388
+
389
+ function calculateRMF() {
390
+
391
+ if ( isFirstSegment === true ) {
392
+
393
+ if ( Math.abs( direction.y ) < 0.99 ) {
394
+
395
+ vector.copy( direction ).multiplyScalar( direction.y );
396
+ normal.set( 0, 1, 0 ).sub( vector ).normalize();
397
+
398
+ } else {
399
+
400
+ vector.copy( direction ).multiplyScalar( direction.x );
401
+ normal.set( 1, 0, 0 ).sub( vector ).normalize();
402
+
403
+ }
404
+
405
+ } else {
406
+
407
+ rotationAxis.crossVectors( prevDirection, direction );
408
+
409
+ const rotAxisLength = rotationAxis.length();
410
+
411
+ if ( rotAxisLength > 0.0001 ) {
412
+
413
+ rotationAxis.divideScalar( rotAxisLength );
414
+ vector.addVectors( prevDirection, direction );
415
+ const c1 = - 2.0 / ( 1.0 + prevDirection.dot( direction ) );
416
+ const dot = lastNormal.dot( vector );
417
+ normal.copy( lastNormal ).addScaledVector( vector, c1 * dot );
418
+
419
+ } else {
420
+
421
+ normal.copy( lastNormal );
422
+
423
+ }
424
+
425
+ }
426
+
427
+ side.crossVectors( direction, normal ).normalize();
428
+ normal.crossVectors( side, direction ).normalize();
429
+
430
+ if ( isFirstSegment === false ) {
431
+
432
+ const smoothFactor = 0.3;
433
+
434
+ normal.lerp( lastNormal, smoothFactor ).normalize();
435
+ side.crossVectors( direction, normal ).normalize();
436
+ normal.crossVectors( side, direction ).normalize();
437
+
438
+ }
439
+
440
+ lastNormal.copy( normal );
441
+ prevDirection.copy( direction );
442
+
443
+ matrix1.makeBasis( side, normal, vector.copy( direction ).negate() );
444
+
445
+ }
446
+
447
+ function moveTo( position ) {
158
448
 
159
449
  point2.copy( position );
160
- matrix2.copy( matrix1 );
450
+
451
+ lastNormal.set( 0, 1, 0 );
452
+
453
+ isFirstSegment = true;
454
+
455
+ endCapStartIndex = null;
456
+ endCapVertexCount = 0;
161
457
 
162
458
  }
163
459
 
164
460
  function lineTo( position ) {
165
461
 
166
462
  point1.copy( position );
167
- matrix1.lookAt( point2, point1, up );
168
463
 
169
- stroke( point1, point2, matrix1, matrix2 );
464
+ direction.subVectors( point1, point2 );
465
+
466
+ const length = direction.length();
467
+
468
+ if ( length === 0 ) return;
469
+
470
+ direction.normalize();
471
+
472
+ calculateRMF();
473
+
474
+ if ( isFirstSegment === true ) {
475
+
476
+ color2.copy( color1 );
477
+ size2 = size1;
478
+
479
+ matrix2.copy( matrix1 );
480
+
481
+ addCap( point2, matrix2, false, size2 );
482
+
483
+ // End cap is added immediately after start cap and updated in-place
484
+ endCapStartIndex = geometry.drawRange.count;
485
+ addCap( point1, matrix1, true, size1 );
486
+ endCapVertexCount = geometry.drawRange.count - endCapStartIndex;
487
+
488
+ }
489
+
490
+ stroke( point1, point2, matrix1, matrix2, size1, size2 );
491
+
492
+ updateEndCap( point1, matrix1, size1 );
170
493
 
171
494
  point2.copy( point1 );
172
495
  matrix2.copy( matrix1 );
173
496
 
497
+ color2.copy( color1 );
498
+ size2 = size1;
499
+
500
+ isFirstSegment = false;
501
+
174
502
  }
175
503
 
176
504
  function setSize( value ) {
177
505
 
178
- size = value;
506
+ size1 = value;
507
+
508
+ }
509
+
510
+ function setColor( value ) {
511
+
512
+ color1.copy( value );
179
513
 
180
514
  }
181
515
 
@@ -199,7 +533,7 @@ function TubePainter() {
199
533
  colors.addUpdateRange( start * 3, ( end - start ) * 3 );
200
534
  colors.needsUpdate = true;
201
535
 
202
- count = geometry.drawRange.count;
536
+ count = end;
203
537
 
204
538
  }
205
539
 
@@ -241,6 +575,15 @@ function TubePainter() {
241
575
  */
242
576
  setSize: setSize,
243
577
 
578
+ /**
579
+ * Sets the color of newly rendered tube segments.
580
+ *
581
+ * @method
582
+ * @name TubePainter#setColor
583
+ * @param {Color} color The color.
584
+ */
585
+ setColor: setColor,
586
+
244
587
  /**
245
588
  * Updates the internal geometry buffers so the new painted
246
589
  * segments are rendered.
@@ -14,7 +14,7 @@ const _cb = new Vector3(), _ab = new Vector3();
14
14
  * This class can be used to modify a geometry by simplifying it. A typical use
15
15
  * case for such a modifier is automatic LOD generation.
16
16
  *
17
- * The implementation is based on [Progressive Mesh type Polygon Reduction Algorithm]{@link https://web.archive.org/web/20230610044040/http://www.melax.com/polychop/}
17
+ * The implementation is based on [Progressive Mesh type Polygon Reduction Algorithm](https://web.archive.org/web/20230610044040/http://www.melax.com/polychop/)
18
18
  * by Stan Melax in 1998.
19
19
  *
20
20
  * ```js
@@ -387,6 +387,7 @@ ReflectorForSSRPass.ReflectorShader = {
387
387
  * @property {number} [clipBias=0] - The clip bias.
388
388
  * @property {Object} [shader] - Can be used to pass in a custom shader that defines how the reflective view is projected onto the reflector's geometry.
389
389
  * @property {boolean} [useDepthTexture=true] - Whether to store depth values in a texture or not.
390
+ * @property {Vector2} [resolution] - Resolution for the Reflector Pass.
390
391
  **/
391
392
 
392
393
  export { ReflectorForSSRPass };
@@ -8,7 +8,7 @@ import {
8
8
  } from 'three';
9
9
 
10
10
  /**
11
- * Represents a skydome for scene backgrounds. Based on [A Practical Analytic Model for Daylight]{@link https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight}
11
+ * Represents a skydome for scene backgrounds. Based on [A Practical Analytic Model for Daylight](https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight)
12
12
  * aka The Preetham Model, the de facto standard for analytical skydomes.
13
13
  *
14
14
  * Note that this class can only be used with {@link WebGLRenderer}.
@@ -9,7 +9,7 @@ import {
9
9
  import { Fn, float, vec3, acos, add, mul, clamp, cos, dot, exp, max, mix, modelViewProjection, normalize, positionWorld, pow, smoothstep, sub, varyingProperty, vec4, uniform, cameraPosition } from 'three/tsl';
10
10
 
11
11
  /**
12
- * Represents a skydome for scene backgrounds. Based on [A Practical Analytic Model for Daylight]{@link https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight}
12
+ * Represents a skydome for scene backgrounds. Based on [A Practical Analytic Model for Daylight](https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight)
13
13
  * aka The Preetham Model, the de facto standard for analytical skydomes.
14
14
  *
15
15
  * Note that this class can only be used with {@link WebGLRenderer}.
@@ -21,9 +21,9 @@ import {
21
21
  *
22
22
  * References:
23
23
  *
24
- * - [Flat mirror for three.js]{@link https://github.com/Slayvin}
25
- * - [An implementation of water shader based on the flat mirror]{@link https://home.adelphi.edu/~stemkoski/}
26
- * - [Water shader explanations in WebGL]{@link http://29a.ch/slides/2012/webglwater/ }
24
+ * - [Flat mirror for three.js](https://github.com/Slayvin)
25
+ * - [An implementation of water shader based on the flat mirror](https://home.adelphi.edu/~stemkoski/)
26
+ * - [Water shader explanations in WebGL](http://29a.ch/slides/2012/webglwater/ )
27
27
  *
28
28
  * @augments Mesh
29
29
  * @three_import import { Water } from 'three/addons/objects/Water.js';
@@ -15,9 +15,9 @@ import { Fn, add, cameraPosition, div, normalize, positionWorld, sub, time, text
15
15
  *
16
16
  * References:
17
17
  *
18
- * - [Flat mirror for three.js]{@link https://github.com/Slayvin}
19
- * - [An implementation of water shader based on the flat mirror]{@link https://home.adelphi.edu/~stemkoski/}
20
- * - [Water shader explanations in WebGL]{@link http://29a.ch/slides/2012/webglwater/ }
18
+ * - [Flat mirror for three.js](https://github.com/Slayvin)
19
+ * - [An implementation of water shader based on the flat mirror](https://home.adelphi.edu/~stemkoski/)
20
+ * - [Water shader explanations in WebGL](http://29a.ch/slides/2012/webglwater/ )
21
21
  *
22
22
  * @augments Mesh
23
23
  * @three_import import { WaterMesh } from 'three/addons/objects/WaterMesh.js';
@@ -51,7 +51,7 @@ class WaterMesh extends Mesh {
51
51
  * @type {number}
52
52
  * @default 0.5
53
53
  */
54
- this.resolution = options.resolution !== undefined ? options.resolution : 0.5;
54
+ this.resolutionScale = options.resolutionScale !== undefined ? options.resolutionScale : 0.5;
55
55
 
56
56
  // Uniforms
57
57
 
@@ -161,7 +161,7 @@ class WaterMesh extends Mesh {
161
161
 
162
162
  const mirrorSampler = reflector();
163
163
  mirrorSampler.uvNode = mirrorSampler.uvNode.add( distortion );
164
- mirrorSampler.resolution = this.resolution;
164
+ mirrorSampler.reflector.resolutionScale = this.resolutionScale;
165
165
 
166
166
  this.add( mirrorSampler.target );
167
167
 
@@ -183,7 +183,7 @@ class WaterMesh extends Mesh {
183
183
  * Constructor options of `WaterMesh`.
184
184
  *
185
185
  * @typedef {Object} WaterMesh~Options
186
- * @property {number} [resolution=0.5] - The resolution scale.
186
+ * @property {number} [resolutionScale=0.5] - The resolution scale.
187
187
  * @property {?Texture} [waterNormals=null] - The water's normal map.
188
188
  * @property {number} [alpha=1] - The alpha value.
189
189
  * @property {number} [size=1] - The size value.
@@ -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
 
@@ -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