super-three 0.144.0 → 0.147.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +737 -388
  3. package/build/three.js +737 -388
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +911 -409
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +50 -67
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +70 -134
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +138 -405
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -54
  14. package/examples/js/controls/FlyControls.js +29 -55
  15. package/examples/js/controls/OrbitControls.js +125 -99
  16. package/examples/js/controls/PointerLockControls.js +5 -14
  17. package/examples/js/controls/TrackballControls.js +33 -86
  18. package/examples/js/controls/TransformControls.js +85 -170
  19. package/examples/js/csm/CSM.js +4 -39
  20. package/examples/js/csm/CSMFrustum.js +3 -9
  21. package/examples/js/csm/CSMHelper.js +24 -4
  22. package/examples/js/csm/CSMShader.js +2 -6
  23. package/examples/js/curves/CurveExtras.js +27 -27
  24. package/examples/js/curves/NURBSCurve.js +4 -16
  25. package/examples/js/curves/NURBSSurface.js +3 -9
  26. package/examples/js/curves/NURBSUtils.js +8 -45
  27. package/examples/js/effects/AnaglyphEffect.js +4 -18
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +26 -30
  30. package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
  31. package/examples/js/effects/PeppersGhostEffect.js +12 -39
  32. package/examples/js/effects/StereoEffect.js +0 -4
  33. package/examples/js/environments/RoomEnvironment.js +12 -10
  34. package/examples/js/exporters/ColladaExporter.js +48 -65
  35. package/examples/js/exporters/DRACOExporter.js +22 -22
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +141 -317
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +42 -33
  40. package/examples/js/exporters/PLYExporter.js +38 -33
  41. package/examples/js/exporters/STLExporter.js +5 -7
  42. package/examples/js/exporters/USDZExporter.js +113 -27
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +11 -6
  45. package/examples/js/geometries/DecalGeometry.js +53 -20
  46. package/examples/js/geometries/LightningStrike.js +54 -67
  47. package/examples/js/geometries/ParametricGeometries.js +8 -7
  48. package/examples/js/geometries/ParametricGeometry.js +25 -12
  49. package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
  50. package/examples/js/geometries/TeapotGeometry.js +54 -50
  51. package/examples/js/geometries/TextGeometry.js +6 -4
  52. package/examples/js/helpers/LightProbeHelper.js +1 -2
  53. package/examples/js/helpers/OctreeHelper.js +22 -20
  54. package/examples/js/helpers/PositionalAudioHelper.js +8 -6
  55. package/examples/js/helpers/RectAreaLightHelper.js +6 -7
  56. package/examples/js/helpers/VertexNormalsHelper.js +15 -13
  57. package/examples/js/helpers/VertexTangentsHelper.js +15 -9
  58. package/examples/js/helpers/ViewHelper.js +31 -16
  59. package/examples/js/interactive/HTMLMesh.js +25 -39
  60. package/examples/js/interactive/InteractiveGroup.js +9 -14
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +0 -8
  63. package/examples/js/lights/LightProbeGenerator.js +32 -39
  64. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  65. package/examples/js/lines/LineGeometry.js +3 -5
  66. package/examples/js/lines/LineMaterial.js +4 -11
  67. package/examples/js/lines/LineSegments2.js +40 -89
  68. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  69. package/examples/js/lines/Wireframe.js +2 -7
  70. package/examples/js/lines/WireframeGeometry2.js +3 -1
  71. package/examples/js/loaders/3DMLoader.js +58 -155
  72. package/examples/js/loaders/3MFLoader.js +72 -106
  73. package/examples/js/loaders/AMFLoader.js +0 -25
  74. package/examples/js/loaders/BVHLoader.js +44 -43
  75. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  76. package/examples/js/loaders/ColladaLoader.js +228 -359
  77. package/examples/js/loaders/DDSLoader.js +24 -25
  78. package/examples/js/loaders/DRACOLoader.js +29 -66
  79. package/examples/js/loaders/EXRLoader.js +67 -164
  80. package/examples/js/loaders/FBXLoader.js +287 -441
  81. package/examples/js/loaders/FontLoader.js +6 -15
  82. package/examples/js/loaders/GCodeLoader.js +15 -16
  83. package/examples/js/loaders/GLTFLoader.js +409 -706
  84. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
  85. package/examples/js/loaders/KMZLoader.js +3 -7
  86. package/examples/js/loaders/KTXLoader.js +12 -30
  87. package/examples/js/loaders/LDrawLoader.js +178 -289
  88. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  89. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  90. package/examples/js/loaders/LWOLoader.js +59 -124
  91. package/examples/js/loaders/LogLuvLoader.js +27 -77
  92. package/examples/js/loaders/LottieLoader.js +4 -4
  93. package/examples/js/loaders/MD2Loader.js +26 -27
  94. package/examples/js/loaders/MDDLoader.js +6 -10
  95. package/examples/js/loaders/MMDLoader.js +180 -189
  96. package/examples/js/loaders/MTLLoader.js +18 -47
  97. package/examples/js/loaders/NRRDLoader.js +44 -84
  98. package/examples/js/loaders/OBJLoader.js +50 -65
  99. package/examples/js/loaders/PCDLoader.js +34 -29
  100. package/examples/js/loaders/PDBLoader.js +17 -13
  101. package/examples/js/loaders/PLYLoader.js +62 -48
  102. package/examples/js/loaders/PRWMLoader.js +11 -22
  103. package/examples/js/loaders/PVRLoader.js +7 -16
  104. package/examples/js/loaders/RGBELoader.js +36 -61
  105. package/examples/js/loaders/RGBMLoader.js +26 -87
  106. package/examples/js/loaders/STLLoader.js +20 -27
  107. package/examples/js/loaders/SVGLoader.js +361 -233
  108. package/examples/js/loaders/TDSLoader.js +81 -118
  109. package/examples/js/loaders/TGALoader.js +39 -41
  110. package/examples/js/loaders/TIFFLoader.js +0 -1
  111. package/examples/js/loaders/TTFLoader.js +0 -8
  112. package/examples/js/loaders/TiltLoader.js +14 -15
  113. package/examples/js/loaders/VOXLoader.js +8 -16
  114. package/examples/js/loaders/VRMLLoader.js +243 -340
  115. package/examples/js/loaders/VTKLoader.js +101 -118
  116. package/examples/js/loaders/XYZLoader.js +2 -4
  117. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  118. package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
  119. package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
  120. package/examples/js/materials/MeshGouraudMaterial.js +15 -13
  121. package/examples/js/math/Capsule.js +0 -17
  122. package/examples/js/math/ColorConverter.js +3 -3
  123. package/examples/js/math/ConvexHull.js +185 -141
  124. package/examples/js/math/ImprovedNoise.js +1 -1
  125. package/examples/js/math/Lut.js +8 -15
  126. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  127. package/examples/js/math/OBB.js +90 -49
  128. package/examples/js/math/Octree.js +2 -57
  129. package/examples/js/math/SimplexNoise.js +74 -88
  130. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  131. package/examples/js/misc/GPUComputationRenderer.js +26 -16
  132. package/examples/js/misc/Gyroscope.js +5 -9
  133. package/examples/js/misc/MD2Character.js +14 -23
  134. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  135. package/examples/js/misc/MorphAnimMesh.js +0 -6
  136. package/examples/js/misc/MorphBlendMesh.js +3 -30
  137. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  138. package/examples/js/misc/RollerCoaster.js +17 -24
  139. package/examples/js/misc/TubePainter.js +18 -12
  140. package/examples/js/misc/Volume.js +16 -45
  141. package/examples/js/misc/VolumeSlice.js +14 -24
  142. package/examples/js/modifiers/CurveModifier.js +19 -21
  143. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  144. package/examples/js/modifiers/SimplifyModifier.js +56 -59
  145. package/examples/js/modifiers/TessellateModifier.js +2 -9
  146. package/examples/js/objects/GroundProjectedEnv.js +2 -14
  147. package/examples/js/objects/Lensflare.js +47 -38
  148. package/examples/js/objects/LightningStorm.js +10 -13
  149. package/examples/js/objects/MarchingCubes.js +80 -59
  150. package/examples/js/objects/Reflector.js +22 -20
  151. package/examples/js/objects/ReflectorForSSRPass.js +19 -23
  152. package/examples/js/objects/Refractor.js +52 -30
  153. package/examples/js/objects/ShadowMesh.js +1 -2
  154. package/examples/js/objects/Sky.js +2 -7
  155. package/examples/js/objects/Water.js +23 -18
  156. package/examples/js/objects/Water2.js +20 -19
  157. package/examples/js/physics/AmmoPhysics.js +23 -20
  158. package/examples/js/physics/OimoPhysics.js +19 -17
  159. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  160. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  161. package/examples/js/postprocessing/BloomPass.js +38 -17
  162. package/examples/js/postprocessing/BokehPass.js +29 -12
  163. package/examples/js/postprocessing/ClearPass.js +1 -6
  164. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  165. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  166. package/examples/js/postprocessing/EffectComposer.js +25 -32
  167. package/examples/js/postprocessing/FilmPass.js +7 -5
  168. package/examples/js/postprocessing/GlitchPass.js +10 -11
  169. package/examples/js/postprocessing/HalftonePass.js +9 -9
  170. package/examples/js/postprocessing/LUTPass.js +2 -15
  171. package/examples/js/postprocessing/MaskPass.js +20 -17
  172. package/examples/js/postprocessing/OutlinePass.js +45 -36
  173. package/examples/js/postprocessing/Pass.js +11 -14
  174. package/examples/js/postprocessing/RenderPass.js +3 -7
  175. package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
  176. package/examples/js/postprocessing/SAOPass.js +40 -32
  177. package/examples/js/postprocessing/SMAAPass.js +34 -17
  178. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  179. package/examples/js/postprocessing/SSAOPass.js +56 -42
  180. package/examples/js/postprocessing/SSRPass.js +78 -61
  181. package/examples/js/postprocessing/SavePass.js +14 -6
  182. package/examples/js/postprocessing/ShaderPass.js +9 -8
  183. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  184. package/examples/js/postprocessing/TexturePass.js +7 -4
  185. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  186. package/examples/js/renderers/CSS2DRenderer.js +2 -21
  187. package/examples/js/renderers/CSS3DRenderer.js +3 -24
  188. package/examples/js/renderers/Projector.js +29 -85
  189. package/examples/js/renderers/SVGRenderer.js +4 -50
  190. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  191. package/examples/js/shaders/AfterimageShader.js +3 -6
  192. package/examples/js/shaders/BasicShader.js +3 -6
  193. package/examples/js/shaders/BleachBypassShader.js +3 -6
  194. package/examples/js/shaders/BlendShader.js +3 -6
  195. package/examples/js/shaders/BokehShader.js +3 -6
  196. package/examples/js/shaders/BokehShader2.js +4 -13
  197. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  198. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  199. package/examples/js/shaders/ColorifyShader.js +2 -6
  200. package/examples/js/shaders/ConvolutionShader.js +5 -10
  201. package/examples/js/shaders/CopyShader.js +3 -6
  202. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  203. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  204. package/examples/js/shaders/DigitalGlitch.js +3 -6
  205. package/examples/js/shaders/DotScreenShader.js +2 -6
  206. package/examples/js/shaders/FXAAShader.js +1 -3
  207. package/examples/js/shaders/FilmShader.js +3 -6
  208. package/examples/js/shaders/FocusShader.js +3 -6
  209. package/examples/js/shaders/FreiChenShader.js +2 -6
  210. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  211. package/examples/js/shaders/GodRaysShader.js +11 -24
  212. package/examples/js/shaders/HalftoneShader.js +3 -6
  213. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  214. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  215. package/examples/js/shaders/HueSaturationShader.js +3 -6
  216. package/examples/js/shaders/KaleidoShader.js +3 -6
  217. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  218. package/examples/js/shaders/LuminosityShader.js +3 -6
  219. package/examples/js/shaders/MMDToonShader.js +2 -8
  220. package/examples/js/shaders/MirrorShader.js +3 -6
  221. package/examples/js/shaders/NormalMapShader.js +2 -6
  222. package/examples/js/shaders/RGBShiftShader.js +3 -6
  223. package/examples/js/shaders/SAOShader.js +2 -6
  224. package/examples/js/shaders/SMAAShader.js +6 -18
  225. package/examples/js/shaders/SSAOShader.js +2 -6
  226. package/examples/js/shaders/SSRShader.js +6 -18
  227. package/examples/js/shaders/SepiaShader.js +3 -6
  228. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  229. package/examples/js/shaders/TechnicolorShader.js +3 -6
  230. package/examples/js/shaders/ToneMapShader.js +3 -6
  231. package/examples/js/shaders/ToonShader.js +8 -24
  232. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  233. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  234. package/examples/js/shaders/VelocityShader.js +126 -0
  235. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  236. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  237. package/examples/js/shaders/VignetteShader.js +3 -6
  238. package/examples/js/shaders/VolumeShader.js +2 -6
  239. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  240. package/examples/js/textures/FlakesTexture.js +0 -1
  241. package/examples/js/utils/BufferGeometryUtils.js +236 -170
  242. package/examples/js/utils/CameraUtils.js +5 -20
  243. package/examples/js/utils/GPUStatsPanel.js +3 -12
  244. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  245. package/examples/js/utils/GeometryUtils.js +13 -18
  246. package/examples/js/utils/LDrawUtils.js +8 -11
  247. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  248. package/examples/js/utils/SceneUtils.js +117 -6
  249. package/examples/js/utils/ShadowMapViewer.js +17 -14
  250. package/examples/js/utils/SkeletonUtils.js +13 -27
  251. package/examples/js/utils/UVsDebug.js +20 -12
  252. package/examples/js/utils/WorkerPool.js +1 -11
  253. package/examples/jsm/animation/CCDIKSolver.js +27 -3
  254. package/examples/jsm/animation/MMDPhysics.js +25 -0
  255. package/examples/jsm/capabilities/WebGPU.js +3 -1
  256. package/examples/jsm/controls/FirstPersonControls.js +20 -20
  257. package/examples/jsm/controls/FlyControls.js +16 -17
  258. package/examples/jsm/controls/OrbitControls.js +44 -4
  259. package/examples/jsm/controls/TrackballControls.js +14 -2
  260. package/examples/jsm/controls/TransformControls.js +1 -1
  261. package/examples/jsm/csm/CSM.js +1 -0
  262. package/examples/jsm/csm/CSMHelper.js +30 -0
  263. package/examples/jsm/exporters/GLTFExporter.js +0 -79
  264. package/examples/jsm/exporters/USDZExporter.js +93 -1
  265. package/examples/jsm/helpers/OctreeHelper.js +22 -8
  266. package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
  267. package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
  268. package/examples/jsm/helpers/ViewHelper.js +24 -0
  269. package/examples/jsm/interactive/HTMLMesh.js +5 -6
  270. package/examples/jsm/interactive/InteractiveGroup.js +4 -2
  271. package/examples/jsm/libs/flow.module.js +610 -160
  272. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  273. package/examples/jsm/lines/LineSegments2.js +4 -0
  274. package/examples/jsm/loaders/3DMLoader.js +1 -2
  275. package/examples/jsm/loaders/ColladaLoader.js +28 -0
  276. package/examples/jsm/loaders/FBXLoader.js +18 -2
  277. package/examples/jsm/loaders/GLTFLoader.js +269 -428
  278. package/examples/jsm/loaders/KTX2Loader.js +68 -29
  279. package/examples/jsm/loaders/LDrawLoader.js +14 -13
  280. package/examples/jsm/loaders/LottieLoader.js +4 -2
  281. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  282. package/examples/jsm/loaders/PCDLoader.js +1 -1
  283. package/examples/jsm/loaders/PLYLoader.js +68 -16
  284. package/examples/jsm/loaders/SVGLoader.js +227 -14
  285. package/examples/jsm/loaders/USDZLoader.js +351 -111
  286. package/examples/jsm/loaders/VRMLLoader.js +13 -1
  287. package/examples/jsm/math/ConvexHull.js +4 -4
  288. package/examples/jsm/math/Octree.js +1 -1
  289. package/examples/jsm/node-editor/NodeEditor.js +91 -12
  290. package/examples/jsm/node-editor/core/BaseNode.js +10 -3
  291. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +6 -9
  292. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +6 -9
  293. package/examples/jsm/node-editor/math/AngleEditor.js +3 -3
  294. package/examples/jsm/node-editor/math/InvertEditor.js +2 -2
  295. package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
  296. package/examples/jsm/node-editor/utils/PreviewEditor.js +4 -0
  297. package/examples/jsm/nodes/Nodes.js +30 -3
  298. package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
  299. package/examples/jsm/nodes/accessors/NormalNode.js +6 -6
  300. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  301. package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
  302. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  303. package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
  304. package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
  305. package/examples/jsm/nodes/core/AttributeNode.js +31 -8
  306. package/examples/jsm/nodes/core/Node.js +1 -1
  307. package/examples/jsm/nodes/core/NodeBuilder.js +55 -6
  308. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  309. package/examples/jsm/nodes/core/NodeVarying.js +7 -4
  310. package/examples/jsm/nodes/core/VaryingNode.js +6 -4
  311. package/examples/jsm/nodes/core/constants.js +13 -13
  312. package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
  313. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -12
  314. package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
  315. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  316. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  317. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
  318. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
  319. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
  320. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  321. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  322. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
  323. package/examples/jsm/nodes/materials/Materials.js +9 -7
  324. package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
  325. package/examples/jsm/nodes/materialx/{Disclaimer.md → DISCLAIMER.md} +1 -1
  326. package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
  327. package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_hsv.js +1 -1
  328. package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_noise.js +13 -3
  329. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  330. package/examples/jsm/nodes/math/MathNode.js +5 -5
  331. package/examples/jsm/nodes/math/OperatorNode.js +16 -3
  332. package/examples/jsm/nodes/shadernode/ShaderNode.js +35 -20
  333. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +87 -63
  334. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +29 -0
  335. package/examples/jsm/nodes/utils/ConvertNode.js +15 -14
  336. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  337. package/examples/jsm/nodes/utils/JoinNode.js +8 -2
  338. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  339. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  340. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  341. package/examples/jsm/nodes/utils/RemapNode.js +34 -0
  342. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  343. package/examples/jsm/nodes/utils/TimerNode.js +21 -1
  344. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  345. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  346. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  347. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  348. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  349. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  350. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  351. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  352. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  353. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  354. package/examples/jsm/postprocessing/OutlinePass.js +21 -1
  355. package/examples/jsm/postprocessing/Pass.js +2 -0
  356. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  357. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  358. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  359. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  360. package/examples/jsm/postprocessing/SavePass.js +17 -1
  361. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  362. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  363. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  364. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  365. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +56 -35
  366. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  367. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  368. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
  369. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
  370. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +41 -9
  371. package/examples/jsm/shaders/MMDToonShader.js +0 -2
  372. package/examples/jsm/shaders/VelocityShader.js +128 -0
  373. package/examples/jsm/utils/BufferGeometryUtils.js +174 -42
  374. package/examples/jsm/utils/SceneUtils.js +129 -4
  375. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  376. package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
  377. package/package.json +13 -13
  378. package/src/Three.js +1 -0
  379. package/src/animation/PropertyBinding.js +7 -0
  380. package/src/audio/AudioContext.js +5 -5
  381. package/src/cameras/CubeCamera.js +14 -14
  382. package/src/constants.js +1 -1
  383. package/src/core/InstancedBufferGeometry.js +1 -7
  384. package/src/core/InterleavedBufferAttribute.js +4 -4
  385. package/src/extras/Earcut.js +67 -67
  386. package/src/geometries/PolyhedronGeometry.js +1 -1
  387. package/src/geometries/ShapeGeometry.js +1 -1
  388. package/src/helpers/ArrowHelper.js +9 -0
  389. package/src/helpers/Box3Helper.js +7 -0
  390. package/src/helpers/BoxHelper.js +7 -1
  391. package/src/helpers/DirectionalLightHelper.js +5 -1
  392. package/src/helpers/GridHelper.js +7 -0
  393. package/src/helpers/HemisphereLightHelper.js +4 -1
  394. package/src/helpers/PlaneHelper.js +9 -0
  395. package/src/helpers/PointLightHelper.js +2 -1
  396. package/src/helpers/PolarGridHelper.js +7 -0
  397. package/src/helpers/SkeletonHelper.js +7 -0
  398. package/src/helpers/SpotLightHelper.js +4 -2
  399. package/src/lights/LightShadow.js +1 -2
  400. package/src/lights/PointLight.js +2 -2
  401. package/src/lights/SpotLight.js +2 -2
  402. package/src/loaders/FileLoader.js +4 -1
  403. package/src/loaders/ObjectLoader.js +5 -1
  404. package/src/materials/Material.js +1 -1
  405. package/src/materials/MeshPhysicalMaterial.js +1 -1
  406. package/src/math/Color.js +5 -5
  407. package/src/math/Matrix3.js +53 -18
  408. package/src/math/Ray.js +2 -5
  409. package/src/math/Sphere.js +36 -21
  410. package/src/objects/InstancedMesh.js +7 -0
  411. package/src/objects/LOD.js +25 -6
  412. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  413. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  414. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  415. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  416. package/src/renderers/WebGLRenderTarget.js +1 -1
  417. package/src/renderers/WebGLRenderer.js +36 -62
  418. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  419. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
  420. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
  421. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  422. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  423. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
  424. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  425. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
  426. package/src/renderers/shaders/ShaderChunk.js +3 -0
  427. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  428. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  429. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  430. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
  431. package/src/renderers/shaders/ShaderLib.js +20 -6
  432. package/src/renderers/shaders/UniformsLib.js +1 -1
  433. package/src/renderers/shaders/UniformsUtils.js +15 -0
  434. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  435. package/src/renderers/webgl/WebGLBackground.js +15 -7
  436. package/src/renderers/webgl/WebGLLights.js +0 -4
  437. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  438. package/src/renderers/webgl/WebGLShadowMap.js +3 -1
  439. package/src/renderers/webgl/WebGLState.js +78 -41
  440. package/src/renderers/webgl/WebGLTextures.js +94 -39
  441. package/src/renderers/webgl/WebGLUniforms.js +152 -24
  442. package/src/renderers/webgl/WebGLUtils.js +1 -1
  443. package/src/renderers/webxr/WebXRController.js +46 -13
  444. package/src/renderers/webxr/WebXRManager.js +71 -3
  445. package/src/scenes/Scene.js +8 -0
  446. package/src/textures/CompressedArrayTexture.js +18 -0
  447. package/src/textures/Texture.js +2 -1
  448. package/examples/js/libs/lottie_canvas.js +0 -12751
  449. package/examples/js/shaders/PixelShader.js +0 -51
  450. package/examples/jsm/shaders/PixelShader.js +0 -44
