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
@@ -1 +1 @@
1
- {"version":3,"file":"GeometryCompressionUtils.js","sources":["../../src/utils/GeometryCompressionUtils.js"],"sourcesContent":["/**\n * Octahedron and Quantization encodings based on work by:\n *\n * @link https://github.com/tsherif/mesh-quantization-example\n *\n */\n\nimport {\n BufferAttribute,\n Matrix3,\n Matrix4,\n MeshPhongMaterial,\n ShaderChunk,\n ShaderLib,\n UniformsUtils,\n Vector3,\n REVISION,\n} from 'three'\n\nvar GeometryCompressionUtils = {\n /**\n * Make the input mesh.geometry's normal attribute encoded and compressed by 3 different methods.\n * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the normal data.\n *\n * @param {THREE.Mesh} mesh\n * @param {String} encodeMethod\t\t\"DEFAULT\" || \"OCT1Byte\" || \"OCT2Byte\" || \"ANGLES\"\n *\n */\n compressNormals: function (mesh, encodeMethod) {\n if (!mesh.geometry) {\n console.error('Mesh must contain geometry. ')\n }\n\n const normal = mesh.geometry.attributes.normal\n\n if (!normal) {\n console.error('Geometry must contain normal attribute. ')\n }\n\n if (normal.isPacked) return\n\n if (normal.itemSize != 3) {\n console.error('normal.itemSize is not 3, which cannot be encoded. ')\n }\n\n const array = normal.array\n const count = normal.count\n\n let result\n if (encodeMethod == 'DEFAULT') {\n // TODO: Add 1 byte to the result, making the encoded length to be 4 bytes.\n result = new Uint8Array(count * 3)\n\n for (let idx = 0; idx < array.length; idx += 3) {\n const encoded = this.EncodingFuncs.defaultEncode(array[idx], array[idx + 1], array[idx + 2], 1)\n\n result[idx + 0] = encoded[0]\n result[idx + 1] = encoded[1]\n result[idx + 2] = encoded[2]\n }\n\n mesh.geometry.setAttribute('normal', new BufferAttribute(result, 3, true))\n mesh.geometry.attributes.normal.bytes = result.length * 1\n } else if (encodeMethod == 'OCT1Byte') {\n /**\n * It is not recommended to use 1-byte octahedron normals encoding unless you want to extremely reduce the memory usage\n * As it makes vertex data not aligned to a 4 byte boundary which may harm some WebGL implementations and sometimes the normal distortion is visible\n * Please refer to @zeux 's comments in https://github.com/mrdoob/three.js/pull/18208\n */\n\n result = new Int8Array(count * 2)\n\n for (let idx = 0; idx < array.length; idx += 3) {\n const encoded = this.EncodingFuncs.octEncodeBest(array[idx], array[idx + 1], array[idx + 2], 1)\n\n result[(idx / 3) * 2 + 0] = encoded[0]\n result[(idx / 3) * 2 + 1] = encoded[1]\n }\n\n mesh.geometry.setAttribute('normal', new BufferAttribute(result, 2, true))\n mesh.geometry.attributes.normal.bytes = result.length * 1\n } else if (encodeMethod == 'OCT2Byte') {\n result = new Int16Array(count * 2)\n\n for (let idx = 0; idx < array.length; idx += 3) {\n const encoded = this.EncodingFuncs.octEncodeBest(array[idx], array[idx + 1], array[idx + 2], 2)\n\n result[(idx / 3) * 2 + 0] = encoded[0]\n result[(idx / 3) * 2 + 1] = encoded[1]\n }\n\n mesh.geometry.setAttribute('normal', new BufferAttribute(result, 2, true))\n mesh.geometry.attributes.normal.bytes = result.length * 2\n } else if (encodeMethod == 'ANGLES') {\n result = new Uint16Array(count * 2)\n\n for (let idx = 0; idx < array.length; idx += 3) {\n const encoded = this.EncodingFuncs.anglesEncode(array[idx], array[idx + 1], array[idx + 2])\n\n result[(idx / 3) * 2 + 0] = encoded[0]\n result[(idx / 3) * 2 + 1] = encoded[1]\n }\n\n mesh.geometry.setAttribute('normal', new BufferAttribute(result, 2, true))\n mesh.geometry.attributes.normal.bytes = result.length * 2\n } else {\n console.error('Unrecognized encoding method, should be `DEFAULT` or `ANGLES` or `OCT`. ')\n }\n\n mesh.geometry.attributes.normal.needsUpdate = true\n mesh.geometry.attributes.normal.isPacked = true\n mesh.geometry.attributes.normal.packingMethod = encodeMethod\n\n // modify material\n if (!(mesh.material instanceof PackedPhongMaterial)) {\n mesh.material = new PackedPhongMaterial().copy(mesh.material)\n }\n\n if (encodeMethod == 'ANGLES') {\n mesh.material.defines.USE_PACKED_NORMAL = 0\n }\n\n if (encodeMethod == 'OCT1Byte') {\n mesh.material.defines.USE_PACKED_NORMAL = 1\n }\n\n if (encodeMethod == 'OCT2Byte') {\n mesh.material.defines.USE_PACKED_NORMAL = 1\n }\n\n if (encodeMethod == 'DEFAULT') {\n mesh.material.defines.USE_PACKED_NORMAL = 2\n }\n },\n\n /**\n * Make the input mesh.geometry's position attribute encoded and compressed.\n * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the position data.\n *\n * @param {THREE.Mesh} mesh\n *\n */\n compressPositions: function (mesh) {\n if (!mesh.geometry) {\n console.error('Mesh must contain geometry. ')\n }\n\n const position = mesh.geometry.attributes.position\n\n if (!position) {\n console.error('Geometry must contain position attribute. ')\n }\n\n if (position.isPacked) return\n\n if (position.itemSize != 3) {\n console.error('position.itemSize is not 3, which cannot be packed. ')\n }\n\n const array = position.array\n const encodingBytes = 2\n\n const result = this.EncodingFuncs.quantizedEncode(array, encodingBytes)\n\n const quantized = result.quantized\n const decodeMat = result.decodeMat\n\n // IMPORTANT: calculate original geometry bounding info first, before updating packed positions\n if (mesh.geometry.boundingBox == null) mesh.geometry.computeBoundingBox()\n if (mesh.geometry.boundingSphere == null) mesh.geometry.computeBoundingSphere()\n\n mesh.geometry.setAttribute('position', new BufferAttribute(quantized, 3))\n mesh.geometry.attributes.position.isPacked = true\n mesh.geometry.attributes.position.needsUpdate = true\n mesh.geometry.attributes.position.bytes = quantized.length * encodingBytes\n\n // modify material\n if (!(mesh.material instanceof PackedPhongMaterial)) {\n mesh.material = new PackedPhongMaterial().copy(mesh.material)\n }\n\n mesh.material.defines.USE_PACKED_POSITION = 0\n\n mesh.material.uniforms.quantizeMatPos.value = decodeMat\n mesh.material.uniforms.quantizeMatPos.needsUpdate = true\n },\n\n /**\n * Make the input mesh.geometry's uv attribute encoded and compressed.\n * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the uv data.\n *\n * @param {THREE.Mesh} mesh\n *\n */\n compressUvs: function (mesh) {\n if (!mesh.geometry) {\n console.error('Mesh must contain geometry property. ')\n }\n\n const uvs = mesh.geometry.attributes.uv\n\n if (!uvs) {\n console.error('Geometry must contain uv attribute. ')\n }\n\n if (uvs.isPacked) return\n\n const range = { min: Infinity, max: -Infinity }\n\n const array = uvs.array\n\n for (let i = 0; i < array.length; i++) {\n range.min = Math.min(range.min, array[i])\n range.max = Math.max(range.max, array[i])\n }\n\n let result\n\n if (range.min >= -1.0 && range.max <= 1.0) {\n // use default encoding method\n result = new Uint16Array(array.length)\n\n for (let i = 0; i < array.length; i += 2) {\n const encoded = this.EncodingFuncs.defaultEncode(array[i], array[i + 1], 0, 2)\n\n result[i] = encoded[0]\n result[i + 1] = encoded[1]\n }\n\n mesh.geometry.setAttribute('uv', new BufferAttribute(result, 2, true))\n mesh.geometry.attributes.uv.isPacked = true\n mesh.geometry.attributes.uv.needsUpdate = true\n mesh.geometry.attributes.uv.bytes = result.length * 2\n\n if (!(mesh.material instanceof PackedPhongMaterial)) {\n mesh.material = new PackedPhongMaterial().copy(mesh.material)\n }\n\n mesh.material.defines.USE_PACKED_UV = 0\n } else {\n // use quantized encoding method\n result = this.EncodingFuncs.quantizedEncodeUV(array, 2)\n\n mesh.geometry.setAttribute('uv', new BufferAttribute(result.quantized, 2))\n mesh.geometry.attributes.uv.isPacked = true\n mesh.geometry.attributes.uv.needsUpdate = true\n mesh.geometry.attributes.uv.bytes = result.quantized.length * 2\n\n if (!(mesh.material instanceof PackedPhongMaterial)) {\n mesh.material = new PackedPhongMaterial().copy(mesh.material)\n }\n\n mesh.material.defines.USE_PACKED_UV = 1\n\n mesh.material.uniforms.quantizeMatUV.value = result.decodeMat\n mesh.material.uniforms.quantizeMatUV.needsUpdate = true\n }\n },\n\n EncodingFuncs: {\n defaultEncode: function (x, y, z, bytes) {\n if (bytes == 1) {\n const tmpx = Math.round((x + 1) * 0.5 * 255)\n const tmpy = Math.round((y + 1) * 0.5 * 255)\n const tmpz = Math.round((z + 1) * 0.5 * 255)\n return new Uint8Array([tmpx, tmpy, tmpz])\n } else if (bytes == 2) {\n const tmpx = Math.round((x + 1) * 0.5 * 65535)\n const tmpy = Math.round((y + 1) * 0.5 * 65535)\n const tmpz = Math.round((z + 1) * 0.5 * 65535)\n return new Uint16Array([tmpx, tmpy, tmpz])\n } else {\n console.error('number of bytes must be 1 or 2')\n }\n },\n\n defaultDecode: function (array, bytes) {\n if (bytes == 1) {\n return [(array[0] / 255) * 2.0 - 1.0, (array[1] / 255) * 2.0 - 1.0, (array[2] / 255) * 2.0 - 1.0]\n } else if (bytes == 2) {\n return [(array[0] / 65535) * 2.0 - 1.0, (array[1] / 65535) * 2.0 - 1.0, (array[2] / 65535) * 2.0 - 1.0]\n } else {\n console.error('number of bytes must be 1 or 2')\n }\n },\n\n // for `Angles` encoding\n anglesEncode: function (x, y, z) {\n const normal0 = parseInt(0.5 * (1.0 + Math.atan2(y, x) / Math.PI) * 65535)\n const normal1 = parseInt(0.5 * (1.0 + z) * 65535)\n return new Uint16Array([normal0, normal1])\n },\n\n // for `Octahedron` encoding\n octEncodeBest: function (x, y, z, bytes) {\n var oct, dec, best, currentCos, bestCos\n\n // Test various combinations of ceil and floor\n // to minimize rounding errors\n best = oct = octEncodeVec3(x, y, z, 'floor', 'floor')\n dec = octDecodeVec2(oct)\n bestCos = dot(x, y, z, dec)\n\n oct = octEncodeVec3(x, y, z, 'ceil', 'floor')\n dec = octDecodeVec2(oct)\n currentCos = dot(x, y, z, dec)\n\n if (currentCos > bestCos) {\n best = oct\n bestCos = currentCos\n }\n\n oct = octEncodeVec3(x, y, z, 'floor', 'ceil')\n dec = octDecodeVec2(oct)\n currentCos = dot(x, y, z, dec)\n\n if (currentCos > bestCos) {\n best = oct\n bestCos = currentCos\n }\n\n oct = octEncodeVec3(x, y, z, 'ceil', 'ceil')\n dec = octDecodeVec2(oct)\n currentCos = dot(x, y, z, dec)\n\n if (currentCos > bestCos) {\n best = oct\n }\n\n return best\n\n function octEncodeVec3(x0, y0, z0, xfunc, yfunc) {\n var x = x0 / (Math.abs(x0) + Math.abs(y0) + Math.abs(z0))\n var y = y0 / (Math.abs(x0) + Math.abs(y0) + Math.abs(z0))\n\n if (z < 0) {\n var tempx = (1 - Math.abs(y)) * (x >= 0 ? 1 : -1)\n var tempy = (1 - Math.abs(x)) * (y >= 0 ? 1 : -1)\n\n x = tempx\n y = tempy\n\n var diff = 1 - Math.abs(x) - Math.abs(y)\n if (diff > 0) {\n diff += 0.001\n x += x > 0 ? diff / 2 : -diff / 2\n y += y > 0 ? diff / 2 : -diff / 2\n }\n }\n\n if (bytes == 1) {\n return new Int8Array([Math[xfunc](x * 127.5 + (x < 0 ? 1 : 0)), Math[yfunc](y * 127.5 + (y < 0 ? 1 : 0))])\n }\n\n if (bytes == 2) {\n return new Int16Array([\n Math[xfunc](x * 32767.5 + (x < 0 ? 1 : 0)),\n Math[yfunc](y * 32767.5 + (y < 0 ? 1 : 0)),\n ])\n }\n }\n\n function octDecodeVec2(oct) {\n var x = oct[0]\n var y = oct[1]\n\n if (bytes == 1) {\n x /= x < 0 ? 127 : 128\n y /= y < 0 ? 127 : 128\n } else if (bytes == 2) {\n x /= x < 0 ? 32767 : 32768\n y /= y < 0 ? 32767 : 32768\n }\n\n var z = 1 - Math.abs(x) - Math.abs(y)\n\n if (z < 0) {\n var tmpx = x\n x = (1 - Math.abs(y)) * (x >= 0 ? 1 : -1)\n y = (1 - Math.abs(tmpx)) * (y >= 0 ? 1 : -1)\n }\n\n var length = Math.sqrt(x * x + y * y + z * z)\n\n return [x / length, y / length, z / length]\n }\n\n function dot(x, y, z, vec3) {\n return x * vec3[0] + y * vec3[1] + z * vec3[2]\n }\n },\n\n quantizedEncode: function (array, bytes) {\n let quantized, segments\n\n if (bytes == 1) {\n quantized = new Uint8Array(array.length)\n segments = 255\n } else if (bytes == 2) {\n quantized = new Uint16Array(array.length)\n segments = 65535\n } else {\n console.error('number of bytes error! ')\n }\n\n const decodeMat = new Matrix4()\n\n const min = new Float32Array(3)\n const max = new Float32Array(3)\n\n min[0] = min[1] = min[2] = Number.MAX_VALUE\n max[0] = max[1] = max[2] = -Number.MAX_VALUE\n\n for (let i = 0; i < array.length; i += 3) {\n min[0] = Math.min(min[0], array[i + 0])\n min[1] = Math.min(min[1], array[i + 1])\n min[2] = Math.min(min[2], array[i + 2])\n max[0] = Math.max(max[0], array[i + 0])\n max[1] = Math.max(max[1], array[i + 1])\n max[2] = Math.max(max[2], array[i + 2])\n }\n\n decodeMat.scale(\n new Vector3((max[0] - min[0]) / segments, (max[1] - min[1]) / segments, (max[2] - min[2]) / segments),\n )\n\n decodeMat.elements[12] = min[0]\n decodeMat.elements[13] = min[1]\n decodeMat.elements[14] = min[2]\n\n decodeMat.transpose()\n\n const multiplier = new Float32Array([\n max[0] !== min[0] ? segments / (max[0] - min[0]) : 0,\n max[1] !== min[1] ? segments / (max[1] - min[1]) : 0,\n max[2] !== min[2] ? segments / (max[2] - min[2]) : 0,\n ])\n\n for (let i = 0; i < array.length; i += 3) {\n quantized[i + 0] = Math.floor((array[i + 0] - min[0]) * multiplier[0])\n quantized[i + 1] = Math.floor((array[i + 1] - min[1]) * multiplier[1])\n quantized[i + 2] = Math.floor((array[i + 2] - min[2]) * multiplier[2])\n }\n\n return {\n quantized: quantized,\n decodeMat: decodeMat,\n }\n },\n\n quantizedEncodeUV: function (array, bytes) {\n let quantized, segments\n\n if (bytes == 1) {\n quantized = new Uint8Array(array.length)\n segments = 255\n } else if (bytes == 2) {\n quantized = new Uint16Array(array.length)\n segments = 65535\n } else {\n console.error('number of bytes error! ')\n }\n\n const decodeMat = new Matrix3()\n\n const min = new Float32Array(2)\n const max = new Float32Array(2)\n\n min[0] = min[1] = Number.MAX_VALUE\n max[0] = max[1] = -Number.MAX_VALUE\n\n for (let i = 0; i < array.length; i += 2) {\n min[0] = Math.min(min[0], array[i + 0])\n min[1] = Math.min(min[1], array[i + 1])\n max[0] = Math.max(max[0], array[i + 0])\n max[1] = Math.max(max[1], array[i + 1])\n }\n\n decodeMat.scale((max[0] - min[0]) / segments, (max[1] - min[1]) / segments)\n\n decodeMat.elements[6] = min[0]\n decodeMat.elements[7] = min[1]\n\n decodeMat.transpose()\n\n const multiplier = new Float32Array([\n max[0] !== min[0] ? segments / (max[0] - min[0]) : 0,\n max[1] !== min[1] ? segments / (max[1] - min[1]) : 0,\n ])\n\n for (let i = 0; i < array.length; i += 2) {\n quantized[i + 0] = Math.floor((array[i + 0] - min[0]) * multiplier[0])\n quantized[i + 1] = Math.floor((array[i + 1] - min[1]) * multiplier[1])\n }\n\n return {\n quantized: quantized,\n decodeMat: decodeMat,\n }\n },\n },\n}\n\n/**\n * `PackedPhongMaterial` inherited from THREE.MeshPhongMaterial\n *\n * @param {Object} parameters\n */\nclass PackedPhongMaterial extends MeshPhongMaterial {\n constructor(parameters) {\n super()\n\n this.defines = {}\n this.type = 'PackedPhongMaterial'\n this.uniforms = UniformsUtils.merge([\n ShaderLib.phong.uniforms,\n\n {\n quantizeMatPos: { value: null },\n quantizeMatUV: { value: null },\n },\n ])\n\n this.vertexShader = [\n '#define PHONG',\n\n 'varying vec3 vViewPosition;',\n\n '#ifndef FLAT_SHADED',\n 'varying vec3 vNormal;',\n '#endif',\n\n ShaderChunk.common,\n ShaderChunk.uv_pars_vertex,\n ShaderChunk.uv2_pars_vertex,\n ShaderChunk.displacementmap_pars_vertex,\n ShaderChunk.envmap_pars_vertex,\n ShaderChunk.color_pars_vertex,\n ShaderChunk.fog_pars_vertex,\n ShaderChunk.morphtarget_pars_vertex,\n ShaderChunk.skinning_pars_vertex,\n ShaderChunk.shadowmap_pars_vertex,\n ShaderChunk.logdepthbuf_pars_vertex,\n ShaderChunk.clipping_planes_pars_vertex,\n\n `#ifdef USE_PACKED_NORMAL\n\t\t\t\t\t#if USE_PACKED_NORMAL == 0\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat x = packedNormal.x * 2.0 - 1.0;\n\t\t\t\t\t\t\tfloat y = packedNormal.y * 2.0 - 1.0;\n\t\t\t\t\t\t\tvec2 scth = vec2(sin(x * PI), cos(x * PI));\n\t\t\t\t\t\t\tvec2 scphi = vec2(sqrt(1.0 - y * y), y);\n\t\t\t\t\t\t\treturn normalize( vec3(scth.y * scphi.x, scth.x * scphi.x, scphi.y) );\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_NORMAL == 1\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec3 v = vec3(packedNormal.xy, 1.0 - abs(packedNormal.x) - abs(packedNormal.y));\n\t\t\t\t\t\t\tif (v.z < 0.0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tv.xy = (1.0 - abs(v.yx)) * vec2((v.x >= 0.0) ? +1.0 : -1.0, (v.y >= 0.0) ? +1.0 : -1.0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn normalize(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_NORMAL == 2\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec3 v = (packedNormal * 2.0) - 1.0;\n\t\t\t\t\t\t\treturn normalize(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n `#ifdef USE_PACKED_POSITION\n\t\t\t\t\t#if USE_PACKED_POSITION == 0\n\t\t\t\t\t\tuniform mat4 quantizeMatPos;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n `#ifdef USE_PACKED_UV\n\t\t\t\t\t#if USE_PACKED_UV == 1\n\t\t\t\t\t\tuniform mat3 quantizeMatUV;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n `#ifdef USE_PACKED_UV\n\t\t\t\t\t#if USE_PACKED_UV == 0\n\t\t\t\t\t\tvec2 decodeUV(vec2 packedUV)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec2 uv = (packedUV * 2.0) - 1.0;\n\t\t\t\t\t\t\treturn uv;\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_UV == 1\n\t\t\t\t\t\tvec2 decodeUV(vec2 packedUV)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec2 uv = ( vec3(packedUV, 1.0) * quantizeMatUV ).xy;\n\t\t\t\t\t\t\treturn uv;\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n 'void main() {',\n\n ShaderChunk.uv_vertex,\n\n `#ifdef USE_UV\n\t\t\t\t\t#ifdef USE_PACKED_UV\n\t\t\t\t\t\tvUv = decodeUV(vUv);\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n ShaderChunk.uv2_vertex,\n ShaderChunk.color_vertex,\n ShaderChunk.beginnormal_vertex,\n\n `#ifdef USE_PACKED_NORMAL\n\t\t\t\t\tobjectNormal = decodeNormal(objectNormal);\n\t\t\t\t#endif\n\n\t\t\t\t#ifdef USE_TANGENT\n\t\t\t\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t\t\t\t#endif\n\t\t\t\t`,\n\n ShaderChunk.morphnormal_vertex,\n ShaderChunk.skinbase_vertex,\n ShaderChunk.skinnormal_vertex,\n ShaderChunk.defaultnormal_vertex,\n\n '#ifndef FLAT_SHADED',\n '\tvNormal = normalize( transformedNormal );',\n '#endif',\n\n ShaderChunk.begin_vertex,\n\n `#ifdef USE_PACKED_POSITION\n\t\t\t\t\t#if USE_PACKED_POSITION == 0\n\t\t\t\t\t\ttransformed = ( vec4(transformed, 1.0) * quantizeMatPos ).xyz;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n ShaderChunk.morphtarget_vertex,\n ShaderChunk.skinning_vertex,\n ShaderChunk.displacementmap_vertex,\n ShaderChunk.project_vertex,\n ShaderChunk.logdepthbuf_vertex,\n ShaderChunk.clipping_planes_vertex,\n\n 'vViewPosition = - mvPosition.xyz;',\n\n ShaderChunk.worldpos_vertex,\n ShaderChunk.envmap_vertex,\n ShaderChunk.shadowmap_vertex,\n ShaderChunk.fog_vertex,\n\n '}',\n ].join('\\n')\n\n // Use the original MeshPhongMaterial's fragmentShader.\n this.fragmentShader = [\n '#define PHONG',\n\n 'uniform vec3 diffuse;',\n 'uniform vec3 emissive;',\n 'uniform vec3 specular;',\n 'uniform float shininess;',\n 'uniform float opacity;',\n\n ShaderChunk.common,\n ShaderChunk.packing,\n ShaderChunk.dithering_pars_fragment,\n ShaderChunk.color_pars_fragment,\n ShaderChunk.uv_pars_fragment,\n ShaderChunk.uv2_pars_fragment,\n ShaderChunk.map_pars_fragment,\n ShaderChunk.alphamap_pars_fragment,\n ShaderChunk.aomap_pars_fragment,\n ShaderChunk.lightmap_pars_fragment,\n ShaderChunk.emissivemap_pars_fragment,\n ShaderChunk.envmap_common_pars_fragment,\n ShaderChunk.envmap_pars_fragment,\n ShaderChunk.cube_uv_reflection_fragment,\n ShaderChunk.fog_pars_fragment,\n ShaderChunk.bsdfs,\n ShaderChunk.lights_pars_begin,\n ShaderChunk.lights_phong_pars_fragment,\n ShaderChunk.shadowmap_pars_fragment,\n ShaderChunk.bumpmap_pars_fragment,\n ShaderChunk.normalmap_pars_fragment,\n ShaderChunk.specularmap_pars_fragment,\n ShaderChunk.logdepthbuf_pars_fragment,\n ShaderChunk.clipping_planes_pars_fragment,\n\n 'void main() {',\n\n ShaderChunk.clipping_planes_fragment,\n\n 'vec4 diffuseColor = vec4( diffuse, opacity );',\n 'ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );',\n 'vec3 totalEmissiveRadiance = emissive;',\n\n ShaderChunk.logdepthbuf_fragment,\n ShaderChunk.map_fragment,\n ShaderChunk.color_fragment,\n ShaderChunk.alphamap_fragment,\n ShaderChunk.alphatest_fragment,\n ShaderChunk.specularmap_fragment,\n ShaderChunk.normal_fragment_begin,\n ShaderChunk.normal_fragment_maps,\n ShaderChunk.emissivemap_fragment,\n\n // accumulation\n ShaderChunk.lights_phong_fragment,\n ShaderChunk.lights_fragment_begin,\n ShaderChunk.lights_fragment_maps,\n ShaderChunk.lights_fragment_end,\n\n // modulation\n ShaderChunk.aomap_fragment,\n\n 'vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;',\n\n ShaderChunk.envmap_fragment,\n\n 'gl_FragColor = vec4( outgoingLight, diffuseColor.a );',\n\n ShaderChunk.tonemapping_fragment,\n parseInt(REVISION.replace(/\\D+/g, '')) >= 154 ? ShaderChunk.colorspace_fragment : ShaderChunk.encodings_fragment,\n ShaderChunk.fog_fragment,\n ShaderChunk.premultiplied_alpha_fragment,\n ShaderChunk.dithering_fragment,\n '}',\n ].join('\\n')\n\n this.setValues(parameters)\n }\n}\n\nexport { GeometryCompressionUtils, PackedPhongMaterial }\n"],"names":["x","y","oct","z"],"mappings":"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"}
1
+ {"version":3,"file":"GeometryCompressionUtils.js","sources":["../../src/utils/GeometryCompressionUtils.js"],"sourcesContent":["/**\n * Octahedron and Quantization encodings based on work by:\n *\n * @link https://github.com/tsherif/mesh-quantization-example\n *\n */\n\nimport {\n BufferAttribute,\n Matrix3,\n Matrix4,\n MeshPhongMaterial,\n ShaderChunk,\n ShaderLib,\n UniformsUtils,\n Vector3,\n} from 'three'\nimport { version } from '../_polyfill/constants'\n\nvar GeometryCompressionUtils = {\n /**\n * Make the input mesh.geometry's normal attribute encoded and compressed by 3 different methods.\n * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the normal data.\n *\n * @param {THREE.Mesh} mesh\n * @param {String} encodeMethod\t\t\"DEFAULT\" || \"OCT1Byte\" || \"OCT2Byte\" || \"ANGLES\"\n *\n */\n compressNormals: function (mesh, encodeMethod) {\n if (!mesh.geometry) {\n console.error('Mesh must contain geometry. ')\n }\n\n const normal = mesh.geometry.attributes.normal\n\n if (!normal) {\n console.error('Geometry must contain normal attribute. ')\n }\n\n if (normal.isPacked) return\n\n if (normal.itemSize != 3) {\n console.error('normal.itemSize is not 3, which cannot be encoded. ')\n }\n\n const array = normal.array\n const count = normal.count\n\n let result\n if (encodeMethod == 'DEFAULT') {\n // TODO: Add 1 byte to the result, making the encoded length to be 4 bytes.\n result = new Uint8Array(count * 3)\n\n for (let idx = 0; idx < array.length; idx += 3) {\n const encoded = this.EncodingFuncs.defaultEncode(array[idx], array[idx + 1], array[idx + 2], 1)\n\n result[idx + 0] = encoded[0]\n result[idx + 1] = encoded[1]\n result[idx + 2] = encoded[2]\n }\n\n mesh.geometry.setAttribute('normal', new BufferAttribute(result, 3, true))\n mesh.geometry.attributes.normal.bytes = result.length * 1\n } else if (encodeMethod == 'OCT1Byte') {\n /**\n * It is not recommended to use 1-byte octahedron normals encoding unless you want to extremely reduce the memory usage\n * As it makes vertex data not aligned to a 4 byte boundary which may harm some WebGL implementations and sometimes the normal distortion is visible\n * Please refer to @zeux 's comments in https://github.com/mrdoob/three.js/pull/18208\n */\n\n result = new Int8Array(count * 2)\n\n for (let idx = 0; idx < array.length; idx += 3) {\n const encoded = this.EncodingFuncs.octEncodeBest(array[idx], array[idx + 1], array[idx + 2], 1)\n\n result[(idx / 3) * 2 + 0] = encoded[0]\n result[(idx / 3) * 2 + 1] = encoded[1]\n }\n\n mesh.geometry.setAttribute('normal', new BufferAttribute(result, 2, true))\n mesh.geometry.attributes.normal.bytes = result.length * 1\n } else if (encodeMethod == 'OCT2Byte') {\n result = new Int16Array(count * 2)\n\n for (let idx = 0; idx < array.length; idx += 3) {\n const encoded = this.EncodingFuncs.octEncodeBest(array[idx], array[idx + 1], array[idx + 2], 2)\n\n result[(idx / 3) * 2 + 0] = encoded[0]\n result[(idx / 3) * 2 + 1] = encoded[1]\n }\n\n mesh.geometry.setAttribute('normal', new BufferAttribute(result, 2, true))\n mesh.geometry.attributes.normal.bytes = result.length * 2\n } else if (encodeMethod == 'ANGLES') {\n result = new Uint16Array(count * 2)\n\n for (let idx = 0; idx < array.length; idx += 3) {\n const encoded = this.EncodingFuncs.anglesEncode(array[idx], array[idx + 1], array[idx + 2])\n\n result[(idx / 3) * 2 + 0] = encoded[0]\n result[(idx / 3) * 2 + 1] = encoded[1]\n }\n\n mesh.geometry.setAttribute('normal', new BufferAttribute(result, 2, true))\n mesh.geometry.attributes.normal.bytes = result.length * 2\n } else {\n console.error('Unrecognized encoding method, should be `DEFAULT` or `ANGLES` or `OCT`. ')\n }\n\n mesh.geometry.attributes.normal.needsUpdate = true\n mesh.geometry.attributes.normal.isPacked = true\n mesh.geometry.attributes.normal.packingMethod = encodeMethod\n\n // modify material\n if (!(mesh.material instanceof PackedPhongMaterial)) {\n mesh.material = new PackedPhongMaterial().copy(mesh.material)\n }\n\n if (encodeMethod == 'ANGLES') {\n mesh.material.defines.USE_PACKED_NORMAL = 0\n }\n\n if (encodeMethod == 'OCT1Byte') {\n mesh.material.defines.USE_PACKED_NORMAL = 1\n }\n\n if (encodeMethod == 'OCT2Byte') {\n mesh.material.defines.USE_PACKED_NORMAL = 1\n }\n\n if (encodeMethod == 'DEFAULT') {\n mesh.material.defines.USE_PACKED_NORMAL = 2\n }\n },\n\n /**\n * Make the input mesh.geometry's position attribute encoded and compressed.\n * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the position data.\n *\n * @param {THREE.Mesh} mesh\n *\n */\n compressPositions: function (mesh) {\n if (!mesh.geometry) {\n console.error('Mesh must contain geometry. ')\n }\n\n const position = mesh.geometry.attributes.position\n\n if (!position) {\n console.error('Geometry must contain position attribute. ')\n }\n\n if (position.isPacked) return\n\n if (position.itemSize != 3) {\n console.error('position.itemSize is not 3, which cannot be packed. ')\n }\n\n const array = position.array\n const encodingBytes = 2\n\n const result = this.EncodingFuncs.quantizedEncode(array, encodingBytes)\n\n const quantized = result.quantized\n const decodeMat = result.decodeMat\n\n // IMPORTANT: calculate original geometry bounding info first, before updating packed positions\n if (mesh.geometry.boundingBox == null) mesh.geometry.computeBoundingBox()\n if (mesh.geometry.boundingSphere == null) mesh.geometry.computeBoundingSphere()\n\n mesh.geometry.setAttribute('position', new BufferAttribute(quantized, 3))\n mesh.geometry.attributes.position.isPacked = true\n mesh.geometry.attributes.position.needsUpdate = true\n mesh.geometry.attributes.position.bytes = quantized.length * encodingBytes\n\n // modify material\n if (!(mesh.material instanceof PackedPhongMaterial)) {\n mesh.material = new PackedPhongMaterial().copy(mesh.material)\n }\n\n mesh.material.defines.USE_PACKED_POSITION = 0\n\n mesh.material.uniforms.quantizeMatPos.value = decodeMat\n mesh.material.uniforms.quantizeMatPos.needsUpdate = true\n },\n\n /**\n * Make the input mesh.geometry's uv attribute encoded and compressed.\n * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the uv data.\n *\n * @param {THREE.Mesh} mesh\n *\n */\n compressUvs: function (mesh) {\n if (!mesh.geometry) {\n console.error('Mesh must contain geometry property. ')\n }\n\n const uvs = mesh.geometry.attributes.uv\n\n if (!uvs) {\n console.error('Geometry must contain uv attribute. ')\n }\n\n if (uvs.isPacked) return\n\n const range = { min: Infinity, max: -Infinity }\n\n const array = uvs.array\n\n for (let i = 0; i < array.length; i++) {\n range.min = Math.min(range.min, array[i])\n range.max = Math.max(range.max, array[i])\n }\n\n let result\n\n if (range.min >= -1.0 && range.max <= 1.0) {\n // use default encoding method\n result = new Uint16Array(array.length)\n\n for (let i = 0; i < array.length; i += 2) {\n const encoded = this.EncodingFuncs.defaultEncode(array[i], array[i + 1], 0, 2)\n\n result[i] = encoded[0]\n result[i + 1] = encoded[1]\n }\n\n mesh.geometry.setAttribute('uv', new BufferAttribute(result, 2, true))\n mesh.geometry.attributes.uv.isPacked = true\n mesh.geometry.attributes.uv.needsUpdate = true\n mesh.geometry.attributes.uv.bytes = result.length * 2\n\n if (!(mesh.material instanceof PackedPhongMaterial)) {\n mesh.material = new PackedPhongMaterial().copy(mesh.material)\n }\n\n mesh.material.defines.USE_PACKED_UV = 0\n } else {\n // use quantized encoding method\n result = this.EncodingFuncs.quantizedEncodeUV(array, 2)\n\n mesh.geometry.setAttribute('uv', new BufferAttribute(result.quantized, 2))\n mesh.geometry.attributes.uv.isPacked = true\n mesh.geometry.attributes.uv.needsUpdate = true\n mesh.geometry.attributes.uv.bytes = result.quantized.length * 2\n\n if (!(mesh.material instanceof PackedPhongMaterial)) {\n mesh.material = new PackedPhongMaterial().copy(mesh.material)\n }\n\n mesh.material.defines.USE_PACKED_UV = 1\n\n mesh.material.uniforms.quantizeMatUV.value = result.decodeMat\n mesh.material.uniforms.quantizeMatUV.needsUpdate = true\n }\n },\n\n EncodingFuncs: {\n defaultEncode: function (x, y, z, bytes) {\n if (bytes == 1) {\n const tmpx = Math.round((x + 1) * 0.5 * 255)\n const tmpy = Math.round((y + 1) * 0.5 * 255)\n const tmpz = Math.round((z + 1) * 0.5 * 255)\n return new Uint8Array([tmpx, tmpy, tmpz])\n } else if (bytes == 2) {\n const tmpx = Math.round((x + 1) * 0.5 * 65535)\n const tmpy = Math.round((y + 1) * 0.5 * 65535)\n const tmpz = Math.round((z + 1) * 0.5 * 65535)\n return new Uint16Array([tmpx, tmpy, tmpz])\n } else {\n console.error('number of bytes must be 1 or 2')\n }\n },\n\n defaultDecode: function (array, bytes) {\n if (bytes == 1) {\n return [(array[0] / 255) * 2.0 - 1.0, (array[1] / 255) * 2.0 - 1.0, (array[2] / 255) * 2.0 - 1.0]\n } else if (bytes == 2) {\n return [(array[0] / 65535) * 2.0 - 1.0, (array[1] / 65535) * 2.0 - 1.0, (array[2] / 65535) * 2.0 - 1.0]\n } else {\n console.error('number of bytes must be 1 or 2')\n }\n },\n\n // for `Angles` encoding\n anglesEncode: function (x, y, z) {\n const normal0 = parseInt(0.5 * (1.0 + Math.atan2(y, x) / Math.PI) * 65535)\n const normal1 = parseInt(0.5 * (1.0 + z) * 65535)\n return new Uint16Array([normal0, normal1])\n },\n\n // for `Octahedron` encoding\n octEncodeBest: function (x, y, z, bytes) {\n var oct, dec, best, currentCos, bestCos\n\n // Test various combinations of ceil and floor\n // to minimize rounding errors\n best = oct = octEncodeVec3(x, y, z, 'floor', 'floor')\n dec = octDecodeVec2(oct)\n bestCos = dot(x, y, z, dec)\n\n oct = octEncodeVec3(x, y, z, 'ceil', 'floor')\n dec = octDecodeVec2(oct)\n currentCos = dot(x, y, z, dec)\n\n if (currentCos > bestCos) {\n best = oct\n bestCos = currentCos\n }\n\n oct = octEncodeVec3(x, y, z, 'floor', 'ceil')\n dec = octDecodeVec2(oct)\n currentCos = dot(x, y, z, dec)\n\n if (currentCos > bestCos) {\n best = oct\n bestCos = currentCos\n }\n\n oct = octEncodeVec3(x, y, z, 'ceil', 'ceil')\n dec = octDecodeVec2(oct)\n currentCos = dot(x, y, z, dec)\n\n if (currentCos > bestCos) {\n best = oct\n }\n\n return best\n\n function octEncodeVec3(x0, y0, z0, xfunc, yfunc) {\n var x = x0 / (Math.abs(x0) + Math.abs(y0) + Math.abs(z0))\n var y = y0 / (Math.abs(x0) + Math.abs(y0) + Math.abs(z0))\n\n if (z < 0) {\n var tempx = (1 - Math.abs(y)) * (x >= 0 ? 1 : -1)\n var tempy = (1 - Math.abs(x)) * (y >= 0 ? 1 : -1)\n\n x = tempx\n y = tempy\n\n var diff = 1 - Math.abs(x) - Math.abs(y)\n if (diff > 0) {\n diff += 0.001\n x += x > 0 ? diff / 2 : -diff / 2\n y += y > 0 ? diff / 2 : -diff / 2\n }\n }\n\n if (bytes == 1) {\n return new Int8Array([Math[xfunc](x * 127.5 + (x < 0 ? 1 : 0)), Math[yfunc](y * 127.5 + (y < 0 ? 1 : 0))])\n }\n\n if (bytes == 2) {\n return new Int16Array([\n Math[xfunc](x * 32767.5 + (x < 0 ? 1 : 0)),\n Math[yfunc](y * 32767.5 + (y < 0 ? 1 : 0)),\n ])\n }\n }\n\n function octDecodeVec2(oct) {\n var x = oct[0]\n var y = oct[1]\n\n if (bytes == 1) {\n x /= x < 0 ? 127 : 128\n y /= y < 0 ? 127 : 128\n } else if (bytes == 2) {\n x /= x < 0 ? 32767 : 32768\n y /= y < 0 ? 32767 : 32768\n }\n\n var z = 1 - Math.abs(x) - Math.abs(y)\n\n if (z < 0) {\n var tmpx = x\n x = (1 - Math.abs(y)) * (x >= 0 ? 1 : -1)\n y = (1 - Math.abs(tmpx)) * (y >= 0 ? 1 : -1)\n }\n\n var length = Math.sqrt(x * x + y * y + z * z)\n\n return [x / length, y / length, z / length]\n }\n\n function dot(x, y, z, vec3) {\n return x * vec3[0] + y * vec3[1] + z * vec3[2]\n }\n },\n\n quantizedEncode: function (array, bytes) {\n let quantized, segments\n\n if (bytes == 1) {\n quantized = new Uint8Array(array.length)\n segments = 255\n } else if (bytes == 2) {\n quantized = new Uint16Array(array.length)\n segments = 65535\n } else {\n console.error('number of bytes error! ')\n }\n\n const decodeMat = new Matrix4()\n\n const min = new Float32Array(3)\n const max = new Float32Array(3)\n\n min[0] = min[1] = min[2] = Number.MAX_VALUE\n max[0] = max[1] = max[2] = -Number.MAX_VALUE\n\n for (let i = 0; i < array.length; i += 3) {\n min[0] = Math.min(min[0], array[i + 0])\n min[1] = Math.min(min[1], array[i + 1])\n min[2] = Math.min(min[2], array[i + 2])\n max[0] = Math.max(max[0], array[i + 0])\n max[1] = Math.max(max[1], array[i + 1])\n max[2] = Math.max(max[2], array[i + 2])\n }\n\n decodeMat.scale(\n new Vector3((max[0] - min[0]) / segments, (max[1] - min[1]) / segments, (max[2] - min[2]) / segments),\n )\n\n decodeMat.elements[12] = min[0]\n decodeMat.elements[13] = min[1]\n decodeMat.elements[14] = min[2]\n\n decodeMat.transpose()\n\n const multiplier = new Float32Array([\n max[0] !== min[0] ? segments / (max[0] - min[0]) : 0,\n max[1] !== min[1] ? segments / (max[1] - min[1]) : 0,\n max[2] !== min[2] ? segments / (max[2] - min[2]) : 0,\n ])\n\n for (let i = 0; i < array.length; i += 3) {\n quantized[i + 0] = Math.floor((array[i + 0] - min[0]) * multiplier[0])\n quantized[i + 1] = Math.floor((array[i + 1] - min[1]) * multiplier[1])\n quantized[i + 2] = Math.floor((array[i + 2] - min[2]) * multiplier[2])\n }\n\n return {\n quantized: quantized,\n decodeMat: decodeMat,\n }\n },\n\n quantizedEncodeUV: function (array, bytes) {\n let quantized, segments\n\n if (bytes == 1) {\n quantized = new Uint8Array(array.length)\n segments = 255\n } else if (bytes == 2) {\n quantized = new Uint16Array(array.length)\n segments = 65535\n } else {\n console.error('number of bytes error! ')\n }\n\n const decodeMat = new Matrix3()\n\n const min = new Float32Array(2)\n const max = new Float32Array(2)\n\n min[0] = min[1] = Number.MAX_VALUE\n max[0] = max[1] = -Number.MAX_VALUE\n\n for (let i = 0; i < array.length; i += 2) {\n min[0] = Math.min(min[0], array[i + 0])\n min[1] = Math.min(min[1], array[i + 1])\n max[0] = Math.max(max[0], array[i + 0])\n max[1] = Math.max(max[1], array[i + 1])\n }\n\n decodeMat.scale((max[0] - min[0]) / segments, (max[1] - min[1]) / segments)\n\n decodeMat.elements[6] = min[0]\n decodeMat.elements[7] = min[1]\n\n decodeMat.transpose()\n\n const multiplier = new Float32Array([\n max[0] !== min[0] ? segments / (max[0] - min[0]) : 0,\n max[1] !== min[1] ? segments / (max[1] - min[1]) : 0,\n ])\n\n for (let i = 0; i < array.length; i += 2) {\n quantized[i + 0] = Math.floor((array[i + 0] - min[0]) * multiplier[0])\n quantized[i + 1] = Math.floor((array[i + 1] - min[1]) * multiplier[1])\n }\n\n return {\n quantized: quantized,\n decodeMat: decodeMat,\n }\n },\n },\n}\n\n/**\n * `PackedPhongMaterial` inherited from THREE.MeshPhongMaterial\n *\n * @param {Object} parameters\n */\nclass PackedPhongMaterial extends MeshPhongMaterial {\n constructor(parameters) {\n super()\n\n this.defines = {}\n this.type = 'PackedPhongMaterial'\n this.uniforms = UniformsUtils.merge([\n ShaderLib.phong.uniforms,\n\n {\n quantizeMatPos: { value: null },\n quantizeMatUV: { value: null },\n },\n ])\n\n this.vertexShader = [\n '#define PHONG',\n\n 'varying vec3 vViewPosition;',\n\n '#ifndef FLAT_SHADED',\n 'varying vec3 vNormal;',\n '#endif',\n\n ShaderChunk.common,\n ShaderChunk.uv_pars_vertex,\n ShaderChunk.uv2_pars_vertex,\n ShaderChunk.displacementmap_pars_vertex,\n ShaderChunk.envmap_pars_vertex,\n ShaderChunk.color_pars_vertex,\n ShaderChunk.fog_pars_vertex,\n ShaderChunk.morphtarget_pars_vertex,\n ShaderChunk.skinning_pars_vertex,\n ShaderChunk.shadowmap_pars_vertex,\n ShaderChunk.logdepthbuf_pars_vertex,\n ShaderChunk.clipping_planes_pars_vertex,\n\n `#ifdef USE_PACKED_NORMAL\n\t\t\t\t\t#if USE_PACKED_NORMAL == 0\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat x = packedNormal.x * 2.0 - 1.0;\n\t\t\t\t\t\t\tfloat y = packedNormal.y * 2.0 - 1.0;\n\t\t\t\t\t\t\tvec2 scth = vec2(sin(x * PI), cos(x * PI));\n\t\t\t\t\t\t\tvec2 scphi = vec2(sqrt(1.0 - y * y), y);\n\t\t\t\t\t\t\treturn normalize( vec3(scth.y * scphi.x, scth.x * scphi.x, scphi.y) );\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_NORMAL == 1\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec3 v = vec3(packedNormal.xy, 1.0 - abs(packedNormal.x) - abs(packedNormal.y));\n\t\t\t\t\t\t\tif (v.z < 0.0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tv.xy = (1.0 - abs(v.yx)) * vec2((v.x >= 0.0) ? +1.0 : -1.0, (v.y >= 0.0) ? +1.0 : -1.0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn normalize(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_NORMAL == 2\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec3 v = (packedNormal * 2.0) - 1.0;\n\t\t\t\t\t\t\treturn normalize(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n `#ifdef USE_PACKED_POSITION\n\t\t\t\t\t#if USE_PACKED_POSITION == 0\n\t\t\t\t\t\tuniform mat4 quantizeMatPos;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n `#ifdef USE_PACKED_UV\n\t\t\t\t\t#if USE_PACKED_UV == 1\n\t\t\t\t\t\tuniform mat3 quantizeMatUV;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n `#ifdef USE_PACKED_UV\n\t\t\t\t\t#if USE_PACKED_UV == 0\n\t\t\t\t\t\tvec2 decodeUV(vec2 packedUV)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec2 uv = (packedUV * 2.0) - 1.0;\n\t\t\t\t\t\t\treturn uv;\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_UV == 1\n\t\t\t\t\t\tvec2 decodeUV(vec2 packedUV)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec2 uv = ( vec3(packedUV, 1.0) * quantizeMatUV ).xy;\n\t\t\t\t\t\t\treturn uv;\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n 'void main() {',\n\n ShaderChunk.uv_vertex,\n\n `#ifdef USE_UV\n\t\t\t\t\t#ifdef USE_PACKED_UV\n\t\t\t\t\t\tvUv = decodeUV(vUv);\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n ShaderChunk.uv2_vertex,\n ShaderChunk.color_vertex,\n ShaderChunk.beginnormal_vertex,\n\n `#ifdef USE_PACKED_NORMAL\n\t\t\t\t\tobjectNormal = decodeNormal(objectNormal);\n\t\t\t\t#endif\n\n\t\t\t\t#ifdef USE_TANGENT\n\t\t\t\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t\t\t\t#endif\n\t\t\t\t`,\n\n ShaderChunk.morphnormal_vertex,\n ShaderChunk.skinbase_vertex,\n ShaderChunk.skinnormal_vertex,\n ShaderChunk.defaultnormal_vertex,\n\n '#ifndef FLAT_SHADED',\n '\tvNormal = normalize( transformedNormal );',\n '#endif',\n\n ShaderChunk.begin_vertex,\n\n `#ifdef USE_PACKED_POSITION\n\t\t\t\t\t#if USE_PACKED_POSITION == 0\n\t\t\t\t\t\ttransformed = ( vec4(transformed, 1.0) * quantizeMatPos ).xyz;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n ShaderChunk.morphtarget_vertex,\n ShaderChunk.skinning_vertex,\n ShaderChunk.displacementmap_vertex,\n ShaderChunk.project_vertex,\n ShaderChunk.logdepthbuf_vertex,\n ShaderChunk.clipping_planes_vertex,\n\n 'vViewPosition = - mvPosition.xyz;',\n\n ShaderChunk.worldpos_vertex,\n ShaderChunk.envmap_vertex,\n ShaderChunk.shadowmap_vertex,\n ShaderChunk.fog_vertex,\n\n '}',\n ].join('\\n')\n\n // Use the original MeshPhongMaterial's fragmentShader.\n this.fragmentShader = [\n '#define PHONG',\n\n 'uniform vec3 diffuse;',\n 'uniform vec3 emissive;',\n 'uniform vec3 specular;',\n 'uniform float shininess;',\n 'uniform float opacity;',\n\n ShaderChunk.common,\n ShaderChunk.packing,\n ShaderChunk.dithering_pars_fragment,\n ShaderChunk.color_pars_fragment,\n ShaderChunk.uv_pars_fragment,\n ShaderChunk.uv2_pars_fragment,\n ShaderChunk.map_pars_fragment,\n ShaderChunk.alphamap_pars_fragment,\n ShaderChunk.aomap_pars_fragment,\n ShaderChunk.lightmap_pars_fragment,\n ShaderChunk.emissivemap_pars_fragment,\n ShaderChunk.envmap_common_pars_fragment,\n ShaderChunk.envmap_pars_fragment,\n ShaderChunk.cube_uv_reflection_fragment,\n ShaderChunk.fog_pars_fragment,\n ShaderChunk.bsdfs,\n ShaderChunk.lights_pars_begin,\n ShaderChunk.lights_phong_pars_fragment,\n ShaderChunk.shadowmap_pars_fragment,\n ShaderChunk.bumpmap_pars_fragment,\n ShaderChunk.normalmap_pars_fragment,\n ShaderChunk.specularmap_pars_fragment,\n ShaderChunk.logdepthbuf_pars_fragment,\n ShaderChunk.clipping_planes_pars_fragment,\n\n 'void main() {',\n\n ShaderChunk.clipping_planes_fragment,\n\n 'vec4 diffuseColor = vec4( diffuse, opacity );',\n 'ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );',\n 'vec3 totalEmissiveRadiance = emissive;',\n\n ShaderChunk.logdepthbuf_fragment,\n ShaderChunk.map_fragment,\n ShaderChunk.color_fragment,\n ShaderChunk.alphamap_fragment,\n ShaderChunk.alphatest_fragment,\n ShaderChunk.specularmap_fragment,\n ShaderChunk.normal_fragment_begin,\n ShaderChunk.normal_fragment_maps,\n ShaderChunk.emissivemap_fragment,\n\n // accumulation\n ShaderChunk.lights_phong_fragment,\n ShaderChunk.lights_fragment_begin,\n ShaderChunk.lights_fragment_maps,\n ShaderChunk.lights_fragment_end,\n\n // modulation\n ShaderChunk.aomap_fragment,\n\n 'vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;',\n\n ShaderChunk.envmap_fragment,\n\n 'gl_FragColor = vec4( outgoingLight, diffuseColor.a );',\n\n ShaderChunk.tonemapping_fragment,\n version >= 154 ? ShaderChunk.colorspace_fragment : ShaderChunk.encodings_fragment,\n ShaderChunk.fog_fragment,\n ShaderChunk.premultiplied_alpha_fragment,\n ShaderChunk.dithering_fragment,\n '}',\n ].join('\\n')\n\n this.setValues(parameters)\n }\n}\n\nexport { GeometryCompressionUtils, PackedPhongMaterial }\n"],"names":["x","y","oct","z"],"mappings":";;AAmBG,IAAC,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS7B,iBAAiB,SAAU,MAAM,cAAc;AAC7C,QAAI,CAAC,KAAK,UAAU;AAClB,cAAQ,MAAM,8BAA8B;AAAA,IAC7C;AAED,UAAM,SAAS,KAAK,SAAS,WAAW;AAExC,QAAI,CAAC,QAAQ;AACX,cAAQ,MAAM,0CAA0C;AAAA,IACzD;AAED,QAAI,OAAO;AAAU;AAErB,QAAI,OAAO,YAAY,GAAG;AACxB,cAAQ,MAAM,qDAAqD;AAAA,IACpE;AAED,UAAM,QAAQ,OAAO;AACrB,UAAM,QAAQ,OAAO;AAErB,QAAI;AACJ,QAAI,gBAAgB,WAAW;AAE7B,eAAS,IAAI,WAAW,QAAQ,CAAC;AAEjC,eAAS,MAAM,GAAG,MAAM,MAAM,QAAQ,OAAO,GAAG;AAC9C,cAAM,UAAU,KAAK,cAAc,cAAc,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC;AAE9F,eAAO,MAAM,CAAC,IAAI,QAAQ,CAAC;AAC3B,eAAO,MAAM,CAAC,IAAI,QAAQ,CAAC;AAC3B,eAAO,MAAM,CAAC,IAAI,QAAQ,CAAC;AAAA,MAC5B;AAED,WAAK,SAAS,aAAa,UAAU,IAAI,gBAAgB,QAAQ,GAAG,IAAI,CAAC;AACzE,WAAK,SAAS,WAAW,OAAO,QAAQ,OAAO,SAAS;AAAA,IAC9D,WAAe,gBAAgB,YAAY;AAOrC,eAAS,IAAI,UAAU,QAAQ,CAAC;AAEhC,eAAS,MAAM,GAAG,MAAM,MAAM,QAAQ,OAAO,GAAG;AAC9C,cAAM,UAAU,KAAK,cAAc,cAAc,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC;AAE9F,eAAQ,MAAM,IAAK,IAAI,CAAC,IAAI,QAAQ,CAAC;AACrC,eAAQ,MAAM,IAAK,IAAI,CAAC,IAAI,QAAQ,CAAC;AAAA,MACtC;AAED,WAAK,SAAS,aAAa,UAAU,IAAI,gBAAgB,QAAQ,GAAG,IAAI,CAAC;AACzE,WAAK,SAAS,WAAW,OAAO,QAAQ,OAAO,SAAS;AAAA,IAC9D,WAAe,gBAAgB,YAAY;AACrC,eAAS,IAAI,WAAW,QAAQ,CAAC;AAEjC,eAAS,MAAM,GAAG,MAAM,MAAM,QAAQ,OAAO,GAAG;AAC9C,cAAM,UAAU,KAAK,cAAc,cAAc,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC;AAE9F,eAAQ,MAAM,IAAK,IAAI,CAAC,IAAI,QAAQ,CAAC;AACrC,eAAQ,MAAM,IAAK,IAAI,CAAC,IAAI,QAAQ,CAAC;AAAA,MACtC;AAED,WAAK,SAAS,aAAa,UAAU,IAAI,gBAAgB,QAAQ,GAAG,IAAI,CAAC;AACzE,WAAK,SAAS,WAAW,OAAO,QAAQ,OAAO,SAAS;AAAA,IAC9D,WAAe,gBAAgB,UAAU;AACnC,eAAS,IAAI,YAAY,QAAQ,CAAC;AAElC,eAAS,MAAM,GAAG,MAAM,MAAM,QAAQ,OAAO,GAAG;AAC9C,cAAM,UAAU,KAAK,cAAc,aAAa,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC;AAE1F,eAAQ,MAAM,IAAK,IAAI,CAAC,IAAI,QAAQ,CAAC;AACrC,eAAQ,MAAM,IAAK,IAAI,CAAC,IAAI,QAAQ,CAAC;AAAA,MACtC;AAED,WAAK,SAAS,aAAa,UAAU,IAAI,gBAAgB,QAAQ,GAAG,IAAI,CAAC;AACzE,WAAK,SAAS,WAAW,OAAO,QAAQ,OAAO,SAAS;AAAA,IAC9D,OAAW;AACL,cAAQ,MAAM,0EAA0E;AAAA,IACzF;AAED,SAAK,SAAS,WAAW,OAAO,cAAc;AAC9C,SAAK,SAAS,WAAW,OAAO,WAAW;AAC3C,SAAK,SAAS,WAAW,OAAO,gBAAgB;AAGhD,QAAI,EAAE,KAAK,oBAAoB,sBAAsB;AACnD,WAAK,WAAW,IAAI,oBAAqB,EAAC,KAAK,KAAK,QAAQ;AAAA,IAC7D;AAED,QAAI,gBAAgB,UAAU;AAC5B,WAAK,SAAS,QAAQ,oBAAoB;AAAA,IAC3C;AAED,QAAI,gBAAgB,YAAY;AAC9B,WAAK,SAAS,QAAQ,oBAAoB;AAAA,IAC3C;AAED,QAAI,gBAAgB,YAAY;AAC9B,WAAK,SAAS,QAAQ,oBAAoB;AAAA,IAC3C;AAED,QAAI,gBAAgB,WAAW;AAC7B,WAAK,SAAS,QAAQ,oBAAoB;AAAA,IAC3C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,mBAAmB,SAAU,MAAM;AACjC,QAAI,CAAC,KAAK,UAAU;AAClB,cAAQ,MAAM,8BAA8B;AAAA,IAC7C;AAED,UAAM,WAAW,KAAK,SAAS,WAAW;AAE1C,QAAI,CAAC,UAAU;AACb,cAAQ,MAAM,4CAA4C;AAAA,IAC3D;AAED,QAAI,SAAS;AAAU;AAEvB,QAAI,SAAS,YAAY,GAAG;AAC1B,cAAQ,MAAM,sDAAsD;AAAA,IACrE;AAED,UAAM,QAAQ,SAAS;AACvB,UAAM,gBAAgB;AAEtB,UAAM,SAAS,KAAK,cAAc,gBAAgB,OAAO,aAAa;AAEtE,UAAM,YAAY,OAAO;AACzB,UAAM,YAAY,OAAO;AAGzB,QAAI,KAAK,SAAS,eAAe;AAAM,WAAK,SAAS,mBAAoB;AACzE,QAAI,KAAK,SAAS,kBAAkB;AAAM,WAAK,SAAS,sBAAuB;AAE/E,SAAK,SAAS,aAAa,YAAY,IAAI,gBAAgB,WAAW,CAAC,CAAC;AACxE,SAAK,SAAS,WAAW,SAAS,WAAW;AAC7C,SAAK,SAAS,WAAW,SAAS,cAAc;AAChD,SAAK,SAAS,WAAW,SAAS,QAAQ,UAAU,SAAS;AAG7D,QAAI,EAAE,KAAK,oBAAoB,sBAAsB;AACnD,WAAK,WAAW,IAAI,oBAAqB,EAAC,KAAK,KAAK,QAAQ;AAAA,IAC7D;AAED,SAAK,SAAS,QAAQ,sBAAsB;AAE5C,SAAK,SAAS,SAAS,eAAe,QAAQ;AAC9C,SAAK,SAAS,SAAS,eAAe,cAAc;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,aAAa,SAAU,MAAM;AAC3B,QAAI,CAAC,KAAK,UAAU;AAClB,cAAQ,MAAM,uCAAuC;AAAA,IACtD;AAED,UAAM,MAAM,KAAK,SAAS,WAAW;AAErC,QAAI,CAAC,KAAK;AACR,cAAQ,MAAM,sCAAsC;AAAA,IACrD;AAED,QAAI,IAAI;AAAU;AAElB,UAAM,QAAQ,EAAE,KAAK,UAAU,KAAK,UAAW;AAE/C,UAAM,QAAQ,IAAI;AAElB,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,MAAM,KAAK,IAAI,MAAM,KAAK,MAAM,CAAC,CAAC;AACxC,YAAM,MAAM,KAAK,IAAI,MAAM,KAAK,MAAM,CAAC,CAAC;AAAA,IACzC;AAED,QAAI;AAEJ,QAAI,MAAM,OAAO,MAAQ,MAAM,OAAO,GAAK;AAEzC,eAAS,IAAI,YAAY,MAAM,MAAM;AAErC,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,cAAM,UAAU,KAAK,cAAc,cAAc,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,GAAG,CAAC;AAE7E,eAAO,CAAC,IAAI,QAAQ,CAAC;AACrB,eAAO,IAAI,CAAC,IAAI,QAAQ,CAAC;AAAA,MAC1B;AAED,WAAK,SAAS,aAAa,MAAM,IAAI,gBAAgB,QAAQ,GAAG,IAAI,CAAC;AACrE,WAAK,SAAS,WAAW,GAAG,WAAW;AACvC,WAAK,SAAS,WAAW,GAAG,cAAc;AAC1C,WAAK,SAAS,WAAW,GAAG,QAAQ,OAAO,SAAS;AAEpD,UAAI,EAAE,KAAK,oBAAoB,sBAAsB;AACnD,aAAK,WAAW,IAAI,oBAAqB,EAAC,KAAK,KAAK,QAAQ;AAAA,MAC7D;AAED,WAAK,SAAS,QAAQ,gBAAgB;AAAA,IAC5C,OAAW;AAEL,eAAS,KAAK,cAAc,kBAAkB,OAAO,CAAC;AAEtD,WAAK,SAAS,aAAa,MAAM,IAAI,gBAAgB,OAAO,WAAW,CAAC,CAAC;AACzE,WAAK,SAAS,WAAW,GAAG,WAAW;AACvC,WAAK,SAAS,WAAW,GAAG,cAAc;AAC1C,WAAK,SAAS,WAAW,GAAG,QAAQ,OAAO,UAAU,SAAS;AAE9D,UAAI,EAAE,KAAK,oBAAoB,sBAAsB;AACnD,aAAK,WAAW,IAAI,oBAAqB,EAAC,KAAK,KAAK,QAAQ;AAAA,MAC7D;AAED,WAAK,SAAS,QAAQ,gBAAgB;AAEtC,WAAK,SAAS,SAAS,cAAc,QAAQ,OAAO;AACpD,WAAK,SAAS,SAAS,cAAc,cAAc;AAAA,IACpD;AAAA,EACF;AAAA,EAED,eAAe;AAAA,IACb,eAAe,SAAU,GAAG,GAAG,GAAG,OAAO;AACvC,UAAI,SAAS,GAAG;AACd,cAAM,OAAO,KAAK,OAAO,IAAI,KAAK,MAAM,GAAG;AAC3C,cAAM,OAAO,KAAK,OAAO,IAAI,KAAK,MAAM,GAAG;AAC3C,cAAM,OAAO,KAAK,OAAO,IAAI,KAAK,MAAM,GAAG;AAC3C,eAAO,IAAI,WAAW,CAAC,MAAM,MAAM,IAAI,CAAC;AAAA,MAChD,WAAiB,SAAS,GAAG;AACrB,cAAM,OAAO,KAAK,OAAO,IAAI,KAAK,MAAM,KAAK;AAC7C,cAAM,OAAO,KAAK,OAAO,IAAI,KAAK,MAAM,KAAK;AAC7C,cAAM,OAAO,KAAK,OAAO,IAAI,KAAK,MAAM,KAAK;AAC7C,eAAO,IAAI,YAAY,CAAC,MAAM,MAAM,IAAI,CAAC;AAAA,MACjD,OAAa;AACL,gBAAQ,MAAM,gCAAgC;AAAA,MAC/C;AAAA,IACF;AAAA,IAED,eAAe,SAAU,OAAO,OAAO;AACrC,UAAI,SAAS,GAAG;AACd,eAAO,CAAE,MAAM,CAAC,IAAI,MAAO,IAAM,GAAM,MAAM,CAAC,IAAI,MAAO,IAAM,GAAM,MAAM,CAAC,IAAI,MAAO,IAAM,CAAG;AAAA,MACxG,WAAiB,SAAS,GAAG;AACrB,eAAO,CAAE,MAAM,CAAC,IAAI,QAAS,IAAM,GAAM,MAAM,CAAC,IAAI,QAAS,IAAM,GAAM,MAAM,CAAC,IAAI,QAAS,IAAM,CAAG;AAAA,MAC9G,OAAa;AACL,gBAAQ,MAAM,gCAAgC;AAAA,MAC/C;AAAA,IACF;AAAA;AAAA,IAGD,cAAc,SAAU,GAAG,GAAG,GAAG;AAC/B,YAAM,UAAU,SAAS,OAAO,IAAM,KAAK,MAAM,GAAG,CAAC,IAAI,KAAK,MAAM,KAAK;AACzE,YAAM,UAAU,SAAS,OAAO,IAAM,KAAK,KAAK;AAChD,aAAO,IAAI,YAAY,CAAC,SAAS,OAAO,CAAC;AAAA,IAC1C;AAAA;AAAA,IAGD,eAAe,SAAU,GAAG,GAAG,GAAG,OAAO;AACvC,UAAI,KAAK,KAAK,MAAM,YAAY;AAIhC,aAAO,MAAM,cAAc,GAAG,GAAG,GAAG,SAAS,OAAO;AACpD,YAAM,cAAc,GAAG;AACvB,gBAAU,IAAI,GAAG,GAAG,GAAG,GAAG;AAE1B,YAAM,cAAc,GAAG,GAAG,GAAG,QAAQ,OAAO;AAC5C,YAAM,cAAc,GAAG;AACvB,mBAAa,IAAI,GAAG,GAAG,GAAG,GAAG;AAE7B,UAAI,aAAa,SAAS;AACxB,eAAO;AACP,kBAAU;AAAA,MACX;AAED,YAAM,cAAc,GAAG,GAAG,GAAG,SAAS,MAAM;AAC5C,YAAM,cAAc,GAAG;AACvB,mBAAa,IAAI,GAAG,GAAG,GAAG,GAAG;AAE7B,UAAI,aAAa,SAAS;AACxB,eAAO;AACP,kBAAU;AAAA,MACX;AAED,YAAM,cAAc,GAAG,GAAG,GAAG,QAAQ,MAAM;AAC3C,YAAM,cAAc,GAAG;AACvB,mBAAa,IAAI,GAAG,GAAG,GAAG,GAAG;AAE7B,UAAI,aAAa,SAAS;AACxB,eAAO;AAAA,MACR;AAED,aAAO;AAEP,eAAS,cAAc,IAAI,IAAI,IAAI,OAAO,OAAO;AAC/C,YAAIA,KAAI,MAAM,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE;AACvD,YAAIC,KAAI,MAAM,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE;AAEvD,YAAI,IAAI,GAAG;AACT,cAAI,SAAS,IAAI,KAAK,IAAIA,EAAC,MAAMD,MAAK,IAAI,IAAI;AAC9C,cAAI,SAAS,IAAI,KAAK,IAAIA,EAAC,MAAMC,MAAK,IAAI,IAAI;AAE9C,UAAAD,KAAI;AACJ,UAAAC,KAAI;AAEJ,cAAI,OAAO,IAAI,KAAK,IAAID,EAAC,IAAI,KAAK,IAAIC,EAAC;AACvC,cAAI,OAAO,GAAG;AACZ,oBAAQ;AACR,YAAAD,MAAKA,KAAI,IAAI,OAAO,IAAI,CAAC,OAAO;AAChC,YAAAC,MAAKA,KAAI,IAAI,OAAO,IAAI,CAAC,OAAO;AAAA,UACjC;AAAA,QACF;AAED,YAAI,SAAS,GAAG;AACd,iBAAO,IAAI,UAAU,CAAC,KAAK,KAAK,EAAED,KAAI,SAASA,KAAI,IAAI,IAAI,EAAE,GAAG,KAAK,KAAK,EAAEC,KAAI,SAASA,KAAI,IAAI,IAAI,EAAE,CAAC,CAAC;AAAA,QAC1G;AAED,YAAI,SAAS,GAAG;AACd,iBAAO,IAAI,WAAW;AAAA,YACpB,KAAK,KAAK,EAAED,KAAI,WAAWA,KAAI,IAAI,IAAI,EAAE;AAAA,YACzC,KAAK,KAAK,EAAEC,KAAI,WAAWA,KAAI,IAAI,IAAI,EAAE;AAAA,UACrD,CAAW;AAAA,QACF;AAAA,MACF;AAED,eAAS,cAAcC,MAAK;AAC1B,YAAIF,KAAIE,KAAI,CAAC;AACb,YAAID,KAAIC,KAAI,CAAC;AAEb,YAAI,SAAS,GAAG;AACd,UAAAF,MAAKA,KAAI,IAAI,MAAM;AACnB,UAAAC,MAAKA,KAAI,IAAI,MAAM;AAAA,QAC7B,WAAmB,SAAS,GAAG;AACrB,UAAAD,MAAKA,KAAI,IAAI,QAAQ;AACrB,UAAAC,MAAKA,KAAI,IAAI,QAAQ;AAAA,QACtB;AAED,YAAIE,KAAI,IAAI,KAAK,IAAIH,EAAC,IAAI,KAAK,IAAIC,EAAC;AAEpC,YAAIE,KAAI,GAAG;AACT,cAAI,OAAOH;AACX,UAAAA,MAAK,IAAI,KAAK,IAAIC,EAAC,MAAMD,MAAK,IAAI,IAAI;AACtC,UAAAC,MAAK,IAAI,KAAK,IAAI,IAAI,MAAMA,MAAK,IAAI,IAAI;AAAA,QAC1C;AAED,YAAI,SAAS,KAAK,KAAKD,KAAIA,KAAIC,KAAIA,KAAIE,KAAIA,EAAC;AAE5C,eAAO,CAACH,KAAI,QAAQC,KAAI,QAAQE,KAAI,MAAM;AAAA,MAC3C;AAED,eAAS,IAAIH,IAAGC,IAAGE,IAAG,MAAM;AAC1B,eAAOH,KAAI,KAAK,CAAC,IAAIC,KAAI,KAAK,CAAC,IAAIE,KAAI,KAAK,CAAC;AAAA,MAC9C;AAAA,IACF;AAAA,IAED,iBAAiB,SAAU,OAAO,OAAO;AACvC,UAAI,WAAW;AAEf,UAAI,SAAS,GAAG;AACd,oBAAY,IAAI,WAAW,MAAM,MAAM;AACvC,mBAAW;AAAA,MACnB,WAAiB,SAAS,GAAG;AACrB,oBAAY,IAAI,YAAY,MAAM,MAAM;AACxC,mBAAW;AAAA,MACnB,OAAa;AACL,gBAAQ,MAAM,yBAAyB;AAAA,MACxC;AAED,YAAM,YAAY,IAAI,QAAS;AAE/B,YAAM,MAAM,IAAI,aAAa,CAAC;AAC9B,YAAM,MAAM,IAAI,aAAa,CAAC;AAE9B,UAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,OAAO;AAClC,UAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;AAEnC,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,YAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;AACtC,YAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;AACtC,YAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;AACtC,YAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;AACtC,YAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;AACtC,YAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;AAAA,MACvC;AAED,gBAAU;AAAA,QACR,IAAI,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,QAAQ;AAAA,MACrG;AAED,gBAAU,SAAS,EAAE,IAAI,IAAI,CAAC;AAC9B,gBAAU,SAAS,EAAE,IAAI,IAAI,CAAC;AAC9B,gBAAU,SAAS,EAAE,IAAI,IAAI,CAAC;AAE9B,gBAAU,UAAW;AAErB,YAAM,aAAa,IAAI,aAAa;AAAA,QAClC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;AAAA,QACnD,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;AAAA,QACnD,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;AAAA,MAC3D,CAAO;AAED,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,kBAAU,IAAI,CAAC,IAAI,KAAK,OAAO,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC;AACrE,kBAAU,IAAI,CAAC,IAAI,KAAK,OAAO,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC;AACrE,kBAAU,IAAI,CAAC,IAAI,KAAK,OAAO,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC;AAAA,MACtE;AAED,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IAED,mBAAmB,SAAU,OAAO,OAAO;AACzC,UAAI,WAAW;AAEf,UAAI,SAAS,GAAG;AACd,oBAAY,IAAI,WAAW,MAAM,MAAM;AACvC,mBAAW;AAAA,MACnB,WAAiB,SAAS,GAAG;AACrB,oBAAY,IAAI,YAAY,MAAM,MAAM;AACxC,mBAAW;AAAA,MACnB,OAAa;AACL,gBAAQ,MAAM,yBAAyB;AAAA,MACxC;AAED,YAAM,YAAY,IAAI,QAAS;AAE/B,YAAM,MAAM,IAAI,aAAa,CAAC;AAC9B,YAAM,MAAM,IAAI,aAAa,CAAC;AAE9B,UAAI,CAAC,IAAI,IAAI,CAAC,IAAI,OAAO;AACzB,UAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;AAE1B,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,YAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;AACtC,YAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;AACtC,YAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;AACtC,YAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;AAAA,MACvC;AAED,gBAAU,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,QAAQ;AAE1E,gBAAU,SAAS,CAAC,IAAI,IAAI,CAAC;AAC7B,gBAAU,SAAS,CAAC,IAAI,IAAI,CAAC;AAE7B,gBAAU,UAAW;AAErB,YAAM,aAAa,IAAI,aAAa;AAAA,QAClC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;AAAA,QACnD,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;AAAA,MAC3D,CAAO;AAED,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,kBAAU,IAAI,CAAC,IAAI,KAAK,OAAO,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC;AACrE,kBAAU,IAAI,CAAC,IAAI,KAAK,OAAO,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC;AAAA,MACtE;AAED,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,EACF;AACH;AAOA,MAAM,4BAA4B,kBAAkB;AAAA,EAClD,YAAY,YAAY;AACtB,UAAO;AAEP,SAAK,UAAU,CAAE;AACjB,SAAK,OAAO;AACZ,SAAK,WAAW,cAAc,MAAM;AAAA,MAClC,UAAU,MAAM;AAAA,MAEhB;AAAA,QACE,gBAAgB,EAAE,OAAO,KAAM;AAAA,QAC/B,eAAe,EAAE,OAAO,KAAM;AAAA,MAC/B;AAAA,IACP,CAAK;AAED,SAAK,eAAe;AAAA,MAClB;AAAA,MAEA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MAEA,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MAEZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiCA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBA;AAAA,MAEA,YAAY;AAAA,MAEZ;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MAEZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MAEZ;AAAA,MACA;AAAA,MACA;AAAA,MAEA,YAAY;AAAA,MAEZ;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MAEZ;AAAA,MAEA,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MAEZ;AAAA,IACN,EAAM,KAAK,IAAI;AAGX,SAAK,iBAAiB;AAAA,MACpB;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MAEZ;AAAA,MAEA,YAAY;AAAA,MAEZ;AAAA,MACA;AAAA,MACA;AAAA,MAEA,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA;AAAA,MAGZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA;AAAA,MAGZ,YAAY;AAAA,MAEZ;AAAA,MAEA,YAAY;AAAA,MAEZ;AAAA,MAEA,YAAY;AAAA,MACZ,WAAW,MAAM,YAAY,sBAAsB,YAAY;AAAA,MAC/D,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ;AAAA,IACN,EAAM,KAAK,IAAI;AAEX,SAAK,UAAU,UAAU;AAAA,EAC1B;AACH;"}
@@ -7,9 +7,9 @@ var __publicField = (obj, key, value) => {
7
7
  };
