super-three 0.167.0 → 0.169.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 (387) hide show
  1. package/build/three.cjs +532 -173
  2. package/build/three.module.js +532 -174
  3. package/build/three.module.min.js +1 -1
  4. package/build/three.webgpu.js +18173 -14266
  5. package/build/three.webgpu.min.js +1 -1
  6. package/build/three.webgpu.nodes.js +79941 -0
  7. package/build/three.webgpu.nodes.min.js +6 -0
  8. package/examples/jsm/Addons.js +0 -4
  9. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  10. package/examples/jsm/capabilities/WebGL.js +27 -21
  11. package/examples/jsm/controls/ArcballControls.js +174 -158
  12. package/examples/jsm/controls/DragControls.js +260 -132
  13. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  14. package/examples/jsm/controls/FlyControls.js +194 -188
  15. package/examples/jsm/controls/OrbitControls.js +777 -786
  16. package/examples/jsm/controls/PointerLockControls.js +24 -15
  17. package/examples/jsm/controls/TrackballControls.js +469 -448
  18. package/examples/jsm/controls/TransformControls.js +97 -62
  19. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  20. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  21. package/examples/jsm/effects/StereoEffect.js +6 -1
  22. package/examples/jsm/environments/RoomEnvironment.js +1 -1
  23. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  24. package/examples/jsm/exporters/EXRExporter.js +19 -11
  25. package/examples/jsm/exporters/GLTFExporter.js +6 -1
  26. package/examples/jsm/exporters/KTX2Exporter.js +21 -13
  27. package/examples/jsm/exporters/OBJExporter.js +5 -1
  28. package/examples/jsm/exporters/PLYExporter.js +9 -7
  29. package/examples/jsm/exporters/USDZExporter.js +29 -8
  30. package/examples/jsm/geometries/DecalGeometry.js +4 -1
  31. package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
  32. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  33. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  34. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  35. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  36. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  37. package/examples/jsm/lights/LightProbeGenerator.js +24 -10
  38. package/examples/jsm/loaders/ColladaLoader.js +9 -6
  39. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  40. package/examples/jsm/loaders/FBXLoader.js +30 -20
  41. package/examples/jsm/loaders/GLTFLoader.js +5 -10
  42. package/examples/jsm/loaders/KTX2Loader.js +27 -12
  43. package/examples/jsm/loaders/MTLLoader.js +4 -3
  44. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  45. package/examples/jsm/loaders/OBJLoader.js +5 -3
  46. package/examples/jsm/loaders/PCDLoader.js +14 -13
  47. package/examples/jsm/loaders/PDBLoader.js +3 -2
  48. package/examples/jsm/loaders/PLYLoader.js +8 -5
  49. package/examples/jsm/loaders/STLLoader.js +3 -2
  50. package/examples/jsm/loaders/VRMLLoader.js +10 -10
  51. package/examples/jsm/loaders/VTKLoader.js +4 -3
  52. package/examples/jsm/loaders/XYZLoader.js +3 -2
  53. package/examples/jsm/misc/Timer.js +1 -1
  54. package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
  55. package/examples/jsm/objects/LensflareMesh.js +322 -0
  56. package/examples/jsm/objects/SkyMesh.js +187 -0
  57. package/examples/jsm/objects/Water2Mesh.js +158 -0
  58. package/examples/jsm/objects/WaterMesh.js +101 -0
  59. package/examples/jsm/physics/JoltPhysics.js +1 -1
  60. package/examples/jsm/physics/RapierPhysics.js +21 -1
  61. package/examples/jsm/postprocessing/OutlinePass.js +31 -46
  62. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  63. package/examples/jsm/shaders/BleachBypassShader.js +1 -2
  64. package/examples/jsm/shaders/OutputShader.js +1 -1
  65. package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
  66. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
  67. package/examples/jsm/transpiler/TSLEncoder.js +8 -8
  68. package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
  69. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  70. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  71. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  72. package/examples/jsm/utils/TextureUtils.js +2 -1
  73. package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
  74. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  75. package/package.json +3 -2
  76. package/src/Three.WebGPU.Nodes.js +200 -0
  77. package/src/Three.WebGPU.js +7 -0
  78. package/src/Three.js +1 -0
  79. package/src/audio/Audio.js +2 -2
  80. package/src/constants.js +1 -1
  81. package/src/core/BufferAttribute.js +0 -9
  82. package/src/core/Clock.js +1 -1
  83. package/src/core/InterleavedBuffer.js +0 -9
  84. package/src/extras/Controls.js +32 -0
  85. package/src/geometries/CylinderGeometry.js +11 -4
  86. package/src/loaders/MaterialLoader.js +7 -1
  87. package/src/loaders/ObjectLoader.js +3 -3
  88. package/src/{nodes/loaders → loaders/nodes}/NodeLoader.js +25 -5
  89. package/src/{nodes/loaders → loaders/nodes}/NodeMaterialLoader.js +21 -18
  90. package/src/{nodes/loaders → loaders/nodes}/NodeObjectLoader.js +19 -0
  91. package/src/materials/Material.js +4 -7
  92. package/src/materials/nodes/InstancedPointsNodeMaterial.js +156 -0
  93. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +56 -59
  94. package/src/{nodes/materials → materials/nodes}/LineBasicNodeMaterial.js +8 -5
  95. package/src/{nodes/materials → materials/nodes}/LineDashedNodeMaterial.js +12 -10
  96. package/src/{nodes/materials → materials/nodes}/MeshBasicNodeMaterial.js +16 -12
  97. package/src/{nodes/materials → materials/nodes}/MeshLambertNodeMaterial.js +10 -6
  98. package/src/{nodes/materials → materials/nodes}/MeshMatcapNodeMaterial.js +13 -9
  99. package/src/{nodes/materials → materials/nodes}/MeshNormalNodeMaterial.js +13 -9
  100. package/src/{nodes/materials → materials/nodes}/MeshPhongNodeMaterial.js +14 -9
  101. package/src/{nodes/materials → materials/nodes}/MeshPhysicalNodeMaterial.js +22 -18
  102. package/src/{nodes/materials → materials/nodes}/MeshSSSNodeMaterial.js +10 -7
  103. package/src/{nodes/materials → materials/nodes}/MeshStandardNodeMaterial.js +22 -12
  104. package/src/{nodes/materials → materials/nodes}/MeshToonNodeMaterial.js +9 -5
  105. package/src/{nodes/materials → materials/nodes}/NodeMaterial.js +71 -115
  106. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -1
  107. package/src/{nodes/materials → materials/nodes}/PointsNodeMaterial.js +8 -5
  108. package/src/{nodes/materials → materials/nodes}/ShadowNodeMaterial.js +9 -5
  109. package/src/{nodes/materials → materials/nodes}/SpriteNodeMaterial.js +47 -14
  110. package/src/{nodes/materials → materials/nodes}/VolumeNodeMaterial.js +24 -22
  111. package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
  112. package/src/math/Triangle.js +24 -0
  113. package/src/nodes/Nodes.js +103 -159
  114. package/src/nodes/TSL.js +179 -0
  115. package/src/nodes/accessors/AccessorsUtils.js +8 -8
  116. package/src/nodes/accessors/BatchNode.js +53 -21
  117. package/src/nodes/accessors/{BitangentNode.js → Bitangent.js} +9 -9
  118. package/src/nodes/accessors/BufferAttributeNode.js +8 -5
  119. package/src/nodes/accessors/BufferNode.js +7 -4
  120. package/src/nodes/accessors/Camera.js +13 -0
  121. package/src/nodes/accessors/ClippingNode.js +19 -13
  122. package/src/nodes/accessors/CubeTextureNode.js +9 -8
  123. package/src/nodes/accessors/InstanceNode.js +19 -15
  124. package/src/nodes/accessors/InstancedPointsMaterialNode.js +8 -5
  125. package/src/nodes/accessors/Lights.js +51 -0
  126. package/src/nodes/accessors/MaterialNode.js +56 -55
  127. package/src/nodes/accessors/MaterialProperties.js +3 -0
  128. package/src/nodes/accessors/MaterialReferenceNode.js +9 -4
  129. package/src/nodes/accessors/ModelNode.js +47 -12
  130. package/src/nodes/accessors/ModelViewProjectionNode.js +12 -9
  131. package/src/nodes/accessors/MorphNode.js +17 -13
  132. package/src/nodes/accessors/Normal.js +88 -0
  133. package/src/nodes/accessors/Object3DNode.js +17 -33
  134. package/src/nodes/accessors/PointUVNode.js +9 -5
  135. package/src/nodes/accessors/Position.js +10 -0
  136. package/src/nodes/accessors/ReferenceBaseNode.js +171 -0
  137. package/src/nodes/accessors/ReferenceNode.js +50 -7
  138. package/src/nodes/accessors/ReflectVector.js +10 -0
  139. package/src/nodes/accessors/RendererReferenceNode.js +12 -6
  140. package/src/nodes/accessors/SceneNode.js +9 -6
  141. package/src/nodes/accessors/SkinningNode.js +88 -21
  142. package/src/nodes/accessors/StorageBufferNode.js +22 -5
  143. package/src/nodes/accessors/StorageTextureNode.js +9 -6
  144. package/src/nodes/accessors/Tangent.js +22 -0
  145. package/src/nodes/accessors/Texture3DNode.js +16 -13
  146. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +3 -32
  147. package/src/nodes/accessors/TextureNode.js +29 -23
  148. package/src/nodes/accessors/TextureSizeNode.js +10 -9
  149. package/src/nodes/accessors/{UniformsNode.js → UniformArrayNode.js} +26 -14
  150. package/src/nodes/accessors/UserDataNode.js +10 -7
  151. package/src/nodes/accessors/VelocityNode.js +134 -0
  152. package/src/nodes/accessors/VertexColorNode.js +7 -4
  153. package/src/nodes/code/CodeNode.js +9 -5
  154. package/src/nodes/code/ExpressionNode.js +10 -6
  155. package/src/nodes/code/FunctionCallNode.js +8 -5
  156. package/src/nodes/code/FunctionNode.js +8 -23
  157. package/src/nodes/code/ScriptableNode.js +13 -10
  158. package/src/nodes/code/ScriptableValueNode.js +9 -7
  159. package/src/nodes/core/AssignNode.js +12 -9
  160. package/src/nodes/core/AttributeNode.js +12 -21
  161. package/src/nodes/core/BypassNode.js +11 -7
  162. package/src/nodes/core/CacheNode.js +10 -6
  163. package/src/nodes/core/ConstNode.js +6 -3
  164. package/src/nodes/core/ContextNode.js +21 -11
  165. package/src/nodes/core/IndexNode.js +35 -8
  166. package/src/nodes/core/InputNode.js +7 -3
  167. package/src/nodes/core/MRTNode.js +16 -7
  168. package/src/nodes/core/Node.js +19 -40
  169. package/src/nodes/core/NodeBuilder.js +117 -38
  170. package/src/nodes/core/NodeUtils.js +49 -6
  171. package/src/nodes/core/OutputStructNode.js +10 -6
  172. package/src/nodes/core/ParameterNode.js +7 -4
  173. package/src/nodes/core/PropertyNode.js +36 -32
  174. package/src/nodes/core/StackNode.js +31 -11
  175. package/src/nodes/core/StructTypeNode.js +7 -3
  176. package/src/nodes/core/TempNode.js +8 -4
  177. package/src/nodes/core/UniformGroupNode.js +14 -11
  178. package/src/nodes/core/UniformNode.js +7 -4
  179. package/src/nodes/core/VarNode.js +12 -8
  180. package/src/nodes/core/VaryingNode.js +10 -6
  181. package/src/nodes/display/AfterImageNode.js +15 -9
  182. package/src/nodes/display/AnaglyphPassNode.js +67 -0
  183. package/src/nodes/display/AnamorphicNode.js +17 -11
  184. package/src/nodes/display/BleachBypass.js +26 -0
  185. package/src/nodes/display/BlendMode.js +54 -0
  186. package/src/nodes/display/BloomNode.js +27 -19
  187. package/src/nodes/display/BumpMapNode.js +13 -12
  188. package/src/nodes/display/ColorAdjustment.js +46 -0
  189. package/src/nodes/display/ColorSpaceFunctions.js +38 -0
  190. package/src/nodes/display/ColorSpaceNode.js +67 -61
  191. package/src/nodes/display/DenoiseNode.js +23 -17
  192. package/src/nodes/display/DepthOfFieldNode.js +12 -7
  193. package/src/nodes/display/DotScreenNode.js +13 -22
  194. package/src/nodes/display/FXAANode.js +21 -16
  195. package/src/nodes/display/FilmNode.js +11 -7
  196. package/src/nodes/display/FrontFacingNode.js +10 -6
  197. package/src/nodes/display/GTAONode.js +22 -15
  198. package/src/nodes/display/GaussianBlurNode.js +14 -8
  199. package/src/nodes/display/Lut3DNode.js +10 -6
  200. package/src/nodes/display/MotionBlur.js +25 -0
  201. package/src/nodes/display/NormalMapNode.js +13 -13
  202. package/src/nodes/display/ParallaxBarrierPassNode.js +58 -0
  203. package/src/nodes/display/PassNode.js +95 -8
  204. package/src/nodes/display/PixelationPassNode.js +20 -8
  205. package/src/nodes/display/PosterizeNode.js +8 -7
  206. package/src/nodes/display/RGBShiftNode.js +11 -7
  207. package/src/nodes/display/RenderOutputNode.js +15 -11
  208. package/src/nodes/display/SSAAPassNode.js +287 -0
  209. package/src/nodes/display/ScreenNode.js +181 -0
  210. package/src/nodes/display/Sepia.js +17 -0
  211. package/src/nodes/display/SobelOperatorNode.js +13 -8
  212. package/src/nodes/display/StereoCompositePassNode.js +110 -0
  213. package/src/nodes/display/StereoPassNode.js +83 -0
  214. package/src/nodes/display/ToneMappingFunctions.js +190 -0
  215. package/src/nodes/display/ToneMappingNode.js +15 -175
  216. package/src/nodes/display/ToonOutlinePassNode.js +111 -0
  217. package/src/nodes/display/TransitionNode.js +12 -8
  218. package/src/nodes/display/ViewportDepthNode.js +34 -29
  219. package/src/nodes/display/ViewportDepthTextureNode.js +10 -9
  220. package/src/nodes/display/ViewportSharedTextureNode.js +10 -9
  221. package/src/nodes/display/ViewportTextureNode.js +11 -11
  222. package/src/nodes/fog/FogExp2Node.js +8 -7
  223. package/src/nodes/fog/FogNode.js +10 -8
  224. package/src/nodes/fog/FogRangeNode.js +8 -7
  225. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  226. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  227. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  228. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  229. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  230. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  231. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  232. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  233. package/src/nodes/functions/BSDF/LTC.js +6 -6
  234. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  235. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  236. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  237. package/src/nodes/functions/BasicLightingModel.js +1 -1
  238. package/src/nodes/functions/PhongLightingModel.js +5 -5
  239. package/src/nodes/functions/PhysicalLightingModel.js +34 -33
  240. package/src/nodes/functions/ShadowMaskModel.js +1 -1
  241. package/src/nodes/functions/ToonLightingModel.js +3 -3
  242. package/src/nodes/functions/material/getGeometryRoughness.js +4 -4
  243. package/src/nodes/functions/material/getRoughness.js +2 -2
  244. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  245. package/src/nodes/geometry/RangeNode.js +9 -5
  246. package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
  247. package/src/nodes/gpgpu/BarrierNode.js +40 -0
  248. package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
  249. package/src/nodes/gpgpu/ComputeNode.js +10 -6
  250. package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
  251. package/src/nodes/lighting/AONode.js +6 -3
  252. package/src/nodes/lighting/AmbientLightNode.js +6 -8
  253. package/src/nodes/lighting/AnalyticLightNode.js +225 -36
  254. package/src/nodes/lighting/BasicEnvironmentNode.js +8 -4
  255. package/src/nodes/lighting/BasicLightMapNode.js +7 -4
  256. package/src/nodes/lighting/DirectionalLightNode.js +7 -9
  257. package/src/nodes/lighting/EnvironmentNode.js +23 -19
  258. package/src/nodes/lighting/HemisphereLightNode.js +11 -11
  259. package/src/nodes/lighting/IESSpotLightNode.js +7 -9
  260. package/src/nodes/lighting/IrradianceNode.js +6 -3
  261. package/src/nodes/lighting/LightProbeNode.js +53 -0
  262. package/src/nodes/lighting/LightUtils.js +3 -3
  263. package/src/nodes/lighting/LightingContextNode.js +19 -18
  264. package/src/nodes/lighting/LightingNode.js +7 -3
  265. package/src/nodes/lighting/LightsNode.js +112 -75
  266. package/src/nodes/lighting/PointLightNode.js +12 -13
  267. package/src/nodes/lighting/RectAreaLightNode.js +11 -11
  268. package/src/nodes/lighting/SpotLightNode.js +14 -16
  269. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  270. package/src/nodes/materialx/lib/mx_hsv.js +36 -31
  271. package/src/nodes/materialx/lib/mx_noise.js +96 -96
  272. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  273. package/src/nodes/math/{CondNode.js → ConditionalNode.js} +38 -10
  274. package/src/nodes/math/Hash.js +13 -0
  275. package/src/nodes/math/MathNode.js +127 -124
  276. package/src/nodes/math/MathUtils.js +0 -7
  277. package/src/nodes/math/OperatorNode.js +97 -52
  278. package/src/nodes/math/TriNoise3D.js +19 -29
  279. package/src/nodes/pmrem/PMREMNode.js +61 -15
  280. package/src/nodes/pmrem/PMREMUtils.js +46 -46
  281. package/src/nodes/procedural/Checker.js +14 -0
  282. package/src/nodes/tsl/TSLBase.js +30 -0
  283. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +105 -97
  284. package/src/nodes/utils/ArrayElementNode.js +8 -4
  285. package/src/nodes/utils/ConvertNode.js +7 -3
  286. package/src/nodes/utils/CubeMapNode.js +160 -0
  287. package/src/nodes/utils/Discard.js +8 -0
  288. package/src/nodes/utils/EquirectUVNode.js +9 -6
  289. package/src/nodes/utils/FlipNode.js +68 -0
  290. package/src/nodes/utils/FunctionOverloadingNode.js +9 -5
  291. package/src/nodes/utils/JoinNode.js +6 -3
  292. package/src/nodes/utils/LoopNode.js +16 -6
  293. package/src/nodes/utils/MatcapUVNode.js +10 -7
  294. package/src/nodes/utils/MaxMipLevelNode.js +8 -5
  295. package/src/nodes/utils/OscNode.js +12 -8
  296. package/src/nodes/utils/Packing.js +4 -0
  297. package/src/nodes/utils/RTTNode.js +11 -8
  298. package/src/nodes/utils/ReflectorNode.js +12 -4
  299. package/src/nodes/utils/RemapNode.js +12 -8
  300. package/src/nodes/utils/RotateNode.js +8 -13
  301. package/src/nodes/utils/SetNode.js +7 -4
  302. package/src/nodes/utils/SplitNode.js +7 -3
  303. package/src/nodes/utils/SpriteSheetUVNode.js +10 -6
  304. package/src/nodes/utils/SpriteUtils.js +47 -0
  305. package/src/nodes/utils/StorageArrayElementNode.js +11 -12
  306. package/src/nodes/utils/TimerNode.js +8 -5
  307. package/src/nodes/utils/TriplanarTexturesNode.js +11 -9
  308. package/src/nodes/utils/UVUtils.js +19 -0
  309. package/src/nodes/utils/ViewportUtils.js +14 -0
  310. package/src/objects/BatchedMesh.js +78 -13
  311. package/src/objects/LOD.js +21 -0
  312. package/src/objects/Line.js +1 -0
  313. package/src/objects/Mesh.js +7 -23
  314. package/src/objects/Points.js +2 -0
  315. package/src/renderers/WebGLRenderer.js +88 -41
  316. package/src/renderers/common/Backend.js +2 -2
  317. package/src/renderers/common/Background.js +3 -1
  318. package/src/renderers/common/BindGroup.js +3 -1
  319. package/src/renderers/common/Bindings.js +13 -15
  320. package/src/renderers/common/BundleGroup.js +26 -0
  321. package/src/renderers/common/ClippingContext.js +15 -5
  322. package/src/renderers/common/CubeRenderTarget.js +9 -3
  323. package/src/renderers/common/PostProcessing.js +4 -1
  324. package/src/renderers/common/QuadMesh.js +2 -0
  325. package/src/renderers/common/RenderContext.js +23 -0
  326. package/src/renderers/common/RenderList.js +1 -1
  327. package/src/renderers/common/RenderObject.js +117 -6
  328. package/src/renderers/common/RenderObjects.js +8 -1
  329. package/src/renderers/common/Renderer.js +128 -94
  330. package/src/renderers/common/SampledTexture.js +12 -3
  331. package/src/renderers/common/Textures.js +8 -12
  332. package/src/renderers/common/extras/PMREMGenerator.js +19 -22
  333. package/src/renderers/common/nodes/NodeBuilderState.js +4 -4
  334. package/src/renderers/common/nodes/NodeLibrary.js +118 -0
  335. package/src/renderers/common/nodes/NodeSampledTexture.js +2 -2
  336. package/src/renderers/common/nodes/Nodes.js +65 -19
  337. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  338. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  339. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  340. package/src/renderers/webgl/WebGLCapabilities.js +9 -0
  341. package/src/renderers/webgl/WebGLProgram.js +3 -1
  342. package/src/renderers/webgl/WebGLPrograms.js +21 -17
  343. package/src/renderers/webgl/WebGLProperties.js +7 -0
  344. package/src/renderers/webgl/WebGLState.js +21 -0
  345. package/src/renderers/webgl/WebGLTextures.js +83 -4
  346. package/src/renderers/webgl-fallback/WebGLBackend.js +135 -110
  347. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +60 -12
  348. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +6 -0
  349. package/src/renderers/webgl-fallback/utils/WebGLState.js +20 -2
  350. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +89 -37
  351. package/src/renderers/webgpu/WebGPUBackend.js +112 -86
  352. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
  353. package/src/renderers/webgpu/WebGPURenderer.js +9 -6
  354. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
  355. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +105 -0
  356. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +189 -73
  357. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +6 -16
  358. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +45 -21
  359. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -1
  360. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +7 -16
  361. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
  362. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +43 -26
  363. package/src/renderers/webgpu/utils/WebGPUUtils.js +19 -2
  364. package/src/renderers/webxr/WebXRManager.js +32 -25
  365. package/src/utils.js +33 -1
  366. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  367. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  368. package/examples/jsm/loaders/TiltLoader.js +0 -520
  369. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  370. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  371. package/src/nodes/accessors/CameraNode.js +0 -19
  372. package/src/nodes/accessors/NormalNode.js +0 -14
  373. package/src/nodes/accessors/PositionNode.js +0 -10
  374. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  375. package/src/nodes/accessors/TangentNode.js +0 -23
  376. package/src/nodes/core/NodeKeywords.js +0 -80
  377. package/src/nodes/display/BlendModeNode.js +0 -128
  378. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  379. package/src/nodes/display/ViewportNode.js +0 -137
  380. package/src/nodes/lighting/LightNode.js +0 -57
  381. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  382. package/src/nodes/math/HashNode.js +0 -34
  383. package/src/nodes/procedural/CheckerNode.js +0 -42
  384. package/src/nodes/utils/DiscardNode.js +0 -28
  385. package/src/nodes/utils/PackingNode.js +0 -55
  386. package/src/nodes/utils/RotateUVNode.js +0 -35
  387. /package/src/nodes/accessors/{UVNode.js → UV.js} +0 -0
