@plastic-software/three 0.174.0 → 0.175.0

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 (544) hide show
  1. package/build/three.cjs +10655 -1446
  2. package/build/three.core.js +9626 -1094
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +834 -157
  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 +1429 -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 +53 -0
  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/UniformsLib.js +1 -4
  512. package/src/renderers/shaders/UniformsUtils.js +1 -3
  513. package/src/renderers/webgl/WebGLBackground.js +4 -2
  514. package/src/renderers/webgl/WebGLState.js +9 -9
  515. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  516. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  517. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  518. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  519. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  520. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  521. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  522. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  523. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  524. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  525. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  526. package/src/renderers/webxr/WebXRController.js +87 -2
  527. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  528. package/src/renderers/webxr/WebXRManager.js +173 -1
  529. package/src/scenes/Scene.js +2 -1
  530. package/src/textures/CanvasTexture.js +28 -0
  531. package/src/textures/CompressedArrayTexture.js +57 -0
  532. package/src/textures/CompressedCubeTexture.js +29 -0
  533. package/src/textures/CompressedTexture.js +64 -6
  534. package/src/textures/CubeTexture.js +52 -4
  535. package/src/textures/Data3DTexture.js +77 -0
  536. package/src/textures/DataArrayTexture.js +93 -0
  537. package/src/textures/DataTexture.js +65 -0
  538. package/src/textures/DepthTexture.js +59 -9
  539. package/src/textures/FramebufferTexture.js +62 -0
  540. package/src/textures/Source.js +69 -0
  541. package/src/textures/Texture.js +5 -5
  542. package/src/textures/VideoFrameTexture.js +43 -6
  543. package/src/textures/VideoTexture.js +49 -4
  544. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -4,62 +4,359 @@ import { Vector2 } from '../math/Vector2.js';
4
4
  import { Color } from '../math/Color.js';
5
5
  import { Euler } from '../math/Euler.js';
6
6
 
