@needle-tools/three 0.145.2 → 0.146.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 (394) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +3559 -6924
  3. package/build/three.js +3559 -6924
  4. package/build/three.min.js +1 -2
  5. package/build/three.module.js +732 -339
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +49 -66
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +70 -134
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +138 -405
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -54
  14. package/examples/js/controls/FlyControls.js +29 -55
  15. package/examples/js/controls/OrbitControls.js +85 -95
  16. package/examples/js/controls/PointerLockControls.js +5 -14
  17. package/examples/js/controls/TrackballControls.js +33 -86
  18. package/examples/js/controls/TransformControls.js +84 -169
  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 +4 -18
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +26 -30
  30. package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
  31. package/examples/js/effects/PeppersGhostEffect.js +12 -39
  32. package/examples/js/effects/StereoEffect.js +0 -4
  33. package/examples/js/environments/RoomEnvironment.js +12 -10
  34. package/examples/js/exporters/ColladaExporter.js +48 -65
  35. package/examples/js/exporters/DRACOExporter.js +22 -22
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +143 -261
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +42 -33
  40. package/examples/js/exporters/PLYExporter.js +38 -33
  41. package/examples/js/exporters/STLExporter.js +5 -7
  42. package/examples/js/exporters/USDZExporter.js +110 -25
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +11 -6
  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 +25 -12
  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 +22 -33
  60. package/examples/js/interactive/InteractiveGroup.js +6 -12
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +0 -8
  63. package/examples/js/lights/LightProbeGenerator.js +32 -39
  64. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  65. package/examples/js/lines/LineGeometry.js +3 -5
  66. package/examples/js/lines/LineMaterial.js +4 -11
  67. package/examples/js/lines/LineSegments2.js +38 -89
  68. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  69. package/examples/js/lines/Wireframe.js +2 -7
  70. package/examples/js/lines/WireframeGeometry2.js +3 -1
  71. package/examples/js/loaders/3DMLoader.js +58 -155
  72. package/examples/js/loaders/3MFLoader.js +72 -106
  73. package/examples/js/loaders/AMFLoader.js +0 -25
  74. package/examples/js/loaders/BVHLoader.js +44 -43
  75. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  76. package/examples/js/loaders/ColladaLoader.js +201 -359
  77. package/examples/js/loaders/DDSLoader.js +24 -25
  78. package/examples/js/loaders/DRACOLoader.js +29 -66
  79. package/examples/js/loaders/EXRLoader.js +67 -164
  80. package/examples/js/loaders/FBXLoader.js +286 -441
  81. package/examples/js/loaders/FontLoader.js +6 -15
  82. package/examples/js/loaders/GCodeLoader.js +15 -16
  83. package/examples/js/loaders/GLTFLoader.js +354 -405
  84. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
  85. package/examples/js/loaders/KMZLoader.js +3 -7
  86. package/examples/js/loaders/KTXLoader.js +12 -30
  87. package/examples/js/loaders/LDrawLoader.js +178 -289
  88. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  89. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  90. package/examples/js/loaders/LWOLoader.js +59 -124
  91. package/examples/js/loaders/LogLuvLoader.js +27 -77
  92. package/examples/js/loaders/LottieLoader.js +4 -4
  93. package/examples/js/loaders/MD2Loader.js +26 -27
  94. package/examples/js/loaders/MDDLoader.js +6 -10
  95. package/examples/js/loaders/MMDLoader.js +180 -189
  96. package/examples/js/loaders/MTLLoader.js +18 -47
  97. package/examples/js/loaders/MaterialXLoader.js +392 -0
  98. package/examples/js/loaders/NRRDLoader.js +44 -84
  99. package/examples/js/loaders/OBJLoader.js +50 -65
  100. package/examples/js/loaders/PCDLoader.js +34 -29
  101. package/examples/js/loaders/PDBLoader.js +17 -13
  102. package/examples/js/loaders/PLYLoader.js +9 -39
  103. package/examples/js/loaders/PRWMLoader.js +11 -22
  104. package/examples/js/loaders/PVRLoader.js +7 -16
  105. package/examples/js/loaders/RGBELoader.js +36 -61
  106. package/examples/js/loaders/RGBMLoader.js +26 -87
  107. package/examples/js/loaders/STLLoader.js +20 -27
  108. package/examples/js/loaders/SVGLoader.js +361 -233
  109. package/examples/js/loaders/TDSLoader.js +81 -118
  110. package/examples/js/loaders/TGALoader.js +39 -41
  111. package/examples/js/loaders/TIFFLoader.js +0 -1
  112. package/examples/js/loaders/TTFLoader.js +0 -8
  113. package/examples/js/loaders/TiltLoader.js +14 -15
  114. package/examples/js/loaders/VOXLoader.js +8 -16
  115. package/examples/js/loaders/VRMLLoader.js +243 -340
  116. package/examples/js/loaders/VTKLoader.js +101 -118
  117. package/examples/js/loaders/XYZLoader.js +2 -4
  118. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  119. package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
  120. package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
  121. package/examples/js/materials/MeshGouraudMaterial.js +15 -13
  122. package/examples/js/math/Capsule.js +0 -17
  123. package/examples/js/math/ColorConverter.js +3 -3
  124. package/examples/js/math/ConvexHull.js +183 -139
  125. package/examples/js/math/ImprovedNoise.js +1 -1
  126. package/examples/js/math/Lut.js +8 -15
  127. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  128. package/examples/js/math/OBB.js +90 -49
  129. package/examples/js/math/Octree.js +2 -57
  130. package/examples/js/math/SimplexNoise.js +74 -88
  131. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  132. package/examples/js/misc/GPUComputationRenderer.js +14 -18
  133. package/examples/js/misc/Gyroscope.js +5 -9
  134. package/examples/js/misc/MD2Character.js +14 -23
  135. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  136. package/examples/js/misc/MorphAnimMesh.js +0 -6
  137. package/examples/js/misc/MorphBlendMesh.js +3 -30
  138. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  139. package/examples/js/misc/RollerCoaster.js +17 -24
  140. package/examples/js/misc/TubePainter.js +18 -12
  141. package/examples/js/misc/Volume.js +16 -45
  142. package/examples/js/misc/VolumeSlice.js +14 -24
  143. package/examples/js/modifiers/CurveModifier.js +19 -21
  144. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  145. package/examples/js/modifiers/SimplifyModifier.js +56 -59
  146. package/examples/js/modifiers/TessellateModifier.js +2 -9
  147. package/examples/js/objects/GroundProjectedEnv.js +2 -14
  148. package/examples/js/objects/Lensflare.js +47 -38
  149. package/examples/js/objects/LightningStorm.js +10 -13
  150. package/examples/js/objects/MarchingCubes.js +80 -59
  151. package/examples/js/objects/Reflector.js +22 -20
  152. package/examples/js/objects/ReflectorForSSRPass.js +19 -23
  153. package/examples/js/objects/Refractor.js +52 -30
  154. package/examples/js/objects/ShadowMesh.js +1 -2
  155. package/examples/js/objects/Sky.js +2 -7
  156. package/examples/js/objects/Water.js +23 -18
  157. package/examples/js/objects/Water2.js +20 -19
  158. package/examples/js/physics/AmmoPhysics.js +23 -20
  159. package/examples/js/physics/OimoPhysics.js +19 -17
  160. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  161. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  162. package/examples/js/postprocessing/BloomPass.js +38 -17
  163. package/examples/js/postprocessing/BokehPass.js +29 -12
  164. package/examples/js/postprocessing/ClearPass.js +1 -6
  165. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  166. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  167. package/examples/js/postprocessing/EffectComposer.js +25 -32
  168. package/examples/js/postprocessing/FilmPass.js +7 -5
  169. package/examples/js/postprocessing/GlitchPass.js +10 -11
  170. package/examples/js/postprocessing/HalftonePass.js +9 -9
  171. package/examples/js/postprocessing/LUTPass.js +2 -15
  172. package/examples/js/postprocessing/MaskPass.js +20 -17
  173. package/examples/js/postprocessing/OutlinePass.js +45 -36
  174. package/examples/js/postprocessing/Pass.js +11 -14
  175. package/examples/js/postprocessing/RenderPass.js +3 -7
  176. package/examples/js/postprocessing/SAOPass.js +40 -32
  177. package/examples/js/postprocessing/SMAAPass.js +34 -17
  178. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  179. package/examples/js/postprocessing/SSAOPass.js +56 -42
  180. package/examples/js/postprocessing/SSRPass.js +78 -61
  181. package/examples/js/postprocessing/SavePass.js +14 -6
  182. package/examples/js/postprocessing/ShaderPass.js +9 -8
  183. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  184. package/examples/js/postprocessing/TexturePass.js +7 -4
  185. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  186. package/examples/js/renderers/CSS2DRenderer.js +2 -21
  187. package/examples/js/renderers/CSS3DRenderer.js +3 -24
  188. package/examples/js/renderers/Projector.js +29 -85
  189. package/examples/js/renderers/SVGRenderer.js +4 -50
  190. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  191. package/examples/js/shaders/AfterimageShader.js +3 -6
  192. package/examples/js/shaders/BasicShader.js +3 -6
  193. package/examples/js/shaders/BleachBypassShader.js +3 -6
  194. package/examples/js/shaders/BlendShader.js +3 -6
  195. package/examples/js/shaders/BokehShader.js +3 -6
  196. package/examples/js/shaders/BokehShader2.js +4 -13
  197. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  198. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  199. package/examples/js/shaders/ColorifyShader.js +2 -6
  200. package/examples/js/shaders/ConvolutionShader.js +5 -10
  201. package/examples/js/shaders/CopyShader.js +3 -6
  202. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  203. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  204. package/examples/js/shaders/DigitalGlitch.js +3 -6
  205. package/examples/js/shaders/DotScreenShader.js +2 -6
  206. package/examples/js/shaders/FXAAShader.js +1 -3
  207. package/examples/js/shaders/FilmShader.js +3 -6
  208. package/examples/js/shaders/FocusShader.js +3 -6
  209. package/examples/js/shaders/FreiChenShader.js +2 -6
  210. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  211. package/examples/js/shaders/GodRaysShader.js +11 -24
  212. package/examples/js/shaders/HalftoneShader.js +3 -6
  213. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  214. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  215. package/examples/js/shaders/HueSaturationShader.js +3 -6
  216. package/examples/js/shaders/KaleidoShader.js +3 -6
  217. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  218. package/examples/js/shaders/LuminosityShader.js +3 -6
  219. package/examples/js/shaders/MMDToonShader.js +2 -6
  220. package/examples/js/shaders/MirrorShader.js +3 -6
  221. package/examples/js/shaders/NormalMapShader.js +2 -6
  222. package/examples/js/shaders/RGBShiftShader.js +3 -6
  223. package/examples/js/shaders/SAOShader.js +2 -6
  224. package/examples/js/shaders/SMAAShader.js +6 -18
  225. package/examples/js/shaders/SSAOShader.js +2 -6
  226. package/examples/js/shaders/SSRShader.js +6 -18
  227. package/examples/js/shaders/SepiaShader.js +3 -6
  228. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  229. package/examples/js/shaders/TechnicolorShader.js +3 -6
  230. package/examples/js/shaders/ToneMapShader.js +3 -6
  231. package/examples/js/shaders/ToonShader.js +8 -24
  232. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  233. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  234. package/examples/js/shaders/VelocityShader.js +126 -0
  235. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  236. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  237. package/examples/js/shaders/VignetteShader.js +3 -6
  238. package/examples/js/shaders/VolumeShader.js +2 -6
  239. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  240. package/examples/js/textures/FlakesTexture.js +0 -1
  241. package/examples/js/utils/BufferGeometryUtils.js +234 -168
  242. package/examples/js/utils/CameraUtils.js +5 -20
  243. package/examples/js/utils/GPUStatsPanel.js +3 -12
  244. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  245. package/examples/js/utils/GeometryUtils.js +13 -18
  246. package/examples/js/utils/LDrawUtils.js +8 -11
  247. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  248. package/examples/js/utils/SceneUtils.js +117 -6
  249. package/examples/js/utils/ShadowMapViewer.js +17 -14
  250. package/examples/js/utils/SkeletonUtils.js +13 -27
  251. package/examples/js/utils/UVsDebug.js +20 -12
  252. package/examples/js/utils/WorkerPool.js +1 -11
  253. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  254. package/examples/jsm/capabilities/WebGPU.js +3 -1
  255. package/examples/jsm/controls/OrbitControls.js +44 -4
  256. package/examples/jsm/exporters/GLTFExporter.js +17 -131
  257. package/examples/jsm/exporters/USDZExporter.js +94 -28
  258. package/examples/jsm/interactive/HTMLMesh.js +2 -0
  259. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  260. package/examples/jsm/loaders/3DMLoader.js +1 -2
  261. package/examples/jsm/loaders/ColladaLoader.js +28 -0
  262. package/examples/jsm/loaders/FBXLoader.js +16 -2
  263. package/examples/jsm/loaders/GLTFLoader.js +204 -377
  264. package/examples/jsm/loaders/KTX2Loader.js +68 -29
  265. package/examples/jsm/loaders/LDrawLoader.js +14 -13
  266. package/examples/jsm/loaders/LottieLoader.js +4 -2
  267. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  268. package/examples/jsm/loaders/PCDLoader.js +1 -1
  269. package/examples/jsm/loaders/PLYLoader.js +68 -16
  270. package/examples/jsm/loaders/SVGLoader.js +227 -14
  271. package/examples/jsm/loaders/USDZLoader.js +31 -16
  272. package/examples/jsm/nodes/Nodes.js +14 -2
  273. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  274. package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
  275. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  276. package/examples/jsm/nodes/accessors/SkinningNode.js +1 -1
  277. package/examples/jsm/nodes/core/Node.js +1 -1
  278. package/examples/jsm/nodes/core/NodeBuilder.js +36 -4
  279. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  280. package/examples/jsm/nodes/core/NodeVarying.js +7 -4
  281. package/examples/jsm/nodes/core/VaryingNode.js +6 -4
  282. package/examples/jsm/nodes/core/constants.js +13 -13
  283. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  284. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  285. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  286. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  287. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
  288. package/examples/jsm/nodes/materials/Materials.js +9 -7
  289. package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
  290. package/examples/jsm/nodes/materialx/MaterialXNodes.js +6 -2
  291. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  292. package/examples/jsm/nodes/math/MathNode.js +5 -0
  293. package/examples/jsm/nodes/math/OperatorNode.js +6 -1
  294. package/examples/jsm/nodes/shadernode/ShaderNode.js +26 -13
  295. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +2 -0
  296. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +18 -0
  297. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  298. package/examples/jsm/nodes/utils/JoinNode.js +8 -2
  299. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  300. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  301. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  302. package/examples/jsm/nodes/utils/TimerNode.js +1 -1
  303. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  304. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  305. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  306. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  307. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  308. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  309. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  310. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  311. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  312. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  313. package/examples/jsm/postprocessing/OutlinePass.js +10 -0
  314. package/examples/jsm/postprocessing/Pass.js +2 -0
  315. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  316. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  317. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  318. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  319. package/examples/jsm/postprocessing/SavePass.js +17 -1
  320. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  321. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  322. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  323. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  324. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +39 -16
  325. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  326. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  327. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
  328. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
  329. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +35 -5
  330. package/examples/jsm/shaders/MMDToonShader.js +0 -2
  331. package/examples/jsm/shaders/VelocityShader.js +128 -0
  332. package/examples/jsm/utils/BufferGeometryUtils.js +130 -6
  333. package/examples/jsm/utils/SceneUtils.js +129 -4
  334. package/examples/jsm/utils/TextureUtils.js +85 -0
  335. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  336. package/examples/jsm/webxr/XRHandMeshModel.js +6 -3
  337. package/package.json +11 -12
  338. package/src/Three.js +1 -0
  339. package/src/audio/AudioContext.js +5 -5
  340. package/src/cameras/CubeCamera.js +14 -14
  341. package/src/constants.js +1 -1
  342. package/src/core/InstancedBufferGeometry.js +1 -7
  343. package/src/extras/Earcut.js +67 -67
  344. package/src/helpers/DirectionalLightHelper.js +5 -1
  345. package/src/helpers/HemisphereLightHelper.js +4 -1
  346. package/src/helpers/PointLightHelper.js +2 -1
  347. package/src/helpers/SpotLightHelper.js +4 -2
  348. package/src/lights/PointLight.js +2 -2
  349. package/src/lights/SpotLight.js +2 -2
  350. package/src/loaders/FileLoader.js +4 -1
  351. package/src/loaders/ObjectLoader.js +5 -1
  352. package/src/materials/Material.js +1 -1
  353. package/src/math/Color.js +5 -5
  354. package/src/math/Matrix3.js +53 -18
  355. package/src/math/Ray.js +2 -5
  356. package/src/math/Sphere.js +19 -26
  357. package/src/objects/InstancedMesh.js +7 -0
  358. package/src/objects/LOD.js +25 -6
  359. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  360. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  361. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  362. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  363. package/src/renderers/WebGLRenderTarget.js +1 -1
  364. package/src/renderers/WebGLRenderer.js +36 -62
  365. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  366. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
  367. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  369. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  370. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  371. package/src/renderers/shaders/ShaderChunk.js +3 -0
  372. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  373. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  374. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  375. package/src/renderers/shaders/ShaderLib.js +20 -6
  376. package/src/renderers/shaders/UniformsLib.js +1 -1
  377. package/src/renderers/shaders/UniformsUtils.js +15 -0
  378. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  379. package/src/renderers/webgl/WebGLBackground.js +15 -7
  380. package/src/renderers/webgl/WebGLCubeUVMaps.js +1 -1
  381. package/src/renderers/webgl/WebGLLights.js +0 -4
  382. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  383. package/src/renderers/webgl/WebGLShadowMap.js +3 -1
  384. package/src/renderers/webgl/WebGLState.js +31 -1
  385. package/src/renderers/webgl/WebGLTextures.js +71 -18
  386. package/src/renderers/webgl/WebGLUniforms.js +116 -20
  387. package/src/renderers/webgl/WebGLUtils.js +1 -1
  388. package/src/renderers/webxr/WebXRController.js +46 -13
  389. package/src/renderers/webxr/WebXRManager.js +85 -3
  390. package/src/scenes/Scene.js +8 -0
  391. package/src/textures/CompressedArrayTexture.js +18 -0
  392. package/examples/js/libs/lottie_canvas.js +0 -12751
  393. package/examples/js/shaders/PixelShader.js +0 -51
  394. package/examples/jsm/shaders/PixelShader.js +0 -44
