@plastic-software/three 0.174.0 → 0.175.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 (567) hide show
  1. package/build/three.cjs +10744 -1476
  2. package/build/three.core.js +9633 -1096
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +918 -189
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +93 -39
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +171 -48
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +71 -29
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +41 -3
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +42 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +218 -5
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +86 -18
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +38 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +81 -61
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +70 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +131 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +266 -133
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1432 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +58 -1
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
  512. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
  513. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
  514. package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
  515. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
  516. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
  517. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
  518. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
  519. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
  520. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
  521. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
  522. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
  523. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
  524. package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
  525. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
  526. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
  527. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
  528. package/src/renderers/shaders/ShaderChunk.js +2 -0
  529. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
  530. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
  531. package/src/renderers/shaders/UniformsLib.js +6 -5
  532. package/src/renderers/shaders/UniformsUtils.js +1 -3
  533. package/src/renderers/webgl/WebGLBackground.js +4 -2
  534. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  535. package/src/renderers/webgl/WebGLProgram.js +25 -5
  536. package/src/renderers/webgl/WebGLPrograms.js +21 -7
  537. package/src/renderers/webgl/WebGLState.js +9 -9
  538. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  539. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  540. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  541. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  542. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  543. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  544. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  545. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  546. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  547. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  548. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  549. package/src/renderers/webxr/WebXRController.js +87 -2
  550. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  551. package/src/renderers/webxr/WebXRManager.js +173 -1
  552. package/src/scenes/Scene.js +2 -1
  553. package/src/textures/CanvasTexture.js +28 -0
  554. package/src/textures/CompressedArrayTexture.js +57 -0
  555. package/src/textures/CompressedCubeTexture.js +29 -0
  556. package/src/textures/CompressedTexture.js +64 -6
  557. package/src/textures/CubeTexture.js +52 -4
  558. package/src/textures/Data3DTexture.js +77 -0
  559. package/src/textures/DataArrayTexture.js +93 -0
  560. package/src/textures/DataTexture.js +65 -0
  561. package/src/textures/DepthTexture.js +59 -9
  562. package/src/textures/FramebufferTexture.js +62 -0
  563. package/src/textures/Source.js +69 -0
  564. package/src/textures/Texture.js +5 -5
  565. package/src/textures/VideoFrameTexture.js +43 -6
  566. package/src/textures/VideoTexture.js +49 -4
  567. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -3,39 +3,181 @@ import { Material } from './Material.js';
3
3
  import { Vector2 } from '../math/Vector2.js';
4
4
  import { Color } from '../math/Color.js';
5
5
 
