super-three 0.141.0 → 0.147.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 (646) hide show
  1. package/README.md +9 -9
  2. package/build/three.cjs +2441 -1569
  3. package/build/three.js +2441 -1569
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +2847 -1576
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +50 -67
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +71 -150
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +149 -403
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -61
  14. package/examples/js/controls/FlyControls.js +29 -63
  15. package/examples/js/controls/OrbitControls.js +125 -103
  16. package/examples/js/controls/PointerLockControls.js +5 -22
  17. package/examples/js/controls/TrackballControls.js +33 -88
  18. package/examples/js/controls/TransformControls.js +101 -182
  19. package/examples/js/csm/CSM.js +4 -39
  20. package/examples/js/csm/CSMFrustum.js +3 -9
  21. package/examples/js/csm/CSMHelper.js +24 -4
  22. package/examples/js/csm/CSMShader.js +2 -6
  23. package/examples/js/curves/CurveExtras.js +27 -27
  24. package/examples/js/curves/NURBSCurve.js +4 -16
  25. package/examples/js/curves/NURBSSurface.js +3 -9
  26. package/examples/js/curves/NURBSUtils.js +8 -45
  27. package/examples/js/effects/AnaglyphEffect.js +6 -20
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +30 -54
  30. package/examples/js/effects/ParallaxBarrierEffect.js +2 -15
  31. package/examples/js/effects/PeppersGhostEffect.js +14 -41
  32. package/examples/js/effects/StereoEffect.js +2 -6
  33. package/examples/js/environments/RoomEnvironment.js +32 -8
  34. package/examples/js/exporters/ColladaExporter.js +52 -78
  35. package/examples/js/exporters/DRACOExporter.js +22 -34
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +168 -345
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +40 -52
  40. package/examples/js/exporters/PLYExporter.js +50 -57
  41. package/examples/js/exporters/STLExporter.js +5 -14
  42. package/examples/js/exporters/USDZExporter.js +119 -27
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +12 -7
  45. package/examples/js/geometries/DecalGeometry.js +53 -20
  46. package/examples/js/geometries/LightningStrike.js +54 -67
  47. package/examples/js/geometries/ParametricGeometries.js +8 -7
  48. package/examples/js/geometries/ParametricGeometry.js +23 -17
  49. package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
  50. package/examples/js/geometries/TeapotGeometry.js +54 -50
  51. package/examples/js/geometries/TextGeometry.js +6 -4
  52. package/examples/js/helpers/LightProbeHelper.js +1 -2
  53. package/examples/js/helpers/OctreeHelper.js +22 -20
  54. package/examples/js/helpers/PositionalAudioHelper.js +8 -6
  55. package/examples/js/helpers/RectAreaLightHelper.js +6 -7
  56. package/examples/js/helpers/VertexNormalsHelper.js +15 -13
  57. package/examples/js/helpers/VertexTangentsHelper.js +15 -9
  58. package/examples/js/helpers/ViewHelper.js +31 -16
  59. package/examples/js/interactive/HTMLMesh.js +25 -39
  60. package/examples/js/interactive/InteractiveGroup.js +9 -14
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +2 -8
  63. package/examples/js/libs/ktx-parse.umd.js +1 -0
  64. package/examples/js/libs/meshopt_decoder.js +98 -32
  65. package/examples/js/lights/LightProbeGenerator.js +32 -39
  66. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  67. package/examples/js/lines/LineGeometry.js +3 -5
  68. package/examples/js/lines/LineMaterial.js +4 -11
  69. package/examples/js/lines/LineSegments2.js +40 -89
  70. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  71. package/examples/js/lines/Wireframe.js +2 -7
  72. package/examples/js/lines/WireframeGeometry2.js +3 -1
  73. package/examples/js/loaders/3DMLoader.js +58 -155
  74. package/examples/js/loaders/3MFLoader.js +72 -106
  75. package/examples/js/loaders/AMFLoader.js +0 -25
  76. package/examples/js/loaders/BVHLoader.js +44 -43
  77. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  78. package/examples/js/loaders/ColladaLoader.js +229 -359
  79. package/examples/js/loaders/DDSLoader.js +24 -25
  80. package/examples/js/loaders/DRACOLoader.js +30 -90
  81. package/examples/js/loaders/EXRLoader.js +69 -177
  82. package/examples/js/loaders/FBXLoader.js +294 -441
  83. package/examples/js/loaders/FontLoader.js +9 -31
  84. package/examples/js/loaders/GCodeLoader.js +15 -16
  85. package/examples/js/loaders/GLTFLoader.js +458 -739
  86. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -17
  87. package/examples/js/loaders/KMZLoader.js +3 -7
  88. package/examples/js/loaders/KTXLoader.js +12 -30
  89. package/examples/js/loaders/LDrawLoader.js +309 -355
  90. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  91. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  92. package/examples/js/loaders/LWOLoader.js +59 -124
  93. package/examples/js/loaders/LogLuvLoader.js +27 -77
  94. package/examples/js/loaders/LottieLoader.js +4 -4
  95. package/examples/js/loaders/MD2Loader.js +26 -27
  96. package/examples/js/loaders/MDDLoader.js +6 -10
  97. package/examples/js/loaders/MMDLoader.js +180 -189
  98. package/examples/js/loaders/MTLLoader.js +18 -47
  99. package/examples/js/loaders/NRRDLoader.js +44 -84
  100. package/examples/js/loaders/OBJLoader.js +56 -77
  101. package/examples/js/loaders/PCDLoader.js +92 -42
  102. package/examples/js/loaders/PDBLoader.js +17 -13
  103. package/examples/js/loaders/PLYLoader.js +65 -51
  104. package/examples/js/loaders/PRWMLoader.js +11 -22
  105. package/examples/js/loaders/PVRLoader.js +7 -16
  106. package/examples/js/loaders/RGBELoader.js +36 -61
  107. package/examples/js/loaders/RGBMLoader.js +26 -87
  108. package/examples/js/loaders/STLLoader.js +20 -27
  109. package/examples/js/loaders/SVGLoader.js +365 -236
  110. package/examples/js/loaders/TDSLoader.js +81 -118
  111. package/examples/js/loaders/TGALoader.js +39 -41
  112. package/examples/js/loaders/TIFFLoader.js +30 -0
  113. package/examples/js/loaders/TTFLoader.js +0 -8
  114. package/examples/js/loaders/TiltLoader.js +14 -15
  115. package/examples/js/loaders/VOXLoader.js +8 -16
  116. package/examples/js/loaders/VRMLLoader.js +266 -354
  117. package/examples/js/loaders/VTKLoader.js +102 -119
  118. package/examples/js/loaders/XYZLoader.js +2 -4
  119. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  120. package/examples/js/loaders/lwo/LWO2Parser.js +39 -89
  121. package/examples/js/loaders/lwo/LWO3Parser.js +38 -79
  122. package/examples/js/materials/MeshGouraudMaterial.js +387 -0
  123. package/examples/js/math/Capsule.js +0 -17
  124. package/examples/js/math/ColorConverter.js +3 -53
  125. package/examples/js/math/ConvexHull.js +185 -141
  126. package/examples/js/math/ImprovedNoise.js +1 -1
  127. package/examples/js/math/Lut.js +8 -15
  128. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  129. package/examples/js/math/OBB.js +90 -49
  130. package/examples/js/math/Octree.js +2 -57
  131. package/examples/js/math/SimplexNoise.js +74 -88
  132. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  133. package/examples/js/misc/GPUComputationRenderer.js +47 -14
  134. package/examples/js/misc/Gyroscope.js +5 -9
  135. package/examples/js/misc/MD2Character.js +14 -23
  136. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  137. package/examples/js/misc/MorphAnimMesh.js +0 -6
  138. package/examples/js/misc/MorphBlendMesh.js +3 -30
  139. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  140. package/examples/js/misc/RollerCoaster.js +17 -24
  141. package/examples/js/misc/TubePainter.js +18 -12
  142. package/examples/js/misc/Volume.js +173 -194
  143. package/examples/js/misc/VolumeSlice.js +91 -99
  144. package/examples/js/modifiers/CurveModifier.js +19 -21
  145. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  146. package/examples/js/modifiers/SimplifyModifier.js +57 -60
  147. package/examples/js/modifiers/TessellateModifier.js +2 -9
  148. package/examples/js/objects/GroundProjectedEnv.js +181 -0
  149. package/examples/js/objects/Lensflare.js +47 -38
  150. package/examples/js/objects/LightningStorm.js +10 -13
  151. package/examples/js/objects/MarchingCubes.js +80 -59
  152. package/examples/js/objects/Reflector.js +31 -22
  153. package/examples/js/objects/ReflectorForSSRPass.js +20 -25
  154. package/examples/js/objects/Refractor.js +61 -33
  155. package/examples/js/objects/ShadowMesh.js +6 -3
  156. package/examples/js/objects/Sky.js +2 -7
  157. package/examples/js/objects/Water.js +23 -18
  158. package/examples/js/objects/Water2.js +20 -19
  159. package/examples/js/physics/AmmoPhysics.js +23 -20
  160. package/examples/js/physics/OimoPhysics.js +19 -17
  161. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  162. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  163. package/examples/js/postprocessing/BloomPass.js +38 -17
  164. package/examples/js/postprocessing/BokehPass.js +29 -12
  165. package/examples/js/postprocessing/ClearPass.js +1 -6
  166. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  167. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  168. package/examples/js/postprocessing/EffectComposer.js +25 -32
  169. package/examples/js/postprocessing/FilmPass.js +7 -5
  170. package/examples/js/postprocessing/GlitchPass.js +10 -11
  171. package/examples/js/postprocessing/HalftonePass.js +9 -9
  172. package/examples/js/postprocessing/LUTPass.js +2 -15
  173. package/examples/js/postprocessing/MaskPass.js +20 -17
  174. package/examples/js/postprocessing/OutlinePass.js +49 -38
  175. package/examples/js/postprocessing/Pass.js +11 -14
  176. package/examples/js/postprocessing/RenderPass.js +3 -7
  177. package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
  178. package/examples/js/postprocessing/SAOPass.js +40 -32
  179. package/examples/js/postprocessing/SMAAPass.js +34 -17
  180. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  181. package/examples/js/postprocessing/SSAOPass.js +56 -42
  182. package/examples/js/postprocessing/SSRPass.js +78 -61
  183. package/examples/js/postprocessing/SavePass.js +14 -6
  184. package/examples/js/postprocessing/ShaderPass.js +9 -8
  185. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  186. package/examples/js/postprocessing/TexturePass.js +7 -4
  187. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  188. package/examples/js/renderers/CSS2DRenderer.js +4 -23
  189. package/examples/js/renderers/CSS3DRenderer.js +5 -26
  190. package/examples/js/renderers/Projector.js +31 -108
  191. package/examples/js/renderers/SVGRenderer.js +4 -50
  192. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  193. package/examples/js/shaders/AfterimageShader.js +3 -6
  194. package/examples/js/shaders/BasicShader.js +3 -6
  195. package/examples/js/shaders/BleachBypassShader.js +3 -6
  196. package/examples/js/shaders/BlendShader.js +3 -6
  197. package/examples/js/shaders/BokehShader.js +3 -6
  198. package/examples/js/shaders/BokehShader2.js +4 -13
  199. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  200. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  201. package/examples/js/shaders/ColorifyShader.js +2 -6
  202. package/examples/js/shaders/ConvolutionShader.js +5 -10
  203. package/examples/js/shaders/CopyShader.js +3 -6
  204. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  205. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  206. package/examples/js/shaders/DigitalGlitch.js +3 -6
  207. package/examples/js/shaders/DotScreenShader.js +2 -6
  208. package/examples/js/shaders/FXAAShader.js +1 -3
  209. package/examples/js/shaders/FilmShader.js +3 -6
  210. package/examples/js/shaders/FocusShader.js +3 -6
  211. package/examples/js/shaders/FreiChenShader.js +2 -6
  212. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  213. package/examples/js/shaders/GodRaysShader.js +11 -24
  214. package/examples/js/shaders/HalftoneShader.js +3 -6
  215. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  216. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  217. package/examples/js/shaders/HueSaturationShader.js +3 -6
  218. package/examples/js/shaders/KaleidoShader.js +3 -6
  219. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  220. package/examples/js/shaders/LuminosityShader.js +4 -7
  221. package/examples/js/shaders/MMDToonShader.js +2 -4
  222. package/examples/js/shaders/MirrorShader.js +3 -6
  223. package/examples/js/shaders/NormalMapShader.js +2 -6
  224. package/examples/js/shaders/RGBShiftShader.js +3 -6
  225. package/examples/js/shaders/SAOShader.js +2 -6
  226. package/examples/js/shaders/SMAAShader.js +6 -18
  227. package/examples/js/shaders/SSAOShader.js +2 -6
  228. package/examples/js/shaders/SSRShader.js +6 -18
  229. package/examples/js/shaders/SepiaShader.js +3 -6
  230. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  231. package/examples/js/shaders/TechnicolorShader.js +3 -6
  232. package/examples/js/shaders/ToneMapShader.js +4 -7
  233. package/examples/js/shaders/ToonShader.js +8 -24
  234. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  235. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  236. package/examples/js/shaders/VelocityShader.js +126 -0
  237. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  238. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  239. package/examples/js/shaders/VignetteShader.js +3 -6
  240. package/examples/js/shaders/VolumeShader.js +2 -6
  241. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  242. package/examples/js/textures/FlakesTexture.js +0 -1
  243. package/examples/js/utils/BufferGeometryUtils.js +237 -171
  244. package/examples/js/utils/CameraUtils.js +5 -20
  245. package/examples/js/utils/GPUStatsPanel.js +3 -12
  246. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  247. package/examples/js/utils/GeometryUtils.js +15 -36
  248. package/examples/js/utils/LDrawUtils.js +8 -11
  249. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  250. package/examples/js/utils/SceneUtils.js +109 -14
  251. package/examples/js/utils/ShadowMapViewer.js +17 -14
  252. package/examples/js/utils/SkeletonUtils.js +13 -27
  253. package/examples/js/utils/UVsDebug.js +20 -12
  254. package/examples/js/utils/WorkerPool.js +1 -11
  255. package/examples/jsm/animation/CCDIKSolver.js +27 -3
  256. package/examples/jsm/animation/MMDPhysics.js +28 -22
  257. package/examples/jsm/capabilities/WebGPU.js +3 -1
  258. package/examples/jsm/controls/ArcballControls.js +17 -2
  259. package/examples/jsm/controls/FirstPersonControls.js +20 -27
  260. package/examples/jsm/controls/FlyControls.js +16 -24
  261. package/examples/jsm/controls/OrbitControls.js +44 -9
  262. package/examples/jsm/controls/PointerLockControls.js +0 -7
  263. package/examples/jsm/controls/TrackballControls.js +14 -5
  264. package/examples/jsm/controls/TransformControls.js +18 -16
  265. package/examples/jsm/csm/CSM.js +1 -0
  266. package/examples/jsm/csm/CSMHelper.js +30 -0
  267. package/examples/jsm/effects/AnaglyphEffect.js +2 -2
  268. package/examples/jsm/effects/OutlineEffect.js +4 -25
  269. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
  270. package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
  271. package/examples/jsm/effects/StereoEffect.js +2 -2
  272. package/examples/jsm/environments/RoomEnvironment.js +23 -0
  273. package/examples/jsm/exporters/ColladaExporter.js +4 -13
  274. package/examples/jsm/exporters/DRACOExporter.js +0 -13
  275. package/examples/jsm/exporters/GLTFExporter.js +29 -110
  276. package/examples/jsm/exporters/KTX2Exporter.js +29 -29
  277. package/examples/jsm/exporters/OBJExporter.js +0 -18
  278. package/examples/jsm/exporters/PLYExporter.js +14 -22
  279. package/examples/jsm/exporters/STLExporter.js +1 -9
  280. package/examples/jsm/exporters/USDZExporter.js +107 -4
  281. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  282. package/examples/jsm/geometries/ParametricGeometry.js +0 -6
  283. package/examples/jsm/helpers/OctreeHelper.js +22 -8
  284. package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
  285. package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
  286. package/examples/jsm/helpers/ViewHelper.js +24 -0
  287. package/examples/jsm/interactive/HTMLMesh.js +14 -15
  288. package/examples/jsm/interactive/InteractiveGroup.js +4 -2
  289. package/examples/jsm/interactive/SelectionHelper.js +5 -3
  290. package/examples/jsm/libs/flow.module.js +610 -160
  291. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  292. package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
  293. package/examples/jsm/libs/utif.module.js +1579 -0
  294. package/examples/jsm/libs/zstddec.module.js +1 -0
  295. package/examples/jsm/lines/LineSegments2.js +4 -0
  296. package/examples/jsm/loaders/3DMLoader.js +1 -2
  297. package/examples/jsm/loaders/ColladaLoader.js +29 -0
  298. package/examples/jsm/loaders/DRACOLoader.js +2 -28
  299. package/examples/jsm/loaders/EXRLoader.js +3 -13
  300. package/examples/jsm/loaders/FBXLoader.js +26 -3
  301. package/examples/jsm/loaders/FontLoader.js +3 -16
  302. package/examples/jsm/loaders/GLTFLoader.js +321 -464
  303. package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
  304. package/examples/jsm/loaders/KTX2Loader.js +254 -53
  305. package/examples/jsm/loaders/LDrawLoader.js +149 -87
  306. package/examples/jsm/loaders/LottieLoader.js +4 -2
  307. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  308. package/examples/jsm/loaders/OBJLoader.js +6 -14
  309. package/examples/jsm/loaders/PCDLoader.js +60 -14
  310. package/examples/jsm/loaders/PLYLoader.js +71 -19
  311. package/examples/jsm/loaders/RGBELoader.js +1 -1
  312. package/examples/jsm/loaders/SVGLoader.js +231 -17
  313. package/examples/jsm/loaders/TIFFLoader.js +36 -0
  314. package/examples/jsm/loaders/USDZLoader.js +633 -0
  315. package/examples/jsm/loaders/VRMLLoader.js +36 -26
  316. package/examples/jsm/loaders/VTKLoader.js +1 -1
  317. package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
  318. package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
  319. package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
  320. package/examples/jsm/math/ColorConverter.js +1 -49
  321. package/examples/jsm/math/ConvexHull.js +4 -4
  322. package/examples/jsm/math/Octree.js +1 -1
  323. package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
  324. package/examples/jsm/misc/Volume.js +169 -171
  325. package/examples/jsm/misc/VolumeSlice.js +78 -80
  326. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  327. package/examples/jsm/node-editor/NodeEditor.js +91 -12
  328. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
  329. package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
  330. package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
  331. package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
  332. package/examples/jsm/node-editor/core/BaseNode.js +10 -3
  333. package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
  334. package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
  335. package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
  336. package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
  337. package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
  338. package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
  339. package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
  340. package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
  341. package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
  342. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +7 -10
  343. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
  344. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +7 -10
  345. package/examples/jsm/node-editor/math/AngleEditor.js +4 -4
  346. package/examples/jsm/node-editor/math/DotEditor.js +1 -1
  347. package/examples/jsm/node-editor/math/InvertEditor.js +3 -3
  348. package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
  349. package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
  350. package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
  351. package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
  352. package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
  353. package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
  354. package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
  355. package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
  356. package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
  357. package/examples/jsm/node-editor/utils/PreviewEditor.js +7 -3
  358. package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
  359. package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
  360. package/examples/jsm/nodes/Nodes.js +70 -13
  361. package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
  362. package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
  363. package/examples/jsm/nodes/accessors/NormalNode.js +8 -8
  364. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  365. package/examples/jsm/nodes/accessors/PositionNode.js +11 -5
  366. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  367. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
  368. package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
  369. package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
  370. package/examples/jsm/nodes/core/AttributeNode.js +32 -9
  371. package/examples/jsm/nodes/core/CodeNode.js +3 -3
  372. package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
  373. package/examples/jsm/nodes/core/FunctionNode.js +2 -2
  374. package/examples/jsm/nodes/core/Node.js +15 -13
  375. package/examples/jsm/nodes/core/NodeBuilder.js +67 -18
  376. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  377. package/examples/jsm/nodes/core/NodeUtils.js +23 -1
  378. package/examples/jsm/nodes/core/NodeVarying.js +17 -0
  379. package/examples/jsm/nodes/core/VaryingNode.js +56 -0
  380. package/examples/jsm/nodes/core/constants.js +13 -13
  381. package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
  382. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +84 -0
  383. package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
  384. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  385. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  386. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
  387. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
  388. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
  389. package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
  390. package/examples/jsm/nodes/gpgpu/ComputeNode.js +3 -1
  391. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  392. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
  393. package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
  394. package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
  395. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +33 -0
  396. package/examples/jsm/nodes/materials/Materials.js +21 -31
  397. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
  398. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
  399. package/examples/jsm/nodes/materials/NodeMaterial.js +11 -3
  400. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
  401. package/examples/jsm/nodes/materialx/DISCLAIMER.md +199 -0
  402. package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
  403. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +56 -0
  404. package/examples/jsm/nodes/materialx/lib/mx_noise.js +617 -0
  405. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  406. package/examples/jsm/nodes/math/MathNode.js +7 -17
  407. package/examples/jsm/nodes/math/OperatorNode.js +16 -3
  408. package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
  409. package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
  410. package/examples/jsm/nodes/shadernode/ShaderNode.js +40 -25
  411. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +95 -68
  412. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +49 -6
  413. package/examples/jsm/nodes/utils/ConvertNode.js +18 -12
  414. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  415. package/examples/jsm/nodes/utils/JoinNode.js +15 -9
  416. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  417. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +3 -2
  418. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  419. package/examples/jsm/nodes/utils/RemapNode.js +34 -0
  420. package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
  421. package/examples/jsm/nodes/utils/SplitNode.js +21 -5
  422. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  423. package/examples/jsm/nodes/utils/TimerNode.js +23 -3
  424. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  425. package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
  426. package/examples/jsm/objects/Reflector.js +12 -5
  427. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
  428. package/examples/jsm/objects/Refractor.js +12 -6
  429. package/examples/jsm/objects/ShadowMesh.js +8 -2
  430. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  431. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  432. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  433. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  434. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  435. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  436. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  437. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  438. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  439. package/examples/jsm/postprocessing/OutlinePass.js +25 -3
  440. package/examples/jsm/postprocessing/Pass.js +2 -0
  441. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  442. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  443. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  444. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  445. package/examples/jsm/postprocessing/SavePass.js +17 -1
  446. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  447. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  448. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  449. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  450. package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
  451. package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
  452. package/examples/jsm/renderers/Projector.js +2 -24
  453. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
  454. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +363 -231
  455. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
  456. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  457. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  458. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +68 -3
  459. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
  460. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
  461. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  462. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
  463. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
  464. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
  465. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +113 -93
  466. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
  467. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
  468. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
  469. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +63 -36
  470. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  471. package/examples/jsm/shaders/LuminosityShader.js +1 -1
  472. package/examples/jsm/shaders/MMDToonShader.js +2 -4
  473. package/examples/jsm/shaders/ToneMapShader.js +1 -1
  474. package/examples/jsm/shaders/VelocityShader.js +128 -0
  475. package/examples/jsm/utils/BufferGeometryUtils.js +176 -43
  476. package/examples/jsm/utils/GeometryUtils.js +17 -25
  477. package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
  478. package/examples/jsm/utils/SceneUtils.js +117 -12
  479. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  480. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
  481. package/examples/jsm/webxr/VRButton.js +1 -7
  482. package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
  483. package/package.json +22 -18
  484. package/src/Three.Legacy.js +262 -36
  485. package/src/Three.js +4 -2
  486. package/src/animation/AnimationAction.js +6 -5
  487. package/src/animation/AnimationClip.js +1 -1
  488. package/src/animation/AnimationMixer.js +1 -1
  489. package/src/animation/AnimationUtils.js +204 -199
  490. package/src/animation/KeyframeTrack.js +1 -1
  491. package/src/animation/PropertyBinding.js +31 -5
  492. package/src/audio/AudioContext.js +5 -5
  493. package/src/cameras/CubeCamera.js +14 -21
  494. package/src/constants.js +2 -4
  495. package/src/core/BufferAttribute.js +81 -111
  496. package/src/core/BufferGeometry.js +3 -41
  497. package/src/core/InstancedBufferAttribute.js +0 -10
  498. package/src/core/InstancedBufferGeometry.js +1 -7
  499. package/src/core/InterleavedBuffer.js +1 -1
  500. package/src/core/InterleavedBufferAttribute.js +57 -8
  501. package/src/core/Object3D.js +22 -5
  502. package/src/core/Uniform.js +0 -7
  503. package/src/core/UniformsGroup.js +92 -0
  504. package/src/extras/DataUtils.js +104 -88
  505. package/src/extras/Earcut.js +67 -67
  506. package/src/extras/core/Path.js +1 -0
  507. package/src/extras/core/ShapePath.js +1 -4
  508. package/src/extras/curves/CatmullRomCurve3.js +4 -2
  509. package/src/geometries/BoxGeometry.js +1 -1
  510. package/src/geometries/CapsuleGeometry.js +1 -1
  511. package/src/geometries/CircleGeometry.js +1 -1
  512. package/src/geometries/ConeGeometry.js +1 -1
  513. package/src/geometries/CylinderGeometry.js +2 -1
  514. package/src/geometries/DodecahedronGeometry.js +1 -1
  515. package/src/geometries/EdgesGeometry.js +5 -4
  516. package/src/geometries/ExtrudeGeometry.js +2 -11
  517. package/src/geometries/IcosahedronGeometry.js +1 -1
  518. package/src/geometries/LatheGeometry.js +2 -2
  519. package/src/geometries/OctahedronGeometry.js +1 -1
  520. package/src/geometries/PlaneGeometry.js +2 -1
  521. package/src/geometries/PolyhedronGeometry.js +2 -2
  522. package/src/geometries/RingGeometry.js +1 -1
  523. package/src/geometries/ShapeGeometry.js +3 -2
  524. package/src/geometries/SphereGeometry.js +2 -1
  525. package/src/geometries/TetrahedronGeometry.js +1 -1
  526. package/src/geometries/TorusGeometry.js +2 -1
  527. package/src/geometries/TorusKnotGeometry.js +2 -1
  528. package/src/geometries/TubeGeometry.js +2 -1
  529. package/src/geometries/WireframeGeometry.js +1 -0
  530. package/src/helpers/ArrowHelper.js +9 -0
  531. package/src/helpers/Box3Helper.js +7 -0
  532. package/src/helpers/BoxHelper.js +7 -1
  533. package/src/helpers/CameraHelper.js +97 -38
  534. package/src/helpers/DirectionalLightHelper.js +6 -1
  535. package/src/helpers/GridHelper.js +7 -0
  536. package/src/helpers/HemisphereLightHelper.js +5 -1
  537. package/src/helpers/PlaneHelper.js +15 -9
  538. package/src/helpers/PointLightHelper.js +2 -1
  539. package/src/helpers/PolarGridHelper.js +25 -14
  540. package/src/helpers/SkeletonHelper.js +7 -0
  541. package/src/helpers/SpotLightHelper.js +5 -2
  542. package/src/lights/LightShadow.js +1 -2
  543. package/src/lights/PointLight.js +2 -2
  544. package/src/lights/SpotLight.js +4 -2
  545. package/src/loaders/FileLoader.js +16 -2
  546. package/src/loaders/LoadingManager.js +1 -1
  547. package/src/loaders/MaterialLoader.js +49 -7
  548. package/src/loaders/ObjectLoader.js +9 -42
  549. package/src/materials/Material.js +2 -34
  550. package/src/materials/Materials.js +0 -27
  551. package/src/materials/MeshLambertMaterial.js +28 -1
  552. package/src/materials/MeshPhysicalMaterial.js +1 -1
  553. package/src/materials/ShaderMaterial.js +3 -7
  554. package/src/math/Color.js +8 -18
  555. package/src/math/MathUtils.js +1 -7
  556. package/src/math/Matrix3.js +54 -25
  557. package/src/math/Matrix4.js +3 -27
  558. package/src/math/Quaternion.js +1 -21
  559. package/src/math/Ray.js +2 -5
  560. package/src/math/Sphere.js +36 -21
  561. package/src/math/Vector2.js +4 -24
  562. package/src/math/Vector3.js +7 -46
  563. package/src/math/Vector4.js +4 -24
  564. package/src/objects/InstancedMesh.js +7 -0
  565. package/src/objects/LOD.js +25 -6
  566. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  567. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  568. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  569. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  570. package/src/renderers/WebGLRenderTarget.js +1 -1
  571. package/src/renderers/WebGLRenderer.js +119 -69
  572. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
  573. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
  574. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
  575. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
  576. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  577. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
  578. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
  579. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
  580. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
  581. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -13
  582. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
  583. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +28 -0
  584. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  585. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
  586. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
  587. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  588. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
  589. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
  590. package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
  591. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  592. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
  593. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
  594. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
  595. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  596. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
  597. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
  598. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
  599. package/src/renderers/shaders/ShaderChunk.js +7 -2
  600. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  601. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  602. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  603. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
  604. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
  605. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  606. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
  607. package/src/renderers/shaders/ShaderLib.js +50 -36
  608. package/src/renderers/shaders/UniformsLib.js +13 -12
  609. package/src/renderers/shaders/UniformsUtils.js +29 -0
  610. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  611. package/src/renderers/webgl/WebGLBackground.js +17 -9
  612. package/src/renderers/webgl/WebGLLights.js +37 -17
  613. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  614. package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
  615. package/src/renderers/webgl/WebGLProgram.js +6 -11
  616. package/src/renderers/webgl/WebGLPrograms.js +30 -26
  617. package/src/renderers/webgl/WebGLRenderLists.js +5 -4
  618. package/src/renderers/webgl/WebGLRenderStates.js +5 -4
  619. package/src/renderers/webgl/WebGLShaderCache.js +9 -6
  620. package/src/renderers/webgl/WebGLShadowMap.js +13 -16
  621. package/src/renderers/webgl/WebGLState.js +125 -41
  622. package/src/renderers/webgl/WebGLTextures.js +94 -39
  623. package/src/renderers/webgl/WebGLUniforms.js +156 -28
  624. package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
  625. package/src/renderers/webgl/WebGLUtils.js +3 -1
  626. package/src/renderers/webvr/WebVRManager.js +42 -9
  627. package/src/renderers/webvr/WebVRUtils.js +1 -1
  628. package/src/renderers/webxr/WebXRController.js +91 -50
  629. package/src/renderers/webxr/WebXRManager.js +127 -34
  630. package/src/scenes/Scene.js +24 -3
  631. package/src/textures/CompressedArrayTexture.js +18 -0
  632. package/src/textures/Source.js +1 -1
  633. package/src/textures/Texture.js +2 -1
  634. package/src/utils.js +1 -1
  635. package/examples/js/controls/experimental/CameraControls.js +0 -1048
  636. package/examples/js/libs/lottie_canvas.js +0 -12751
  637. package/examples/js/loaders/KTX2Loader.js +0 -558
  638. package/examples/js/shaders/PixelShader.js +0 -51
  639. package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
  640. package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
  641. package/examples/jsm/nodes/core/NodeVary.js +0 -14
  642. package/examples/jsm/nodes/core/VaryNode.js +0 -54
  643. package/examples/jsm/package.json +0 -3
  644. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
  645. package/examples/jsm/shaders/PixelShader.js +0 -44
  646. package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