@@ -4,7 +4,8 @@ import {
4
4
  Color,
5
5
  FileLoader,
6
6
  Float32BufferAttribute,
7
- Loader
7
+ Loader,
8
+ SRGBColorSpace
8
9
  } from 'three';
9
10
  import * as fflate from '../libs/fflate.module.js';
10
11
 
@@ -211,7 +212,7 @@ class VTKLoader extends Loader {
211
212
  const g = parseFloat( result[ 2 ] );
212
213
  const b = parseFloat( result[ 3 ] );
213
214
 
214
- color.set( r, g, b ).convertSRGBToLinear();
215
+ color.setRGB( r, g, b, SRGBColorSpace );
215
216
 
216
217
  colors.push( color.r, color.g, color.b );
217
218
 
@@ -325,7 +326,7 @@ class VTKLoader extends Loader {
325
326
  const g = colors[ 3 * i + 1 ];
326
327
  const b = colors[ 3 * i + 2 ];
327
328
 
328
- color.set( r, g, b ).convertSRGBToLinear();
329
+ color.setRGB( r, g, b, SRGBColorSpace );
329
330
 
330
331
  newColors.push( color.r, color.g, color.b );
331
332
  newColors.push( color.r, color.g, color.b );
@@ -3,7 +3,8 @@ import {
3
3
  Color,
4
4
  FileLoader,
5
5
  Float32BufferAttribute,
6
- Loader
6
+ Loader,
7
+ SRGBColorSpace
7
8
  } from 'three';
8
9
 
9
10
  class XYZLoader extends Loader {
@@ -80,7 +81,7 @@ class XYZLoader extends Loader {
80
81
  const g = parseFloat( lineValues[ 4 ] ) / 255;
81
82
  const b = parseFloat( lineValues[ 5 ] ) / 255;
82
83
 
83
- color.set( r, g, b ).convertSRGBToLinear();
84
+ color.setRGB( r, g, b, SRGBColorSpace );
84
85
 
85
86
  colors.push( color.r, color.g, color.b );
86
87
 
@@ -115,7 +115,7 @@ class FixedTimer extends Timer {
115
115
 
116
116
  function now() {
117
117
 
118
- return ( typeof performance === 'undefined' ? Date : performance ).now();
118
+ return performance.now();
119
119
 
120
120
  }
121
121
 
@@ -0,0 +1,233 @@
1
+ // Original src: https://github.com/zz85/threejs-path-flow
2
+ const CHANNELS = 4;
3
+ const TEXTURE_WIDTH = 1024;
4
+ const TEXTURE_HEIGHT = 4;
5
+
6
+ import {
7
+ DataTexture,
8
+ DataUtils,
9
+ RGBAFormat,
10
+ HalfFloatType,
11
+ RepeatWrapping,
12
+ Mesh,
13
+ InstancedMesh,
14
+ LinearFilter
15
+ } from 'three';
16
+
17
+ import { modelWorldMatrix, normalLocal, vec2, vec3, vec4, mat3, varyingProperty, texture, reference, Fn, select, positionLocal } from 'three/tsl';
18
+
19
+ /**
20
+ * Make a new DataTexture to store the descriptions of the curves.
21
+ *
22
+ * @param { number } numberOfCurves the number of curves needed to be described by this texture.
23
+ */
24
+ export function initSplineTexture( numberOfCurves = 1 ) {
25
+
26
+ const dataArray = new Uint16Array( TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS );
27
+ const dataTexture = new DataTexture(
28
+ dataArray,
29
+ TEXTURE_WIDTH,
30
+ TEXTURE_HEIGHT * numberOfCurves,
31
+ RGBAFormat,
32
+ HalfFloatType
33
+ );
34
+
35
+ dataTexture.wrapS = RepeatWrapping;
36
+ dataTexture.wrapY = RepeatWrapping;
37
+ dataTexture.magFilter = LinearFilter;
38
+ dataTexture.minFilter = LinearFilter;
39
+ dataTexture.needsUpdate = true;
40
+
41
+ return dataTexture;
42
+
43
+ }
44
+
45
+ /**
46
+ * Write the curve description to the data texture
47
+ *
48
+ * @param { DataTexture } texture The DataTexture to write to
49
+ * @param { Curve } splineCurve The curve to describe
50
+ * @param { number } offset Which curve slot to write to
51
+ */
52
+ export function updateSplineTexture( texture, splineCurve, offset = 0 ) {
53
+
54
+ const numberOfPoints = Math.floor( TEXTURE_WIDTH * ( TEXTURE_HEIGHT / 4 ) );
55
+ splineCurve.arcLengthDivisions = numberOfPoints / 2;
56
+ splineCurve.updateArcLengths();
57
+ const points = splineCurve.getSpacedPoints( numberOfPoints );
58
+ const frenetFrames = splineCurve.computeFrenetFrames( numberOfPoints, true );
59
+
60
+ for ( let i = 0; i < numberOfPoints; i ++ ) {
61
+
62
+ const rowOffset = Math.floor( i / TEXTURE_WIDTH );
63
+ const rowIndex = i % TEXTURE_WIDTH;
64
+
65
+ let pt = points[ i ];
66
+ setTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 0 + rowOffset + ( TEXTURE_HEIGHT * offset ) );
67
+ pt = frenetFrames.tangents[ i ];
68
+ setTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 1 + rowOffset + ( TEXTURE_HEIGHT * offset ) );
69
+ pt = frenetFrames.normals[ i ];
70
+ setTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 2 + rowOffset + ( TEXTURE_HEIGHT * offset ) );
71
+ pt = frenetFrames.binormals[ i ];
72
+ setTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 3 + rowOffset + ( TEXTURE_HEIGHT * offset ) );
73
+
74
+ }
75
+
76
+ texture.needsUpdate = true;
77
+
78
+ }
79
+
80
+
81
+ function setTextureValue( texture, index, x, y, z, o ) {
82
+
83
+ const image = texture.image;
84
+ const { data } = image;
85
+ const i = CHANNELS * TEXTURE_WIDTH * o; // Row Offset
86
+
87
+ data[ index * CHANNELS + i + 0 ] = DataUtils.toHalfFloat( x );
88
+ data[ index * CHANNELS + i + 1 ] = DataUtils.toHalfFloat( y );
89
+ data[ index * CHANNELS + i + 2 ] = DataUtils.toHalfFloat( z );
90
+ data[ index * CHANNELS + i + 3 ] = DataUtils.toHalfFloat( 1 );
91
+
92
+ }
93
+
94
+ /**
95
+ * Create a new set of uniforms for describing the curve modifier
96
+ *
97
+ * @param { DataTexture } Texture which holds the curve description
98
+ */
99
+ export function getUniforms( splineTexture ) {
100
+
101
+ return {
102
+ spineTexture: splineTexture,
103
+ pathOffset: 0, // time of path curve
104
+ pathSegment: 1, // fractional length of path
105
+ spineOffset: 161,
106
+ spineLength: 400,
107
+ flow: 1, // int
108
+ };
109
+
110
+ }
111
+
112
+ export function modifyShader( material, uniforms, numberOfCurves ) {
113
+
114
+ const spineTexture = uniforms.spineTexture;
115
+
116
+ const pathOffset = reference( 'pathOffset', 'float', uniforms );
117
+ const pathSegment = reference( 'pathSegment', 'float', uniforms );
118
+ const spineOffset = reference( 'spineOffset', 'float', uniforms );
119
+ const spineLength = reference( 'spineLength', 'float', uniforms );
120
+ const flow = reference( 'flow', 'float', uniforms );
121
+
122
+ material.positionNode = Fn( () => {
123
+
124
+ const textureStacks = TEXTURE_HEIGHT / 4;
125
+ const textureScale = TEXTURE_HEIGHT * numberOfCurves;
126
+
127
+ const worldPos = modelWorldMatrix.mul( vec4( positionLocal, 1 ) ).toVar();
128
+
129
+ const bend = flow.greaterThan( 0 ).toVar();
130
+ const xWeight = select( bend, 0, 1 ).toVar();
131
+
132
+ const spinePortion = select( bend, worldPos.x.add( spineOffset ).div( spineLength ), 0 );
133
+ const mt = spinePortion.mul( pathSegment ).add( pathOffset ).mul( textureStacks ).toVar();
134
+
135
+ mt.assign( mt.mod( textureStacks ) );
136
+
137
+ const rowOffset = mt.floor().toVar();
138
+
139
+ const spinePos = texture( spineTexture, vec2( mt, rowOffset.add( 0.5 ).div( textureScale ) ) ).xyz;
140
+
141
+ const a = texture( spineTexture, vec2( mt, rowOffset.add( 1.5 ).div( textureScale ) ) ).xyz;
142
+ const b = texture( spineTexture, vec2( mt, rowOffset.add( 2.5 ).div( textureScale ) ) ).xyz;
143
+ const c = texture( spineTexture, vec2( mt, rowOffset.add( 3.5 ).div( textureScale ) ) ).xyz;
144
+
145
+ const basis = mat3( a, b, c ).toVar();
146
+
147
+ varyingProperty( 'vec3', 'curveNormal' ).assign( basis.mul( normalLocal ) );
148
+
149
+ return basis.mul( vec3( worldPos.x.mul( xWeight ), worldPos.y, worldPos.z ) ).add( spinePos );
150
+
151
+ } )();
152
+
153
+ material.normalNode = varyingProperty( 'vec3', 'curveNormal' );
154
+
155
+ }
156
+
157
+ /**
158
+ * A helper class for making meshes bend aroudn curves
159
+ */
160
+ export class Flow {
161
+
162
+ /**
163
+ * @param {Mesh} mesh The mesh to clone and modify to bend around the curve
164
+ * @param {number} numberOfCurves The amount of space that should preallocated for additional curves
165
+ */
166
+ constructor( mesh, numberOfCurves = 1 ) {
167
+
168
+ const obj3D = mesh.clone();
169
+ const splineTexure = initSplineTexture( numberOfCurves );
170
+ const uniforms = getUniforms( splineTexure );
171
+
172
+ obj3D.traverse( function ( child ) {
173
+
174
+ if (
175
+ child instanceof Mesh ||
176
+ child instanceof InstancedMesh
177
+ ) {
178
+
179
+ if ( Array.isArray( child.material ) ) {
180
+
181
+ const materials = [];
182
+
183
+ for ( const material of child.material ) {
184
+
185
+ const newMaterial = material.clone();
186
+ modifyShader( newMaterial, uniforms, numberOfCurves );
187
+ materials.push( newMaterial );
188
+
189
+ }
190
+
191
+ child.material = materials;
192
+
193
+ } else {
194
+
195
+ child.material = child.material.clone();
196
+ modifyShader( child.material, uniforms, numberOfCurves );
197
+
198
+ }
199
+
200
+ }
201
+
202
+ } );
203
+
204
+ this.curveArray = new Array( numberOfCurves );
205
+ this.curveLengthArray = new Array( numberOfCurves );
206
+
207
+ this.object3D = obj3D;
208
+ this.splineTexure = splineTexure;
209
+ this.uniforms = uniforms;
210
+
211
+ }
212
+
213
+ updateCurve( index, curve ) {
214
+
215
+ if ( index >= this.curveArray.length ) throw Error( 'Index out of range for Flow' );
216
+
217
+ const curveLength = curve.getLength();
218
+
219
+ this.uniforms.spineLength = curveLength;
220
+ this.curveLengthArray[ index ] = curveLength;
221
+ this.curveArray[ index ] = curve;
222
+
223
+ updateSplineTexture( this.splineTexure, curve, index );
224
+
225
+ }
226
+
227
+ moveAlongCurve( amount ) {
228
+
229
+ this.uniforms.pathOffset += amount;
230
+
231
+ }
232
+
233
+ }
@@ -0,0 +1,322 @@
1
+ import {
2
+ AdditiveBlending,
3
+ Box2,
4
+ BufferGeometry,
5
+ Color,
6
+ FramebufferTexture,
7
+ InterleavedBuffer,
8
+ InterleavedBufferAttribute,
9
+ Mesh,
10
+ MeshBasicNodeMaterial,
11
+ NodeMaterial,
12
+ UnsignedByteType,
13
+ Vector2,
14
+ Vector3,
15
+ Vector4 } from 'three';
16
+
17
+ import { texture, textureLoad, uv, ivec2, vec2, vec4, positionGeometry, reference, varyingProperty, materialReference, Fn, Node } from 'three/tsl';
18
+
19
+ class LensflareMesh extends Mesh {
20
+
21
+ constructor() {
22
+
23
+ super( LensflareMesh.Geometry, new MeshBasicNodeMaterial( { opacity: 0, transparent: true } ) );
24
+
25
+ this.isLensflare = true;
26
+
27
+ this.type = 'LensflareMesh';
28
+ this.frustumCulled = false;
29
+ this.renderOrder = Infinity;
30
+
31
+ //
32
+
33
+ const positionView = new Vector3();
34
+
35
+ // textures
36
+
37
+ const tempMap = new FramebufferTexture( 16, 16 );
38
+ const occlusionMap = new FramebufferTexture( 16, 16 );
39
+
40
+ let currentType = UnsignedByteType;
41
+
42
+ const geometry = LensflareMesh.Geometry;
43
+
44
+ // values for shared material uniforms
45
+
46
+ const sharedValues = {
47
+ scale: new Vector2(),
48
+ positionScreen: new Vector3()
49
+ };
50
+
51
+ // materials
52
+
53
+ const scale = reference( 'scale', 'vec2', sharedValues );
54
+ const screenPosition = reference( 'positionScreen', 'vec3', sharedValues );
55
+
56
+ const vertexNode = vec4( positionGeometry.xy.mul( scale ).add( screenPosition.xy ), screenPosition.z, 1.0 );
57
+
58
+ const material1a = new NodeMaterial();
59
+
60
+ material1a.depthTest = true;
61
+ material1a.depthWrite = false;
62
+ material1a.transparent = false;
63
+ material1a.fog = false;
64
+ material1a.type = 'Lensflare-1a';
65
+
66
+ material1a.vertexNode = vertexNode;
67
+ material1a.fragmentNode = vec4( 1.0, 0.0, 1.0, 1.0 );
68
+
69
+ const material1b = new NodeMaterial();
70
+
71
+ material1b.depthTest = false;
72
+ material1b.depthWrite = false;
73
+ material1b.transparent = false;
74
+ material1b.fog = false;
75
+ material1b.type = 'Lensflare-1b';
76
+
77
+ material1b.vertexNode = vertexNode;
78
+ material1b.fragmentNode = texture( tempMap, vec2( uv().flipY() ) );
79
+
80
+ // the following object is used for occlusionMap generation
81
+
82
+ const mesh1 = new Mesh( geometry, material1a );
83
+
84
+ //
85
+
86
+ const elements = [];
87
+ const elementMeshes = [];
88
+
89
+ const material2 = new NodeMaterial();
90
+
91
+ material2.transparent = true;
92
+ material2.blending = AdditiveBlending;
93
+ material2.depthWrite = false;
94
+ material2.depthTest = false;
95
+ material2.fog = false;
96
+ material2.type = 'Lensflare-2';
97
+
98
+ material2.screenPosition = new Vector3();
99
+ material2.scale = new Vector2();
100
+ material2.occlusionMap = occlusionMap;
101
+
102
+ material2.vertexNode = Fn( ( { material } ) => {
103
+
104
+ const scale = materialReference( 'scale', 'vec2' );
105
+ const screenPosition = materialReference( 'screenPosition', 'vec3' );
106
+
107
+ const occlusionMap = material.occlusionMap;
108
+
109
+ const pos = positionGeometry.xy.toVar();
110
+
111
+ const visibility = textureLoad( occlusionMap, ivec2( 2, 2 ) ).toVar();
112
+ visibility.addAssign( textureLoad( occlusionMap, ivec2( 8, 2 ) ) );
113
+ visibility.addAssign( textureLoad( occlusionMap, ivec2( 14, 2 ) ) );
114
+ visibility.addAssign( textureLoad( occlusionMap, ivec2( 14, 8 ) ) );
115
+ visibility.addAssign( textureLoad( occlusionMap, ivec2( 14, 14 ) ) );
116
+ visibility.addAssign( textureLoad( occlusionMap, ivec2( 8, 14 ) ) );
117
+ visibility.addAssign( textureLoad( occlusionMap, ivec2( 2, 14 ) ) );
118
+ visibility.addAssign( textureLoad( occlusionMap, ivec2( 2, 8 ) ) );
119
+ visibility.addAssign( textureLoad( occlusionMap, ivec2( 8, 8 ) ) );
120
+
121
+ const vVisibility = varyingProperty( 'float', 'vVisibility' );
122
+
123
+ vVisibility.assign( visibility.r.div( 9.0 ) );
124
+ vVisibility.mulAssign( visibility.g.div( 9.0 ).oneMinus() );
125
+ vVisibility.mulAssign( visibility.b.div( 9.0 ) );
126
+
127
+ return vec4( ( pos.mul( scale ).add( screenPosition.xy ).xy ), screenPosition.z, 1.0 );
128
+
129
+ } )();
130
+
131
+ material2.fragmentNode = Fn( () => {
132
+
133
+ const color = reference( 'color', 'color' );
134
+ const map = reference( 'map', 'texture' );
135
+
136
+ const vVisibility = varyingProperty( 'float', 'vVisibility' );
137
+
138
+ const output = map.toVar();
139
+
140
+ output.a.mulAssign( vVisibility );
141
+ output.rgb.mulAssign( color );
142
+
143
+ return output;
144
+
145
+ } )();
146
+
147
+
148
+ this.addElement = function ( element ) {
149
+
150
+ elements.push( element );
151
+
152
+ };
153
+
154
+ //
155
+
156
+ const positionScreen = sharedValues.positionScreen;
157
+ const screenPositionPixels = new Vector4( 0, 0, 16, 16 );
158
+ const validArea = new Box2();
159
+ const viewport = new Vector4();
160
+
161
+ // dummy node for renderer.renderObject()
162
+ const lightsNode = new Node();
163
+
164
+ this.onBeforeRender = ( renderer, scene, camera ) => {
165
+
166
+ renderer.getViewport( viewport );
167
+
168
+ viewport.multiplyScalar( window.devicePixelRatio );
169
+
170
+ const renderTarget = renderer.getRenderTarget();
171
+ const type = ( renderTarget !== null ) ? renderTarget.texture.type : UnsignedByteType;
172
+
173
+ if ( currentType !== type ) {
174
+
175
+ tempMap.dispose();
176
+ occlusionMap.dispose();
177
+
178
+ tempMap.type = occlusionMap.type = type;
179
+
180
+ currentType = type;
181
+
182
+ }
183
+
184
+ const invAspect = viewport.w / viewport.z;
185
+ const halfViewportWidth = viewport.z / 2.0;
186
+ const halfViewportHeight = viewport.w / 2.0;
187
+
188
+ const size = 16 / viewport.w;
189
+
190
+ sharedValues.scale.set( size * invAspect, size );
191
+
192
+ validArea.min.set( viewport.x, viewport.y );
193
+ validArea.max.set( viewport.x + ( viewport.z - 16 ), viewport.y + ( viewport.w - 16 ) );
194
+
195
+ // calculate position in screen space
196
+
197
+ positionView.setFromMatrixPosition( this.matrixWorld );
198
+ positionView.applyMatrix4( camera.matrixWorldInverse );
199
+
200
+ if ( positionView.z > 0 ) return; // lensflare is behind the camera
201
+
202
+ positionScreen.copy( positionView ).applyMatrix4( camera.projectionMatrix );
203
+
204
+ // horizontal and vertical coordinate of the lower left corner of the pixels to copy
205
+
206
+ screenPositionPixels.x = viewport.x + ( positionScreen.x * halfViewportWidth ) + halfViewportWidth - 8;
207
+ screenPositionPixels.y = viewport.y - ( positionScreen.y * halfViewportHeight ) + halfViewportHeight - 8;
208
+
209
+ // screen cull
210
+
211
+ if ( validArea.containsPoint( screenPositionPixels ) ) {
212
+
213
+ // save current RGB to temp texture
214
+
215
+ renderer.copyFramebufferToTexture( tempMap, screenPositionPixels );
216
+
217
+ // render pink quad
218
+
219
+ renderer.renderObject( mesh1, scene, camera, geometry, material1a, null, lightsNode );
220
+
221
+ // copy result to occlusionMap
222
+
223
+ renderer.copyFramebufferToTexture( occlusionMap, screenPositionPixels );
224
+
225
+ // restore graphics
226
+
227
+ renderer.renderObject( mesh1, scene, camera, geometry, material1b, null, lightsNode );
228
+
229
+ // render elements
230
+
231
+ const vecX = - positionScreen.x * 2;
232
+ const vecY = - positionScreen.y * 2;
233
+
234
+ for ( let i = 0, l = elements.length; i < l; i ++ ) {
235
+
236
+ const element = elements[ i ];
237
+
238
+ let mesh2 = elementMeshes[ i ];
239
+
240
+ if ( mesh2 === undefined ) {
241
+
242
+ mesh2 = elementMeshes[ i ] = new Mesh( geometry, material2 );
243
+
244
+ mesh2.color = element.color.convertSRGBToLinear();
245
+ mesh2.map = element.texture;
246
+
247
+ }
248
+
249
+ material2.screenPosition.x = positionScreen.x + vecX * element.distance;
250
+ material2.screenPosition.y = positionScreen.y - vecY * element.distance;
251
+ material2.screenPosition.z = positionScreen.z;
252
+
253
+ const size = element.size / viewport.w;
254
+
255
+ material2.scale.set( size * invAspect, size );
256
+
257
+ renderer.renderObject( mesh2, scene, camera, geometry, material2, null, lightsNode );
258
+
259
+ }
260
+
261
+ }
262
+
263
+ };
264
+
265
+ this.dispose = function () {
266
+
267
+ material1a.dispose();
268
+ material1b.dispose();
269
+ material2.dispose();
270
+
271
+ tempMap.dispose();
272
+ occlusionMap.dispose();
273
+
274
+ for ( let i = 0, l = elements.length; i < l; i ++ ) {
275
+
276
+ elements[ i ].texture.dispose();
277
+
278
+ }
279
+
280
+ };
281
+
282
+ }
283
+
284
+ }
285
+
286
+ //
287
+
288
+ class LensflareElement {
289
+
290
+ constructor( texture, size = 1, distance = 0, color = new Color( 0xffffff ) ) {
291
+
292
+ this.texture = texture;
293
+ this.size = size;
294
+ this.distance = distance;
295
+ this.color = color;
296
+
297
+ }
298
+
299
+ }
300
+
301
+ LensflareMesh.Geometry = ( function () {
302
+
303
+ const geometry = new BufferGeometry();
304
+
305
+ const float32Array = new Float32Array( [
306
+ - 1, - 1, 0, 0, 0,
307
+ 1, - 1, 0, 1, 0,
308
+ 1, 1, 0, 1, 1,
309
+ - 1, 1, 0, 0, 1
310
+ ] );
311
+
312
+ const interleavedBuffer = new InterleavedBuffer( float32Array, 5 );
313
+
314
+ geometry.setIndex( [ 0, 1, 2, 0, 2, 3 ] );
315
+ geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );
316
+ geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );
317
+
318
+ return geometry;
319
+
320
+ } )();
321
+
322
+ export { LensflareMesh, LensflareElement };