super-three 0.181.0 → 0.185.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 (693) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +21332 -19201
  4. package/build/three.core.js +20908 -19853
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1947 -862
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +37 -16
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +33628 -25197
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +33394 -25000
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +14 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +13 -6
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +127 -86
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +102 -17
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMFrustum.js +31 -6
  26. package/examples/jsm/csm/CSMShadowNode.js +10 -3
  27. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  28. package/examples/jsm/effects/AsciiEffect.js +14 -1
  29. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  30. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  31. package/examples/jsm/exporters/DRACOExporter.js +27 -6
  32. package/examples/jsm/exporters/EXRExporter.js +1 -1
  33. package/examples/jsm/exporters/GLTFExporter.js +266 -21
  34. package/examples/jsm/exporters/PLYExporter.js +286 -73
  35. package/examples/jsm/exporters/USDZExporter.js +353 -99
  36. package/examples/jsm/generators/CityGenerator.js +346 -0
  37. package/examples/jsm/generators/ForestGenerator.js +347 -0
  38. package/examples/jsm/generators/TerrainGenerator.js +504 -0
  39. package/examples/jsm/generators/TreeGenerator.js +377 -0
  40. package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
  41. package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
  42. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  43. package/examples/jsm/geometries/LoftGeometry.js +355 -0
  44. package/examples/jsm/geometries/TextGeometry.js +18 -0
  45. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  46. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  47. package/examples/jsm/helpers/LightProbeHelper.js +5 -4
  48. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  49. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  50. package/examples/jsm/helpers/ViewHelper.js +83 -14
  51. package/examples/jsm/inspector/Extension.js +13 -0
  52. package/examples/jsm/inspector/Inspector.js +244 -91
  53. package/examples/jsm/inspector/RendererInspector.js +165 -39
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  55. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  56. package/examples/jsm/inspector/tabs/Console.js +241 -25
  57. package/examples/jsm/inspector/tabs/Memory.js +136 -0
  58. package/examples/jsm/inspector/tabs/Parameters.js +115 -7
  59. package/examples/jsm/inspector/tabs/Performance.js +24 -9
  60. package/examples/jsm/inspector/tabs/Settings.js +306 -0
  61. package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
  62. package/examples/jsm/inspector/tabs/Viewer.js +723 -9
  63. package/examples/jsm/inspector/ui/Graph.js +162 -25
  64. package/examples/jsm/inspector/ui/Item.js +92 -13
  65. package/examples/jsm/inspector/ui/List.js +2 -2
  66. package/examples/jsm/inspector/ui/Profiler.js +1991 -44
  67. package/examples/jsm/inspector/ui/Style.js +1943 -543
  68. package/examples/jsm/inspector/ui/Tab.js +226 -5
  69. package/examples/jsm/inspector/ui/Values.js +126 -8
  70. package/examples/jsm/inspector/ui/utils.js +143 -10
  71. package/examples/jsm/interaction/InteractionManager.js +226 -0
  72. package/examples/jsm/libs/basis/README.md +0 -1
  73. package/examples/jsm/libs/demuxer_mp4.js +3 -3
  74. package/examples/jsm/libs/draco/README.md +0 -1
  75. package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
  76. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  77. package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
  78. package/examples/jsm/libs/mikktspace.module.js +34 -9
  79. package/examples/jsm/lighting/ClusteredLighting.js +55 -0
  80. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  81. package/examples/jsm/lighting/LightProbeGrid.js +681 -0
  82. package/examples/jsm/lines/LineMaterial.js +45 -16
  83. package/examples/jsm/lines/LineSegments2.js +8 -0
  84. package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
  85. package/examples/jsm/loaders/3DMLoader.js +6 -5
  86. package/examples/jsm/loaders/3MFLoader.js +2 -2
  87. package/examples/jsm/loaders/AMFLoader.js +2 -2
  88. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  89. package/examples/jsm/loaders/DRACOLoader.js +51 -18
  90. package/examples/jsm/loaders/EXRLoader.js +701 -90
  91. package/examples/jsm/loaders/FBXLoader.js +235 -37
  92. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  93. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  94. package/examples/jsm/loaders/HDRLoader.js +7 -30
  95. package/examples/jsm/loaders/KMZLoader.js +5 -5
  96. package/examples/jsm/loaders/KTX2Loader.js +58 -17
  97. package/examples/jsm/loaders/LDrawLoader.js +49 -58
  98. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  99. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  100. package/examples/jsm/loaders/LWOLoader.js +11 -39
  101. package/examples/jsm/loaders/LottieLoader.js +1 -1
  102. package/examples/jsm/loaders/MaterialXLoader.js +31 -9
  103. package/examples/jsm/loaders/NRRDLoader.js +5 -5
  104. package/examples/jsm/loaders/PCDLoader.js +11 -9
  105. package/examples/jsm/loaders/PLYLoader.js +218 -55
  106. package/examples/jsm/loaders/SVGLoader.js +549 -497
  107. package/examples/jsm/loaders/TDSLoader.js +0 -2
  108. package/examples/jsm/loaders/TGALoader.js +0 -2
  109. package/examples/jsm/loaders/TTFLoader.js +1 -1
  110. package/examples/jsm/loaders/USDLoader.js +127 -43
  111. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  112. package/examples/jsm/loaders/VOXLoader.js +660 -117
  113. package/examples/jsm/loaders/VRMLLoader.js +80 -3
  114. package/examples/jsm/loaders/VTKLoader.js +42 -25
  115. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  116. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  117. package/examples/jsm/loaders/usd/USDAParser.js +504 -344
  118. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  119. package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
  120. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  121. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  122. package/examples/jsm/math/Octree.js +131 -1
  123. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  124. package/examples/jsm/misc/RollerCoaster.js +42 -4
  125. package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
  126. package/examples/jsm/misc/Volume.js +2 -3
  127. package/examples/jsm/misc/VolumeSlice.js +0 -1
  128. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  129. package/examples/jsm/objects/GroundedSkybox.js +1 -1
  130. package/examples/jsm/objects/LensflareMesh.js +1 -1
  131. package/examples/jsm/objects/Reflector.js +72 -25
  132. package/examples/jsm/objects/Sky.js +90 -6
  133. package/examples/jsm/objects/SkyMesh.js +150 -16
  134. package/examples/jsm/objects/Water.js +4 -3
  135. package/examples/jsm/objects/Water2.js +5 -3
  136. package/examples/jsm/objects/Water2Mesh.js +1 -1
  137. package/examples/jsm/objects/WaterMesh.js +5 -7
  138. package/examples/jsm/physics/AmmoPhysics.js +27 -15
  139. package/examples/jsm/physics/JoltPhysics.js +10 -6
  140. package/examples/jsm/physics/RapierPhysics.js +36 -7
  141. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  142. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  143. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  144. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  145. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  146. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  147. package/examples/jsm/renderers/Projector.js +246 -28
  148. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  149. package/examples/jsm/shaders/GTAOShader.js +19 -6
  150. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  151. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  152. package/examples/jsm/shaders/SAOShader.js +17 -4
  153. package/examples/jsm/shaders/SSAOShader.js +11 -1
  154. package/examples/jsm/shaders/SSRShader.js +6 -5
  155. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  156. package/examples/jsm/shaders/VignetteShader.js +1 -1
  157. package/examples/jsm/shaders/VolumeShader.js +31 -44
  158. package/examples/jsm/transpiler/AST.js +44 -0
  159. package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
  160. package/examples/jsm/transpiler/Linker.js +1 -1
  161. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  162. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  163. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  164. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  165. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  166. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  167. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  168. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  169. package/examples/jsm/tsl/display/BloomNode.js +75 -25
  170. package/examples/jsm/tsl/display/CRT.js +150 -0
  171. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  172. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  173. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  174. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  175. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  176. package/examples/jsm/tsl/display/FXAANode.js +13 -14
  177. package/examples/jsm/tsl/display/GTAONode.js +40 -17
  178. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  179. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  180. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
  181. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  182. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  183. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  184. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  185. package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
  186. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  187. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
  188. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  189. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  190. package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
  191. package/examples/jsm/tsl/display/SSGINode.js +96 -62
  192. package/examples/jsm/tsl/display/SSRNode.js +831 -134
  193. package/examples/jsm/tsl/display/SSSNode.js +8 -6
  194. package/examples/jsm/tsl/display/Shape.js +29 -0
  195. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  196. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  197. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  198. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  199. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  200. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  201. package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
  202. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  203. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  204. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  205. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
  206. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  207. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  208. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  209. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  210. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  211. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  212. package/examples/jsm/tsl/math/Bayer.js +53 -3
  213. package/examples/jsm/tsl/math/curlNoise.js +107 -0
  214. package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
  215. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
  216. package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
  217. package/examples/jsm/tsl/utils/RNoise.js +51 -0
  218. package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
  219. package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
  220. package/examples/jsm/utils/ColorUtils.js +76 -0
  221. package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
  222. package/examples/jsm/utils/LDrawUtils.js +1 -1
  223. package/examples/jsm/utils/SceneOptimizer.js +1 -1
  224. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  225. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  226. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  227. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  228. package/examples/jsm/webxr/ARButton.js +1 -1
  229. package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
  230. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
  231. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  232. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  233. package/package.json +28 -34
  234. package/src/Three.Core.js +3 -1
  235. package/src/Three.TSL.js +35 -14
  236. package/src/Three.WebGPU.Nodes.js +5 -0
  237. package/src/Three.WebGPU.js +13 -0
  238. package/src/Three.js +1 -0
  239. package/src/animation/AnimationAction.js +18 -4
  240. package/src/animation/AnimationClip.js +0 -139
  241. package/src/animation/AnimationMixer.js +6 -0
  242. package/src/animation/AnimationUtils.js +1 -12
  243. package/src/animation/KeyframeTrack.js +47 -8
  244. package/src/animation/PropertyBinding.js +2 -2
  245. package/src/animation/PropertyMixer.js +4 -4
  246. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  247. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  248. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  249. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  250. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  251. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  252. package/src/audio/Audio.js +1 -1
  253. package/src/audio/AudioContext.js +2 -2
  254. package/src/audio/AudioListener.js +5 -3
  255. package/src/cameras/Camera.js +34 -4
  256. package/src/cameras/CubeCamera.js +20 -0
  257. package/src/cameras/StereoCamera.js +5 -2
  258. package/src/constants.js +90 -5
  259. package/src/core/BufferAttribute.js +13 -1
  260. package/src/core/BufferGeometry.js +43 -9
  261. package/src/core/Clock.js +7 -0
  262. package/src/core/Object3D.js +69 -11
  263. package/src/core/Raycaster.js +3 -3
  264. package/src/core/RenderTarget.js +19 -6
  265. package/src/extras/PMREMGenerator.js +13 -22
  266. package/src/extras/TextureUtils.js +6 -2
  267. package/src/extras/core/ShapePath.js +149 -160
  268. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  269. package/src/geometries/ExtrudeGeometry.js +2 -2
  270. package/src/geometries/PolyhedronGeometry.js +1 -1
  271. package/src/geometries/SphereGeometry.js +8 -3
  272. package/src/geometries/TorusGeometry.js +8 -3
  273. package/src/helpers/CameraHelper.js +3 -0
  274. package/src/helpers/DirectionalLightHelper.js +6 -1
  275. package/src/helpers/HemisphereLightHelper.js +5 -0
  276. package/src/helpers/PointLightHelper.js +3 -25
  277. package/src/helpers/SpotLightHelper.js +4 -1
  278. package/src/lights/DirectionalLight.js +13 -0
  279. package/src/lights/HemisphereLight.js +10 -0
  280. package/src/lights/Light.js +1 -11
  281. package/src/lights/LightProbe.js +0 -15
  282. package/src/lights/LightShadow.js +15 -6
  283. package/src/lights/PointLight.js +15 -0
  284. package/src/lights/PointLightShadow.js +0 -86
  285. package/src/lights/SpotLight.js +22 -1
  286. package/src/lights/webgpu/IESSpotLight.js +2 -1
  287. package/src/loaders/AudioLoader.js +11 -1
  288. package/src/loaders/Cache.js +28 -0
  289. package/src/loaders/DataTextureLoader.js +75 -42
  290. package/src/loaders/FileLoader.js +2 -3
  291. package/src/loaders/ImageBitmapLoader.js +12 -9
  292. package/src/loaders/Loader.js +6 -0
  293. package/src/loaders/LoadingManager.js +5 -0
  294. package/src/loaders/MaterialLoader.js +37 -266
  295. package/src/loaders/ObjectLoader.js +48 -6
  296. package/src/loaders/nodes/NodeLoader.js +2 -2
  297. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  298. package/src/materials/LineBasicMaterial.js +4 -0
  299. package/src/materials/Material.js +198 -1
  300. package/src/materials/MeshBasicMaterial.js +24 -0
  301. package/src/materials/MeshDepthMaterial.js +10 -0
  302. package/src/materials/MeshDistanceMaterial.js +10 -0
  303. package/src/materials/MeshLambertMaterial.js +49 -1
  304. package/src/materials/MeshMatcapMaterial.js +25 -1
  305. package/src/materials/MeshNormalMaterial.js +9 -1
  306. package/src/materials/MeshPhongMaterial.js +49 -1
  307. package/src/materials/MeshPhysicalMaterial.js +38 -0
  308. package/src/materials/MeshStandardMaterial.js +42 -1
  309. package/src/materials/MeshToonMaterial.js +35 -2
  310. package/src/materials/PointsMaterial.js +7 -0
  311. package/src/materials/ShaderMaterial.js +106 -1
  312. package/src/materials/SpriteMaterial.js +7 -0
  313. package/src/materials/nodes/Line2NodeMaterial.js +380 -297
  314. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  315. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  316. package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
  317. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
  318. package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
  319. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
  320. package/src/materials/nodes/NodeMaterial.js +153 -89
  321. package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
  322. package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
  323. package/src/math/Box3.js +5 -0
  324. package/src/math/FrustumArray.js +103 -133
  325. package/src/math/Interpolant.js +1 -1
  326. package/src/math/Line3.js +6 -5
  327. package/src/math/MathUtils.js +12 -12
  328. package/src/math/Matrix2.js +13 -9
  329. package/src/math/Matrix3.js +24 -9
  330. package/src/math/Matrix4.js +112 -74
  331. package/src/math/Plane.js +4 -3
  332. package/src/math/Quaternion.js +3 -29
  333. package/src/math/Sphere.js +1 -1
  334. package/src/math/Triangle.js +1 -1
  335. package/src/math/Vector2.js +13 -9
  336. package/src/math/Vector3.js +17 -15
  337. package/src/math/Vector4.js +15 -11
  338. package/src/math/interpolants/BezierInterpolant.js +106 -0
  339. package/src/nodes/Nodes.js +86 -71
  340. package/src/nodes/TSL.js +15 -13
  341. package/src/nodes/accessors/Arrays.js +5 -5
  342. package/src/nodes/accessors/Batch.js +108 -0
  343. package/src/nodes/accessors/Bitangent.js +7 -7
  344. package/src/nodes/accessors/BufferAttributeNode.js +120 -17
  345. package/src/nodes/accessors/BufferNode.js +29 -2
  346. package/src/nodes/accessors/Camera.js +149 -28
  347. package/src/nodes/accessors/ClippingNode.js +5 -5
  348. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  349. package/src/nodes/accessors/Instance.js +264 -0
  350. package/src/nodes/accessors/MaterialNode.js +27 -3
  351. package/src/nodes/accessors/MaterialProperties.js +6 -8
  352. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  353. package/src/nodes/accessors/ModelNode.js +1 -1
  354. package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
  355. package/src/nodes/accessors/Normal.js +24 -24
  356. package/src/nodes/accessors/Object3DNode.js +1 -1
  357. package/src/nodes/accessors/Position.js +39 -3
  358. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  359. package/src/nodes/accessors/ReferenceNode.js +9 -8
  360. package/src/nodes/accessors/ReflectVector.js +3 -3
  361. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  362. package/src/nodes/accessors/SceneProperties.js +47 -0
  363. package/src/nodes/accessors/Skinning.js +263 -0
  364. package/src/nodes/accessors/StorageBufferNode.js +16 -27
  365. package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
  366. package/src/nodes/accessors/StorageTextureNode.js +74 -11
  367. package/src/nodes/accessors/Tangent.js +8 -18
  368. package/src/nodes/accessors/Texture3DNode.js +32 -35
  369. package/src/nodes/accessors/TextureNode.js +124 -25
  370. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  371. package/src/nodes/accessors/UserDataNode.js +1 -2
  372. package/src/nodes/accessors/VertexColorNode.js +1 -2
  373. package/src/nodes/code/FunctionCallNode.js +1 -1
  374. package/src/nodes/code/FunctionNode.js +4 -19
  375. package/src/nodes/core/ArrayNode.js +21 -2
  376. package/src/nodes/core/AssignNode.js +3 -3
  377. package/src/nodes/core/AttributeNode.js +3 -3
  378. package/src/nodes/core/BypassNode.js +1 -1
  379. package/src/nodes/core/ContextNode.js +104 -5
  380. package/src/nodes/core/IndexNode.js +2 -1
  381. package/src/nodes/core/InputNode.js +1 -1
  382. package/src/nodes/core/InspectorNode.js +1 -1
  383. package/src/nodes/core/IsolateNode.js +1 -1
  384. package/src/nodes/core/MRTNode.js +55 -4
  385. package/src/nodes/core/Node.js +151 -17
  386. package/src/nodes/core/NodeBuilder.js +479 -101
  387. package/src/nodes/core/NodeError.js +28 -0
  388. package/src/nodes/core/NodeFrame.js +12 -4
  389. package/src/nodes/core/NodeUtils.js +20 -18
  390. package/src/nodes/core/OutputStructNode.js +13 -11
  391. package/src/nodes/core/OverrideContextNode.js +153 -0
  392. package/src/nodes/core/ParameterNode.js +4 -4
  393. package/src/nodes/core/PropertyNode.js +66 -4
  394. package/src/nodes/core/StackNode.js +91 -20
  395. package/src/nodes/core/StackTrace.js +139 -0
  396. package/src/nodes/core/StructNode.js +20 -8
  397. package/src/nodes/core/StructTypeNode.js +17 -23
  398. package/src/nodes/core/SubBuildNode.js +2 -2
  399. package/src/nodes/core/UniformGroupNode.js +36 -6
  400. package/src/nodes/core/UniformNode.js +21 -5
  401. package/src/nodes/core/VarNode.js +56 -23
  402. package/src/nodes/core/VaryingNode.js +14 -21
  403. package/src/nodes/display/BlendModes.js +1 -105
  404. package/src/nodes/display/BumpMapNode.js +6 -1
  405. package/src/nodes/display/ColorAdjustment.js +27 -9
  406. package/src/nodes/display/ColorSpaceNode.js +3 -3
  407. package/src/nodes/display/FrontFacingNode.js +38 -9
  408. package/src/nodes/display/NormalMapNode.js +41 -6
  409. package/src/nodes/display/PassNode.js +157 -56
  410. package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
  411. package/src/nodes/display/RenderOutputNode.js +19 -10
  412. package/src/nodes/display/ScreenNode.js +4 -2
  413. package/src/nodes/display/ToneMappingNode.js +1 -1
  414. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  415. package/src/nodes/display/ViewportDepthNode.js +52 -4
  416. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  417. package/src/nodes/display/ViewportTextureNode.js +39 -11
  418. package/src/nodes/fog/Fog.js +18 -35
  419. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  420. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  421. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  422. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  423. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  424. package/src/nodes/functions/VolumetricLightingModel.js +40 -7
  425. package/src/nodes/geometry/RangeNode.js +5 -3
  426. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  427. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  428. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  429. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  430. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  431. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
  432. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  433. package/src/nodes/lighting/EnvironmentNode.js +30 -5
  434. package/src/nodes/lighting/IESSpotLightNode.js +40 -2
  435. package/src/nodes/lighting/LightingContextNode.js +10 -2
  436. package/src/nodes/lighting/LightsNode.js +97 -65
  437. package/src/nodes/lighting/PointShadowNode.js +166 -148
  438. package/src/nodes/lighting/ShadowFilterNode.js +74 -117
  439. package/src/nodes/lighting/ShadowNode.js +149 -51
  440. package/src/nodes/materialx/lib/mx_noise.js +2 -2
  441. package/src/nodes/math/BitcastNode.js +1 -1
  442. package/src/nodes/math/BitcountNode.js +433 -0
  443. package/src/nodes/math/ConditionalNode.js +6 -6
  444. package/src/nodes/math/MathNode.js +115 -52
  445. package/src/nodes/math/OperatorNode.js +24 -23
  446. package/src/nodes/math/PackFloatNode.js +98 -0
  447. package/src/nodes/math/UnpackFloatNode.js +96 -0
  448. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  449. package/src/nodes/pmrem/PMREMNode.js +34 -3
  450. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  451. package/src/nodes/tsl/TSLBase.js +1 -1
  452. package/src/nodes/tsl/TSLCore.js +99 -33
  453. package/src/nodes/utils/ArrayElementNode.js +14 -1
  454. package/src/nodes/utils/ConvertNode.js +1 -1
  455. package/src/nodes/utils/DebugNode.js +12 -12
  456. package/src/nodes/utils/EquirectUV.js +30 -5
  457. package/src/nodes/utils/EventNode.js +31 -2
  458. package/src/nodes/utils/FlipNode.js +1 -1
  459. package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
  460. package/src/nodes/utils/JoinNode.js +3 -3
  461. package/src/nodes/utils/LoopNode.js +1 -1
  462. package/src/nodes/utils/MemberNode.js +2 -2
  463. package/src/nodes/utils/Packing.js +48 -5
  464. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  465. package/src/nodes/utils/RTTNode.js +41 -25
  466. package/src/nodes/utils/ReflectorNode.js +4 -4
  467. package/src/nodes/utils/Remap.js +48 -0
  468. package/src/nodes/utils/RotateNode.js +1 -1
  469. package/src/nodes/utils/SampleNode.js +1 -1
  470. package/src/nodes/utils/SetNode.js +1 -1
  471. package/src/nodes/utils/SplitNode.js +1 -1
  472. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  473. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  474. package/src/nodes/utils/UVUtils.js +28 -0
  475. package/src/objects/BatchedMesh.js +66 -30
  476. package/src/objects/InstancedMesh.js +19 -3
  477. package/src/objects/Line.js +1 -1
  478. package/src/objects/Mesh.js +1 -1
  479. package/src/objects/Points.js +1 -1
  480. package/src/objects/SkinnedMesh.js +26 -9
  481. package/src/renderers/WebGLRenderer.js +344 -156
  482. package/src/renderers/common/Animation.js +3 -3
  483. package/src/renderers/common/Attributes.js +15 -1
  484. package/src/renderers/common/Backend.js +78 -13
  485. package/src/renderers/common/Background.js +26 -13
  486. package/src/renderers/common/BindGroup.js +1 -16
  487. package/src/renderers/common/Binding.js +11 -0
  488. package/src/renderers/common/Bindings.js +141 -57
  489. package/src/renderers/common/BlendMode.js +143 -0
  490. package/src/renderers/common/Buffer.js +49 -0
  491. package/src/renderers/common/BundleGroup.js +1 -1
  492. package/src/renderers/common/ChainMap.js +30 -6
  493. package/src/renderers/common/ClippingContext.js +10 -2
  494. package/src/renderers/common/ComputePipeline.js +1 -1
  495. package/src/renderers/common/CubeRenderTarget.js +51 -7
  496. package/src/renderers/common/Geometries.js +29 -3
  497. package/src/renderers/common/Info.js +374 -4
  498. package/src/renderers/common/InspectorBase.js +6 -1
  499. package/src/renderers/common/Lighting.js +51 -19
  500. package/src/renderers/common/Pipelines.js +40 -7
  501. package/src/renderers/common/PostProcessing.js +8 -206
  502. package/src/renderers/common/ReadbackBuffer.js +78 -0
  503. package/src/renderers/common/RenderBundle.js +3 -1
  504. package/src/renderers/common/RenderBundles.js +7 -3
  505. package/src/renderers/common/RenderContext.js +16 -0
  506. package/src/renderers/common/RenderContexts.js +33 -49
  507. package/src/renderers/common/RenderList.js +41 -4
  508. package/src/renderers/common/RenderLists.js +2 -1
  509. package/src/renderers/common/RenderObject.js +88 -16
  510. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  511. package/src/renderers/common/RenderObjects.js +21 -5
  512. package/src/renderers/common/RenderPipeline.js +232 -17
  513. package/src/renderers/common/Renderer.js +700 -163
  514. package/src/renderers/common/Sampler.js +16 -48
  515. package/src/renderers/common/StorageBuffer.js +13 -1
  516. package/src/renderers/common/Textures.js +121 -9
  517. package/src/renderers/common/TimestampQueryPool.js +6 -4
  518. package/src/renderers/common/Uniform.js +8 -0
  519. package/src/renderers/common/UniformsGroup.js +84 -1
  520. package/src/renderers/common/XRManager.js +377 -51
  521. package/src/renderers/common/extras/PMREMGenerator.js +40 -61
  522. package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
  523. package/src/renderers/common/nodes/NodeLibrary.js +4 -4
  524. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
  525. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  526. package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
  527. package/src/renderers/shaders/DFGLUTData.js +19 -34
  528. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  529. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  530. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  531. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  532. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  533. package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
  534. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
  535. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  536. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
  537. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  538. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
  539. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  540. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  541. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  542. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  543. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
  544. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  545. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  546. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
  547. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  548. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
  549. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  550. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  551. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  552. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  553. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  554. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
  555. package/src/renderers/shaders/ShaderChunk.js +5 -3
  556. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  557. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  558. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
  559. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  560. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  561. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  562. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  563. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  564. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  565. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  566. package/src/renderers/shaders/ShaderLib.js +7 -6
  567. package/src/renderers/shaders/UniformsLib.js +7 -5
  568. package/src/renderers/shaders/UniformsUtils.js +27 -5
  569. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  570. package/src/renderers/webgl/WebGLBackground.js +15 -15
  571. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  572. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  573. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  574. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  575. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  576. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  577. package/src/renderers/webgl/WebGLLights.js +18 -1
  578. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  579. package/src/renderers/webgl/WebGLObjects.js +3 -1
  580. package/src/renderers/webgl/WebGLOutput.js +271 -0
  581. package/src/renderers/webgl/WebGLProgram.js +54 -113
  582. package/src/renderers/webgl/WebGLPrograms.js +74 -55
  583. package/src/renderers/webgl/WebGLRenderLists.js +24 -1
  584. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  585. package/src/renderers/webgl/WebGLShaderCache.js +5 -11
  586. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  587. package/src/renderers/webgl/WebGLState.js +75 -37
  588. package/src/renderers/webgl/WebGLTextures.js +230 -56
  589. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  590. package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
  591. package/src/renderers/webgl/WebGLUtils.js +6 -2
  592. package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
  593. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  594. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
  595. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  596. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  597. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  598. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
  599. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  600. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
  601. package/src/renderers/webgpu/WebGPUBackend.js +733 -302
  602. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  603. package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
  604. package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
  605. package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
  606. package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
  607. package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
  608. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
  609. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
  610. package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
  611. package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
  612. package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
  613. package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
  614. package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
  615. package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
  616. package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
  617. package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
  618. package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
  619. package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
  620. package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
  621. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
  622. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
  623. package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
  624. package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
  625. package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
  626. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
  627. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
  628. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
  629. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
  630. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
  631. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  632. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  633. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
  634. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
  635. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
  636. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
  637. package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
  638. package/src/renderers/webxr/WebXRController.js +12 -0
  639. package/src/renderers/webxr/WebXRManager.js +4 -2
  640. package/src/textures/CubeDepthTexture.js +76 -0
  641. package/src/textures/DepthTexture.js +1 -1
  642. package/src/textures/ExternalTexture.js +0 -3
  643. package/src/textures/HTMLTexture.js +74 -0
  644. package/src/textures/Source.js +2 -2
  645. package/src/textures/Texture.js +16 -5
  646. package/src/utils.js +280 -3
  647. package/examples/fonts/LICENSE +0 -13
  648. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  649. package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
  650. package/examples/fonts/README.md +0 -11
  651. package/examples/fonts/droid/NOTICE +0 -190
  652. package/examples/fonts/droid/README.txt +0 -18
  653. package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
  654. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
  655. package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
  656. package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
  657. package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
  658. package/examples/fonts/gentilis_bold.typeface.json +0 -1
  659. package/examples/fonts/gentilis_regular.typeface.json +0 -1
  660. package/examples/fonts/helvetiker_bold.typeface.json +0 -1
  661. package/examples/fonts/helvetiker_regular.typeface.json +0 -1
  662. package/examples/fonts/optimer_bold.typeface.json +0 -1
  663. package/examples/fonts/optimer_regular.typeface.json +0 -1
  664. package/examples/fonts/ttf/README.md +0 -9
  665. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  666. package/examples/jsm/libs/ammo.wasm.js +0 -822
  667. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  668. package/examples/jsm/libs/draco/draco_encoder.js +0 -33
  669. package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
  670. package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
  671. package/examples/jsm/libs/opentype.module.js +0 -14506
  672. package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
  673. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
  674. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  675. package/examples/jsm/lighting/TiledLighting.js +0 -42
  676. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  677. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  678. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  679. package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
  680. package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
  681. package/src/nodes/accessors/BatchNode.js +0 -163
  682. package/src/nodes/accessors/InstanceNode.js +0 -244
  683. package/src/nodes/accessors/InstancedMeshNode.js +0 -50
  684. package/src/nodes/accessors/SceneNode.js +0 -145
  685. package/src/nodes/accessors/SkinningNode.js +0 -327
  686. package/src/nodes/code/ScriptableNode.js +0 -726
  687. package/src/nodes/code/ScriptableValueNode.js +0 -253
  688. package/src/nodes/display/PosterizeNode.js +0 -65
  689. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  690. package/src/nodes/utils/RemapNode.js +0 -125
  691. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  692. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  693. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -886,17 +886,39 @@ class MaterialXNode {
886
886
  material.specularIntensityNode = specularIntensityNode || float( 0.5 );
887
887
  material.specularColorNode = specularColorNode || color( 1.0, 1.0, 1.0 );
888
888
  material.iorNode = iorNode || float( 1.5 );
889
- material.anisotropyNode = anisotropyNode || float( 0 );
890
- material.anisotropyRotationNode = anisotropyRotationNode || float( 0 );
891
- material.transmissionNode = transmissionNode || float( 0 );
892
- material.transmissionColorNode = transmissionColorNode || color( 1.0, 1.0, 1.0 );
889
+
890
+ if ( anisotropyNode !== null ) {
891
+
892
+ material.anisotropyNode = anisotropyNode;
893
+ material.anisotropyRotationNode = anisotropyRotationNode || float( 0 );
894
+
895
+ }
896
+
897
+ if ( transmissionNode !== null ) {
898
+
899
+ material.transmissionNode = transmissionNode;
900
+ material.transmissionColorNode = transmissionColorNode || color( 1.0, 1.0, 1.0 );
901
+
902
+ }
903
+
893
904
  material.thinFilmThicknessNode = thinFilmThicknessNode || float( 0 );
894
905
  material.thinFilmIorNode = thinFilmIorNode || float( 1.5 );
895
- material.sheenNode = sheenNode || float( 0 );
896
- material.sheenColorNode = sheenColorNode || color( 1.0, 1.0, 1.0 );
897
- material.sheenRoughnessNode = sheenRoughnessNode || float( 0.5 );
898
- material.clearcoatNode = clearcoatNode || float( 0 );
899
- material.clearcoatRoughnessNode = clearcoatRoughnessNode || float( 0 );
906
+
907
+ if ( sheenNode !== null ) {
908
+
909
+ material.sheenNode = sheenNode;
910
+ material.sheenColorNode = sheenColorNode || color( 1.0, 1.0, 1.0 );
911
+ material.sheenRoughnessNode = sheenRoughnessNode || float( 0.5 );
912
+
913
+ }
914
+
915
+ if ( clearcoatNode !== null ) {
916
+
917
+ material.clearcoatNode = clearcoatNode;
918
+ material.clearcoatRoughnessNode = clearcoatRoughnessNode || float( 0 );
919
+
920
+ }
921
+
900
922
  if ( normalNode ) material.normalNode = normalNode;
901
923
  if ( emissiveNode ) material.emissiveNode = emissiveNode;
902
924
 
@@ -4,7 +4,7 @@ import {
4
4
  Matrix4,
5
5
  Vector3
6
6
  } from 'three';
7
- import * as fflate from '../libs/fflate.module.js';
7
+ import { gunzipSync } from '../libs/fflate.module.js';
8
8
  import { Volume } from '../misc/Volume.js';
9
9
 
10
10
  /**
@@ -223,13 +223,13 @@ class NRRDLoader extends Loader {
223
223
 
224
224
  if ( ! headerObject.isNrrd ) {
225
225
 
226
- throw new Error( 'Not an NRRD file' );
226
+ throw new Error( 'THREE.NRRDLoader: Not an NRRD file' );
227
227
 
228
228
  }
229
229
 
230
230
  if ( headerObject.encoding === 'bz2' || headerObject.encoding === 'bzip2' ) {
231
231
 
232
- throw new Error( 'Bzip is not supported' );
232
+ throw new Error( 'THREE.NRRDLoader: Bzip is not supported' );
233
233
 
234
234
  }
235
235
 
@@ -356,7 +356,7 @@ class NRRDLoader extends Loader {
356
356
 
357
357
  // we need to decompress the datastream
358
358
  // here we start the unzipping and get a typed Uint8Array back
359
- _data = fflate.gunzipSync( new Uint8Array( _data ) );
359
+ _data = gunzipSync( new Uint8Array( _data ) );
360
360
 
361
361
  } else if ( headerObject.encoding === 'ascii' || headerObject.encoding === 'text' || headerObject.encoding === 'txt' || headerObject.encoding === 'hex' ) {
362
362
 
@@ -598,7 +598,7 @@ const _fieldFunctions = {
598
598
  this.__array = Float64Array;
599
599
  break;
600
600
  default:
601
- throw new Error( 'Unsupported NRRD data type: ' + data );
601
+ throw new Error( 'THREE.NRRDLoader: Unsupported NRRD data type: ' + data );
602
602
 
603
603
  }
604
604
 
@@ -100,6 +100,7 @@ class PCDLoader extends Loader {
100
100
  /**
101
101
  * Get dataview value by field type and size.
102
102
  *
103
+ * @private
103
104
  * @param {DataView} dataview - The DataView to read from.
104
105
  * @param {number} offset - The offset to start reading from.
105
106
  * @param {'F' | 'U' | 'I'} type - Field type.
@@ -187,8 +188,8 @@ class PCDLoader extends Loader {
187
188
  if ( ctrl < ( 1 << 5 ) ) {
188
189
 
189
190
  ctrl ++;
190
- if ( outPtr + ctrl > outLength ) throw new Error( 'Output buffer is not large enough' );
191
- if ( inPtr + ctrl > inLength ) throw new Error( 'Invalid compressed data' );
191
+ if ( outPtr + ctrl > outLength ) throw new Error( 'THREE.PCDLoader: Output buffer is not large enough' );
192
+ if ( inPtr + ctrl > inLength ) throw new Error( 'THREE.PCDLoader: Invalid compressed data' );
192
193
  do {
193
194
 
194
195
  outData[ outPtr ++ ] = inData[ inPtr ++ ];
@@ -199,18 +200,18 @@ class PCDLoader extends Loader {
199
200
 
200
201
  len = ctrl >> 5;
201
202
  ref = outPtr - ( ( ctrl & 0x1f ) << 8 ) - 1;
202
- if ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );
203
+ if ( inPtr >= inLength ) throw new Error( 'THREE.PCDLoader: Invalid compressed data' );
203
204
  if ( len === 7 ) {
204
205
 
205
206
  len += inData[ inPtr ++ ];
206
- if ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );
207
+ if ( inPtr >= inLength ) throw new Error( 'THREE.PCDLoader: Invalid compressed data' );
207
208
 
208
209
  }
209
210
 
210
211
  ref -= inData[ inPtr ++ ];
211
- if ( outPtr + len + 2 > outLength ) throw new Error( 'Output buffer is not large enough' );
212
- if ( ref < 0 ) throw new Error( 'Invalid compressed data' );
213
- if ( ref >= outPtr ) throw new Error( 'Invalid compressed data' );
212
+ if ( outPtr + len + 2 > outLength ) throw new Error( 'THREE.PCDLoader: Output buffer is not large enough' );
213
+ if ( ref < 0 ) throw new Error( 'THREE.PCDLoader: Invalid compressed data' );
214
+ if ( ref >= outPtr ) throw new Error( 'THREE.PCDLoader: Invalid compressed data' );
214
215
  do {
215
216
 
216
217
  outData[ outPtr ++ ] = outData[ ref ++ ];
@@ -517,7 +518,7 @@ class PCDLoader extends Loader {
517
518
  if ( offset.label !== undefined ) {
518
519
 
519
520
  const labelIndex = PCDheader.fields.indexOf( 'label' );
520
- label.push( dataview.getInt32( ( PCDheader.points * offset.label ) + PCDheader.size[ labelIndex ] * i, this.littleEndian ) );
521
+ label.push( this._getDataView( dataview, ( PCDheader.points * offset.label ) + PCDheader.size[ labelIndex ] * i, PCDheader.type[ labelIndex ], PCDheader.size[ labelIndex ] ) );
521
522
 
522
523
  }
523
524
 
@@ -577,7 +578,8 @@ class PCDLoader extends Loader {
577
578
 
578
579
  if ( offset.label !== undefined ) {
579
580
 
580
- label.push( dataview.getInt32( row + offset.label, this.littleEndian ) );
581
+ const labelIndex = PCDheader.fields.indexOf( 'label' );
582
+ label.push( this._getDataView( dataview, row + offset.label, PCDheader.type[ labelIndex ], PCDheader.size[ labelIndex ] ) );
581
583
 
582
584
  }
583
585
 
@@ -1,8 +1,15 @@
1
1
  import {
2
2
  BufferGeometry,
3
3
  FileLoader,
4
+ BufferAttribute,
4
5
  Float32BufferAttribute,
6
+ Int8BufferAttribute,
7
+ Int16BufferAttribute,
8
+ Int32BufferAttribute,
5
9
  Loader,
10
+ Uint8BufferAttribute,
11
+ Uint16BufferAttribute,
12
+ Uint32BufferAttribute,
6
13
  Color,
7
14
  SRGBColorSpace
8
15
  } from 'three';
@@ -317,7 +324,8 @@ class PLYLoader extends Loader {
317
324
  uvs: [],
318
325
  faceVertexUvs: [],
319
326
  colors: [],
320
- faceVertexColors: []
327
+ faceVertexColors: [],
328
+ descriptors: {}
321
329
  };
322
330
 
323
331
  for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
@@ -330,21 +338,52 @@ class PLYLoader extends Loader {
330
338
 
331
339
  }
332
340
 
333
- function mapElementAttributes( properties ) {
334
341
 
335
- const elementNames = properties.map( property => {
342
+ function getBufferAttributeClass( type ) {
336
343
 
337
- return property.name;
344
+ switch ( type ) {
345
+
346
+ case 'int8': case 'char': return Int8BufferAttribute;
347
+ case 'uint8': case 'uchar': return Uint8BufferAttribute;
348
+ case 'int16': case 'short': return Int16BufferAttribute;
349
+ case 'uint16': case 'ushort': return Uint16BufferAttribute;
350
+ case 'int32': case 'int': return Int32BufferAttribute;
351
+ case 'uint32': case 'uint': return Uint32BufferAttribute;
352
+ case 'float32': case 'float': return Float32BufferAttribute;
353
+ case 'float64': case 'double': return Float64BufferAttribute;
354
+
355
+ }
356
+
357
+ }
358
+
359
+ function getColorScale( type ) {
360
+
361
+ switch ( type ) {
362
+
363
+ case 'uchar': case 'uint8': return 1 / 255;
364
+ case 'ushort': case 'uint16': return 1 / 65535;
365
+ case 'float': case 'float32':
366
+ case 'double': case 'float64': return 1;
367
+ default: return 1 / 255;
368
+
369
+ }
370
+
371
+ }
372
+
373
+ function isFloatType( type ) {
374
+
375
+ return type === 'float' || type === 'float32' || type === 'double' || type === 'float64';
338
376
 
339
- } );
377
+ }
340
378
 
341
- function findAttrName( names ) {
379
+ function getAttributeDescriptor( properties ) {
342
380
 
343
- for ( let i = 0, l = names.length; i < l; i ++ ) {
381
+ function findProperty( names ) {
344
382
 
345
- const name = names[ i ];
383
+ for ( const name of names ) {
346
384
 
347
- if ( elementNames.includes( name ) ) return name;
385
+ const property = properties.find( p => p.name === name );
386
+ if ( property ) return property;
348
387
 
349
388
  }
350
389
 
@@ -352,18 +391,67 @@ class PLYLoader extends Loader {
352
391
 
353
392
  }
354
393
 
394
+ // property lookup
395
+
396
+ const x = findProperty( [ 'x', 'px', 'posx' ] );
397
+ const y = findProperty( [ 'y', 'py', 'posy' ] );
398
+ const z = findProperty( [ 'z', 'pz', 'posz' ] );
399
+ const nx = findProperty( [ 'nx', 'normalx' ] );
400
+ const ny = findProperty( [ 'ny', 'normaly' ] );
401
+ const nz = findProperty( [ 'nz', 'normalz' ] );
402
+ const s = findProperty( [ 's', 'u', 'texture_u', 'tx' ] );
403
+ const t = findProperty( [ 't', 'v', 'texture_v', 'ty' ] );
404
+ const r = findProperty( [ 'red', 'diffuse_red', 'r', 'diffuse_r' ] );
405
+ const g = findProperty( [ 'green', 'diffuse_green', 'g', 'diffuse_g' ] );
406
+ const b = findProperty( [ 'blue', 'diffuse_blue', 'b', 'diffuse_b' ] );
407
+ const texcoord = findProperty( [ 'texcoord' ] );
408
+
409
+ // custom property lookup
410
+
411
+ const custom = {};
412
+
413
+ for ( const customAttr of Object.keys( scope.customPropertyMapping ) ) {
414
+
415
+ const propNames = scope.customPropertyMapping[ customAttr ];
416
+ const matched = propNames.map( name => properties.find( p => p.name === name ) );
417
+ const types = matched.filter( p => p ).map( p => p.type );
418
+ const uniform = types.length > 0 && types.every( type => type === types[ 0 ] );
419
+
420
+ custom[ customAttr ] = {
421
+ type: uniform ? types[ 0 ] : 'float32',
422
+ usage: matched.every( p => p !== undefined ),
423
+ };
424
+
425
+ }
426
+
427
+ // build descriptor
428
+
355
429
  return {
356
- attrX: findAttrName( [ 'x', 'px', 'posx' ] ) || 'x',
357
- attrY: findAttrName( [ 'y', 'py', 'posy' ] ) || 'y',
358
- attrZ: findAttrName( [ 'z', 'pz', 'posz' ] ) || 'z',
359
- attrNX: findAttrName( [ 'nx', 'normalx' ] ),
360
- attrNY: findAttrName( [ 'ny', 'normaly' ] ),
361
- attrNZ: findAttrName( [ 'nz', 'normalz' ] ),
362
- attrS: findAttrName( [ 's', 'u', 'texture_u', 'tx' ] ),
363
- attrT: findAttrName( [ 't', 'v', 'texture_v', 'ty' ] ),
364
- attrR: findAttrName( [ 'red', 'diffuse_red', 'r', 'diffuse_r' ] ),
365
- attrG: findAttrName( [ 'green', 'diffuse_green', 'g', 'diffuse_g' ] ),
366
- attrB: findAttrName( [ 'blue', 'diffuse_blue', 'b', 'diffuse_b' ] ),
430
+ position: {
431
+ names: [ x ? x.name : 'x', y ? y.name : 'y', z ? z.name : 'z' ],
432
+ type: x ? x.type : 'float32',
433
+ usage: !! ( x && y && z ),
434
+ },
435
+ normal: {
436
+ names: [ nx ? nx.name : 'nx', ny ? ny.name : 'ny', nz ? nz.name : 'nz' ],
437
+ type: nx ? nx.type : 'float32',
438
+ usage: !! ( nx && ny && nz ),
439
+ },
440
+ uv: {
441
+ names: [ s ? s.name : 's', t ? t.name : 't' ],
442
+ type: s ? s.type : 'float32',
443
+ usage: !! ( s && t ),
444
+ },
445
+ texcoord: {
446
+ type: texcoord ? texcoord.itemType : 'float32',
447
+ usage: !! texcoord,
448
+ },
449
+ color: {
450
+ names: [ r ? r.name : 'red', g ? g.name : 'green', b ? b.name : 'blue' ],
451
+ type: r ? r.type : 'uchar',
452
+ usage: !! ( r && g && b ),
453
+ },
454
+ custom: custom,
367
455
  };
368
456
 
369
457
  }
@@ -392,7 +480,8 @@ class PLYLoader extends Loader {
392
480
  loop: for ( let i = 0; i < header.elements.length; i ++ ) {
393
481
 
394
482
  const elementDesc = header.elements[ i ];
395
- const attributeMap = mapElementAttributes( elementDesc.properties );
483
+ const attributeDescriptor = getAttributeDescriptor( elementDesc.properties );
484
+ buffer.descriptors[ elementDesc.name ] = attributeDescriptor;
396
485
 
397
486
  for ( let j = 0; j < elementDesc.count; j ++ ) {
398
487
 
@@ -400,7 +489,7 @@ class PLYLoader extends Loader {
400
489
 
401
490
  if ( ! element ) break loop;
402
491
 
403
- handleElement( buffer, elementDesc.name, element, attributeMap );
492
+ handleElement( buffer, elementDesc.name, element, attributeDescriptor );
404
493
 
405
494
  }
406
495
 
@@ -414,6 +503,8 @@ class PLYLoader extends Loader {
414
503
 
415
504
  let geometry = new BufferGeometry();
416
505
 
506
+ const vertexDescriptor = buffer.descriptors.vertex;
507
+
417
508
  // mandatory buffer data
418
509
 
419
510
  if ( buffer.indices.length > 0 ) {
@@ -422,25 +513,32 @@ class PLYLoader extends Loader {
422
513
 
423
514
  }
424
515
 
425
- geometry.setAttribute( 'position', new Float32BufferAttribute( buffer.vertices, 3 ) );
516
+ const PositionClass = getBufferAttributeClass( vertexDescriptor ? vertexDescriptor.position.type : 'float32' );
517
+ geometry.setAttribute( 'position', new PositionClass( buffer.vertices, 3 ) );
426
518
 
427
519
  // optional buffer data
428
520
 
429
521
  if ( buffer.normals.length > 0 ) {
430
522
 
431
- geometry.setAttribute( 'normal', new Float32BufferAttribute( buffer.normals, 3 ) );
523
+ const NormalClass = getBufferAttributeClass( vertexDescriptor.normal.type );
524
+ geometry.setAttribute( 'normal', new NormalClass( buffer.normals, 3 ) );
432
525
 
433
526
  }
434
527
 
435
528
  if ( buffer.uvs.length > 0 ) {
436
529
 
437
- geometry.setAttribute( 'uv', new Float32BufferAttribute( buffer.uvs, 2 ) );
530
+ const UvClass = getBufferAttributeClass( vertexDescriptor.uv.type );
531
+ geometry.setAttribute( 'uv', new UvClass( buffer.uvs, 2 ) );
438
532
 
439
533
  }
440
534
 
441
535
  if ( buffer.colors.length > 0 ) {
442
536
 
443
- geometry.setAttribute( 'color', new Float32BufferAttribute( buffer.colors, 3 ) );
537
+ const colorType = vertexDescriptor.color.type;
538
+ const normalized = ! isFloatType( colorType );
539
+
540
+ const ColorClass = getBufferAttributeClass( colorType );
541
+ geometry.setAttribute( 'color', new ColorClass( buffer.colors, 3, normalized ) );
444
542
 
445
543
  }
446
544
 
@@ -448,8 +546,22 @@ class PLYLoader extends Loader {
448
546
 
449
547
  geometry = geometry.toNonIndexed();
450
548
 
451
- if ( buffer.faceVertexUvs.length > 0 ) geometry.setAttribute( 'uv', new Float32BufferAttribute( buffer.faceVertexUvs, 2 ) );
452
- if ( buffer.faceVertexColors.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( buffer.faceVertexColors, 3 ) );
549
+ if ( buffer.faceVertexUvs.length > 0 ) {
550
+
551
+ const UvClass = getBufferAttributeClass( buffer.descriptors.face.texcoord.type );
552
+ geometry.setAttribute( 'uv', new UvClass( buffer.faceVertexUvs, 2 ) );
553
+
554
+ }
555
+
556
+ if ( buffer.faceVertexColors.length > 0 ) {
557
+
558
+ const colorType = buffer.descriptors.face.color.type;
559
+ const normalized = ! isFloatType( colorType );
560
+
561
+ const ColorClass = getBufferAttributeClass( colorType );
562
+ geometry.setAttribute( 'color', new ColorClass( buffer.faceVertexColors, 3, normalized ) );
563
+
564
+ }
453
565
 
454
566
  }
455
567
 
@@ -459,13 +571,8 @@ class PLYLoader extends Loader {
459
571
 
460
572
  if ( buffer[ customProperty ].length > 0 ) {
461
573
 
462
- geometry.setAttribute(
463
- customProperty,
464
- new Float32BufferAttribute(
465
- buffer[ customProperty ],
466
- scope.customPropertyMapping[ customProperty ].length
467
- )
468
- );
574
+ const CustomClass = getBufferAttributeClass( vertexDescriptor.custom[ customProperty ].type );
575
+ geometry.setAttribute( customProperty, new CustomClass( buffer[ customProperty ], scope.customPropertyMapping[ customProperty ].length ) );
469
576
 
470
577
  }
471
578
 
@@ -477,34 +584,64 @@ class PLYLoader extends Loader {
477
584
 
478
585
  }
479
586
 
480
- function handleElement( buffer, elementName, element, cacheEntry ) {
587
+ function handleElement( buffer, elementName, element, attributeDescriptor ) {
481
588
 
482
589
  if ( elementName === 'vertex' ) {
483
590
 
484
- buffer.vertices.push( element[ cacheEntry.attrX ], element[ cacheEntry.attrY ], element[ cacheEntry.attrZ ] );
591
+ const { position, normal, uv, color } = attributeDescriptor;
592
+
593
+ if ( position.usage ) {
594
+
595
+ buffer.vertices.push(
596
+ element[ position.names[ 0 ] ],
597
+ element[ position.names[ 1 ] ],
598
+ element[ position.names[ 2 ] ]
599
+ );
600
+
601
+ }
485
602
 
486
- if ( cacheEntry.attrNX !== null && cacheEntry.attrNY !== null && cacheEntry.attrNZ !== null ) {
603
+ if ( normal.usage ) {
487
604
 
488
- buffer.normals.push( element[ cacheEntry.attrNX ], element[ cacheEntry.attrNY ], element[ cacheEntry.attrNZ ] );
605
+ buffer.normals.push(
606
+ element[ normal.names[ 0 ] ],
607
+ element[ normal.names[ 1 ] ],
608
+ element[ normal.names[ 2 ] ]
609
+ );
489
610
 
490
611
  }
491
612
 
492
- if ( cacheEntry.attrS !== null && cacheEntry.attrT !== null ) {
613
+ if ( uv.usage ) {
493
614
 
494
- buffer.uvs.push( element[ cacheEntry.attrS ], element[ cacheEntry.attrT ] );
615
+ buffer.uvs.push(
616
+ element[ uv.names[ 0 ] ],
617
+ element[ uv.names[ 1 ] ]
618
+ );
495
619
 
496
620
  }
497
621
 
498
- if ( cacheEntry.attrR !== null && cacheEntry.attrG !== null && cacheEntry.attrB !== null ) {
622
+ if ( color.usage ) {
623
+
624
+ const scale = getColorScale( color.type );
625
+ const isFloat = isFloatType( color.type );
626
+
627
+ // convert to float for color space conversion
499
628
 
500
629
  _color.setRGB(
501
- element[ cacheEntry.attrR ] / 255.0,
502
- element[ cacheEntry.attrG ] / 255.0,
503
- element[ cacheEntry.attrB ] / 255.0,
630
+ element[ color.names[ 0 ] ] * scale,
631
+ element[ color.names[ 1 ] ] * scale,
632
+ element[ color.names[ 2 ] ] * scale,
504
633
  SRGBColorSpace
505
634
  );
506
635
 
507
- buffer.colors.push( _color.r, _color.g, _color.b );
636
+ // convert back to original type
637
+
638
+ const invScale = 1 / scale;
639
+
640
+ buffer.colors.push(
641
+ isFloat ? _color.r : Math.round( _color.r * invScale ),
642
+ isFloat ? _color.g : Math.round( _color.g * invScale ),
643
+ isFloat ? _color.b : Math.round( _color.b * invScale )
644
+ );
508
645
 
509
646
  }
510
647
 
@@ -544,17 +681,32 @@ class PLYLoader extends Loader {
544
681
 
545
682
  // face colors
546
683
 
547
- if ( cacheEntry.attrR !== null && cacheEntry.attrG !== null && cacheEntry.attrB !== null ) {
684
+ const { color } = attributeDescriptor;
685
+
686
+ if ( color.usage ) {
687
+
688
+ // convert to float for color space conversion
689
+
690
+ const scale = getColorScale( color.type );
548
691
 
549
692
  _color.setRGB(
550
- element[ cacheEntry.attrR ] / 255.0,
551
- element[ cacheEntry.attrG ] / 255.0,
552
- element[ cacheEntry.attrB ] / 255.0,
693
+ element[ color.names[ 0 ] ] * scale,
694
+ element[ color.names[ 1 ] ] * scale,
695
+ element[ color.names[ 2 ] ] * scale,
553
696
  SRGBColorSpace
554
697
  );
555
- buffer.faceVertexColors.push( _color.r, _color.g, _color.b );
556
- buffer.faceVertexColors.push( _color.r, _color.g, _color.b );
557
- buffer.faceVertexColors.push( _color.r, _color.g, _color.b );
698
+
699
+ // convert back to original type
700
+
701
+ const invScale = 1 / scale;
702
+
703
+ const r = _color.r * invScale;
704
+ const g = _color.g * invScale;
705
+ const b = _color.b * invScale;
706
+
707
+ buffer.faceVertexColors.push( r, g, b );
708
+ buffer.faceVertexColors.push( r, g, b );
709
+ buffer.faceVertexColors.push( r, g, b );
558
710
 
559
711
  }
560
712
 
@@ -684,7 +836,8 @@ class PLYLoader extends Loader {
684
836
 
685
837
  const elementDesc = header.elements[ currentElement ];
686
838
  const properties = elementDesc.properties;
687
- const attributeMap = mapElementAttributes( properties );
839
+ const attributeDescriptor = getAttributeDescriptor( properties );
840
+ buffer.descriptors[ elementDesc.name ] = attributeDescriptor;
688
841
 
689
842
  setPropertyBinaryReaders( properties, body, little_endian );
690
843
 
@@ -694,7 +847,7 @@ class PLYLoader extends Loader {
694
847
  loc += result[ 1 ];
695
848
  const element = result[ 0 ];
696
849
 
697
- handleElement( buffer, elementDesc.name, element, attributeMap );
850
+ handleElement( buffer, elementDesc.name, element, attributeDescriptor );
698
851
 
699
852
  }
700
853
 
@@ -779,6 +932,16 @@ class PLYLoader extends Loader {
779
932
 
780
933
  }
781
934
 
935
+ class Float64BufferAttribute extends BufferAttribute {
936
+
937
+ constructor( array, itemSize, normalized ) {
938
+
939
+ super( new Float64Array( array ), itemSize, normalized );
940
+
941
+ }
942
+
943
+ }
944
+
782
945
  class ArrayStream {
783
946
 
784
947
  constructor( arr ) {