@@ -16,7 +16,9 @@
16
16
  const useDepthTexture = options.useDepthTexture === true;
17
17
  const yAxis = new THREE.Vector3( 0, 1, 0 );
18
18
  const vecTemp0 = new THREE.Vector3();
19
- const vecTemp1 = new THREE.Vector3(); //
19
+ const vecTemp1 = new THREE.Vector3();
20
+
21
+ //
20
22
 
21
23
  scope.needsUpdate = false;
22
24
  scope.maxDistance = ReflectorForSSRPass.ReflectorShader.uniforms.maxDistance.value;
@@ -30,7 +32,6 @@
30
32
  return scope._distanceAttenuation;
31
33
 
32
34
  },
33
-
34
35
  set( val ) {
35
36
 
36
37
  if ( scope._distanceAttenuation === val ) return;
@@ -39,7 +40,6 @@
39
40
  scope.material.needsUpdate = true;
40
41
 
41
42
  }
42
-
43
43
  } );
44
44
  scope._fresnel = ReflectorForSSRPass.ReflectorShader.defines.FRESNEL;
45
45
  Object.defineProperty( scope, 'fresnel', {
@@ -48,7 +48,6 @@
48
48
  return scope._fresnel;
49
49
 
50
50
  },
51
-
52
51
  set( val ) {
53
52
 
54
53
  if ( scope._fresnel === val ) return;
@@ -57,7 +56,6 @@
57
56
  scope.material.needsUpdate = true;
58
57
 
59
58
  }
60
-
61
59
  } );
