@gnsx/three 0.185.15 → 0.186.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 (417) hide show
  1. package/build/three.cjs +10 -82600
  2. package/build/three.core.js +1303 -728
  3. package/build/three.module.js +439 -338
  4. package/build/three.tsl.js +74 -44
  5. package/build/three.webgpu.js +6036 -2184
  6. package/build/three.webgpu.nodes.js +6020 -2184
  7. package/examples/jsm/Addons.js +6 -6
  8. package/examples/jsm/controls/ArcballControls.js +1 -1
  9. package/examples/jsm/controls/FirstPersonControls.js +44 -20
  10. package/examples/jsm/controls/OrbitControls.js +9 -0
  11. package/examples/jsm/controls/TrackballControls.js +109 -4
  12. package/examples/jsm/csm/CSMShadowNode.js +13 -0
  13. package/examples/jsm/exporters/GLTFExporter.js +23 -7
  14. package/examples/jsm/exporters/USDZExporter.js +2 -2
  15. package/examples/jsm/generators/CityGenerator.js +377 -45
  16. package/examples/jsm/generators/ForestGenerator.js +12 -12
  17. package/examples/jsm/generators/TerrainGenerator.js +49 -37
  18. package/examples/jsm/generators/TreeGenerator.js +70 -76
  19. package/examples/jsm/generators/city/BenchGenerator.js +127 -0
  20. package/examples/jsm/generators/city/CarGenerator.js +479 -0
  21. package/examples/jsm/generators/city/CityGeneratorUtils.js +31 -0
  22. package/examples/jsm/generators/city/HydrantGenerator.js +106 -0
  23. package/examples/jsm/generators/city/InstancedMeshGenerator.js +86 -0
  24. package/examples/jsm/generators/city/PersonGenerator.js +447 -0
  25. package/examples/jsm/generators/city/SidewalkGenerator.js +33 -38
  26. package/examples/jsm/generators/city/SkyscraperGenerator.js +448 -48
  27. package/examples/jsm/generators/city/StreetTreeGenerator.js +231 -0
  28. package/examples/jsm/generators/city/StreetlightGenerator.js +100 -0
  29. package/examples/jsm/generators/city/TrafficlightGenerator.js +106 -0
  30. package/examples/jsm/generators/city/TrashcanGenerator.js +100 -0
  31. package/examples/jsm/geometries/BoxLineGeometry.js +1 -1
  32. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  33. package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -1
  34. package/examples/jsm/gpgpu/CountingSort.js +271 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +60 -239
  36. package/examples/jsm/helpers/LightProbeGridHelperWebGL.js +221 -0
  37. package/examples/jsm/inspector/Extension.js +94 -0
  38. package/examples/jsm/inspector/Inspector.js +145 -41
  39. package/examples/jsm/inspector/RendererInspector.js +100 -52
  40. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +2609 -0
  41. package/examples/jsm/inspector/extensions/color-grading/ColorWheel.js +352 -0
  42. package/examples/jsm/inspector/extensions/color-grading/CurveEditor.js +599 -0
  43. package/examples/jsm/inspector/extensions/color-grading/LUT3DStyle.js +1201 -0
  44. package/examples/jsm/inspector/extensions/color-grading/LUTMath.js +788 -0
  45. package/examples/jsm/inspector/extensions/color-grading/modules/BrightnessModule.js +72 -0
  46. package/examples/jsm/inspector/extensions/color-grading/modules/ColorWheelModule.js +112 -0
  47. package/examples/jsm/inspector/extensions/color-grading/modules/ContrastModule.js +82 -0
  48. package/examples/jsm/inspector/extensions/color-grading/modules/CurvesModule.js +109 -0
  49. package/examples/jsm/inspector/extensions/color-grading/modules/ExposureHueModule.js +110 -0
  50. package/examples/jsm/inspector/extensions/color-grading/modules/ExposureModule.js +73 -0
  51. package/examples/jsm/inspector/extensions/color-grading/modules/HueModule.js +78 -0
  52. package/examples/jsm/inspector/extensions/color-grading/modules/ImportedCubeModule.js +89 -0
  53. package/examples/jsm/inspector/extensions/color-grading/modules/Module.js +285 -0
  54. package/examples/jsm/inspector/extensions/color-grading/modules/OutputModule.js +101 -0
  55. package/examples/jsm/inspector/extensions/color-grading/modules/RendererModule.js +225 -0
  56. package/examples/jsm/inspector/extensions/color-grading/modules/SatVibranceModule.js +102 -0
  57. package/examples/jsm/inspector/extensions/color-grading/modules/SaturationModule.js +76 -0
  58. package/examples/jsm/inspector/extensions/color-grading/modules/VibranceModule.js +76 -0
  59. package/examples/jsm/inspector/extensions/color-grading/modules/WhiteBalanceModule.js +86 -0
  60. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +26 -31
  61. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -0
  62. package/examples/jsm/inspector/tabs/Memory.js +0 -2
  63. package/examples/jsm/inspector/tabs/Settings.js +4 -0
  64. package/examples/jsm/inspector/tabs/Timeline.js +223 -171
  65. package/examples/jsm/inspector/tabs/Viewer.js +515 -21
  66. package/examples/jsm/inspector/ui/List.js +15 -9
  67. package/examples/jsm/inspector/ui/Profiler.js +170 -14
  68. package/examples/jsm/inspector/ui/Style.js +269 -23
  69. package/examples/jsm/inspector/ui/Tab.js +2 -0
  70. package/examples/jsm/inspector/ui/Values.js +14 -2
  71. package/examples/jsm/interactive/HTMLMesh.js +19 -3
  72. package/examples/jsm/lighting/LightProbeGrid.js +484 -889
  73. package/examples/jsm/lighting/LightProbeGridUtils.js +107 -0
  74. package/examples/jsm/lighting/LightProbeGridWebGL.js +841 -0
  75. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +194 -0
  76. package/examples/jsm/lighting/vxgi/VXGINode.js +660 -0
  77. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +478 -0
  78. package/examples/jsm/lighting/vxgi/VXGIVolume.js +1430 -0
  79. package/examples/jsm/lights/SunLight.js +95 -0
  80. package/examples/jsm/lights/SunLightNode.js +56 -0
  81. package/examples/jsm/lights/SunLightShadow.js +319 -0
  82. package/examples/jsm/lights/SunShadowNode.js +312 -0
  83. package/examples/jsm/loaders/3DMLoader.js +150 -49
  84. package/examples/jsm/loaders/3MFLoader.js +202 -1
  85. package/examples/jsm/loaders/FBXLoader.js +81 -5
  86. package/examples/jsm/loaders/GLTFGaussianSplatLoaderExtension.js +330 -0
  87. package/examples/jsm/loaders/GLTFLoader.js +79 -14
  88. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +386 -0
  89. package/examples/jsm/loaders/KSPLATLoader.js +463 -0
  90. package/examples/jsm/loaders/MaterialXLoader.js +111 -1010
  91. package/examples/jsm/loaders/PCDLoader.js +1 -1
  92. package/examples/jsm/loaders/SPLATLoader.js +139 -0
  93. package/examples/jsm/loaders/SPZLoader.js +561 -0
  94. package/examples/jsm/loaders/materialx/MaterialXArchive.js +108 -0
  95. package/examples/jsm/loaders/materialx/MaterialXDocument.js +878 -0
  96. package/examples/jsm/loaders/materialx/MaterialXHextile.js +183 -0
  97. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +376 -0
  98. package/examples/jsm/loaders/materialx/MaterialXLog.js +75 -0
  99. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +4 -0
  100. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +1021 -0
  101. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +661 -0
  102. package/examples/jsm/loaders/materialx/MaterialXUtils.js +57 -0
  103. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +997 -0
  104. package/examples/jsm/loaders/materialx/parse/MaterialXParser.js +28 -0
  105. package/examples/jsm/loaders/usd/USDAParser.js +15 -2
  106. package/examples/jsm/loaders/usd/USDCParser.js +1 -4
  107. package/examples/jsm/loaders/usd/USDComposer.js +80 -42
  108. package/examples/jsm/materials/WoodNodeMaterial.js +6 -108
  109. package/examples/jsm/misc/RollerCoaster.js +2 -2
  110. package/examples/jsm/misc/SculptGL.LICENSE.txt +21 -0
  111. package/examples/jsm/misc/Sculptor.js +1679 -0
  112. package/examples/jsm/misc/SculptorMesh.js +1504 -0
  113. package/examples/jsm/misc/SculptorTools.js +1180 -0
  114. package/examples/jsm/misc/SculptorUtils.js +345 -0
  115. package/examples/jsm/misc/TubePainter.js +28 -16
  116. package/examples/jsm/misc/VolumeSlice.js +24 -24
  117. package/examples/jsm/modifiers/SimplifyModifier.js +63 -556
  118. package/examples/jsm/objects/GaussianSplat.js +1039 -0
  119. package/examples/jsm/objects/Sky.js +66 -45
  120. package/examples/jsm/objects/SkyMesh.js +70 -51
  121. package/examples/jsm/physics/JoltPhysics.js +1 -1
  122. package/examples/jsm/postprocessing/AfterimagePass.js +4 -2
  123. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  124. package/examples/jsm/postprocessing/GTAOPass.js +1 -1
  125. package/examples/jsm/postprocessing/OutlinePass.js +5 -5
  126. package/examples/jsm/postprocessing/SAOPass.js +1 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +1 -1
  128. package/examples/jsm/postprocessing/SSRPass.js +4 -2
  129. package/examples/jsm/postprocessing/SavePass.js +1 -1
  130. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  131. package/examples/jsm/postprocessing/UnrealBloomPass.js +30 -13
  132. package/examples/jsm/renderers/CSS2DRenderer.js +29 -5
  133. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  134. package/examples/jsm/shaders/ExposureShader.js +1 -1
  135. package/examples/jsm/shaders/FilmShader.js +2 -1
  136. package/examples/jsm/transpiler/AST.js +21 -2
  137. package/examples/jsm/transpiler/GLSLDecoder.js +498 -8
  138. package/examples/jsm/transpiler/TSLEncoder.js +82 -10
  139. package/examples/jsm/transpiler/WGSLEncoder.js +33 -4
  140. package/examples/jsm/tsl/WebGLNodesHandler.js +29 -39
  141. package/examples/jsm/tsl/display/AfterImageNode.js +2 -0
  142. package/examples/jsm/tsl/display/AnaglyphPassNode.js +3 -2
  143. package/examples/jsm/tsl/display/BilateralBlurNode.js +5 -2
  144. package/examples/jsm/tsl/display/BloomNode.js +55 -30
  145. package/examples/jsm/tsl/display/DenoiseNode.js +21 -1
  146. package/examples/jsm/tsl/display/DepthOfFieldNode.js +24 -6
  147. package/examples/jsm/tsl/display/DotScreenNode.js +11 -11
  148. package/examples/jsm/tsl/display/FSR1Node.js +8 -4
  149. package/examples/jsm/tsl/display/GTAONode.js +199 -86
  150. package/examples/jsm/tsl/display/GaussianBlurNode.js +65 -52
  151. package/examples/jsm/tsl/display/GodraysNode.js +5 -2
  152. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +2 -2
  153. package/examples/jsm/tsl/display/LensflareNode.js +5 -2
  154. package/examples/jsm/tsl/display/OITPassNode.js +352 -0
  155. package/examples/jsm/tsl/display/OutlineNode.js +2 -0
  156. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +3 -2
  157. package/examples/jsm/tsl/display/RGBShiftNode.js +9 -9
  158. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +7 -4
  159. package/examples/jsm/tsl/display/RetroPassNode.js +1 -1
  160. package/examples/jsm/tsl/display/SMAANode.js +22 -61
  161. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -4
  162. package/examples/jsm/tsl/display/SSAONode.js +436 -0
  163. package/examples/jsm/tsl/display/SSGINode.js +5 -2
  164. package/examples/jsm/tsl/display/SSRNode.js +7 -2
  165. package/examples/jsm/tsl/display/SSSNode.js +5 -2
  166. package/examples/jsm/tsl/display/SharpenNode.js +5 -4
  167. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -3
  168. package/examples/jsm/tsl/display/StereoPassNode.js +1 -3
  169. package/examples/jsm/tsl/display/TAAUNode.js +22 -125
  170. package/examples/jsm/tsl/display/TRAANode.js +16 -142
  171. package/examples/jsm/tsl/display/TemporalReprojectNode.js +21 -15
  172. package/examples/jsm/tsl/display/depthAwareBlur.js +63 -0
  173. package/examples/jsm/tsl/display/hashBlur.js +3 -2
  174. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +38 -27
  175. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +136 -0
  176. package/examples/jsm/tsl/math/voronoiNoise.js +112 -0
  177. package/examples/jsm/tsl/shadows/TileShadowNode.js +4 -6
  178. package/examples/jsm/tsl/utils/Raymarching.js +5 -5
  179. package/examples/jsm/tsl/utils/SoftParticles.js +60 -0
  180. package/examples/jsm/tsl/utils/TAAUtils.js +195 -0
  181. package/examples/jsm/utils/BufferGeometryUtils.js +14 -14
  182. package/examples/jsm/utils/GaussianSplatUtils.js +229 -0
  183. package/examples/jsm/utils/WebGLTextureUtils.js +1 -1
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/WebGLXRFallback.js +2 -16
  186. package/examples/jsm/webxr/XRControllerModelFactory.js +16 -4
  187. package/package.json +9 -16
  188. package/src/Three.Core.js +2 -1
  189. package/src/Three.TSL.js +73 -43
  190. package/src/Three.WebGPU.Nodes.js +1 -0
  191. package/src/Three.WebGPU.js +1 -0
  192. package/src/animation/AnimationClip.js +15 -2
  193. package/src/animation/AnimationObjectGroup.js +18 -6
  194. package/src/animation/AnimationUtils.js +26 -0
  195. package/src/animation/KeyframeTrack.js +37 -0
  196. package/src/constants.js +23 -1
  197. package/src/core/BufferAttribute.js +3 -2
  198. package/src/core/BufferGeometry.js +1 -1
  199. package/src/core/InterleavedBuffer.js +5 -1
  200. package/src/core/Object3D.js +40 -12
  201. package/src/core/Raycaster.js +4 -0
  202. package/src/core/RenderTarget.js +99 -9
  203. package/src/core/RenderTarget3D.js +12 -8
  204. package/src/extras/Controls.js +0 -8
  205. package/src/extras/PMREMGenerator.js +99 -205
  206. package/src/geometries/TorusGeometry.js +1 -1
  207. package/src/helpers/ArrowHelper.js +2 -0
  208. package/src/helpers/AxesHelper.js +2 -0
  209. package/src/helpers/Box3Helper.js +2 -0
  210. package/src/helpers/BoxHelper.js +2 -0
  211. package/src/helpers/CameraHelper.js +2 -0
  212. package/src/helpers/DirectionalLightHelper.js +2 -0
  213. package/src/helpers/GridHelper.js +2 -0
  214. package/src/helpers/HemisphereLightHelper.js +2 -0
  215. package/src/helpers/PlaneHelper.js +2 -0
  216. package/src/helpers/PointLightHelper.js +2 -0
  217. package/src/helpers/PolarGridHelper.js +2 -0
  218. package/src/helpers/SkeletonHelper.js +2 -0
  219. package/src/helpers/SpotLightHelper.js +2 -0
  220. package/src/lights/Light.js +0 -10
  221. package/src/lights/LightShadow.js +43 -12
  222. package/src/lights/SpotLightShadow.js +18 -0
  223. package/src/loaders/BufferGeometryLoader.js +5 -0
  224. package/src/loaders/ImageBitmapLoader.js +3 -1
  225. package/src/loaders/ObjectLoader.js +8 -5
  226. package/src/materials/Material.js +80 -57
  227. package/src/materials/MeshPhysicalMaterial.js +32 -0
  228. package/src/materials/nodes/Line2NodeMaterial.js +17 -8
  229. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +42 -5
  230. package/src/materials/nodes/NodeMaterial.js +19 -13
  231. package/src/materials/nodes/PointsNodeMaterial.js +2 -1
  232. package/src/materials/nodes/manager/NodeMaterialObserver.js +282 -55
  233. package/src/math/Frustum.js +9 -0
  234. package/src/math/FrustumArray.js +1 -1
  235. package/src/math/MathUtils.js +5 -3
  236. package/src/math/Matrix4.js +2 -9
  237. package/src/math/Plane.js +30 -1
  238. package/src/math/Quaternion.js +0 -10
  239. package/src/math/Ray.js +95 -45
  240. package/src/math/Triangle.js +0 -2
  241. package/src/math/Vector3.js +2 -2
  242. package/src/math/Vector4.js +0 -4
  243. package/src/math/interpolants/BezierInterpolant.js +36 -23
  244. package/src/nodes/Nodes.js +2 -0
  245. package/src/nodes/TSL.js +11 -3
  246. package/src/nodes/accessors/Batch.js +85 -13
  247. package/src/nodes/accessors/BufferAttributeNode.js +1 -1
  248. package/src/nodes/accessors/BuiltinNode.js +1 -1
  249. package/src/nodes/accessors/Instance.js +19 -18
  250. package/src/nodes/accessors/MaterialNode.js +9 -0
  251. package/src/nodes/accessors/ModelNode.js +85 -9
  252. package/src/nodes/accessors/ReferenceBaseNode.js +1 -70
  253. package/src/nodes/accessors/ReferenceElementNode.js +72 -0
  254. package/src/nodes/accessors/ReferenceNode.js +1 -70
  255. package/src/nodes/accessors/Skinning.js +124 -12
  256. package/src/nodes/accessors/StorageTextureNode.js +7 -3
  257. package/src/nodes/accessors/Texture3DNode.js +1 -1
  258. package/src/nodes/accessors/TextureNode.js +51 -21
  259. package/src/nodes/accessors/TextureSizeNode.js +4 -2
  260. package/src/nodes/accessors/UniformArrayNode.js +30 -5
  261. package/src/nodes/code/CodeNode.js +1 -1
  262. package/src/nodes/code/FunctionNode.js +12 -2
  263. package/src/nodes/core/ArrayNode.js +2 -2
  264. package/src/nodes/core/ContextNode.js +57 -4
  265. package/src/nodes/core/IndexNode.js +69 -4
  266. package/src/nodes/core/InspectorNode.js +2 -2
  267. package/src/nodes/core/MRTNode.js +44 -2
  268. package/src/nodes/core/Node.js +6 -3
  269. package/src/nodes/core/NodeBuilder.js +65 -50
  270. package/src/nodes/core/NodeFrame.js +11 -3
  271. package/src/nodes/core/NodeUtils.js +88 -0
  272. package/src/nodes/core/PropertyNode.js +8 -0
  273. package/src/nodes/core/StackNode.js +0 -1
  274. package/src/nodes/core/StructNode.js +4 -3
  275. package/src/nodes/core/UniformGroupNode.js +3 -2
  276. package/src/nodes/core/UniformNode.js +26 -12
  277. package/src/nodes/core/VarNode.js +0 -1
  278. package/src/nodes/display/BumpMapNode.js +2 -2
  279. package/src/nodes/display/ColorAdjustment.js +1 -1
  280. package/src/nodes/display/PassNode.js +76 -15
  281. package/src/nodes/display/ScreenNode.js +22 -65
  282. package/src/nodes/fog/Fog.js +4 -4
  283. package/src/nodes/functions/BSDF/BRDF_GGX.js +6 -6
  284. package/src/nodes/functions/BSDF/BRDF_Sheen.js +1 -1
  285. package/src/nodes/functions/BSDF/DFGLUT.js +2 -1
  286. package/src/nodes/functions/BSDF/LTC.js +1 -1
  287. package/src/nodes/functions/PhongLightingModel.js +1 -1
  288. package/src/nodes/functions/PhysicalLightingModel.js +83 -25
  289. package/src/nodes/functions/ToonLightingModel.js +2 -2
  290. package/src/nodes/functions/material/getParallaxCorrectNormal.js +3 -3
  291. package/src/nodes/gpgpu/AtomicFunctionNode.js +64 -13
  292. package/src/nodes/gpgpu/BarrierNode.js +13 -4
  293. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  294. package/src/nodes/gpgpu/ComputeNode.js +20 -17
  295. package/src/nodes/gpgpu/SubgroupFunctionNode.js +165 -37
  296. package/src/nodes/gpgpu/WorkgroupInfoNode.js +44 -6
  297. package/src/nodes/lighting/EnvironmentNode.js +40 -4
  298. package/src/nodes/lighting/LightsNode.js +20 -4
  299. package/src/nodes/lighting/ShadowBaseNode.js +158 -1
  300. package/src/nodes/lighting/ShadowFilterNode.js +2 -106
  301. package/src/nodes/lighting/ShadowNode.js +22 -91
  302. package/src/nodes/materialx/{lib/mx_hsv.js → MaterialXColor.js} +3 -6
  303. package/src/nodes/materialx/{lib/mx_transform_color.js → MaterialXColorTransform.js} +3 -6
  304. package/src/nodes/materialx/MaterialXCore.js +37 -0
  305. package/src/nodes/materialx/MaterialXNodes.js +64 -72
  306. package/src/nodes/materialx/{lib/mx_noise.js → MaterialXNoise.js} +426 -197
  307. package/src/nodes/math/BitcountNode.js +24 -4
  308. package/src/nodes/math/MathNode.js +4 -4
  309. package/src/nodes/math/MathUtils.js +15 -4
  310. package/src/nodes/math/OperatorNode.js +2 -2
  311. package/src/nodes/math/PackFloatNode.js +29 -1
  312. package/src/nodes/math/Packed4x8IntegerNode.js +433 -0
  313. package/src/nodes/math/UnpackFloatNode.js +30 -2
  314. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  315. package/src/nodes/pmrem/PMREMNode.js +1 -1
  316. package/src/nodes/pmrem/PMREMUtils.js +31 -74
  317. package/src/nodes/shapes/Shapes.js +1 -1
  318. package/src/nodes/tsl/TSLCore.js +1 -31
  319. package/src/nodes/utils/EventNode.js +75 -0
  320. package/src/nodes/utils/LoopNode.js +54 -13
  321. package/src/nodes/utils/PostProcessingUtils.js +23 -2
  322. package/src/nodes/utils/RTTNode.js +97 -32
  323. package/src/nodes/utils/ReflectorNode.js +8 -4
  324. package/src/nodes/utils/RotateNode.js +85 -8
  325. package/src/nodes/utils/SpriteUtils.js +58 -23
  326. package/src/objects/BatchedMesh.js +6 -0
  327. package/src/objects/InstancedMesh.js +1 -1
  328. package/src/objects/LOD.js +1 -1
  329. package/src/objects/Line.js +12 -0
  330. package/src/objects/Mesh.js +12 -0
  331. package/src/objects/Points.js +12 -0
  332. package/src/objects/Sprite.js +12 -0
  333. package/src/renderers/WebGLRenderer.js +93 -27
  334. package/src/renderers/common/Animation.js +12 -2
  335. package/src/renderers/common/Backend.js +38 -10
  336. package/src/renderers/common/BindGroup.js +0 -1
  337. package/src/renderers/common/Bindings.js +50 -4
  338. package/src/renderers/common/BundleGroup.js +4 -0
  339. package/src/renderers/common/ClippingContext.js +11 -1
  340. package/src/renderers/common/Color4.js +9 -0
  341. package/src/renderers/common/Constants.js +0 -5
  342. package/src/renderers/common/DirectRenderPipeline.js +233 -0
  343. package/src/renderers/common/Geometries.js +24 -3
  344. package/src/renderers/common/Info.js +3 -3
  345. package/src/renderers/common/InspectorBase.js +37 -8
  346. package/src/renderers/common/Lighting.js +11 -4
  347. package/src/renderers/common/Pipelines.js +6 -4
  348. package/src/renderers/common/QuadMesh.js +16 -2
  349. package/src/renderers/common/RenderContext.js +8 -0
  350. package/src/renderers/common/RenderList.js +53 -19
  351. package/src/renderers/common/RenderLists.js +58 -11
  352. package/src/renderers/common/RenderObject.js +14 -0
  353. package/src/renderers/common/RenderObjects.js +14 -9
  354. package/src/renderers/common/RenderPipeline.js +52 -44
  355. package/src/renderers/common/Renderer.js +226 -55
  356. package/src/renderers/common/Storage3DTexture.js +16 -0
  357. package/src/renderers/common/Textures.js +3 -3
  358. package/src/renderers/common/XRManager.js +79 -72
  359. package/src/renderers/common/extras/PMREMGenerator.js +76 -144
  360. package/src/renderers/common/nodes/NodeManager.js +144 -6
  361. package/src/renderers/common/nodes/NodeStorageBuffer.js +3 -1
  362. package/src/renderers/common/nodes/NodeUniformBuffer.js +3 -1
  363. package/src/renderers/shaders/DFGLUTData.js +2 -1
  364. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +4 -2
  365. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +48 -0
  366. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +53 -4
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +20 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +20 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +61 -57
  371. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +82 -0
  372. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +9 -0
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +8 -1
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +15 -0
  375. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
  376. package/src/renderers/shaders/ShaderLib.js +1 -0
  377. package/src/renderers/shaders/UniformsLib.js +16 -0
  378. package/src/renderers/webgl/WebGLAnimation.js +2 -2
  379. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  380. package/src/renderers/webgl/WebGLLights.js +74 -4
  381. package/src/renderers/webgl/WebGLMaterials.js +6 -0
  382. package/src/renderers/webgl/WebGLOutput.js +36 -24
  383. package/src/renderers/webgl/WebGLProgram.js +3 -0
  384. package/src/renderers/webgl/WebGLPrograms.js +8 -0
  385. package/src/renderers/webgl/WebGLRenderLists.js +6 -10
  386. package/src/renderers/webgl/WebGLShadowMap.js +47 -44
  387. package/src/renderers/webgl/WebGLTextures.js +7 -7
  388. package/src/renderers/webgl-fallback/WebGLBackend.js +153 -45
  389. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +83 -29
  390. package/src/renderers/webgl-fallback/utils/WebGLState.js +163 -17
  391. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +32 -5
  392. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +11 -4
  393. package/src/renderers/webgpu/WebGPUBackend.js +513 -145
  394. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -20
  395. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -1
  396. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -12
  397. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +24 -14
  398. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +80 -14
  399. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -7
  400. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +9 -3
  401. package/src/renderers/webgpu/utils/WebGPUUtils.js +16 -4
  402. package/src/renderers/webxr/WebXRManager.js +25 -2
  403. package/src/scenes/Scene.js +3 -3
  404. package/src/textures/CompressedArrayTexture.js +16 -0
  405. package/src/textures/Data3DTexture.js +16 -0
  406. package/src/textures/DataArrayTexture.js +16 -0
  407. package/src/textures/DepthTexture.js +3 -3
  408. package/src/textures/Texture.js +3 -3
  409. package/src/textures/{Source.js → TextureSource.js} +39 -8
  410. package/build/three.core.min.js +0 -6
  411. package/build/three.module.min.js +0 -6
  412. package/build/three.tsl.min.js +0 -6
  413. package/build/three.webgpu.min.js +0 -6
  414. package/build/three.webgpu.nodes.min.js +0 -6
  415. package/examples/jsm/libs/ecsy.module.js +0 -1792
  416. package/examples/jsm/loaders/LottieLoader.js +0 -130
  417. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +0 -52