@@ -2,25 +2,35 @@
2
2
 
3
3
  class USDZExporter {
4
4
 
5
- async parse( scene ) {
5
+ async parse( scene, options = {
6
+ ar: {
7
+ anchoring: {
8
+ type: 'plane'
9
+ },
10
+ planeAnchoring: {
11
+ alignment: 'horizontal'
12
+ }
13
+ }
14
+ } ) {
6
15
 
7
16
  const files = {};
8
- const modelFileName = 'model.usda'; // model file should be first in USDZ archive so we init it here
17
+ const modelFileName = 'model.usda';
9
18
 
19
+ // model file should be first in USDZ archive so we init it here
10
20
  files[ modelFileName ] = null;
11
21
  let output = buildHeader();
22
+ output += buildSceneStart( options );
12
23
  const materials = {};
13
24
  const textures = {};
14
25
  scene.traverseVisible( object => {
15
26
 
16
27
  if ( object.isMesh ) {
17
28
 
18
- if ( object.material.isMeshStandardMaterial ) {
29
+ const geometry = object.geometry;
30
+ const material = object.material;
31
+ if ( material.isMeshStandardMaterial ) {
19
32
 
20
- const geometry = object.geometry;
21
- const material = object.material;
22
33
  const geometryFileName = 'geometries/Geometry_' + geometry.id + '.usd';
23
-
24
34
  if ( ! ( geometryFileName in files ) ) {
25
35
 
26
36
  const meshObject = buildMeshObject( geometry );
@@ -42,13 +52,17 @@
42
52
 
43
53
  }
44
54
 
55
+ } else if ( object.isCamera ) {
56
+
57
+ output += buildCamera( object );
58
+
45
59
  }
46
60
 
47
61
  } );
62
+ output += buildSceneEnd();
48
63
  output += buildMaterials( materials, textures );
49
64
  files[ modelFileName ] = fflate.strToU8( output );
50
65
  output = null;
51
-
52
66
  for ( const id in textures ) {
53
67
 
54
68
  const texture = textures[ id ];
@@ -58,19 +72,18 @@
58
72
  const blob = await new Promise( resolve => canvas.toBlob( resolve, isRGBA ? 'image/png' : 'image/jpeg', 1 ) );
59
73
  files[ `textures/Texture_${id}.${isRGBA ? 'png' : 'jpg'}` ] = new Uint8Array( await blob.arrayBuffer() );
60
74
 
61
- } // 64 byte alignment
62
- // https://github.com/101arrowz/fflate/issues/39#issuecomment-777263109
75
+ }
63
76
 
77
+ // 64 byte alignment
78
+ // https://github.com/101arrowz/fflate/issues/39#issuecomment-777263109
64
79
 
65
80
  let offset = 0;
66
-
67
81
  for ( const filename in files ) {
68
82
 
69
83
  const file = files[ filename ];
70
84
  const headerSize = 34 + filename.length;
71
85
  offset += headerSize;
72
86
  const offsetMod64 = offset & 63;
73
-
74
87
  if ( offsetMod64 !== 4 ) {
75
88
 
76
89
  const padLength = 64 - offsetMod64;
@@ -94,7 +107,6 @@
94
107
  }
95
108
 
96
109
  }
97
-
98
110
  function imageToCanvas( image, color ) {
99
111
 
100
112
  if ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement || typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas || typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) {
@@ -105,7 +117,6 @@
105
117
  canvas.height = image.height * Math.min( 1, scale );
106
118
  const context = canvas.getContext( '2d' );
107
119
  context.drawImage( image, 0, 0, canvas.width, canvas.height );
108
-
109
120
  if ( color !== undefined ) {
110
121
 
111
122
  const hex = parseInt( color, 16 );
@@ -114,7 +125,6 @@
114
125
  const b = ( hex & 255 ) / 255;
115
126
  const imagedata = context.getImageData( 0, 0, canvas.width, canvas.height );
116
127
  const data = imagedata.data;
117
-
118
128
  for ( let i = 0; i < data.length; i += 4 ) {
119
129
 
120
130
  data[ i + 0 ] = data[ i + 0 ] * r;
@@ -131,11 +141,11 @@
131
141
 
132
142
  }
133
143
 
134
- } //
144
+ }
135
145
 
146
+ //
136
147
 
137
148
  const PRECISION = 7;
138
-
139
149
  function buildHeader() {
140
150
 
141
151
  return `#usda 1.0
@@ -147,6 +157,40 @@
147
157
  upAxis = "Y"
148
158
  )
149
159
 
160
+ `;
161
+
162
+ }
163
+
164
+ function buildSceneStart( options ) {
165
+
166
+ return `def Xform "Root"
167
+ {
168
+ def Scope "Scenes" (
169
+ kind = "sceneLibrary"
170
+ )
171
+ {
172
+ def Xform "Scene" (
173
+ customData = {
174
+ bool preliminary_collidesWithEnvironment = 0
175
+ string sceneName = "Scene"
176
+ }
177
+ sceneName = "Scene"
178
+ )
179
+ {
180
+ token preliminary:anchoring:type = "${options.ar.anchoring.type}"
181
+ token preliminary:planeAnchoring:alignment = "${options.ar.planeAnchoring.alignment}"
182
+
183
+ `;
184
+
185
+ }
186
+
187
+ function buildSceneEnd() {
188
+
189
+ return `
190
+ }
191
+ }
192
+ }
193
+
150
194
  `;
151
195
 
152
196
  }
@@ -157,14 +201,14 @@
157
201
  output += dataToInsert;
158
202
  return fflate.strToU8( output );
159
203
 
160
- } // Xform
204
+ }
161
205
 
206
+ // Xform
162
207
 
163
208
  function buildXform( object, geometry, material ) {
164
209
 
165
210
  const name = 'Object_' + object.id;
166
211
  const transform = buildMatrix( object.matrixWorld );
167
-
168
212
  if ( object.matrixWorld.determinant() < 0 ) {
169
213
 
170
214
  console.warn( 'THREE.USDZExporter: USDZ does not support negative scales', object );
@@ -196,8 +240,9 @@
196
240
 
197
241
  return `(${array[ offset + 0 ]}, ${array[ offset + 1 ]}, ${array[ offset + 2 ]}, ${array[ offset + 3 ]})`;
198
242
 
199
- } // Mesh
243
+ }
200
244
 
245
+ // Mesh
201
246
 
202
247
  function buildMeshObject( geometry ) {
203
248
 
@@ -245,7 +290,6 @@ def "Geometry"
245
290
 
246
291
  const index = geometry.index;
247
292
  const array = [];
248
-
249
293
  if ( index !== null ) {
250
294
 
251
295
  for ( let i = 0; i < index.count; i ++ ) {
@@ -257,7 +301,6 @@ def "Geometry"
257
301
  } else {
258
302
 
259
303
  const length = geometry.attributes.position.count;
260
-
261
304
  for ( let i = 0; i < length; i ++ ) {
262
305
 
263
306
  array.push( i );
@@ -280,7 +323,6 @@ def "Geometry"
280
323
  }
281
324
 
282
325
  const array = [];
283
-
284
326
  for ( let i = 0; i < attribute.count; i ++ ) {
285
327
 
286
328
  const x = attribute.getX( i );
@@ -304,7 +346,6 @@ def "Geometry"
304
346
  }
305
347
 
306
348
  const array = [];
307
-
308
349
  for ( let i = 0; i < attribute.count; i ++ ) {
309
350
 
310
351
  const x = attribute.getX( i );
@@ -315,13 +356,13 @@ def "Geometry"
315
356
 
316
357
  return array.join( ', ' );
317
358
 
318
- } // Materials
359
+ }
319
360
 
361
+ // Materials
320
362
 
321
363
  function buildMaterials( materials, textures ) {
322
364
 
323
365
  const array = [];
324
-
325
366
  for ( const uuid in materials ) {
326
367
 
327
368
  const material = materials[ uuid ];
@@ -341,10 +382,10 @@ ${array.join( '' )}
341
382
  function buildMaterial( material, textures ) {
342
383
 
343
384
  // https://graphics.pixar.com/usd/docs/UsdPreviewSurface-Proposal.html
385
+
344
386
  const pad = ' ';
345
387
  const inputs = [];
346
388
  const samplers = [];
347
-
348
389
  function buildTexture( texture, mapType, color ) {
349
390
 
350
391
  const id = texture.id + ( color ? '_' + color.getHexString() : '' );
@@ -389,7 +430,6 @@ ${array.join( '' )}
389
430
  if ( material.map !== null ) {
390
431
 
391
432
  inputs.push( `${pad}color3f inputs:diffuseColor.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:rgb>` );
392
-
393
433
  if ( material.transparent ) {
394
434
 
395
435
  inputs.push( `${pad}float inputs:opacity.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:a>` );
@@ -517,6 +557,52 @@ ${samplers.join( '\n' )}
517
557
 
518
558
  }
519
559
 
560
+ function buildCamera( camera ) {
561
+
562
+ const name = camera.name ? camera.name : 'Camera_' + camera.id;
563
+ const transform = buildMatrix( camera.matrixWorld );
564
+ if ( camera.matrixWorld.determinant() < 0 ) {
565
+
566
+ console.warn( 'THREE.USDZExporter: USDZ does not support negative scales', camera );
567
+
568
+ }
569
+
570
+ if ( camera.isOrthographicCamera ) {
571
+
572
+ return `def Camera "${name}"
573
+ {
574
+ matrix4d xformOp:transform = ${transform}
575
+ uniform token[] xformOpOrder = ["xformOp:transform"]
576
+
577
+ float2 clippingRange = (${camera.near.toPrecision( PRECISION )}, ${camera.far.toPrecision( PRECISION )})
578
+ float horizontalAperture = ${( ( Math.abs( camera.left ) + Math.abs( camera.right ) ) * 10 ).toPrecision( PRECISION )}
579
+ float verticalAperture = ${( ( Math.abs( camera.top ) + Math.abs( camera.bottom ) ) * 10 ).toPrecision( PRECISION )}
580
+ token projection = "orthographic"
581
+ }
582
+
583
+ `;
584
+
585
+ } else {
586
+
587
+ return `def Camera "${name}"
588
+ {
589
+ matrix4d xformOp:transform = ${transform}
590
+ uniform token[] xformOpOrder = ["xformOp:transform"]
591
+
592
+ float2 clippingRange = (${camera.near.toPrecision( PRECISION )}, ${camera.far.toPrecision( PRECISION )})
593
+ float focalLength = ${camera.getFocalLength().toPrecision( PRECISION )}
594
+ float focusDistance = ${camera.focus.toPrecision( PRECISION )}
595
+ float horizontalAperture = ${camera.getFilmWidth().toPrecision( PRECISION )}
596
+ token projection = "perspective"
597
+ float verticalAperture = ${camera.getFilmHeight().toPrecision( PRECISION )}
598
+ }
599
+
600
+ `;
601
+
602
+ }
603
+
604
+ }
605
+
520
606
  THREE.USDZExporter = USDZExporter;
521
607
 
522
608
  } )();
@@ -18,7 +18,6 @@
18
18
  let x = - widthHalf;
19
19
  let y = - heightHalf;
20
20
  let z = - depthHalf;
21
-
22
21
  for ( let i = 0; i <= widthSegments; i ++ ) {
23
22
 
24
23
  vertices.push( x, - heightHalf, - depthHalf, x, heightHalf, - depthHalf );
@@ -4,25 +4,29 @@
4
4
 
5
5
  constructor( points = [] ) {
6
6
 
7
- super(); // buffers
7
+ super();
8
+
9
+ // buffers
8
10
 
9
11
  const vertices = [];
10
12
  const normals = [];
11
-
12
13
  if ( THREE.ConvexHull === undefined ) {
13
14
 
14
15
  console.error( 'THREE.ConvexGeometry: ConvexGeometry relies on THREE.ConvexHull' );
15
16
 
16
17
  }
17
18
 
18
- const convexHull = new THREE.ConvexHull().setFromPoints( points ); // generate vertices and normals
19
+ const convexHull = new THREE.ConvexHull().setFromPoints( points );
19
20
 
20
- const faces = convexHull.faces;
21
+ // generate vertices and normals
21
22
 
23
+ const faces = convexHull.faces;
22
24
  for ( let i = 0; i < faces.length; i ++ ) {
23
25
 
24
26
  const face = faces[ i ];
25
- let edge = face.edge; // we move along a doubly-connected edge list to access all face points (see HalfEdge docs)
27
+ let edge = face.edge;
28
+
29
+ // we move along a doubly-connected edge list to access all face points (see HalfEdge docs)
26
30
 
27
31
  do {
28
32
 
@@ -33,8 +37,9 @@
33
37
 
34
38
  } while ( edge !== face.edge );
35
39
 
36
- } // build geometry
40
+ }
37
41
 
42
+ // build geometry
38
43
 
39
44
  this.setAttribute( 'position', new THREE.Float32BufferAttribute( vertices, 3 ) );
40
45
  this.setAttribute( 'normal', new THREE.Float32BufferAttribute( normals, 3 ) );
@@ -19,35 +19,48 @@
19
19
 
20
20
  constructor( mesh, position, orientation, size ) {
21
21
 
22
- super(); // buffers
22
+ super();
23
+
24
+ // buffers
23
25
 
24
26
  const vertices = [];
25
27
  const normals = [];
26
- const uvs = []; // helpers
28
+ const uvs = [];
29
+
30
+ // helpers
27
31
 
28
- const plane = new THREE.Vector3(); // this matrix represents the transformation of the decal projector
32
+ const plane = new THREE.Vector3();
33
+
34
+ // this matrix represents the transformation of the decal projector
29
35
 
30
36
  const projectorMatrix = new THREE.Matrix4();
31
37
  projectorMatrix.makeRotationFromEuler( orientation );
32
38
  projectorMatrix.setPosition( position );
33
39
  const projectorMatrixInverse = new THREE.Matrix4();
34
- projectorMatrixInverse.copy( projectorMatrix ).invert(); // generate buffers
40
+ projectorMatrixInverse.copy( projectorMatrix ).invert();
41
+
42
+ // generate buffers
35
43
 
36
- generate(); // build geometry
44
+ generate();
45
+
46
+ // build geometry
37
47
 
38
48
  this.setAttribute( 'position', new THREE.Float32BufferAttribute( vertices, 3 ) );
39
49
  this.setAttribute( 'normal', new THREE.Float32BufferAttribute( normals, 3 ) );
40
50
  this.setAttribute( 'uv', new THREE.Float32BufferAttribute( uvs, 2 ) );
41
-
42
51
  function generate() {
43
52
 
44
53
  let decalVertices = [];
45
54
  const vertex = new THREE.Vector3();
46
- const normal = new THREE.Vector3(); // handle different geometry types
55
+ const normal = new THREE.Vector3();
56
+
57
+ // handle different geometry types
47
58
 
48
59
  const geometry = mesh.geometry;
49
60
  const positionAttribute = geometry.attributes.position;
50
- const normalAttribute = geometry.attributes.normal; // first, create an array of 'DecalVertex' objects
61
+ const normalAttribute = geometry.attributes.normal;
62
+
63
+ // first, create an array of 'DecalVertex' objects
51
64
  // three consecutive 'DecalVertex' objects represent a single face
52
65
  //
53
66
  // this data structure will be later used to perform the clipping
@@ -55,8 +68,8 @@
55
68
  if ( geometry.index !== null ) {
56
69
 
57
70
  // indexed THREE.BufferGeometry
58
- const index = geometry.index;
59
71
 
72
+ const index = geometry.index;
60
73
  for ( let i = 0; i < index.count; i ++ ) {
61
74
 
62
75
  vertex.fromBufferAttribute( positionAttribute, index.getX( i ) );
@@ -68,6 +81,7 @@
68
81
  } else {
69
82
 
70
83
  // non-indexed THREE.BufferGeometry
84
+
71
85
  for ( let i = 0; i < positionAttribute.count; i ++ ) {
72
86
 
73
87
  vertex.fromBufferAttribute( positionAttribute, i );
@@ -76,23 +90,32 @@
76
90
 
77
91
  }
78
92
 
79
- } // second, clip the geometry so that it doesn't extend out from the projector
93
+ }
80
94
 
95
+ // second, clip the geometry so that it doesn't extend out from the projector
81
96
 
82
97
  decalVertices = clipGeometry( decalVertices, plane.set( 1, 0, 0 ) );
83
98
  decalVertices = clipGeometry( decalVertices, plane.set( - 1, 0, 0 ) );
84
99
  decalVertices = clipGeometry( decalVertices, plane.set( 0, 1, 0 ) );
85
100
  decalVertices = clipGeometry( decalVertices, plane.set( 0, - 1, 0 ) );
86
101
  decalVertices = clipGeometry( decalVertices, plane.set( 0, 0, 1 ) );
87
- decalVertices = clipGeometry( decalVertices, plane.set( 0, 0, - 1 ) ); // third, generate final vertices, normals and uvs
102
+ decalVertices = clipGeometry( decalVertices, plane.set( 0, 0, - 1 ) );
103
+
104
+ // third, generate final vertices, normals and uvs
88
105
 
89
106
  for ( let i = 0; i < decalVertices.length; i ++ ) {
90
107
 
91
- const decalVertex = decalVertices[ i ]; // create texture coordinates (we are still in projector space)
108
+ const decalVertex = decalVertices[ i ];
109
+
110
+ // create texture coordinates (we are still in projector space)
92
111
 
93
- uvs.push( 0.5 + decalVertex.position.x / size.x, 0.5 + decalVertex.position.y / size.y ); // transform the vertex back to world space
112
+ uvs.push( 0.5 + decalVertex.position.x / size.x, 0.5 + decalVertex.position.y / size.y );
94
113
 
95
- decalVertex.position.applyMatrix4( projectorMatrix ); // now create vertex and normal buffer data
114
+ // transform the vertex back to world space
115
+
116
+ decalVertex.position.applyMatrix4( projectorMatrix );
117
+
118
+ // now create vertex and normal buffer data
96
119
 
97
120
  vertices.push( decalVertex.position.x, decalVertex.position.y, decalVertex.position.z );
98
121
  normals.push( decalVertex.normal.x, decalVertex.normal.y, decalVertex.normal.z );
@@ -104,6 +127,7 @@
104
127
  function pushDecalVertex( decalVertices, vertex, normal ) {
105
128
 
106
129
  // transform the vertex to world space, then to projector space
130
+
107
131
  vertex.applyMatrix4( mesh.matrixWorld );
108
132
  vertex.applyMatrix4( projectorMatrixInverse );
109
133
  normal.transformDirection( mesh.matrixWorld );
@@ -114,7 +138,9 @@
114
138
  function clipGeometry( inVertices, plane ) {
115
139
 
116
140
  const outVertices = [];
117
- const s = 0.5 * Math.abs( size.dot( plane ) ); // a single iteration clips one face,
141
+ const s = 0.5 * Math.abs( size.dot( plane ) );
142
+
143
+ // a single iteration clips one face,
118
144
  // which consists of three consecutive 'DecalVertex' objects
119
145
 
120
146
  for ( let i = 0; i < inVertices.length; i += 3 ) {
@@ -129,16 +155,18 @@
129
155
  const d3 = inVertices[ i + 2 ].position.dot( plane ) - s;
130
156
  const v1Out = d1 > 0;
131
157
  const v2Out = d2 > 0;
132
- const v3Out = d3 > 0; // calculate, how many vertices of the face lie outside of the clipping plane
158
+ const v3Out = d3 > 0;
133
159
 
134
- total = ( v1Out ? 1 : 0 ) + ( v2Out ? 1 : 0 ) + ( v3Out ? 1 : 0 );
160
+ // calculate, how many vertices of the face lie outside of the clipping plane
135
161
 
162
+ total = ( v1Out ? 1 : 0 ) + ( v2Out ? 1 : 0 ) + ( v3Out ? 1 : 0 );
136
163
  switch ( total ) {
137
164
 
138
165
  case 0:
139
166
  {
140
167
 
141
168
  // the entire face lies inside of the plane, no clipping needed
169
+
142
170
  outVertices.push( inVertices[ i ] );
143
171
  outVertices.push( inVertices[ i + 1 ] );
144
172
  outVertices.push( inVertices[ i + 2 ] );
@@ -150,6 +178,7 @@
150
178
  {
151
179
 
152
180
  // one vertex lies outside of the plane, perform clipping
181
+
153
182
  if ( v1Out ) {
154
183
 
155
184
  nV1 = inVertices[ i + 1 ];
@@ -198,6 +227,7 @@
198
227
  {
199
228
 
200
229
  // two vertices lies outside of the plane, perform clipping
230
+
201
231
  if ( ! v1Out ) {
202
232
 
203
233
  nV1 = inVertices[ i ].clone();
@@ -239,6 +269,7 @@
239
269
  {
240
270
 
241
271
  // the entire face lies outside of the plane, so let's discard the corresponding vertices
272
+
242
273
  break;
243
274
 
244
275
  }
@@ -256,7 +287,9 @@
256
287
  const d0 = v0.position.dot( p ) - s;
257
288
  const d1 = v1.position.dot( p ) - s;
258
289
  const s0 = d0 / ( d0 - d1 );
259
- const v = new DecalVertex( new THREE.Vector3( v0.position.x + s0 * ( v1.position.x - v0.position.x ), v0.position.y + s0 * ( v1.position.y - v0.position.y ), v0.position.z + s0 * ( v1.position.z - v0.position.z ) ), new THREE.Vector3( v0.normal.x + s0 * ( v1.normal.x - v0.normal.x ), v0.normal.y + s0 * ( v1.normal.y - v0.normal.y ), v0.normal.z + s0 * ( v1.normal.z - v0.normal.z ) ) ); // need to clip more values (texture coordinates)? do it this way:
290
+ const v = new DecalVertex( new THREE.Vector3( v0.position.x + s0 * ( v1.position.x - v0.position.x ), v0.position.y + s0 * ( v1.position.y - v0.position.y ), v0.position.z + s0 * ( v1.position.z - v0.position.z ) ), new THREE.Vector3( v0.normal.x + s0 * ( v1.normal.x - v0.normal.x ), v0.normal.y + s0 * ( v1.normal.y - v0.normal.y ), v0.normal.z + s0 * ( v1.normal.z - v0.normal.z ) ) );
291
+
292
+ // need to clip more values (texture coordinates)? do it this way:
260
293
  // intersectpoint.value = a.value + s * ( b.value - a.value );
261
294
 
262
295
  return v;
@@ -265,8 +298,9 @@
265
298
 
266
299
  }
267
300
 
268
- } // helper
301
+ }
269
302
 
303
+ // helper
270
304
 
271
305
  class DecalVertex {
272
306
 
@@ -276,7 +310,6 @@
276
310
  this.normal = normal;
277
311
 
278
312
  }
279
-
280
313
  clone() {
281
314
 
282
315
  return new this.constructor( this.position.clone(), this.normal.clone() );