three-stdlib 2.35.3 → 2.35.4

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 (514) hide show
  1. package/_polyfill/CapsuleGeometry.cjs +20 -17
  2. package/_polyfill/CapsuleGeometry.cjs.map +1 -1
  3. package/_polyfill/CapsuleGeometry.js +20 -17
  4. package/_polyfill/CapsuleGeometry.js.map +1 -1
  5. package/_polyfill/constants.cjs +1 -1
  6. package/_polyfill/constants.cjs.map +1 -1
  7. package/_polyfill/constants.js +1 -1
  8. package/_polyfill/constants.js.map +1 -1
  9. package/animation/AnimationClipCreator.cjs +13 -13
  10. package/animation/AnimationClipCreator.cjs.map +1 -1
  11. package/animation/AnimationClipCreator.js +13 -13
  12. package/animation/AnimationClipCreator.js.map +1 -1
  13. package/animation/CCDIKSolver.cjs +11 -11
  14. package/animation/CCDIKSolver.cjs.map +1 -1
  15. package/animation/CCDIKSolver.js +12 -12
  16. package/animation/CCDIKSolver.js.map +1 -1
  17. package/animation/MMDAnimationHelper.cjs +1 -1
  18. package/animation/MMDAnimationHelper.cjs.map +1 -1
  19. package/animation/MMDAnimationHelper.js +1 -1
  20. package/animation/MMDAnimationHelper.js.map +1 -1
  21. package/animation/MMDPhysics.cjs +4 -4
  22. package/animation/MMDPhysics.cjs.map +1 -1
  23. package/animation/MMDPhysics.js +4 -4
  24. package/animation/MMDPhysics.js.map +1 -1
  25. package/controls/ArcballControls.cjs +2 -2
  26. package/controls/ArcballControls.cjs.map +1 -1
  27. package/controls/ArcballControls.js +3 -3
  28. package/controls/ArcballControls.js.map +1 -1
  29. package/controls/FirstPersonControls.cjs +1 -1
  30. package/controls/FirstPersonControls.cjs.map +1 -1
  31. package/controls/FirstPersonControls.js +1 -1
  32. package/controls/FirstPersonControls.js.map +1 -1
  33. package/controls/OrbitControls.cjs +2 -2
  34. package/controls/OrbitControls.cjs.map +1 -1
  35. package/controls/OrbitControls.js +3 -3
  36. package/controls/OrbitControls.js.map +1 -1
  37. package/controls/PointerLockControls.cjs +2 -2
  38. package/controls/PointerLockControls.cjs.map +1 -1
  39. package/controls/PointerLockControls.js +3 -3
  40. package/controls/PointerLockControls.js.map +1 -1
  41. package/csm/CSM.cjs +4 -4
  42. package/csm/CSM.cjs.map +1 -1
  43. package/csm/CSM.js +5 -5
  44. package/csm/CSM.js.map +1 -1
  45. package/csm/CSMFrustum.cjs +1 -1
  46. package/csm/CSMFrustum.cjs.map +1 -1
  47. package/csm/CSMFrustum.js +2 -2
  48. package/csm/CSMFrustum.js.map +1 -1
  49. package/deprecated/Geometry.cjs +722 -715
  50. package/deprecated/Geometry.cjs.map +1 -1
  51. package/deprecated/Geometry.js +723 -716
  52. package/deprecated/Geometry.js.map +1 -1
  53. package/effects/AnaglyphEffect.cjs +2 -1
  54. package/effects/AnaglyphEffect.cjs.map +1 -1
  55. package/effects/AnaglyphEffect.js +3 -2
  56. package/effects/AnaglyphEffect.js.map +1 -1
  57. package/effects/OutlineEffect.cjs +2 -1
  58. package/effects/OutlineEffect.cjs.map +1 -1
  59. package/effects/OutlineEffect.js +3 -2
  60. package/effects/OutlineEffect.js.map +1 -1
  61. package/effects/ParallaxBarrierEffect.cjs +2 -1
  62. package/effects/ParallaxBarrierEffect.cjs.map +1 -1
  63. package/effects/ParallaxBarrierEffect.js +3 -2
  64. package/effects/ParallaxBarrierEffect.js.map +1 -1
  65. package/exporters/DRACOExporter.cjs +133 -122
  66. package/exporters/DRACOExporter.cjs.map +1 -1
  67. package/exporters/DRACOExporter.d.ts +23 -21
  68. package/exporters/DRACOExporter.js +133 -122
  69. package/exporters/DRACOExporter.js.map +1 -1
  70. package/exporters/GLTFExporter.cjs +170 -167
  71. package/exporters/GLTFExporter.cjs.map +1 -1
  72. package/exporters/GLTFExporter.js +170 -167
  73. package/exporters/GLTFExporter.js.map +1 -1
  74. package/geometries/LightningStrike.cjs +524 -515
  75. package/geometries/LightningStrike.cjs.map +1 -1
  76. package/geometries/LightningStrike.js +524 -515
  77. package/geometries/LightningStrike.js.map +1 -1
  78. package/geometries/RoundedBoxGeometry.cjs +1 -1
  79. package/geometries/RoundedBoxGeometry.cjs.map +1 -1
  80. package/geometries/RoundedBoxGeometry.js +2 -2
  81. package/geometries/RoundedBoxGeometry.js.map +1 -1
  82. package/helpers/RaycasterHelper.cjs +2 -2
  83. package/helpers/RaycasterHelper.cjs.map +1 -1
  84. package/helpers/RaycasterHelper.js +3 -3
  85. package/helpers/RaycasterHelper.js.map +1 -1
  86. package/helpers/VertexNormalsHelper.cjs +3 -3
  87. package/helpers/VertexNormalsHelper.cjs.map +1 -1
  88. package/helpers/VertexNormalsHelper.js +4 -4
  89. package/helpers/VertexNormalsHelper.js.map +1 -1
  90. package/helpers/VertexTangentsHelper.cjs +2 -2
  91. package/helpers/VertexTangentsHelper.cjs.map +1 -1
  92. package/helpers/VertexTangentsHelper.js +3 -3
  93. package/helpers/VertexTangentsHelper.js.map +1 -1
  94. package/interactive/InteractiveGroup.cjs +1 -1
  95. package/interactive/InteractiveGroup.cjs.map +1 -1
  96. package/interactive/InteractiveGroup.js +2 -2
  97. package/interactive/InteractiveGroup.js.map +1 -1
  98. package/interactive/SelectionBox.cjs +15 -15
  99. package/interactive/SelectionBox.cjs.map +1 -1
  100. package/interactive/SelectionBox.js +16 -16
  101. package/interactive/SelectionBox.js.map +1 -1
  102. package/libs/chevrotain.cjs +1 -1
  103. package/libs/chevrotain.cjs.map +1 -1
  104. package/libs/chevrotain.js +1 -1
  105. package/libs/chevrotain.js.map +1 -1
  106. package/libs/lottie.cjs +1 -1
  107. package/libs/lottie.cjs.map +1 -1
  108. package/libs/lottie.js +1 -1
  109. package/libs/lottie.js.map +1 -1
  110. package/libs/opentype.cjs +1 -1
  111. package/libs/opentype.cjs.map +1 -1
  112. package/libs/opentype.js +1 -1
  113. package/libs/opentype.js.map +1 -1
  114. package/lights/LightProbeGenerator.cjs +5 -5
  115. package/lights/LightProbeGenerator.cjs.map +1 -1
  116. package/lights/LightProbeGenerator.js +5 -5
  117. package/lights/LightProbeGenerator.js.map +1 -1
  118. package/lights/RectAreaLightUniformsLib.cjs +3 -3
  119. package/lights/RectAreaLightUniformsLib.cjs.map +1 -1
  120. package/lights/RectAreaLightUniformsLib.js +3 -3
  121. package/lights/RectAreaLightUniformsLib.js.map +1 -1
  122. package/lines/LineMaterial.cjs +2 -1
  123. package/lines/LineMaterial.cjs.map +1 -1
  124. package/lines/LineMaterial.js +3 -2
  125. package/lines/LineMaterial.js.map +1 -1
  126. package/lines/LineSegments2.cjs +13 -13
  127. package/lines/LineSegments2.cjs.map +1 -1
  128. package/lines/LineSegments2.js +14 -14
  129. package/lines/LineSegments2.js.map +1 -1
  130. package/lines/LineSegmentsGeometry.cjs +2 -2
  131. package/lines/LineSegmentsGeometry.cjs.map +1 -1
  132. package/lines/LineSegmentsGeometry.js +3 -3
  133. package/lines/LineSegmentsGeometry.js.map +1 -1
  134. package/lines/Wireframe.cjs +3 -3
  135. package/lines/Wireframe.cjs.map +1 -1
  136. package/lines/Wireframe.js +4 -4
  137. package/lines/Wireframe.js.map +1 -1
  138. package/loaders/BasisTextureLoader.cjs +441 -435
  139. package/loaders/BasisTextureLoader.cjs.map +1 -1
  140. package/loaders/BasisTextureLoader.js +441 -435
  141. package/loaders/BasisTextureLoader.js.map +1 -1
  142. package/loaders/EXRLoader.cjs +2 -1
  143. package/loaders/EXRLoader.cjs.map +1 -1
  144. package/loaders/EXRLoader.js +3 -2
  145. package/loaders/EXRLoader.js.map +1 -1
  146. package/loaders/FBXLoader.cjs +2 -2
  147. package/loaders/FBXLoader.cjs.map +1 -1
  148. package/loaders/FBXLoader.js +2 -2
  149. package/loaders/FBXLoader.js.map +1 -1
  150. package/loaders/FontLoader.cjs +2 -2
  151. package/loaders/FontLoader.cjs.map +1 -1
  152. package/loaders/FontLoader.d.ts +2 -2
  153. package/loaders/FontLoader.js +2 -2
  154. package/loaders/FontLoader.js.map +1 -1
  155. package/loaders/GLTFLoader.cjs +2 -2
  156. package/loaders/GLTFLoader.cjs.map +1 -1
  157. package/loaders/GLTFLoader.js +2 -2
  158. package/loaders/GLTFLoader.js.map +1 -1
  159. package/loaders/KTX2Loader.cjs +377 -374
  160. package/loaders/KTX2Loader.cjs.map +1 -1
  161. package/loaders/KTX2Loader.js +377 -374
  162. package/loaders/KTX2Loader.js.map +1 -1
  163. package/loaders/LDrawLoader.cjs +5 -4
  164. package/loaders/LDrawLoader.cjs.map +1 -1
  165. package/loaders/LDrawLoader.js +6 -5
  166. package/loaders/LDrawLoader.js.map +1 -1
  167. package/loaders/OBJLoader.cjs +5 -5
  168. package/loaders/OBJLoader.cjs.map +1 -1
  169. package/loaders/OBJLoader.js +6 -6
  170. package/loaders/OBJLoader.js.map +1 -1
  171. package/loaders/PRWMLoader.cjs +46 -43
  172. package/loaders/PRWMLoader.cjs.map +1 -1
  173. package/loaders/PRWMLoader.js +46 -43
  174. package/loaders/PRWMLoader.js.map +1 -1
  175. package/loaders/SVGLoader.cjs +1694 -1688
  176. package/loaders/SVGLoader.cjs.map +1 -1
  177. package/loaders/SVGLoader.js +1694 -1688
  178. package/loaders/SVGLoader.js.map +1 -1
  179. package/loaders/XLoader.cjs +1 -1
  180. package/loaders/XLoader.cjs.map +1 -1
  181. package/loaders/XLoader.js +1 -1
  182. package/loaders/XLoader.js.map +1 -1
  183. package/math/Capsule.cjs +3 -3
  184. package/math/Capsule.cjs.map +1 -1
  185. package/math/Capsule.js +3 -3
  186. package/math/Capsule.js.map +1 -1
  187. package/math/ColorConverter.cjs +9 -9
  188. package/math/ColorConverter.cjs.map +1 -1
  189. package/math/ColorConverter.js +9 -9
  190. package/math/ColorConverter.js.map +1 -1
  191. package/math/ConvexHull.cjs +53 -50
  192. package/math/ConvexHull.cjs.map +1 -1
  193. package/math/ConvexHull.js +53 -50
  194. package/math/ConvexHull.js.map +1 -1
  195. package/math/ImprovedNoise.cjs +1 -1
  196. package/math/ImprovedNoise.cjs.map +1 -1
  197. package/math/ImprovedNoise.js +1 -1
  198. package/math/ImprovedNoise.js.map +1 -1
  199. package/math/MeshSurfaceSampler.cjs +2 -2
  200. package/math/MeshSurfaceSampler.cjs.map +1 -1
  201. package/math/MeshSurfaceSampler.js +2 -2
  202. package/math/MeshSurfaceSampler.js.map +1 -1
  203. package/math/OBB.cjs +14 -14
  204. package/math/OBB.cjs.map +1 -1
  205. package/math/OBB.js +15 -15
  206. package/math/OBB.js.map +1 -1
  207. package/math/Octree.cjs +7 -7
  208. package/math/Octree.cjs.map +1 -1
  209. package/math/Octree.js +8 -8
  210. package/math/Octree.js.map +1 -1
  211. package/misc/ConvexObjectBreaker.cjs +271 -268
  212. package/misc/ConvexObjectBreaker.cjs.map +1 -1
  213. package/misc/ConvexObjectBreaker.js +272 -269
  214. package/misc/ConvexObjectBreaker.js.map +1 -1
  215. package/misc/Gyroscope.cjs +6 -6
  216. package/misc/Gyroscope.cjs.map +1 -1
  217. package/misc/Gyroscope.js +7 -7
  218. package/misc/Gyroscope.js.map +1 -1
  219. package/modifiers/CurveModifier.cjs +1 -1
  220. package/modifiers/CurveModifier.cjs.map +1 -1
  221. package/modifiers/CurveModifier.js +2 -2
  222. package/modifiers/CurveModifier.js.map +1 -1
  223. package/modifiers/SimplifyModifier.cjs +2 -2
  224. package/modifiers/SimplifyModifier.cjs.map +1 -1
  225. package/modifiers/SimplifyModifier.js +2 -2
  226. package/modifiers/SimplifyModifier.js.map +1 -1
  227. package/objects/BatchedMesh.cjs +2 -2
  228. package/objects/BatchedMesh.cjs.map +1 -1
  229. package/objects/BatchedMesh.js +3 -3
  230. package/objects/BatchedMesh.js.map +1 -1
  231. package/objects/GroundProjectedEnv.cjs +2 -1
  232. package/objects/GroundProjectedEnv.cjs.map +1 -1
  233. package/objects/GroundProjectedEnv.js +3 -2
  234. package/objects/GroundProjectedEnv.js.map +1 -1
  235. package/objects/Lensflare.cjs +209 -206
  236. package/objects/Lensflare.cjs.map +1 -1
  237. package/objects/Lensflare.js +209 -206
  238. package/objects/Lensflare.js.map +1 -1
  239. package/objects/Reflector.cjs +154 -146
  240. package/objects/Reflector.cjs.map +1 -1
  241. package/objects/Reflector.js +154 -146
  242. package/objects/Reflector.js.map +1 -1
  243. package/objects/ReflectorForSSRPass.cjs +183 -180
  244. package/objects/ReflectorForSSRPass.cjs.map +1 -1
  245. package/objects/ReflectorForSSRPass.js +183 -180
  246. package/objects/ReflectorForSSRPass.js.map +1 -1
  247. package/objects/Refractor.cjs +164 -161
  248. package/objects/Refractor.cjs.map +1 -1
  249. package/objects/Refractor.js +164 -161
  250. package/objects/Refractor.js.map +1 -1
  251. package/objects/ShadowMesh.cjs +1 -1
  252. package/objects/ShadowMesh.cjs.map +1 -1
  253. package/objects/ShadowMesh.js +2 -2
  254. package/objects/ShadowMesh.js.map +1 -1
  255. package/objects/Sky.cjs +35 -32
  256. package/objects/Sky.cjs.map +1 -1
  257. package/objects/Sky.d.ts +100 -6
  258. package/objects/Sky.js +35 -32
  259. package/objects/Sky.js.map +1 -1
  260. package/objects/Water.cjs +2 -1
  261. package/objects/Water.cjs.map +1 -1
  262. package/objects/Water.js +3 -2
  263. package/objects/Water.js.map +1 -1
  264. package/objects/Water2.cjs +143 -140
  265. package/objects/Water2.cjs.map +1 -1
  266. package/objects/Water2.js +143 -140
  267. package/objects/Water2.js.map +1 -1
  268. package/package.json +1 -1
  269. package/postprocessing/SAOPass.cjs +267 -264
  270. package/postprocessing/SAOPass.cjs.map +1 -1
  271. package/postprocessing/SAOPass.js +267 -264
  272. package/postprocessing/SAOPass.js.map +1 -1
  273. package/postprocessing/SSAOPass.cjs +253 -250
  274. package/postprocessing/SSAOPass.cjs.map +1 -1
  275. package/postprocessing/SSAOPass.js +253 -250
  276. package/postprocessing/SSAOPass.js.map +1 -1
  277. package/postprocessing/SSRPass.cjs +379 -376
  278. package/postprocessing/SSRPass.cjs.map +1 -1
  279. package/postprocessing/SSRPass.js +379 -376
  280. package/postprocessing/SSRPass.js.map +1 -1
  281. package/postprocessing/UnrealBloomPass.cjs +205 -202
  282. package/postprocessing/UnrealBloomPass.cjs.map +1 -1
  283. package/postprocessing/UnrealBloomPass.js +205 -202
  284. package/postprocessing/UnrealBloomPass.js.map +1 -1
  285. package/renderers/CSS2DRenderer.cjs +5 -5
  286. package/renderers/CSS2DRenderer.cjs.map +1 -1
  287. package/renderers/CSS2DRenderer.js +5 -5
  288. package/renderers/CSS2DRenderer.js.map +1 -1
  289. package/renderers/CSS3DRenderer.cjs +5 -5
  290. package/renderers/CSS3DRenderer.cjs.map +1 -1
  291. package/renderers/CSS3DRenderer.js +6 -6
  292. package/renderers/CSS3DRenderer.js.map +1 -1
  293. package/shaders/ACESFilmicToneMappingShader.cjs +71 -46
  294. package/shaders/ACESFilmicToneMappingShader.cjs.map +1 -1
  295. package/shaders/ACESFilmicToneMappingShader.js +71 -46
  296. package/shaders/ACESFilmicToneMappingShader.js.map +1 -1
  297. package/shaders/AfterimageShader.cjs +41 -22
  298. package/shaders/AfterimageShader.cjs.map +1 -1
  299. package/shaders/AfterimageShader.js +41 -22
  300. package/shaders/AfterimageShader.js.map +1 -1
  301. package/shaders/BasicShader.cjs +20 -6
  302. package/shaders/BasicShader.cjs.map +1 -1
  303. package/shaders/BasicShader.js +20 -6
  304. package/shaders/BasicShader.js.map +1 -1
  305. package/shaders/BleachBypassShader.cjs +46 -26
  306. package/shaders/BleachBypassShader.cjs.map +1 -1
  307. package/shaders/BleachBypassShader.js +46 -26
  308. package/shaders/BleachBypassShader.js.map +1 -1
  309. package/shaders/BlendShader.cjs +33 -19
  310. package/shaders/BlendShader.cjs.map +1 -1
  311. package/shaders/BlendShader.js +33 -19
  312. package/shaders/BlendShader.js.map +1 -1
  313. package/shaders/BokehShader.cjs +117 -90
  314. package/shaders/BokehShader.cjs.map +1 -1
  315. package/shaders/BokehShader.js +117 -90
  316. package/shaders/BokehShader.js.map +1 -1
  317. package/shaders/BokehShader2.cjs +333 -232
  318. package/shaders/BokehShader2.cjs.map +1 -1
  319. package/shaders/BokehShader2.js +333 -232
  320. package/shaders/BokehShader2.js.map +1 -1
  321. package/shaders/BrightnessContrastShader.cjs +38 -22
  322. package/shaders/BrightnessContrastShader.cjs.map +1 -1
  323. package/shaders/BrightnessContrastShader.js +38 -22
  324. package/shaders/BrightnessContrastShader.js.map +1 -1
  325. package/shaders/ColorCorrectionShader.cjs +35 -21
  326. package/shaders/ColorCorrectionShader.cjs.map +1 -1
  327. package/shaders/ColorCorrectionShader.js +35 -21
  328. package/shaders/ColorCorrectionShader.js.map +1 -1
  329. package/shaders/ColorifyShader.cjs +34 -19
  330. package/shaders/ColorifyShader.cjs.map +1 -1
  331. package/shaders/ColorifyShader.js +34 -19
  332. package/shaders/ColorifyShader.js.map +1 -1
  333. package/shaders/ConvolutionShader.cjs +43 -24
  334. package/shaders/ConvolutionShader.cjs.map +1 -1
  335. package/shaders/ConvolutionShader.js +43 -24
  336. package/shaders/ConvolutionShader.js.map +1 -1
  337. package/shaders/CopyShader.cjs +30 -16
  338. package/shaders/CopyShader.cjs.map +1 -1
  339. package/shaders/CopyShader.js +30 -16
  340. package/shaders/CopyShader.js.map +1 -1
  341. package/shaders/DOFMipMapShader.cjs +38 -21
  342. package/shaders/DOFMipMapShader.cjs.map +1 -1
  343. package/shaders/DOFMipMapShader.js +38 -21
  344. package/shaders/DOFMipMapShader.js.map +1 -1
  345. package/shaders/DepthLimitedBlurShader.cjs +98 -69
  346. package/shaders/DepthLimitedBlurShader.cjs.map +1 -1
  347. package/shaders/DepthLimitedBlurShader.js +98 -69
  348. package/shaders/DepthLimitedBlurShader.js.map +1 -1
  349. package/shaders/DigitalGlitch.cjs +70 -59
  350. package/shaders/DigitalGlitch.cjs.map +1 -1
  351. package/shaders/DigitalGlitch.js +70 -59
  352. package/shaders/DigitalGlitch.js.map +1 -1
  353. package/shaders/DotScreenShader.cjs +49 -28
  354. package/shaders/DotScreenShader.cjs.map +1 -1
  355. package/shaders/DotScreenShader.js +49 -28
  356. package/shaders/DotScreenShader.js.map +1 -1
  357. package/shaders/FXAAShader.cjs +1098 -1089
  358. package/shaders/FXAAShader.cjs.map +1 -1
  359. package/shaders/FXAAShader.js +1098 -1089
  360. package/shaders/FXAAShader.js.map +1 -1
  361. package/shaders/FilmShader.cjs +57 -29
  362. package/shaders/FilmShader.cjs.map +1 -1
  363. package/shaders/FilmShader.js +57 -29
  364. package/shaders/FilmShader.js.map +1 -1
  365. package/shaders/FocusShader.cjs +70 -43
  366. package/shaders/FocusShader.cjs.map +1 -1
  367. package/shaders/FocusShader.js +70 -43
  368. package/shaders/FocusShader.js.map +1 -1
  369. package/shaders/FreiChenShader.cjs +74 -53
  370. package/shaders/FreiChenShader.cjs.map +1 -1
  371. package/shaders/FreiChenShader.js +74 -53
  372. package/shaders/FreiChenShader.js.map +1 -1
  373. package/shaders/FresnelShader.cjs +55 -35
  374. package/shaders/FresnelShader.cjs.map +1 -1
  375. package/shaders/FresnelShader.js +55 -35
  376. package/shaders/FresnelShader.js.map +1 -1
  377. package/shaders/GammaCorrectionShader.cjs +33 -19
  378. package/shaders/GammaCorrectionShader.cjs.map +1 -1
  379. package/shaders/GammaCorrectionShader.js +33 -19
  380. package/shaders/GammaCorrectionShader.js.map +1 -1
  381. package/shaders/GodRaysShader.cjs +193 -116
  382. package/shaders/GodRaysShader.cjs.map +1 -1
  383. package/shaders/GodRaysShader.js +193 -116
  384. package/shaders/GodRaysShader.js.map +1 -1
  385. package/shaders/HalftoneShader.cjs +270 -192
  386. package/shaders/HalftoneShader.cjs.map +1 -1
  387. package/shaders/HalftoneShader.js +270 -192
  388. package/shaders/HalftoneShader.js.map +1 -1
  389. package/shaders/HorizontalTiltShiftShader.cjs +43 -27
  390. package/shaders/HorizontalTiltShiftShader.cjs.map +1 -1
  391. package/shaders/HorizontalTiltShiftShader.js +43 -27
  392. package/shaders/HorizontalTiltShiftShader.js.map +1 -1
  393. package/shaders/HueSaturationShader.cjs +47 -31
  394. package/shaders/HueSaturationShader.cjs.map +1 -1
  395. package/shaders/HueSaturationShader.js +47 -31
  396. package/shaders/HueSaturationShader.js.map +1 -1
  397. package/shaders/KaleidoShader.cjs +37 -24
  398. package/shaders/KaleidoShader.cjs.map +1 -1
  399. package/shaders/KaleidoShader.js +37 -24
  400. package/shaders/KaleidoShader.js.map +1 -1
  401. package/shaders/LuminosityHighPassShader.cjs +43 -24
  402. package/shaders/LuminosityHighPassShader.cjs.map +1 -1
  403. package/shaders/LuminosityHighPassShader.js +43 -24
  404. package/shaders/LuminosityHighPassShader.js.map +1 -1
  405. package/shaders/LuminosityShader.cjs +34 -17
  406. package/shaders/LuminosityShader.cjs.map +1 -1
  407. package/shaders/LuminosityShader.js +34 -17
  408. package/shaders/LuminosityShader.js.map +1 -1
  409. package/shaders/MirrorShader.cjs +39 -26
  410. package/shaders/MirrorShader.cjs.map +1 -1
  411. package/shaders/MirrorShader.js +39 -26
  412. package/shaders/MirrorShader.js.map +1 -1
  413. package/shaders/NormalMapShader.cjs +36 -21
  414. package/shaders/NormalMapShader.cjs.map +1 -1
  415. package/shaders/NormalMapShader.js +36 -21
  416. package/shaders/NormalMapShader.js.map +1 -1
  417. package/shaders/ParallaxShader.cjs +147 -97
  418. package/shaders/ParallaxShader.cjs.map +1 -1
  419. package/shaders/ParallaxShader.js +147 -97
  420. package/shaders/ParallaxShader.js.map +1 -1
  421. package/shaders/PixelShader.cjs +31 -18
  422. package/shaders/PixelShader.cjs.map +1 -1
  423. package/shaders/PixelShader.js +31 -18
  424. package/shaders/PixelShader.js.map +1 -1
  425. package/shaders/RGBShiftShader.cjs +33 -20
  426. package/shaders/RGBShiftShader.cjs.map +1 -1
  427. package/shaders/RGBShiftShader.js +33 -20
  428. package/shaders/RGBShiftShader.js.map +1 -1
  429. package/shaders/SAOShader.cjs +154 -117
  430. package/shaders/SAOShader.cjs.map +1 -1
  431. package/shaders/SAOShader.js +154 -117
  432. package/shaders/SAOShader.js.map +1 -1
  433. package/shaders/SMAAShader.cjs +358 -270
  434. package/shaders/SMAAShader.cjs.map +1 -1
  435. package/shaders/SMAAShader.js +358 -270
  436. package/shaders/SMAAShader.js.map +1 -1
  437. package/shaders/SSAOShader.cjs +236 -142
  438. package/shaders/SSAOShader.cjs.map +1 -1
  439. package/shaders/SSAOShader.js +236 -142
  440. package/shaders/SSAOShader.js.map +1 -1
  441. package/shaders/SSRShader.cjs +4 -4
  442. package/shaders/SSRShader.cjs.map +1 -1
  443. package/shaders/SSRShader.js +4 -4
  444. package/shaders/SSRShader.js.map +1 -1
  445. package/shaders/SepiaShader.cjs +36 -20
  446. package/shaders/SepiaShader.cjs.map +1 -1
  447. package/shaders/SepiaShader.js +36 -20
  448. package/shaders/SepiaShader.js.map +1 -1
  449. package/shaders/SobelOperatorShader.cjs +64 -37
  450. package/shaders/SobelOperatorShader.cjs.map +1 -1
  451. package/shaders/SobelOperatorShader.js +64 -37
  452. package/shaders/SobelOperatorShader.js.map +1 -1
  453. package/shaders/TechnicolorShader.cjs +29 -16
  454. package/shaders/TechnicolorShader.cjs.map +1 -1
  455. package/shaders/TechnicolorShader.js +29 -16
  456. package/shaders/TechnicolorShader.js.map +1 -1
  457. package/shaders/ToneMapShader.cjs +55 -35
  458. package/shaders/ToneMapShader.cjs.map +1 -1
  459. package/shaders/ToneMapShader.js +55 -35
  460. package/shaders/ToneMapShader.js.map +1 -1
  461. package/shaders/ToonShader.cjs +275 -165
  462. package/shaders/ToonShader.cjs.map +1 -1
  463. package/shaders/ToonShader.js +275 -165
  464. package/shaders/ToonShader.js.map +1 -1
  465. package/shaders/TriangleBlurShader.cjs +50 -27
  466. package/shaders/TriangleBlurShader.cjs.map +1 -1
  467. package/shaders/TriangleBlurShader.js +50 -27
  468. package/shaders/TriangleBlurShader.js.map +1 -1
  469. package/shaders/UnpackDepthRGBAShader.cjs +32 -17
  470. package/shaders/UnpackDepthRGBAShader.cjs.map +1 -1
  471. package/shaders/UnpackDepthRGBAShader.js +32 -17
  472. package/shaders/UnpackDepthRGBAShader.js.map +1 -1
  473. package/shaders/VerticalTiltShiftShader.cjs +43 -27
  474. package/shaders/VerticalTiltShiftShader.cjs.map +1 -1
  475. package/shaders/VerticalTiltShiftShader.js +43 -27
  476. package/shaders/VerticalTiltShiftShader.js.map +1 -1
  477. package/shaders/VignetteShader.cjs +43 -27
  478. package/shaders/VignetteShader.cjs.map +1 -1
  479. package/shaders/VignetteShader.js +43 -27
  480. package/shaders/VignetteShader.js.map +1 -1
  481. package/shaders/VolumeShader.cjs +264 -213
  482. package/shaders/VolumeShader.cjs.map +1 -1
  483. package/shaders/VolumeShader.js +264 -213
  484. package/shaders/VolumeShader.js.map +1 -1
  485. package/shaders/WaterRefractionShader.cjs +63 -35
  486. package/shaders/WaterRefractionShader.cjs.map +1 -1
  487. package/shaders/WaterRefractionShader.js +63 -35
  488. package/shaders/WaterRefractionShader.js.map +1 -1
  489. package/utils/GeometryCompressionUtils.cjs +2 -1
  490. package/utils/GeometryCompressionUtils.cjs.map +1 -1
  491. package/utils/GeometryCompressionUtils.js +3 -2
  492. package/utils/GeometryCompressionUtils.js.map +1 -1
  493. package/utils/RoughnessMipmapper.cjs +3 -3
  494. package/utils/RoughnessMipmapper.cjs.map +1 -1
  495. package/utils/RoughnessMipmapper.js +4 -4
  496. package/utils/RoughnessMipmapper.js.map +1 -1
  497. package/webxr/ARButton.cjs +109 -106
  498. package/webxr/ARButton.cjs.map +1 -1
  499. package/webxr/ARButton.d.ts +4 -3
  500. package/webxr/ARButton.js +109 -106
  501. package/webxr/ARButton.js.map +1 -1
  502. package/webxr/OculusHandPointerModel.cjs +2 -2
  503. package/webxr/OculusHandPointerModel.cjs.map +1 -1
  504. package/webxr/OculusHandPointerModel.js +2 -2
  505. package/webxr/OculusHandPointerModel.js.map +1 -1
  506. package/webxr/VRButton.cjs +98 -95
  507. package/webxr/VRButton.cjs.map +1 -1
  508. package/webxr/VRButton.d.ts +6 -5
  509. package/webxr/VRButton.js +98 -95
  510. package/webxr/VRButton.js.map +1 -1
  511. package/webxr/XRHandPrimitiveModel.cjs +2 -2
  512. package/webxr/XRHandPrimitiveModel.cjs.map +1 -1
  513. package/webxr/XRHandPrimitiveModel.js +3 -3
  514. package/webxr/XRHandPrimitiveModel.js.map +1 -1