62
60
  const normal = new THREE.Vector3();
63
61
  const reflectorWorldPosition = new THREE.Vector3();
@@ -69,7 +67,6 @@
69
67
  const textureMatrix = new THREE.Matrix4();
70
68
  const virtualCamera = new THREE.PerspectiveCamera();
71
69
  let depthTexture;
72
-
73
70
  if ( useDepthTexture ) {
74
71
 
75
72
  depthTexture = new THREE.DepthTexture();
@@ -80,7 +77,8 @@
80
77
  }
81
78
 
82
79
  const parameters = {
83
- depthTexture: useDepthTexture ? depthTexture : null
80
+ depthTexture: useDepthTexture ? depthTexture : null,
81
+ type: THREE.HalfFloatType
84
82
  };
85
83
  const renderTarget = new THREE.WebGLRenderTarget( textureWidth, textureHeight, parameters );
86
84
  const material = new THREE.ShaderMaterial( {
@@ -95,7 +93,6 @@
95
93
  material.uniforms[ 'tDiffuse' ].value = renderTarget.texture;
96
94
  material.uniforms[ 'color' ].value = scope.color;
97
95
  material.uniforms[ 'textureMatrix' ].value = textureMatrix;
98
-
99
96
  if ( useDepthTexture ) {
100
97
 
101
98
  material.uniforms[ 'tDepth' ].value = renderTarget.depthTexture;
@@ -105,7 +102,6 @@
105
102
  this.material = material;
106
103
  const globalPlane = new THREE.Plane( new THREE.Vector3( 0, 1, 0 ), clipBias );
107
104
  const globalPlanes = [ globalPlane ];
108
-
109
105
  this.doRender = function ( renderer, scene, camera ) {
110
106
 
111
107
  material.uniforms[ 'maxDistance' ].value = scope.maxDistance;
@@ -120,7 +116,9 @@
120
116
  rotationMatrix.extractRotation( scope.matrixWorld );
121
117
  normal.set( 0, 0, 1 );
122
118
  normal.applyMatrix4( rotationMatrix );
123
- view.subVectors( reflectorWorldPosition, cameraWorldPosition ); // Avoid rendering when reflector is facing away
119
+ view.subVectors( reflectorWorldPosition, cameraWorldPosition );
120
+
121
+ // Avoid rendering when reflector is facing away
124
122
 
125
123
  if ( view.dot( normal ) > 0 ) return;
126
124
  view.reflect( normal ).negate();
@@ -146,23 +144,22 @@
146
144
  material.uniforms[ 'virtualCameraMatrixWorld' ].value = virtualCamera.matrixWorld;
147
145
  material.uniforms[ 'virtualCameraProjectionMatrix' ].value = camera.projectionMatrix;
148
146
  material.uniforms[ 'virtualCameraProjectionMatrixInverse' ].value = camera.projectionMatrixInverse;
149
- material.uniforms[ 'resolution' ].value = scope.resolution; // Update the texture matrix
147
+ material.uniforms[ 'resolution' ].value = scope.resolution;
150
148
 
149
+ // Update the texture matrix
151
150
  textureMatrix.set( 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0 );
152
151
  textureMatrix.multiply( virtualCamera.projectionMatrix );
153
152
  textureMatrix.multiply( virtualCamera.matrixWorldInverse );
154
- textureMatrix.multiply( scope.matrixWorld ); // Render
153
+ textureMatrix.multiply( scope.matrixWorld );
155
154
 
156
- renderTarget.texture.encoding = renderer.outputEncoding; // scope.visible = false;
155
+ // scope.visible = false;
157
156
 
158
157
  const currentRenderTarget = renderer.getRenderTarget();
159
158
  const currentXrEnabled = renderer.xr.enabled;
160
159
  const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
161
160
  const currentClippingPlanes = renderer.clippingPlanes;
162
161
  renderer.xr.enabled = false; // Avoid camera modification
163
-
164
162
  renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
165
-
166
163
  renderer.clippingPlanes = globalPlanes;
167
164
  renderer.setRenderTarget( renderTarget );
168
165
  renderer.state.buffers.depth.setMask( true ); // make sure the depth buffer is writable so it can be properly cleared, see #18897
@@ -172,15 +169,18 @@
172
169
  renderer.xr.enabled = currentXrEnabled;
173
170
  renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
174
171
  renderer.clippingPlanes = currentClippingPlanes;
175
- renderer.setRenderTarget( currentRenderTarget ); // Restore viewport
172
+ renderer.setRenderTarget( currentRenderTarget );
176
173
 
177
- const viewport = camera.viewport;
174
+ // Restore viewport
178
175
 
176
+ const viewport = camera.viewport;
179
177
  if ( viewport !== undefined ) {
180
178
 
181
179
  renderer.state.viewport( viewport );
182
180
 
183
- } // scope.visible = true;
181
+ }
182
+
183
+ // scope.visible = true;
184
184
 
185
185
  };
186
186
 
@@ -193,7 +193,6 @@
193
193
  }
194
194
 
195
195
  }