6
+ /**
7
+ * This material is defined by a MatCap (or Lit Sphere) texture, which encodes the
8
+ * material color and shading.
9
+ *
10
+ * `MeshMatcapMaterial` does not respond to lights since the matcap image file encodes
11
+ * baked lighting. It will cast a shadow onto an object that receives shadows
12
+ * (and shadow clipping works), but it will not self-shadow or receive
13
+ * shadows.
14
+ *
15
+ * @augments Material
16
+ */
6
17
  class MeshMatcapMaterial extends Material {
7
18
 
19
+ /**
20
+ * Constructs a new mesh matcap material.
21
+ *
22
+ * @param {Object} [parameters] - An object with one or more properties
23
+ * defining the material's appearance. Any property of the material
24
+ * (including any property from inherited materials) can be passed
25
+ * in here. Color values can be passed any type of value accepted
26
+ * by {@link Color#set}.
27
+ */
8
28
  constructor( parameters ) {
9
29
 
10
30
  super();
11
31
 
32
+ /**
33
+ * This flag can be used for type testing.
34
+ *
35
+ * @type {boolean}
36
+ * @readonly
37
+ * @default true
38
+ */
12
39
  this.isMeshMatcapMaterial = true;
13
40
 
14
41
  this.defines = { 'MATCAP': '' };
15
42
 
16
43
  this.type = 'MeshMatcapMaterial';
17
44
 
45
+ /**
46
+ * Color of the material.
47
+ *
48
+ * @type {Color}
49
+ * @default (1,1,1)
50
+ */
18
51
  this.color = new Color( 0xffffff ); // diffuse
19
52
 
53
+ /**
54
+ * The matcap map.
55
+ *
56
+ * @type {?Texture}
57
+ * @default null
58
+ */
20
59
  this.matcap = null;
21
60
 
61
+ /**
62
+ * The color map. May optionally include an alpha channel, typically combined
63
+ * with {@link Material#transparent} or {@link Material#alphaTest}. The texture map
64
+ * color is modulated by the diffuse `color`.
65
+ *
66
+ * @type {?Texture}
67
+ * @default null
68
+ */
22
69
  this.map = null;
23
70
 
71
+ /**
72
+ * The texture to create a bump map. The black and white values map to the
73
+ * perceived depth in relation to the lights. Bump doesn't actually affect
74
+ * the geometry of the object, only the lighting. If a normal map is defined
75
+ * this will be ignored.
76
+ *
77
+ * @type {?Texture}
78
+ * @default null
79
+ */
24
80
  this.bumpMap = null;
81
+
82
+ /**
83
+ * How much the bump map affects the material. Typical range is `[0,1]`.
84
+ *
85
+ * @type {number}
86
+ * @default 1
87
+ */
25
88
  this.bumpScale = 1;
26
89
 
90
+ /**
91
+ * The texture to create a normal map. The RGB values affect the surface
92
+ * normal for each pixel fragment and change the way the color is lit. Normal
93
+ * maps do not change the actual shape of the surface, only the lighting. In
94
+ * case the material has a normal map authored using the left handed
95
+ * convention, the `y` component of `normalScale` should be negated to compensate
96
+ * for the different handedness.
97
+ *
98
+ * @type {?Texture}
99
+ * @default null
100
+ */
27
101
  this.normalMap = null;
102
+
103
+ /**
104
+ * The type of normal map.
105
+ *
106
+ * @type {(TangentSpaceNormalMap|ObjectSpaceNormalMap)}
107
+ * @default TangentSpaceNormalMap
108
+ */
28
109
  this.normalMapType = TangentSpaceNormalMap;
110
+
111
+ /**
112
+ * How much the normal map affects the material. Typical value range is `[0,1]`.
113
+ *
114
+ * @type {Vector2}
115
+ * @default (1,1)
116
+ */
29
117
  this.normalScale = new Vector2( 1, 1 );
30
118
 
119
+ /**
120
+ * The displacement map affects the position of the mesh's vertices. Unlike
121
+ * other maps which only affect the light and shade of the material the
122
+ * displaced vertices can cast shadows, block other objects, and otherwise
123
+ * act as real geometry. The displacement texture is an image where the value
124
+ * of each pixel (white being the highest) is mapped against, and
125
+ * repositions, the vertices of the mesh.
126
+ *
127
+ * @type {?Texture}
128
+ * @default null
129
+ */
31
130
  this.displacementMap = null;
131
+
132
+ /**
133
+ * How much the displacement map affects the mesh (where black is no
134
+ * displacement, and white is maximum displacement). Without a displacement
135
+ * map set, this value is not applied.
136
+ *
137
+ * @type {number}
138
+ * @default 0
139
+ */
32
140
  this.displacementScale = 1;
141
+
142
+ /**
143
+ * The offset of the displacement map's values on the mesh's vertices.
144
+ * The bias is added to the scaled sample of the displacement map.
145
+ * Without a displacement map set, this value is not applied.
146
+ *
147
+ * @type {number}
148
+ * @default 0
149
+ */
33
150
  this.displacementBias = 0;
34
151
 
152
+ /**
153
+ * The alpha map is a grayscale texture that controls the opacity across the
154
+ * surface (black: fully transparent; white: fully opaque).
155
+ *
156
+ * Only the color of the texture is used, ignoring the alpha channel if one
157
+ * exists. For RGB and RGBA textures, the renderer will use the green channel
158
+ * when sampling this texture due to the extra bit of precision provided for
159
+ * green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
160
+ * luminance/alpha textures will also still work as expected.
161
+ *
162
+ * @type {?Texture}
163
+ * @default null
164
+ */
35
165
  this.alphaMap = null;
36
166
 
167
+ /**
168
+ * Whether the material is rendered with flat shading or not.
169
+ *
170
+ * @type {boolean}
171
+ * @default false
172
+ */
37
173
  this.flatShading = false;
38
174
 
175
+ /**
176
+ * Whether the material is affected by fog or not.
177
+ *
178
+ * @type {boolean}
179
+ * @default true
180
+ */
39
181
  this.fog = true;
40
182
 
41
183
  this.setValues( parameters );
@@ -2,30 +2,143 @@ import { TangentSpaceNormalMap } from '../constants.js';
2
2
  import { Material } from './Material.js';
3
3
  import { Vector2 } from '../math/Vector2.js';
4
4
 
5
+ /**
6
+ * A material that maps the normal vectors to RGB colors.
7
+ *
8
+ * @augments Material
9
+ */
5
10
  class MeshNormalMaterial extends Material {
6
11
 
12
+ /**
13
+ * Constructs a new mesh normal material.
14
+ *
15
+ * @param {Object} [parameters] - An object with one or more properties
16
+ * defining the material's appearance. Any property of the material
17
+ * (including any property from inherited materials) can be passed
18
+ * in here. Color values can be passed any type of value accepted
19
+ * by {@link Color#set}.
20
+ */
7
21
  constructor( parameters ) {
8
22
 
9
23
  super();
10
24
 
25
+ /**
26
+ * This flag can be used for type testing.
27
+ *
28
+ * @type {boolean}
29
+ * @readonly
30
+ * @default true
31
+ */
11
32
  this.isMeshNormalMaterial = true;
12
33
 
13
34
  this.type = 'MeshNormalMaterial';
14
35
 
36
+ /**
37
+ * The texture to create a bump map. The black and white values map to the
38
+ * perceived depth in relation to the lights. Bump doesn't actually affect
39
+ * the geometry of the object, only the lighting. If a normal map is defined
40
+ * this will be ignored.
41
+ *
42
+ * @type {?Texture}
43
+ * @default null
44
+ */
15
45
  this.bumpMap = null;
46
+
47
+ /**
48
+ * How much the bump map affects the material. Typical range is `[0,1]`.
49
+ *
50
+ * @type {number}
51
+ * @default 1
52
+ */
16
53
  this.bumpScale = 1;
17
54
 
55
+ /**
56
+ * The texture to create a normal map. The RGB values affect the surface
57
+ * normal for each pixel fragment and change the way the color is lit. Normal
58
+ * maps do not change the actual shape of the surface, only the lighting. In
59
+ * case the material has a normal map authored using the left handed
60
+ * convention, the `y` component of `normalScale` should be negated to compensate
61
+ * for the different handedness.
62
+ *
63
+ * @type {?Texture}
64
+ * @default null
65
+ */
18
66
  this.normalMap = null;
67
+
68
+ /**
69
+ * The type of normal map.
70
+ *
71
+ * @type {(TangentSpaceNormalMap|ObjectSpaceNormalMap)}
72
+ * @default TangentSpaceNormalMap
73
+ */
19
74
  this.normalMapType = TangentSpaceNormalMap;
75
+
76
+ /**
77
+ * How much the normal map affects the material. Typical value range is `[0,1]`.
78
+ *
79
+ * @type {Vector2}
80
+ * @default (1,1)
81
+ */
20
82
  this.normalScale = new Vector2( 1, 1 );
21
83
 
84
+ /**
85
+ * The displacement map affects the position of the mesh's vertices. Unlike
86
+ * other maps which only affect the light and shade of the material the
87
+ * displaced vertices can cast shadows, block other objects, and otherwise
88
+ * act as real geometry. The displacement texture is an image where the value
89
+ * of each pixel (white being the highest) is mapped against, and
90
+ * repositions, the vertices of the mesh.
91
+ *
92
+ * @type {?Texture}
93
+ * @default null
94
+ */
22
95
  this.displacementMap = null;
96
+
97
+ /**
98
+ * How much the displacement map affects the mesh (where black is no
99
+ * displacement, and white is maximum displacement). Without a displacement
100
+ * map set, this value is not applied.
101
+ *
102
+ * @type {number}
103
+ * @default 0
104
+ */
23
105
  this.displacementScale = 1;
106
+
107
+ /**
108
+ * The offset of the displacement map's values on the mesh's vertices.
109
+ * The bias is added to the scaled sample of the displacement map.
110
+ * Without a displacement map set, this value is not applied.
111
+ *
112
+ * @type {number}
113
+ * @default 0
114
+ */
24
115
  this.displacementBias = 0;
25
116
 
117
+ /**
118
+ * Renders the geometry as a wireframe.
119
+ *
120
+ * @type {boolean}
121
+ * @default false
122
+ */
26
123
  this.wireframe = false;
124
+
125
+ /**
126
+ * Controls the thickness of the wireframe.
127
+ *
128
+ * WebGL and WebGPU ignore this property and always render
129
+ * 1 pixel wide lines.
130
+ *
131
+ * @type {number}
132
+ * @default 1
133
+ */
27
134
  this.wireframeLinewidth = 1;
28
135
 
136
+ /**
137
+ * Whether the material is rendered with flat shading or not.
138
+ *
139
+ * @type {boolean}
140
+ * @default false
141
+ */
29
142
  this.flatShading = false;
30
143
 
31
144
  this.setValues( parameters );
@@ -3,61 +3,349 @@ import { Material } from './Material.js';
3
3
  import { Vector2 } from '../math/Vector2.js';
4
4
  import { Color } from '../math/Color.js';
5
5
  import { Euler } from '../math/Euler.js';
6
+
7
+ /**
8
+ * A material for shiny surfaces with specular highlights.
9
+ *
10
+ * The material uses a non-physically based [Blinn-Phong]{@link https://en.wikipedia.org/wiki/Blinn-Phong_shading_model}
11
+ * model for calculating reflectance. Unlike the Lambertian model used in the
12
+ * {@link MeshLambertMaterial} this can simulate shiny surfaces with specular
13
+ * highlights (such as varnished wood). `MeshPhongMaterial` uses per-fragment shading.
14
+ *
15
+ * Performance will generally be greater when using this material over the
16
+ * {@link MeshStandardMaterial} or {@link MeshPhysicalMaterial}, at the cost of
17
+ * some graphical accuracy.
18
+ *
19
+ * @augments Material
20
+ */
6
21
  class MeshPhongMaterial extends Material {
7
22
 
23
+ /**
24
+ * Constructs a new mesh phong material.
25
+ *
26
+ * @param {Object} [parameters] - An object with one or more properties
27
+ * defining the material's appearance. Any property of the material
28
+ * (including any property from inherited materials) can be passed
29
+ * in here. Color values can be passed any type of value accepted
30
+ * by {@link Color#set}.
31
+ */
8
32
  constructor( parameters ) {
9
33
 
10
34
  super();
11
35
 
36
+ /**
37
+ * This flag can be used for type testing.
38
+ *
39
+ * @type {boolean}
40
+ * @readonly
41
+ * @default true
42
+ */
12
43
  this.isMeshPhongMaterial = true;
13
44
 
14
45
  this.type = 'MeshPhongMaterial';
15
46
 
47
+ /**
48
+ * Color of the material.
49
+ *
50
+ * @type {Color}
51
+ * @default (1,1,1)
52
+ */
16
53
  this.color = new Color( 0xffffff ); // diffuse
54
+
55
+ /**
56
+ * Specular color of the material. The default color is set to `0x111111` (very dark grey)
57
+ *
58
+ * This defines how shiny the material is and the color of its shine.
59
+ *
60
+ * @type {Color}
61
+ */
17
62
  this.specular = new Color( 0x111111 );
63
+
64
+ /**
65
+ * How shiny the specular highlight is; a higher value gives a sharper highlight.
66
+ *
67
+ * @type {number}
68
+ * @default 30
69
+ */
18
70
  this.shininess = 30;
19
71
 
72
+ /**
73
+ * The color map. May optionally include an alpha channel, typically combined
74
+ * with {@link Material#transparent} or {@link Material#alphaTest}. The texture map
75
+ * color is modulated by the diffuse `color`.
76
+ *
77
+ * @type {?Texture}
78
+ * @default null
79
+ */
20
80
  this.map = null;
21
81
 
82
+ /**
83
+ * The light map. Requires a second set of UVs.
84
+ *
85
+ * @type {?Texture}
86
+ * @default null
87
+ */
22
88
  this.lightMap = null;
89
+
90
+ /**
91
+ * Intensity of the baked light.
92
+ *
93
+ * @type {number}
94
+ * @default 1
95
+ */
23
96
  this.lightMapIntensity = 1.0;
24
97
 
98
+ /**
99
+ * The red channel of this texture is used as the ambient occlusion map.
100
+ * Requires a second set of UVs.
101
+ *
102
+ * @type {?Texture}
103
+ * @default null
104
+ */
25
105
  this.aoMap = null;
106
+
107
+ /**
108
+ * Intensity of the ambient occlusion effect. Range is `[0,1]`, where `0`
109
+ * disables ambient occlusion. Where intensity is `1` and the AO map's
110
+ * red channel is also `1`, ambient light is fully occluded on a surface.
111
+ *
112
+ * @type {number}
113
+ * @default 1
114
+ */
26
115
  this.aoMapIntensity = 1.0;
27
116
 
117
+ /**
118
+ * Emissive (light) color of the material, essentially a solid color
119
+ * unaffected by other lighting.
120
+ *
121
+ * @type {Color}
122
+ * @default (0,0,0)
123
+ */
28
124
  this.emissive = new Color( 0x000000 );
125
+
126
+ /**
127
+ * Intensity of the emissive light. Modulates the emissive color.
128
+ *
129
+ * @type {number}
130
+ * @default 1
131
+ */
29
132
  this.emissiveIntensity = 1.0;
133
+
134
+ /**
135
+ * Set emissive (glow) map. The emissive map color is modulated by the
136
+ * emissive color and the emissive intensity. If you have an emissive map,
137
+ * be sure to set the emissive color to something other than black.
138
+ *
139
+ * @type {?Texture}
140
+ * @default null
141
+ */
30
142
  this.emissiveMap = null;
31
143
 
144
+ /**
145
+ * The texture to create a bump map. The black and white values map to the
146
+ * perceived depth in relation to the lights. Bump doesn't actually affect
147
+ * the geometry of the object, only the lighting. If a normal map is defined
148
+ * this will be ignored.
149
+ *
150
+ * @type {?Texture}
151
+ * @default null
152
+ */
32
153
  this.bumpMap = null;
154
+
155
+ /**
156
+ * How much the bump map affects the material. Typical range is `[0,1]`.
157
+ *
158
+ * @type {number}
159
+ * @default 1
160
+ */
33
161
  this.bumpScale = 1;
34
162
 
163
+ /**
164
+ * The texture to create a normal map. The RGB values affect the surface
165
+ * normal for each pixel fragment and change the way the color is lit. Normal
166
+ * maps do not change the actual shape of the surface, only the lighting. In
167
+ * case the material has a normal map authored using the left handed
168
+ * convention, the `y` component of `normalScale` should be negated to compensate
169
+ * for the different handedness.
170
+ *
171
+ * @type {?Texture}
172
+ * @default null
173
+ */
35
174
  this.normalMap = null;
175
+
176
+ /**
177
+ * The type of normal map.
178
+ *
179
+ * @type {(TangentSpaceNormalMap|ObjectSpaceNormalMap)}
180
+ * @default TangentSpaceNormalMap
181
+ */
36
182
  this.normalMapType = TangentSpaceNormalMap;
183
+
184
+ /**
185
+ * How much the normal map affects the material. Typical value range is `[0,1]`.
186
+ *
187
+ * @type {Vector2}
188
+ * @default (1,1)
189
+ */
37
190
  this.normalScale = new Vector2( 1, 1 );
38
191
 
192
+ /**
193
+ * The displacement map affects the position of the mesh's vertices. Unlike
194
+ * other maps which only affect the light and shade of the material the
195
+ * displaced vertices can cast shadows, block other objects, and otherwise
196
+ * act as real geometry. The displacement texture is an image where the value
197
+ * of each pixel (white being the highest) is mapped against, and
198
+ * repositions, the vertices of the mesh.
199
+ *
200
+ * @type {?Texture}
201
+ * @default null
202
+ */
39
203
  this.displacementMap = null;
204
+
205
+ /**
206
+ * How much the displacement map affects the mesh (where black is no
207
+ * displacement, and white is maximum displacement). Without a displacement
208
+ * map set, this value is not applied.
209
+ *
210
+ * @type {number}
211
+ * @default 0
212
+ */
40
213
  this.displacementScale = 1;
214
+
215
+ /**
216
+ * The offset of the displacement map's values on the mesh's vertices.
217
+ * The bias is added to the scaled sample of the displacement map.
218
+ * Without a displacement map set, this value is not applied.
219
+ *
220
+ * @type {number}
221
+ * @default 0
222
+ */
41
223
  this.displacementBias = 0;
42
224
 
225
+ /**
226
+ * The specular map value affects both how much the specular surface
227
+ * highlight contributes and how much of the environment map affects the
228
+ * surface.
229
+ *
230
+ * @type {?Texture}
231
+ * @default null
232
+ */
43
233
  this.specularMap = null;
44
234
 
235
+ /**
236
+ * The alpha map is a grayscale texture that controls the opacity across the
237
+ * surface (black: fully transparent; white: fully opaque).
238
+ *
239
+ * Only the color of the texture is used, ignoring the alpha channel if one
240
+ * exists. For RGB and RGBA textures, the renderer will use the green channel
241
+ * when sampling this texture due to the extra bit of precision provided for
242
+ * green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
243
+ * luminance/alpha textures will also still work as expected.
244
+ *
245
+ * @type {?Texture}
246
+ * @default null
247
+ */
45
248
  this.alphaMap = null;
46
249
 
250
+ /**
251
+ * The environment map.
252
+ *
253
+ * @type {?Texture}
254
+ * @default null
255
+ */
47
256
  this.envMap = null;
257
+
258
+ /**
259
+ * The rotation of the environment map in radians.
260
+ *
261
+ * @type {Euler}
262
+ * @default (0,0,0)
263
+ */
48
264
  this.envMapRotation = new Euler();
49
265
 
266
+ /**
267
+ * How to combine the result of the surface's color with the environment map, if any.
268
+ *
269
+ * When set to `MixOperation`, the {@link MeshBasicMaterial#reflectivity} is used to
270
+ * blend between the two colors.
271
+ *
272
+ * @type {(MultiplyOperation|MixOperation|AddOperation)}
273
+ * @default MultiplyOperation
274
+ */
50
275
  this.combine = MultiplyOperation;
276
+
277
+ /**
278
+ * How much the environment map affects the surface.
279
+ * The valid range is between `0` (no reflections) and `1` (full reflections).
280
+ *
281
+ * @type {number}
282
+ * @default 1
283
+ */
51
284
  this.reflectivity = 1;
285
+
286
+ /**
287
+ * The index of refraction (IOR) of air (approximately 1) divided by the
288
+ * index of refraction of the material. It is used with environment mapping
289
+ * modes {@link CubeRefractionMapping} and {@link EquirectangularRefractionMapping}.
290
+ * The refraction ratio should not exceed `1`.
291
+ *
292
+ * @type {number}
293
+ * @default 0.98
294
+ */
52
295
  this.refractionRatio = 0.98;
53
296
 
297
+ /**
298
+ * Renders the geometry as a wireframe.
299
+ *
300
+ * @type {boolean}
301
+ * @default false
302
+ */
54
303
  this.wireframe = false;
304
+
305
+ /**
306
+ * Controls the thickness of the wireframe.
307
+ *
308
+ * Can only be used with {@link SVGRenderer}.
309
+ *
310
+ * @type {number}
311
+ * @default 1
312
+ */
55
313
  this.wireframeLinewidth = 1;
314
+
315
+ /**
316
+ * Defines appearance of wireframe ends.
317
+ *
318
+ * Can only be used with {@link SVGRenderer}.
319
+ *
320
+ * @type {('round'|'bevel'|'miter')}
321
+ * @default 'round'
322
+ */
56
323
  this.wireframeLinecap = 'round';
324
+
325
+ /**
326
+ * Defines appearance of wireframe joints.
327
+ *
328
+ * Can only be used with {@link SVGRenderer}.
329
+ *
330
+ * @type {('round'|'bevel'|'miter')}
331
+ * @default 'round'
332
+ */
57
333
  this.wireframeLinejoin = 'round';
58
334
 
335
+ /**
336
+ * Whether the material is rendered with flat shading or not.
337
+ *
338
+ * @type {boolean}
339
+ * @default false
340
+ */
59
341
  this.flatShading = false;
60
342
 
343
+ /**
344
+ * Whether the material is affected by fog or not.
345
+ *
346
+ * @type {boolean}
347
+ * @default true
348
+ */
61
349
  this.fog = true;
62
350
 
63
351
  this.setValues( parameters );