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
@@ -226,7 +226,7 @@ class GLSLDecoder {
226
226
 
227
227
  this._currentFunction = null;
228
228
 
229
- this.addPolyfill( 'gl_FragCoord', 'vec3 gl_FragCoord = vec3( viewportCoordinate.x, viewportCoordinate.y.oneMinus(), viewportCoordinate.z );' );
229
+ this.addPolyfill( 'gl_FragCoord', 'vec3 gl_FragCoord = vec3( screenCoordinate.x, screenCoordinate.y.oneMinus(), screenCoordinate.z );' );
230
230
 
231
231
  }
232
232
 
@@ -8,8 +8,8 @@ class ShaderToyDecoder extends GLSLDecoder {
8
8
  super();
9
9
 
10
10
  this.addPolyfill( 'iTime', 'float iTime = timerGlobal();' );
11
- this.addPolyfill( 'iResolution', 'vec2 iResolution = viewportResolution;' );
12
- this.addPolyfill( 'fragCoord', 'vec3 fragCoord = vec3( viewportCoordinate.x, viewportResolution.y - viewportCoordinate.y, viewportCoordinate.z );' );
11
+ this.addPolyfill( 'iResolution', 'vec2 iResolution = screenSize;' );
12
+ this.addPolyfill( 'fragCoord', 'vec3 fragCoord = vec3( screenCoordinate.x, screenSize.y - screenCoordinate.y, screenCoordinate.z );' );
13
13
 
14
14
  }
15
15
 
@@ -322,9 +322,9 @@ class TSLEncoder {
322
322
  const leftStr = this.emitExpression( node.left );
323
323
  const rightStr = this.emitExpression( node.right );
324
324
 
325
- this.addImport( 'cond' );
325
+ this.addImport( 'select' );
326
326
 
327
- return `cond( ${ condStr }, ${ leftStr }, ${ rightStr } )`;
327
+ return `select( ${ condStr }, ${ leftStr }, ${ rightStr } )`;
328
328
 
329
329
  }
330
330
 