@@ -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();
@@ -96,7 +93,6 @@
96
93
  material.uniforms[ 'tDiffuse' ].value = renderTarget.texture;
97
94
  material.uniforms[ 'color' ].value = scope.color;
98
95
  material.uniforms[ 'textureMatrix' ].value = textureMatrix;
99
-
100
96
  if ( useDepthTexture ) {
101
97
 
102
98
  material.uniforms[ 'tDepth' ].value = renderTarget.depthTexture;
@@ -106,7 +102,6 @@
106
102
  this.material = material;
107
103
  const globalPlane = new THREE.Plane( new THREE.Vector3( 0, 1, 0 ), clipBias );
108
104
  const globalPlanes = [ globalPlane ];
109
-
110
105
  this.doRender = function ( renderer, scene, camera ) {
111
106
 
112
107
  material.uniforms[ 'maxDistance' ].value = scope.maxDistance;
@@ -121,7 +116,9 @@
121
116
  rotationMatrix.extractRotation( scope.matrixWorld );
122
117
  normal.set( 0, 0, 1 );
123
118
  normal.applyMatrix4( rotationMatrix );
124
- 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
125
122
 
126
123
  if ( view.dot( normal ) > 0 ) return;
127
124
  view.reflect( normal ).negate();
@@ -147,21 +144,22 @@
147
144
  material.uniforms[ 'virtualCameraMatrixWorld' ].value = virtualCamera.matrixWorld;
148
145
  material.uniforms[ 'virtualCameraProjectionMatrix' ].value = camera.projectionMatrix;
149
146
  material.uniforms[ 'virtualCameraProjectionMatrixInverse' ].value = camera.projectionMatrixInverse;
150
- material.uniforms[ 'resolution' ].value = scope.resolution; // Update the texture matrix
147
+ material.uniforms[ 'resolution' ].value = scope.resolution;
151
148
 
149
+ // Update the texture matrix
152
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 );
153
151
  textureMatrix.multiply( virtualCamera.projectionMatrix );
154
152
  textureMatrix.multiply( virtualCamera.matrixWorldInverse );
155
- textureMatrix.multiply( scope.matrixWorld ); // scope.visible = false;
153
+ textureMatrix.multiply( scope.matrixWorld );
154
+
155
+ // scope.visible = false;
156
156
 
157
157
  const currentRenderTarget = renderer.getRenderTarget();
158
158
  const currentXrEnabled = renderer.xr.enabled;
159
159
  const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
160
160
  const currentClippingPlanes = renderer.clippingPlanes;
161
161
  renderer.xr.enabled = false; // Avoid camera modification
162
-
163
162
  renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
164
-
165
163
  renderer.clippingPlanes = globalPlanes;
166
164
  renderer.setRenderTarget( renderTarget );
167
165
  renderer.state.buffers.depth.setMask( true ); // make sure the depth buffer is writable so it can be properly cleared, see #18897
@@ -171,15 +169,18 @@
171
169
  renderer.xr.enabled = currentXrEnabled;
172
170
  renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
173
171
  renderer.clippingPlanes = currentClippingPlanes;
174
- renderer.setRenderTarget( currentRenderTarget ); // Restore viewport
172
+ renderer.setRenderTarget( currentRenderTarget );
175
173
 
176
- const viewport = camera.viewport;
174
+ // Restore viewport
177
175
 
176
+ const viewport = camera.viewport;
178
177
  if ( viewport !== undefined ) {
179
178
 
180
179
  renderer.state.viewport( viewport );
181
180
 
182
- } // scope.visible = true;
181
+ }
182
+
183
+ // scope.visible = true;
183
184
 