8
8
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
9
9
  const THREE = require("three");
10
- var _mipmapMaterial = _getMipmapMaterial();
11
- var _mesh = new THREE.Mesh(new THREE.PlaneGeometry(2, 2), _mipmapMaterial);
12
- var _flatCamera = new THREE.OrthographicCamera(0, 1, 0, 1, 0, 1);
10
+ var _mipmapMaterial = /* @__PURE__ */ _getMipmapMaterial();
11
+ var _mesh = /* @__PURE__ */ new THREE.Mesh(/* @__PURE__ */ new THREE.PlaneGeometry(2, 2), _mipmapMaterial);
12
+ var _flatCamera = /* @__PURE__ */ new THREE.OrthographicCamera(0, 1, 0, 1, 0, 1);
13
13
  var _tempTarget = null;
14
14
  class RoughnessMipmapper {
15
15
  constructor(renderer) {
@@ -1 +1 @@
1
- {"version":3,"file":"RoughnessMipmapper.cjs","sources":["../../src/utils/RoughnessMipmapper.js"],"sourcesContent":["/**\n * This class generates custom mipmaps for a roughness map by encoding the lost variation in the\n * normal map mip levels as increased roughness in the corresponding roughness mip levels. This\n * helps with rendering accuracy for MeshStandardMaterial, and also helps with anti-aliasing when\n * using PMREM. If the normal map is larger than the roughness map, the roughness map will be\n * enlarged to match the dimensions of the normal map.\n */\n\nimport {\n MathUtils,\n Mesh,\n NoBlending,\n OrthographicCamera,\n PlaneGeometry,\n RawShaderMaterial,\n Vector2,\n WebGLRenderTarget,\n} from 'three'\n\nvar _mipmapMaterial = _getMipmapMaterial()\n\nvar _mesh = new Mesh(new PlaneGeometry(2, 2), _mipmapMaterial)\n\nvar _flatCamera = new OrthographicCamera(0, 1, 0, 1, 0, 1)\n\nvar _tempTarget = null\n\nclass RoughnessMipmapper {\n constructor(renderer) {\n this._renderer = renderer\n\n this._renderer.compile(_mesh, _flatCamera)\n }\n\n generateMipmaps = function (material) {\n if ('roughnessMap' in material === false) return\n\n var { roughnessMap, normalMap } = material\n\n if (\n roughnessMap === null ||\n normalMap === null ||\n !roughnessMap.generateMipmaps ||\n material.userData.roughnessUpdated\n ) {\n return\n }\n\n material.userData.roughnessUpdated = true\n\n var width = Math.max(roughnessMap.image.width, normalMap.image.width)\n\n var height = Math.max(roughnessMap.image.height, normalMap.image.height)\n\n if (!MathUtils.isPowerOfTwo(width) || !MathUtils.isPowerOfTwo(height)) return\n\n var oldTarget = this._renderer.getRenderTarget()\n\n var autoClear = this._renderer.autoClear\n\n this._renderer.autoClear = false\n\n if (_tempTarget === null || _tempTarget.width !== width || _tempTarget.height !== height) {\n if (_tempTarget !== null) _tempTarget.dispose()\n\n _tempTarget = new WebGLRenderTarget(width, height, {\n depthBuffer: false,\n })\n\n _tempTarget.scissorTest = true\n }\n\n if (width !== roughnessMap.image.width || height !== roughnessMap.image.height) {\n var params = {\n wrapS: roughnessMap.wrapS,\n wrapT: roughnessMap.wrapT,\n magFilter: roughnessMap.magFilter,\n minFilter: roughnessMap.minFilter,\n depthBuffer: false,\n }\n\n var newRoughnessTarget = new WebGLRenderTarget(width, height, params)\n\n newRoughnessTarget.texture.generateMipmaps = true\n\n // Setting the render target causes the memory to be allocated.\n\n this._renderer.setRenderTarget(newRoughnessTarget)\n\n material.roughnessMap = newRoughnessTarget.texture\n\n if (material.metalnessMap == roughnessMap) material.metalnessMap = material.roughnessMap\n\n if (material.aoMap == roughnessMap) material.aoMap = material.roughnessMap\n }\n\n _mipmapMaterial.uniforms.roughnessMap.value = roughnessMap\n\n _mipmapMaterial.uniforms.normalMap.value = normalMap\n\n var position = new Vector2(0, 0)\n\n var texelSize = _mipmapMaterial.uniforms.texelSize.value\n\n for (let mip = 0; width >= 1 && height >= 1; ++mip, width /= 2, height /= 2) {\n // Rendering to a mip level is not allowed in webGL1. Instead we must set\n // up a secondary texture to write the result to, then copy it back to the\n // proper mipmap level.\n\n texelSize.set(1.0 / width, 1.0 / height)\n\n if (mip == 0) texelSize.set(0.0, 0.0)\n\n _tempTarget.viewport.set(position.x, position.y, width, height)\n\n _tempTarget.scissor.set(position.x, position.y, width, height)\n\n this._renderer.setRenderTarget(_tempTarget)\n\n this._renderer.render(_mesh, _flatCamera)\n\n this._renderer.copyFramebufferToTexture(position, material.roughnessMap, mip)\n\n _mipmapMaterial.uniforms.roughnessMap.value = material.roughnessMap\n }\n\n if (roughnessMap !== material.roughnessMap) roughnessMap.dispose()\n\n this._renderer.setRenderTarget(oldTarget)\n\n this._renderer.autoClear = autoClear\n }\n\n dispose = function () {\n _mipmapMaterial.dispose()\n\n _mesh.geometry.dispose()\n\n if (_tempTarget != null) _tempTarget.dispose()\n }\n}\n\nfunction _getMipmapMaterial() {\n var shaderMaterial = new RawShaderMaterial({\n uniforms: {\n roughnessMap: { value: null },\n normalMap: { value: null },\n texelSize: { value: new Vector2(1, 1) },\n },\n\n vertexShader: /* glsl */ `\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tattribute vec3 position;\n\t\t\tattribute vec2 uv;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\tvoid main() {\n\n\t\t\t\tvUv = uv;\n\n\t\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t\t}\n\t\t`,\n\n fragmentShader: /* glsl */ `\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\tuniform sampler2D roughnessMap;\n\t\t\tuniform sampler2D normalMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\n\t\t\tvec4 envMapTexelToLinear( vec4 a ) { return a; }\n\n\t\t\t#include <cube_uv_reflection_fragment>\n\n\t\t\tfloat roughnessToVariance( float roughness ) {\n\n\t\t\t\tfloat variance = 0.0;\n\n\t\t\t\tif ( roughness >= r1 ) {\n\n\t\t\t\t\tvariance = ( r0 - roughness ) * ( v1 - v0 ) / ( r0 - r1 ) + v0;\n\n\t\t\t\t} else if ( roughness >= r4 ) {\n\n\t\t\t\t\tvariance = ( r1 - roughness ) * ( v4 - v1 ) / ( r1 - r4 ) + v1;\n\n\t\t\t\t} else if ( roughness >= r5 ) {\n\n\t\t\t\t\tvariance = ( r4 - roughness ) * ( v5 - v4 ) / ( r4 - r5 ) + v4;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfloat roughness2 = roughness * roughness;\n\n\t\t\t\t\tvariance = 1.79 * roughness2 * roughness2;\n\n\t\t\t\t}\n\n\t\t\t\treturn variance;\n\n\t\t\t}\n\n\t\t\tfloat varianceToRoughness( float variance ) {\n\n\t\t\t\tfloat roughness = 0.0;\n\n\t\t\t\tif ( variance >= v1 ) {\n\n\t\t\t\t\troughness = ( v0 - variance ) * ( r1 - r0 ) / ( v0 - v1 ) + r0;\n\n\t\t\t\t} else if ( variance >= v4 ) {\n\n\t\t\t\t\troughness = ( v1 - variance ) * ( r4 - r1 ) / ( v1 - v4 ) + r1;\n\n\t\t\t\t} else if ( variance >= v5 ) {\n\n\t\t\t\t\troughness = ( v4 - variance ) * ( r5 - r4 ) / ( v4 - v5 ) + r4;\n\n\t\t\t\t} else {\n\n\t\t\t\t\troughness = pow( 0.559 * variance, 0.25 ); // 0.559 = 1.0 / 1.79\n\n\t\t\t\t}\n\n\t\t\t\treturn roughness;\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = texture2D( roughnessMap, vUv, - 1.0 );\n\n\t\t\t\tif ( texelSize.x == 0.0 ) return;\n\n\t\t\t\tfloat roughness = gl_FragColor.g;\n\n\t\t\t\tfloat variance = roughnessToVariance( roughness );\n\n\t\t\t\tvec3 avgNormal;\n\n\t\t\t\tfor ( float x = - 1.0; x < 2.0; x += 2.0 ) {\n\n\t\t\t\t\tfor ( float y = - 1.0; y < 2.0; y += 2.0 ) {\n\n\t\t\t\t\t\tvec2 uv = vUv + vec2( x, y ) * 0.25 * texelSize;\n\n\t\t\t\t\t\tavgNormal += normalize( texture2D( normalMap, uv, - 1.0 ).xyz - 0.5 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvariance += 1.0 - 0.25 * length( avgNormal );\n\n\t\t\t\tgl_FragColor.g = varianceToRoughness( variance );\n\n\t\t\t}\n\t\t`,\n\n blending: NoBlending,\n depthTest: false,\n depthWrite: false,\n })\n\n shaderMaterial.type = 'RoughnessMipmapper'\n\n return shaderMaterial\n}\n\nexport { RoughnessMipmapper }\n"],"names":["Mesh","PlaneGeometry","OrthographicCamera","MathUtils","WebGLRenderTarget","Vector2","RawShaderMaterial","NoBlending"],"mappings":"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"}
1
+ {"version":3,"file":"RoughnessMipmapper.cjs","sources":["../../src/utils/RoughnessMipmapper.js"],"sourcesContent":["/**\n * This class generates custom mipmaps for a roughness map by encoding the lost variation in the\n * normal map mip levels as increased roughness in the corresponding roughness mip levels. This\n * helps with rendering accuracy for MeshStandardMaterial, and also helps with anti-aliasing when\n * using PMREM. If the normal map is larger than the roughness map, the roughness map will be\n * enlarged to match the dimensions of the normal map.\n */\n\nimport {\n MathUtils,\n Mesh,\n NoBlending,\n OrthographicCamera,\n PlaneGeometry,\n RawShaderMaterial,\n Vector2,\n WebGLRenderTarget,\n} from 'three'\n\nvar _mipmapMaterial = /* @__PURE__ */ _getMipmapMaterial()\n\nvar _mesh = /* @__PURE__ */ new Mesh(/* @__PURE__ */ new PlaneGeometry(2, 2), _mipmapMaterial)\n\nvar _flatCamera = /* @__PURE__ */ new OrthographicCamera(0, 1, 0, 1, 0, 1)\n\nvar _tempTarget = null\n\nclass RoughnessMipmapper {\n constructor(renderer) {\n this._renderer = renderer\n\n this._renderer.compile(_mesh, _flatCamera)\n }\n\n generateMipmaps = function (material) {\n if ('roughnessMap' in material === false) return\n\n var { roughnessMap, normalMap } = material\n\n if (\n roughnessMap === null ||\n normalMap === null ||\n !roughnessMap.generateMipmaps ||\n material.userData.roughnessUpdated\n ) {\n return\n }\n\n material.userData.roughnessUpdated = true\n\n var width = Math.max(roughnessMap.image.width, normalMap.image.width)\n\n var height = Math.max(roughnessMap.image.height, normalMap.image.height)\n\n if (!MathUtils.isPowerOfTwo(width) || !MathUtils.isPowerOfTwo(height)) return\n\n var oldTarget = this._renderer.getRenderTarget()\n\n var autoClear = this._renderer.autoClear\n\n this._renderer.autoClear = false\n\n if (_tempTarget === null || _tempTarget.width !== width || _tempTarget.height !== height) {\n if (_tempTarget !== null) _tempTarget.dispose()\n\n _tempTarget = new WebGLRenderTarget(width, height, {\n depthBuffer: false,\n })\n\n _tempTarget.scissorTest = true\n }\n\n if (width !== roughnessMap.image.width || height !== roughnessMap.image.height) {\n var params = {\n wrapS: roughnessMap.wrapS,\n wrapT: roughnessMap.wrapT,\n magFilter: roughnessMap.magFilter,\n minFilter: roughnessMap.minFilter,\n depthBuffer: false,\n }\n\n var newRoughnessTarget = new WebGLRenderTarget(width, height, params)\n\n newRoughnessTarget.texture.generateMipmaps = true\n\n // Setting the render target causes the memory to be allocated.\n\n this._renderer.setRenderTarget(newRoughnessTarget)\n\n material.roughnessMap = newRoughnessTarget.texture\n\n if (material.metalnessMap == roughnessMap) material.metalnessMap = material.roughnessMap\n\n if (material.aoMap == roughnessMap) material.aoMap = material.roughnessMap\n }\n\n _mipmapMaterial.uniforms.roughnessMap.value = roughnessMap\n\n _mipmapMaterial.uniforms.normalMap.value = normalMap\n\n var position = new Vector2(0, 0)\n\n var texelSize = _mipmapMaterial.uniforms.texelSize.value\n\n for (let mip = 0; width >= 1 && height >= 1; ++mip, width /= 2, height /= 2) {\n // Rendering to a mip level is not allowed in webGL1. Instead we must set\n // up a secondary texture to write the result to, then copy it back to the\n // proper mipmap level.\n\n texelSize.set(1.0 / width, 1.0 / height)\n\n if (mip == 0) texelSize.set(0.0, 0.0)\n\n _tempTarget.viewport.set(position.x, position.y, width, height)\n\n _tempTarget.scissor.set(position.x, position.y, width, height)\n\n this._renderer.setRenderTarget(_tempTarget)\n\n this._renderer.render(_mesh, _flatCamera)\n\n this._renderer.copyFramebufferToTexture(position, material.roughnessMap, mip)\n\n _mipmapMaterial.uniforms.roughnessMap.value = material.roughnessMap\n }\n\n if (roughnessMap !== material.roughnessMap) roughnessMap.dispose()\n\n this._renderer.setRenderTarget(oldTarget)\n\n this._renderer.autoClear = autoClear\n }\n\n dispose = function () {\n _mipmapMaterial.dispose()\n\n _mesh.geometry.dispose()\n\n if (_tempTarget != null) _tempTarget.dispose()\n }\n}\n\nfunction _getMipmapMaterial() {\n var shaderMaterial = new RawShaderMaterial({\n uniforms: {\n roughnessMap: { value: null },\n normalMap: { value: null },\n texelSize: { value: new Vector2(1, 1) },\n },\n\n vertexShader: /* glsl */ `\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tattribute vec3 position;\n\t\t\tattribute vec2 uv;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\tvoid main() {\n\n\t\t\t\tvUv = uv;\n\n\t\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t\t}\n\t\t`,\n\n fragmentShader: /* glsl */ `\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\tuniform sampler2D roughnessMap;\n\t\t\tuniform sampler2D normalMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\n\t\t\tvec4 envMapTexelToLinear( vec4 a ) { return a; }\n\n\t\t\t#include <cube_uv_reflection_fragment>\n\n\t\t\tfloat roughnessToVariance( float roughness ) {\n\n\t\t\t\tfloat variance = 0.0;\n\n\t\t\t\tif ( roughness >= r1 ) {\n\n\t\t\t\t\tvariance = ( r0 - roughness ) * ( v1 - v0 ) / ( r0 - r1 ) + v0;\n\n\t\t\t\t} else if ( roughness >= r4 ) {\n\n\t\t\t\t\tvariance = ( r1 - roughness ) * ( v4 - v1 ) / ( r1 - r4 ) + v1;\n\n\t\t\t\t} else if ( roughness >= r5 ) {\n\n\t\t\t\t\tvariance = ( r4 - roughness ) * ( v5 - v4 ) / ( r4 - r5 ) + v4;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfloat roughness2 = roughness * roughness;\n\n\t\t\t\t\tvariance = 1.79 * roughness2 * roughness2;\n\n\t\t\t\t}\n\n\t\t\t\treturn variance;\n\n\t\t\t}\n\n\t\t\tfloat varianceToRoughness( float variance ) {\n\n\t\t\t\tfloat roughness = 0.0;\n\n\t\t\t\tif ( variance >= v1 ) {\n\n\t\t\t\t\troughness = ( v0 - variance ) * ( r1 - r0 ) / ( v0 - v1 ) + r0;\n\n\t\t\t\t} else if ( variance >= v4 ) {\n\n\t\t\t\t\troughness = ( v1 - variance ) * ( r4 - r1 ) / ( v1 - v4 ) + r1;\n\n\t\t\t\t} else if ( variance >= v5 ) {\n\n\t\t\t\t\troughness = ( v4 - variance ) * ( r5 - r4 ) / ( v4 - v5 ) + r4;\n\n\t\t\t\t} else {\n\n\t\t\t\t\troughness = pow( 0.559 * variance, 0.25 ); // 0.559 = 1.0 / 1.79\n\n\t\t\t\t}\n\n\t\t\t\treturn roughness;\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = texture2D( roughnessMap, vUv, - 1.0 );\n\n\t\t\t\tif ( texelSize.x == 0.0 ) return;\n\n\t\t\t\tfloat roughness = gl_FragColor.g;\n\n\t\t\t\tfloat variance = roughnessToVariance( roughness );\n\n\t\t\t\tvec3 avgNormal;\n\n\t\t\t\tfor ( float x = - 1.0; x < 2.0; x += 2.0 ) {\n\n\t\t\t\t\tfor ( float y = - 1.0; y < 2.0; y += 2.0 ) {\n\n\t\t\t\t\t\tvec2 uv = vUv + vec2( x, y ) * 0.25 * texelSize;\n\n\t\t\t\t\t\tavgNormal += normalize( texture2D( normalMap, uv, - 1.0 ).xyz - 0.5 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvariance += 1.0 - 0.25 * length( avgNormal );\n\n\t\t\t\tgl_FragColor.g = varianceToRoughness( variance );\n\n\t\t\t}\n\t\t`,\n\n blending: NoBlending,\n depthTest: false,\n depthWrite: false,\n })\n\n shaderMaterial.type = 'RoughnessMipmapper'\n\n return shaderMaterial\n}\n\nexport { RoughnessMipmapper }\n"],"names":["Mesh","PlaneGeometry","OrthographicCamera","MathUtils","WebGLRenderTarget","Vector2","RawShaderMaterial","NoBlending"],"mappings":"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"}
@@ -4,10 +4,10 @@ var __publicField = (obj, key, value) => {
4
4
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
5
  return value;
6
6
  };
7
- import { Mesh, PlaneGeometry, OrthographicCamera, MathUtils, WebGLRenderTarget, Vector2, RawShaderMaterial, NoBlending } from "three";
8
- var _mipmapMaterial = _getMipmapMaterial();
9
- var _mesh = new Mesh(new PlaneGeometry(2, 2), _mipmapMaterial);
10
- var _flatCamera = new OrthographicCamera(0, 1, 0, 1, 0, 1);
7
+ import { MathUtils, WebGLRenderTarget, Vector2, Mesh, PlaneGeometry, OrthographicCamera, RawShaderMaterial, NoBlending } from "three";
8
+ var _mipmapMaterial = /* @__PURE__ */ _getMipmapMaterial();
9
+ var _mesh = /* @__PURE__ */ new Mesh(/* @__PURE__ */ new PlaneGeometry(2, 2), _mipmapMaterial);
10
+ var _flatCamera = /* @__PURE__ */ new OrthographicCamera(0, 1, 0, 1, 0, 1);
11
11
  var _tempTarget = null;
12
12
  class RoughnessMipmapper {
13
13
  constructor(renderer) {
@@ -1 +1 @@
1
- {"version":3,"file":"RoughnessMipmapper.js","sources":["../../src/utils/RoughnessMipmapper.js"],"sourcesContent":["/**\n * This class generates custom mipmaps for a roughness map by encoding the lost variation in the\n * normal map mip levels as increased roughness in the corresponding roughness mip levels. This\n * helps with rendering accuracy for MeshStandardMaterial, and also helps with anti-aliasing when\n * using PMREM. If the normal map is larger than the roughness map, the roughness map will be\n * enlarged to match the dimensions of the normal map.\n */\n\nimport {\n MathUtils,\n Mesh,\n NoBlending,\n OrthographicCamera,\n PlaneGeometry,\n RawShaderMaterial,\n Vector2,\n WebGLRenderTarget,\n} from 'three'\n\nvar _mipmapMaterial = _getMipmapMaterial()\n\nvar _mesh = new Mesh(new PlaneGeometry(2, 2), _mipmapMaterial)\n\nvar _flatCamera = new OrthographicCamera(0, 1, 0, 1, 0, 1)\n\nvar _tempTarget = null\n\nclass RoughnessMipmapper {\n constructor(renderer) {\n this._renderer = renderer\n\n this._renderer.compile(_mesh, _flatCamera)\n }\n\n generateMipmaps = function (material) {\n if ('roughnessMap' in material === false) return\n\n var { roughnessMap, normalMap } = material\n\n if (\n roughnessMap === null ||\n normalMap === null ||\n !roughnessMap.generateMipmaps ||\n material.userData.roughnessUpdated\n ) {\n return\n }\n\n material.userData.roughnessUpdated = true\n\n var width = Math.max(roughnessMap.image.width, normalMap.image.width)\n\n var height = Math.max(roughnessMap.image.height, normalMap.image.height)\n\n if (!MathUtils.isPowerOfTwo(width) || !MathUtils.isPowerOfTwo(height)) return\n\n var oldTarget = this._renderer.getRenderTarget()\n\n var autoClear = this._renderer.autoClear\n\n this._renderer.autoClear = false\n\n if (_tempTarget === null || _tempTarget.width !== width || _tempTarget.height !== height) {\n if (_tempTarget !== null) _tempTarget.dispose()\n\n _tempTarget = new WebGLRenderTarget(width, height, {\n depthBuffer: false,\n })\n\n _tempTarget.scissorTest = true\n }\n\n if (width !== roughnessMap.image.width || height !== roughnessMap.image.height) {\n var params = {\n wrapS: roughnessMap.wrapS,\n wrapT: roughnessMap.wrapT,\n magFilter: roughnessMap.magFilter,\n minFilter: roughnessMap.minFilter,\n depthBuffer: false,\n }\n\n var newRoughnessTarget = new WebGLRenderTarget(width, height, params)\n\n newRoughnessTarget.texture.generateMipmaps = true\n\n // Setting the render target causes the memory to be allocated.\n\n this._renderer.setRenderTarget(newRoughnessTarget)\n\n material.roughnessMap = newRoughnessTarget.texture\n\n if (material.metalnessMap == roughnessMap) material.metalnessMap = material.roughnessMap\n\n if (material.aoMap == roughnessMap) material.aoMap = material.roughnessMap\n }\n\n _mipmapMaterial.uniforms.roughnessMap.value = roughnessMap\n\n _mipmapMaterial.uniforms.normalMap.value = normalMap\n\n var position = new Vector2(0, 0)\n\n var texelSize = _mipmapMaterial.uniforms.texelSize.value\n\n for (let mip = 0; width >= 1 && height >= 1; ++mip, width /= 2, height /= 2) {\n // Rendering to a mip level is not allowed in webGL1. Instead we must set\n // up a secondary texture to write the result to, then copy it back to the\n // proper mipmap level.\n\n texelSize.set(1.0 / width, 1.0 / height)\n\n if (mip == 0) texelSize.set(0.0, 0.0)\n\n _tempTarget.viewport.set(position.x, position.y, width, height)\n\n _tempTarget.scissor.set(position.x, position.y, width, height)\n\n this._renderer.setRenderTarget(_tempTarget)\n\n this._renderer.render(_mesh, _flatCamera)\n\n this._renderer.copyFramebufferToTexture(position, material.roughnessMap, mip)\n\n _mipmapMaterial.uniforms.roughnessMap.value = material.roughnessMap\n }\n\n if (roughnessMap !== material.roughnessMap) roughnessMap.dispose()\n\n this._renderer.setRenderTarget(oldTarget)\n\n this._renderer.autoClear = autoClear\n }\n\n dispose = function () {\n _mipmapMaterial.dispose()\n\n _mesh.geometry.dispose()\n\n if (_tempTarget != null) _tempTarget.dispose()\n }\n}\n\nfunction _getMipmapMaterial() {\n var shaderMaterial = new RawShaderMaterial({\n uniforms: {\n roughnessMap: { value: null },\n normalMap: { value: null },\n texelSize: { value: new Vector2(1, 1) },\n },\n\n vertexShader: /* glsl */ `\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tattribute vec3 position;\n\t\t\tattribute vec2 uv;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\tvoid main() {\n\n\t\t\t\tvUv = uv;\n\n\t\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t\t}\n\t\t`,\n\n fragmentShader: /* glsl */ `\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\tuniform sampler2D roughnessMap;\n\t\t\tuniform sampler2D normalMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\n\t\t\tvec4 envMapTexelToLinear( vec4 a ) { return a; }\n\n\t\t\t#include <cube_uv_reflection_fragment>\n\n\t\t\tfloat roughnessToVariance( float roughness ) {\n\n\t\t\t\tfloat variance = 0.0;\n\n\t\t\t\tif ( roughness >= r1 ) {\n\n\t\t\t\t\tvariance = ( r0 - roughness ) * ( v1 - v0 ) / ( r0 - r1 ) + v0;\n\n\t\t\t\t} else if ( roughness >= r4 ) {\n\n\t\t\t\t\tvariance = ( r1 - roughness ) * ( v4 - v1 ) / ( r1 - r4 ) + v1;\n\n\t\t\t\t} else if ( roughness >= r5 ) {\n\n\t\t\t\t\tvariance = ( r4 - roughness ) * ( v5 - v4 ) / ( r4 - r5 ) + v4;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfloat roughness2 = roughness * roughness;\n\n\t\t\t\t\tvariance = 1.79 * roughness2 * roughness2;\n\n\t\t\t\t}\n\n\t\t\t\treturn variance;\n\n\t\t\t}\n\n\t\t\tfloat varianceToRoughness( float variance ) {\n\n\t\t\t\tfloat roughness = 0.0;\n\n\t\t\t\tif ( variance >= v1 ) {\n\n\t\t\t\t\troughness = ( v0 - variance ) * ( r1 - r0 ) / ( v0 - v1 ) + r0;\n\n\t\t\t\t} else if ( variance >= v4 ) {\n\n\t\t\t\t\troughness = ( v1 - variance ) * ( r4 - r1 ) / ( v1 - v4 ) + r1;\n\n\t\t\t\t} else if ( variance >= v5 ) {\n\n\t\t\t\t\troughness = ( v4 - variance ) * ( r5 - r4 ) / ( v4 - v5 ) + r4;\n\n\t\t\t\t} else {\n\n\t\t\t\t\troughness = pow( 0.559 * variance, 0.25 ); // 0.559 = 1.0 / 1.79\n\n\t\t\t\t}\n\n\t\t\t\treturn roughness;\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = texture2D( roughnessMap, vUv, - 1.0 );\n\n\t\t\t\tif ( texelSize.x == 0.0 ) return;\n\n\t\t\t\tfloat roughness = gl_FragColor.g;\n\n\t\t\t\tfloat variance = roughnessToVariance( roughness );\n\n\t\t\t\tvec3 avgNormal;\n\n\t\t\t\tfor ( float x = - 1.0; x < 2.0; x += 2.0 ) {\n\n\t\t\t\t\tfor ( float y = - 1.0; y < 2.0; y += 2.0 ) {\n\n\t\t\t\t\t\tvec2 uv = vUv + vec2( x, y ) * 0.25 * texelSize;\n\n\t\t\t\t\t\tavgNormal += normalize( texture2D( normalMap, uv, - 1.0 ).xyz - 0.5 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvariance += 1.0 - 0.25 * length( avgNormal );\n\n\t\t\t\tgl_FragColor.g = varianceToRoughness( variance );\n\n\t\t\t}\n\t\t`,\n\n blending: NoBlending,\n depthTest: false,\n depthWrite: false,\n })\n\n shaderMaterial.type = 'RoughnessMipmapper'\n\n return shaderMaterial\n}\n\nexport { RoughnessMipmapper }\n"],"names":[],"mappings":";;;;;;;AAmBA,IAAI,kBAAkB,mBAAoB;AAE1C,IAAI,QAAQ,IAAI,KAAK,IAAI,cAAc,GAAG,CAAC,GAAG,eAAe;AAE7D,IAAI,cAAc,IAAI,mBAAmB,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEzD,IAAI,cAAc;AAElB,MAAM,mBAAmB;AAAA,EACvB,YAAY,UAAU;AAMtB,2CAAkB,SAAU,UAAU;AACpC,UAAI,kBAAkB,aAAa;AAAO;AAE1C,UAAI,EAAE,cAAc,UAAS,IAAK;AAElC,UACE,iBAAiB,QACjB,cAAc,QACd,CAAC,aAAa,mBACd,SAAS,SAAS,kBAClB;AACA;AAAA,MACD;AAED,eAAS,SAAS,mBAAmB;AAErC,UAAI,QAAQ,KAAK,IAAI,aAAa,MAAM,OAAO,UAAU,MAAM,KAAK;AAEpE,UAAI,SAAS,KAAK,IAAI,aAAa,MAAM,QAAQ,UAAU,MAAM,MAAM;AAEvE,UAAI,CAAC,UAAU,aAAa,KAAK,KAAK,CAAC,UAAU,aAAa,MAAM;AAAG;AAEvE,UAAI,YAAY,KAAK,UAAU,gBAAiB;AAEhD,UAAI,YAAY,KAAK,UAAU;AAE/B,WAAK,UAAU,YAAY;AAE3B,UAAI,gBAAgB,QAAQ,YAAY,UAAU,SAAS,YAAY,WAAW,QAAQ;AACxF,YAAI,gBAAgB;AAAM,sBAAY,QAAS;AAE/C,sBAAc,IAAI,kBAAkB,OAAO,QAAQ;AAAA,UACjD,aAAa;AAAA,QACrB,CAAO;AAED,oBAAY,cAAc;AAAA,MAC3B;AAED,UAAI,UAAU,aAAa,MAAM,SAAS,WAAW,aAAa,MAAM,QAAQ;AAC9E,YAAI,SAAS;AAAA,UACX,OAAO,aAAa;AAAA,UACpB,OAAO,aAAa;AAAA,UACpB,WAAW,aAAa;AAAA,UACxB,WAAW,aAAa;AAAA,UACxB,aAAa;AAAA,QACd;AAED,YAAI,qBAAqB,IAAI,kBAAkB,OAAO,QAAQ,MAAM;AAEpE,2BAAmB,QAAQ,kBAAkB;AAI7C,aAAK,UAAU,gBAAgB,kBAAkB;AAEjD,iBAAS,eAAe,mBAAmB;AAE3C,YAAI,SAAS,gBAAgB;AAAc,mBAAS,eAAe,SAAS;AAE5E,YAAI,SAAS,SAAS;AAAc,mBAAS,QAAQ,SAAS;AAAA,MAC/D;AAED,sBAAgB,SAAS,aAAa,QAAQ;AAE9C,sBAAgB,SAAS,UAAU,QAAQ;AAE3C,UAAI,WAAW,IAAI,QAAQ,GAAG,CAAC;AAE/B,UAAI,YAAY,gBAAgB,SAAS,UAAU;AAEnD,eAAS,MAAM,GAAG,SAAS,KAAK,UAAU,GAAG,EAAE,KAAK,SAAS,GAAG,UAAU,GAAG;AAK3E,kBAAU,IAAI,IAAM,OAAO,IAAM,MAAM;AAEvC,YAAI,OAAO;AAAG,oBAAU,IAAI,GAAK,CAAG;AAEpC,oBAAY,SAAS,IAAI,SAAS,GAAG,SAAS,GAAG,OAAO,MAAM;AAE9D,oBAAY,QAAQ,IAAI,SAAS,GAAG,SAAS,GAAG,OAAO,MAAM;AAE7D,aAAK,UAAU,gBAAgB,WAAW;AAE1C,aAAK,UAAU,OAAO,OAAO,WAAW;AAExC,aAAK,UAAU,yBAAyB,UAAU,SAAS,cAAc,GAAG;AAE5E,wBAAgB,SAAS,aAAa,QAAQ,SAAS;AAAA,MACxD;AAED,UAAI,iBAAiB,SAAS;AAAc,qBAAa,QAAS;AAElE,WAAK,UAAU,gBAAgB,SAAS;AAExC,WAAK,UAAU,YAAY;AAAA,IAC5B;AAED,mCAAU,WAAY;AACpB,sBAAgB,QAAS;AAEzB,YAAM,SAAS,QAAS;AAExB,UAAI,eAAe;AAAM,oBAAY,QAAS;AAAA,IAC/C;AA9GC,SAAK,YAAY;AAEjB,SAAK,UAAU,QAAQ,OAAO,WAAW;AAAA,EAC1C;AA4GH;AAEA,SAAS,qBAAqB;AAC5B,MAAI,iBAAiB,IAAI,kBAAkB;AAAA,IACzC,UAAU;AAAA,MACR,cAAc,EAAE,OAAO,KAAM;AAAA,MAC7B,WAAW,EAAE,OAAO,KAAM;AAAA,MAC1B,WAAW,EAAE,OAAO,IAAI,QAAQ,GAAG,CAAC,EAAG;AAAA,IACxC;AAAA,IAED;AAAA;AAAA,MAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAkBzB;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqG3B,UAAU;AAAA,IACV,WAAW;AAAA,IACX,YAAY;AAAA,EAChB,CAAG;AAED,iBAAe,OAAO;AAEtB,SAAO;AACT;"}
1
+ {"version":3,"file":"RoughnessMipmapper.js","sources":["../../src/utils/RoughnessMipmapper.js"],"sourcesContent":["/**\n * This class generates custom mipmaps for a roughness map by encoding the lost variation in the\n * normal map mip levels as increased roughness in the corresponding roughness mip levels. This\n * helps with rendering accuracy for MeshStandardMaterial, and also helps with anti-aliasing when\n * using PMREM. If the normal map is larger than the roughness map, the roughness map will be\n * enlarged to match the dimensions of the normal map.\n */\n\nimport {\n MathUtils,\n Mesh,\n NoBlending,\n OrthographicCamera,\n PlaneGeometry,\n RawShaderMaterial,\n Vector2,\n WebGLRenderTarget,\n} from 'three'\n\nvar _mipmapMaterial = /* @__PURE__ */ _getMipmapMaterial()\n\nvar _mesh = /* @__PURE__ */ new Mesh(/* @__PURE__ */ new PlaneGeometry(2, 2), _mipmapMaterial)\n\nvar _flatCamera = /* @__PURE__ */ new OrthographicCamera(0, 1, 0, 1, 0, 1)\n\nvar _tempTarget = null\n\nclass RoughnessMipmapper {\n constructor(renderer) {\n this._renderer = renderer\n\n this._renderer.compile(_mesh, _flatCamera)\n }\n\n generateMipmaps = function (material) {\n if ('roughnessMap' in material === false) return\n\n var { roughnessMap, normalMap } = material\n\n if (\n roughnessMap === null ||\n normalMap === null ||\n !roughnessMap.generateMipmaps ||\n material.userData.roughnessUpdated\n ) {\n return\n }\n\n material.userData.roughnessUpdated = true\n\n var width = Math.max(roughnessMap.image.width, normalMap.image.width)\n\n var height = Math.max(roughnessMap.image.height, normalMap.image.height)\n\n if (!MathUtils.isPowerOfTwo(width) || !MathUtils.isPowerOfTwo(height)) return\n\n var oldTarget = this._renderer.getRenderTarget()\n\n var autoClear = this._renderer.autoClear\n\n this._renderer.autoClear = false\n\n if (_tempTarget === null || _tempTarget.width !== width || _tempTarget.height !== height) {\n if (_tempTarget !== null) _tempTarget.dispose()\n\n _tempTarget = new WebGLRenderTarget(width, height, {\n depthBuffer: false,\n })\n\n _tempTarget.scissorTest = true\n }\n\n if (width !== roughnessMap.image.width || height !== roughnessMap.image.height) {\n var params = {\n wrapS: roughnessMap.wrapS,\n wrapT: roughnessMap.wrapT,\n magFilter: roughnessMap.magFilter,\n minFilter: roughnessMap.minFilter,\n depthBuffer: false,\n }\n\n var newRoughnessTarget = new WebGLRenderTarget(width, height, params)\n\n newRoughnessTarget.texture.generateMipmaps = true\n\n // Setting the render target causes the memory to be allocated.\n\n this._renderer.setRenderTarget(newRoughnessTarget)\n\n material.roughnessMap = newRoughnessTarget.texture\n\n if (material.metalnessMap == roughnessMap) material.metalnessMap = material.roughnessMap\n\n if (material.aoMap == roughnessMap) material.aoMap = material.roughnessMap\n }\n\n _mipmapMaterial.uniforms.roughnessMap.value = roughnessMap\n\n _mipmapMaterial.uniforms.normalMap.value = normalMap\n\n var position = new Vector2(0, 0)\n\n var texelSize = _mipmapMaterial.uniforms.texelSize.value\n\n for (let mip = 0; width >= 1 && height >= 1; ++mip, width /= 2, height /= 2) {\n // Rendering to a mip level is not allowed in webGL1. Instead we must set\n // up a secondary texture to write the result to, then copy it back to the\n // proper mipmap level.\n\n texelSize.set(1.0 / width, 1.0 / height)\n\n if (mip == 0) texelSize.set(0.0, 0.0)\n\n _tempTarget.viewport.set(position.x, position.y, width, height)\n\n _tempTarget.scissor.set(position.x, position.y, width, height)\n\n this._renderer.setRenderTarget(_tempTarget)\n\n this._renderer.render(_mesh, _flatCamera)\n\n this._renderer.copyFramebufferToTexture(position, material.roughnessMap, mip)\n\n _mipmapMaterial.uniforms.roughnessMap.value = material.roughnessMap\n }\n\n if (roughnessMap !== material.roughnessMap) roughnessMap.dispose()\n\n this._renderer.setRenderTarget(oldTarget)\n\n this._renderer.autoClear = autoClear\n }\n\n dispose = function () {\n _mipmapMaterial.dispose()\n\n _mesh.geometry.dispose()\n\n if (_tempTarget != null) _tempTarget.dispose()\n }\n}\n\nfunction _getMipmapMaterial() {\n var shaderMaterial = new RawShaderMaterial({\n uniforms: {\n roughnessMap: { value: null },\n normalMap: { value: null },\n texelSize: { value: new Vector2(1, 1) },\n },\n\n vertexShader: /* glsl */ `\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tattribute vec3 position;\n\t\t\tattribute vec2 uv;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\tvoid main() {\n\n\t\t\t\tvUv = uv;\n\n\t\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t\t}\n\t\t`,\n\n fragmentShader: /* glsl */ `\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\tuniform sampler2D roughnessMap;\n\t\t\tuniform sampler2D normalMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\n\t\t\tvec4 envMapTexelToLinear( vec4 a ) { return a; }\n\n\t\t\t#include <cube_uv_reflection_fragment>\n\n\t\t\tfloat roughnessToVariance( float roughness ) {\n\n\t\t\t\tfloat variance = 0.0;\n\n\t\t\t\tif ( roughness >= r1 ) {\n\n\t\t\t\t\tvariance = ( r0 - roughness ) * ( v1 - v0 ) / ( r0 - r1 ) + v0;\n\n\t\t\t\t} else if ( roughness >= r4 ) {\n\n\t\t\t\t\tvariance = ( r1 - roughness ) * ( v4 - v1 ) / ( r1 - r4 ) + v1;\n\n\t\t\t\t} else if ( roughness >= r5 ) {\n\n\t\t\t\t\tvariance = ( r4 - roughness ) * ( v5 - v4 ) / ( r4 - r5 ) + v4;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfloat roughness2 = roughness * roughness;\n\n\t\t\t\t\tvariance = 1.79 * roughness2 * roughness2;\n\n\t\t\t\t}\n\n\t\t\t\treturn variance;\n\n\t\t\t}\n\n\t\t\tfloat varianceToRoughness( float variance ) {\n\n\t\t\t\tfloat roughness = 0.0;\n\n\t\t\t\tif ( variance >= v1 ) {\n\n\t\t\t\t\troughness = ( v0 - variance ) * ( r1 - r0 ) / ( v0 - v1 ) + r0;\n\n\t\t\t\t} else if ( variance >= v4 ) {\n\n\t\t\t\t\troughness = ( v1 - variance ) * ( r4 - r1 ) / ( v1 - v4 ) + r1;\n\n\t\t\t\t} else if ( variance >= v5 ) {\n\n\t\t\t\t\troughness = ( v4 - variance ) * ( r5 - r4 ) / ( v4 - v5 ) + r4;\n\n\t\t\t\t} else {\n\n\t\t\t\t\troughness = pow( 0.559 * variance, 0.25 ); // 0.559 = 1.0 / 1.79\n\n\t\t\t\t}\n\n\t\t\t\treturn roughness;\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = texture2D( roughnessMap, vUv, - 1.0 );\n\n\t\t\t\tif ( texelSize.x == 0.0 ) return;\n\n\t\t\t\tfloat roughness = gl_FragColor.g;\n\n\t\t\t\tfloat variance = roughnessToVariance( roughness );\n\n\t\t\t\tvec3 avgNormal;\n\n\t\t\t\tfor ( float x = - 1.0; x < 2.0; x += 2.0 ) {\n\n\t\t\t\t\tfor ( float y = - 1.0; y < 2.0; y += 2.0 ) {\n\n\t\t\t\t\t\tvec2 uv = vUv + vec2( x, y ) * 0.25 * texelSize;\n\n\t\t\t\t\t\tavgNormal += normalize( texture2D( normalMap, uv, - 1.0 ).xyz - 0.5 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvariance += 1.0 - 0.25 * length( avgNormal );\n\n\t\t\t\tgl_FragColor.g = varianceToRoughness( variance );\n\n\t\t\t}\n\t\t`,\n\n blending: NoBlending,\n depthTest: false,\n depthWrite: false,\n })\n\n shaderMaterial.type = 'RoughnessMipmapper'\n\n return shaderMaterial\n}\n\nexport { RoughnessMipmapper }\n"],"names":[],"mappings":"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"}
@@ -1,119 +1,122 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- class ARButton {
4
- static createButton(renderer, sessionInit = {}) {
5
- const button = document.createElement("button");
6
- function showStartAR() {
7
- if (sessionInit.domOverlay === void 0) {
8
- const overlay = document.createElement("div");
9
- overlay.style.display = "none";
10
- document.body.appendChild(overlay);
11
- const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
12
- svg.setAttribute("width", "38px");
13
- svg.setAttribute("height", "38px");
14
- svg.style.position = "absolute";
15
- svg.style.right = "20px";
16
- svg.style.top = "20px";
17
- svg.addEventListener("click", function() {
18
- currentSession == null ? void 0 : currentSession.end();
19
- });
20
- overlay.appendChild(svg);
21
- const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
22
- path.setAttribute("d", "M 12,12 L 28,28 M 28,12 12,28");
23
- path.setAttribute("stroke", "#fff");
24
- path.setAttribute("stroke-width", "2px");
25
- svg.appendChild(path);
26
- if (sessionInit.optionalFeatures === void 0) {
27
- sessionInit.optionalFeatures = [];
3
+ const ARButton = /* @__PURE__ */ (() => {
4
+ class ARButton2 {
5
+ static createButton(renderer, sessionInit = {}) {
6
+ const button = document.createElement("button");
7
+ function showStartAR() {
8
+ if (sessionInit.domOverlay === void 0) {
9
+ const overlay = document.createElement("div");
10
+ overlay.style.display = "none";
11
+ document.body.appendChild(overlay);
12
+ const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
13
+ svg.setAttribute("width", "38px");
14
+ svg.setAttribute("height", "38px");
15
+ svg.style.position = "absolute";
16
+ svg.style.right = "20px";
17
+ svg.style.top = "20px";
18
+ svg.addEventListener("click", function() {
19
+ currentSession == null ? void 0 : currentSession.end();
20
+ });
21
+ overlay.appendChild(svg);
22
+ const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
23
+ path.setAttribute("d", "M 12,12 L 28,28 M 28,12 12,28");
24
+ path.setAttribute("stroke", "#fff");
25
+ path.setAttribute("stroke-width", "2px");
26
+ svg.appendChild(path);
27
+ if (sessionInit.optionalFeatures === void 0) {
28
+ sessionInit.optionalFeatures = [];
29
+ }
30
+ sessionInit.optionalFeatures.push("dom-overlay");
31
+ sessionInit.domOverlay = { root: overlay };
28
32
  }
29
- sessionInit.optionalFeatures.push("dom-overlay");
30
- sessionInit.domOverlay = { root: overlay };
33
+ let currentSession = null;
34
+ async function onSessionStarted(session) {
35
+ session.addEventListener("end", onSessionEnded);
36
+ renderer.xr.setReferenceSpaceType("local");
37
+ await renderer.xr.setSession(session);
38
+ button.textContent = "STOP AR";
39
+ sessionInit.domOverlay.root.style.display = "";
40
+ currentSession = session;
41
+ }
42
+ function onSessionEnded() {
43
+ currentSession.removeEventListener("end", onSessionEnded);
44
+ button.textContent = "START AR";
45
+ sessionInit.domOverlay.root.style.display = "none";
46
+ currentSession = null;
47
+ }
48
+ button.style.display = "";
49
+ button.style.cursor = "pointer";
50
+ button.style.left = "calc(50% - 50px)";
51
+ button.style.width = "100px";
52
+ button.textContent = "START AR";
53
+ button.onmouseenter = () => {
54
+ button.style.opacity = "1.0";
55
+ };
56
+ button.onmouseleave = () => {
57
+ button.style.opacity = "0.5";
58
+ };
59
+ button.onclick = () => {
60
+ if (currentSession === null) {
61
+ navigator.xr.requestSession("immersive-ar", sessionInit).then(onSessionStarted);
62
+ } else {
63
+ currentSession.end();
64
+ }
65
+ };
31
66
  }
32
- let currentSession = null;
33
- async function onSessionStarted(session) {
34
- session.addEventListener("end", onSessionEnded);
35
- renderer.xr.setReferenceSpaceType("local");
36
- await renderer.xr.setSession(session);
37
- button.textContent = "STOP AR";
38
- sessionInit.domOverlay.root.style.display = "";
39
- currentSession = session;
67
+ function disableButton() {
68
+ button.style.display = "";
69
+ button.style.cursor = "auto";
70
+ button.style.left = "calc(50% - 75px)";
71
+ button.style.width = "150px";
72
+ button.onmouseenter = null;
73
+ button.onmouseleave = null;
74
+ button.onclick = null;
40
75
  }
41
- function onSessionEnded() {
42
- currentSession.removeEventListener("end", onSessionEnded);
43
- button.textContent = "START AR";
44
- sessionInit.domOverlay.root.style.display = "none";
45
- currentSession = null;
76
+ function showARNotSupported() {
77
+ disableButton();
78
+ button.textContent = "AR NOT SUPPORTED";
79
+ }
80
+ function stylizeElement(element) {
81
+ element.style.position = "absolute";
82
+ element.style.bottom = "20px";
83
+ element.style.padding = "12px 6px";
84
+ element.style.border = "1px solid #fff";
85
+ element.style.borderRadius = "4px";
86
+ element.style.background = "rgba(0,0,0,0.1)";
87
+ element.style.color = "#fff";
88
+ element.style.font = "normal 13px sans-serif";
89
+ element.style.textAlign = "center";
90
+ element.style.opacity = "0.5";
91
+ element.style.outline = "none";
92
+ element.style.zIndex = "999";
46
93
  }
47
- button.style.display = "";
48
- button.style.cursor = "pointer";
49
- button.style.left = "calc(50% - 50px)";
50
- button.style.width = "100px";
51
- button.textContent = "START AR";
52
- button.onmouseenter = () => {
53
- button.style.opacity = "1.0";
54
- };
55
- button.onmouseleave = () => {
56
- button.style.opacity = "0.5";
57
- };
58
- button.onclick = () => {
59
- if (currentSession === null) {
60
- navigator.xr.requestSession("immersive-ar", sessionInit).then(onSessionStarted);
94
+ if ("xr" in navigator) {
95
+ button.id = "ARButton";
96
+ button.style.display = "none";
97
+ stylizeElement(button);
98
+ navigator.xr.isSessionSupported("immersive-ar").then(function(supported) {
99
+ supported ? showStartAR() : showARNotSupported();
100
+ }).catch(showARNotSupported);
101
+ return button;
102
+ } else {
103
+ const message = document.createElement("a");
104
+ if (window.isSecureContext === false) {
105
+ message.href = document.location.href.replace(/^http:/, "https:");
106
+ message.innerHTML = "WEBXR NEEDS HTTPS";
61
107
  } else {
62
- currentSession.end();
108
+ message.href = "https://immersiveweb.dev/";
109
+ message.innerHTML = "WEBXR NOT AVAILABLE";
63
110
  }
64
- };
65
- }
66
- function disableButton() {
67
- button.style.display = "";
68
- button.style.cursor = "auto";
69
- button.style.left = "calc(50% - 75px)";
70
- button.style.width = "150px";
71
- button.onmouseenter = null;
72
- button.onmouseleave = null;
73
- button.onclick = null;
74
- }
75
- function showARNotSupported() {
76
- disableButton();
77
- button.textContent = "AR NOT SUPPORTED";
78
- }
79
- function stylizeElement(element) {
80
- element.style.position = "absolute";
81
- element.style.bottom = "20px";
82
- element.style.padding = "12px 6px";
83
- element.style.border = "1px solid #fff";
84
- element.style.borderRadius = "4px";
85
- element.style.background = "rgba(0,0,0,0.1)";
86
- element.style.color = "#fff";
87
- element.style.font = "normal 13px sans-serif";
88
- element.style.textAlign = "center";
89
- element.style.opacity = "0.5";
90
- element.style.outline = "none";
91
- element.style.zIndex = "999";
92
- }
93
- if ("xr" in navigator) {
94
- button.id = "ARButton";
95
- button.style.display = "none";
96
- stylizeElement(button);
97
- navigator.xr.isSessionSupported("immersive-ar").then(function(supported) {
98
- supported ? showStartAR() : showARNotSupported();
99
- }).catch(showARNotSupported);
100
- return button;
101
- } else {
102
- const message = document.createElement("a");
103
- if (window.isSecureContext === false) {
104
- message.href = document.location.href.replace(/^http:/, "https:");
105
- message.innerHTML = "WEBXR NEEDS HTTPS";
106
- } else {
107
- message.href = "https://immersiveweb.dev/";
108
- message.innerHTML = "WEBXR NOT AVAILABLE";
111
+ message.style.left = "calc(50% - 90px)";
112
+ message.style.width = "180px";
113
+ message.style.textDecoration = "none";
114
+ stylizeElement(message);
115
+ return message;
109
116
  }
110
- message.style.left = "calc(50% - 90px)";
111
- message.style.width = "180px";
112
- message.style.textDecoration = "none";
113
- stylizeElement(message);
114
- return message;
115
117
  }
116
118
  }
117
- }
119
+ return ARButton2;
120
+ })();
118
121
  exports.ARButton = ARButton;
119
122
  //# sourceMappingURL=ARButton.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ARButton.cjs","sources":["../../src/webxr/ARButton.ts"],"sourcesContent":["import { WebGLRenderer } from 'three'\n\nclass ARButton {\n static createButton(renderer: WebGLRenderer, sessionInit: XRSessionInit = {}): HTMLButtonElement | HTMLAnchorElement {\n const button = document.createElement('button')\n\n function showStartAR(/*device*/): void {\n if ((sessionInit as any).domOverlay === undefined) {\n const overlay = document.createElement('div')\n overlay.style.display = 'none'\n document.body.appendChild(overlay)\n\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n svg.setAttribute('width', '38px')\n svg.setAttribute('height', '38px')\n svg.style.position = 'absolute'\n svg.style.right = '20px'\n svg.style.top = '20px'\n svg.addEventListener('click', function () {\n currentSession?.end()\n })\n overlay.appendChild(svg)\n\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n path.setAttribute('d', 'M 12,12 L 28,28 M 28,12 12,28')\n path.setAttribute('stroke', '#fff')\n path.setAttribute('stroke-width', '2px')\n svg.appendChild(path)\n\n if (sessionInit.optionalFeatures === undefined) {\n sessionInit.optionalFeatures = []\n }\n\n sessionInit.optionalFeatures.push('dom-overlay')\n ;(sessionInit as any).domOverlay = { root: overlay }\n }\n\n //\n\n let currentSession: XRSession | null = null\n\n async function onSessionStarted(session: XRSession): Promise<void> {\n session.addEventListener('end', onSessionEnded)\n\n renderer.xr.setReferenceSpaceType('local')\n\n await renderer.xr.setSession(session as any)\n\n button.textContent = 'STOP AR'\n ;(sessionInit as any).domOverlay!.root.style.display = ''\n\n currentSession = session\n }\n\n function onSessionEnded(/*event*/): void {\n currentSession!.removeEventListener('end', onSessionEnded)\n\n button.textContent = 'START AR'\n ;(sessionInit as any).domOverlay!.root.style.display = 'none'\n\n currentSession = null\n }\n\n //\n\n button.style.display = ''\n\n button.style.cursor = 'pointer'\n button.style.left = 'calc(50% - 50px)'\n button.style.width = '100px'\n\n button.textContent = 'START AR'\n\n button.onmouseenter = (): void => {\n button.style.opacity = '1.0'\n }\n\n button.onmouseleave = (): void => {\n button.style.opacity = '0.5'\n }\n\n button.onclick = (): void => {\n if (currentSession === null) {\n ;(navigator as Navigator).xr!.requestSession('immersive-ar', sessionInit).then(onSessionStarted)\n } else {\n currentSession.end()\n }\n }\n }\n\n function disableButton(): void {\n button.style.display = ''\n\n button.style.cursor = 'auto'\n button.style.left = 'calc(50% - 75px)'\n button.style.width = '150px'\n\n button.onmouseenter = null\n button.onmouseleave = null\n\n button.onclick = null\n }\n\n function showARNotSupported(): void {\n disableButton()\n\n button.textContent = 'AR NOT SUPPORTED'\n }\n\n function stylizeElement(element: HTMLElement): void {\n element.style.position = 'absolute'\n element.style.bottom = '20px'\n element.style.padding = '12px 6px'\n element.style.border = '1px solid #fff'\n element.style.borderRadius = '4px'\n element.style.background = 'rgba(0,0,0,0.1)'\n element.style.color = '#fff'\n element.style.font = 'normal 13px sans-serif'\n element.style.textAlign = 'center'\n element.style.opacity = '0.5'\n element.style.outline = 'none'\n element.style.zIndex = '999'\n }\n\n if ('xr' in navigator) {\n button.id = 'ARButton'\n button.style.display = 'none'\n\n stylizeElement(button)\n\n // Query for session mode\n ;(navigator as Navigator)\n .xr!.isSessionSupported('immersive-ar')\n .then(function (supported: boolean) {\n supported ? showStartAR() : showARNotSupported()\n })\n .catch(showARNotSupported)\n\n return button\n } else {\n const message = document.createElement('a')\n\n if (window.isSecureContext === false) {\n message.href = document.location.href.replace(/^http:/, 'https:')\n message.innerHTML = 'WEBXR NEEDS HTTPS' // TODO Improve message\n } else {\n message.href = 'https://immersiveweb.dev/'\n message.innerHTML = 'WEBXR NOT AVAILABLE'\n }\n\n message.style.left = 'calc(50% - 90px)'\n message.style.width = '180px'\n message.style.textDecoration = 'none'\n\n stylizeElement(message)\n\n return message\n }\n }\n}\n\nexport { ARButton }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ARButton.cjs","sources":["../../src/webxr/ARButton.ts"],"sourcesContent":["import { WebGLRenderer } from 'three'\n\nconst ARButton = /* @__PURE__ */ (() => {\n class ARButton {\n static createButton(\n renderer: WebGLRenderer,\n sessionInit: XRSessionInit = {},\n ): HTMLButtonElement | HTMLAnchorElement {\n const button = document.createElement('button')\n\n function showStartAR(/*device*/): void {\n if ((sessionInit as any).domOverlay === undefined) {\n const overlay = document.createElement('div')\n overlay.style.display = 'none'\n document.body.appendChild(overlay)\n\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n svg.setAttribute('width', '38px')\n svg.setAttribute('height', '38px')\n svg.style.position = 'absolute'\n svg.style.right = '20px'\n svg.style.top = '20px'\n svg.addEventListener('click', function () {\n currentSession?.end()\n })\n overlay.appendChild(svg)\n\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n path.setAttribute('d', 'M 12,12 L 28,28 M 28,12 12,28')\n path.setAttribute('stroke', '#fff')\n path.setAttribute('stroke-width', '2px')\n svg.appendChild(path)\n\n if (sessionInit.optionalFeatures === undefined) {\n sessionInit.optionalFeatures = []\n }\n\n sessionInit.optionalFeatures.push('dom-overlay')\n ;(sessionInit as any).domOverlay = { root: overlay }\n }\n\n //\n\n let currentSession: XRSession | null = null\n\n async function onSessionStarted(session: XRSession): Promise<void> {\n session.addEventListener('end', onSessionEnded)\n\n renderer.xr.setReferenceSpaceType('local')\n\n await renderer.xr.setSession(session as any)\n\n button.textContent = 'STOP AR'\n ;(sessionInit as any).domOverlay!.root.style.display = ''\n\n currentSession = session\n }\n\n function onSessionEnded(/*event*/): void {\n currentSession!.removeEventListener('end', onSessionEnded)\n\n button.textContent = 'START AR'\n ;(sessionInit as any).domOverlay!.root.style.display = 'none'\n\n currentSession = null\n }\n\n //\n\n button.style.display = ''\n\n button.style.cursor = 'pointer'\n button.style.left = 'calc(50% - 50px)'\n button.style.width = '100px'\n\n button.textContent = 'START AR'\n\n button.onmouseenter = (): void => {\n button.style.opacity = '1.0'\n }\n\n button.onmouseleave = (): void => {\n button.style.opacity = '0.5'\n }\n\n button.onclick = (): void => {\n if (currentSession === null) {\n ;(navigator as Navigator).xr!.requestSession('immersive-ar', sessionInit).then(onSessionStarted)\n } else {\n currentSession.end()\n }\n }\n }\n\n function disableButton(): void {\n button.style.display = ''\n\n button.style.cursor = 'auto'\n button.style.left = 'calc(50% - 75px)'\n button.style.width = '150px'\n\n button.onmouseenter = null\n button.onmouseleave = null\n\n button.onclick = null\n }\n\n function showARNotSupported(): void {\n disableButton()\n\n button.textContent = 'AR NOT SUPPORTED'\n }\n\n function stylizeElement(element: HTMLElement): void {\n element.style.position = 'absolute'\n element.style.bottom = '20px'\n element.style.padding = '12px 6px'\n element.style.border = '1px solid #fff'\n element.style.borderRadius = '4px'\n element.style.background = 'rgba(0,0,0,0.1)'\n element.style.color = '#fff'\n element.style.font = 'normal 13px sans-serif'\n element.style.textAlign = 'center'\n element.style.opacity = '0.5'\n element.style.outline = 'none'\n element.style.zIndex = '999'\n }\n\n if ('xr' in navigator) {\n button.id = 'ARButton'\n button.style.display = 'none'\n\n stylizeElement(button)\n\n // Query for session mode\n ;(navigator as Navigator)\n .xr!.isSessionSupported('immersive-ar')\n .then(function (supported: boolean) {\n supported ? showStartAR() : showARNotSupported()\n })\n .catch(showARNotSupported)\n\n return button\n } else {\n const message = document.createElement('a')\n\n if (window.isSecureContext === false) {\n message.href = document.location.href.replace(/^http:/, 'https:')\n message.innerHTML = 'WEBXR NEEDS HTTPS' // TODO Improve message\n } else {\n message.href = 'https://immersiveweb.dev/'\n message.innerHTML = 'WEBXR NOT AVAILABLE'\n }\n\n message.style.left = 'calc(50% - 90px)'\n message.style.width = '180px'\n message.style.textDecoration = 'none'\n\n stylizeElement(message)\n\n return message\n }\n }\n }\n\n return ARButton\n})()\n\nexport { ARButton }\n"],"names":["ARButton"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  /// <reference types="webxr" />
2
2
  import { WebGLRenderer } from 'three';
3
- declare class ARButton {
4
- static createButton(renderer: WebGLRenderer, sessionInit?: XRSessionInit): HTMLButtonElement | HTMLAnchorElement;
5
- }
3
+ declare const ARButton: {
4
+ new (): {};
5
+ createButton(renderer: WebGLRenderer, sessionInit?: XRSessionInit): HTMLButtonElement | HTMLAnchorElement;
6
+ };
6
7
  export { ARButton };