package/objects/Sky.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Mesh, ShaderMaterial, Vector3 } from 'three';
1
+ import { ShaderMaterial, Vector3 } from 'three';
2
2
  /**
3
3
  * Based on "A Practical Analytic Model for Daylight"
4
4
  * aka The Preetham Model, the de facto standard analytic skydome model
@@ -12,9 +12,101 @@ import { Mesh, ShaderMaterial, Vector3 } from 'three';
12
12
  *
13
13
  * Three.js integration by zz85 http://twitter.com/blurspline
14
14
  */
15
- declare class Sky extends Mesh {
16
- constructor();
17
- static SkyShader: {
15
+ declare const Sky: {
16
+ new (): {
17
+ geometry: import("three").BufferGeometry;
18
+ material: import("three").Material | import("three").Material[];
19
+ morphTargetInfluences?: number[] | undefined;
20
+ morphTargetDictionary?: {
21
+ [key: string]: number;
22
+ } | undefined;
23
+ readonly isMesh: true;
24
+ type: string;
25
+ updateMorphTargets(): void;
26
+ raycast(raycaster: import("three").Raycaster, intersects: import("three").Intersection[]): void;
27
+ id: number;
28
+ uuid: string;
29
+ name: string;
30
+ parent: import("three").Object3D | null;
31
+ children: import("three").Object3D[];
32
+ up: Vector3;
33
+ readonly position: Vector3;
34
+ readonly rotation: import("three").Euler;
35
+ readonly quaternion: import("three").Quaternion;
36
+ readonly scale: Vector3;
37
+ readonly modelViewMatrix: import("three").Matrix4;
38
+ readonly normalMatrix: import("three").Matrix3;
39
+ matrix: import("three").Matrix4;
40
+ matrixWorld: import("three").Matrix4;
41
+ matrixAutoUpdate: boolean;
42
+ matrixWorldNeedsUpdate: boolean;
43
+ layers: import("three").Layers;
44
+ visible: boolean;
45
+ castShadow: boolean;
46
+ receiveShadow: boolean;
47
+ frustumCulled: boolean;
48
+ renderOrder: number;
49
+ animations: import("three").AnimationClip[];
50
+ userData: {
51
+ [key: string]: any;
52
+ };
53
+ customDepthMaterial: import("three").Material;
54
+ customDistanceMaterial: import("three").Material;
55
+ readonly isObject3D: true;
56
+ onBeforeRender: (renderer: import("three").WebGLRenderer, scene: import("three").Scene, camera: import("three").Camera, geometry: import("three").BufferGeometry, material: import("three").Material, group: import("three").Group) => void;
57
+ onAfterRender: (renderer: import("three").WebGLRenderer, scene: import("three").Scene, camera: import("three").Camera, geometry: import("three").BufferGeometry, material: import("three").Material, group: import("three").Group) => void;
58
+ applyMatrix4(matrix: import("three").Matrix4): void;
59
+ applyQuaternion(quaternion: import("three").Quaternion): any;
60
+ setRotationFromAxisAngle(axis: Vector3, angle: number): void;
61
+ setRotationFromEuler(euler: import("three").Euler): void;
62
+ setRotationFromMatrix(m: import("three").Matrix4): void;
63
+ setRotationFromQuaternion(q: import("three").Quaternion): void;
64
+ rotateOnAxis(axis: Vector3, angle: number): any;
65
+ rotateOnWorldAxis(axis: Vector3, angle: number): any;
66
+ rotateX(angle: number): any;
67
+ rotateY(angle: number): any;
68
+ rotateZ(angle: number): any;
69
+ translateOnAxis(axis: Vector3, distance: number): any;
70
+ translateX(distance: number): any;
71
+ translateY(distance: number): any;
72
+ translateZ(distance: number): any;
73
+ localToWorld(vector: Vector3): Vector3;
74
+ worldToLocal(vector: Vector3): Vector3;
75
+ lookAt(vector: number | Vector3, y?: number | undefined, z?: number | undefined): void;
76
+ add(...object: import("three").Object3D[]): any;
77
+ remove(...object: import("three").Object3D[]): any;
78
+ clear(): any;
79
+ attach(object: import("three").Object3D): any;
80
+ getObjectById(id: number): import("three").Object3D | undefined;
81
+ getObjectByName(name: string): import("three").Object3D | undefined;
82
+ getObjectByProperty(name: string, value: string): import("three").Object3D | undefined;
83
+ getWorldPosition(target: Vector3): Vector3;
84
+ getWorldQuaternion(target: import("three").Quaternion): import("three").Quaternion;
85
+ getWorldScale(target: Vector3): Vector3;
86
+ getWorldDirection(target: Vector3): Vector3;
87
+ traverse(callback: (object: import("three").Object3D) => any): void;
88
+ traverseVisible(callback: (object: import("three").Object3D) => any): void;
89
+ traverseAncestors(callback: (object: import("three").Object3D) => any): void;
90
+ updateMatrix(): void;
91
+ updateMatrixWorld(force?: boolean | undefined): void;
92
+ updateWorldMatrix(updateParents: boolean, updateChildren: boolean): void;
93
+ toJSON(meta?: {
94
+ geometries: any;
95
+ materials: any;
96
+ textures: any;
97
+ images: any;
98
+ } | undefined): any;
99
+ clone(recursive?: boolean | undefined): any;
100
+ copy(source: any, recursive?: boolean | undefined): any;
101
+ addEventListener(type: string, listener: (event: import("three").Event) => void): void;
102
+ hasEventListener(type: string, listener: (event: import("three").Event) => void): boolean;
103
+ removeEventListener(type: string, listener: (event: import("three").Event) => void): void;
104
+ dispatchEvent(event: {
105
+ [attachment: string]: any;
106
+ type: string;
107
+ }): void;
108
+ };
109
+ SkyShader: {
18
110
  uniforms: {
19
111
  turbidity: {
20
112
  value: number;
@@ -38,6 +130,8 @@ declare class Sky extends Mesh {
38
130
  vertexShader: string;
39
131
  fragmentShader: string;
40
132
  };
41
- static material: ShaderMaterial;
42
- }
133
+ material: ShaderMaterial;
134
+ DefaultUp: Vector3;
135
+ DefaultMatrixAutoUpdate: boolean;
136
+ };
43
137
  export { Sky };
package/objects/Sky.js CHANGED
@@ -6,18 +6,19 @@ var __publicField = (obj, key, value) => {
6
6
  };
7
7
  import { Vector3, ShaderMaterial, UniformsUtils, BackSide, Mesh, BoxGeometry } from "three";
8
8
  import { version } from "../_polyfill/constants.js";
9
- const SkyShader = {
10
- uniforms: {
11
- turbidity: { value: 2 },
12
- rayleigh: { value: 1 },
13
- mieCoefficient: { value: 5e-3 },
14
- mieDirectionalG: { value: 0.8 },
15
- sunPosition: { value: new Vector3() },
16
- up: { value: new Vector3(0, 1, 0) }
17
- },
18
- vertexShader: (
19
- /* glsl */
20
- `
9
+ const Sky = /* @__PURE__ */ (() => {
10
+ const SkyShader = {
11
+ uniforms: {
12
+ turbidity: { value: 2 },
13
+ rayleigh: { value: 1 },
14
+ mieCoefficient: { value: 5e-3 },
15
+ mieDirectionalG: { value: 0.8 },
16
+ sunPosition: { value: new Vector3() },
17
+ up: { value: new Vector3(0, 1, 0) }
18
+ },
19
+ vertexShader: (
20
+ /* glsl */
21
+ `
21
22
  uniform vec3 sunPosition;
22
23
  uniform float rayleigh;
23
24
  uniform float turbidity;
@@ -89,10 +90,10 @@ const SkyShader = {
89
90
 
90
91
  }
91
92
  `
92
- ),
93
- fragmentShader: (
94
- /* glsl */
95
- `
93
+ ),
94
+ fragmentShader: (
95
+ /* glsl */
96
+ `
96
97
  varying vec3 vWorldPosition;
97
98
  varying vec3 vSunDirection;
98
99
  varying float vSunfade;
@@ -179,23 +180,25 @@ const SkyShader = {
179
180
 
180
181
  }
181
182
  `
182
- )
183
- };
184
- const material = new ShaderMaterial({
185
- name: "SkyShader",
186
- fragmentShader: SkyShader.fragmentShader,
187
- vertexShader: SkyShader.vertexShader,
188
- uniforms: UniformsUtils.clone(SkyShader.uniforms),
189
- side: BackSide,
190
- depthWrite: false
191
- });
192
- class Sky extends Mesh {
193
- constructor() {
194
- super(new BoxGeometry(1, 1, 1), material);
183
+ )
184
+ };
185
+ const material = new ShaderMaterial({
186
+ name: "SkyShader",
187
+ fragmentShader: SkyShader.fragmentShader,
188
+ vertexShader: SkyShader.vertexShader,
189
+ uniforms: UniformsUtils.clone(SkyShader.uniforms),
190
+ side: BackSide,
191
+ depthWrite: false
192
+ });
193
+ class Sky2 extends Mesh {
194
+ constructor() {
195
+ super(new BoxGeometry(1, 1, 1), material);
196
+ }
195
197
  }
196
- }
197
- __publicField(Sky, "SkyShader", SkyShader);
198
- __publicField(Sky, "material", material);
198
+ __publicField(Sky2, "SkyShader", SkyShader);
199
+ __publicField(Sky2, "material", material);
200
+ return Sky2;
201
+ })();
199
202
  export {
200
203
  Sky
201
204
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Sky.js","sources":["../../src/objects/Sky.ts"],"sourcesContent":["import { BackSide, BoxGeometry, Mesh, ShaderMaterial, UniformsUtils, Vector3 } from 'three'\nimport { version } from '../_polyfill/constants'\n\nconst SkyShader = {\n uniforms: {\n turbidity: { value: 2 },\n rayleigh: { value: 1 },\n mieCoefficient: { value: 0.005 },\n mieDirectionalG: { value: 0.8 },\n sunPosition: { value: new Vector3() },\n up: { value: new Vector3(0, 1, 0) },\n },\n\n vertexShader: /* glsl */ `\n uniform vec3 sunPosition;\n uniform float rayleigh;\n uniform float turbidity;\n uniform float mieCoefficient;\n uniform vec3 up;\n\n varying vec3 vWorldPosition;\n varying vec3 vSunDirection;\n varying float vSunfade;\n varying vec3 vBetaR;\n varying vec3 vBetaM;\n varying float vSunE;\n\n // constants for atmospheric scattering\n const float e = 2.71828182845904523536028747135266249775724709369995957;\n const float pi = 3.141592653589793238462643383279502884197169;\n\n // wavelength of used primaries, according to preetham\n const vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );\n // this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function:\n // (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))\n const vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );\n\n // mie stuff\n // K coefficient for the primaries\n const float v = 4.0;\n const vec3 K = vec3( 0.686, 0.678, 0.666 );\n // MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K\n const vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 );\n\n // earth shadow hack\n // cutoffAngle = pi / 1.95;\n const float cutoffAngle = 1.6110731556870734;\n const float steepness = 1.5;\n const float EE = 1000.0;\n\n float sunIntensity( float zenithAngleCos ) {\n zenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 );\n return EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) );\n }\n\n vec3 totalMie( float T ) {\n float c = ( 0.2 * T ) * 10E-18;\n return 0.434 * c * MieConst;\n }\n\n void main() {\n\n vec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n vWorldPosition = worldPosition.xyz;\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n gl_Position.z = gl_Position.w; // set z to camera.far\n\n vSunDirection = normalize( sunPosition );\n\n vSunE = sunIntensity( dot( vSunDirection, up ) );\n\n vSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 );\n\n float rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );\n\n // extinction (absorbtion + out scattering)\n // rayleigh coefficients\n vBetaR = totalRayleigh * rayleighCoefficient;\n\n // mie coefficients\n vBetaM = totalMie( turbidity ) * mieCoefficient;\n\n }\n `,\n\n fragmentShader: /* glsl */ `\n varying vec3 vWorldPosition;\n varying vec3 vSunDirection;\n varying float vSunfade;\n varying vec3 vBetaR;\n varying vec3 vBetaM;\n varying float vSunE;\n\n uniform float mieDirectionalG;\n uniform vec3 up;\n\n const vec3 cameraPos = vec3( 0.0, 0.0, 0.0 );\n\n // constants for atmospheric scattering\n const float pi = 3.141592653589793238462643383279502884197169;\n\n const float n = 1.0003; // refractive index of air\n const float N = 2.545E25; // number of molecules per unit volume for air at 288.15K and 1013mb (sea level -45 celsius)\n\n // optical length at zenith for molecules\n const float rayleighZenithLength = 8.4E3;\n const float mieZenithLength = 1.25E3;\n // 66 arc seconds -> degrees, and the cosine of that\n const float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;\n\n // 3.0 / ( 16.0 * pi )\n const float THREE_OVER_SIXTEENPI = 0.05968310365946075;\n // 1.0 / ( 4.0 * pi )\n const float ONE_OVER_FOURPI = 0.07957747154594767;\n\n float rayleighPhase( float cosTheta ) {\n return THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) );\n }\n\n float hgPhase( float cosTheta, float g ) {\n float g2 = pow( g, 2.0 );\n float inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 );\n return ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse );\n }\n\n void main() {\n\n vec3 direction = normalize( vWorldPosition - cameraPos );\n\n // optical length\n // cutoff angle at 90 to avoid singularity in next formula.\n float zenithAngle = acos( max( 0.0, dot( up, direction ) ) );\n float inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) );\n float sR = rayleighZenithLength * inverse;\n float sM = mieZenithLength * inverse;\n\n // combined extinction factor\n vec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) );\n\n // in scattering\n float cosTheta = dot( direction, vSunDirection );\n\n float rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 );\n vec3 betaRTheta = vBetaR * rPhase;\n\n float mPhase = hgPhase( cosTheta, mieDirectionalG );\n vec3 betaMTheta = vBetaM * mPhase;\n\n vec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) );\n Lin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );\n\n // nightsky\n float theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2]\n float phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2]\n vec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 );\n vec3 L0 = vec3( 0.1 ) * Fex;\n\n // composition + solar disc\n float sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );\n L0 += ( vSunE * 19000.0 * Fex ) * sundisk;\n\n vec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );\n\n vec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );\n\n gl_FragColor = vec4( retColor, 1.0 );\n\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n\n }\n `,\n}\n\nconst material = new ShaderMaterial({\n name: 'SkyShader',\n fragmentShader: SkyShader.fragmentShader,\n vertexShader: SkyShader.vertexShader,\n uniforms: UniformsUtils.clone(SkyShader.uniforms),\n side: BackSide,\n depthWrite: false,\n})\n\n/**\n * Based on \"A Practical Analytic Model for Daylight\"\n * aka The Preetham Model, the de facto standard analytic skydome model\n * https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight\n *\n * First implemented by Simon Wallner\n * http://www.simonwallner.at/projects/atmospheric-scattering\n *\n * Improved by Martin Upitis\n * http://blenderartists.org/forum/showthread.php?245954-preethams-sky-impementation-HDR\n *\n * Three.js integration by zz85 http://twitter.com/blurspline\n */\nclass Sky extends Mesh {\n constructor() {\n super(new BoxGeometry(1, 1, 1), material)\n }\n\n static SkyShader = SkyShader\n public static material = material\n}\n\nexport { Sky }\n"],"names":[],"mappings":";;;;;;;;AAGA,MAAM,YAAY;AAAA,EAChB,UAAU;AAAA,IACR,WAAW,EAAE,OAAO,EAAE;AAAA,IACtB,UAAU,EAAE,OAAO,EAAE;AAAA,IACrB,gBAAgB,EAAE,OAAO,KAAM;AAAA,IAC/B,iBAAiB,EAAE,OAAO,IAAI;AAAA,IAC9B,aAAa,EAAE,OAAO,IAAI,UAAU;AAAA,IACpC,IAAI,EAAE,OAAO,IAAI,QAAQ,GAAG,GAAG,CAAC,EAAE;AAAA,EACpC;AAAA,EAEA;AAAA;AAAA,IAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyEzB;AAAA;AAAA,IAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAmFX,WAAW,MAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAI3D;AAEA,MAAM,WAAW,IAAI,eAAe;AAAA,EAClC,MAAM;AAAA,EACN,gBAAgB,UAAU;AAAA,EAC1B,cAAc,UAAU;AAAA,EACxB,UAAU,cAAc,MAAM,UAAU,QAAQ;AAAA,EAChD,MAAM;AAAA,EACN,YAAY;AACd,CAAC;AAeD,MAAM,YAAY,KAAK;AAAA,EACrB,cAAc;AACZ,UAAM,IAAI,YAAY,GAAG,GAAG,CAAC,GAAG,QAAQ;AAAA,EAC1C;AAIF;AAFE,cALI,KAKG,aAAY;AACnB,cANI,KAMU,YAAW;"}
1
+ {"version":3,"file":"Sky.js","sources":["../../src/objects/Sky.ts"],"sourcesContent":["import { BackSide, BoxGeometry, Mesh, ShaderMaterial, UniformsUtils, Vector3 } from 'three'\nimport { version } from '../_polyfill/constants'\n\n/**\n * Based on \"A Practical Analytic Model for Daylight\"\n * aka The Preetham Model, the de facto standard analytic skydome model\n * https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight\n *\n * First implemented by Simon Wallner\n * http://www.simonwallner.at/projects/atmospheric-scattering\n *\n * Improved by Martin Upitis\n * http://blenderartists.org/forum/showthread.php?245954-preethams-sky-impementation-HDR\n *\n * Three.js integration by zz85 http://twitter.com/blurspline\n */\nconst Sky = /* @__PURE__ */ (() => {\n const SkyShader = {\n uniforms: {\n turbidity: { value: 2 },\n rayleigh: { value: 1 },\n mieCoefficient: { value: 0.005 },\n mieDirectionalG: { value: 0.8 },\n sunPosition: { value: new Vector3() },\n up: { value: new Vector3(0, 1, 0) },\n },\n\n vertexShader: /* glsl */ `\n uniform vec3 sunPosition;\n uniform float rayleigh;\n uniform float turbidity;\n uniform float mieCoefficient;\n uniform vec3 up;\n\n varying vec3 vWorldPosition;\n varying vec3 vSunDirection;\n varying float vSunfade;\n varying vec3 vBetaR;\n varying vec3 vBetaM;\n varying float vSunE;\n\n // constants for atmospheric scattering\n const float e = 2.71828182845904523536028747135266249775724709369995957;\n const float pi = 3.141592653589793238462643383279502884197169;\n\n // wavelength of used primaries, according to preetham\n const vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );\n // this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function:\n // (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))\n const vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );\n\n // mie stuff\n // K coefficient for the primaries\n const float v = 4.0;\n const vec3 K = vec3( 0.686, 0.678, 0.666 );\n // MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K\n const vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 );\n\n // earth shadow hack\n // cutoffAngle = pi / 1.95;\n const float cutoffAngle = 1.6110731556870734;\n const float steepness = 1.5;\n const float EE = 1000.0;\n\n float sunIntensity( float zenithAngleCos ) {\n zenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 );\n return EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) );\n }\n\n vec3 totalMie( float T ) {\n float c = ( 0.2 * T ) * 10E-18;\n return 0.434 * c * MieConst;\n }\n\n void main() {\n\n vec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n vWorldPosition = worldPosition.xyz;\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n gl_Position.z = gl_Position.w; // set z to camera.far\n\n vSunDirection = normalize( sunPosition );\n\n vSunE = sunIntensity( dot( vSunDirection, up ) );\n\n vSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 );\n\n float rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );\n\n // extinction (absorbtion + out scattering)\n // rayleigh coefficients\n vBetaR = totalRayleigh * rayleighCoefficient;\n\n // mie coefficients\n vBetaM = totalMie( turbidity ) * mieCoefficient;\n\n }\n `,\n\n fragmentShader: /* glsl */ `\n varying vec3 vWorldPosition;\n varying vec3 vSunDirection;\n varying float vSunfade;\n varying vec3 vBetaR;\n varying vec3 vBetaM;\n varying float vSunE;\n\n uniform float mieDirectionalG;\n uniform vec3 up;\n\n const vec3 cameraPos = vec3( 0.0, 0.0, 0.0 );\n\n // constants for atmospheric scattering\n const float pi = 3.141592653589793238462643383279502884197169;\n\n const float n = 1.0003; // refractive index of air\n const float N = 2.545E25; // number of molecules per unit volume for air at 288.15K and 1013mb (sea level -45 celsius)\n\n // optical length at zenith for molecules\n const float rayleighZenithLength = 8.4E3;\n const float mieZenithLength = 1.25E3;\n // 66 arc seconds -> degrees, and the cosine of that\n const float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;\n\n // 3.0 / ( 16.0 * pi )\n const float THREE_OVER_SIXTEENPI = 0.05968310365946075;\n // 1.0 / ( 4.0 * pi )\n const float ONE_OVER_FOURPI = 0.07957747154594767;\n\n float rayleighPhase( float cosTheta ) {\n return THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) );\n }\n\n float hgPhase( float cosTheta, float g ) {\n float g2 = pow( g, 2.0 );\n float inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 );\n return ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse );\n }\n\n void main() {\n\n vec3 direction = normalize( vWorldPosition - cameraPos );\n\n // optical length\n // cutoff angle at 90 to avoid singularity in next formula.\n float zenithAngle = acos( max( 0.0, dot( up, direction ) ) );\n float inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) );\n float sR = rayleighZenithLength * inverse;\n float sM = mieZenithLength * inverse;\n\n // combined extinction factor\n vec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) );\n\n // in scattering\n float cosTheta = dot( direction, vSunDirection );\n\n float rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 );\n vec3 betaRTheta = vBetaR * rPhase;\n\n float mPhase = hgPhase( cosTheta, mieDirectionalG );\n vec3 betaMTheta = vBetaM * mPhase;\n\n vec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) );\n Lin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );\n\n // nightsky\n float theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2]\n float phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2]\n vec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 );\n vec3 L0 = vec3( 0.1 ) * Fex;\n\n // composition + solar disc\n float sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );\n L0 += ( vSunE * 19000.0 * Fex ) * sundisk;\n\n vec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );\n\n vec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );\n\n gl_FragColor = vec4( retColor, 1.0 );\n\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n\n }\n `,\n }\n\n const material = new ShaderMaterial({\n name: 'SkyShader',\n fragmentShader: SkyShader.fragmentShader,\n vertexShader: SkyShader.vertexShader,\n uniforms: UniformsUtils.clone(SkyShader.uniforms),\n side: BackSide,\n depthWrite: false,\n })\n\n class Sky extends Mesh {\n constructor() {\n super(new BoxGeometry(1, 1, 1), material)\n }\n\n static SkyShader = SkyShader\n public static material = material\n }\n\n return Sky\n})()\n\nexport { Sky }\n"],"names":["Sky"],"mappings":";;;;;;;;AAgBA,MAAM,MAA6B,uBAAA;AACjC,QAAM,YAAY;AAAA,IAChB,UAAU;AAAA,MACR,WAAW,EAAE,OAAO,EAAE;AAAA,MACtB,UAAU,EAAE,OAAO,EAAE;AAAA,MACrB,gBAAgB,EAAE,OAAO,KAAM;AAAA,MAC/B,iBAAiB,EAAE,OAAO,IAAI;AAAA,MAC9B,aAAa,EAAE,OAAO,IAAI,UAAU;AAAA,MACpC,IAAI,EAAE,OAAO,IAAI,QAAQ,GAAG,GAAG,CAAC,EAAE;AAAA,IACpC;AAAA,IAEA;AAAA;AAAA,MAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAyEzB;AAAA;AAAA,MAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAmFb,WAAW,MAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAMnD,QAAA,WAAW,IAAI,eAAe;AAAA,IAClC,MAAM;AAAA,IACN,gBAAgB,UAAU;AAAA,IAC1B,cAAc,UAAU;AAAA,IACxB,UAAU,cAAc,MAAM,UAAU,QAAQ;AAAA,IAChD,MAAM;AAAA,IACN,YAAY;AAAA,EAAA,CACb;AAED,QAAMA,aAAY,KAAK;AAAA,IACrB,cAAc;AACZ,YAAM,IAAI,YAAY,GAAG,GAAG,CAAC,GAAG,QAAQ;AAAA,IAC1C;AAAA,EAIF;AAFE,gBALIA,MAKG,aAAY;AACnB,gBANIA,MAMU,YAAW;AAGpBA,SAAAA;AACT,GAAG;"}
package/objects/Water.cjs CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const THREE = require("three");
4
+ const constants = require("../_polyfill/constants.cjs");
4
5
  class Water extends THREE.Mesh {
5
6
  constructor(geometry, options = {}) {
6
7
  super(geometry);
@@ -150,7 +151,7 @@ class Water extends THREE.Mesh {
150
151
  gl_FragColor = vec4( outgoingLight, alpha );
151
152
 
152
153
  #include <tonemapping_fragment>
153
- #include <${parseInt(THREE.REVISION.replace(/\D+/g, "")) >= 154 ? "colorspace_fragment" : "encodings_fragment"}>
154
+ #include <${constants.version >= 154 ? "colorspace_fragment" : "encodings_fragment"}>
154
155
  #include <fog_fragment>
155
156
  }`
156
157
  )
@@ -1 +1 @@
1
- {"version":3,"file":"Water.cjs","sources":["../../src/objects/Water.js"],"sourcesContent":["import {\n Color,\n FrontSide,\n Matrix4,\n Mesh,\n PerspectiveCamera,\n Plane,\n ShaderMaterial,\n UniformsLib,\n UniformsUtils,\n Vector3,\n Vector4,\n WebGLRenderTarget,\n REVISION,\n} from 'three'\n\n/**\n * Work based on :\n * https://github.com/Slayvin: Flat mirror for three.js\n * https://home.adelphi.edu/~stemkoski/ : An implementation of water shader based on the flat mirror\n * http://29a.ch/ && http://29a.ch/slides/2012/webglwater/ : Water shader explanations in WebGL\n */\n\nclass Water extends Mesh {\n constructor(geometry, options = {}) {\n super(geometry)\n\n this.isWater = true\n\n const scope = this\n\n const textureWidth = options.textureWidth !== undefined ? options.textureWidth : 512\n const textureHeight = options.textureHeight !== undefined ? options.textureHeight : 512\n\n const clipBias = options.clipBias !== undefined ? options.clipBias : 0.0\n const alpha = options.alpha !== undefined ? options.alpha : 1.0\n const time = options.time !== undefined ? options.time : 0.0\n const normalSampler = options.waterNormals !== undefined ? options.waterNormals : null\n const sunDirection = options.sunDirection !== undefined ? options.sunDirection : new Vector3(0.70707, 0.70707, 0.0)\n const sunColor = new Color(options.sunColor !== undefined ? options.sunColor : 0xffffff)\n const waterColor = new Color(options.waterColor !== undefined ? options.waterColor : 0x7f7f7f)\n const eye = options.eye !== undefined ? options.eye : new Vector3(0, 0, 0)\n const distortionScale = options.distortionScale !== undefined ? options.distortionScale : 20.0\n const side = options.side !== undefined ? options.side : FrontSide\n const fog = options.fog !== undefined ? options.fog : false\n\n //\n\n const mirrorPlane = new Plane()\n const normal = new Vector3()\n const mirrorWorldPosition = new Vector3()\n const cameraWorldPosition = new Vector3()\n const rotationMatrix = new Matrix4()\n const lookAtPosition = new Vector3(0, 0, -1)\n const clipPlane = new Vector4()\n\n const view = new Vector3()\n const target = new Vector3()\n const q = new Vector4()\n\n const textureMatrix = new Matrix4()\n\n const mirrorCamera = new PerspectiveCamera()\n\n const renderTarget = new WebGLRenderTarget(textureWidth, textureHeight)\n\n const mirrorShader = {\n uniforms: UniformsUtils.merge([\n UniformsLib['fog'],\n UniformsLib['lights'],\n {\n normalSampler: { value: null },\n mirrorSampler: { value: null },\n alpha: { value: 1.0 },\n time: { value: 0.0 },\n size: { value: 1.0 },\n distortionScale: { value: 20.0 },\n textureMatrix: { value: new Matrix4() },\n sunColor: { value: new Color(0x7f7f7f) },\n sunDirection: { value: new Vector3(0.70707, 0.70707, 0) },\n eye: { value: new Vector3() },\n waterColor: { value: new Color(0x555555) },\n },\n ]),\n\n vertexShader: /* glsl */ `\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\tuniform float time;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\t#include <common>\n\t\t\t\t#include <fog_pars_vertex>\n\t\t\t\t#include <shadowmap_pars_vertex>\n\t\t\t\t#include <logdepthbuf_pars_vertex>\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tmirrorCoord = modelMatrix * vec4( position, 1.0 );\n\t\t\t\t\tworldPosition = mirrorCoord.xyzw;\n\t\t\t\t\tmirrorCoord = textureMatrix * mirrorCoord;\n\t\t\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t\t#include <beginnormal_vertex>\n\t\t\t\t#include <defaultnormal_vertex>\n\t\t\t\t#include <logdepthbuf_vertex>\n\t\t\t\t#include <fog_vertex>\n\t\t\t\t#include <shadowmap_vertex>\n\t\t\t}`,\n\n fragmentShader: /* glsl */ `\n\t\t\t\tuniform sampler2D mirrorSampler;\n\t\t\t\tuniform float alpha;\n\t\t\t\tuniform float time;\n\t\t\t\tuniform float size;\n\t\t\t\tuniform float distortionScale;\n\t\t\t\tuniform sampler2D normalSampler;\n\t\t\t\tuniform vec3 sunColor;\n\t\t\t\tuniform vec3 sunDirection;\n\t\t\t\tuniform vec3 eye;\n\t\t\t\tuniform vec3 waterColor;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\tvec4 getNoise( vec2 uv ) {\n\t\t\t\t\tvec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0);\n\t\t\t\t\tvec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 );\n\t\t\t\t\tvec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 );\n\t\t\t\t\tvec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 );\n\t\t\t\t\tvec4 noise = texture2D( normalSampler, uv0 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv1 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv2 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv3 );\n\t\t\t\t\treturn noise * 0.5 - 1.0;\n\t\t\t\t}\n\n\t\t\t\tvoid sunLight( const vec3 surfaceNormal, const vec3 eyeDirection, float shiny, float spec, float diffuse, inout vec3 diffuseColor, inout vec3 specularColor ) {\n\t\t\t\t\tvec3 reflection = normalize( reflect( -sunDirection, surfaceNormal ) );\n\t\t\t\t\tfloat direction = max( 0.0, dot( eyeDirection, reflection ) );\n\t\t\t\t\tspecularColor += pow( direction, shiny ) * sunColor * spec;\n\t\t\t\t\tdiffuseColor += max( dot( sunDirection, surfaceNormal ), 0.0 ) * sunColor * diffuse;\n\t\t\t\t}\n\n\t\t\t\t#include <common>\n\t\t\t\t#include <packing>\n\t\t\t\t#include <bsdfs>\n\t\t\t\t#include <fog_pars_fragment>\n\t\t\t\t#include <logdepthbuf_pars_fragment>\n\t\t\t\t#include <lights_pars_begin>\n\t\t\t\t#include <shadowmap_pars_fragment>\n\t\t\t\t#include <shadowmask_pars_fragment>\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include <logdepthbuf_fragment>\n\t\t\t\t\tvec4 noise = getNoise( worldPosition.xz * size );\n\t\t\t\t\tvec3 surfaceNormal = normalize( noise.xzy * vec3( 1.5, 1.0, 1.5 ) );\n\n\t\t\t\t\tvec3 diffuseLight = vec3(0.0);\n\t\t\t\t\tvec3 specularLight = vec3(0.0);\n\n\t\t\t\t\tvec3 worldToEye = eye-worldPosition.xyz;\n\t\t\t\t\tvec3 eyeDirection = normalize( worldToEye );\n\t\t\t\t\tsunLight( surfaceNormal, eyeDirection, 100.0, 2.0, 0.5, diffuseLight, specularLight );\n\n\t\t\t\t\tfloat distance = length(worldToEye);\n\n\t\t\t\t\tvec2 distortion = surfaceNormal.xz * ( 0.001 + 1.0 / distance ) * distortionScale;\n\t\t\t\t\tvec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) );\n\n\t\t\t\t\tfloat theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );\n\t\t\t\t\tfloat rf0 = 0.3;\n\t\t\t\t\tfloat reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 );\n\t\t\t\t\tvec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor;\n\t\t\t\t\tvec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance);\n\t\t\t\t\tvec3 outgoingLight = albedo;\n\t\t\t\t\tgl_FragColor = vec4( outgoingLight, alpha );\n\n\t\t\t\t\t#include <tonemapping_fragment>\n\t\t\t\t\t#include <${parseInt(REVISION.replace(/\\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n\t\t\t\t\t#include <fog_fragment>\t\n\t\t\t\t}`,\n }\n\n const material = new ShaderMaterial({\n fragmentShader: mirrorShader.fragmentShader,\n vertexShader: mirrorShader.vertexShader,\n uniforms: UniformsUtils.clone(mirrorShader.uniforms),\n lights: true,\n side: side,\n fog: fog,\n })\n\n material.uniforms['mirrorSampler'].value = renderTarget.texture\n material.uniforms['textureMatrix'].value = textureMatrix\n material.uniforms['alpha'].value = alpha\n material.uniforms['time'].value = time\n material.uniforms['normalSampler'].value = normalSampler\n material.uniforms['sunColor'].value = sunColor\n material.uniforms['waterColor'].value = waterColor\n material.uniforms['sunDirection'].value = sunDirection\n material.uniforms['distortionScale'].value = distortionScale\n\n material.uniforms['eye'].value = eye\n\n scope.material = material\n\n scope.onBeforeRender = function (renderer, scene, camera) {\n mirrorWorldPosition.setFromMatrixPosition(scope.matrixWorld)\n cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld)\n\n rotationMatrix.extractRotation(scope.matrixWorld)\n\n normal.set(0, 0, 1)\n normal.applyMatrix4(rotationMatrix)\n\n view.subVectors(mirrorWorldPosition, cameraWorldPosition)\n\n // Avoid rendering when mirror is facing away\n\n if (view.dot(normal) > 0) return\n\n view.reflect(normal).negate()\n view.add(mirrorWorldPosition)\n\n rotationMatrix.extractRotation(camera.matrixWorld)\n\n lookAtPosition.set(0, 0, -1)\n lookAtPosition.applyMatrix4(rotationMatrix)\n lookAtPosition.add(cameraWorldPosition)\n\n target.subVectors(mirrorWorldPosition, lookAtPosition)\n target.reflect(normal).negate()\n target.add(mirrorWorldPosition)\n\n mirrorCamera.position.copy(view)\n mirrorCamera.up.set(0, 1, 0)\n mirrorCamera.up.applyMatrix4(rotationMatrix)\n mirrorCamera.up.reflect(normal)\n mirrorCamera.lookAt(target)\n\n mirrorCamera.far = camera.far // Used in WebGLBackground\n\n mirrorCamera.updateMatrixWorld()\n mirrorCamera.projectionMatrix.copy(camera.projectionMatrix)\n\n // Update the texture matrix\n 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)\n textureMatrix.multiply(mirrorCamera.projectionMatrix)\n textureMatrix.multiply(mirrorCamera.matrixWorldInverse)\n\n // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html\n // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf\n mirrorPlane.setFromNormalAndCoplanarPoint(normal, mirrorWorldPosition)\n mirrorPlane.applyMatrix4(mirrorCamera.matrixWorldInverse)\n\n clipPlane.set(mirrorPlane.normal.x, mirrorPlane.normal.y, mirrorPlane.normal.z, mirrorPlane.constant)\n\n const projectionMatrix = mirrorCamera.projectionMatrix\n\n q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0]\n q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5]\n q.z = -1.0\n q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14]\n\n // Calculate the scaled plane vector\n clipPlane.multiplyScalar(2.0 / clipPlane.dot(q))\n\n // Replacing the third row of the projection matrix\n projectionMatrix.elements[2] = clipPlane.x\n projectionMatrix.elements[6] = clipPlane.y\n projectionMatrix.elements[10] = clipPlane.z + 1.0 - clipBias\n projectionMatrix.elements[14] = clipPlane.w\n\n eye.setFromMatrixPosition(camera.matrixWorld)\n\n // Render\n\n const currentRenderTarget = renderer.getRenderTarget()\n\n const currentXrEnabled = renderer.xr.enabled\n const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate\n\n scope.visible = false\n\n renderer.xr.enabled = false // Avoid camera modification and recursion\n renderer.shadowMap.autoUpdate = false // Avoid re-computing shadows\n\n renderer.setRenderTarget(renderTarget)\n\n renderer.state.buffers.depth.setMask(true) // make sure the depth buffer is writable so it can be properly cleared, see #18897\n\n if (renderer.autoClear === false) renderer.clear()\n renderer.render(scene, mirrorCamera)\n\n scope.visible = true\n\n renderer.xr.enabled = currentXrEnabled\n renderer.shadowMap.autoUpdate = currentShadowAutoUpdate\n\n renderer.setRenderTarget(currentRenderTarget)\n\n // Restore viewport\n\n const viewport = camera.viewport\n\n if (viewport !== undefined) {\n renderer.state.viewport(viewport)\n }\n }\n }\n}\n\nexport { Water }\n"],"names":["Mesh","Vector3","Color","FrontSide","Plane","Matrix4","Vector4","PerspectiveCamera","WebGLRenderTarget","UniformsUtils","UniformsLib","REVISION","ShaderMaterial"],"mappings":"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"}
1
+ {"version":3,"file":"Water.cjs","sources":["../../src/objects/Water.js"],"sourcesContent":["import {\n Color,\n FrontSide,\n Matrix4,\n Mesh,\n PerspectiveCamera,\n Plane,\n ShaderMaterial,\n UniformsLib,\n UniformsUtils,\n Vector3,\n Vector4,\n WebGLRenderTarget,\n} from 'three'\nimport { version } from '../_polyfill/constants'\n\n/**\n * Work based on :\n * https://github.com/Slayvin: Flat mirror for three.js\n * https://home.adelphi.edu/~stemkoski/ : An implementation of water shader based on the flat mirror\n * http://29a.ch/ && http://29a.ch/slides/2012/webglwater/ : Water shader explanations in WebGL\n */\n\nclass Water extends Mesh {\n constructor(geometry, options = {}) {\n super(geometry)\n\n this.isWater = true\n\n const scope = this\n\n const textureWidth = options.textureWidth !== undefined ? options.textureWidth : 512\n const textureHeight = options.textureHeight !== undefined ? options.textureHeight : 512\n\n const clipBias = options.clipBias !== undefined ? options.clipBias : 0.0\n const alpha = options.alpha !== undefined ? options.alpha : 1.0\n const time = options.time !== undefined ? options.time : 0.0\n const normalSampler = options.waterNormals !== undefined ? options.waterNormals : null\n const sunDirection = options.sunDirection !== undefined ? options.sunDirection : new Vector3(0.70707, 0.70707, 0.0)\n const sunColor = new Color(options.sunColor !== undefined ? options.sunColor : 0xffffff)\n const waterColor = new Color(options.waterColor !== undefined ? options.waterColor : 0x7f7f7f)\n const eye = options.eye !== undefined ? options.eye : new Vector3(0, 0, 0)\n const distortionScale = options.distortionScale !== undefined ? options.distortionScale : 20.0\n const side = options.side !== undefined ? options.side : FrontSide\n const fog = options.fog !== undefined ? options.fog : false\n\n //\n\n const mirrorPlane = new Plane()\n const normal = new Vector3()\n const mirrorWorldPosition = new Vector3()\n const cameraWorldPosition = new Vector3()\n const rotationMatrix = new Matrix4()\n const lookAtPosition = new Vector3(0, 0, -1)\n const clipPlane = new Vector4()\n\n const view = new Vector3()\n const target = new Vector3()\n const q = new Vector4()\n\n const textureMatrix = new Matrix4()\n\n const mirrorCamera = new PerspectiveCamera()\n\n const renderTarget = new WebGLRenderTarget(textureWidth, textureHeight)\n\n const mirrorShader = {\n uniforms: UniformsUtils.merge([\n UniformsLib['fog'],\n UniformsLib['lights'],\n {\n normalSampler: { value: null },\n mirrorSampler: { value: null },\n alpha: { value: 1.0 },\n time: { value: 0.0 },\n size: { value: 1.0 },\n distortionScale: { value: 20.0 },\n textureMatrix: { value: new Matrix4() },\n sunColor: { value: new Color(0x7f7f7f) },\n sunDirection: { value: new Vector3(0.70707, 0.70707, 0) },\n eye: { value: new Vector3() },\n waterColor: { value: new Color(0x555555) },\n },\n ]),\n\n vertexShader: /* glsl */ `\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\tuniform float time;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\t#include <common>\n\t\t\t\t#include <fog_pars_vertex>\n\t\t\t\t#include <shadowmap_pars_vertex>\n\t\t\t\t#include <logdepthbuf_pars_vertex>\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tmirrorCoord = modelMatrix * vec4( position, 1.0 );\n\t\t\t\t\tworldPosition = mirrorCoord.xyzw;\n\t\t\t\t\tmirrorCoord = textureMatrix * mirrorCoord;\n\t\t\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t\t#include <beginnormal_vertex>\n\t\t\t\t#include <defaultnormal_vertex>\n\t\t\t\t#include <logdepthbuf_vertex>\n\t\t\t\t#include <fog_vertex>\n\t\t\t\t#include <shadowmap_vertex>\n\t\t\t}`,\n\n fragmentShader: /* glsl */ `\n\t\t\t\tuniform sampler2D mirrorSampler;\n\t\t\t\tuniform float alpha;\n\t\t\t\tuniform float time;\n\t\t\t\tuniform float size;\n\t\t\t\tuniform float distortionScale;\n\t\t\t\tuniform sampler2D normalSampler;\n\t\t\t\tuniform vec3 sunColor;\n\t\t\t\tuniform vec3 sunDirection;\n\t\t\t\tuniform vec3 eye;\n\t\t\t\tuniform vec3 waterColor;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\tvec4 getNoise( vec2 uv ) {\n\t\t\t\t\tvec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0);\n\t\t\t\t\tvec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 );\n\t\t\t\t\tvec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 );\n\t\t\t\t\tvec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 );\n\t\t\t\t\tvec4 noise = texture2D( normalSampler, uv0 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv1 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv2 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv3 );\n\t\t\t\t\treturn noise * 0.5 - 1.0;\n\t\t\t\t}\n\n\t\t\t\tvoid sunLight( const vec3 surfaceNormal, const vec3 eyeDirection, float shiny, float spec, float diffuse, inout vec3 diffuseColor, inout vec3 specularColor ) {\n\t\t\t\t\tvec3 reflection = normalize( reflect( -sunDirection, surfaceNormal ) );\n\t\t\t\t\tfloat direction = max( 0.0, dot( eyeDirection, reflection ) );\n\t\t\t\t\tspecularColor += pow( direction, shiny ) * sunColor * spec;\n\t\t\t\t\tdiffuseColor += max( dot( sunDirection, surfaceNormal ), 0.0 ) * sunColor * diffuse;\n\t\t\t\t}\n\n\t\t\t\t#include <common>\n\t\t\t\t#include <packing>\n\t\t\t\t#include <bsdfs>\n\t\t\t\t#include <fog_pars_fragment>\n\t\t\t\t#include <logdepthbuf_pars_fragment>\n\t\t\t\t#include <lights_pars_begin>\n\t\t\t\t#include <shadowmap_pars_fragment>\n\t\t\t\t#include <shadowmask_pars_fragment>\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include <logdepthbuf_fragment>\n\t\t\t\t\tvec4 noise = getNoise( worldPosition.xz * size );\n\t\t\t\t\tvec3 surfaceNormal = normalize( noise.xzy * vec3( 1.5, 1.0, 1.5 ) );\n\n\t\t\t\t\tvec3 diffuseLight = vec3(0.0);\n\t\t\t\t\tvec3 specularLight = vec3(0.0);\n\n\t\t\t\t\tvec3 worldToEye = eye-worldPosition.xyz;\n\t\t\t\t\tvec3 eyeDirection = normalize( worldToEye );\n\t\t\t\t\tsunLight( surfaceNormal, eyeDirection, 100.0, 2.0, 0.5, diffuseLight, specularLight );\n\n\t\t\t\t\tfloat distance = length(worldToEye);\n\n\t\t\t\t\tvec2 distortion = surfaceNormal.xz * ( 0.001 + 1.0 / distance ) * distortionScale;\n\t\t\t\t\tvec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) );\n\n\t\t\t\t\tfloat theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );\n\t\t\t\t\tfloat rf0 = 0.3;\n\t\t\t\t\tfloat reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 );\n\t\t\t\t\tvec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor;\n\t\t\t\t\tvec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance);\n\t\t\t\t\tvec3 outgoingLight = albedo;\n\t\t\t\t\tgl_FragColor = vec4( outgoingLight, alpha );\n\n\t\t\t\t\t#include <tonemapping_fragment>\n\t\t\t\t\t#include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n\t\t\t\t\t#include <fog_fragment>\t\n\t\t\t\t}`,\n }\n\n const material = new ShaderMaterial({\n fragmentShader: mirrorShader.fragmentShader,\n vertexShader: mirrorShader.vertexShader,\n uniforms: UniformsUtils.clone(mirrorShader.uniforms),\n lights: true,\n side: side,\n fog: fog,\n })\n\n material.uniforms['mirrorSampler'].value = renderTarget.texture\n material.uniforms['textureMatrix'].value = textureMatrix\n material.uniforms['alpha'].value = alpha\n material.uniforms['time'].value = time\n material.uniforms['normalSampler'].value = normalSampler\n material.uniforms['sunColor'].value = sunColor\n material.uniforms['waterColor'].value = waterColor\n material.uniforms['sunDirection'].value = sunDirection\n material.uniforms['distortionScale'].value = distortionScale\n\n material.uniforms['eye'].value = eye\n\n scope.material = material\n\n scope.onBeforeRender = function (renderer, scene, camera) {\n mirrorWorldPosition.setFromMatrixPosition(scope.matrixWorld)\n cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld)\n\n rotationMatrix.extractRotation(scope.matrixWorld)\n\n normal.set(0, 0, 1)\n normal.applyMatrix4(rotationMatrix)\n\n view.subVectors(mirrorWorldPosition, cameraWorldPosition)\n\n // Avoid rendering when mirror is facing away\n\n if (view.dot(normal) > 0) return\n\n view.reflect(normal).negate()\n view.add(mirrorWorldPosition)\n\n rotationMatrix.extractRotation(camera.matrixWorld)\n\n lookAtPosition.set(0, 0, -1)\n lookAtPosition.applyMatrix4(rotationMatrix)\n lookAtPosition.add(cameraWorldPosition)\n\n target.subVectors(mirrorWorldPosition, lookAtPosition)\n target.reflect(normal).negate()\n target.add(mirrorWorldPosition)\n\n mirrorCamera.position.copy(view)\n mirrorCamera.up.set(0, 1, 0)\n mirrorCamera.up.applyMatrix4(rotationMatrix)\n mirrorCamera.up.reflect(normal)\n mirrorCamera.lookAt(target)\n\n mirrorCamera.far = camera.far // Used in WebGLBackground\n\n mirrorCamera.updateMatrixWorld()\n mirrorCamera.projectionMatrix.copy(camera.projectionMatrix)\n\n // Update the texture matrix\n 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)\n textureMatrix.multiply(mirrorCamera.projectionMatrix)\n textureMatrix.multiply(mirrorCamera.matrixWorldInverse)\n\n // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html\n // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf\n mirrorPlane.setFromNormalAndCoplanarPoint(normal, mirrorWorldPosition)\n mirrorPlane.applyMatrix4(mirrorCamera.matrixWorldInverse)\n\n clipPlane.set(mirrorPlane.normal.x, mirrorPlane.normal.y, mirrorPlane.normal.z, mirrorPlane.constant)\n\n const projectionMatrix = mirrorCamera.projectionMatrix\n\n q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0]\n q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5]\n q.z = -1.0\n q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14]\n\n // Calculate the scaled plane vector\n clipPlane.multiplyScalar(2.0 / clipPlane.dot(q))\n\n // Replacing the third row of the projection matrix\n projectionMatrix.elements[2] = clipPlane.x\n projectionMatrix.elements[6] = clipPlane.y\n projectionMatrix.elements[10] = clipPlane.z + 1.0 - clipBias\n projectionMatrix.elements[14] = clipPlane.w\n\n eye.setFromMatrixPosition(camera.matrixWorld)\n\n // Render\n\n const currentRenderTarget = renderer.getRenderTarget()\n\n const currentXrEnabled = renderer.xr.enabled\n const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate\n\n scope.visible = false\n\n renderer.xr.enabled = false // Avoid camera modification and recursion\n renderer.shadowMap.autoUpdate = false // Avoid re-computing shadows\n\n renderer.setRenderTarget(renderTarget)\n\n renderer.state.buffers.depth.setMask(true) // make sure the depth buffer is writable so it can be properly cleared, see #18897\n\n if (renderer.autoClear === false) renderer.clear()\n renderer.render(scene, mirrorCamera)\n\n scope.visible = true\n\n renderer.xr.enabled = currentXrEnabled\n renderer.shadowMap.autoUpdate = currentShadowAutoUpdate\n\n renderer.setRenderTarget(currentRenderTarget)\n\n // Restore viewport\n\n const viewport = camera.viewport\n\n if (viewport !== undefined) {\n renderer.state.viewport(viewport)\n }\n }\n }\n}\n\nexport { Water }\n"],"names":["Mesh","Vector3","Color","FrontSide","Plane","Matrix4","Vector4","PerspectiveCamera","WebGLRenderTarget","UniformsUtils","UniformsLib","version","ShaderMaterial"],"mappings":";;;;AAuBA,MAAM,cAAcA,MAAAA,KAAK;AAAA,EACvB,YAAY,UAAU,UAAU,IAAI;AAClC,UAAM,QAAQ;AAEd,SAAK,UAAU;AAEf,UAAM,QAAQ;AAEd,UAAM,eAAe,QAAQ,iBAAiB,SAAY,QAAQ,eAAe;AACjF,UAAM,gBAAgB,QAAQ,kBAAkB,SAAY,QAAQ,gBAAgB;AAEpF,UAAM,WAAW,QAAQ,aAAa,SAAY,QAAQ,WAAW;AACrE,UAAM,QAAQ,QAAQ,UAAU,SAAY,QAAQ,QAAQ;AAC5D,UAAM,OAAO,QAAQ,SAAS,SAAY,QAAQ,OAAO;AACzD,UAAM,gBAAgB,QAAQ,iBAAiB,SAAY,QAAQ,eAAe;AAClF,UAAM,eAAe,QAAQ,iBAAiB,SAAY,QAAQ,eAAe,IAAIC,MAAO,QAAC,SAAS,SAAS,CAAG;AAClH,UAAM,WAAW,IAAIC,MAAAA,MAAM,QAAQ,aAAa,SAAY,QAAQ,WAAW,QAAQ;AACvF,UAAM,aAAa,IAAIA,MAAAA,MAAM,QAAQ,eAAe,SAAY,QAAQ,aAAa,OAAQ;AAC7F,UAAM,MAAM,QAAQ,QAAQ,SAAY,QAAQ,MAAM,IAAID,MAAO,QAAC,GAAG,GAAG,CAAC;AACzE,UAAM,kBAAkB,QAAQ,oBAAoB,SAAY,QAAQ,kBAAkB;AAC1F,UAAM,OAAO,QAAQ,SAAS,SAAY,QAAQ,OAAOE,MAAS;AAClE,UAAM,MAAM,QAAQ,QAAQ,SAAY,QAAQ,MAAM;AAItD,UAAM,cAAc,IAAIC,YAAO;AAC/B,UAAM,SAAS,IAAIH,cAAS;AAC5B,UAAM,sBAAsB,IAAIA,cAAS;AACzC,UAAM,sBAAsB,IAAIA,cAAS;AACzC,UAAM,iBAAiB,IAAII,cAAS;AACpC,UAAM,iBAAiB,IAAIJ,MAAO,QAAC,GAAG,GAAG,EAAE;AAC3C,UAAM,YAAY,IAAIK,cAAS;AAE/B,UAAM,OAAO,IAAIL,cAAS;AAC1B,UAAM,SAAS,IAAIA,cAAS;AAC5B,UAAM,IAAI,IAAIK,cAAS;AAEvB,UAAM,gBAAgB,IAAID,cAAS;AAEnC,UAAM,eAAe,IAAIE,wBAAmB;AAE5C,UAAM,eAAe,IAAIC,wBAAkB,cAAc,aAAa;AAEtE,UAAM,eAAe;AAAA,MACnB,UAAUC,MAAa,cAAC,MAAM;AAAA,QAC5BC,MAAAA,YAAY,KAAK;AAAA,QACjBA,MAAAA,YAAY,QAAQ;AAAA,QACpB;AAAA,UACE,eAAe,EAAE,OAAO,KAAM;AAAA,UAC9B,eAAe,EAAE,OAAO,KAAM;AAAA,UAC9B,OAAO,EAAE,OAAO,EAAK;AAAA,UACrB,MAAM,EAAE,OAAO,EAAK;AAAA,UACpB,MAAM,EAAE,OAAO,EAAK;AAAA,UACpB,iBAAiB,EAAE,OAAO,GAAM;AAAA,UAChC,eAAe,EAAE,OAAO,IAAIL,MAAAA,UAAW;AAAA,UACvC,UAAU,EAAE,OAAO,IAAIH,MAAK,MAAC,OAAQ,EAAG;AAAA,UACxC,cAAc,EAAE,OAAO,IAAID,MAAAA,QAAQ,SAAS,SAAS,CAAC,EAAG;AAAA,UACzD,KAAK,EAAE,OAAO,IAAIA,MAAAA,UAAW;AAAA,UAC7B,YAAY,EAAE,OAAO,IAAIC,MAAK,MAAC,OAAQ,EAAG;AAAA,QAC3C;AAAA,MACT,CAAO;AAAA,MAED;AAAA;AAAA,QAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA0BzB;AAAA;AAAA,QAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAsEhBS,qBAAW,MAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA,IAGrD;AAED,UAAM,WAAW,IAAIC,qBAAe;AAAA,MAClC,gBAAgB,aAAa;AAAA,MAC7B,cAAc,aAAa;AAAA,MAC3B,UAAUH,MAAa,cAAC,MAAM,aAAa,QAAQ;AAAA,MACnD,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACN,CAAK;AAED,aAAS,SAAS,eAAe,EAAE,QAAQ,aAAa;AACxD,aAAS,SAAS,eAAe,EAAE,QAAQ;AAC3C,aAAS,SAAS,OAAO,EAAE,QAAQ;AACnC,aAAS,SAAS,MAAM,EAAE,QAAQ;AAClC,aAAS,SAAS,eAAe,EAAE,QAAQ;AAC3C,aAAS,SAAS,UAAU,EAAE,QAAQ;AACtC,aAAS,SAAS,YAAY,EAAE,QAAQ;AACxC,aAAS,SAAS,cAAc,EAAE,QAAQ;AAC1C,aAAS,SAAS,iBAAiB,EAAE,QAAQ;AAE7C,aAAS,SAAS,KAAK,EAAE,QAAQ;AAEjC,UAAM,WAAW;AAEjB,UAAM,iBAAiB,SAAU,UAAU,OAAO,QAAQ;AACxD,0BAAoB,sBAAsB,MAAM,WAAW;AAC3D,0BAAoB,sBAAsB,OAAO,WAAW;AAE5D,qBAAe,gBAAgB,MAAM,WAAW;AAEhD,aAAO,IAAI,GAAG,GAAG,CAAC;AAClB,aAAO,aAAa,cAAc;AAElC,WAAK,WAAW,qBAAqB,mBAAmB;AAIxD,UAAI,KAAK,IAAI,MAAM,IAAI;AAAG;AAE1B,WAAK,QAAQ,MAAM,EAAE,OAAQ;AAC7B,WAAK,IAAI,mBAAmB;AAE5B,qBAAe,gBAAgB,OAAO,WAAW;AAEjD,qBAAe,IAAI,GAAG,GAAG,EAAE;AAC3B,qBAAe,aAAa,cAAc;AAC1C,qBAAe,IAAI,mBAAmB;AAEtC,aAAO,WAAW,qBAAqB,cAAc;AACrD,aAAO,QAAQ,MAAM,EAAE,OAAQ;AAC/B,aAAO,IAAI,mBAAmB;AAE9B,mBAAa,SAAS,KAAK,IAAI;AAC/B,mBAAa,GAAG,IAAI,GAAG,GAAG,CAAC;AAC3B,mBAAa,GAAG,aAAa,cAAc;AAC3C,mBAAa,GAAG,QAAQ,MAAM;AAC9B,mBAAa,OAAO,MAAM;AAE1B,mBAAa,MAAM,OAAO;AAE1B,mBAAa,kBAAmB;AAChC,mBAAa,iBAAiB,KAAK,OAAO,gBAAgB;AAG1D,oBAAc,IAAI,KAAK,GAAK,GAAK,KAAK,GAAK,KAAK,GAAK,KAAK,GAAK,GAAK,KAAK,KAAK,GAAK,GAAK,GAAK,CAAG;AAChG,oBAAc,SAAS,aAAa,gBAAgB;AACpD,oBAAc,SAAS,aAAa,kBAAkB;AAItD,kBAAY,8BAA8B,QAAQ,mBAAmB;AACrE,kBAAY,aAAa,aAAa,kBAAkB;AAExD,gBAAU,IAAI,YAAY,OAAO,GAAG,YAAY,OAAO,GAAG,YAAY,OAAO,GAAG,YAAY,QAAQ;AAEpG,YAAM,mBAAmB,aAAa;AAEtC,QAAE,KAAK,KAAK,KAAK,UAAU,CAAC,IAAI,iBAAiB,SAAS,CAAC,KAAK,iBAAiB,SAAS,CAAC;AAC3F,QAAE,KAAK,KAAK,KAAK,UAAU,CAAC,IAAI,iBAAiB,SAAS,CAAC,KAAK,iBAAiB,SAAS,CAAC;AAC3F,QAAE,IAAI;AACN,QAAE,KAAK,IAAM,iBAAiB,SAAS,EAAE,KAAK,iBAAiB,SAAS,EAAE;AAG1E,gBAAU,eAAe,IAAM,UAAU,IAAI,CAAC,CAAC;AAG/C,uBAAiB,SAAS,CAAC,IAAI,UAAU;AACzC,uBAAiB,SAAS,CAAC,IAAI,UAAU;AACzC,uBAAiB,SAAS,EAAE,IAAI,UAAU,IAAI,IAAM;AACpD,uBAAiB,SAAS,EAAE,IAAI,UAAU;AAE1C,UAAI,sBAAsB,OAAO,WAAW;AAI5C,YAAM,sBAAsB,SAAS,gBAAiB;AAEtD,YAAM,mBAAmB,SAAS,GAAG;AACrC,YAAM,0BAA0B,SAAS,UAAU;AAEnD,YAAM,UAAU;AAEhB,eAAS,GAAG,UAAU;AACtB,eAAS,UAAU,aAAa;AAEhC,eAAS,gBAAgB,YAAY;AAErC,eAAS,MAAM,QAAQ,MAAM,QAAQ,IAAI;AAEzC,UAAI,SAAS,cAAc;AAAO,iBAAS,MAAO;AAClD,eAAS,OAAO,OAAO,YAAY;AAEnC,YAAM,UAAU;AAEhB,eAAS,GAAG,UAAU;AACtB,eAAS,UAAU,aAAa;AAEhC,eAAS,gBAAgB,mBAAmB;AAI5C,YAAM,WAAW,OAAO;AAExB,UAAI,aAAa,QAAW;AAC1B,iBAAS,MAAM,SAAS,QAAQ;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AACH;;"}
package/objects/Water.js CHANGED
@@ -1,4 +1,5 @@
1
- import { Mesh, Vector3, Color, FrontSide, Plane, Matrix4, Vector4, PerspectiveCamera, WebGLRenderTarget, UniformsUtils, UniformsLib, REVISION, ShaderMaterial } from "three";
1
+ import { Mesh, Vector3, Color, FrontSide, Plane, Matrix4, Vector4, PerspectiveCamera, WebGLRenderTarget, UniformsUtils, UniformsLib, ShaderMaterial } from "three";
2
+ import { version } from "../_polyfill/constants.js";
2
3
  class Water extends Mesh {
3
4
  constructor(geometry, options = {}) {
4
5
  super(geometry);
@@ -148,7 +149,7 @@ class Water extends Mesh {
148
149
  gl_FragColor = vec4( outgoingLight, alpha );
149
150
 
150
151
  #include <tonemapping_fragment>
151
- #include <${parseInt(REVISION.replace(/\D+/g, "")) >= 154 ? "colorspace_fragment" : "encodings_fragment"}>
152
+ #include <${version >= 154 ? "colorspace_fragment" : "encodings_fragment"}>
152
153
  #include <fog_fragment>
153
154
  }`
154
155
  )
@@ -1 +1 @@
1
- {"version":3,"file":"Water.js","sources":["../../src/objects/Water.js"],"sourcesContent":["import {\n Color,\n FrontSide,\n Matrix4,\n Mesh,\n PerspectiveCamera,\n Plane,\n ShaderMaterial,\n UniformsLib,\n UniformsUtils,\n Vector3,\n Vector4,\n WebGLRenderTarget,\n REVISION,\n} from 'three'\n\n/**\n * Work based on :\n * https://github.com/Slayvin: Flat mirror for three.js\n * https://home.adelphi.edu/~stemkoski/ : An implementation of water shader based on the flat mirror\n * http://29a.ch/ && http://29a.ch/slides/2012/webglwater/ : Water shader explanations in WebGL\n */\n\nclass Water extends Mesh {\n constructor(geometry, options = {}) {\n super(geometry)\n\n this.isWater = true\n\n const scope = this\n\n const textureWidth = options.textureWidth !== undefined ? options.textureWidth : 512\n const textureHeight = options.textureHeight !== undefined ? options.textureHeight : 512\n\n const clipBias = options.clipBias !== undefined ? options.clipBias : 0.0\n const alpha = options.alpha !== undefined ? options.alpha : 1.0\n const time = options.time !== undefined ? options.time : 0.0\n const normalSampler = options.waterNormals !== undefined ? options.waterNormals : null\n const sunDirection = options.sunDirection !== undefined ? options.sunDirection : new Vector3(0.70707, 0.70707, 0.0)\n const sunColor = new Color(options.sunColor !== undefined ? options.sunColor : 0xffffff)\n const waterColor = new Color(options.waterColor !== undefined ? options.waterColor : 0x7f7f7f)\n const eye = options.eye !== undefined ? options.eye : new Vector3(0, 0, 0)\n const distortionScale = options.distortionScale !== undefined ? options.distortionScale : 20.0\n const side = options.side !== undefined ? options.side : FrontSide\n const fog = options.fog !== undefined ? options.fog : false\n\n //\n\n const mirrorPlane = new Plane()\n const normal = new Vector3()\n const mirrorWorldPosition = new Vector3()\n const cameraWorldPosition = new Vector3()\n const rotationMatrix = new Matrix4()\n const lookAtPosition = new Vector3(0, 0, -1)\n const clipPlane = new Vector4()\n\n const view = new Vector3()\n const target = new Vector3()\n const q = new Vector4()\n\n const textureMatrix = new Matrix4()\n\n const mirrorCamera = new PerspectiveCamera()\n\n const renderTarget = new WebGLRenderTarget(textureWidth, textureHeight)\n\n const mirrorShader = {\n uniforms: UniformsUtils.merge([\n UniformsLib['fog'],\n UniformsLib['lights'],\n {\n normalSampler: { value: null },\n mirrorSampler: { value: null },\n alpha: { value: 1.0 },\n time: { value: 0.0 },\n size: { value: 1.0 },\n distortionScale: { value: 20.0 },\n textureMatrix: { value: new Matrix4() },\n sunColor: { value: new Color(0x7f7f7f) },\n sunDirection: { value: new Vector3(0.70707, 0.70707, 0) },\n eye: { value: new Vector3() },\n waterColor: { value: new Color(0x555555) },\n },\n ]),\n\n vertexShader: /* glsl */ `\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\tuniform float time;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\t#include <common>\n\t\t\t\t#include <fog_pars_vertex>\n\t\t\t\t#include <shadowmap_pars_vertex>\n\t\t\t\t#include <logdepthbuf_pars_vertex>\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tmirrorCoord = modelMatrix * vec4( position, 1.0 );\n\t\t\t\t\tworldPosition = mirrorCoord.xyzw;\n\t\t\t\t\tmirrorCoord = textureMatrix * mirrorCoord;\n\t\t\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t\t#include <beginnormal_vertex>\n\t\t\t\t#include <defaultnormal_vertex>\n\t\t\t\t#include <logdepthbuf_vertex>\n\t\t\t\t#include <fog_vertex>\n\t\t\t\t#include <shadowmap_vertex>\n\t\t\t}`,\n\n fragmentShader: /* glsl */ `\n\t\t\t\tuniform sampler2D mirrorSampler;\n\t\t\t\tuniform float alpha;\n\t\t\t\tuniform float time;\n\t\t\t\tuniform float size;\n\t\t\t\tuniform float distortionScale;\n\t\t\t\tuniform sampler2D normalSampler;\n\t\t\t\tuniform vec3 sunColor;\n\t\t\t\tuniform vec3 sunDirection;\n\t\t\t\tuniform vec3 eye;\n\t\t\t\tuniform vec3 waterColor;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\tvec4 getNoise( vec2 uv ) {\n\t\t\t\t\tvec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0);\n\t\t\t\t\tvec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 );\n\t\t\t\t\tvec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 );\n\t\t\t\t\tvec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 );\n\t\t\t\t\tvec4 noise = texture2D( normalSampler, uv0 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv1 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv2 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv3 );\n\t\t\t\t\treturn noise * 0.5 - 1.0;\n\t\t\t\t}\n\n\t\t\t\tvoid sunLight( const vec3 surfaceNormal, const vec3 eyeDirection, float shiny, float spec, float diffuse, inout vec3 diffuseColor, inout vec3 specularColor ) {\n\t\t\t\t\tvec3 reflection = normalize( reflect( -sunDirection, surfaceNormal ) );\n\t\t\t\t\tfloat direction = max( 0.0, dot( eyeDirection, reflection ) );\n\t\t\t\t\tspecularColor += pow( direction, shiny ) * sunColor * spec;\n\t\t\t\t\tdiffuseColor += max( dot( sunDirection, surfaceNormal ), 0.0 ) * sunColor * diffuse;\n\t\t\t\t}\n\n\t\t\t\t#include <common>\n\t\t\t\t#include <packing>\n\t\t\t\t#include <bsdfs>\n\t\t\t\t#include <fog_pars_fragment>\n\t\t\t\t#include <logdepthbuf_pars_fragment>\n\t\t\t\t#include <lights_pars_begin>\n\t\t\t\t#include <shadowmap_pars_fragment>\n\t\t\t\t#include <shadowmask_pars_fragment>\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include <logdepthbuf_fragment>\n\t\t\t\t\tvec4 noise = getNoise( worldPosition.xz * size );\n\t\t\t\t\tvec3 surfaceNormal = normalize( noise.xzy * vec3( 1.5, 1.0, 1.5 ) );\n\n\t\t\t\t\tvec3 diffuseLight = vec3(0.0);\n\t\t\t\t\tvec3 specularLight = vec3(0.0);\n\n\t\t\t\t\tvec3 worldToEye = eye-worldPosition.xyz;\n\t\t\t\t\tvec3 eyeDirection = normalize( worldToEye );\n\t\t\t\t\tsunLight( surfaceNormal, eyeDirection, 100.0, 2.0, 0.5, diffuseLight, specularLight );\n\n\t\t\t\t\tfloat distance = length(worldToEye);\n\n\t\t\t\t\tvec2 distortion = surfaceNormal.xz * ( 0.001 + 1.0 / distance ) * distortionScale;\n\t\t\t\t\tvec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) );\n\n\t\t\t\t\tfloat theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );\n\t\t\t\t\tfloat rf0 = 0.3;\n\t\t\t\t\tfloat reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 );\n\t\t\t\t\tvec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor;\n\t\t\t\t\tvec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance);\n\t\t\t\t\tvec3 outgoingLight = albedo;\n\t\t\t\t\tgl_FragColor = vec4( outgoingLight, alpha );\n\n\t\t\t\t\t#include <tonemapping_fragment>\n\t\t\t\t\t#include <${parseInt(REVISION.replace(/\\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n\t\t\t\t\t#include <fog_fragment>\t\n\t\t\t\t}`,\n }\n\n const material = new ShaderMaterial({\n fragmentShader: mirrorShader.fragmentShader,\n vertexShader: mirrorShader.vertexShader,\n uniforms: UniformsUtils.clone(mirrorShader.uniforms),\n lights: true,\n side: side,\n fog: fog,\n })\n\n material.uniforms['mirrorSampler'].value = renderTarget.texture\n material.uniforms['textureMatrix'].value = textureMatrix\n material.uniforms['alpha'].value = alpha\n material.uniforms['time'].value = time\n material.uniforms['normalSampler'].value = normalSampler\n material.uniforms['sunColor'].value = sunColor\n material.uniforms['waterColor'].value = waterColor\n material.uniforms['sunDirection'].value = sunDirection\n material.uniforms['distortionScale'].value = distortionScale\n\n material.uniforms['eye'].value = eye\n\n scope.material = material\n\n scope.onBeforeRender = function (renderer, scene, camera) {\n mirrorWorldPosition.setFromMatrixPosition(scope.matrixWorld)\n cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld)\n\n rotationMatrix.extractRotation(scope.matrixWorld)\n\n normal.set(0, 0, 1)\n normal.applyMatrix4(rotationMatrix)\n\n view.subVectors(mirrorWorldPosition, cameraWorldPosition)\n\n // Avoid rendering when mirror is facing away\n\n if (view.dot(normal) > 0) return\n\n view.reflect(normal).negate()\n view.add(mirrorWorldPosition)\n\n rotationMatrix.extractRotation(camera.matrixWorld)\n\n lookAtPosition.set(0, 0, -1)\n lookAtPosition.applyMatrix4(rotationMatrix)\n lookAtPosition.add(cameraWorldPosition)\n\n target.subVectors(mirrorWorldPosition, lookAtPosition)\n target.reflect(normal).negate()\n target.add(mirrorWorldPosition)\n\n mirrorCamera.position.copy(view)\n mirrorCamera.up.set(0, 1, 0)\n mirrorCamera.up.applyMatrix4(rotationMatrix)\n mirrorCamera.up.reflect(normal)\n mirrorCamera.lookAt(target)\n\n mirrorCamera.far = camera.far // Used in WebGLBackground\n\n mirrorCamera.updateMatrixWorld()\n mirrorCamera.projectionMatrix.copy(camera.projectionMatrix)\n\n // Update the texture matrix\n 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)\n textureMatrix.multiply(mirrorCamera.projectionMatrix)\n textureMatrix.multiply(mirrorCamera.matrixWorldInverse)\n\n // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html\n // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf\n mirrorPlane.setFromNormalAndCoplanarPoint(normal, mirrorWorldPosition)\n mirrorPlane.applyMatrix4(mirrorCamera.matrixWorldInverse)\n\n clipPlane.set(mirrorPlane.normal.x, mirrorPlane.normal.y, mirrorPlane.normal.z, mirrorPlane.constant)\n\n const projectionMatrix = mirrorCamera.projectionMatrix\n\n q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0]\n q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5]\n q.z = -1.0\n q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14]\n\n // Calculate the scaled plane vector\n clipPlane.multiplyScalar(2.0 / clipPlane.dot(q))\n\n // Replacing the third row of the projection matrix\n projectionMatrix.elements[2] = clipPlane.x\n projectionMatrix.elements[6] = clipPlane.y\n projectionMatrix.elements[10] = clipPlane.z + 1.0 - clipBias\n projectionMatrix.elements[14] = clipPlane.w\n\n eye.setFromMatrixPosition(camera.matrixWorld)\n\n // Render\n\n const currentRenderTarget = renderer.getRenderTarget()\n\n const currentXrEnabled = renderer.xr.enabled\n const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate\n\n scope.visible = false\n\n renderer.xr.enabled = false // Avoid camera modification and recursion\n renderer.shadowMap.autoUpdate = false // Avoid re-computing shadows\n\n renderer.setRenderTarget(renderTarget)\n\n renderer.state.buffers.depth.setMask(true) // make sure the depth buffer is writable so it can be properly cleared, see #18897\n\n if (renderer.autoClear === false) renderer.clear()\n renderer.render(scene, mirrorCamera)\n\n scope.visible = true\n\n renderer.xr.enabled = currentXrEnabled\n renderer.shadowMap.autoUpdate = currentShadowAutoUpdate\n\n renderer.setRenderTarget(currentRenderTarget)\n\n // Restore viewport\n\n const viewport = camera.viewport\n\n if (viewport !== undefined) {\n renderer.state.viewport(viewport)\n }\n }\n }\n}\n\nexport { Water }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Water.js","sources":["../../src/objects/Water.js"],"sourcesContent":["import {\n Color,\n FrontSide,\n Matrix4,\n Mesh,\n PerspectiveCamera,\n Plane,\n ShaderMaterial,\n UniformsLib,\n UniformsUtils,\n Vector3,\n Vector4,\n WebGLRenderTarget,\n} from 'three'\nimport { version } from '../_polyfill/constants'\n\n/**\n * Work based on :\n * https://github.com/Slayvin: Flat mirror for three.js\n * https://home.adelphi.edu/~stemkoski/ : An implementation of water shader based on the flat mirror\n * http://29a.ch/ && http://29a.ch/slides/2012/webglwater/ : Water shader explanations in WebGL\n */\n\nclass Water extends Mesh {\n constructor(geometry, options = {}) {\n super(geometry)\n\n this.isWater = true\n\n const scope = this\n\n const textureWidth = options.textureWidth !== undefined ? options.textureWidth : 512\n const textureHeight = options.textureHeight !== undefined ? options.textureHeight : 512\n\n const clipBias = options.clipBias !== undefined ? options.clipBias : 0.0\n const alpha = options.alpha !== undefined ? options.alpha : 1.0\n const time = options.time !== undefined ? options.time : 0.0\n const normalSampler = options.waterNormals !== undefined ? options.waterNormals : null\n const sunDirection = options.sunDirection !== undefined ? options.sunDirection : new Vector3(0.70707, 0.70707, 0.0)\n const sunColor = new Color(options.sunColor !== undefined ? options.sunColor : 0xffffff)\n const waterColor = new Color(options.waterColor !== undefined ? options.waterColor : 0x7f7f7f)\n const eye = options.eye !== undefined ? options.eye : new Vector3(0, 0, 0)\n const distortionScale = options.distortionScale !== undefined ? options.distortionScale : 20.0\n const side = options.side !== undefined ? options.side : FrontSide\n const fog = options.fog !== undefined ? options.fog : false\n\n //\n\n const mirrorPlane = new Plane()\n const normal = new Vector3()\n const mirrorWorldPosition = new Vector3()\n const cameraWorldPosition = new Vector3()\n const rotationMatrix = new Matrix4()\n const lookAtPosition = new Vector3(0, 0, -1)\n const clipPlane = new Vector4()\n\n const view = new Vector3()\n const target = new Vector3()\n const q = new Vector4()\n\n const textureMatrix = new Matrix4()\n\n const mirrorCamera = new PerspectiveCamera()\n\n const renderTarget = new WebGLRenderTarget(textureWidth, textureHeight)\n\n const mirrorShader = {\n uniforms: UniformsUtils.merge([\n UniformsLib['fog'],\n UniformsLib['lights'],\n {\n normalSampler: { value: null },\n mirrorSampler: { value: null },\n alpha: { value: 1.0 },\n time: { value: 0.0 },\n size: { value: 1.0 },\n distortionScale: { value: 20.0 },\n textureMatrix: { value: new Matrix4() },\n sunColor: { value: new Color(0x7f7f7f) },\n sunDirection: { value: new Vector3(0.70707, 0.70707, 0) },\n eye: { value: new Vector3() },\n waterColor: { value: new Color(0x555555) },\n },\n ]),\n\n vertexShader: /* glsl */ `\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\tuniform float time;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\t#include <common>\n\t\t\t\t#include <fog_pars_vertex>\n\t\t\t\t#include <shadowmap_pars_vertex>\n\t\t\t\t#include <logdepthbuf_pars_vertex>\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tmirrorCoord = modelMatrix * vec4( position, 1.0 );\n\t\t\t\t\tworldPosition = mirrorCoord.xyzw;\n\t\t\t\t\tmirrorCoord = textureMatrix * mirrorCoord;\n\t\t\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t\t#include <beginnormal_vertex>\n\t\t\t\t#include <defaultnormal_vertex>\n\t\t\t\t#include <logdepthbuf_vertex>\n\t\t\t\t#include <fog_vertex>\n\t\t\t\t#include <shadowmap_vertex>\n\t\t\t}`,\n\n fragmentShader: /* glsl */ `\n\t\t\t\tuniform sampler2D mirrorSampler;\n\t\t\t\tuniform float alpha;\n\t\t\t\tuniform float time;\n\t\t\t\tuniform float size;\n\t\t\t\tuniform float distortionScale;\n\t\t\t\tuniform sampler2D normalSampler;\n\t\t\t\tuniform vec3 sunColor;\n\t\t\t\tuniform vec3 sunDirection;\n\t\t\t\tuniform vec3 eye;\n\t\t\t\tuniform vec3 waterColor;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\tvec4 getNoise( vec2 uv ) {\n\t\t\t\t\tvec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0);\n\t\t\t\t\tvec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 );\n\t\t\t\t\tvec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 );\n\t\t\t\t\tvec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 );\n\t\t\t\t\tvec4 noise = texture2D( normalSampler, uv0 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv1 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv2 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv3 );\n\t\t\t\t\treturn noise * 0.5 - 1.0;\n\t\t\t\t}\n\n\t\t\t\tvoid sunLight( const vec3 surfaceNormal, const vec3 eyeDirection, float shiny, float spec, float diffuse, inout vec3 diffuseColor, inout vec3 specularColor ) {\n\t\t\t\t\tvec3 reflection = normalize( reflect( -sunDirection, surfaceNormal ) );\n\t\t\t\t\tfloat direction = max( 0.0, dot( eyeDirection, reflection ) );\n\t\t\t\t\tspecularColor += pow( direction, shiny ) * sunColor * spec;\n\t\t\t\t\tdiffuseColor += max( dot( sunDirection, surfaceNormal ), 0.0 ) * sunColor * diffuse;\n\t\t\t\t}\n\n\t\t\t\t#include <common>\n\t\t\t\t#include <packing>\n\t\t\t\t#include <bsdfs>\n\t\t\t\t#include <fog_pars_fragment>\n\t\t\t\t#include <logdepthbuf_pars_fragment>\n\t\t\t\t#include <lights_pars_begin>\n\t\t\t\t#include <shadowmap_pars_fragment>\n\t\t\t\t#include <shadowmask_pars_fragment>\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include <logdepthbuf_fragment>\n\t\t\t\t\tvec4 noise = getNoise( worldPosition.xz * size );\n\t\t\t\t\tvec3 surfaceNormal = normalize( noise.xzy * vec3( 1.5, 1.0, 1.5 ) );\n\n\t\t\t\t\tvec3 diffuseLight = vec3(0.0);\n\t\t\t\t\tvec3 specularLight = vec3(0.0);\n\n\t\t\t\t\tvec3 worldToEye = eye-worldPosition.xyz;\n\t\t\t\t\tvec3 eyeDirection = normalize( worldToEye );\n\t\t\t\t\tsunLight( surfaceNormal, eyeDirection, 100.0, 2.0, 0.5, diffuseLight, specularLight );\n\n\t\t\t\t\tfloat distance = length(worldToEye);\n\n\t\t\t\t\tvec2 distortion = surfaceNormal.xz * ( 0.001 + 1.0 / distance ) * distortionScale;\n\t\t\t\t\tvec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) );\n\n\t\t\t\t\tfloat theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );\n\t\t\t\t\tfloat rf0 = 0.3;\n\t\t\t\t\tfloat reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 );\n\t\t\t\t\tvec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor;\n\t\t\t\t\tvec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance);\n\t\t\t\t\tvec3 outgoingLight = albedo;\n\t\t\t\t\tgl_FragColor = vec4( outgoingLight, alpha );\n\n\t\t\t\t\t#include <tonemapping_fragment>\n\t\t\t\t\t#include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n\t\t\t\t\t#include <fog_fragment>\t\n\t\t\t\t}`,\n }\n\n const material = new ShaderMaterial({\n fragmentShader: mirrorShader.fragmentShader,\n vertexShader: mirrorShader.vertexShader,\n uniforms: UniformsUtils.clone(mirrorShader.uniforms),\n lights: true,\n side: side,\n fog: fog,\n })\n\n material.uniforms['mirrorSampler'].value = renderTarget.texture\n material.uniforms['textureMatrix'].value = textureMatrix\n material.uniforms['alpha'].value = alpha\n material.uniforms['time'].value = time\n material.uniforms['normalSampler'].value = normalSampler\n material.uniforms['sunColor'].value = sunColor\n material.uniforms['waterColor'].value = waterColor\n material.uniforms['sunDirection'].value = sunDirection\n material.uniforms['distortionScale'].value = distortionScale\n\n material.uniforms['eye'].value = eye\n\n scope.material = material\n\n scope.onBeforeRender = function (renderer, scene, camera) {\n mirrorWorldPosition.setFromMatrixPosition(scope.matrixWorld)\n cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld)\n\n rotationMatrix.extractRotation(scope.matrixWorld)\n\n normal.set(0, 0, 1)\n normal.applyMatrix4(rotationMatrix)\n\n view.subVectors(mirrorWorldPosition, cameraWorldPosition)\n\n // Avoid rendering when mirror is facing away\n\n if (view.dot(normal) > 0) return\n\n view.reflect(normal).negate()\n view.add(mirrorWorldPosition)\n\n rotationMatrix.extractRotation(camera.matrixWorld)\n\n lookAtPosition.set(0, 0, -1)\n lookAtPosition.applyMatrix4(rotationMatrix)\n lookAtPosition.add(cameraWorldPosition)\n\n target.subVectors(mirrorWorldPosition, lookAtPosition)\n target.reflect(normal).negate()\n target.add(mirrorWorldPosition)\n\n mirrorCamera.position.copy(view)\n mirrorCamera.up.set(0, 1, 0)\n mirrorCamera.up.applyMatrix4(rotationMatrix)\n mirrorCamera.up.reflect(normal)\n mirrorCamera.lookAt(target)\n\n mirrorCamera.far = camera.far // Used in WebGLBackground\n\n mirrorCamera.updateMatrixWorld()\n mirrorCamera.projectionMatrix.copy(camera.projectionMatrix)\n\n // Update the texture matrix\n 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)\n textureMatrix.multiply(mirrorCamera.projectionMatrix)\n textureMatrix.multiply(mirrorCamera.matrixWorldInverse)\n\n // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html\n // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf\n mirrorPlane.setFromNormalAndCoplanarPoint(normal, mirrorWorldPosition)\n mirrorPlane.applyMatrix4(mirrorCamera.matrixWorldInverse)\n\n clipPlane.set(mirrorPlane.normal.x, mirrorPlane.normal.y, mirrorPlane.normal.z, mirrorPlane.constant)\n\n const projectionMatrix = mirrorCamera.projectionMatrix\n\n q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0]\n q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5]\n q.z = -1.0\n q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14]\n\n // Calculate the scaled plane vector\n clipPlane.multiplyScalar(2.0 / clipPlane.dot(q))\n\n // Replacing the third row of the projection matrix\n projectionMatrix.elements[2] = clipPlane.x\n projectionMatrix.elements[6] = clipPlane.y\n projectionMatrix.elements[10] = clipPlane.z + 1.0 - clipBias\n projectionMatrix.elements[14] = clipPlane.w\n\n eye.setFromMatrixPosition(camera.matrixWorld)\n\n // Render\n\n const currentRenderTarget = renderer.getRenderTarget()\n\n const currentXrEnabled = renderer.xr.enabled\n const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate\n\n scope.visible = false\n\n renderer.xr.enabled = false // Avoid camera modification and recursion\n renderer.shadowMap.autoUpdate = false // Avoid re-computing shadows\n\n renderer.setRenderTarget(renderTarget)\n\n renderer.state.buffers.depth.setMask(true) // make sure the depth buffer is writable so it can be properly cleared, see #18897\n\n if (renderer.autoClear === false) renderer.clear()\n renderer.render(scene, mirrorCamera)\n\n scope.visible = true\n\n renderer.xr.enabled = currentXrEnabled\n renderer.shadowMap.autoUpdate = currentShadowAutoUpdate\n\n renderer.setRenderTarget(currentRenderTarget)\n\n // Restore viewport\n\n const viewport = camera.viewport\n\n if (viewport !== undefined) {\n renderer.state.viewport(viewport)\n }\n }\n }\n}\n\nexport { Water }\n"],"names":[],"mappings":"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"}