7
+ /**
8
+ * A standard physically based material, using Metallic-Roughness workflow.
9
+ *
10
+ * Physically based rendering (PBR) has recently become the standard in many
11
+ * 3D applications, such as [Unity]{@link https://blogs.unity3d.com/2014/10/29/physically-based-shading-in-unity-5-a-primer/},
12
+ * [Unreal]{@link https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/PhysicallyBased/} and
13
+ * [3D Studio Max]{@link http://area.autodesk.com/blogs/the-3ds-max-blog/what039s-new-for-rendering-in-3ds-max-2017}.
14
+ *
15
+ * This approach differs from older approaches in that instead of using
16
+ * approximations for the way in which light interacts with a surface, a
17
+ * physically correct model is used. The idea is that, instead of tweaking
18
+ * materials to look good under specific lighting, a material can be created
19
+ * that will react 'correctly' under all lighting scenarios.
20
+ *
21
+ * In practice this gives a more accurate and realistic looking result than
22
+ * the {@link MeshLambertMaterial} or {@link MeshPhongMaterial}, at the cost of
23
+ * being somewhat more computationally expensive. `MeshStandardMaterial` uses per-fragment
24
+ * shading.
25
+ *
26
+ * Note that for best results you should always specify an environment map when using this material.
27
+ *
28
+ * For a non-technical introduction to the concept of PBR and how to set up a
29
+ * PBR material, check out these articles by the people at [marmoset]{@link https://www.marmoset.co}:
30
+ *
31
+ * - [Basic Theory of Physically Based Rendering]{@link https://www.marmoset.co/posts/basic-theory-of-physically-based-rendering/}
32
+ * - [Physically Based Rendering and You Can Too]{@link https://www.marmoset.co/posts/physically-based-rendering-and-you-can-too/}
33
+ *
34
+ * Technical details of the approach used in three.js (and most other PBR systems) can be found is this
35
+ * [paper from Disney]{@link https://media.disneyanimation.com/uploads/production/publication_asset/48/asset/s2012_pbs_disney_brdf_notes_v3.pdf}
36
+ * (pdf), by Brent Burley.
37
+ *
38
+ * @augments Material
39
+ */
7
40
  class MeshStandardMaterial extends Material {
8
41
 
42
+ /**
43
+ * Constructs a new mesh standard material.
44
+ *
45
+ * @param {Object} [parameters] - An object with one or more properties
46
+ * defining the material's appearance. Any property of the material
47
+ * (including any property from inherited materials) can be passed
48
+ * in here. Color values can be passed any type of value accepted
49
+ * by {@link Color#set}.
50
+ */
9
51
  constructor( parameters ) {
10
52
 
11
53
  super();
12
54
 
55
+ /**
56
+ * This flag can be used for type testing.
57
+ *
58
+ * @type {boolean}
59
+ * @readonly
60
+ * @default true
61
+ */
13
62
  this.isMeshStandardMaterial = true;
14
63
 
15
64
  this.type = 'MeshStandardMaterial';
16
65
 
17
66
  this.defines = { 'STANDARD': '' };
18
67
 
68
+ /**
69
+ * Color of the material.
70
+ *
71
+ * @type {Color}
72
+ * @default (1,1,1)
73
+ */
19
74
  this.color = new Color( 0xffffff ); // diffuse
75
+
76
+ /**
77
+ * How rough the material appears. `0.0` means a smooth mirror reflection, `1.0`
78
+ * means fully diffuse. If `roughnessMap` is also provided,
79
+ * both values are multiplied.
80
+ *
81
+ * @type {number}
82
+ * @default 1
83
+ */
20
84
  this.roughness = 1.0;
85
+
86
+ /**
87
+ * How much the material is like a metal. Non-metallic materials such as wood
88
+ * or stone use `0.0`, metallic use `1.0`, with nothing (usually) in between.
89
+ * A value between `0.0` and `1.0` could be used for a rusty metal look.
90
+ * If `metalnessMap` is also provided, both values are multiplied.
91
+ *
92
+ * @type {number}
93
+ * @default 0
94
+ */
21
95
  this.metalness = 0.0;
22
96
 
97
+ /**
98
+ * The color map. May optionally include an alpha channel, typically combined
99
+ * with {@link Material#transparent} or {@link Material#alphaTest}. The texture map
100
+ * color is modulated by the diffuse `color`.
101
+ *
102
+ * @type {?Texture}
103
+ * @default null
104
+ */
23
105
  this.map = null;
24
106
 
107
+ /**
108
+ * The light map. Requires a second set of UVs.
109
+ *
110
+ * @type {?Texture}
111
+ * @default null
112
+ */
25
113
  this.lightMap = null;
114
+
115
+ /**
116
+ * Intensity of the baked light.
117
+ *
118
+ * @type {number}
119
+ * @default 1
120
+ */
26
121
  this.lightMapIntensity = 1.0;
27
122
 
123
+ /**
124
+ * The red channel of this texture is used as the ambient occlusion map.
125
+ * Requires a second set of UVs.
126
+ *
127
+ * @type {?Texture}
128
+ * @default null
129
+ */
28
130
  this.aoMap = null;
131
+
132
+ /**
133
+ * Intensity of the ambient occlusion effect. Range is `[0,1]`, where `0`
134
+ * disables ambient occlusion. Where intensity is `1` and the AO map's
135
+ * red channel is also `1`, ambient light is fully occluded on a surface.
136
+ *
137
+ * @type {number}
138
+ * @default 1
139
+ */
29
140
  this.aoMapIntensity = 1.0;
30
141
 
142
+ /**
143
+ * Emissive (light) color of the material, essentially a solid color
144
+ * unaffected by other lighting.
145
+ *
146
+ * @type {Color}
147
+ * @default (0,0,0)
148
+ */
31
149
  this.emissive = new Color( 0x000000 );
150
+
151
+ /**
152
+ * Intensity of the emissive light. Modulates the emissive color.
153
+ *
154
+ * @type {number}
155
+ * @default 1
156
+ */
32
157
  this.emissiveIntensity = 1.0;
158
+
159
+ /**
160
+ * Set emissive (glow) map. The emissive map color is modulated by the
161
+ * emissive color and the emissive intensity. If you have an emissive map,
162
+ * be sure to set the emissive color to something other than black.
163
+ *
164
+ * @type {?Texture}
165
+ * @default null
166
+ */
33
167
  this.emissiveMap = null;
34
168
 
169
+ /**
170
+ * The texture to create a bump map. The black and white values map to the
171
+ * perceived depth in relation to the lights. Bump doesn't actually affect
172
+ * the geometry of the object, only the lighting. If a normal map is defined
173
+ * this will be ignored.
174
+ *
175
+ * @type {?Texture}
176
+ * @default null
177
+ */
35
178
  this.bumpMap = null;
179
+
180
+ /**
181
+ * How much the bump map affects the material. Typical range is `[0,1]`.
182
+ *
183
+ * @type {number}
184
+ * @default 1
185
+ */
36
186
  this.bumpScale = 1;
37
187
 
188
+ /**
189
+ * The texture to create a normal map. The RGB values affect the surface
190
+ * normal for each pixel fragment and change the way the color is lit. Normal
191
+ * maps do not change the actual shape of the surface, only the lighting. In
192
+ * case the material has a normal map authored using the left handed
193
+ * convention, the `y` component of `normalScale` should be negated to compensate
194
+ * for the different handedness.
195
+ *
196
+ * @type {?Texture}
197
+ * @default null
198
+ */
38
199
  this.normalMap = null;
200
+
201
+ /**
202
+ * The type of normal map.
203
+ *
204
+ * @type {(TangentSpaceNormalMap|ObjectSpaceNormalMap)}
205
+ * @default TangentSpaceNormalMap
206
+ */
39
207
  this.normalMapType = TangentSpaceNormalMap;
208
+
209
+ /**
210
+ * How much the normal map affects the material. Typical value range is `[0,1]`.
211
+ *
212
+ * @type {Vector2}
213
+ * @default (1,1)
214
+ */
40
215
  this.normalScale = new Vector2( 1, 1 );
41
216
 
217
+ /**
218
+ * The displacement map affects the position of the mesh's vertices. Unlike
219
+ * other maps which only affect the light and shade of the material the
220
+ * displaced vertices can cast shadows, block other objects, and otherwise
221
+ * act as real geometry. The displacement texture is an image where the value
222
+ * of each pixel (white being the highest) is mapped against, and
223
+ * repositions, the vertices of the mesh.
224
+ *
225
+ * @type {?Texture}
226
+ * @default null
227
+ */
42
228
  this.displacementMap = null;
229
+
230
+ /**
231
+ * How much the displacement map affects the mesh (where black is no
232
+ * displacement, and white is maximum displacement). Without a displacement
233
+ * map set, this value is not applied.
234
+ *
235
+ * @type {number}
236
+ * @default 0
237
+ */
43
238
  this.displacementScale = 1;
239
+
240
+ /**
241
+ * The offset of the displacement map's values on the mesh's vertices.
242
+ * The bias is added to the scaled sample of the displacement map.
243
+ * Without a displacement map set, this value is not applied.
244
+ *
245
+ * @type {number}
246
+ * @default 0
247
+ */
44
248
  this.displacementBias = 0;
45
249
 
250
+ /**
251
+ * The green channel of this texture is used to alter the roughness of the
252
+ * material.
253
+ *
254
+ * @type {?Texture}
255
+ * @default null
256
+ */
46
257
  this.roughnessMap = null;
47
258
 
259
+ /**
260
+ * The blue channel of this texture is used to alter the metalness of the
261
+ * material.
262
+ *
263
+ * @type {?Texture}
264
+ * @default null
265
+ */
48
266
  this.metalnessMap = null;
49
267
 
268
+ /**
269
+ * The alpha map is a grayscale texture that controls the opacity across the
270
+ * surface (black: fully transparent; white: fully opaque).
271
+ *
272
+ * Only the color of the texture is used, ignoring the alpha channel if one
273
+ * exists. For RGB and RGBA textures, the renderer will use the green channel
274
+ * when sampling this texture due to the extra bit of precision provided for
275
+ * green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
276
+ * luminance/alpha textures will also still work as expected.
277
+ *
278
+ * @type {?Texture}
279
+ * @default null
280
+ */
50
281
  this.alphaMap = null;
51
282
 
283
+ /**
284
+ * The environment map. To ensure a physically correct rendering, environment maps
285
+ * are internally pre-processed with {@link PMREMGenerator}.
286
+ *
287
+ * @type {?Texture}
288
+ * @default null
289
+ */
52
290
  this.envMap = null;
291
+
292
+ /**
293
+ * The rotation of the environment map in radians.
294
+ *
295
+ * @type {Euler}
296
+ * @default (0,0,0)
297
+ */
53
298
  this.envMapRotation = new Euler();
299
+
300
+ /**
301
+ * Scales the effect of the environment map by multiplying its color.
302
+ *
303
+ * @type {number}
304
+ * @default 1
305
+ */
54
306
  this.envMapIntensity = 1.0;
55
307
 
308
+ /**
309
+ * Renders the geometry as a wireframe.
310
+ *
311
+ * @type {boolean}
312
+ * @default false
313
+ */
56
314
  this.wireframe = false;
315
+
316
+ /**
317
+ * Controls the thickness of the wireframe.
318
+ *
319
+ * Can only be used with {@link SVGRenderer}.
320
+ *
321
+ * @type {number}
322
+ * @default 1
323
+ */
57
324
  this.wireframeLinewidth = 1;
325
+
326
+ /**
327
+ * Defines appearance of wireframe ends.
328
+ *
329
+ * Can only be used with {@link SVGRenderer}.
330
+ *
331
+ * @type {('round'|'bevel'|'miter')}
332
+ * @default 'round'
333
+ */
58
334
  this.wireframeLinecap = 'round';
335
+
336
+ /**
337
+ * Defines appearance of wireframe joints.
338
+ *
339
+ * Can only be used with {@link SVGRenderer}.
340
+ *
341
+ * @type {('round'|'bevel'|'miter')}
342
+ * @default 'round'
343
+ */
59
344
  this.wireframeLinejoin = 'round';
60
345
 
346
+ /**
347
+ * Whether the material is rendered with flat shading or not.
348
+ *
349
+ * @type {boolean}
350
+ * @default false
351
+ */
61
352
  this.flatShading = false;
62
353
 
354
+ /**
355
+ * Whether the material is affected by fog or not.
356
+ *
357
+ * @type {boolean}
358
+ * @default true
359
+ */
63
360
  this.fog = true;
64
361
 
65
362
  this.setValues( parameters );
@@ -3,51 +3,269 @@ 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
+ * A material implementing toon shading.
8
+ *
9
+ * @augments Material
10
+ */
6
11
  class MeshToonMaterial extends Material {
7
12
 
13
+ /**
14
+ * Constructs a new mesh toon material.
15
+ *
16
+ * @param {Object} [parameters] - An object with one or more properties
17
+ * defining the material's appearance. Any property of the material
18
+ * (including any property from inherited materials) can be passed
19
+ * in here. Color values can be passed any type of value accepted
20
+ * by {@link Color#set}.
21
+ */
8
22
  constructor( parameters ) {
9
23
 
10
24
  super();
11
25
 
26
+ /**
27
+ * This flag can be used for type testing.
28
+ *
29
+ * @type {boolean}
30
+ * @readonly
31
+ * @default true
32
+ */
12
33
  this.isMeshToonMaterial = true;
13
34
 
14
35
  this.defines = { 'TOON': '' };
15
36
 
16
37
  this.type = 'MeshToonMaterial';
17
38
 
39
+ /**
40
+ * Color of the material.
41
+ *
42
+ * @type {Color}
43
+ * @default (1,1,1)
44
+ */
18
45
  this.color = new Color( 0xffffff );
19
46
 
47
+ /**
48
+ * The color map. May optionally include an alpha channel, typically combined
49
+ * with {@link Material#transparent} or {@link Material#alphaTest}. The texture map
50
+ * color is modulated by the diffuse `color`.
51
+ *
52
+ * @type {?Texture}
53
+ * @default null
54
+ */
20
55
  this.map = null;
56
+
57
+ /**
58
+ * Gradient map for toon shading. It's required to set
59
+ * {@link Texture#minFilter} and {@link Texture#magFilter} to {@linkNearestFilter}
60
+ * when using this type of texture.
61
+ *
62
+ * @type {?Texture}
63
+ * @default null
64
+ */
21
65
  this.gradientMap = null;
22
66
 
67
+ /**
68
+ * The light map. Requires a second set of UVs.
69
+ *
70
+ * @type {?Texture}
71
+ * @default null
72
+ */
23
73
  this.lightMap = null;
74
+
75
+ /**
76
+ * Intensity of the baked light.
77
+ *
78
+ * @type {number}
79
+ * @default 1
80
+ */
24
81
  this.lightMapIntensity = 1.0;
25
82
 
83
+ /**
84
+ * The red channel of this texture is used as the ambient occlusion map.
85
+ * Requires a second set of UVs.
86
+ *
87
+ * @type {?Texture}
88
+ * @default null
89
+ */
26
90
  this.aoMap = null;
91
+
92
+ /**
93
+ * Intensity of the ambient occlusion effect. Range is `[0,1]`, where `0`
94
+ * disables ambient occlusion. Where intensity is `1` and the AO map's
95
+ * red channel is also `1`, ambient light is fully occluded on a surface.
96
+ *
97
+ * @type {number}
98
+ * @default 1
99
+ */
27
100
  this.aoMapIntensity = 1.0;
28
101
 
102
+ /**
103
+ * Emissive (light) color of the material, essentially a solid color
104
+ * unaffected by other lighting.
105
+ *
106
+ * @type {Color}
107
+ * @default (0,0,0)
108
+ */
29
109
  this.emissive = new Color( 0x000000 );
110
+
111
+ /**
112
+ * Intensity of the emissive light. Modulates the emissive color.
113
+ *
114
+ * @type {number}
115
+ * @default 1
116
+ */
30
117
  this.emissiveIntensity = 1.0;
118
+
119
+ /**
120
+ * Set emissive (glow) map. The emissive map color is modulated by the
121
+ * emissive color and the emissive intensity. If you have an emissive map,
122
+ * be sure to set the emissive color to something other than black.
123
+ *
124
+ * @type {?Texture}
125
+ * @default null
126
+ */
31
127
  this.emissiveMap = null;
32
128
 
129
+ /**
130
+ * The texture to create a bump map. The black and white values map to the
131
+ * perceived depth in relation to the lights. Bump doesn't actually affect
132
+ * the geometry of the object, only the lighting. If a normal map is defined
133
+ * this will be ignored.
134
+ *
135
+ * @type {?Texture}
136
+ * @default null
137
+ */
33
138
  this.bumpMap = null;
139
+
140
+ /**
141
+ * How much the bump map affects the material. Typical range is `[0,1]`.
142
+ *
143
+ * @type {number}
144
+ * @default 1
145
+ */
34
146
  this.bumpScale = 1;
35
147
 
148
+ /**
149
+ * The texture to create a normal map. The RGB values affect the surface
150
+ * normal for each pixel fragment and change the way the color is lit. Normal
151
+ * maps do not change the actual shape of the surface, only the lighting. In
152
+ * case the material has a normal map authored using the left handed
153
+ * convention, the `y` component of `normalScale` should be negated to compensate
154
+ * for the different handedness.
155
+ *
156
+ * @type {?Texture}
157
+ * @default null
158
+ */
36
159
  this.normalMap = null;
160
+
161
+ /**
162
+ * The type of normal map.
163
+ *
164
+ * @type {(TangentSpaceNormalMap|ObjectSpaceNormalMap)}
165
+ * @default TangentSpaceNormalMap
166
+ */
37
167
  this.normalMapType = TangentSpaceNormalMap;
168
+
169
+ /**
170
+ * How much the normal map affects the material. Typical value range is `[0,1]`.
171
+ *
172
+ * @type {Vector2}
173
+ * @default (1,1)
174
+ */
38
175
  this.normalScale = new Vector2( 1, 1 );
39
176
 
177
+ /**
178
+ * The displacement map affects the position of the mesh's vertices. Unlike
179
+ * other maps which only affect the light and shade of the material the
180
+ * displaced vertices can cast shadows, block other objects, and otherwise
181
+ * act as real geometry. The displacement texture is an image where the value
182
+ * of each pixel (white being the highest) is mapped against, and
183
+ * repositions, the vertices of the mesh.
184
+ *
185
+ * @type {?Texture}
186
+ * @default null
187
+ */
40
188
  this.displacementMap = null;
189
+
190
+ /**
191
+ * How much the displacement map affects the mesh (where black is no
192
+ * displacement, and white is maximum displacement). Without a displacement
193
+ * map set, this value is not applied.
194
+ *
195
+ * @type {number}
196
+ * @default 0
197
+ */
41
198
  this.displacementScale = 1;
199
+
200
+ /**
201
+ * The offset of the displacement map's values on the mesh's vertices.
202
+ * The bias is added to the scaled sample of the displacement map.
203
+ * Without a displacement map set, this value is not applied.
204
+ *
205
+ * @type {number}
206
+ * @default 0
207
+ */
42
208
  this.displacementBias = 0;
43
209
 
210
+ /**
211
+ * The alpha map is a grayscale texture that controls the opacity across the
212
+ * surface (black: fully transparent; white: fully opaque).
213
+ *
214
+ * Only the color of the texture is used, ignoring the alpha channel if one
215
+ * exists. For RGB and RGBA textures, the renderer will use the green channel
216
+ * when sampling this texture due to the extra bit of precision provided for
217
+ * green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
218
+ * luminance/alpha textures will also still work as expected.
219
+ *
220
+ * @type {?Texture}
221
+ * @default null
222
+ */
44
223
  this.alphaMap = null;
45
224
 
225
+ /**
226
+ * Renders the geometry as a wireframe.
227
+ *
228
+ * @type {boolean}
229
+ * @default false
230
+ */
46
231
  this.wireframe = false;
232
+
233
+ /**
234
+ * Controls the thickness of the wireframe.
235
+ *
236
+ * Can only be used with {@link SVGRenderer}.
237
+ *
238
+ * @type {number}
239
+ * @default 1
240
+ */
47
241
  this.wireframeLinewidth = 1;
242
+
243
+ /**
244
+ * Defines appearance of wireframe ends.
245
+ *
246
+ * Can only be used with {@link SVGRenderer}.
247
+ *
248
+ * @type {('round'|'bevel'|'miter')}
249
+ * @default 'round'
250
+ */
48
251
  this.wireframeLinecap = 'round';
252
+
253
+ /**
254
+ * Defines appearance of wireframe joints.
255
+ *
256
+ * Can only be used with {@link SVGRenderer}.
257
+ *
258
+ * @type {('round'|'bevel'|'miter')}
259
+ * @default 'round'
260
+ */
49
261
  this.wireframeLinejoin = 'round';
50
262
 
263
+ /**
264
+ * Whether the material is affected by fog or not.
265
+ *
266
+ * @type {boolean}
267
+ * @default true
268
+ */
51
269
  this.fog = true;
52
270
 
53
271
  this.setValues( parameters );