184
185
  };
185
186
 
@@ -192,7 +193,6 @@
192
193
  }
193
194
 
194
195
  }
195
-
196
196
  ReflectorForSSRPass.ReflectorShader = {
197
197
  defines: {
198
198
  DISTANCE_ATTENUATION: true,
@@ -239,9 +239,7 @@
239
239
  value: new THREE.Vector2()
240
240
  }
241
241
  },
242
- vertexShader:
243
- /* glsl */
244
- `
242
+ vertexShader: /* glsl */`
245
243
  uniform mat4 textureMatrix;
246
244
  varying vec4 vUv;
247
245
 
@@ -252,9 +250,7 @@
252
250
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
253
251
 
254
252
  }`,
255
- fragmentShader:
256
- /* glsl */
257
- `
253
+ fragmentShader: /* glsl */`
258
254
  uniform vec3 color;
259
255
  uniform sampler2D tDiffuse;
260
256
  uniform sampler2D tDepth;
@@ -14,30 +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
33
  samples: multisample,
28
34
  type: THREE.HalfFloatType
29
- } ); // material
35
+ } );
36
+
37
+ // material
30
38
 
31
39
  this.material = new THREE.ShaderMaterial( {
32
40
  uniforms: THREE.UniformsUtils.clone( shader.uniforms ),
33
41
  vertexShader: shader.vertexShader,
34
42
  fragmentShader: shader.fragmentShader,
35
43
  transparent: true // ensures, refractors are drawn from farthest to closest
36
-
37
44
  } );
45
+
38
46
  this.material.uniforms[ 'color' ].value = color;
39
47
  this.material.uniforms[ 'tDiffuse' ].value = renderTarget.texture;
40
- this.material.uniforms[ 'textureMatrix' ].value = textureMatrix; // functions
48
+ this.material.uniforms[ 'textureMatrix' ].value = textureMatrix;
49
+
50
+ // functions
41
51
 
42
52
  const visible = function () {
43
53
 
@@ -59,7 +69,6 @@
59
69
  };
60
70
 
61
71
  }();
62
-
63
72
  const updateRefractorPlane = function () {
64
73
 
65
74
  const normal = new THREE.Vector3();
@@ -69,7 +78,9 @@
69
78
  return function updateRefractorPlane() {
70
79
 
71
80
  scope.matrixWorld.decompose( position, quaternion, scale );
72
- 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
73
84
 
74
85
  normal.negate();
75
86
  refractorPlane.setFromNormalAndCoplanarPoint( normal, position );
@@ -77,7 +88,6 @@
77
88
  };
78
89
 
79
90
  }();
80
-
81
91
  const updateVirtualCamera = function () {
82
92
 
83
93
  const clipPlane = new THREE.Plane();
@@ -89,22 +99,29 @@
89
99
  virtualCamera.matrixWorldInverse.copy( virtualCamera.matrixWorld ).invert();
90
100
  virtualCamera.projectionMatrix.copy( camera.projectionMatrix );
91
101
  virtualCamera.far = camera.far; // used in WebGLBackground
102
+
92
103
  // The following code creates an oblique view frustum for clipping.
93
104
  // see: Lengyel, Eric. “Oblique View Frustum Depth Projection and Clipping”.
94
105
  // Journal of Game Development, Vol. 1, No. 2 (2005), Charles River Media, pp. 5–16
95
106
 
96
107
  clipPlane.copy( refractorPlane );
97
108
  clipPlane.applyMatrix4( virtualCamera.matrixWorldInverse );
98
- 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
99
112
  // transform it into camera space by multiplying it by the inverse of the projection matrix
100
113
 
101
114
  const projectionMatrix = virtualCamera.projectionMatrix;
102
115
  q.x = ( Math.sign( clipVector.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];
103
116
  q.y = ( Math.sign( clipVector.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];
104
117
  q.z = - 1.0;
105
- 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 ) );
106
123
 
107
- clipVector.multiplyScalar( 2.0 / clipVector.dot( q ) ); // replacing the third row of the projection matrix
124
+ // replacing the third row of the projection matrix
108
125
 
109
126
  projectionMatrix.elements[ 2 ] = clipVector.x;
110
127
  projectionMatrix.elements[ 6 ] = clipVector.y;
@@ -113,14 +130,18 @@
113
130
 
114
131
  };
115
132
 
116
- }(); // This will update the texture matrix that is used for projective texture mapping in the shader.
117
- // see: http://developer.download.nvidia.com/assets/gamedev/docs/projective_texture_mapping.pdf
133
+ }();
118
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
119
137
 
120
138
  function updateTextureMatrix( camera ) {
121
139
 
122
140
  // this matrix does range mapping to [ 0, 1 ]
123
- 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
124
145
  // (matrix above) with the projection and view matrix of the virtual camera
125
146
  // and the model matrix of the refractor
126
147
 
@@ -128,8 +149,9 @@
128
149
  textureMatrix.multiply( camera.matrixWorldInverse );
129
150
  textureMatrix.multiply( scope.matrixWorld );
130
151
 
131
- } //
152
+ }
132
153
 
154
+ //
133
155
 
134
156
  function render( renderer, scene, camera ) {
135
157
 
@@ -140,9 +162,7 @@
140
162
  const currentOutputEncoding = renderer.outputEncoding;
141
163
  const currentToneMapping = renderer.toneMapping;
142
164
  renderer.xr.enabled = false; // avoid camera modification
143
-
144
165
  renderer.shadowMap.autoUpdate = false; // avoid re-computing shadows
145
-
146
166
  renderer.outputEncoding = THREE.LinearEncoding;
147
167
  renderer.toneMapping = THREE.NoToneMapping;
148
168
  renderer.setRenderTarget( renderTarget );
@@ -152,10 +172,11 @@
152
172
  renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
153
173
  renderer.outputEncoding = currentOutputEncoding;
154
174
  renderer.toneMapping = currentToneMapping;
155
- renderer.setRenderTarget( currentRenderTarget ); // restore viewport
175
+ renderer.setRenderTarget( currentRenderTarget );
156
176
 
157
- const viewport = camera.viewport;
177
+ // restore viewport
158
178
 
179
+ const viewport = camera.viewport;
159
180
  if ( viewport !== undefined ) {
160
181
 
161
182
  renderer.state.viewport( viewport );
@@ -164,15 +185,21 @@
164
185
 
165
186
  scope.visible = true;
166
187
 
167
- } //
188
+ }
168
189
 
190
+ //
169
191
 
170
192
  this.onBeforeRender = function ( renderer, scene, camera ) {
171
193
 
172
194
  // ensure refractors are rendered only once per frame
173
- if ( camera.userData.refractor === true ) return; // avoid rendering when the refractor is viewed from behind
174
195
 
175
- if ( ! visible( camera ) === true ) return; // update
196
+ if ( camera.userData.refractor === true ) return;
197
+
198
+ // avoid rendering when the refractor is viewed from behind
199
+
200
+ if ( ! visible( camera ) === true ) return;
201
+
202
+ // update
176
203
 
177
204
  updateRefractorPlane();
178
205
  updateTextureMatrix( camera );
@@ -197,7 +224,6 @@
197
224
  }
198
225
 
199
226
  }
200
-
201
227
  Refractor.RefractorShader = {
202
228
  uniforms: {
203
229
  'color': {
@@ -210,9 +236,7 @@
210
236
  value: null
211
237
  }
212
238
  },
213
- vertexShader:
214
- /* glsl */
215
- `
239
+ vertexShader: /* glsl */`
216
240
 
217
241
  uniform mat4 textureMatrix;
218
242
 
@@ -224,9 +248,7 @@
224
248
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
225
249
 
226
250
  }`,
227
- fragmentShader:
228
- /* glsl */
229
- `
251
+ fragmentShader: /* glsl */`
230
252
 
231
253
  uniform vec3 color;
232
254
  uniform sampler2D tDiffuse;
@@ -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 ) {
@@ -27,10 +26,10 @@
27
26
  this.matrixAutoUpdate = false;
28
27
 
29
28
  }
30
-
31
29
  update( plane, lightPosition4D ) {
32
30
 
33
31
  // based on https://www.opengl.org/archives/resources/features/StencilTalk/tsld021.htm
32
+
34
33
  const dot = plane.normal.x * lightPosition4D.x + plane.normal.y * lightPosition4D.y + plane.normal.z * lightPosition4D.z + - plane.constant * lightPosition4D.w;
35
34
  const sme = _shadowMatrix.elements;
36
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>