196
-
197
196
  ReflectorForSSRPass.ReflectorShader = {
198
197
  defines: {
199
198
  DISTANCE_ATTENUATION: true,
@@ -240,9 +239,7 @@
240
239
  value: new THREE.Vector2()
241
240
  }
242
241
  },
243
- vertexShader:
244
- /* glsl */
245
- `
242
+ vertexShader: /* glsl */`
246
243
  uniform mat4 textureMatrix;
247
244
  varying vec4 vUv;
248
245
 
@@ -253,9 +250,7 @@
253
250
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
254
251
 
255
252
  }`,
256
- fragmentShader:
257
- /* glsl */
258
- `
253
+ fragmentShader: /* glsl */`
259
254
  uniform vec3 color;
260
255
  uniform sampler2D tDiffuse;
261
256
  uniform sampler2D tDepth;
@@ -14,29 +14,40 @@
14
14
  const textureHeight = options.textureHeight || 512;
15
15
  const clipBias = options.clipBias || 0;
16
16
  const shader = options.shader || Refractor.RefractorShader;
17
- const multisample = options.multisample !== undefined ? options.multisample : 4; //
17
+ const multisample = options.multisample !== undefined ? options.multisample : 4;
18
+
19
+ //
18
20
 
19
21
  const virtualCamera = this.camera;
20
22
  virtualCamera.matrixAutoUpdate = false;
21
- virtualCamera.userData.refractor = true; //
23
+ virtualCamera.userData.refractor = true;
24
+
25
+ //
22
26
 
23
27
  const refractorPlane = new THREE.Plane();
24
- const textureMatrix = new THREE.Matrix4(); // render target
28
+ const textureMatrix = new THREE.Matrix4();
29
+
30
+ // render target
25
31
 
26
32
  const renderTarget = new THREE.WebGLRenderTarget( textureWidth, textureHeight, {
27
- samples: multisample
28
- } ); // material
33
+ samples: multisample,
34
+ type: THREE.HalfFloatType
35
+ } );
36
+
37
+ // material
29
38
 
30
39
  this.material = new THREE.ShaderMaterial( {
31
40
  uniforms: THREE.UniformsUtils.clone( shader.uniforms ),
32
41
  vertexShader: shader.vertexShader,
33
42
  fragmentShader: shader.fragmentShader,
34
43
  transparent: true // ensures, refractors are drawn from farthest to closest
35
-
36
44
  } );
45
+
37
46
  this.material.uniforms[ 'color' ].value = color;
38
47
  this.material.uniforms[ 'tDiffuse' ].value = renderTarget.texture;
39
- this.material.uniforms[ 'textureMatrix' ].value = textureMatrix; // functions
48
+ this.material.uniforms[ 'textureMatrix' ].value = textureMatrix;
49
+
50
+ // functions
40
51
 
41
52
  const visible = function () {
42
53
 
@@ -58,7 +69,6 @@
58
69
  };
59
70
 
60
71
  }();
61
-
62
72
  const updateRefractorPlane = function () {
63
73
 
64
74
  const normal = new THREE.Vector3();
@@ -68,7 +78,9 @@
68
78
  return function updateRefractorPlane() {
69
79
 
70
80
  scope.matrixWorld.decompose( position, quaternion, scale );
71
- normal.set( 0, 0, 1 ).applyQuaternion( quaternion ).normalize(); // flip the normal because we want to cull everything above the plane
81
+ normal.set( 0, 0, 1 ).applyQuaternion( quaternion ).normalize();
82
+
83
+ // flip the normal because we want to cull everything above the plane
72
84
 
73
85
  normal.negate();
74
86
  refractorPlane.setFromNormalAndCoplanarPoint( normal, position );
@@ -76,7 +88,6 @@
76
88
  };
77
89
 
78
90
  }();
79
-
80
91
  const updateVirtualCamera = function () {
81
92
 
82
93
  const clipPlane = new THREE.Plane();
@@ -88,22 +99,29 @@
88
99
  virtualCamera.matrixWorldInverse.copy( virtualCamera.matrixWorld ).invert();
89
100
  virtualCamera.projectionMatrix.copy( camera.projectionMatrix );
90
101
  virtualCamera.far = camera.far; // used in WebGLBackground
102
+
91
103
  // The following code creates an oblique view frustum for clipping.
92
104
  // see: Lengyel, Eric. “Oblique View Frustum Depth Projection and Clipping”.
93
105
  // Journal of Game Development, Vol. 1, No. 2 (2005), Charles River Media, pp. 5–16
94
106
 
95
107
  clipPlane.copy( refractorPlane );
96
108
  clipPlane.applyMatrix4( virtualCamera.matrixWorldInverse );
97
- clipVector.set( clipPlane.normal.x, clipPlane.normal.y, clipPlane.normal.z, clipPlane.constant ); // calculate the clip-space corner point opposite the clipping plane and
109
+ clipVector.set( clipPlane.normal.x, clipPlane.normal.y, clipPlane.normal.z, clipPlane.constant );
110
+
111
+ // calculate the clip-space corner point opposite the clipping plane and
98
112
  // transform it into camera space by multiplying it by the inverse of the projection matrix
99
113
 
100
114
  const projectionMatrix = virtualCamera.projectionMatrix;
101
115
  q.x = ( Math.sign( clipVector.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];
102
116
  q.y = ( Math.sign( clipVector.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];
103
117
  q.z = - 1.0;
104
- q.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ]; // calculate the scaled plane vector
118
+ q.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];
119
+
120
+ // calculate the scaled plane vector
121
+
122
+ clipVector.multiplyScalar( 2.0 / clipVector.dot( q ) );
105
123
 
106
- clipVector.multiplyScalar( 2.0 / clipVector.dot( q ) ); // replacing the third row of the projection matrix
124
+ // replacing the third row of the projection matrix
107
125
 
108
126
  projectionMatrix.elements[ 2 ] = clipVector.x;
109
127
  projectionMatrix.elements[ 6 ] = clipVector.y;
@@ -112,14 +130,18 @@
112
130
 
113
131
  };
114
132
 
115
- }(); // This will update the texture matrix that is used for projective texture mapping in the shader.
116
- // see: http://developer.download.nvidia.com/assets/gamedev/docs/projective_texture_mapping.pdf
133
+ }();
117
134
 
135
+ // This will update the texture matrix that is used for projective texture mapping in the shader.
136
+ // see: http://developer.download.nvidia.com/assets/gamedev/docs/projective_texture_mapping.pdf
118
137
 
119
138
  function updateTextureMatrix( camera ) {
120
139
 
121
140
  // this matrix does range mapping to [ 0, 1 ]
122
- textureMatrix.set( 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0 ); // we use "Object Linear Texgen", so we need to multiply the texture matrix T
141
+
142
+ textureMatrix.set( 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0 );
143
+
144
+ // we use "Object Linear Texgen", so we need to multiply the texture matrix T
123
145
  // (matrix above) with the projection and view matrix of the virtual camera
124
146
  // and the model matrix of the refractor
125
147
 
@@ -127,8 +149,9 @@
127
149
  textureMatrix.multiply( camera.matrixWorldInverse );
128
150
  textureMatrix.multiply( scope.matrixWorld );
129
151
 
130
- } //
152
+ }
131
153
 
154
+ //
132
155
 
133
156
  function render( renderer, scene, camera ) {
134
157
 
@@ -136,19 +159,24 @@
136
159
  const currentRenderTarget = renderer.getRenderTarget();
137
160
  const currentXrEnabled = renderer.xr.enabled;
138
161
  const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
162
+ const currentOutputEncoding = renderer.outputEncoding;
163
+ const currentToneMapping = renderer.toneMapping;
139
164
  renderer.xr.enabled = false; // avoid camera modification
140
-
141
165
  renderer.shadowMap.autoUpdate = false; // avoid re-computing shadows
142
-
166
+ renderer.outputEncoding = THREE.LinearEncoding;
167
+ renderer.toneMapping = THREE.NoToneMapping;
143
168
  renderer.setRenderTarget( renderTarget );
144
169
  if ( renderer.autoClear === false ) renderer.clear();
145
170
  renderer.render( scene, virtualCamera );
146
171
  renderer.xr.enabled = currentXrEnabled;
147
172
  renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
148
- renderer.setRenderTarget( currentRenderTarget ); // restore viewport
173
+ renderer.outputEncoding = currentOutputEncoding;
174
+ renderer.toneMapping = currentToneMapping;
175
+ renderer.setRenderTarget( currentRenderTarget );
149
176
 
150
- const viewport = camera.viewport;
177
+ // restore viewport
151
178
 
179
+ const viewport = camera.viewport;
152
180
  if ( viewport !== undefined ) {
153
181
 
154
182
  renderer.state.viewport( viewport );
@@ -157,17 +185,21 @@
157
185
 
158
186
  scope.visible = true;
159
187
 
160
- } //
188
+ }
161
189
 
190
+ //
162
191
 
163
192
  this.onBeforeRender = function ( renderer, scene, camera ) {
164
193
 
165
- // Render
166
- renderTarget.texture.encoding = renderer.outputEncoding; // ensure refractors are rendered only once per frame
194
+ // ensure refractors are rendered only once per frame
167
195
 
168
- if ( camera.userData.refractor === true ) return; // avoid rendering when the refractor is viewed from behind
196
+ if ( camera.userData.refractor === true ) return;
169
197
 
170
- if ( ! visible( camera ) === true ) return; // update
198
+ // avoid rendering when the refractor is viewed from behind
199
+
200
+ if ( ! visible( camera ) === true ) return;
201
+
202
+ // update
171
203
 
172
204
  updateRefractorPlane();
173
205
  updateTextureMatrix( camera );
@@ -192,7 +224,6 @@
192
224
  }
193
225
 
194
226
  }
195
-
196
227
  Refractor.RefractorShader = {
197
228
  uniforms: {
198
229
  'color': {
@@ -205,9 +236,7 @@
205
236
  value: null
206
237
  }
207
238
  },
208
- vertexShader:
209
- /* glsl */
210
- `
239
+ vertexShader: /* glsl */`
211
240
 
212
241
  uniform mat4 textureMatrix;
213
242
 
@@ -219,9 +248,7 @@
219
248
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
220
249
 
221
250
  }`,