@@ -349,7 +349,7 @@ ${ this.tab }} )`;
349
349
 
350
350
  const elseCondStr = this.emitExpression( current.elseConditional.cond );
351
351
 
352
- ifStr += `.elseif( ${ elseCondStr }, () => {
352
+ ifStr += `.ElseIf( ${ elseCondStr }, () => {
353
353
 
354
354
  ${ elseBodyStr }
355
355
 
@@ -357,7 +357,7 @@ ${ this.tab }} )`;
357
357
 
358
358
  } else {
359
359
 
360
- ifStr += `.else( () => {
360
+ ifStr += `.Else( () => {
361
361
 
362
362
  ${ elseBodyStr }
363
363
 
@@ -391,13 +391,13 @@ ${ this.tab }} )`;
391
391
  const conditionParam = condition !== '<' ? `, condition: '${ condition }'` : '';
392
392
  const updateParam = update !== '++' ? `, update: '${ update }'` : '';
393
393
 
394
- let loopStr = `loop( { start: ${ start }, end: ${ end + nameParam + typeParam + conditionParam + updateParam } }, ( { ${ name } } ) => {\n\n`;
394
+ let loopStr = `Loop( { start: ${ start }, end: ${ end + nameParam + typeParam + conditionParam + updateParam } }, ( { ${ name } } ) => {\n\n`;
395
395
 
396
396
  loopStr += this.emitBody( node.body ) + '\n\n';
397
397
 
398
398
  loopStr += this.tab + '} )';
399
399
 
400
- this.imports.add( 'loop' );
400
+ this.imports.add( 'Loop' );
401
401
 
402
402
  return loopStr;
403
403
 
@@ -586,7 +586,7 @@ ${ this.tab }} )`;
586
586
 
587
587
  const prefix = this.iife === false ? 'export ' : '';
588
588
 
589
- let funcStr = `${ prefix }const ${ fnName } = /*#__PURE__*/ tslFn( (${ paramsStr }) => {
589
+ let funcStr = `${ prefix }const ${ fnName } = /*#__PURE__*/ Fn( (${ paramsStr }) => {
590
590
 
591
591
  ${ bodyStr }
592
592
 
@@ -608,7 +608,7 @@ ${ this.tab }} )`;
608
608
 
609
609
  funcStr += ';\n';
610
610
 
611
- this.imports.add( 'tslFn' );
611
+ this.imports.add( 'Fn' );
612
612
 
613
613
  this.global.add( node.name );
614
614
 
@@ -11,27 +11,19 @@ import {
11
11
  Matrix4,
12
12
  Vector3
13
13
  } from 'three';
14
- import { PackedPhongMaterial } from './PackedPhongMaterial.js';
15
14
 
16
15
 
17
16
 
18
17
  /**
19
- * Make the input mesh.geometry's normal attribute encoded and compressed by 3 different methods.
20
- * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the normal data.
18
+ * Make the input geometry's normal attribute encoded and compressed by 3 different methods.
21
19
  *
22
- * @param {THREE.Mesh} mesh
20
+ * @param {THREE.BufferGeometry} geometry
23
21
  * @param {String} encodeMethod "DEFAULT" || "OCT1Byte" || "OCT2Byte" || "ANGLES"
24
22
  *
25
23
  */
26
- function compressNormals( mesh, encodeMethod ) {
24
+ function compressNormals( geometry, encodeMethod ) {
27
25
 
28
- if ( ! mesh.geometry ) {
29
-
30
- console.error( 'Mesh must contain geometry. ' );
31
-
32
- }
33
-
34
- const normal = mesh.geometry.attributes.normal;
26
+ const normal = geometry.attributes.normal;
35
27
 
36
28
  if ( ! normal ) {
37
29
 
@@ -66,8 +58,8 @@ function compressNormals( mesh, encodeMethod ) {
66
58
 
67
59
  }
68
60
 
69
- mesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 3, true ) );
70
- mesh.geometry.attributes.normal.bytes = result.length * 1;
61
+ geometry.setAttribute( 'normal', new BufferAttribute( result, 3, true ) );
62
+ geometry.attributes.normal.bytes = result.length * 1;
71
63
 
72
64
  } else if ( encodeMethod == 'OCT1Byte' ) {
73
65
 
@@ -88,8 +80,8 @@ function compressNormals( mesh, encodeMethod ) {
88
80
 
89
81
  }
90
82
 
91
- mesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 2, true ) );
92
- mesh.geometry.attributes.normal.bytes = result.length * 1;
83
+ geometry.setAttribute( 'normal', new BufferAttribute( result, 2, true ) );
84
+ geometry.attributes.normal.bytes = result.length * 1;
93
85
 
94
86
  } else if ( encodeMethod == 'OCT2Byte' ) {
95
87
 
@@ -104,8 +96,8 @@ function compressNormals( mesh, encodeMethod ) {
104
96
 
105
97
  }
106
98
 
107
- mesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 2, true ) );
108
- mesh.geometry.attributes.normal.bytes = result.length * 2;
99
+ geometry.setAttribute( 'normal', new BufferAttribute( result, 2, true ) );
100
+ geometry.attributes.normal.bytes = result.length * 2;
109
101
 
110
102
  } else if ( encodeMethod == 'ANGLES' ) {
111
103
 
@@ -120,8 +112,8 @@ function compressNormals( mesh, encodeMethod ) {
120
112
 
121
113
  }
122
114
 
123
- mesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 2, true ) );
124
- mesh.geometry.attributes.normal.bytes = result.length * 2;
115
+ geometry.setAttribute( 'normal', new BufferAttribute( result, 2, true ) );
116
+ geometry.attributes.normal.bytes = result.length * 2;
125
117
 
126
118
  } else {
127
119
 
@@ -129,60 +121,22 @@ function compressNormals( mesh, encodeMethod ) {
129
121
 
130
122
  }
131
123
 
132
- mesh.geometry.attributes.normal.needsUpdate = true;
133
- mesh.geometry.attributes.normal.isPacked = true;
134
- mesh.geometry.attributes.normal.packingMethod = encodeMethod;
135
-
136
- // modify material
137
- if ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {
138
-
139
- mesh.material = new PackedPhongMaterial().copy( mesh.material );
140
-
141
- }
142
-
143
- if ( encodeMethod == 'ANGLES' ) {
144
-
145
- mesh.material.defines.USE_PACKED_NORMAL = 0;
146
-
147
- }
148
-
149
- if ( encodeMethod == 'OCT1Byte' ) {
150
-
151
- mesh.material.defines.USE_PACKED_NORMAL = 1;
152
-
153
- }
154
-
155
- if ( encodeMethod == 'OCT2Byte' ) {
156
-
157
- mesh.material.defines.USE_PACKED_NORMAL = 1;
158
-
159
- }
160
-
161
- if ( encodeMethod == 'DEFAULT' ) {
162
-
163
- mesh.material.defines.USE_PACKED_NORMAL = 2;
164
-
165
- }
124
+ geometry.attributes.normal.needsUpdate = true;
125
+ geometry.attributes.normal.isPacked = true;
126
+ geometry.attributes.normal.packingMethod = encodeMethod;
166
127
 
167
128
  }
168
129
 
169
130
 
170
131
  /**
171
- * Make the input mesh.geometry's position attribute encoded and compressed.
172
- * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the position data.
132
+ * Make the input geometry's position attribute encoded and compressed.
173
133
  *
174
- * @param {THREE.Mesh} mesh
134
+ * @param {THREE.BufferGeometry} geometry
175
135
  *
176
136
  */
177
- function compressPositions( mesh ) {
137
+ function compressPositions( geometry ) {
178
138
 
179
- if ( ! mesh.geometry ) {
180
-
181
- console.error( 'Mesh must contain geometry. ' );
182
-
183
- }
184
-
185
- const position = mesh.geometry.attributes.position;
139
+ const position = geometry.attributes.position;
186
140
 
187
141
  if ( ! position ) {
188
142
 
@@ -204,47 +158,27 @@ function compressPositions( mesh ) {
204
158
  const result = quantizedEncode( array, encodingBytes );
205
159
 
206
160
  const quantized = result.quantized;
207
- const decodeMat = result.decodeMat;
208
161
 
209
162
  // IMPORTANT: calculate original geometry bounding info first, before updating packed positions
210
- if ( mesh.geometry.boundingBox == null ) mesh.geometry.computeBoundingBox();
211
- if ( mesh.geometry.boundingSphere == null ) mesh.geometry.computeBoundingSphere();
163
+ if ( geometry.boundingBox == null ) geometry.computeBoundingBox();
164
+ if ( geometry.boundingSphere == null ) geometry.computeBoundingSphere();
212
165
 
213
- mesh.geometry.setAttribute( 'position', new BufferAttribute( quantized, 3 ) );
214
- mesh.geometry.attributes.position.isPacked = true;
215
- mesh.geometry.attributes.position.needsUpdate = true;
216
- mesh.geometry.attributes.position.bytes = quantized.length * encodingBytes;
217
-
218
- // modify material
219
- if ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {
220
-
221
- mesh.material = new PackedPhongMaterial().copy( mesh.material );
222
-
223
- }
224
-
225
- mesh.material.defines.USE_PACKED_POSITION = 0;
226
-
227
- mesh.material.uniforms.quantizeMatPos.value = decodeMat;
228
- mesh.material.uniforms.quantizeMatPos.needsUpdate = true;
166
+ geometry.setAttribute( 'position', new BufferAttribute( quantized, 3 ) );
167
+ geometry.attributes.position.isPacked = true;
168
+ geometry.attributes.position.needsUpdate = true;
169
+ geometry.attributes.position.bytes = quantized.length * encodingBytes;
229
170
 
230
171
  }
231
172
 
232
173
  /**
233
- * Make the input mesh.geometry's uv attribute encoded and compressed.
234
- * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the uv data.
174
+ * Make the input geometry's uv attribute encoded and compressed.
235
175
  *
236
- * @param {THREE.Mesh} mesh
176
+ * @param {THREE.BufferGeometry} geometry
237
177
  *
238
178
  */
239
- function compressUvs( mesh ) {
179
+ function compressUvs( geometry ) {
240
180
 
241
- if ( ! mesh.geometry ) {
242
-
243
- console.error( 'Mesh must contain geometry property. ' );
244
-
245
- }
246
-
247
- const uvs = mesh.geometry.attributes.uv;
181
+ const uvs = geometry.attributes.uv;
248
182
 
249
183
  if ( ! uvs ) {
250
184
 
@@ -281,39 +215,20 @@ function compressUvs( mesh ) {
281
215
 
282
216
  }
283
217
 
284
- mesh.geometry.setAttribute( 'uv', new BufferAttribute( result, 2, true ) );
285
- mesh.geometry.attributes.uv.isPacked = true;
286
- mesh.geometry.attributes.uv.needsUpdate = true;
287
- mesh.geometry.attributes.uv.bytes = result.length * 2;
288
-
289
- if ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {
290
-
291
- mesh.material = new PackedPhongMaterial().copy( mesh.material );
292
-
293
- }
294
-
295
- mesh.material.defines.USE_PACKED_UV = 0;
218
+ geometry.setAttribute( 'uv', new BufferAttribute( result, 2, true ) );
219
+ geometry.attributes.uv.isPacked = true;
220
+ geometry.attributes.uv.needsUpdate = true;
221
+ geometry.attributes.uv.bytes = result.length * 2;
296
222
 
297
223
  } else {
298
224
 
299
225
  // use quantized encoding method
300
226
  result = quantizedEncodeUV( array, 2 );
301
227
 
302
- mesh.geometry.setAttribute( 'uv', new BufferAttribute( result.quantized, 2 ) );
303
- mesh.geometry.attributes.uv.isPacked = true;
304
- mesh.geometry.attributes.uv.needsUpdate = true;
305
- mesh.geometry.attributes.uv.bytes = result.quantized.length * 2;
306
-
307
- if ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {
308
-
309
- mesh.material = new PackedPhongMaterial().copy( mesh.material );
310
-
311
- }
312
-
313
- mesh.material.defines.USE_PACKED_UV = 1;
314
-
315
- mesh.material.uniforms.quantizeMatUV.value = result.decodeMat;
316
- mesh.material.uniforms.quantizeMatUV.needsUpdate = true;
228
+ geometry.setAttribute( 'uv', new BufferAttribute( result.quantized, 2 ) );
229
+ geometry.attributes.uv.isPacked = true;
230
+ geometry.attributes.uv.needsUpdate = true;
231
+ geometry.attributes.uv.bytes = result.quantized.length * 2;
317
232
 
318
233
  }
319
234
 
@@ -1,13 +1,12 @@
1
1
  import {
2
2
  DoubleSide,
3
- LinearFilter,
3
+ CanvasTexture,
4
4
  Mesh,
5
5
  MeshBasicMaterial,
6
6
  OrthographicCamera,
7
7
  PlaneGeometry,
8
8
  Scene,
9
9
  ShaderMaterial,
10
- Texture,
11
10
  UniformsUtils
12
11
  } from 'three';
13
12
  import { UnpackDepthRGBAShader } from '../shaders/UnpackDepthRGBAShader.js';
@@ -93,13 +92,9 @@ class ShadowMapViewer {
93
92
  context.fillStyle = 'rgba( 255, 0, 0, 1 )';
94
93
  context.fillText( light.name, 0, 20 );
95
94
 
96
- const labelTexture = new Texture( labelCanvas );
97
- labelTexture.magFilter = LinearFilter;
98
- labelTexture.minFilter = LinearFilter;
99
- labelTexture.needsUpdate = true;
95
+ const labelTexture = new CanvasTexture( labelCanvas );
100
96
 
101
- const labelMaterial = new MeshBasicMaterial( { map: labelTexture, side: DoubleSide } );
102
- labelMaterial.transparent = true;
97
+ const labelMaterial = new MeshBasicMaterial( { map: labelTexture, side: DoubleSide, transparent: true } );
103
98
 
104
99
  const labelPlane = new PlaneGeometry( labelCanvas.width, labelCanvas.height );
105
100
  labelMesh = new Mesh( labelPlane, labelMaterial );
@@ -0,0 +1,201 @@
1
+ import {
2
+ DoubleSide,
3
+ CanvasTexture,
4
+ Mesh,
5
+ MeshBasicMaterial,
6
+ NodeMaterial,
7
+ OrthographicCamera,
8
+ PlaneGeometry,
9
+ Scene,
10
+ Texture
11
+ } from 'three';
12
+ import { texture } from 'three/tsl';
13
+
14
+ /**
15
+ * This is a helper for visualising a given light's shadow map.
16
+ * It works for shadow casting lights: DirectionalLight and SpotLight.
17
+ * It renders out the shadow map and displays it on a HUD.
18
+ *
19
+ * Example usage:
20
+ * 1) Import ShadowMapViewer into your app.
21
+ *
22
+ * 2) Create a shadow casting light and name it optionally:
23
+ * let light = new DirectionalLight( 0xffffff, 1 );
24
+ * light.castShadow = true;
25
+ * light.name = 'Sun';
26
+ *
27
+ * 3) Create a shadow map viewer for that light and set its size and position optionally:
28
+ * let shadowMapViewer = new ShadowMapViewer( light );
29
+ * shadowMapViewer.size.set( 128, 128 ); //width, height default: 256, 256
30
+ * shadowMapViewer.position.set( 10, 10 ); //x, y in pixel default: 0, 0 (top left corner)
31
+ *
32
+ * 4) Render the shadow map viewer in your render loop:
33
+ * shadowMapViewer.render( renderer );
34
+ *
35
+ * 5) Optionally: Update the shadow map viewer on window resize:
36
+ * shadowMapViewer.updateForWindowResize();
37
+ *
38
+ * 6) If you set the position or size members directly, you need to call shadowMapViewer.update();
39
+ */
40
+
41
+ class ShadowMapViewer {
42
+
43
+ constructor( light ) {
44
+
45
+ //- Internals
46
+ const scope = this;
47
+ const doRenderLabel = ( light.name !== undefined && light.name !== '' );
48
+ let currentAutoClear;
49
+
50
+ //Holds the initial position and dimension of the HUD
51
+ const frame = {
52
+ x: 10,
53
+ y: 10,
54
+ width: 256,
55
+ height: 256
56
+ };
57
+
58
+ const camera = new OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 1, 10 );
59
+ camera.position.set( 0, 0, 2 );
60
+ const scene = new Scene();
61
+
62
+ //HUD for shadow map
63
+
64
+ const material = new NodeMaterial();
65
+
66
+ const shadowMapUniform = texture( new Texture() );
67
+ material.fragmentNode = shadowMapUniform;
68
+
69
+ const plane = new PlaneGeometry( frame.width, frame.height );
70
+ const mesh = new Mesh( plane, material );
71
+
72
+ scene.add( mesh );
73
+
74
+ //Label for light's name
75
+ let labelCanvas, labelMesh;
76
+
77
+ if ( doRenderLabel ) {
78
+
79
+ labelCanvas = document.createElement( 'canvas' );
80
+
81
+ const context = labelCanvas.getContext( '2d' );
82
+ context.font = 'Bold 20px Arial';
83
+
84
+ const labelWidth = context.measureText( light.name ).width;
85
+ labelCanvas.width = labelWidth;
86
+ labelCanvas.height = 25; //25 to account for g, p, etc.
87
+
88
+ context.font = 'Bold 20px Arial';
89
+ context.fillStyle = 'rgba( 255, 0, 0, 1 )';
90
+ context.fillText( light.name, 0, 20 );
91
+
92
+ const labelTexture = new CanvasTexture( labelCanvas );
93
+
94
+ const labelMaterial = new MeshBasicMaterial( { map: labelTexture, side: DoubleSide, transparent: true } );
95
+
96
+ const labelPlane = new PlaneGeometry( labelCanvas.width, labelCanvas.height );
97
+ labelMesh = new Mesh( labelPlane, labelMaterial );
98
+
99
+ scene.add( labelMesh );
100
+
101
+ }
102
+
103
+ function resetPosition() {
104
+
105
+ scope.position.set( scope.position.x, scope.position.y );
106
+
107
+ }
108
+
109
+ //- API
110
+ // Set to false to disable displaying this shadow map
111
+ this.enabled = true;
112
+
113
+ // Set the size of the displayed shadow map on the HUD
114
+ this.size = {
115
+ width: frame.width,
116
+ height: frame.height,
117
+ set: function ( width, height ) {
118
+
119
+ this.width = width;
120
+ this.height = height;
121
+
122
+ mesh.scale.set( this.width / frame.width, this.height / frame.height, 1 );
123
+
124
+ //Reset the position as it is off when we scale stuff
125
+ resetPosition();
126
+
127
+ }
128
+ };
129
+
130
+ // Set the position of the displayed shadow map on the HUD
131
+ this.position = {
132
+ x: frame.x,
133
+ y: frame.y,
134
+ set: function ( x, y ) {
135
+
136
+ this.x = x;
137
+ this.y = y;
138
+
139
+ const width = scope.size.width;
140
+ const height = scope.size.height;
141
+
142
+ mesh.position.set( - window.innerWidth / 2 + width / 2 + this.x, window.innerHeight / 2 - height / 2 - this.y, 0 );
143
+
144
+ if ( doRenderLabel ) labelMesh.position.set( mesh.position.x, mesh.position.y - scope.size.height / 2 + labelCanvas.height / 2, 0 );
145
+
146
+ }
147
+ };
148
+
149
+ this.render = function ( renderer ) {
150
+
151
+ if ( this.enabled ) {
152
+
153
+ //Because a light's .shadowMap is only initialised after the first render pass
154
+ //we have to make sure the correct map is sent into the shader, otherwise we
155
+ //always end up with the scene's first added shadow casting light's shadowMap
156
+ //in the shader
157
+ //See: https://github.com/mrdoob/three.js/issues/5932
158
+ shadowMapUniform.value = light.shadow.map.texture;
159
+
160
+ currentAutoClear = renderer.autoClear;
161
+ renderer.autoClear = false; // To allow render overlay
162
+ renderer.clearDepth();
163
+ renderer.render( scene, camera );
164
+ renderer.autoClear = currentAutoClear;
165
+
166
+ }
167
+
168
+ };
169
+
170
+ this.updateForWindowResize = function () {
171
+
172
+ if ( this.enabled ) {
173
+
174
+ camera.left = window.innerWidth / - 2;
175
+ camera.right = window.innerWidth / 2;
176
+ camera.top = window.innerHeight / 2;
177
+ camera.bottom = window.innerHeight / - 2;
178
+ camera.updateProjectionMatrix();
179
+
180
+ this.update();
181
+
182
+ }
183
+
184
+ };
185
+
186
+ this.update = function () {
187
+
188
+ this.position.set( this.position.x, this.position.y );
189
+ this.size.set( this.size.width, this.size.height );
190
+
191
+ };
192
+
193
+ //Force an update to set position/size
194
+ this.update();
195
+
196
+ }
197
+
198
+ }
199
+
200
+
201
+ export { ShadowMapViewer };