@@ -0,0 +1,95 @@
1
+ import { Light, Object3D } from '@gnsx/three';
2
+ import { SunLightShadow } from './SunLightShadow.js';
3
+
4
+ /**
5
+ * A sun-like light that gets emitted in a specific direction, with rays that
6
+ * are all parallel, and casts cascaded shadow maps via {@link SunLightShadow},
7
+ * suited for lighting large scenes.
8
+ *
9
+ * Unlike {@link DirectionalLight}, the light has no target: like
10
+ * {@link HemisphereLight}, its direction is defined by its position. The
11
+ * light shines from its position towards the origin and points straight
12
+ * down by default.
13
+ *
14
+ * ```js
15
+ * const sun = new SunLight( 0xfff2e3, 3 );
16
+ * sun.position.set( 1, 1, 1 );
17
+ * sun.castShadow = true;
18
+ * scene.add( sun );
19
+ * ```
20
+ *
21
+ * When used with `WebGPURenderer`, the light must be registered with the
22
+ * renderer's node library first:
23
+ * ```js
24
+ * renderer.library.addLight( SunLightNode, SunLight );
25
+ * ```
26
+ *
27
+ * @augments Light
28
+ * @three_import import { SunLight } from 'three/addons/lights/SunLight.js';
29
+ */
30
+ class SunLight extends Light {
31
+
32
+ /**
33
+ * Constructs a new sun light.
34
+ *
35
+ * @param {(number|Color|string)} [color=0xffffff] - The light's color.
36
+ * @param {number} [intensity=1] - The light's strength/intensity.
37
+ */
38
+ constructor( color, intensity ) {
39
+
40
+ super( color, intensity );
41
+
42
+ /**
43
+ * This flag can be used for type testing.
44
+ *
45
+ * @type {boolean}
46
+ * @readonly
47
+ * @default true
48
+ */
49
+ this.isSunLight = true;
50
+
51
+ this.type = 'SunLight';
52
+
53
+ this.position.copy( Object3D.DEFAULT_UP );
54
+ this.updateMatrix();
55
+
56
+ /**
57
+ * This property holds the light's shadow configuration.
58
+ *
59
+ * @type {SunLightShadow}
60
+ */
61
+ this.shadow = new SunLightShadow();
62
+
63
+ }
64
+
65
+ dispose() {
66
+
67
+ super.dispose();
68
+
69
+ this.shadow.dispose();
70
+
71
+ }
72
+
73
+ copy( source ) {
74
+
75
+ super.copy( source );
76
+
77
+ this.shadow = source.shadow.clone();
78
+
79
+ return this;
80
+
81
+ }
82
+
83
+ toJSON( meta ) {
84
+
85
+ const data = super.toJSON( meta );
86
+
87
+ data.object.shadow = this.shadow.toJSON();
88
+
89
+ return data;
90
+
91
+ }
92
+
93
+ }
94
+
95
+ export { SunLight };
@@ -0,0 +1,56 @@
1
+ import { AnalyticLightNode } from '@gnsx/three/webgpu';
2
+ import { cameraViewMatrix, lightPosition } from '@gnsx/three/tsl';
3
+ import { sunShadow } from './SunShadowNode.js';
4
+
5
+ /**
6
+ * Module for representing sun lights as nodes. Register it with the
7
+ * renderer's node library to use {@link SunLight} with `WebGPURenderer`:
8
+ * ```js
9
+ * renderer.library.addLight( SunLightNode, SunLight );
10
+ * ```
11
+ *
12
+ * @augments AnalyticLightNode
13
+ * @three_import import { SunLightNode } from 'three/addons/lights/SunLightNode.js';
14
+ */
15
+ class SunLightNode extends AnalyticLightNode {
16
+
17
+ static get type() {
18
+
19
+ return 'SunLightNode';
20
+
21
+ }
22
+
23
+ /**
24
+ * Constructs a new sun light node.
25
+ *
26
+ * @param {?SunLight} [light=null] - The sun light source.
27
+ */
28
+ constructor( light = null ) {
29
+
30
+ super( light );
31
+
32
+ }
33
+
34
+ /**
35
+ * Overwritten to setup the cascaded shadows of sun lights.
36
+ *
37
+ * @return {SunShadowNode} The created shadow node.
38
+ */
39
+ setupShadowNode() {
40
+
41
+ return sunShadow( this.light );
42
+
43
+ }
44
+
45
+ setupDirect() {
46
+
47
+ const lightColor = this.colorNode;
48
+ const lightDirection = cameraViewMatrix.transformDirection( lightPosition( this.light ) );
49
+
50
+ return { lightDirection, lightColor };
51
+
52
+ }
53
+
54
+ }
55
+
56
+ export { SunLightNode };
@@ -0,0 +1,319 @@
1
+ import {
2
+ Frustum,
3
+ LightShadow,
4
+ Matrix4,
5
+ OrthographicCamera,
6
+ Vector3,
7
+ Vector4,
8
+ WebGPUCoordinateSystem
9
+ } from '@gnsx/three';
10
+
11
+ const _lightOrientationMatrix = /*@__PURE__*/ new Matrix4();
12
+ const _viewToLightMatrix = /*@__PURE__*/ new Matrix4();
13
+ const _lightDirection = /*@__PURE__*/ new Vector3();
14
+ const _up = /*@__PURE__*/ new Vector3();
15
+ const _center = /*@__PURE__*/ new Vector3();
16
+
17
+ const _nearCorners = [
18
+ /*@__PURE__*/ new Vector3(),
19
+ /*@__PURE__*/ new Vector3(),
20
+ /*@__PURE__*/ new Vector3(),
21
+ /*@__PURE__*/ new Vector3()
22
+ ];
23
+
24
+ const _farCorners = [
25
+ /*@__PURE__*/ new Vector3(),
26
+ /*@__PURE__*/ new Vector3(),
27
+ /*@__PURE__*/ new Vector3(),
28
+ /*@__PURE__*/ new Vector3()
29
+ ];
30
+
31
+ const _cascadeCorners = [
32
+ /*@__PURE__*/ new Vector3(),
33
+ /*@__PURE__*/ new Vector3(),
34
+ /*@__PURE__*/ new Vector3(),
35
+ /*@__PURE__*/ new Vector3(),
36
+ /*@__PURE__*/ new Vector3(),
37
+ /*@__PURE__*/ new Vector3(),
38
+ /*@__PURE__*/ new Vector3(),
39
+ /*@__PURE__*/ new Vector3()
40
+ ];
41
+
42
+ // must match the cascade count in the sun shadow shader chunks
43
+
44
+ const _cascadeCount = 2;
45
+
46
+ // fraction of each cascade's depth range that blends into the next cascade
47
+
48
+ const _cascadeFade = 0.1;
49
+
50
+ /**
51
+ * Represents the shadow configuration of {@link SunLight}, using two
52
+ * cascaded shadow maps (CSM).
53
+ *
54
+ * The shadow camera projection is fitted automatically to slices of the view
55
+ * frustum, up to a distance of `camera.far` (or the view camera's far plane,
56
+ * whichever is smaller), and adjacent cascades blend into each other over a
57
+ * small depth range. `camera.left/right/top/bottom` are ignored.
58
+ *
59
+ * The default `mapSize` is `1024x1024` per cascade.
60
+ *
61
+ * @augments LightShadow
62
+ * @three_import import { SunLightShadow } from 'three/addons/lights/SunLightShadow.js';
63
+ */
64
+ class SunLightShadow extends LightShadow {
65
+
66
+ /**
67
+ * Constructs a new sun light shadow.
68
+ */
69
+ constructor() {
70
+
71
+ super( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );
72
+
73
+ /**
74
+ * This flag can be used for type testing.
75
+ *
76
+ * @type {boolean}
77
+ * @readonly
78
+ * @default true
79
+ */
80
+ this.isSunLightShadow = true;
81
+
82
+ this.mapSize.set( 1024, 1024 );
83
+
84
+ this._cameras = [];
85
+ this._matrices = [];
86
+ this._frustums = [];
87
+ this._cascadeSplits = new Array( _cascadeCount + 1 ).fill( 0 );
88
+
89
+ // per cascade ( begin, end, fade start ) view depths, consumed by the renderer
90
+
91
+ this._cascadeData = [];
92
+
93
+ this._viewportCount = _cascadeCount;
94
+ this._frameExtents.set( 2, 1 );
95
+
96
+ for ( let i = 0; i < _cascadeCount; i ++ ) {
97
+
98
+ this._cameras.push( new OrthographicCamera() );
99
+ this._matrices.push( new Matrix4() );
100
+ this._frustums.push( new Frustum() );
101
+ this._cascadeData.push( new Vector4() );
102
+
103
+ }
104
+
105
+ while ( this._viewports.length < _cascadeCount ) this._viewports.push( new Vector4() );
106
+
107
+ }
108
+
109
+ /**
110
+ * Returns the shadow camera of the given cascade.
111
+ *
112
+ * @param {number} [cascadeIndex=0] - The cascade index.
113
+ * @return {OrthographicCamera} The shadow camera.
114
+ */
115
+ getCamera( cascadeIndex = 0 ) {
116
+
117
+ return this._cameras[ cascadeIndex ];
118
+
119
+ }
120
+
121
+ /**
122
+ * Returns the shadow matrix of the given cascade.
123
+ *
124
+ * @param {number} [cascadeIndex=0] - The cascade index.
125
+ * @return {Matrix4} The shadow matrix.
126
+ */
127
+ getMatrix( cascadeIndex = 0 ) {
128
+
129
+ return this._matrices[ cascadeIndex ];
130
+
131
+ }
132
+
133
+ /**
134
+ * Returns the shadow camera frustum of the given cascade. Used internally by
135
+ * the renderer to cull objects.
136
+ *
137
+ * @param {number} [cascadeIndex=0] - The cascade index.
138
+ * @return {Frustum} The shadow camera frustum.
139
+ */
140
+ getFrustum( cascadeIndex = 0 ) {
141
+
142
+ return this._frustums[ cascadeIndex ];
143
+
144
+ }
145
+
146
+ /**
147
+ * Update the matrices for the cascade cameras and shadows, used internally
148
+ * by the renderer.
149
+ *
150
+ * @param {Light} light - The light for which the shadow is being rendered.
151
+ * @param {Camera} viewCamera - The camera the scene is rendered with.
152
+ */
153
+ updateMatrices( light, viewCamera ) {
154
+
155
+ if ( viewCamera === undefined ) return;
156
+
157
+ // inset the cascade viewports so shadow filtering cannot read across atlas tiles
158
+
159
+ const insetX = Math.min( 0.25, ( Math.ceil( this.radius ) + 1 ) / this.mapSize.x );
160
+ const insetY = Math.min( 0.25, ( Math.ceil( this.radius ) + 1 ) / this.mapSize.y );
161
+
162
+ for ( let i = 0; i < _cascadeCount; i ++ ) {
163
+
164
+ this._viewports[ i ].set( i + insetX, insetY, 1 - 2 * insetX, 1 - 2 * insetY );
165
+
166
+ }
167
+
168
+ const resolutionX = this.mapSize.x * ( 1 - 2 * insetX );
169
+ const resolutionY = this.mapSize.y * ( 1 - 2 * insetY );
170
+ const resolution = Math.min( resolutionX, resolutionY );
171
+
172
+ const camera = this.camera;
173
+ const cameraNear = viewCamera.near;
174
+ const cameraFar = Math.max( cameraNear + 1e-6, Math.min( camera.far, viewCamera.far ) );
175
+
176
+ // practical split scheme: the average of uniform and logarithmic splits
177
+
178
+ const splits = this._cascadeSplits;
179
+ splits[ 0 ] = cameraNear;
180
+
181
+ for ( let i = 1; i < _cascadeCount; i ++ ) {
182
+
183
+ const amount = i / _cascadeCount;
184
+ const uniform = cameraNear + ( cameraFar - cameraNear ) * amount;
185
+ const logarithmic = cameraNear > 0 ? cameraNear * Math.pow( cameraFar / cameraNear, amount ) : uniform;
186
+ splits[ i ] = ( uniform + logarithmic ) * 0.5;
187
+
188
+ }
189
+
190
+ splits[ _cascadeCount ] = cameraFar;
191
+
192
+ _lightDirection.setFromMatrixPosition( light.matrixWorld ).negate().normalize();
193
+
194
+ _up.set( 0, 1, 0 );
195
+ if ( Math.abs( _up.dot( _lightDirection ) ) > 0.99 ) _up.set( 0, 0, 1 );
196
+
197
+ _lightOrientationMatrix.lookAt( _center.set( 0, 0, 0 ), _lightDirection, _up );
198
+ _viewToLightMatrix.copy( _lightOrientationMatrix ).transpose().multiply( viewCamera.matrixWorld );
199
+
200
+ // view frustum corners in light space; the rotation preserves distances,
201
+ // so the cascades can be fitted and snapped directly in this space
202
+
203
+ const zNear = viewCamera.reversedDepth ? 1 : ( viewCamera.coordinateSystem === WebGPUCoordinateSystem ? 0 : - 1 );
204
+ const inverseProjectionMatrix = viewCamera.projectionMatrixInverse;
205
+
206
+ let globalMaxZ = - Infinity;
207
+
208
+ for ( let i = 0; i < 4; i ++ ) {
209
+
210
+ const x = i === 0 || i === 1 ? 1 : - 1;
211
+ const y = i === 0 || i === 3 ? 1 : - 1;
212
+
213
+ const nearCorner = _nearCorners[ i ].set( x, y, zNear ).applyMatrix4( inverseProjectionMatrix );
214
+ const farCorner = _farCorners[ i ];
215
+
216
+ if ( viewCamera.isPerspectiveCamera === true ) {
217
+
218
+ farCorner.copy( nearCorner ).multiplyScalar( cameraFar / cameraNear );
219
+
220
+ } else {
221
+
222
+ farCorner.set( nearCorner.x, nearCorner.y, - cameraFar );
223
+
224
+ }
225
+
226
+ nearCorner.applyMatrix4( _viewToLightMatrix );
227
+ farCorner.applyMatrix4( _viewToLightMatrix );
228
+
229
+ globalMaxZ = Math.max( globalMaxZ, nearCorner.z, farCorner.z );
230
+
231
+ }
232
+
233
+ // raise the ceiling one shadow range towards the light so casters outside
234
+ // the view frustum still cast into it
235
+
236
+ globalMaxZ += cameraFar;
237
+
238
+ const shadowNear = camera.near;
239
+
240
+ for ( let i = 0; i < _cascadeCount; i ++ ) {
241
+
242
+ // each cascade covers the fade band of the previous one so both can be sampled while blending
243
+
244
+ const cascadeNear = i === 0 ? splits[ 0 ] : this._cascadeData[ i - 1 ].z;
245
+ const cascadeFar = splits[ i + 1 ];
246
+ const fadeStart = cascadeFar - _cascadeFade * ( cascadeFar - splits[ i ] );
247
+
248
+ this._cascadeData[ i ].set( i === 0 ? - 1e10 : cascadeNear, cascadeFar, fadeStart, 0 );
249
+
250
+ // bounding sphere of the cascade slice for a rotation-stable projection
251
+
252
+ const nearAlpha = ( cascadeNear - cameraNear ) / ( cameraFar - cameraNear );
253
+ const farAlpha = ( cascadeFar - cameraNear ) / ( cameraFar - cameraNear );
254
+
255
+ _center.set( 0, 0, 0 );
256
+
257
+ for ( let j = 0; j < 4; j ++ ) {
258
+
259
+ _cascadeCorners[ j * 2 ].lerpVectors( _nearCorners[ j ], _farCorners[ j ], nearAlpha );
260
+ _cascadeCorners[ j * 2 + 1 ].lerpVectors( _nearCorners[ j ], _farCorners[ j ], farAlpha );
261
+ _center.add( _cascadeCorners[ j * 2 ] ).add( _cascadeCorners[ j * 2 + 1 ] );
262
+
263
+ }
264
+
265
+ _center.multiplyScalar( 1 / 8 );
266
+
267
+ let radiusSq = 0;
268
+ let minZ = Infinity;
269
+
270
+ for ( let j = 0; j < 8; j ++ ) {
271
+
272
+ radiusSq = Math.max( radiusSq, _cascadeCorners[ j ].distanceToSquared( _center ) );
273
+ minZ = Math.min( minZ, _cascadeCorners[ j ].z );
274
+
275
+ }
276
+
277
+ let radius = Math.sqrt( radiusSq );
278
+
279
+ // snap to the texel grid to avoid shimmering when the view camera moves
280
+
281
+ if ( resolution > 1 ) {
282
+
283
+ // pad by half a texel so snapping cannot clip a frustum corner
284
+ radius /= 1 - 1 / resolution;
285
+ const texelSizeX = 2 * radius / resolutionX;
286
+ const texelSizeY = 2 * radius / resolutionY;
287
+ _center.x = Math.round( _center.x / texelSizeX ) * texelSizeX;
288
+ _center.y = Math.round( _center.y / texelSizeY ) * texelSizeY;
289
+
290
+ }
291
+
292
+ // place the near plane at the caster ceiling
293
+
294
+ _center.z = globalMaxZ + shadowNear;
295
+ _center.applyMatrix4( _lightOrientationMatrix );
296
+
297
+ const cascadeCamera = this._cameras[ i ];
298
+ cascadeCamera.position.copy( _center );
299
+ cascadeCamera.quaternion.setFromRotationMatrix( _lightOrientationMatrix );
300
+ cascadeCamera.left = - radius;
301
+ cascadeCamera.right = radius;
302
+ cascadeCamera.top = radius;
303
+ cascadeCamera.bottom = - radius;
304
+ cascadeCamera.near = shadowNear;
305
+ cascadeCamera.far = globalMaxZ - minZ + 2 * shadowNear;
306
+ cascadeCamera.coordinateSystem = camera.coordinateSystem;
307
+ cascadeCamera._reversedDepth = camera.reversedDepth;
308
+ cascadeCamera.updateProjectionMatrix();
309
+ cascadeCamera.updateMatrixWorld();
310
+
311
+ this._updateMatrix( cascadeCamera, this._matrices[ i ], this._frustums[ i ], this._viewports[ i ] );
312
+
313
+ }
314
+
315
+ }
316
+
317
+ }
318
+
319
+ export { SunLightShadow };