222
- fragmentShader:
223
- /* glsl */
224
- `
251
+ fragmentShader: /* glsl */`
225
252
 
226
253
  uniform vec3 color;
227
254
  uniform sampler2D tDiffuse;
@@ -245,6 +272,7 @@
245
272
  vec4 base = texture2DProj( tDiffuse, vUv );
246
273
  gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );
247
274
 
275
+ #include <tonemapping_fragment>
248
276
  #include <encodings_fragment>
249
277
 
250
278
  }`
@@ -5,7 +5,6 @@
5
5
  */
6
6
 
7
7
  const _shadowMatrix = new THREE.Matrix4();
8
-
9
8
  class ShadowMesh extends THREE.Mesh {
10
9
 
11
10
  constructor( mesh ) {
@@ -14,7 +13,11 @@
14
13
  color: 0x000000,
15
14
  transparent: true,
16
15
  opacity: 0.6,
17
- depthWrite: false
16
+ depthWrite: false,
17
+ stencilWrite: true,
18
+ stencilFunc: THREE.EqualStencilFunc,
19
+ stencilRef: 0,
20
+ stencilZPass: THREE.IncrementStencilOp
18
21
  } );
19
22
  super( mesh.geometry, shadowMaterial );
20
23
  this.isShadowMesh = true;
@@ -23,10 +26,10 @@
23
26
  this.matrixAutoUpdate = false;
24
27
 
25
28
  }
26
-
27
29
  update( plane, lightPosition4D ) {
28
30
 
29
31
  // based on https://www.opengl.org/archives/resources/features/StencilTalk/tsld021.htm
32
+
30
33
  const dot = plane.normal.x * lightPosition4D.x + plane.normal.y * lightPosition4D.y + plane.normal.z * lightPosition4D.z + - plane.constant * lightPosition4D.w;
31
34
  const sme = _shadowMatrix.elements;
32
35
  sme[ 0 ] = dot - lightPosition4D.x * plane.normal.x;
@@ -33,7 +33,6 @@
33
33
  }
34
34
 
35
35
  }
36
-
37
36
  Sky.SkyShader = {
38
37
  uniforms: {
39
38
  'turbidity': {
@@ -55,9 +54,7 @@
55
54
  value: new THREE.Vector3( 0, 1, 0 )
56
55
  }
57
56
  },
58
- vertexShader:
59
- /* glsl */
60
- `
57
+ vertexShader: /* glsl */`
61
58
  uniform vec3 sunPosition;
62
59
  uniform float rayleigh;
63
60
  uniform float turbidity;
@@ -128,9 +125,7 @@
128
125
  vBetaM = totalMie( turbidity ) * mieCoefficient;
129
126
 
130
127
  }`,
