@needle-tools/three 0.169.20-experimental.0 → 0.183.2-canary.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 (1051) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +5 -6
  3. package/build/three.cjs +54184 -56703
  4. package/build/three.core.js +59506 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +11645 -73000
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +648 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +53912 -51652
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +53888 -51806
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  15. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  16. package/examples/jsm/Addons.js +5 -15
  17. package/examples/jsm/animation/AnimationClipCreator.js +58 -6
  18. package/examples/jsm/animation/CCDIKSolver.js +152 -45
  19. package/examples/jsm/capabilities/WebGL.js +28 -29
  20. package/examples/jsm/capabilities/WebGPU.js +19 -17
  21. package/examples/jsm/controls/ArcballControls.js +474 -178
  22. package/examples/jsm/controls/DragControls.js +100 -58
  23. package/examples/jsm/controls/FirstPersonControls.js +116 -6
  24. package/examples/jsm/controls/FlyControls.js +50 -2
  25. package/examples/jsm/controls/MapControls.js +96 -8
  26. package/examples/jsm/controls/OrbitControls.js +496 -57
  27. package/examples/jsm/controls/PointerLockControls.js +115 -22
  28. package/examples/jsm/controls/TrackballControls.js +166 -14
  29. package/examples/jsm/controls/TransformControls.js +336 -26
  30. package/examples/jsm/csm/CSM.js +232 -18
  31. package/examples/jsm/csm/CSMFrustum.js +61 -4
  32. package/examples/jsm/csm/CSMHelper.js +50 -0
  33. package/examples/jsm/csm/CSMShader.js +13 -1
  34. package/examples/jsm/csm/CSMShadowNode.js +599 -0
  35. package/examples/jsm/curves/CurveExtras.js +303 -31
  36. package/examples/jsm/curves/NURBSCurve.js +91 -16
  37. package/examples/jsm/curves/NURBSSurface.js +52 -6
  38. package/examples/jsm/curves/NURBSUtils.js +102 -112
  39. package/examples/jsm/curves/NURBSVolume.js +24 -4
  40. package/examples/jsm/effects/AnaglyphEffect.js +134 -7
  41. package/examples/jsm/effects/AsciiEffect.js +69 -22
  42. package/examples/jsm/effects/OutlineEffect.js +61 -111
  43. package/examples/jsm/effects/ParallaxBarrierEffect.js +30 -0
  44. package/examples/jsm/effects/StereoEffect.js +31 -0
  45. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  46. package/examples/jsm/environments/DebugEnvironment.js +50 -0
  47. package/examples/jsm/environments/RoomEnvironment.js +83 -42
  48. package/examples/jsm/exporters/DRACOExporter.js +56 -14
  49. package/examples/jsm/exporters/EXRExporter.js +40 -9
  50. package/examples/jsm/exporters/GLTFExporter.js +502 -169
  51. package/examples/jsm/exporters/OBJExporter.js +21 -1
  52. package/examples/jsm/exporters/PLYExporter.js +44 -12
  53. package/examples/jsm/exporters/STLExporter.js +27 -5
  54. package/examples/jsm/exporters/USDZExporter.js +781 -291
  55. package/examples/jsm/geometries/BoxLineGeometry.js +23 -0
  56. package/examples/jsm/geometries/ConvexGeometry.js +19 -0
  57. package/examples/jsm/geometries/DecalGeometry.js +91 -30
  58. package/examples/jsm/geometries/ParametricFunctions.js +100 -0
  59. package/examples/jsm/geometries/ParametricGeometry.js +38 -5
  60. package/examples/jsm/geometries/RoundedBoxGeometry.js +68 -7
  61. package/examples/jsm/geometries/TeapotGeometry.js +23 -38
  62. package/examples/jsm/geometries/TextGeometry.js +48 -29
  63. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  64. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  65. package/examples/jsm/helpers/LightProbeHelper.js +36 -0
  66. package/examples/jsm/helpers/LightProbeHelperGPU.js +38 -1
  67. package/examples/jsm/helpers/OctreeHelper.js +36 -0
  68. package/examples/jsm/helpers/PositionalAudioHelper.js +60 -0
  69. package/examples/jsm/helpers/RapierHelper.js +59 -0
  70. package/examples/jsm/helpers/RectAreaLightHelper.js +36 -3
  71. package/examples/jsm/helpers/TextureHelper.js +28 -0
  72. package/examples/jsm/helpers/TextureHelperGPU.js +214 -0
  73. package/examples/jsm/helpers/VertexNormalsHelper.js +61 -2
  74. package/examples/jsm/helpers/VertexTangentsHelper.js +47 -2
  75. package/examples/jsm/helpers/ViewHelper.js +181 -9
  76. package/examples/jsm/inspector/Inspector.js +487 -0
  77. package/examples/jsm/inspector/RendererInspector.js +425 -0
  78. package/examples/jsm/inspector/tabs/Console.js +238 -0
  79. package/examples/jsm/inspector/tabs/Parameters.js +348 -0
  80. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  81. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  82. package/examples/jsm/inspector/ui/Graph.js +95 -0
  83. package/examples/jsm/inspector/ui/Item.js +170 -0
  84. package/examples/jsm/inspector/ui/List.js +75 -0
  85. package/examples/jsm/inspector/ui/Profiler.js +1975 -0
  86. package/examples/jsm/inspector/ui/Style.js +1613 -0
  87. package/examples/jsm/inspector/ui/Tab.js +233 -0
  88. package/examples/jsm/inspector/ui/Values.js +439 -0
  89. package/examples/jsm/inspector/ui/utils.js +56 -0
  90. package/examples/jsm/interactive/HTMLMesh.js +43 -12
  91. package/examples/jsm/interactive/InteractiveGroup.js +170 -52
  92. package/examples/jsm/interactive/SelectionBox.js +106 -9
  93. package/examples/jsm/interactive/SelectionHelper.js +76 -30
  94. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  95. package/examples/jsm/libs/meshopt_decoder.module.js +76 -58
  96. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  97. package/examples/jsm/lighting/TiledLighting.js +42 -0
  98. package/examples/jsm/lights/LightProbeGenerator.js +44 -7
  99. package/examples/jsm/lights/RectAreaLightTexturesLib.js +50 -14
  100. package/examples/jsm/lights/RectAreaLightUniformsLib.js +16 -0
  101. package/examples/jsm/lines/Line2.js +41 -4
  102. package/examples/jsm/lines/LineGeometry.js +80 -2
  103. package/examples/jsm/lines/LineMaterial.js +105 -5
  104. package/examples/jsm/lines/LineSegments2.js +54 -4
  105. package/examples/jsm/lines/LineSegmentsGeometry.js +65 -8
  106. package/examples/jsm/lines/Wireframe.js +41 -4
  107. package/examples/jsm/lines/WireframeGeometry2.js +27 -2
  108. package/examples/jsm/lines/webgpu/Line2.js +28 -2
  109. package/examples/jsm/lines/webgpu/LineSegments2.js +59 -24
  110. package/examples/jsm/lines/webgpu/Wireframe.js +86 -0
  111. package/examples/jsm/loaders/3DMLoader.js +78 -6
  112. package/examples/jsm/loaders/3MFLoader.js +148 -7
  113. package/examples/jsm/loaders/AMFLoader.js +34 -14
  114. package/examples/jsm/loaders/BVHLoader.js +59 -12
  115. package/examples/jsm/loaders/ColladaLoader.js +61 -4027
  116. package/examples/jsm/loaders/DDSLoader.js +68 -1
  117. package/examples/jsm/loaders/DRACOLoader.js +146 -22
  118. package/examples/jsm/loaders/EXRLoader.js +255 -34
  119. package/examples/jsm/loaders/FBXLoader.js +80 -42
  120. package/examples/jsm/loaders/FontLoader.js +83 -6
  121. package/examples/jsm/loaders/GCodeLoader.js +71 -14
  122. package/examples/jsm/loaders/GLTFLoader.js +381 -263
  123. package/examples/jsm/loaders/HDRCubeTextureLoader.js +52 -3
  124. package/examples/jsm/loaders/HDRLoader.js +485 -0
  125. package/examples/jsm/loaders/IESLoader.js +42 -0
  126. package/examples/jsm/loaders/KMZLoader.js +39 -6
  127. package/examples/jsm/loaders/KTX2Loader.js +124 -48
  128. package/examples/jsm/loaders/KTXLoader.js +31 -10
  129. package/examples/jsm/loaders/LDrawLoader.js +192 -145
  130. package/examples/jsm/loaders/LUT3dlLoader.js +47 -10
  131. package/examples/jsm/loaders/LUTCubeLoader.js +46 -9
  132. package/examples/jsm/loaders/LUTImageLoader.js +79 -38
  133. package/examples/jsm/loaders/LWOLoader.js +54 -59
  134. package/examples/jsm/loaders/LottieLoader.js +54 -1
  135. package/examples/jsm/loaders/MD2Loader.js +37 -1
  136. package/examples/jsm/loaders/MDDLoader.js +57 -12
  137. package/examples/jsm/loaders/MTLLoader.js +60 -35
  138. package/examples/jsm/loaders/MaterialXLoader.js +268 -34
  139. package/examples/jsm/loaders/NRRDLoader.js +40 -8
  140. package/examples/jsm/loaders/OBJLoader.js +51 -2
  141. package/examples/jsm/loaders/PCDLoader.js +173 -21
  142. package/examples/jsm/loaders/PDBLoader.js +41 -2
  143. package/examples/jsm/loaders/PLYLoader.js +70 -39
  144. package/examples/jsm/loaders/PVRLoader.js +25 -6
  145. package/examples/jsm/loaders/RGBELoader.js +6 -438
  146. package/examples/jsm/loaders/STLLoader.js +48 -38
  147. package/examples/jsm/loaders/SVGLoader.js +119 -25
  148. package/examples/jsm/loaders/TDSLoader.js +92 -74
  149. package/examples/jsm/loaders/TGALoader.js +23 -2
  150. package/examples/jsm/loaders/TIFFLoader.js +23 -0
  151. package/examples/jsm/loaders/TTFLoader.js +50 -3
  152. package/examples/jsm/loaders/USDLoader.js +279 -0
  153. package/examples/jsm/loaders/USDZLoader.js +4 -858
  154. package/examples/jsm/loaders/UltraHDRLoader.js +338 -166
  155. package/examples/jsm/loaders/VOXLoader.js +688 -87
  156. package/examples/jsm/loaders/VRMLLoader.js +121 -12
  157. package/examples/jsm/loaders/VTKLoader.js +77 -25
  158. package/examples/jsm/loaders/XYZLoader.js +36 -0
  159. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  160. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  161. package/examples/jsm/loaders/lwo/IFFParser.js +77 -77
  162. package/examples/jsm/loaders/usd/USDAParser.js +822 -0
  163. package/examples/jsm/loaders/usd/USDCParser.js +1852 -0
  164. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  165. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
  166. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
  167. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  168. package/examples/jsm/math/Capsule.js +91 -14
  169. package/examples/jsm/math/ColorConverter.js +22 -0
  170. package/examples/jsm/math/ColorSpaces.js +74 -2
  171. package/examples/jsm/math/ConvexHull.js +517 -93
  172. package/examples/jsm/math/ImprovedNoise.js +32 -15
  173. package/examples/jsm/math/Lut.js +113 -0
  174. package/examples/jsm/math/MeshSurfaceSampler.js +78 -13
  175. package/examples/jsm/math/OBB.js +141 -29
  176. package/examples/jsm/math/Octree.js +283 -7
  177. package/examples/jsm/math/SimplexNoise.js +68 -42
  178. package/examples/jsm/misc/ConvexObjectBreaker.js +45 -25
  179. package/examples/jsm/misc/GPUComputationRenderer.js +96 -20
  180. package/examples/jsm/misc/Gyroscope.js +12 -0
  181. package/examples/jsm/misc/MD2Character.js +117 -2
  182. package/examples/jsm/misc/MD2CharacterComplex.js +175 -11
  183. package/examples/jsm/misc/MorphAnimMesh.js +44 -0
  184. package/examples/jsm/misc/MorphBlendMesh.js +103 -0
  185. package/examples/jsm/misc/ProgressiveLightMap.js +100 -54
  186. package/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
  187. package/examples/jsm/misc/RollerCoaster.js +57 -0
  188. package/examples/jsm/misc/TubePainter.js +437 -40
  189. package/examples/jsm/misc/Volume.js +123 -76
  190. package/examples/jsm/misc/VolumeSlice.js +95 -49
  191. package/examples/jsm/modifiers/CurveModifier.js +66 -38
  192. package/examples/jsm/modifiers/CurveModifierGPU.js +42 -19
  193. package/examples/jsm/modifiers/EdgeSplitModifier.js +20 -0
  194. package/examples/jsm/modifiers/SimplifyModifier.js +24 -10
  195. package/examples/jsm/modifiers/TessellateModifier.js +35 -2
  196. package/examples/jsm/objects/GroundedSkybox.js +25 -6
  197. package/examples/jsm/objects/Lensflare.js +94 -2
  198. package/examples/jsm/objects/LensflareMesh.js +64 -10
  199. package/examples/jsm/objects/MarchingCubes.js +90 -5
  200. package/examples/jsm/objects/Reflector.js +76 -2
  201. package/examples/jsm/objects/ReflectorForSSRPass.js +41 -0
  202. package/examples/jsm/objects/Refractor.js +62 -0
  203. package/examples/jsm/objects/ShadowMesh.js +54 -4
  204. package/examples/jsm/objects/Sky.js +106 -16
  205. package/examples/jsm/objects/SkyMesh.js +211 -38
  206. package/examples/jsm/objects/Water.js +49 -8
  207. package/examples/jsm/objects/Water2.js +49 -7
  208. package/examples/jsm/objects/Water2Mesh.js +50 -9
  209. package/examples/jsm/objects/WaterMesh.js +136 -43
  210. package/examples/jsm/physics/AmmoPhysics.js +60 -7
  211. package/examples/jsm/physics/JoltPhysics.js +65 -12
  212. package/examples/jsm/physics/RapierPhysics.js +217 -21
  213. package/examples/jsm/postprocessing/AfterimagePass.js +110 -29
  214. package/examples/jsm/postprocessing/BloomPass.js +128 -26
  215. package/examples/jsm/postprocessing/BokehPass.js +99 -22
  216. package/examples/jsm/postprocessing/ClearPass.js +54 -3
  217. package/examples/jsm/postprocessing/CubeTexturePass.js +82 -21
  218. package/examples/jsm/postprocessing/DotScreenPass.js +59 -10
  219. package/examples/jsm/postprocessing/EffectComposer.js +140 -6
  220. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  221. package/examples/jsm/postprocessing/FilmPass.js +54 -5
  222. package/examples/jsm/postprocessing/GTAOPass.js +202 -57
  223. package/examples/jsm/postprocessing/GlitchPass.js +86 -34
  224. package/examples/jsm/postprocessing/HalftonePass.js +65 -10
  225. package/examples/jsm/postprocessing/LUTPass.js +38 -8
  226. package/examples/jsm/postprocessing/MaskPass.js +91 -0
  227. package/examples/jsm/postprocessing/OutlinePass.js +272 -135
  228. package/examples/jsm/postprocessing/OutputPass.js +65 -14
  229. package/examples/jsm/postprocessing/Pass.js +100 -4
  230. package/examples/jsm/postprocessing/RenderPass.js +94 -0
  231. package/examples/jsm/postprocessing/RenderPixelatedPass.js +124 -45
  232. package/examples/jsm/postprocessing/RenderTransitionPass.js +120 -21
  233. package/examples/jsm/postprocessing/SAOPass.js +128 -55
  234. package/examples/jsm/postprocessing/SMAAPass.js +106 -75
  235. package/examples/jsm/postprocessing/SSAARenderPass.js +118 -35
  236. package/examples/jsm/postprocessing/SSAOPass.js +173 -60
  237. package/examples/jsm/postprocessing/SSRPass.js +268 -53
  238. package/examples/jsm/postprocessing/SavePass.js +69 -16
  239. package/examples/jsm/postprocessing/ShaderPass.js +65 -7
  240. package/examples/jsm/postprocessing/TAARenderPass.js +79 -24
  241. package/examples/jsm/postprocessing/TexturePass.js +72 -8
  242. package/examples/jsm/postprocessing/UnrealBloomPass.js +168 -59
  243. package/examples/jsm/renderers/CSS2DRenderer.js +98 -5
  244. package/examples/jsm/renderers/CSS3DRenderer.js +111 -7
  245. package/examples/jsm/renderers/Projector.js +288 -32
  246. package/examples/jsm/renderers/SVGRenderer.js +323 -61
  247. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +3 -1
  248. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  249. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +5 -1
  250. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +12 -5
  251. package/examples/jsm/shaders/AfterimageShader.js +8 -3
  252. package/examples/jsm/shaders/BasicShader.js +8 -1
  253. package/examples/jsm/shaders/BleachBypassShader.js +10 -3
  254. package/examples/jsm/shaders/BlendShader.js +8 -1
  255. package/examples/jsm/shaders/BokehShader.js +9 -3
  256. package/examples/jsm/shaders/BokehShader2.js +11 -4
  257. package/examples/jsm/shaders/BrightnessContrastShader.js +10 -4
  258. package/examples/jsm/shaders/ColorCorrectionShader.js +8 -1
  259. package/examples/jsm/shaders/ColorifyShader.js +8 -1
  260. package/examples/jsm/shaders/ConvolutionShader.js +9 -38
  261. package/examples/jsm/shaders/CopyShader.js +8 -1
  262. package/examples/jsm/shaders/DOFMipMapShader.js +10 -3
  263. package/examples/jsm/shaders/DepthLimitedBlurShader.js +10 -1
  264. package/examples/jsm/shaders/DigitalGlitch.js +10 -7
  265. package/examples/jsm/shaders/DotScreenShader.js +8 -3
  266. package/examples/jsm/shaders/ExposureShader.js +8 -1
  267. package/examples/jsm/shaders/FXAAShader.js +233 -221
  268. package/examples/jsm/shaders/FilmShader.js +13 -0
  269. package/examples/jsm/shaders/FocusShader.js +8 -3
  270. package/examples/jsm/shaders/FreiChenShader.js +10 -3
  271. package/examples/jsm/shaders/GTAOShader.js +55 -45
  272. package/examples/jsm/shaders/GammaCorrectionShader.js +11 -2
  273. package/examples/jsm/shaders/HalftoneShader.js +24 -4
  274. package/examples/jsm/shaders/HorizontalBlurShader.js +12 -3
  275. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +9 -2
  276. package/examples/jsm/shaders/HueSaturationShader.js +10 -3
  277. package/examples/jsm/shaders/KaleidoShader.js +11 -4
  278. package/examples/jsm/shaders/LuminosityHighPassShader.js +8 -4
  279. package/examples/jsm/shaders/LuminosityShader.js +8 -2
  280. package/examples/jsm/shaders/MirrorShader.js +10 -4
  281. package/examples/jsm/shaders/NormalMapShader.js +7 -2
  282. package/examples/jsm/shaders/OutputShader.js +19 -1
  283. package/examples/jsm/shaders/PoissonDenoiseShader.js +30 -17
  284. package/examples/jsm/shaders/RGBShiftShader.js +8 -1
  285. package/examples/jsm/shaders/SAOShader.js +27 -5
  286. package/examples/jsm/shaders/SMAAShader.js +24 -1
  287. package/examples/jsm/shaders/SSAOShader.js +37 -6
  288. package/examples/jsm/shaders/SSRShader.js +32 -6
  289. package/examples/jsm/shaders/SepiaShader.js +8 -3
  290. package/examples/jsm/shaders/SobelOperatorShader.js +9 -3
  291. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +13 -8
  292. package/examples/jsm/shaders/TechnicolorShader.js +10 -4
  293. package/examples/jsm/shaders/ToonShader.js +29 -6
  294. package/examples/jsm/shaders/TriangleBlurShader.js +9 -4
  295. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +19 -6
  296. package/examples/jsm/shaders/VelocityShader.js +8 -1
  297. package/examples/jsm/shaders/VerticalBlurShader.js +9 -2
  298. package/examples/jsm/shaders/VerticalTiltShiftShader.js +8 -1
  299. package/examples/jsm/shaders/VignetteShader.js +8 -3
  300. package/examples/jsm/shaders/VolumeShader.js +11 -2
  301. package/examples/jsm/shaders/WaterRefractionShader.js +11 -0
  302. package/examples/jsm/textures/FlakesTexture.js +14 -0
  303. package/examples/jsm/transpiler/AST.js +436 -31
  304. package/examples/jsm/transpiler/GLSLDecoder.js +380 -135
  305. package/examples/jsm/transpiler/Linker.js +327 -0
  306. package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -1
  307. package/examples/jsm/transpiler/TSLEncoder.js +363 -97
  308. package/examples/jsm/transpiler/Transpiler.js +50 -1
  309. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  310. package/examples/jsm/transpiler/WGSLEncoder.js +839 -0
  311. package/examples/jsm/tsl/display/AfterImageNode.js +244 -0
  312. package/examples/jsm/tsl/display/AnaglyphPassNode.js +549 -0
  313. package/examples/jsm/tsl/display/AnamorphicNode.js +282 -0
  314. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  315. package/{src/nodes → examples/jsm/tsl}/display/BleachBypass.js +11 -4
  316. package/examples/jsm/tsl/display/BloomNode.js +534 -0
  317. package/examples/jsm/tsl/display/CRT.js +150 -0
  318. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  319. package/examples/jsm/tsl/display/DenoiseNode.js +334 -0
  320. package/examples/jsm/tsl/display/DepthOfFieldNode.js +554 -0
  321. package/examples/jsm/tsl/display/DotScreenNode.js +104 -0
  322. package/examples/jsm/tsl/display/FXAANode.js +365 -0
  323. package/examples/jsm/tsl/display/FilmNode.js +101 -0
  324. package/examples/jsm/tsl/display/GTAONode.js +571 -0
  325. package/examples/jsm/tsl/display/GaussianBlurNode.js +389 -0
  326. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  327. package/examples/jsm/tsl/display/LensflareNode.js +279 -0
  328. package/examples/jsm/tsl/display/Lut3DNode.js +109 -0
  329. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  330. package/examples/jsm/tsl/display/OutlineNode.js +762 -0
  331. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
  332. package/examples/jsm/tsl/display/PixelationPassNode.js +335 -0
  333. package/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
  334. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  335. package/examples/jsm/tsl/display/SMAANode.js +768 -0
  336. package/{src/nodes → examples/jsm/tsl}/display/SSAAPassNode.js +120 -49
  337. package/examples/jsm/tsl/display/SSGINode.js +642 -0
  338. package/examples/jsm/tsl/display/SSRNode.js +656 -0
  339. package/examples/jsm/tsl/display/SSSNode.js +490 -0
  340. package/{src/nodes → examples/jsm/tsl}/display/Sepia.js +9 -2
  341. package/examples/jsm/tsl/display/Shape.js +29 -0
  342. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +61 -19
  343. package/examples/jsm/tsl/display/StereoCompositePassNode.js +192 -0
  344. package/{src/nodes → examples/jsm/tsl}/display/StereoPassNode.js +48 -12
  345. package/examples/jsm/tsl/display/TRAANode.js +726 -0
  346. package/examples/jsm/tsl/display/TransitionNode.js +141 -0
  347. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  348. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  349. package/examples/jsm/tsl/display/hashBlur.js +54 -0
  350. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  351. package/examples/jsm/tsl/lighting/TiledLightsNode.js +442 -0
  352. package/examples/jsm/tsl/math/Bayer.js +73 -0
  353. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  354. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  355. package/examples/jsm/tsl/utils/Raymarching.js +70 -0
  356. package/examples/jsm/utils/BufferGeometryUtils.js +91 -29
  357. package/examples/jsm/utils/CameraUtils.js +15 -6
  358. package/examples/jsm/utils/GeometryCompressionUtils.js +23 -30
  359. package/examples/jsm/utils/GeometryUtils.js +32 -27
  360. package/examples/jsm/utils/LDrawUtils.js +14 -5
  361. package/examples/jsm/utils/SceneOptimizer.js +458 -0
  362. package/examples/jsm/utils/SceneUtils.js +53 -3
  363. package/examples/jsm/utils/ShadowMapViewer.js +72 -33
  364. package/examples/jsm/utils/ShadowMapViewerGPU.js +61 -29
  365. package/examples/jsm/utils/SkeletonUtils.js +48 -0
  366. package/examples/jsm/utils/SortUtils.js +17 -5
  367. package/examples/jsm/utils/UVsDebug.js +12 -4
  368. package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +16 -0
  369. package/examples/jsm/utils/{TextureUtilsGPU.js → WebGPUTextureUtils.js} +20 -2
  370. package/examples/jsm/utils/WorkerPool.js +67 -2
  371. package/examples/jsm/webxr/ARButton.js +19 -0
  372. package/examples/jsm/webxr/OculusHandModel.js +84 -0
  373. package/examples/jsm/webxr/OculusHandPointerModel.js +148 -22
  374. package/examples/jsm/webxr/Text2D.js +20 -6
  375. package/examples/jsm/webxr/VRButton.js +31 -0
  376. package/examples/jsm/webxr/XRButton.js +23 -0
  377. package/examples/jsm/webxr/XRControllerModelFactory.js +94 -3
  378. package/examples/jsm/webxr/XREstimatedLight.js +35 -4
  379. package/examples/jsm/webxr/XRHandMeshModel.js +37 -0
  380. package/examples/jsm/webxr/XRHandModelFactory.js +96 -6
  381. package/examples/jsm/webxr/XRHandPrimitiveModel.js +44 -0
  382. package/examples/jsm/webxr/XRPlanes.js +18 -0
  383. package/package.json +29 -37
  384. package/src/Three.Core.js +198 -0
  385. package/src/Three.Legacy.js +0 -21
  386. package/src/Three.TSL.js +641 -0
  387. package/src/Three.WebGPU.Nodes.js +14 -186
  388. package/src/Three.WebGPU.js +16 -186
  389. package/src/Three.js +2 -197
  390. package/src/animation/AnimationAction.js +263 -31
  391. package/src/animation/AnimationClip.js +162 -7
  392. package/src/animation/AnimationMixer.js +105 -15
  393. package/src/animation/AnimationObjectGroup.js +45 -21
  394. package/src/animation/AnimationUtils.js +163 -24
  395. package/src/animation/KeyframeTrack.js +191 -17
  396. package/src/animation/PropertyBinding.js +91 -16
  397. package/src/animation/PropertyMixer.js +72 -5
  398. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  399. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  400. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  401. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  402. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  403. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  404. package/src/audio/Audio.js +386 -8
  405. package/src/audio/AudioAnalyser.js +58 -1
  406. package/src/audio/AudioContext.js +15 -0
  407. package/src/audio/AudioListener.js +94 -13
  408. package/src/audio/PositionalAudio.js +107 -0
  409. package/src/cameras/ArrayCamera.js +37 -0
  410. package/src/cameras/Camera.js +61 -0
  411. package/src/cameras/CubeCamera.js +86 -0
  412. package/src/cameras/OrthographicCamera.js +110 -1
  413. package/src/cameras/PerspectiveCamera.js +174 -35
  414. package/src/cameras/StereoCamera.js +48 -2
  415. package/src/constants.js +1546 -11
  416. package/src/core/BufferAttribute.js +417 -3
  417. package/src/core/BufferGeometry.js +407 -22
  418. package/src/core/Clock.js +69 -8
  419. package/src/core/EventDispatcher.js +52 -8
  420. package/src/core/GLBufferAttribute.js +113 -2
  421. package/src/core/InstancedBufferAttribute.js +29 -0
  422. package/src/core/InstancedBufferGeometry.js +20 -0
  423. package/src/core/InstancedInterleavedBuffer.js +26 -0
  424. package/src/core/InterleavedBuffer.js +141 -7
  425. package/src/core/InterleavedBufferAttribute.js +200 -2
  426. package/src/core/Layers.js +71 -10
  427. package/src/core/Object3D.js +673 -26
  428. package/src/core/Raycaster.js +136 -2
  429. package/src/core/RenderTarget.js +256 -27
  430. package/src/core/RenderTarget3D.js +48 -0
  431. package/src/core/Timer.js +184 -0
  432. package/src/core/Uniform.js +29 -0
  433. package/src/core/UniformsGroup.js +84 -2
  434. package/src/extras/Controls.js +89 -1
  435. package/src/extras/DataUtils.js +50 -9
  436. package/src/extras/Earcut.js +18 -779
  437. package/src/extras/ImageUtils.js +22 -14
  438. package/src/extras/PMREMGenerator.js +316 -67
  439. package/src/extras/ShapeUtils.js +24 -2
  440. package/src/extras/TextureUtils.js +101 -15
  441. package/src/extras/core/Curve.js +156 -55
  442. package/src/extras/core/CurvePath.js +63 -22
  443. package/src/extras/core/Interpolations.js +34 -2
  444. package/src/extras/core/Path.js +134 -1
  445. package/src/extras/core/Shape.js +66 -3
  446. package/src/extras/core/ShapePath.js +80 -4
  447. package/src/extras/curves/ArcCurve.js +22 -0
  448. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  449. package/src/extras/curves/CubicBezierCurve.js +67 -0
  450. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  451. package/src/extras/curves/EllipseCurve.js +102 -0
  452. package/src/extras/curves/LineCurve.js +36 -0
  453. package/src/extras/curves/LineCurve3.js +36 -0
  454. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  455. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  456. package/src/extras/curves/SplineCurve.js +48 -0
  457. package/src/extras/lib/earcut.js +685 -0
  458. package/src/geometries/BoxGeometry.js +39 -0
  459. package/src/geometries/CapsuleGeometry.js +196 -11
  460. package/src/geometries/CircleGeometry.js +41 -0
  461. package/src/geometries/ConeGeometry.js +39 -0
  462. package/src/geometries/CylinderGeometry.js +42 -2
  463. package/src/geometries/DodecahedronGeometry.js +33 -0
  464. package/src/geometries/EdgesGeometry.js +30 -2
  465. package/src/geometries/ExtrudeGeometry.js +148 -52
  466. package/src/geometries/IcosahedronGeometry.js +33 -0
  467. package/src/geometries/LatheGeometry.js +44 -3
  468. package/src/geometries/OctahedronGeometry.js +33 -0
  469. package/src/geometries/PlaneGeometry.js +35 -0
  470. package/src/geometries/PolyhedronGeometry.js +30 -1
  471. package/src/geometries/RingGeometry.js +37 -0
  472. package/src/geometries/ShapeGeometry.js +38 -0
  473. package/src/geometries/SphereGeometry.js +38 -0
  474. package/src/geometries/TetrahedronGeometry.js +33 -0
  475. package/src/geometries/TorusGeometry.js +44 -3
  476. package/src/geometries/TorusKnotGeometry.js +39 -0
  477. package/src/geometries/TubeGeometry.js +50 -0
  478. package/src/geometries/WireframeGeometry.js +32 -0
  479. package/src/helpers/ArrowHelper.js +62 -5
  480. package/src/helpers/AxesHelper.js +28 -0
  481. package/src/helpers/Box3Helper.js +28 -0
  482. package/src/helpers/BoxHelper.js +43 -7
  483. package/src/helpers/CameraHelper.js +103 -27
  484. package/src/helpers/DirectionalLightHelper.js +55 -0
  485. package/src/helpers/GridHelper.js +26 -0
  486. package/src/helpers/HemisphereLightHelper.js +42 -0
  487. package/src/helpers/PlaneHelper.js +33 -0
  488. package/src/helpers/PointLightHelper.js +43 -24
  489. package/src/helpers/PolarGridHelper.js +30 -0
  490. package/src/helpers/SkeletonHelper.js +73 -7
  491. package/src/helpers/SpotLightHelper.js +43 -0
  492. package/src/lights/AmbientLight.js +25 -0
  493. package/src/lights/DirectionalLight.js +70 -0
  494. package/src/lights/DirectionalLightShadow.js +15 -0
  495. package/src/lights/HemisphereLight.js +42 -0
  496. package/src/lights/Light.js +37 -11
  497. package/src/lights/LightProbe.js +37 -9
  498. package/src/lights/LightShadow.js +202 -7
  499. package/src/lights/PointLight.js +74 -0
  500. package/src/lights/PointLightShadow.js +15 -80
  501. package/src/lights/RectAreaLight.js +59 -0
  502. package/src/lights/SpotLight.js +124 -1
  503. package/src/lights/SpotLightShadow.js +33 -3
  504. package/src/lights/webgpu/IESSpotLight.js +22 -0
  505. package/src/lights/webgpu/ProjectorLight.js +46 -0
  506. package/src/loaders/AnimationLoader.js +34 -2
  507. package/src/loaders/AudioLoader.js +34 -2
  508. package/src/loaders/BufferGeometryLoader.js +38 -13
  509. package/src/loaders/Cache.js +75 -2
  510. package/src/loaders/CompressedTextureLoader.js +36 -3
  511. package/src/loaders/CubeTextureLoader.js +45 -0
  512. package/src/loaders/DataTextureLoader.js +45 -4
  513. package/src/loaders/FileLoader.js +85 -5
  514. package/src/loaders/ImageBitmapLoader.js +113 -11
  515. package/src/loaders/ImageLoader.js +85 -8
  516. package/src/loaders/Loader.js +150 -0
  517. package/src/loaders/LoaderUtils.js +18 -36
  518. package/src/loaders/LoadingManager.js +187 -0
  519. package/src/loaders/MaterialLoader.js +62 -3
  520. package/src/loaders/ObjectLoader.js +131 -31
  521. package/src/loaders/TextureLoader.js +33 -0
  522. package/src/loaders/nodes/NodeLoader.js +68 -4
  523. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  524. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  525. package/src/materials/LineBasicMaterial.js +74 -1
  526. package/src/materials/LineDashedMaterial.js +52 -1
  527. package/src/materials/Material.js +502 -8
  528. package/src/materials/MeshBasicMaterial.js +168 -2
  529. package/src/materials/MeshDepthMaterial.js +94 -0
  530. package/src/materials/MeshDistanceMaterial.js +76 -0
  531. package/src/materials/MeshLambertMaterial.js +283 -0
  532. package/src/materials/MeshMatcapMaterial.js +164 -0
  533. package/src/materials/MeshNormalMaterial.js +114 -0
  534. package/src/materials/MeshPhongMaterial.js +298 -0
  535. package/src/materials/MeshPhysicalMaterial.js +296 -4
  536. package/src/materials/MeshStandardMaterial.js +300 -2
  537. package/src/materials/MeshToonMaterial.js +219 -0
  538. package/src/materials/PointsMaterial.js +89 -0
  539. package/src/materials/RawShaderMaterial.js +25 -0
  540. package/src/materials/ShaderMaterial.js +234 -6
  541. package/src/materials/ShadowMaterial.js +54 -0
  542. package/src/materials/SpriteMaterial.js +82 -0
  543. package/src/materials/nodes/Line2NodeMaterial.js +158 -53
  544. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  545. package/src/materials/nodes/LineDashedNodeMaterial.js +81 -6
  546. package/src/materials/nodes/MeshBasicNodeMaterial.js +59 -2
  547. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  548. package/src/materials/nodes/MeshMatcapNodeMaterial.js +23 -3
  549. package/src/materials/nodes/MeshNormalNodeMaterial.js +27 -4
  550. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  551. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +276 -3
  552. package/src/materials/nodes/MeshSSSNodeMaterial.js +98 -10
  553. package/src/materials/nodes/MeshStandardNodeMaterial.js +83 -4
  554. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  555. package/src/materials/nodes/NodeMaterial.js +789 -74
  556. package/src/materials/nodes/NodeMaterials.js +0 -1
  557. package/src/materials/nodes/PointsNodeMaterial.js +180 -11
  558. package/src/materials/nodes/ShadowNodeMaterial.js +38 -0
  559. package/src/materials/nodes/SpriteNodeMaterial.js +86 -23
  560. package/src/materials/nodes/VolumeNodeMaterial.js +57 -84
  561. package/src/materials/nodes/manager/NodeMaterialObserver.js +329 -12
  562. package/src/math/Box2.js +177 -0
  563. package/src/math/Box3.js +271 -0
  564. package/src/math/Color.js +355 -11
  565. package/src/math/ColorManagement.js +158 -92
  566. package/src/math/Cylindrical.js +65 -6
  567. package/src/math/Euler.js +139 -5
  568. package/src/math/Frustum.js +108 -9
  569. package/src/math/FrustumArray.js +258 -0
  570. package/src/math/Interpolant.js +87 -8
  571. package/src/math/Line3.js +221 -2
  572. package/src/math/MathUtils.js +408 -20
  573. package/src/math/Matrix2.js +70 -0
  574. package/src/math/Matrix3.js +229 -4
  575. package/src/math/Matrix4.js +489 -94
  576. package/src/math/Plane.js +164 -2
  577. package/src/math/Quaternion.js +322 -90
  578. package/src/math/Ray.js +162 -0
  579. package/src/math/Sphere.js +175 -0
  580. package/src/math/Spherical.js +73 -11
  581. package/src/math/SphericalHarmonics3.js +112 -14
  582. package/src/math/Triangle.js +206 -2
  583. package/src/math/Vector2.js +396 -10
  584. package/src/math/Vector3.js +550 -15
  585. package/src/math/Vector4.js +415 -9
  586. package/src/math/interpolants/BezierInterpolant.js +108 -0
  587. package/src/math/interpolants/CubicInterpolant.js +10 -1
  588. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  589. package/src/math/interpolants/LinearInterpolant.js +13 -0
  590. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  591. package/src/nodes/Nodes.js +91 -88
  592. package/src/nodes/TSL.js +32 -38
  593. package/src/nodes/accessors/AccessorsUtils.js +37 -9
  594. package/src/nodes/accessors/Arrays.js +68 -0
  595. package/src/nodes/accessors/BatchNode.js +49 -14
  596. package/src/nodes/accessors/Bitangent.js +82 -13
  597. package/src/nodes/accessors/BufferAttributeNode.js +269 -8
  598. package/src/nodes/accessors/BufferNode.js +91 -2
  599. package/src/nodes/accessors/BuiltinNode.js +63 -0
  600. package/src/nodes/accessors/Camera.js +400 -10
  601. package/src/nodes/accessors/ClippingNode.js +149 -45
  602. package/src/nodes/accessors/CubeTextureNode.js +137 -7
  603. package/src/nodes/accessors/InstanceNode.js +245 -40
  604. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  605. package/src/nodes/accessors/Lights.js +88 -0
  606. package/src/nodes/accessors/MaterialNode.js +355 -13
  607. package/src/nodes/accessors/MaterialProperties.js +57 -1
  608. package/src/nodes/accessors/MaterialReferenceNode.js +52 -14
  609. package/src/nodes/accessors/ModelNode.js +117 -5
  610. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -39
  611. package/src/nodes/accessors/MorphNode.js +73 -26
  612. package/src/nodes/accessors/Normal.js +174 -19
  613. package/src/nodes/accessors/Object3DNode.js +146 -12
  614. package/src/nodes/accessors/PointUVNode.js +25 -0
  615. package/src/nodes/accessors/Position.js +119 -7
  616. package/src/nodes/accessors/ReferenceBaseNode.js +190 -4
  617. package/src/nodes/accessors/ReferenceNode.js +223 -8
  618. package/src/nodes/accessors/ReflectVector.js +29 -3
  619. package/src/nodes/accessors/RendererReferenceNode.js +45 -2
  620. package/src/nodes/accessors/SceneProperties.js +53 -0
  621. package/src/nodes/accessors/SkinningNode.js +180 -43
  622. package/src/nodes/accessors/StorageBufferNode.js +278 -26
  623. package/src/nodes/accessors/StorageTextureNode.js +205 -12
  624. package/src/nodes/accessors/Tangent.js +48 -10
  625. package/src/nodes/accessors/TangentUtils.js +46 -0
  626. package/src/nodes/accessors/Texture3DNode.js +104 -11
  627. package/src/nodes/accessors/TextureBicubic.js +31 -4
  628. package/src/nodes/accessors/TextureNode.js +564 -52
  629. package/src/nodes/accessors/TextureSizeNode.js +42 -1
  630. package/src/nodes/accessors/UV.js +9 -1
  631. package/src/nodes/accessors/UniformArrayNode.js +226 -34
  632. package/src/nodes/accessors/UserDataNode.js +46 -2
  633. package/src/nodes/accessors/VelocityNode.js +93 -3
  634. package/src/nodes/accessors/VertexColorNode.js +39 -4
  635. package/src/nodes/code/CodeNode.js +101 -8
  636. package/src/nodes/code/ExpressionNode.js +29 -2
  637. package/src/nodes/code/FunctionCallNode.js +98 -10
  638. package/src/nodes/code/FunctionNode.js +69 -2
  639. package/src/nodes/core/ArrayNode.js +174 -0
  640. package/src/nodes/core/AssignNode.js +80 -9
  641. package/src/nodes/core/AttributeNode.js +47 -4
  642. package/src/nodes/core/BypassNode.js +47 -3
  643. package/src/nodes/core/ConstNode.js +32 -0
  644. package/src/nodes/core/ContextNode.js +220 -14
  645. package/src/nodes/core/IndexNode.js +72 -7
  646. package/src/nodes/core/InputNode.js +50 -1
  647. package/src/nodes/core/InspectorNode.js +128 -0
  648. package/src/nodes/core/IsolateNode.js +133 -0
  649. package/src/nodes/core/LightingModel.js +65 -5
  650. package/src/nodes/core/MRTNode.js +113 -2
  651. package/src/nodes/core/Node.js +595 -36
  652. package/src/nodes/core/NodeAttribute.js +38 -0
  653. package/src/nodes/core/NodeBuilder.js +1840 -121
  654. package/src/nodes/core/NodeCache.js +41 -2
  655. package/src/nodes/core/NodeCode.js +31 -0
  656. package/src/nodes/core/NodeError.js +28 -0
  657. package/src/nodes/core/NodeFrame.js +153 -24
  658. package/src/nodes/core/NodeFunction.js +48 -1
  659. package/src/nodes/core/NodeFunctionInput.js +44 -0
  660. package/src/nodes/core/NodeParser.js +13 -1
  661. package/src/nodes/core/NodeUniform.js +53 -1
  662. package/src/nodes/core/NodeUtils.js +201 -51
  663. package/src/nodes/core/NodeVar.js +47 -1
  664. package/src/nodes/core/NodeVarying.js +47 -1
  665. package/src/nodes/core/OutputStructNode.js +54 -12
  666. package/src/nodes/core/ParameterNode.js +60 -2
  667. package/src/nodes/core/PropertyNode.js +286 -7
  668. package/src/nodes/core/StackNode.js +337 -20
  669. package/src/nodes/core/StackTrace.js +139 -0
  670. package/src/nodes/core/StructNode.js +134 -0
  671. package/src/nodes/core/StructType.js +13 -0
  672. package/src/nodes/core/StructTypeNode.js +126 -6
  673. package/src/nodes/core/SubBuildNode.js +89 -0
  674. package/src/nodes/core/TempNode.js +31 -5
  675. package/src/nodes/core/UniformGroupNode.js +85 -7
  676. package/src/nodes/core/UniformNode.js +163 -16
  677. package/src/nodes/core/VarNode.js +317 -10
  678. package/src/nodes/core/VaryingNode.js +115 -13
  679. package/src/nodes/core/constants.js +40 -0
  680. package/src/nodes/display/BlendModes.js +171 -0
  681. package/src/nodes/display/BumpMapNode.js +38 -2
  682. package/src/nodes/display/ColorAdjustment.js +118 -6
  683. package/src/nodes/display/ColorSpaceFunctions.js +22 -6
  684. package/src/nodes/display/ColorSpaceNode.js +97 -47
  685. package/src/nodes/display/FrontFacingNode.js +64 -7
  686. package/src/nodes/display/NormalMapNode.js +101 -54
  687. package/src/nodes/display/PassNode.js +690 -33
  688. package/src/nodes/display/RenderOutputNode.js +94 -4
  689. package/src/nodes/display/ScreenNode.js +138 -27
  690. package/src/nodes/display/ToneMappingFunctions.js +62 -10
  691. package/src/nodes/display/ToneMappingNode.js +88 -8
  692. package/src/nodes/display/ToonOutlinePassNode.js +84 -4
  693. package/src/nodes/display/ViewportDepthNode.js +227 -10
  694. package/src/nodes/display/ViewportDepthTextureNode.js +39 -5
  695. package/src/nodes/display/ViewportSharedTextureNode.js +35 -1
  696. package/src/nodes/display/ViewportTextureNode.js +171 -7
  697. package/src/nodes/fog/Fog.js +97 -0
  698. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  699. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  700. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  701. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  702. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  703. package/src/nodes/functions/BSDF/LTC.js +45 -1
  704. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  705. package/src/nodes/functions/BasicLightingModel.js +28 -6
  706. package/src/nodes/functions/PhongLightingModel.js +36 -6
  707. package/src/nodes/functions/PhysicalLightingModel.js +336 -91
  708. package/src/nodes/functions/ShadowMaskModel.js +30 -3
  709. package/src/nodes/functions/ToonLightingModel.js +21 -2
  710. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  711. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  712. package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
  713. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  714. package/src/nodes/geometry/RangeNode.js +97 -8
  715. package/src/nodes/gpgpu/AtomicFunctionNode.js +198 -23
  716. package/src/nodes/gpgpu/BarrierNode.js +52 -3
  717. package/src/nodes/gpgpu/ComputeBuiltinNode.js +135 -6
  718. package/src/nodes/gpgpu/ComputeNode.js +212 -16
  719. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  720. package/src/nodes/gpgpu/WorkgroupInfoNode.js +143 -9
  721. package/src/nodes/lighting/AONode.js +18 -0
  722. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  723. package/src/nodes/lighting/AnalyticLightNode.js +186 -399
  724. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  725. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  726. package/src/nodes/lighting/DirectionalLightNode.js +12 -11
  727. package/src/nodes/lighting/EnvironmentNode.js +59 -19
  728. package/src/nodes/lighting/HemisphereLightNode.js +33 -2
  729. package/src/nodes/lighting/IESSpotLightNode.js +13 -1
  730. package/src/nodes/lighting/IrradianceNode.js +17 -0
  731. package/src/nodes/lighting/LightProbeNode.js +20 -0
  732. package/src/nodes/lighting/LightUtils.js +11 -3
  733. package/src/nodes/lighting/LightingContextNode.js +52 -4
  734. package/src/nodes/lighting/LightingNode.js +15 -6
  735. package/src/nodes/lighting/LightsNode.js +238 -35
  736. package/src/nodes/lighting/PointLightNode.js +60 -25
  737. package/src/nodes/lighting/PointShadowNode.js +325 -0
  738. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  739. package/src/nodes/lighting/RectAreaLightNode.js +50 -14
  740. package/src/nodes/lighting/ShadowBaseNode.js +81 -0
  741. package/src/nodes/lighting/ShadowFilterNode.js +264 -0
  742. package/src/nodes/lighting/ShadowNode.js +867 -0
  743. package/src/nodes/lighting/SpotLightNode.js +99 -18
  744. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  745. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  746. package/src/nodes/math/BitcastNode.js +156 -0
  747. package/src/nodes/math/BitcountNode.js +433 -0
  748. package/src/nodes/math/ConditionalNode.js +110 -21
  749. package/src/nodes/math/Hash.js +8 -0
  750. package/src/nodes/math/MathNode.js +820 -97
  751. package/src/nodes/math/MathUtils.js +47 -1
  752. package/src/nodes/math/OperatorNode.js +517 -84
  753. package/src/nodes/math/PackFloatNode.js +98 -0
  754. package/src/nodes/math/TriNoise3D.js +17 -7
  755. package/src/nodes/math/UnpackFloatNode.js +96 -0
  756. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  757. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  758. package/src/nodes/pmrem/PMREMNode.js +180 -23
  759. package/src/nodes/pmrem/PMREMUtils.js +114 -5
  760. package/src/nodes/procedural/Checker.js +8 -0
  761. package/src/nodes/shapes/Shapes.js +33 -0
  762. package/src/nodes/tsl/TSLBase.js +10 -4
  763. package/src/nodes/tsl/TSLCore.js +732 -160
  764. package/src/nodes/utils/ArrayElementNode.js +55 -4
  765. package/src/nodes/utils/ConvertNode.js +31 -0
  766. package/src/nodes/utils/CubeMapNode.js +79 -2
  767. package/src/nodes/utils/DebugNode.js +83 -0
  768. package/src/nodes/utils/Discard.js +18 -2
  769. package/src/nodes/utils/EquirectUV.js +27 -0
  770. package/src/nodes/utils/EventNode.js +118 -0
  771. package/src/nodes/utils/FlipNode.js +38 -0
  772. package/src/nodes/utils/FunctionOverloadingNode.js +91 -22
  773. package/src/nodes/utils/JoinNode.js +57 -4
  774. package/src/nodes/utils/LoopNode.js +193 -55
  775. package/src/nodes/utils/MatcapUV.js +22 -0
  776. package/src/nodes/utils/MaxMipLevelNode.js +49 -1
  777. package/src/nodes/utils/MemberNode.js +120 -0
  778. package/src/nodes/utils/Oscillators.js +41 -0
  779. package/src/nodes/utils/Packing.js +30 -1
  780. package/src/nodes/utils/PostProcessingUtils.js +154 -0
  781. package/src/nodes/utils/RTTNode.js +165 -9
  782. package/src/nodes/utils/ReflectorNode.js +407 -21
  783. package/src/nodes/utils/RemapNode.js +81 -2
  784. package/src/nodes/utils/RotateNode.js +41 -1
  785. package/src/nodes/utils/SampleNode.js +91 -0
  786. package/src/nodes/utils/SetNode.js +44 -1
  787. package/src/nodes/utils/SplitNode.js +66 -3
  788. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  789. package/src/nodes/utils/SpriteUtils.js +16 -0
  790. package/src/nodes/utils/StorageArrayElementNode.js +56 -3
  791. package/src/nodes/utils/Timer.js +26 -0
  792. package/src/nodes/utils/TriplanarTextures.js +65 -0
  793. package/src/nodes/utils/UVUtils.js +48 -0
  794. package/src/nodes/utils/ViewportUtils.js +12 -0
  795. package/src/objects/BatchedMesh.js +798 -309
  796. package/src/objects/Bone.js +24 -0
  797. package/src/objects/ClippingGroup.js +68 -0
  798. package/src/objects/Group.js +24 -0
  799. package/src/objects/InstancedMesh.js +131 -2
  800. package/src/objects/LOD.js +99 -5
  801. package/src/objects/Line.js +90 -7
  802. package/src/objects/LineLoop.js +20 -0
  803. package/src/objects/LineSegments.js +20 -1
  804. package/src/objects/Mesh.js +84 -0
  805. package/src/objects/Points.js +60 -0
  806. package/src/objects/Skeleton.js +120 -5
  807. package/src/objects/SkinnedMesh.js +102 -6
  808. package/src/objects/Sprite.js +65 -1
  809. package/src/renderers/WebGL3DRenderTarget.js +26 -0
  810. package/src/renderers/WebGLArrayRenderTarget.js +26 -0
  811. package/src/renderers/WebGLCubeRenderTarget.js +41 -5
  812. package/src/renderers/WebGLRenderTarget.js +19 -0
  813. package/src/renderers/WebGLRenderer.js +1016 -278
  814. package/src/renderers/common/Animation.js +123 -14
  815. package/src/renderers/common/Attributes.js +41 -1
  816. package/src/renderers/common/Backend.js +623 -44
  817. package/src/renderers/common/Background.js +99 -16
  818. package/src/renderers/common/BindGroup.js +37 -2
  819. package/src/renderers/common/Binding.js +46 -0
  820. package/src/renderers/common/Bindings.js +211 -20
  821. package/src/renderers/common/BlendMode.js +143 -0
  822. package/src/renderers/common/Buffer.js +89 -0
  823. package/src/renderers/common/BufferUtils.js +25 -0
  824. package/src/renderers/common/BundleGroup.js +57 -0
  825. package/src/renderers/common/CanvasTarget.js +341 -0
  826. package/src/renderers/common/ChainMap.js +73 -10
  827. package/src/renderers/common/ClippingContext.js +172 -87
  828. package/src/renderers/common/Color4.js +40 -0
  829. package/src/renderers/common/ComputePipeline.js +24 -0
  830. package/src/renderers/common/Constants.js +2 -1
  831. package/src/renderers/common/CubeRenderTarget.js +77 -7
  832. package/src/renderers/common/DataMap.js +37 -1
  833. package/src/renderers/common/Geometries.js +163 -14
  834. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  835. package/src/renderers/common/Info.js +81 -36
  836. package/src/renderers/common/InspectorBase.js +146 -0
  837. package/src/renderers/common/Lighting.js +57 -0
  838. package/src/renderers/common/Pipeline.js +22 -0
  839. package/src/renderers/common/Pipelines.js +150 -7
  840. package/src/renderers/common/PostProcessing.js +22 -84
  841. package/src/renderers/common/ProgrammableStage.js +60 -2
  842. package/src/renderers/common/QuadMesh.js +63 -6
  843. package/src/renderers/common/RenderBundle.js +14 -8
  844. package/src/renderers/common/RenderBundles.js +40 -10
  845. package/src/renderers/common/RenderContext.js +219 -4
  846. package/src/renderers/common/RenderContexts.js +54 -17
  847. package/src/renderers/common/RenderList.js +233 -24
  848. package/src/renderers/common/RenderLists.js +46 -6
  849. package/src/renderers/common/RenderObject.js +548 -46
  850. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  851. package/src/renderers/common/RenderObjects.js +133 -15
  852. package/src/renderers/common/RenderPipeline.js +216 -6
  853. package/src/renderers/common/Renderer.js +2155 -332
  854. package/src/renderers/common/RendererUtils.js +200 -0
  855. package/src/renderers/common/SampledTexture.js +99 -39
  856. package/src/renderers/common/Sampler.js +148 -1
  857. package/src/renderers/common/Storage3DTexture.js +100 -0
  858. package/src/renderers/common/StorageArrayTexture.js +84 -0
  859. package/src/renderers/common/StorageBuffer.js +38 -2
  860. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  861. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  862. package/src/renderers/common/StorageTexture.js +65 -0
  863. package/src/renderers/common/Textures.js +273 -57
  864. package/src/renderers/common/TimestampQueryPool.js +163 -0
  865. package/src/renderers/common/Uniform.js +233 -3
  866. package/src/renderers/common/UniformBuffer.js +19 -0
  867. package/src/renderers/common/UniformsGroup.js +235 -26
  868. package/src/renderers/common/XRManager.js +1677 -0
  869. package/src/renderers/common/XRRenderTarget.js +91 -0
  870. package/src/renderers/common/extras/PMREMGenerator.js +371 -108
  871. package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
  872. package/src/renderers/common/nodes/NodeLibrary.js +95 -17
  873. package/src/renderers/common/nodes/NodeManager.js +852 -0
  874. package/src/renderers/common/nodes/NodeSampledTexture.js +84 -8
  875. package/src/renderers/common/nodes/NodeSampler.js +41 -1
  876. package/src/renderers/common/nodes/NodeStorageBuffer.js +48 -3
  877. package/src/renderers/common/nodes/NodeUniform.js +285 -2
  878. package/src/renderers/common/nodes/NodeUniformBuffer.js +81 -0
  879. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  880. package/src/renderers/shaders/DFGLUTData.js +49 -0
  881. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  882. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  883. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  884. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  885. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  886. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  887. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  888. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  889. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  890. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  891. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  892. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  893. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  894. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  895. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  896. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +154 -59
  897. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  898. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  899. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  900. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  901. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  902. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  903. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  904. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +230 -181
  905. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  906. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  907. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  908. package/src/renderers/shaders/ShaderChunk.js +3 -3
  909. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  910. package/src/renderers/shaders/ShaderLib/depth.glsl.js +14 -2
  911. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  912. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  913. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  914. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  915. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  916. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  917. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  918. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  919. package/src/renderers/shaders/ShaderLib.js +7 -5
  920. package/src/renderers/shaders/UniformsLib.js +2 -7
  921. package/src/renderers/shaders/UniformsUtils.js +21 -2
  922. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  923. package/src/renderers/webgl/WebGLBackground.js +30 -5
  924. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  925. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  926. package/src/renderers/webgl/WebGLCapabilities.js +7 -14
  927. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  928. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  929. package/src/renderers/webgl/WebGLGeometries.js +10 -35
  930. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  931. package/src/renderers/webgl/WebGLInfo.js +3 -1
  932. package/src/renderers/webgl/WebGLLights.js +18 -1
  933. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  934. package/src/renderers/webgl/WebGLObjects.js +3 -1
  935. package/src/renderers/webgl/WebGLOutput.js +267 -0
  936. package/src/renderers/webgl/WebGLProgram.js +87 -148
  937. package/src/renderers/webgl/WebGLPrograms.js +53 -51
  938. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  939. package/src/renderers/webgl/WebGLShadowMap.js +204 -28
  940. package/src/renderers/webgl/WebGLState.js +88 -56
  941. package/src/renderers/webgl/WebGLTextures.js +293 -59
  942. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  943. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  944. package/src/renderers/webgl/WebGLUtils.js +7 -5
  945. package/src/renderers/webgl-fallback/WebGLBackend.js +1416 -293
  946. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  947. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +785 -92
  948. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +62 -1
  949. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  950. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +3 -3
  951. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  952. package/src/renderers/webgl-fallback/utils/WebGLState.js +584 -20
  953. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +468 -80
  954. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +396 -0
  955. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +72 -24
  956. package/src/renderers/webgpu/WebGPUBackend.js +1517 -428
  957. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +31 -4
  958. package/src/renderers/webgpu/WebGPURenderer.js +55 -4
  959. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +23 -16
  960. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +37 -42
  961. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +1335 -241
  962. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +32 -4
  963. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  964. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +144 -20
  965. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +460 -116
  966. package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -4
  967. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +283 -69
  968. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +225 -178
  969. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +583 -191
  970. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +310 -0
  971. package/src/renderers/webgpu/utils/WebGPUUtils.js +150 -28
  972. package/src/renderers/webxr/WebXRController.js +87 -2
  973. package/src/renderers/webxr/WebXRDepthSensing.js +52 -7
  974. package/src/renderers/webxr/WebXRManager.js +275 -15
  975. package/src/scenes/Fog.js +60 -0
  976. package/src/scenes/FogExp2.js +51 -0
  977. package/src/scenes/Scene.js +88 -0
  978. package/src/textures/CanvasTexture.js +28 -0
  979. package/src/textures/CompressedArrayTexture.js +57 -0
  980. package/src/textures/CompressedCubeTexture.js +29 -0
  981. package/src/textures/CompressedTexture.js +64 -6
  982. package/src/textures/CubeDepthTexture.js +76 -0
  983. package/src/textures/CubeTexture.js +52 -4
  984. package/src/textures/Data3DTexture.js +79 -2
  985. package/src/textures/DataArrayTexture.js +93 -0
  986. package/src/textures/DataTexture.js +65 -0
  987. package/src/textures/DepthTexture.js +59 -11
  988. package/src/textures/ExternalTexture.js +56 -0
  989. package/src/textures/FramebufferTexture.js +62 -0
  990. package/src/textures/Source.js +106 -4
  991. package/src/textures/Texture.js +488 -6
  992. package/src/textures/VideoFrameTexture.js +72 -0
  993. package/src/textures/VideoTexture.js +78 -6
  994. package/src/utils.js +322 -3
  995. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  996. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  997. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  998. package/examples/jsm/effects/PeppersGhostEffect.js +0 -153
  999. package/examples/jsm/exporters/MMDExporter.js +0 -217
  1000. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  1001. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
  1002. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  1003. package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +0 -729
  1004. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  1005. package/examples/jsm/loaders/RGBMLoader.js +0 -1081
  1006. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -432
  1007. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -144
  1008. package/examples/jsm/misc/Timer.js +0 -128
  1009. package/examples/jsm/objects/InstancedPoints.js +0 -21
  1010. package/examples/jsm/shaders/GodRaysShader.js +0 -321
  1011. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  1012. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  1013. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  1014. package/src/nodes/accessors/SceneNode.js +0 -55
  1015. package/src/nodes/code/ScriptableNode.js +0 -505
  1016. package/src/nodes/code/ScriptableValueNode.js +0 -170
  1017. package/src/nodes/core/CacheNode.js +0 -50
  1018. package/src/nodes/core/UniformGroup.js +0 -13
  1019. package/src/nodes/display/AfterImageNode.js +0 -158
  1020. package/src/nodes/display/AnaglyphPassNode.js +0 -67
  1021. package/src/nodes/display/AnamorphicNode.js +0 -151
  1022. package/src/nodes/display/BlendMode.js +0 -54
  1023. package/src/nodes/display/BloomNode.js +0 -341
  1024. package/src/nodes/display/DenoiseNode.js +0 -204
  1025. package/src/nodes/display/DepthOfFieldNode.js +0 -124
  1026. package/src/nodes/display/DotScreenNode.js +0 -66
  1027. package/src/nodes/display/FXAANode.js +0 -332
  1028. package/src/nodes/display/FilmNode.js +0 -56
  1029. package/src/nodes/display/GTAONode.js +0 -331
  1030. package/src/nodes/display/GaussianBlurNode.js +0 -213
  1031. package/src/nodes/display/Lut3DNode.js +0 -57
  1032. package/src/nodes/display/MotionBlur.js +0 -25
  1033. package/src/nodes/display/ParallaxBarrierPassNode.js +0 -58
  1034. package/src/nodes/display/PixelationPassNode.js +0 -213
  1035. package/src/nodes/display/PosterizeNode.js +0 -33
  1036. package/src/nodes/display/RGBShiftNode.js +0 -53
  1037. package/src/nodes/display/StereoCompositePassNode.js +0 -110
  1038. package/src/nodes/display/TransitionNode.js +0 -80
  1039. package/src/nodes/fog/FogExp2Node.js +0 -35
  1040. package/src/nodes/fog/FogNode.js +0 -50
  1041. package/src/nodes/fog/FogRangeNode.js +0 -36
  1042. package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
  1043. package/src/nodes/utils/EquirectUVNode.js +0 -36
  1044. package/src/nodes/utils/MatcapUVNode.js +0 -33
  1045. package/src/nodes/utils/OscNode.js +0 -85
  1046. package/src/nodes/utils/SpriteSheetUVNode.js +0 -45
  1047. package/src/nodes/utils/TimerNode.js +0 -97
  1048. package/src/nodes/utils/TriplanarTexturesNode.js +0 -64
  1049. package/src/renderers/common/nodes/Nodes.js +0 -534
  1050. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  1051. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -136