131
- fragmentShader:
132
- /* glsl */
133
- `
128
+ fragmentShader: /* glsl */`
134
129
  varying vec3 vWorldPosition;
135
130
  varying vec3 vSunDirection;
136
131
  varying float vSunfade;
@@ -26,7 +26,9 @@
26
26
  const eye = options.eye !== undefined ? options.eye : new THREE.Vector3( 0, 0, 0 );
27
27
  const distortionScale = options.distortionScale !== undefined ? options.distortionScale : 20.0;
28
28
  const side = options.side !== undefined ? options.side : THREE.FrontSide;
29
- const fog = options.fog !== undefined ? options.fog : false; //
29
+ const fog = options.fog !== undefined ? options.fog : false;
30
+
31
+ //
30
32
 
31
33
  const mirrorPlane = new THREE.Plane();
32
34
  const normal = new THREE.Vector3();
@@ -77,9 +79,7 @@
77
79
  value: new THREE.Color( 0x555555 )
78
80
  }
79
81
  } ] ),
80
- vertexShader:
81
- /* glsl */
82
- `
82
+ vertexShader: /* glsl */`
83
83
  uniform mat4 textureMatrix;
84
84
  uniform float time;
85
85
 
@@ -104,9 +104,7 @@
104
104
  #include <fog_vertex>