@@ -9,85 +9,252 @@ import {
9
9
  zipSync,
10
10
  } from '../libs/fflate.module.js';
11
11
 
12
- import { decompress } from './../utils/TextureUtils.js';
12
+ class USDNode {
13
13
 
14
- class USDZExporter {
14
+ constructor( name, type = '', metadata = [], properties = [] ) {
15
15
 
16
- parse( scene, onDone, onError, options ) {
16
+ this.name = name;
17
+ this.type = type;
18
+ this.metadata = metadata;
19
+ this.properties = properties;
20
+ this.children = [];
17
21
 
18
- this.parseAsync( scene, options ).then( onDone ).catch( onError );
22
+ }
23
+
24
+ addMetadata( key, value ) {
25
+
26
+ this.metadata.push( { key, value } );
19
27
 
20
28
  }
21
29
 
22
- async parseAsync( scene, options = {} ) {
30
+ addProperty( property, metadata = [] ) {
23
31
 
24
- options = Object.assign( {
25
- ar: {
26
- anchoring: { type: 'plane' },
27
- planeAnchoring: { alignment: 'horizontal' }
28
- },
29
- includeAnchoringProperties: true,
30
- quickLookCompatible: false,
31
- maxTextureSize: 1024,
32
- }, options );
32
+ this.properties.push( { property, metadata } );
33
33
 
34
- const files = {};
35
- const modelFileName = 'model.usda';
34
+ }
36
35
 
37
- // model file should be first in USDZ archive so we init it here
38
- files[ modelFileName ] = null;
36
+ addChild( child ) {
39
37
 
40
- let output = buildHeader();
38
+ this.children.push( child );
41
39
 
42
- output += buildSceneStart( options );
40
+ }
43
41
 
44
- const materials = {};
45
- const textures = {};
42
+ toString( indent = 0 ) {
46
43
 
47
- scene.traverseVisible( ( object ) => {
44
+ const pad = '\t'.repeat( indent );
48
45
 
49
- if ( object.isMesh ) {
46
+ const formattedMetadata = this.metadata.map( ( item ) => {
50
47
 
51
- const geometry = object.geometry;
52
- const material = object.material;
48
+ const key = item.key;
49
+ const value = item.value;
53
50
 
54
- if ( material.isMeshStandardMaterial ) {
51
+ if ( Array.isArray( value ) ) {
55
52
 
56
- const geometryFileName = 'geometries/Geometry_' + geometry.id + '.usda';
53
+ const lines = [];
54
+ lines.push( `${key} = {` );
55
+ value.forEach( ( line ) => {
57
56
 
58
- if ( ! ( geometryFileName in files ) ) {
57
+ lines.push( `${pad}\t\t${line}` );
59
58
 
60
- const meshObject = buildMeshObject( geometry );
61
- files[ geometryFileName ] = buildUSDFileAsString( meshObject );
59
+ } );
60
+ lines.push( `${pad}\t}` );
61
+ return lines.join( '\n' );
62
62
 
63
- }
63
+ } else {
64
64
 
65
- if ( ! ( material.uuid in materials ) ) {
65
+ return `${key} = ${value}`;
66
66
 
67
- materials[ material.uuid ] = material;
67
+ }
68
68
 
69
- }
69
+ } );
70
70
 
71
- output += buildXform( object, geometry, material );
71
+ const meta = formattedMetadata.length
72
+ ? ` (\n${formattedMetadata
73
+ .map( ( l ) => `${pad}\t${l}` )
74
+ .join( '\n' )}\n${pad})`
75
+ : '';
72
76
 
73
- } else {
77
+ const properties = this.properties.map( ( l ) => {
74
78
 
75
- console.warn( 'THREE.USDZExporter: Unsupported material type (USDZ only supports MeshStandardMaterial)', object );
79
+ const property = l.property;
80
+ const metadata = l.metadata.length
81
+ ? ` (\n${l.metadata.map( ( m ) => `${pad}\t\t${m}` ).join( '\n' )}\n${pad}\t)`
82
+ : '';
83
+ return `${pad}\t${property}${metadata}`;
76
84
 
77
- }
85
+ } );
86
+ const children = this.children.map( ( c ) => c.toString( indent + 1 ) );
87
+
88
+ const bodyLines = [];
78
89
 
79
- } else if ( object.isCamera ) {
90
+ if ( properties.length > 0 ) {
80
91
 
81
- output += buildCamera( object );
92
+ bodyLines.push( ...properties );
93
+
94
+ }
95
+
96
+ if ( children.length > 0 ) {
97
+
98
+ if ( properties.length > 0 ) {
99
+
100
+ bodyLines.push( '' );
82
101
 
83
102
  }
84
103
 
85
- } );
104
+ for ( let i = 0; i < children.length; i ++ ) {
86
105
 
106
+ bodyLines.push( children[ i ] );
107
+ if ( i < children.length - 1 ) {
108
+
109
+ bodyLines.push( '' );
110
+
111
+ }
87
112
 
88
- output += buildSceneEnd();
113
+ }
114
+
115
+ }
116
+
117
+ const bodyContent = bodyLines.join( '\n' );
118
+
119
+ const type = this.type ? this.type + ' ' : '';
120
+
121
+ return `${pad}def ${type}"${this.name}"${meta}\n${pad}{\n${bodyContent}\n${pad}}`;
122
+
123
+ }
124
+
125
+ }
126
+
127
+ /**
128
+ * An exporter for USDZ.
129
+ *
130
+ * ```js
131
+ * const exporter = new USDZExporter();
132
+ * const arraybuffer = await exporter.parseAsync( scene );
133
+ * ```
134
+ *
135
+ * @three_import import { USDZExporter } from 'three/addons/exporters/USDZExporter.js';
136
+ */
137
+ class USDZExporter {
138
+
139
+ /**
140
+ * Constructs a new USDZ exporter.
141
+ */
142
+ constructor() {
143
+
144
+ /**
145
+ * A reference to a texture utils module.
146
+ *
147
+ * @type {?(WebGLTextureUtils|WebGPUTextureUtils)}
148
+ * @default null
149
+ */
150
+ this.textureUtils = null;
151
+
152
+ }
153
+
154
+ /**
155
+ * Sets the texture utils for this exporter. Only relevant when compressed textures have to be exported.
156
+ *
157
+ * Depending on whether you use {@link WebGLRenderer} or {@link WebGPURenderer}, you must inject the
158
+ * corresponding texture utils {@link WebGLTextureUtils} or {@link WebGPUTextureUtils}.
159
+ *
160
+ * @param {WebGLTextureUtils|WebGPUTextureUtils} utils - The texture utils.
161
+ */
162
+ setTextureUtils( utils ) {
163
+
164
+ this.textureUtils = utils;
165
+
166
+ }
167
+
168
+ /**
169
+ * Parse the given 3D object and generates the USDZ output.
170
+ *
171
+ * @param {Object3D} scene - The 3D object to export.
172
+ * @param {USDZExporter~OnDone} onDone - A callback function that is executed when the export has finished.
173
+ * @param {USDZExporter~OnError} onError - A callback function that is executed when an error happens.
174
+ * @param {USDZExporter~Options} options - The export options.
175
+ */
176
+ parse( scene, onDone, onError, options ) {
177
+
178
+ this.parseAsync( scene, options ).then( onDone ).catch( onError );
179
+
180
+ }
181
+
182
+ /**
183
+ * Async version of {@link USDZExporter#parse}.
184
+ *
185
+ * @async
186
+ * @param {Object3D} scene - The 3D object to export.
187
+ * @param {USDZExporter~Options} options - The export options.
188
+ * @return {Promise<ArrayBuffer>} A Promise that resolved with the exported USDZ data.
189
+ */
190
+ async parseAsync( scene, options = {} ) {
191
+
192
+ options = Object.assign(
193
+ {
194
+ ar: {
195
+ anchoring: { type: 'plane' },
196
+ planeAnchoring: { alignment: 'horizontal' },
197
+ },
198
+ includeAnchoringProperties: true,
199
+ onlyVisible: true,
200
+ quickLookCompatible: false,
201
+ maxTextureSize: 1024,
202
+ },
203
+ options
204
+ );
89
205
 
90
- output += buildMaterials( materials, textures, options.quickLookCompatible );
206
+ const usedNames = new Set();
207
+
208
+ const files = {};
209
+ const modelFileName = 'model.usda';
210
+
211
+ // model file should be first in USDZ archive so we init it here
212
+ files[ modelFileName ] = null;
213
+
214
+ const root = new USDNode( 'Root', 'Xform' );
215
+ const scenesNode = new USDNode( 'Scenes', 'Scope' );
216
+ scenesNode.addMetadata( 'kind', '"sceneLibrary"' );
217
+ root.addChild( scenesNode );
218
+
219
+ const sceneName = 'Scene';
220
+ const sceneNode = new USDNode( sceneName, 'Xform' );
221
+ sceneNode.addMetadata( 'customData', [
222
+ 'bool preliminary_collidesWithEnvironment = 0',
223
+ `string sceneName = "${sceneName}"`,
224
+ ] );
225
+ sceneNode.addMetadata( 'sceneName', `"${sceneName}"` );
226
+ if ( options.includeAnchoringProperties ) {
227
+
228
+ sceneNode.addProperty(
229
+ `token preliminary:anchoring:type = "${options.ar.anchoring.type}"`
230
+ );
231
+ sceneNode.addProperty(
232
+ `token preliminary:planeAnchoring:alignment = "${options.ar.planeAnchoring.alignment}"`
233
+ );
234
+
235
+ }
236
+
237
+ scenesNode.addChild( sceneNode );
238
+
239
+ let output;
240
+
241
+ const materials = {};
242
+ const textures = {};
243
+
244
+ buildHierarchy( scene, sceneNode, materials, usedNames, files, options );
245
+
246
+ const materialsNode = buildMaterials(
247
+ materials,
248
+ textures,
249
+ options.quickLookCompatible
250
+ );
251
+
252
+ output =
253
+ buildHeader() +
254
+ '\n' +
255
+ root.toString() +
256
+ '\n\n' +
257
+ materialsNode.toString();
91
258
 
92
259
  files[ modelFileName ] = strToU8( output );
93
260
  output = null;
@@ -98,14 +265,32 @@ class USDZExporter {
98
265
 
99
266
  if ( texture.isCompressedTexture === true ) {
100
267
 
101
- texture = decompress( texture );
268
+ if ( this.textureUtils === null ) {
269
+
270
+ throw new Error(
271
+ 'THREE.USDZExporter: setTextureUtils() must be called to process compressed textures.'
272
+ );
273
+
274
+ } else {
275
+
276
+ texture = await this.textureUtils.decompress( texture );
277
+
278
+ }
102
279
 
103
280
  }
104
281
 
105
- const canvas = imageToCanvas( texture.image, texture.flipY, options.maxTextureSize );
106
- const blob = await new Promise( resolve => canvas.toBlob( resolve, 'image/png', 1 ) );
282
+ const canvas = imageToCanvas(
283
+ texture.image,
284
+ texture.flipY,
285
+ options.maxTextureSize
286
+ );
287
+ const blob = await new Promise( ( resolve ) =>
288
+ canvas.toBlob( resolve, 'image/png', 1 )
289
+ );
107
290
 
108
- files[ `textures/Texture_${ id }.png` ] = new Uint8Array( await blob.arrayBuffer() );
291
+ files[ `textures/Texture_${id}.png` ] = new Uint8Array(
292
+ await blob.arrayBuffer()
293
+ );
109
294
 
110
295
  }
111
296
 
@@ -142,12 +327,53 @@ class USDZExporter {
142
327
 
143
328
  }
144
329
 
330
+ function getName( object, namesSet ) {
331
+
332
+ let name = object.name;
333
+ name = name.replace( /[^A-Za-z0-9_]/g, '' );
334
+ if ( /^[0-9]/.test( name ) ) {
335
+
336
+ name = '_' + name;
337
+
338
+ }
339
+
340
+ if ( name === '' ) {
341
+
342
+ if ( object.isCamera ) {
343
+
344
+ name = 'Camera';
345
+
346
+ } else {
347
+
348
+ name = 'Object';
349
+
350
+ }
351
+
352
+ }
353
+
354
+ if ( namesSet.has( name ) ) {
355
+
356
+ name = name + '_' + object.id;
357
+
358
+ }
359
+
360
+ namesSet.add( name );
361
+
362
+ return name;
363
+
364
+ }
365
+
145
366
  function imageToCanvas( image, flipY, maxTextureSize ) {
146
367
 
147
- if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||
148
- ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||
149
- ( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ||
150
- ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {
368
+ if (
369
+ ( typeof HTMLImageElement !== 'undefined' &&
370
+ image instanceof HTMLImageElement ) ||
371
+ ( typeof HTMLCanvasElement !== 'undefined' &&
372
+ image instanceof HTMLCanvasElement ) ||
373
+ ( typeof OffscreenCanvas !== 'undefined' &&
374
+ image instanceof OffscreenCanvas ) ||
375
+ ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap )
376
+ ) {
151
377
 
152
378
  const scale = maxTextureSize / Math.max( image.width, image.height );
153
379
 
@@ -172,7 +398,9 @@ function imageToCanvas( image, flipY, maxTextureSize ) {
172
398
 
173
399
  } else {
174
400
 
175
- throw new Error( 'THREE.USDZExporter: No valid image data found. Unable to process texture.' );
401
+ throw new Error(
402
+ 'THREE.USDZExporter: No valid image data found. Unable to process texture.'
403
+ );
176
404
 
177
405
  }
178
406
 
@@ -193,79 +421,140 @@ function buildHeader() {
193
421
  metersPerUnit = 1
194
422
  upAxis = "Y"
195
423
  )
196
-
197
424
  `;
198
425
 
199
426
  }
200
427
 
201
- function buildSceneStart( options ) {
202
-
203
- const alignment = options.includeAnchoringProperties === true ? `
204
- token preliminary:anchoring:type = "${options.ar.anchoring.type}"
205
- token preliminary:planeAnchoring:alignment = "${options.ar.planeAnchoring.alignment}"
206
- ` : '';
207
- return `def Xform "Root"
208
- {
209
- def Scope "Scenes" (
210
- kind = "sceneLibrary"
211
- )
212
- {
213
- def Xform "Scene" (
214
- customData = {
215
- bool preliminary_collidesWithEnvironment = 0
216
- string sceneName = "Scene"
428
+ // Xform
429
+
430
+ function buildHierarchy( object, parentNode, materials, usedNames, files, options ) {
431
+
432
+ for ( let i = 0, l = object.children.length; i < l; i ++ ) {
433
+
434
+ const child = object.children[ i ];
435
+
436
+ if ( child.visible === false && options.onlyVisible === true ) continue;
437
+
438
+ let childNode;
439
+
440
+ if ( child.isMesh ) {
441
+
442
+ const geometry = child.geometry;
443
+ const material = child.material;
444
+
445
+ if ( material.isMeshStandardMaterial ) {
446
+
447
+ const geometryFileName = 'geometries/Geometry_' + geometry.id + '.usda';
448
+
449
+ if ( ! ( geometryFileName in files ) ) {
450
+
451
+ const meshObject = buildMeshObject( geometry );
452
+ files[ geometryFileName ] = strToU8(
453
+ buildHeader() + '\n' + meshObject.toString()
454
+ );
455
+
456
+ }
457
+
458
+ if ( ! ( material.uuid in materials ) ) {
459
+
460
+ materials[ material.uuid ] = material;
461
+
462
+ }
463
+
464
+ childNode = buildMesh(
465
+ child,
466
+ geometry,
467
+ materials[ material.uuid ],
468
+ usedNames
469
+ );
470
+
471
+ } else {
472
+
473
+ console.warn(
474
+ 'THREE.USDZExporter: Unsupported material type (USDZ only supports MeshStandardMaterial)',
475
+ child
476
+ );
477
+
217
478
  }
218
- sceneName = "Scene"
219
- )
220
- {${alignment}
221
- `;
222
479
 
223
- }
480
+ } else if ( child.isCamera ) {
481
+
482
+ childNode = buildCamera( child, usedNames );
224
483
 
225
- function buildSceneEnd() {
484
+ } else {
485
+
486
+ childNode = buildXform( child, usedNames );
226
487
 
227
- return `
228
488
  }
489
+
490
+ if ( childNode ) {
491
+
492
+ parentNode.addChild( childNode );
493
+ buildHierarchy( child, childNode, materials, usedNames, files, options );
494
+
495
+ }
496
+
229
497
  }
498
+
230
499
  }
231
500
 
232
- `;
501
+ function buildXform( object, usedNames ) {
233
502
 
234
- }
503
+ const name = getName( object, usedNames );
235
504
 
236
- function buildUSDFileAsString( dataToInsert ) {
505
+ if ( object.matrix.determinant() < 0 ) {
237
506
 
238
- let output = buildHeader();
239
- output += dataToInsert;
240
- return strToU8( output );
507
+ console.warn(
508
+ 'THREE.USDZExporter: USDZ does not support negative scales',
509
+ object
510
+ );
241
511
 
242
- }
512
+ }
243
513
 
244
- // Xform
514
+ const node = new USDNode( name, 'Xform' );
515
+
516
+ if ( object.pivot !== null ) {
245
517
 
246
- function buildXform( object, geometry, material ) {
518
+ // Export with pivot using separate transform ops
519
+ const p = object.position;
520
+ const q = object.quaternion;
521
+ const s = object.scale;
522
+ const piv = object.pivot;
247
523
 
248
- const name = 'Object_' + object.id;
249
- const transform = buildMatrix( object.matrixWorld );
524
+ node.addProperty( `float3 xformOp:translate = (${p.x.toPrecision( PRECISION )}, ${p.y.toPrecision( PRECISION )}, ${p.z.toPrecision( PRECISION )})` );
525
+ node.addProperty( `float3 xformOp:translate:pivot = (${piv.x.toPrecision( PRECISION )}, ${piv.y.toPrecision( PRECISION )}, ${piv.z.toPrecision( PRECISION )})` );
526
+ node.addProperty( `quatf xformOp:orient = (${q.w.toPrecision( PRECISION )}, ${q.x.toPrecision( PRECISION )}, ${q.y.toPrecision( PRECISION )}, ${q.z.toPrecision( PRECISION )})` );
527
+ node.addProperty( `float3 xformOp:scale = (${s.x.toPrecision( PRECISION )}, ${s.y.toPrecision( PRECISION )}, ${s.z.toPrecision( PRECISION )})` );
528
+ node.addProperty( 'uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:translate:pivot", "xformOp:orient", "xformOp:scale", "!invert!xformOp:translate:pivot"]' );
250
529
 
251
- if ( object.matrixWorld.determinant() < 0 ) {
530
+ } else {
252
531
 
253
- console.warn( 'THREE.USDZExporter: USDZ does not support negative scales', object );
532
+ // Export as single transform matrix
533
+ const transform = buildMatrix( object.matrix );
534
+ node.addProperty( `matrix4d xformOp:transform = ${transform}` );
535
+ node.addProperty( 'uniform token[] xformOpOrder = ["xformOp:transform"]' );
254
536
 
255
537
  }
256
538
 
257
- return `def Xform "${ name }" (
258
- prepend references = @./geometries/Geometry_${ geometry.id }.usda@</Geometry>
259
- prepend apiSchemas = ["MaterialBindingAPI"]
260
- )
261
- {
262
- matrix4d xformOp:transform = ${ transform }
263
- uniform token[] xformOpOrder = ["xformOp:transform"]
539
+ return node;
264
540
 
265
- rel material:binding = </Materials/Material_${ material.id }>
266
541
  }
267
542
 
268
- `;
543
+ function buildMesh( object, geometry, material, usedNames ) {
544
+
545
+ const node = buildXform( object, usedNames );
546
+
547
+ node.addMetadata(
548
+ 'prepend references',
549
+ `@./geometries/Geometry_${geometry.id}.usda@</Geometry>`
550
+ );
551
+ node.addMetadata( 'prepend apiSchemas', '["MaterialBindingAPI"]' );
552
+
553
+ node.addProperty(
554
+ `rel material:binding = </Materials/Material_${material.id}>`
555
+ );
556
+
557
+ return node;
269
558
 
270
559
  }
271
560
 
@@ -273,13 +562,18 @@ function buildMatrix( matrix ) {
273
562
 
274
563
  const array = matrix.elements;
275
564
 
276
- return `( ${ buildMatrixRow( array, 0 ) }, ${ buildMatrixRow( array, 4 ) }, ${ buildMatrixRow( array, 8 ) }, ${ buildMatrixRow( array, 12 ) } )`;
565
+ return `( ${buildMatrixRow( array, 0 )}, ${buildMatrixRow(
566
+ array,
567
+ 4
568
+ )}, ${buildMatrixRow( array, 8 )}, ${buildMatrixRow( array, 12 )} )`;
277
569
 
278
570
  }
279
571
 
280
572
  function buildMatrixRow( array, offset ) {
281
573
 
282
- return `(${ array[ offset + 0 ] }, ${ array[ offset + 1 ] }, ${ array[ offset + 2 ] }, ${ array[ offset + 3 ] })`;
574
+ return `(${array[ offset + 0 ]}, ${array[ offset + 1 ]}, ${array[ offset + 2 ]}, ${
575
+ array[ offset + 3 ]
576
+ })`;
283
577
 
284
578
  }
285
579
 
@@ -287,43 +581,81 @@ function buildMatrixRow( array, offset ) {
287
581
 
288
582
  function buildMeshObject( geometry ) {
289
583
 
290
- const mesh = buildMesh( geometry );
291
- return `
292
- def "Geometry"
293
- {
294
- ${mesh}
295
- }
296
- `;
584
+ const node = new USDNode( 'Geometry' );
585
+
586
+ const meshNode = buildMeshNode( geometry );
587
+ node.addChild( meshNode );
588
+
589
+ return node;
297
590
 
298
591
  }
299
592
 
300
- function buildMesh( geometry ) {
593
+ function buildMeshNode( geometry ) {
301
594
 
302
595
  const name = 'Geometry';
303
596
  const attributes = geometry.attributes;
304
597
  const count = attributes.position.count;
305
598
 
306
- return `
307
- def Mesh "${ name }"
308
- {
309
- int[] faceVertexCounts = [${ buildMeshVertexCount( geometry ) }]
310
- int[] faceVertexIndices = [${ buildMeshVertexIndices( geometry ) }]
311
- normal3f[] normals = [${ buildVector3Array( attributes.normal, count )}] (
312
- interpolation = "vertex"
313
- )
314
- point3f[] points = [${ buildVector3Array( attributes.position, count )}]
315
- ${ buildPrimvars( attributes ) }
316
- uniform token subdivisionScheme = "none"
599
+ const node = new USDNode( name, 'Mesh' );
600
+
601
+ node.addProperty(
602
+ `int[] faceVertexCounts = [${buildMeshVertexCount( geometry )}]`
603
+ );
604
+ node.addProperty(
605
+ `int[] faceVertexIndices = [${buildMeshVertexIndices( geometry )}]`
606
+ );
607
+ node.addProperty(
608
+ `normal3f[] normals = [${buildVector3Array( attributes.normal, count )}]`,
609
+ [ 'interpolation = "vertex"' ]
610
+ );
611
+ node.addProperty(
612
+ `point3f[] points = [${buildVector3Array( attributes.position, count )}]`
613
+ );
614
+
615
+ for ( let i = 0; i < 4; i ++ ) {
616
+
617
+ const id = i > 0 ? i : '';
618
+ const attribute = attributes[ 'uv' + id ];
619
+ if ( attribute !== undefined ) {
620
+
621
+ node.addProperty(
622
+ `texCoord2f[] primvars:st${id} = [${buildVector2Array( attribute )}]`,
623
+ [ 'interpolation = "vertex"' ]
624
+ );
625
+
626
+ }
627
+
317
628
  }
318
- `;
629
+
630
+ const colorAttribute = attributes.color;
631
+ if ( colorAttribute !== undefined ) {
632
+
633
+ node.addProperty(
634
+ `color3f[] primvars:displayColor = [${buildVector3Array(
635
+ colorAttribute,
636
+ count
637
+ )}]`,
638
+ [ 'interpolation = "vertex"' ]
639
+ );
640
+
641
+ }
642
+
643
+ node.addProperty( 'uniform token subdivisionScheme = "none"' );
644
+
645
+ return node;
319
646
 
320
647
  }
321
648
 
322
649
  function buildMeshVertexCount( geometry ) {
323
650
 
324
- const count = geometry.index !== null ? geometry.index.count : geometry.attributes.position.count;
651
+ const count =
652
+ geometry.index !== null
653
+ ? geometry.index.count
654
+ : geometry.attributes.position.count;
325
655
 
326
- return Array( count / 3 ).fill( 3 ).join( ', ' );
656
+ return Array( count / 3 )
657
+ .fill( 3 )
658
+ .join( ', ' );
327
659
 
328
660
  }
329
661
 
@@ -373,7 +705,11 @@ function buildVector3Array( attribute, count ) {
373
705
  const y = attribute.getY( i );
374
706
  const z = attribute.getZ( i );
375
707
 
376
- array.push( `(${ x.toPrecision( PRECISION ) }, ${ y.toPrecision( PRECISION ) }, ${ z.toPrecision( PRECISION ) })` );
708
+ array.push(
709
+ `(${x.toPrecision( PRECISION )}, ${y.toPrecision(
710
+ PRECISION
711
+ )}, ${z.toPrecision( PRECISION )})`
712
+ );
377
713
 
378
714
  }
379
715
 
@@ -390,7 +726,9 @@ function buildVector2Array( attribute ) {
390
726
  const x = attribute.getX( i );
391
727
  const y = attribute.getY( i );
392
728
 
393
- array.push( `(${ x.toPrecision( PRECISION ) }, ${ 1 - y.toPrecision( PRECISION ) })` );
729
+ array.push(
730
+ `(${x.toPrecision( PRECISION )}, ${1 - y.toPrecision( PRECISION )})`
731
+ );
394
732
 
395
733
  }
396
734
 
@@ -398,65 +736,23 @@ function buildVector2Array( attribute ) {
398
736
 
399
737
  }
400
738
 
401
- function buildPrimvars( attributes ) {
402
-
403
- let string = '';
404
-
405
- for ( let i = 0; i < 4; i ++ ) {
406
-
407
- const id = ( i > 0 ? i : '' );
408
- const attribute = attributes[ 'uv' + id ];
409
-
410
- if ( attribute !== undefined ) {
411
-
412
- string += `
413
- texCoord2f[] primvars:st${ id } = [${ buildVector2Array( attribute )}] (
414
- interpolation = "vertex"
415
- )`;
416
-
417
- }
418
-
419
- }
420
-
421
- // vertex colors
422
-
423
- const colorAttribute = attributes.color;
424
-
425
- if ( colorAttribute !== undefined ) {
426
-
427
- const count = colorAttribute.count;
428
-
429
- string += `
430
- color3f[] primvars:displayColor = [${buildVector3Array( colorAttribute, count )}] (
431
- interpolation = "vertex"
432
- )`;
433
-
434
- }
435
-
436
- return string;
437
-
438
- }
439
-
440
739
  // Materials
441
740
 
442
741
  function buildMaterials( materials, textures, quickLookCompatible = false ) {
443
742
 
444
- const array = [];
743
+ const materialsNode = new USDNode( 'Materials' );
445
744
 
446
745
  for ( const uuid in materials ) {
447
746
 
448
747
  const material = materials[ uuid ];
449
748
 
450
- array.push( buildMaterial( material, textures, quickLookCompatible ) );
749
+ materialsNode.addChild(
750
+ buildMaterial( material, textures, quickLookCompatible )
751
+ );
451
752
 
452
753
  }
453
754
 
454
- return `def "Materials"
455
- {
456
- ${ array.join( '' ) }
457
- }
458
-
459
- `;
755
+ return materialsNode;
460
756
 
461
757
  }
462
758
 
@@ -464,11 +760,9 @@ function buildMaterial( material, textures, quickLookCompatible = false ) {
464
760
 
465
761
  // https://graphics.pixar.com/usd/docs/UsdPreviewSurface-Proposal.html
466
762
 
467
- const pad = ' ';
468
- const inputs = [];
469
- const samplers = [];
763
+ const materialNode = new USDNode( `Material_${material.id}`, 'Material' );
470
764
 
471
- function buildTexture( texture, mapType, color ) {
765
+ function buildTextureNodes( texture, mapType, color ) {
472
766
 
473
767
  const id = texture.source.id + '_' + texture.flipY;
474
768
 
@@ -479,7 +773,7 @@ function buildMaterial( material, textures, quickLookCompatible = false ) {
479
773
  const WRAPPINGS = {
480
774
  1000: 'repeat', // RepeatWrapping
481
775
  1001: 'clamp', // ClampToEdgeWrapping
482
- 1002: 'mirror' // MirroredRepeatWrapping
776
+ 1002: 'mirror', // MirroredRepeatWrapping
483
777
  };
484
778
 
485
779
  const repeat = texture.repeat.clone();
@@ -514,135 +808,255 @@ function buildMaterial( material, textures, quickLookCompatible = false ) {
514
808
 
515
809
  }
516
810
 
517
- return `
518
- def Shader "PrimvarReader_${ mapType }"
519
- {
520
- uniform token info:id = "UsdPrimvarReader_float2"
521
- float2 inputs:fallback = (0.0, 0.0)
522
- token inputs:varname = "${ uv }"
523
- float2 outputs:result
811
+ const primvarReaderNode = new USDNode( `PrimvarReader_${mapType}`, 'Shader' );
812
+ primvarReaderNode.addProperty(
813
+ 'uniform token info:id = "UsdPrimvarReader_float2"'
814
+ );
815
+ primvarReaderNode.addProperty( 'float2 inputs:fallback = (0.0, 0.0)' );
816
+ primvarReaderNode.addProperty( `string inputs:varname = "${uv}"` );
817
+ primvarReaderNode.addProperty( 'float2 outputs:result' );
818
+
819
+ const transform2dNode = new USDNode( `Transform2d_${mapType}`, 'Shader' );
820
+ transform2dNode.addProperty( 'uniform token info:id = "UsdTransform2d"' );
821
+ transform2dNode.addProperty(
822
+ `float2 inputs:in.connect = </Materials/Material_${material.id}/PrimvarReader_${mapType}.outputs:result>`
823
+ );
824
+ transform2dNode.addProperty(
825
+ `float inputs:rotation = ${( rotation * ( 180 / Math.PI ) ).toFixed(
826
+ PRECISION
827
+ )}`
828
+ );
829
+ transform2dNode.addProperty(
830
+ `float2 inputs:scale = ${buildVector2( repeat )}`
831
+ );
832
+ transform2dNode.addProperty(
833
+ `float2 inputs:translation = ${buildVector2( offset )}`
834
+ );
835
+ transform2dNode.addProperty( 'float2 outputs:result' );
836
+
837
+ const textureNode = new USDNode(
838
+ `Texture_${texture.id}_${mapType}`,
839
+ 'Shader'
840
+ );
841
+ textureNode.addProperty( 'uniform token info:id = "UsdUVTexture"' );
842
+ textureNode.addProperty( `asset inputs:file = @textures/Texture_${id}.png@` );
843
+ textureNode.addProperty(
844
+ `float2 inputs:st.connect = </Materials/Material_${material.id}/Transform2d_${mapType}.outputs:result>`
845
+ );
846
+
847
+ if ( color !== undefined ) {
848
+
849
+ textureNode.addProperty( `float4 inputs:scale = ${buildColor4( color )}` );
850
+
524
851
  }
525
852
 
526
- def Shader "Transform2d_${ mapType }"
527
- {
528
- uniform token info:id = "UsdTransform2d"
529
- token inputs:in.connect = </Materials/Material_${ material.id }/PrimvarReader_${ mapType }.outputs:result>
530
- float inputs:rotation = ${ ( rotation * ( 180 / Math.PI ) ).toFixed( PRECISION ) }
531
- float2 inputs:scale = ${ buildVector2( repeat ) }
532
- float2 inputs:translation = ${ buildVector2( offset ) }
533
- float2 outputs:result
853
+ if ( mapType === 'normal' ) {
854
+
855
+ textureNode.addProperty( 'float4 inputs:scale = (2, 2, 2, 1)' );
856
+ textureNode.addProperty( 'float4 inputs:bias = (-1, -1, -1, 0)' );
857
+
534
858
  }
535
859
 
536
- def Shader "Texture_${ texture.id }_${ mapType }"
537
- {
538
- uniform token info:id = "UsdUVTexture"
539
- asset inputs:file = @textures/Texture_${ id }.png@
540
- float2 inputs:st.connect = </Materials/Material_${ material.id }/Transform2d_${ mapType }.outputs:result>
541
- ${ color !== undefined ? 'float4 inputs:scale = ' + buildColor4( color ) : '' }
542
- token inputs:sourceColorSpace = "${ texture.colorSpace === NoColorSpace ? 'raw' : 'sRGB' }"
543
- token inputs:wrapS = "${ WRAPPINGS[ texture.wrapS ] }"
544
- token inputs:wrapT = "${ WRAPPINGS[ texture.wrapT ] }"
545
- float outputs:r
546
- float outputs:g
547
- float outputs:b
548
- float3 outputs:rgb
549
- ${ material.transparent || material.alphaTest > 0.0 ? 'float outputs:a' : '' }
550
- }`;
860
+ textureNode.addProperty(
861
+ `token inputs:sourceColorSpace = "${
862
+ texture.colorSpace === NoColorSpace ? 'raw' : 'sRGB'
863
+ }"`
864
+ );
865
+ textureNode.addProperty(
866
+ `token inputs:wrapS = "${WRAPPINGS[ texture.wrapS ]}"`
867
+ );
868
+ textureNode.addProperty(
869
+ `token inputs:wrapT = "${WRAPPINGS[ texture.wrapT ]}"`
870
+ );
871
+ textureNode.addProperty( 'float outputs:r' );
872
+ textureNode.addProperty( 'float outputs:g' );
873
+ textureNode.addProperty( 'float outputs:b' );
874
+ textureNode.addProperty( 'float3 outputs:rgb' );
875
+
876
+ if ( material.transparent || material.alphaTest > 0.0 ) {
877
+
878
+ textureNode.addProperty( 'float outputs:a' );
551
879
 
552
- }
880
+ }
881
+
882
+ return [ primvarReaderNode, transform2dNode, textureNode ];
553
883
 
884
+ }
554
885
 
555
886
  if ( material.side === DoubleSide ) {
556
887
 
557
- console.warn( 'THREE.USDZExporter: USDZ does not support double sided materials', material );
888
+ console.warn(
889
+ 'THREE.USDZExporter: USDZ does not support double sided materials',
890
+ material
891
+ );
558
892
 
559
893
  }
560
894
 
895
+ const previewSurfaceNode = new USDNode( 'PreviewSurface', 'Shader' );
896
+ previewSurfaceNode.addProperty( 'uniform token info:id = "UsdPreviewSurface"' );
897
+
561
898
  if ( material.map?.image ) {
562
899
 
563
- inputs.push( `${ pad }color3f inputs:diffuseColor.connect = </Materials/Material_${ material.id }/Texture_${ material.map.id }_diffuse.outputs:rgb>` );
900
+ previewSurfaceNode.addProperty(
901
+ `color3f inputs:diffuseColor.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:rgb>`
902
+ );
564
903
 
565
904
  if ( material.transparent ) {
566
905
 
567
- inputs.push( `${ pad }float inputs:opacity.connect = </Materials/Material_${ material.id }/Texture_${ material.map.id }_diffuse.outputs:a>` );
906
+ previewSurfaceNode.addProperty(
907
+ `float inputs:opacity.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:a>`
908
+ );
568
909
 
569
910
  } else if ( material.alphaTest > 0.0 ) {
570
911
 
571
- inputs.push( `${ pad }float inputs:opacity.connect = </Materials/Material_${ material.id }/Texture_${ material.map.id }_diffuse.outputs:a>` );
572
- inputs.push( `${ pad }float inputs:opacityThreshold = ${material.alphaTest}` );
912
+ previewSurfaceNode.addProperty(
913
+ `float inputs:opacity.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:a>`
914
+ );
915
+ previewSurfaceNode.addProperty(
916
+ `float inputs:opacityThreshold = ${material.alphaTest}`
917
+ );
573
918
 
574
919
  }
575
920
 
576
- samplers.push( buildTexture( material.map, 'diffuse', material.color ) );
921
+ const textureNodes = buildTextureNodes(
922
+ material.map,
923
+ 'diffuse',
924
+ material.color
925
+ );
926
+ textureNodes.forEach( ( node ) => materialNode.addChild( node ) );
577
927
 
578
928
  } else {
579
929
 
580
- inputs.push( `${ pad }color3f inputs:diffuseColor = ${ buildColor( material.color ) }` );
930
+ previewSurfaceNode.addProperty(
931
+ `color3f inputs:diffuseColor = ${buildColor( material.color )}`
932
+ );
581
933
 
582
934
  }
583
935
 
584
936
  if ( material.emissiveMap?.image ) {
585
937
 
586
- inputs.push( `${ pad }color3f inputs:emissiveColor.connect = </Materials/Material_${ material.id }/Texture_${ material.emissiveMap.id }_emissive.outputs:rgb>` );
587
-
588
- samplers.push( buildTexture( material.emissiveMap, 'emissive', new Color( material.emissive.r * material.emissiveIntensity, material.emissive.g * material.emissiveIntensity, material.emissive.b * material.emissiveIntensity ) ) );
938
+ previewSurfaceNode.addProperty(
939
+ `color3f inputs:emissiveColor.connect = </Materials/Material_${material.id}/Texture_${material.emissiveMap.id}_emissive.outputs:rgb>`
940
+ );
941
+
942
+ const emissiveColor = new Color(
943
+ material.emissive.r * material.emissiveIntensity,
944
+ material.emissive.g * material.emissiveIntensity,
945
+ material.emissive.b * material.emissiveIntensity
946
+ );
947
+ const textureNodes = buildTextureNodes(
948
+ material.emissiveMap,
949
+ 'emissive',
950
+ emissiveColor
951
+ );
952
+ textureNodes.forEach( ( node ) => materialNode.addChild( node ) );
589
953
 
590
954
  } else if ( material.emissive.getHex() > 0 ) {
591
955
 
592
- inputs.push( `${ pad }color3f inputs:emissiveColor = ${ buildColor( material.emissive ) }` );
956
+ previewSurfaceNode.addProperty(
957
+ `color3f inputs:emissiveColor = ${buildColor( material.emissive )}`
958
+ );
593
959
 
594
960
  }
595
961
 
596
962
  if ( material.normalMap?.image ) {
597
963
 
598
- inputs.push( `${ pad }normal3f inputs:normal.connect = </Materials/Material_${ material.id }/Texture_${ material.normalMap.id }_normal.outputs:rgb>` );
964
+ previewSurfaceNode.addProperty(
965
+ `normal3f inputs:normal.connect = </Materials/Material_${material.id}/Texture_${material.normalMap.id}_normal.outputs:rgb>`
966
+ );
599
967
 
600
- samplers.push( buildTexture( material.normalMap, 'normal' ) );
968
+ const textureNodes = buildTextureNodes( material.normalMap, 'normal' );
969
+ textureNodes.forEach( ( node ) => materialNode.addChild( node ) );
601
970
 
602
971
  }
603
972
 
604
973
  if ( material.aoMap?.image ) {
605
974
 
606
- inputs.push( `${ pad }float inputs:occlusion.connect = </Materials/Material_${ material.id }/Texture_${ material.aoMap.id }_occlusion.outputs:r>` );
607
-
608
- samplers.push( buildTexture( material.aoMap, 'occlusion', new Color( material.aoMapIntensity, material.aoMapIntensity, material.aoMapIntensity ) ) );
975
+ previewSurfaceNode.addProperty(
976
+ `float inputs:occlusion.connect = </Materials/Material_${material.id}/Texture_${material.aoMap.id}_occlusion.outputs:r>`
977
+ );
978
+
979
+ const aoColor = new Color(
980
+ material.aoMapIntensity,
981
+ material.aoMapIntensity,
982
+ material.aoMapIntensity
983
+ );
984
+ const textureNodes = buildTextureNodes(
985
+ material.aoMap,
986
+ 'occlusion',
987
+ aoColor
988
+ );
989
+ textureNodes.forEach( ( node ) => materialNode.addChild( node ) );
609
990
 
610
991
  }
611
992
 
612
993
  if ( material.roughnessMap?.image && material.roughness === 1 ) {
613
994
 
614
- inputs.push( `${ pad }float inputs:roughness.connect = </Materials/Material_${ material.id }/Texture_${ material.roughnessMap.id }_roughness.outputs:g>` );
615
-
616
- samplers.push( buildTexture( material.roughnessMap, 'roughness', new Color( material.roughness, material.roughness, material.roughness ) ) );
995
+ previewSurfaceNode.addProperty(
996
+ `float inputs:roughness.connect = </Materials/Material_${material.id}/Texture_${material.roughnessMap.id}_roughness.outputs:g>`
997
+ );
998
+
999
+ const roughnessColor = new Color(
1000
+ material.roughness,
1001
+ material.roughness,
1002
+ material.roughness
1003
+ );
1004
+ const textureNodes = buildTextureNodes(
1005
+ material.roughnessMap,
1006
+ 'roughness',
1007
+ roughnessColor
1008
+ );
1009
+ textureNodes.forEach( ( node ) => materialNode.addChild( node ) );
617
1010
 
618
1011
  } else {
619
1012
 
620
- inputs.push( `${ pad }float inputs:roughness = ${ material.roughness }` );
1013
+ previewSurfaceNode.addProperty(
1014
+ `float inputs:roughness = ${material.roughness}`
1015
+ );
621
1016
 
622
1017
  }
623
1018
 
624
1019
  if ( material.metalnessMap?.image && material.metalness === 1 ) {
625
1020
 
626
- inputs.push( `${ pad }float inputs:metallic.connect = </Materials/Material_${ material.id }/Texture_${ material.metalnessMap.id }_metallic.outputs:b>` );
627
-
628
- samplers.push( buildTexture( material.metalnessMap, 'metallic', new Color( material.metalness, material.metalness, material.metalness ) ) );
1021
+ previewSurfaceNode.addProperty(
1022
+ `float inputs:metallic.connect = </Materials/Material_${material.id}/Texture_${material.metalnessMap.id}_metallic.outputs:b>`
1023
+ );
1024
+
1025
+ const metalnessColor = new Color(
1026
+ material.metalness,
1027
+ material.metalness,
1028
+ material.metalness
1029
+ );
1030
+ const textureNodes = buildTextureNodes(
1031
+ material.metalnessMap,
1032
+ 'metallic',
1033
+ metalnessColor
1034
+ );
1035
+ textureNodes.forEach( ( node ) => materialNode.addChild( node ) );
629
1036
 
630
1037
  } else {
631
1038
 
632
- inputs.push( `${ pad }float inputs:metallic = ${ material.metalness }` );
1039
+ previewSurfaceNode.addProperty(
1040
+ `float inputs:metallic = ${material.metalness}`
1041
+ );
633
1042
 
634
1043
  }
635
1044
 
636
1045
  if ( material.alphaMap?.image ) {
637
1046
 
638
- inputs.push( `${pad}float inputs:opacity.connect = </Materials/Material_${material.id}/Texture_${material.alphaMap.id}_opacity.outputs:r>` );
639
- inputs.push( `${pad}float inputs:opacityThreshold = 0.0001` );
1047
+ previewSurfaceNode.addProperty(
1048
+ `float inputs:opacity.connect = </Materials/Material_${material.id}/Texture_${material.alphaMap.id}_opacity.outputs:r>`
1049
+ );
1050
+ previewSurfaceNode.addProperty( 'float inputs:opacityThreshold = 0.0001' );
640
1051
 
641
- samplers.push( buildTexture( material.alphaMap, 'opacity' ) );
1052
+ const textureNodes = buildTextureNodes( material.alphaMap, 'opacity' );
1053
+ textureNodes.forEach( ( node ) => materialNode.addChild( node ) );
642
1054
 
643
1055
  } else {
644
1056
 
645
- inputs.push( `${pad}float inputs:opacity = ${material.opacity}` );
1057
+ previewSurfaceNode.addProperty(
1058
+ `float inputs:opacity = ${material.opacity}`
1059
+ );
646
1060
 
647
1061
  }
648
1062
 
@@ -650,115 +1064,191 @@ function buildMaterial( material, textures, quickLookCompatible = false ) {
650
1064
 
651
1065
  if ( material.clearcoatMap !== null ) {
652
1066
 
653
- inputs.push( `${pad}float inputs:clearcoat.connect = </Materials/Material_${material.id}/Texture_${material.clearcoatMap.id}_clearcoat.outputs:r>` );
654
- samplers.push( buildTexture( material.clearcoatMap, 'clearcoat', new Color( material.clearcoat, material.clearcoat, material.clearcoat ) ) );
1067
+ previewSurfaceNode.addProperty(
1068
+ `float inputs:clearcoat.connect = </Materials/Material_${material.id}/Texture_${material.clearcoatMap.id}_clearcoat.outputs:r>`
1069
+ );
1070
+
1071
+ const clearcoatColor = new Color(
1072
+ material.clearcoat,
1073
+ material.clearcoat,
1074
+ material.clearcoat
1075
+ );
1076
+ const textureNodes = buildTextureNodes(
1077
+ material.clearcoatMap,
1078
+ 'clearcoat',
1079
+ clearcoatColor
1080
+ );
1081
+ textureNodes.forEach( ( node ) => materialNode.addChild( node ) );
655
1082
 
656
1083
  } else {
657
1084
 
658
- inputs.push( `${pad}float inputs:clearcoat = ${material.clearcoat}` );
1085
+ previewSurfaceNode.addProperty(
1086
+ `float inputs:clearcoat = ${material.clearcoat}`
1087
+ );
659
1088
 
660
1089
  }
661
1090
 
662
1091
  if ( material.clearcoatRoughnessMap !== null ) {
663
1092
 
664
- inputs.push( `${pad}float inputs:clearcoatRoughness.connect = </Materials/Material_${material.id}/Texture_${material.clearcoatRoughnessMap.id}_clearcoatRoughness.outputs:g>` );
665
- samplers.push( buildTexture( material.clearcoatRoughnessMap, 'clearcoatRoughness', new Color( material.clearcoatRoughness, material.clearcoatRoughness, material.clearcoatRoughness ) ) );
1093
+ previewSurfaceNode.addProperty(
1094
+ `float inputs:clearcoatRoughness.connect = </Materials/Material_${material.id}/Texture_${material.clearcoatRoughnessMap.id}_clearcoatRoughness.outputs:g>`
1095
+ );
1096
+
1097
+ const clearcoatRoughnessColor = new Color(
1098
+ material.clearcoatRoughness,
1099
+ material.clearcoatRoughness,
1100
+ material.clearcoatRoughness
1101
+ );
1102
+ const textureNodes = buildTextureNodes(
1103
+ material.clearcoatRoughnessMap,
1104
+ 'clearcoatRoughness',
1105
+ clearcoatRoughnessColor
1106
+ );
1107
+ textureNodes.forEach( ( node ) => materialNode.addChild( node ) );
666
1108
 
667
1109
  } else {
668
1110
 
669
- inputs.push( `${pad}float inputs:clearcoatRoughness = ${material.clearcoatRoughness}` );
1111
+ previewSurfaceNode.addProperty(
1112
+ `float inputs:clearcoatRoughness = ${material.clearcoatRoughness}`
1113
+ );
670
1114
 
671
1115
  }
672
1116
 
673
- inputs.push( `${ pad }float inputs:ior = ${ material.ior }` );
1117
+ previewSurfaceNode.addProperty( `float inputs:ior = ${material.ior}` );
674
1118
 
675
1119
  }
676
1120
 
677
- return `
678
- def Material "Material_${ material.id }"
679
- {
680
- def Shader "PreviewSurface"
681
- {
682
- uniform token info:id = "UsdPreviewSurface"
683
- ${ inputs.join( '\n' ) }
684
- int inputs:useSpecularWorkflow = 0
685
- token outputs:surface
686
- }
1121
+ previewSurfaceNode.addProperty( 'int inputs:useSpecularWorkflow = 0' );
1122
+ previewSurfaceNode.addProperty( 'token outputs:surface' );
687
1123
 
688
- token outputs:surface.connect = </Materials/Material_${ material.id }/PreviewSurface.outputs:surface>
1124
+ materialNode.addChild( previewSurfaceNode );
689
1125
 
690
- ${ samplers.join( '\n' ) }
1126
+ materialNode.addProperty(
1127
+ `token outputs:surface.connect = </Materials/Material_${material.id}/PreviewSurface.outputs:surface>`
1128
+ );
691
1129
 
692
- }
693
- `;
1130
+ return materialNode;
694
1131
 
695
1132
  }
696
1133
 
697
1134
  function buildColor( color ) {
698
1135
 
699
- return `(${ color.r }, ${ color.g }, ${ color.b })`;
1136
+ return `(${color.r}, ${color.g}, ${color.b})`;
700
1137
 
701
1138
  }
702
1139
 
703
1140
  function buildColor4( color ) {
704
1141
 
705
- return `(${ color.r }, ${ color.g }, ${ color.b }, 1.0)`;
1142
+ return `(${color.r}, ${color.g}, ${color.b}, 1.0)`;
706
1143
 
707
1144
  }
708
1145
 
709
1146
  function buildVector2( vector ) {
710
1147
 
711
- return `(${ vector.x }, ${ vector.y })`;
1148
+ return `(${vector.x}, ${vector.y})`;
712
1149
 
713
1150
  }
714
1151
 
1152
+ function buildCamera( camera, usedNames ) {
715
1153
 
716
- function buildCamera( camera ) {
1154
+ const name = getName( camera, usedNames );
717
1155
 
718
- const name = camera.name ? camera.name : 'Camera_' + camera.id;
1156
+ const transform = buildMatrix( camera.matrix );
719
1157
 
720
- const transform = buildMatrix( camera.matrixWorld );
1158
+ if ( camera.matrix.determinant() < 0 ) {
721
1159
 
722
- if ( camera.matrixWorld.determinant() < 0 ) {
723
-
724
- console.warn( 'THREE.USDZExporter: USDZ does not support negative scales', camera );
1160
+ console.warn(
1161
+ 'THREE.USDZExporter: USDZ does not support negative scales',
1162
+ camera
1163
+ );
725
1164
 
726
1165
  }
727
1166
 
1167
+ const node = new USDNode( name, 'Camera' );
1168
+ node.addProperty( `matrix4d xformOp:transform = ${transform}` );
1169
+ node.addProperty( 'uniform token[] xformOpOrder = ["xformOp:transform"]' );
1170
+
1171
+ const projection = camera.isOrthographicCamera
1172
+ ? 'orthographic'
1173
+ : 'perspective';
1174
+ node.addProperty( `token projection = "${projection}"` );
1175
+
1176
+ const clippingRange = `(${camera.near.toPrecision(
1177
+ PRECISION
1178
+ )}, ${camera.far.toPrecision( PRECISION )})`;
1179
+ node.addProperty( `float2 clippingRange = ${clippingRange}` );
1180
+
1181
+ let horizontalAperture;
728
1182
  if ( camera.isOrthographicCamera ) {
729
1183
 
730
- return `def Camera "${name}"
731
- {
732
- matrix4d xformOp:transform = ${ transform }
733
- uniform token[] xformOpOrder = ["xformOp:transform"]
1184
+ horizontalAperture = (
1185
+ ( Math.abs( camera.left ) + Math.abs( camera.right ) ) *
1186
+ 10
1187
+ ).toPrecision( PRECISION );
734
1188
 
735
- float2 clippingRange = (${ camera.near.toPrecision( PRECISION ) }, ${ camera.far.toPrecision( PRECISION ) })
736
- float horizontalAperture = ${ ( ( Math.abs( camera.left ) + Math.abs( camera.right ) ) * 10 ).toPrecision( PRECISION ) }
737
- float verticalAperture = ${ ( ( Math.abs( camera.top ) + Math.abs( camera.bottom ) ) * 10 ).toPrecision( PRECISION ) }
738
- token projection = "orthographic"
739
- }
740
-
741
- `;
1189
+ } else {
1190
+
1191
+ horizontalAperture = camera.getFilmWidth().toPrecision( PRECISION );
1192
+
1193
+ }
1194
+
1195
+ node.addProperty( `float horizontalAperture = ${horizontalAperture}` );
1196
+
1197
+ let verticalAperture;
1198
+ if ( camera.isOrthographicCamera ) {
1199
+
1200
+ verticalAperture = (
1201
+ ( Math.abs( camera.top ) + Math.abs( camera.bottom ) ) *
1202
+ 10
1203
+ ).toPrecision( PRECISION );
742
1204
 
743
1205
  } else {
744
1206
 
745
- return `def Camera "${name}"
746
- {
747
- matrix4d xformOp:transform = ${ transform }
748
- uniform token[] xformOpOrder = ["xformOp:transform"]
749
-
750
- float2 clippingRange = (${ camera.near.toPrecision( PRECISION ) }, ${ camera.far.toPrecision( PRECISION ) })
751
- float focalLength = ${ camera.getFocalLength().toPrecision( PRECISION ) }
752
- float focusDistance = ${ camera.focus.toPrecision( PRECISION ) }
753
- float horizontalAperture = ${ camera.getFilmWidth().toPrecision( PRECISION ) }
754
- token projection = "perspective"
755
- float verticalAperture = ${ camera.getFilmHeight().toPrecision( PRECISION ) }
756
- }
757
-
758
- `;
1207
+ verticalAperture = camera.getFilmHeight().toPrecision( PRECISION );
759
1208
 
760
1209
  }
761
1210
 
1211
+ node.addProperty( `float verticalAperture = ${verticalAperture}` );
1212
+
1213
+ if ( camera.isPerspectiveCamera ) {
1214
+
1215
+ const focalLength = camera.getFocalLength().toPrecision( PRECISION );
1216
+ node.addProperty( `float focalLength = ${focalLength}` );
1217
+
1218
+ const focusDistance = camera.focus.toPrecision( PRECISION );
1219
+ node.addProperty( `float focusDistance = ${focusDistance}` );
1220
+
1221
+ }
1222
+
1223
+ return node;
1224
+
762
1225
  }
763
1226
 
1227
+ /**
1228
+ * Export options of `USDZExporter`.
1229
+ *
1230
+ * @typedef {Object} USDZExporter~Options
1231
+ * @property {number} [maxTextureSize=1024] - The maximum texture size that is going to be exported.
1232
+ * @property {boolean} [includeAnchoringProperties=true] - Whether to include anchoring properties or not.
1233
+ * @property {boolean} [onlyVisible=true] - Export only visible 3D objects.
1234
+ * @property {Object} [ar] - If `includeAnchoringProperties` is set to `true`, the anchoring type and alignment
1235
+ * can be configured via `ar.anchoring.type` and `ar.planeAnchoring.alignment`.
1236
+ * @property {boolean} [quickLookCompatible=false] - Whether to make the exported USDZ compatible to QuickLook
1237
+ * which means the asset is modified to accommodate the bugs FB10036297 and FB11442287 (Apple Feedback).
1238
+ **/
1239
+
1240
+ /**
1241
+ * onDone callback of `USDZExporter`.
1242
+ *
1243
+ * @callback USDZExporter~OnDone
1244
+ * @param {ArrayBuffer} result - The generated USDZ.
1245
+ */
1246
+
1247
+ /**
1248
+ * onError callback of `USDZExporter`.
1249
+ *
1250
+ * @callback USDZExporter~OnError
1251
+ * @param {Error} error - The error object.
1252
+ */
1253
+
764
1254
  export { USDZExporter };