105
105
  #include <shadowmap_vertex>
106
106
  }`,
107
- fragmentShader:
108
- /* glsl */
109
- `
107
+ fragmentShader: /* glsl */`
110
108
  uniform sampler2D mirrorSampler;
111
109
  uniform float alpha;
112
110
  uniform float time;
@@ -198,7 +196,6 @@
198
196
  material.uniforms[ 'distortionScale' ].value = distortionScale;
199
197
  material.uniforms[ 'eye' ].value = eye;
200
198
  scope.material = material;
201
-
202
199
  scope.onBeforeRender = function ( renderer, scene, camera ) {
203
200
 
204
201
  mirrorWorldPosition.setFromMatrixPosition( scope.matrixWorld );
@@ -206,7 +203,9 @@
206
203
  rotationMatrix.extractRotation( scope.matrixWorld );
207
204
  normal.set( 0, 0, 1 );
208
205
  normal.applyMatrix4( rotationMatrix );
209
- view.subVectors( mirrorWorldPosition, cameraWorldPosition ); // Avoid rendering when mirror is facing away
206
+ view.subVectors( mirrorWorldPosition, cameraWorldPosition );
207
+
208
+ // Avoid rendering when mirror is facing away
210
209
 
211
210
  if ( view.dot( normal ) > 0 ) return;
212
211
  view.reflect( normal ).negate();
@@ -226,13 +225,15 @@
226
225
  mirrorCamera.far = camera.far; // Used in WebGLBackground
227
226
 
228
227
  mirrorCamera.updateMatrixWorld();
229
- mirrorCamera.projectionMatrix.copy( camera.projectionMatrix ); // Update the texture matrix
228
+ mirrorCamera.projectionMatrix.copy( camera.projectionMatrix );
230
229
 
230
+ // Update the texture matrix
231
231
  textureMatrix.set( 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0 );
232
232
  textureMatrix.multiply( mirrorCamera.projectionMatrix );
233
- textureMatrix.multiply( mirrorCamera.matrixWorldInverse ); // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
234
- // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
233
+ textureMatrix.multiply( mirrorCamera.matrixWorldInverse );
235
234
 
235
+ // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
236
+ // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
236
237
  mirrorPlane.setFromNormalAndCoplanarPoint( normal, mirrorWorldPosition );
237
238
  mirrorPlane.applyMatrix4( mirrorCamera.matrixWorldInverse );
238
239
  clipPlane.set( mirrorPlane.normal.x, mirrorPlane.normal.y, mirrorPlane.normal.z, mirrorPlane.constant );
@@ -240,22 +241,25 @@
240
241
  q.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];
241
242
  q.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];
242
243
  q.z = - 1.0;
243
- q.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ]; // Calculate the scaled plane vector
244
+ q.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];
244
245
 
245
- clipPlane.multiplyScalar( 2.0 / clipPlane.dot( q ) ); // Replacing the third row of the projection matrix
246
+ // Calculate the scaled plane vector
247
+ clipPlane.multiplyScalar( 2.0 / clipPlane.dot( q ) );
246
248
 
249
+ // Replacing the third row of the projection matrix
247
250
  projectionMatrix.elements[ 2 ] = clipPlane.x;
248
251
  projectionMatrix.elements[ 6 ] = clipPlane.y;
249
252
  projectionMatrix.elements[ 10 ] = clipPlane.z + 1.0 - clipBias;
250
253
  projectionMatrix.elements[ 14 ] = clipPlane.w;
251
- eye.setFromMatrixPosition( camera.matrixWorld ); // Render
254
+ eye.setFromMatrixPosition( camera.matrixWorld );
255
+
256
+ // Render
252
257
 
253
258
  const currentRenderTarget = renderer.getRenderTarget();
254
259
  const currentXrEnabled = renderer.xr.enabled;
255
260
  const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
256
261
  scope.visible = false;
257
262
  renderer.xr.enabled = false; // Avoid camera modification and recursion
258
-
259
263
  renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
260
264
 
261
265
  renderer.setRenderTarget( renderTarget );
@@ -266,10 +270,11 @@
266
270
  scope.visible = true;
267
271
  renderer.xr.enabled = currentXrEnabled;
268
272
  renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
269
- renderer.setRenderTarget( currentRenderTarget ); // Restore viewport
273
+ renderer.setRenderTarget( currentRenderTarget );
270
274
 
271
- const viewport = camera.viewport;
275
+ // Restore viewport
272
276
 
277
+ const viewport = camera.viewport;
273
278
  if ( viewport !== undefined ) {
274
279
 
275
280
  renderer.state.viewport( viewport );
@@ -29,10 +29,11 @@
29
29
  const normalMap0 = options.normalMap0 || textureLoader.load( 'textures/water/Water_1_M_Normal.jpg' );
30
30
  const normalMap1 = options.normalMap1 || textureLoader.load( 'textures/water/Water_2_M_Normal.jpg' );
31
31
  const cycle = 0.15; // a cycle of a flow map phase
32
-
33
32
  const halfCycle = cycle * 0.5;
34
33
  const textureMatrix = new THREE.Matrix4();
35
- const clock = new THREE.Clock(); // internal components
34
+ const clock = new THREE.Clock();
35
+
36
+ // internal components
36
37
 
37
38
  if ( THREE.Reflector === undefined ) {
38
39
 
@@ -59,7 +60,9 @@
59
60
  clipBias: clipBias
60
61
  } );
61
62
  reflector.matrixAutoUpdate = false;
62
- refractor.matrixAutoUpdate = false; // material
63
+ refractor.matrixAutoUpdate = false;
64
+
65
+ // material
63
66
 
64
67
  this.material = new THREE.ShaderMaterial( {
65
68
  uniforms: THREE.UniformsUtils.merge( [ THREE.UniformsLib[ 'fog' ], shader.uniforms ] ),
@@ -68,7 +71,6 @@
68
71
  transparent: true,
69
72
  fog: true
70
73
  } );
71
-
72
74
  if ( flowMap !== undefined ) {
73
75
 
74
76
  this.material.defines.USE_FLOWMAP = '';
@@ -84,27 +86,30 @@
84
86
  value: flowDirection
85
87
  };
86
88
 
87
- } // maps
89
+ }
88
90
 
91
+ // maps
89
92
 
90
93
  normalMap0.wrapS = normalMap0.wrapT = THREE.RepeatWrapping;
91
94
  normalMap1.wrapS = normalMap1.wrapT = THREE.RepeatWrapping;
92
95
  this.material.uniforms[ 'tReflectionMap' ].value = reflector.getRenderTarget().texture;
93
96
  this.material.uniforms[ 'tRefractionMap' ].value = refractor.getRenderTarget().texture;
94
97
  this.material.uniforms[ 'tNormalMap0' ].value = normalMap0;
95
- this.material.uniforms[ 'tNormalMap1' ].value = normalMap1; // water
98
+ this.material.uniforms[ 'tNormalMap1' ].value = normalMap1;
99
+
100
+ // water
96
101
 
97
102
  this.material.uniforms[ 'color' ].value = color;
98
103
  this.material.uniforms[ 'reflectivity' ].value = reflectivity;
99
- this.material.uniforms[ 'textureMatrix' ].value = textureMatrix; // inital values
104
+ this.material.uniforms[ 'textureMatrix' ].value = textureMatrix;
100
105
 
101
- this.material.uniforms[ 'config' ].value.x = 0; // flowMapOffset0
106
+ // inital values
102
107
 
108
+ this.material.uniforms[ 'config' ].value.x = 0; // flowMapOffset0
103
109
  this.material.uniforms[ 'config' ].value.y = halfCycle; // flowMapOffset1
104
-
105
110
  this.material.uniforms[ 'config' ].value.z = halfCycle; // halfCycle
106
-
107
111
  this.material.uniforms[ 'config' ].value.w = scale; // scale
112
+
108
113
  // functions
109
114
 
110
115
  function updateTextureMatrix( camera ) {
@@ -121,8 +126,8 @@
121
126
  const delta = clock.getDelta();
122
127
  const config = scope.material.uniforms[ 'config' ];
123
128
  config.value.x += flowSpeed * delta; // flowMapOffset0
124
-
125
129
  config.value.y = config.value.x + halfCycle; // flowMapOffset1
130
+
126
131
  // Important: The distance between offsets should be always the value of "halfCycle".
127
132
  // Moreover, both offsets should be in the range of [ 0, cycle ].
128
133
  // This approach ensures a smooth water flow and avoids "reset" effects.
@@ -138,8 +143,9 @@
138
143
 
139
144
  }
140
145
 
141
- } //
146
+ }
142
147
 
148
+ //
143
149
 
144
150
  this.onBeforeRender = function ( renderer, scene, camera ) {
145
151
 
@@ -157,7 +163,6 @@
157
163
  }
158
164
 
159
165
  }
160
-
161
166
  Water.WaterShader = {
162
167
  uniforms: {
163
168
  'color': {
@@ -193,9 +198,7 @@
193
198
  value: new THREE.Vector4()
194
199
  }
195
200
  },
196
- vertexShader:
197
- /* glsl */
198
- `
201
+ vertexShader: /* glsl */`
199
202
 
200
203
  #include <common>
201
204
  #include <fog_pars_vertex>
@@ -222,9 +225,7 @@
222
225
  #include <fog_vertex>
223
226
 
224
227
  }`,
225
- fragmentShader:
226
- /* glsl */
227
- `
228
+ fragmentShader: /* glsl */`
228
229
 
229
230
  #include <common>
230
231
  #include <fog_pars_fragment>