super-three 0.141.0 → 0.144.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 (353) hide show
  1. package/README.md +8 -8
  2. package/build/three.cjs +1558 -1034
  3. package/build/three.js +1558 -1034
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +2012 -1243
  6. package/examples/js/animation/MMDPhysics.js +1 -16
  7. package/examples/js/controls/ArcballControls.js +16 -3
  8. package/examples/js/controls/FirstPersonControls.js +0 -7
  9. package/examples/js/controls/FlyControls.js +0 -8
  10. package/examples/js/controls/OrbitControls.js +0 -4
  11. package/examples/js/controls/PointerLockControls.js +0 -8
  12. package/examples/js/controls/TrackballControls.js +0 -2
  13. package/examples/js/controls/TransformControls.js +20 -16
  14. package/examples/js/effects/AnaglyphEffect.js +2 -2
  15. package/examples/js/effects/OutlineEffect.js +4 -24
  16. package/examples/js/effects/ParallaxBarrierEffect.js +2 -2
  17. package/examples/js/effects/PeppersGhostEffect.js +2 -2
  18. package/examples/js/effects/StereoEffect.js +2 -2
  19. package/examples/js/environments/RoomEnvironment.js +22 -0
  20. package/examples/js/exporters/ColladaExporter.js +4 -13
  21. package/examples/js/exporters/DRACOExporter.js +0 -12
  22. package/examples/js/exporters/GLTFExporter.js +28 -29
  23. package/examples/js/exporters/OBJExporter.js +2 -23
  24. package/examples/js/exporters/PLYExporter.js +12 -24
  25. package/examples/js/exporters/STLExporter.js +0 -7
  26. package/examples/js/exporters/USDZExporter.js +6 -0
  27. package/examples/js/geometries/ConvexGeometry.js +1 -1
  28. package/examples/js/geometries/ParametricGeometry.js +1 -8
  29. package/examples/js/interactive/SelectionHelper.js +2 -0
  30. package/examples/js/libs/ktx-parse.umd.js +1 -0
  31. package/examples/js/libs/meshopt_decoder.js +98 -32
  32. package/examples/js/loaders/ColladaLoader.js +1 -0
  33. package/examples/js/loaders/DRACOLoader.js +2 -25
  34. package/examples/js/loaders/EXRLoader.js +2 -13
  35. package/examples/js/loaders/FBXLoader.js +10 -3
  36. package/examples/js/loaders/FontLoader.js +3 -16
  37. package/examples/js/loaders/GLTFLoader.js +52 -36
  38. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -11
  39. package/examples/js/loaders/LDrawLoader.js +139 -74
  40. package/examples/js/loaders/OBJLoader.js +7 -13
  41. package/examples/js/loaders/PCDLoader.js +59 -14
  42. package/examples/js/loaders/PLYLoader.js +3 -3
  43. package/examples/js/loaders/SVGLoader.js +4 -3
  44. package/examples/js/loaders/TIFFLoader.js +31 -0
  45. package/examples/js/loaders/VRMLLoader.js +33 -24
  46. package/examples/js/loaders/VTKLoader.js +1 -1
  47. package/examples/js/loaders/lwo/LWO2Parser.js +8 -7
  48. package/examples/js/loaders/lwo/LWO3Parser.js +8 -7
  49. package/examples/js/materials/MeshGouraudMaterial.js +385 -0
  50. package/examples/js/math/ColorConverter.js +0 -50
  51. package/examples/js/misc/GPUComputationRenderer.js +23 -0
  52. package/examples/js/misc/Volume.js +198 -190
  53. package/examples/js/misc/VolumeSlice.js +90 -88
  54. package/examples/js/modifiers/SimplifyModifier.js +1 -1
  55. package/examples/js/objects/GroundProjectedEnv.js +193 -0
  56. package/examples/js/objects/Reflector.js +9 -2
  57. package/examples/js/objects/ReflectorForSSRPass.js +3 -4
  58. package/examples/js/objects/Refractor.js +10 -4
  59. package/examples/js/objects/ShadowMesh.js +5 -1
  60. package/examples/js/postprocessing/OutlinePass.js +5 -3
  61. package/examples/js/renderers/CSS2DRenderer.js +2 -2
  62. package/examples/js/renderers/CSS3DRenderer.js +2 -2
  63. package/examples/js/renderers/Projector.js +2 -23
  64. package/examples/js/shaders/LuminosityShader.js +1 -1
  65. package/examples/js/shaders/MMDToonShader.js +6 -2
  66. package/examples/js/shaders/ToneMapShader.js +1 -1
  67. package/examples/js/utils/BufferGeometryUtils.js +1 -1
  68. package/examples/js/utils/GeometryUtils.js +2 -18
  69. package/examples/js/utils/PackedPhongMaterial.js +1 -1
  70. package/examples/js/utils/SceneUtils.js +0 -16
  71. package/examples/jsm/animation/MMDPhysics.js +3 -22
  72. package/examples/jsm/controls/ArcballControls.js +17 -2
  73. package/examples/jsm/controls/FirstPersonControls.js +0 -7
  74. package/examples/jsm/controls/FlyControls.js +0 -7
  75. package/examples/jsm/controls/OrbitControls.js +0 -5
  76. package/examples/jsm/controls/PointerLockControls.js +0 -7
  77. package/examples/jsm/controls/TrackballControls.js +0 -3
  78. package/examples/jsm/controls/TransformControls.js +18 -16
  79. package/examples/jsm/effects/AnaglyphEffect.js +2 -2
  80. package/examples/jsm/effects/OutlineEffect.js +4 -25
  81. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
  82. package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
  83. package/examples/jsm/effects/StereoEffect.js +2 -2
  84. package/examples/jsm/environments/RoomEnvironment.js +23 -0
  85. package/examples/jsm/exporters/ColladaExporter.js +4 -13
  86. package/examples/jsm/exporters/DRACOExporter.js +0 -13
  87. package/examples/jsm/exporters/GLTFExporter.js +29 -31
  88. package/examples/jsm/exporters/KTX2Exporter.js +29 -29
  89. package/examples/jsm/exporters/OBJExporter.js +0 -18
  90. package/examples/jsm/exporters/PLYExporter.js +14 -22
  91. package/examples/jsm/exporters/STLExporter.js +1 -9
  92. package/examples/jsm/exporters/USDZExporter.js +14 -3
  93. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  94. package/examples/jsm/geometries/ParametricGeometry.js +0 -6
  95. package/examples/jsm/interactive/HTMLMesh.js +9 -9
  96. package/examples/jsm/interactive/SelectionHelper.js +5 -3
  97. package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
  98. package/examples/jsm/libs/utif.module.js +1579 -0
  99. package/examples/jsm/libs/zstddec.module.js +1 -0
  100. package/examples/jsm/loaders/ColladaLoader.js +1 -0
  101. package/examples/jsm/loaders/DRACOLoader.js +2 -28
  102. package/examples/jsm/loaders/EXRLoader.js +3 -13
  103. package/examples/jsm/loaders/FBXLoader.js +10 -3
  104. package/examples/jsm/loaders/FontLoader.js +3 -16
  105. package/examples/jsm/loaders/GLTFLoader.js +52 -36
  106. package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
  107. package/examples/jsm/loaders/KTX2Loader.js +192 -30
  108. package/examples/jsm/loaders/LDrawLoader.js +135 -74
  109. package/examples/jsm/loaders/OBJLoader.js +6 -14
  110. package/examples/jsm/loaders/PCDLoader.js +59 -13
  111. package/examples/jsm/loaders/PLYLoader.js +3 -3
  112. package/examples/jsm/loaders/RGBELoader.js +1 -1
  113. package/examples/jsm/loaders/SVGLoader.js +4 -3
  114. package/examples/jsm/loaders/TIFFLoader.js +36 -0
  115. package/examples/jsm/loaders/USDZLoader.js +393 -0
  116. package/examples/jsm/loaders/VRMLLoader.js +23 -25
  117. package/examples/jsm/loaders/VTKLoader.js +1 -1
  118. package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
  119. package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
  120. package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
  121. package/examples/jsm/math/ColorConverter.js +1 -49
  122. package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
  123. package/examples/jsm/misc/Volume.js +169 -171
  124. package/examples/jsm/misc/VolumeSlice.js +78 -80
  125. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  126. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
  127. package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
  128. package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
  129. package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
  130. package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
  131. package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
  132. package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
  133. package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
  134. package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
  135. package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
  136. package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
  137. package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
  138. package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
  139. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +1 -1
  140. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
  141. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +1 -1
  142. package/examples/jsm/node-editor/math/AngleEditor.js +1 -1
  143. package/examples/jsm/node-editor/math/DotEditor.js +1 -1
  144. package/examples/jsm/node-editor/math/InvertEditor.js +1 -1
  145. package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
  146. package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
  147. package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
  148. package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
  149. package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
  150. package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
  151. package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
  152. package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
  153. package/examples/jsm/node-editor/utils/PreviewEditor.js +3 -3
  154. package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
  155. package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
  156. package/examples/jsm/nodes/Nodes.js +43 -13
  157. package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
  158. package/examples/jsm/nodes/accessors/NormalNode.js +4 -4
  159. package/examples/jsm/nodes/accessors/PositionNode.js +5 -5
  160. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
  161. package/examples/jsm/nodes/core/AttributeNode.js +3 -3
  162. package/examples/jsm/nodes/core/CodeNode.js +3 -3
  163. package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
  164. package/examples/jsm/nodes/core/FunctionNode.js +2 -2
  165. package/examples/jsm/nodes/core/Node.js +14 -12
  166. package/examples/jsm/nodes/core/NodeBuilder.js +12 -12
  167. package/examples/jsm/nodes/core/NodeUtils.js +23 -1
  168. package/examples/jsm/nodes/core/{NodeVary.js → NodeVarying.js} +3 -3
  169. package/examples/jsm/nodes/core/{VaryNode.js → VaryingNode.js} +7 -7
  170. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +94 -0
  171. package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
  172. package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -0
  173. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
  174. package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
  175. package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
  176. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +31 -0
  177. package/examples/jsm/nodes/materials/Materials.js +13 -25
  178. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
  179. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
  180. package/examples/jsm/nodes/materials/NodeMaterial.js +2 -2
  181. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
  182. package/examples/jsm/nodes/materialx/Disclaimer.md +199 -0
  183. package/examples/jsm/nodes/materialx/functions/lib/mx_hsv.js +56 -0
  184. package/examples/jsm/nodes/materialx/functions/lib/mx_noise.js +607 -0
  185. package/examples/jsm/nodes/math/MathNode.js +2 -12
  186. package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
  187. package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
  188. package/examples/jsm/nodes/shadernode/ShaderNode.js +5 -5
  189. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +8 -5
  190. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +20 -6
  191. package/examples/jsm/nodes/utils/ConvertNode.js +8 -3
  192. package/examples/jsm/nodes/utils/JoinNode.js +7 -7
  193. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +2 -1
  194. package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
  195. package/examples/jsm/nodes/utils/SplitNode.js +21 -5
  196. package/examples/jsm/nodes/utils/TimerNode.js +2 -2
  197. package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
  198. package/examples/jsm/objects/Reflector.js +12 -5
  199. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
  200. package/examples/jsm/objects/Refractor.js +12 -6
  201. package/examples/jsm/objects/ShadowMesh.js +8 -2
  202. package/examples/jsm/postprocessing/OutlinePass.js +5 -3
  203. package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
  204. package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
  205. package/examples/jsm/renderers/Projector.js +2 -24
  206. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
  207. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +329 -218
  208. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
  209. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +39 -3
  210. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
  211. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
  212. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  213. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
  214. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
  215. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
  216. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +66 -81
  217. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
  218. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
  219. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
  220. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +25 -30
  221. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  222. package/examples/jsm/shaders/LuminosityShader.js +1 -1
  223. package/examples/jsm/shaders/MMDToonShader.js +2 -2
  224. package/examples/jsm/shaders/ToneMapShader.js +1 -1
  225. package/examples/jsm/utils/BufferGeometryUtils.js +2 -1
  226. package/examples/jsm/utils/GeometryUtils.js +17 -25
  227. package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
  228. package/examples/jsm/utils/SceneUtils.js +1 -21
  229. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
  230. package/examples/jsm/webxr/VRButton.js +1 -7
  231. package/package.json +18 -14
  232. package/src/Three.Legacy.js +262 -36
  233. package/src/Three.js +3 -2
  234. package/src/animation/AnimationAction.js +6 -5
  235. package/src/animation/AnimationClip.js +1 -1
  236. package/src/animation/AnimationMixer.js +1 -1
  237. package/src/animation/AnimationUtils.js +204 -199
  238. package/src/animation/KeyframeTrack.js +1 -1
  239. package/src/animation/PropertyBinding.js +24 -5
  240. package/src/cameras/CubeCamera.js +0 -7
  241. package/src/constants.js +2 -4
  242. package/src/core/BufferAttribute.js +81 -111
  243. package/src/core/BufferGeometry.js +3 -41
  244. package/src/core/InstancedBufferAttribute.js +0 -10
  245. package/src/core/InterleavedBuffer.js +1 -1
  246. package/src/core/InterleavedBufferAttribute.js +56 -7
  247. package/src/core/Object3D.js +22 -5
  248. package/src/core/Uniform.js +0 -7
  249. package/src/core/UniformsGroup.js +92 -0
  250. package/src/extras/DataUtils.js +104 -88
  251. package/src/extras/core/Path.js +1 -0
  252. package/src/extras/core/ShapePath.js +1 -4
  253. package/src/extras/curves/CatmullRomCurve3.js +4 -2
  254. package/src/geometries/BoxGeometry.js +1 -1
  255. package/src/geometries/CapsuleGeometry.js +1 -1
  256. package/src/geometries/CircleGeometry.js +1 -1
  257. package/src/geometries/ConeGeometry.js +1 -1
  258. package/src/geometries/CylinderGeometry.js +2 -1
  259. package/src/geometries/DodecahedronGeometry.js +1 -1
  260. package/src/geometries/EdgesGeometry.js +5 -4
  261. package/src/geometries/ExtrudeGeometry.js +2 -11
  262. package/src/geometries/IcosahedronGeometry.js +1 -1
  263. package/src/geometries/LatheGeometry.js +2 -2
  264. package/src/geometries/OctahedronGeometry.js +1 -1
  265. package/src/geometries/PlaneGeometry.js +2 -1
  266. package/src/geometries/PolyhedronGeometry.js +1 -1
  267. package/src/geometries/RingGeometry.js +1 -1
  268. package/src/geometries/ShapeGeometry.js +2 -1
  269. package/src/geometries/SphereGeometry.js +2 -1
  270. package/src/geometries/TetrahedronGeometry.js +1 -1
  271. package/src/geometries/TorusGeometry.js +2 -1
  272. package/src/geometries/TorusKnotGeometry.js +2 -1
  273. package/src/geometries/TubeGeometry.js +2 -1
  274. package/src/geometries/WireframeGeometry.js +1 -0
  275. package/src/helpers/CameraHelper.js +97 -38
  276. package/src/helpers/DirectionalLightHelper.js +1 -0
  277. package/src/helpers/HemisphereLightHelper.js +1 -0
  278. package/src/helpers/PlaneHelper.js +6 -9
  279. package/src/helpers/PolarGridHelper.js +18 -14
  280. package/src/helpers/SpotLightHelper.js +1 -0
  281. package/src/lights/SpotLight.js +2 -0
  282. package/src/loaders/FileLoader.js +12 -1
  283. package/src/loaders/LoadingManager.js +1 -1
  284. package/src/loaders/MaterialLoader.js +49 -7
  285. package/src/loaders/ObjectLoader.js +4 -41
  286. package/src/materials/Material.js +1 -33
  287. package/src/materials/Materials.js +0 -27
  288. package/src/materials/MeshLambertMaterial.js +28 -1
  289. package/src/materials/ShaderMaterial.js +3 -7
  290. package/src/math/Color.js +3 -13
  291. package/src/math/MathUtils.js +1 -7
  292. package/src/math/Matrix3.js +1 -7
  293. package/src/math/Matrix4.js +3 -27
  294. package/src/math/Quaternion.js +1 -21
  295. package/src/math/Vector2.js +4 -24
  296. package/src/math/Vector3.js +7 -46
  297. package/src/math/Vector4.js +4 -24
  298. package/src/renderers/WebGLRenderer.js +84 -8
  299. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
  300. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
  301. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
  302. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
  303. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
  304. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
  305. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
  306. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
  307. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -12
  308. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
  309. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +30 -0
  310. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
  311. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
  312. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
  313. package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
  314. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
  315. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
  316. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
  317. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  318. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
  319. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
  320. package/src/renderers/shaders/ShaderChunk.js +4 -2
  321. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
  322. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
  323. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  324. package/src/renderers/shaders/ShaderLib.js +31 -31
  325. package/src/renderers/shaders/UniformsLib.js +12 -11
  326. package/src/renderers/shaders/UniformsUtils.js +14 -0
  327. package/src/renderers/webgl/WebGLBackground.js +2 -2
  328. package/src/renderers/webgl/WebGLLights.js +37 -13
  329. package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
  330. package/src/renderers/webgl/WebGLProgram.js +6 -11
  331. package/src/renderers/webgl/WebGLPrograms.js +30 -26
  332. package/src/renderers/webgl/WebGLRenderLists.js +5 -4
  333. package/src/renderers/webgl/WebGLRenderStates.js +5 -4
  334. package/src/renderers/webgl/WebGLShaderCache.js +9 -6
  335. package/src/renderers/webgl/WebGLShadowMap.js +10 -15
  336. package/src/renderers/webgl/WebGLState.js +47 -0
  337. package/src/renderers/webgl/WebGLUniforms.js +4 -4
  338. package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
  339. package/src/renderers/webgl/WebGLUtils.js +2 -0
  340. package/src/renderers/webvr/WebVRManager.js +42 -9
  341. package/src/renderers/webvr/WebVRUtils.js +1 -1
  342. package/src/renderers/webxr/WebXRController.js +45 -37
  343. package/src/renderers/webxr/WebXRManager.js +58 -33
  344. package/src/scenes/Scene.js +16 -3
  345. package/src/textures/Source.js +1 -1
  346. package/src/utils.js +1 -1
  347. package/examples/js/controls/experimental/CameraControls.js +0 -1048
  348. package/examples/js/loaders/KTX2Loader.js +0 -558
  349. package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
  350. package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
  351. package/examples/jsm/package.json +0 -3
  352. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
  353. package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
@@ -0,0 +1,372 @@
1
+ function WebGLUniformsGroups( gl, info, capabilities, state ) {
2
+
3
+ let buffers = {};
4
+ let updateList = {};
5
+ let allocatedBindingPoints = [];
6
+
7
+ const maxBindingPoints = ( capabilities.isWebGL2 ) ? gl.getParameter( gl.MAX_UNIFORM_BUFFER_BINDINGS ) : 0; // binding points are global whereas block indices are per shader program
8
+
9
+ function bind( uniformsGroup, program ) {
10
+
11
+ const webglProgram = program.program;
12
+ state.uniformBlockBinding( uniformsGroup, webglProgram );
13
+
14
+ }
15
+
16
+ function update( uniformsGroup, program ) {
17
+
18
+ let buffer = buffers[ uniformsGroup.id ];
19
+
20
+ if ( buffer === undefined ) {
21
+
22
+ prepareUniformsGroup( uniformsGroup );
23
+
24
+ buffer = createBuffer( uniformsGroup );
25
+ buffers[ uniformsGroup.id ] = buffer;
26
+
27
+ uniformsGroup.addEventListener( 'dispose', onUniformsGroupsDispose );
28
+
29
+ }
30
+
31
+ // ensure to update the binding points/block indices mapping for this program
32
+
33
+ const webglProgram = program.program;
34
+ state.updateUBOMapping( uniformsGroup, webglProgram );
35
+
36
+ // update UBO once per frame
37
+
38
+ const frame = info.render.frame;
39
+
40
+ if ( updateList[ uniformsGroup.id ] !== frame ) {
41
+
42
+ updateBufferData( uniformsGroup );
43
+
44
+ updateList[ uniformsGroup.id ] = frame;
45
+
46
+ }
47
+
48
+ }
49
+
50
+ function createBuffer( uniformsGroup ) {
51
+
52
+ // the setup of an UBO is independent of a particular shader program but global
53
+
54
+ const bindingPointIndex = allocateBindingPointIndex();
55
+ uniformsGroup.__bindingPointIndex = bindingPointIndex;
56
+
57
+ const buffer = gl.createBuffer();
58
+ const size = uniformsGroup.__size;
59
+ const usage = uniformsGroup.usage;
60
+
61
+ gl.bindBuffer( gl.UNIFORM_BUFFER, buffer );
62
+ gl.bufferData( gl.UNIFORM_BUFFER, size, usage );
63
+ gl.bindBuffer( gl.UNIFORM_BUFFER, null );
64
+ gl.bindBufferBase( gl.UNIFORM_BUFFER, bindingPointIndex, buffer );
65
+
66
+ return buffer;
67
+
68
+ }
69
+
70
+ function allocateBindingPointIndex() {
71
+
72
+ for ( let i = 0; i < maxBindingPoints; i ++ ) {
73
+
74
+ if ( allocatedBindingPoints.indexOf( i ) === - 1 ) {
75
+
76
+ allocatedBindingPoints.push( i );
77
+ return i;
78
+
79
+ }
80
+
81
+ }
82
+
83
+ console.error( 'THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.' );
84
+
85
+ return 0;
86
+
87
+ }
88
+
89
+ function updateBufferData( uniformsGroup ) {
90
+
91
+ const buffer = buffers[ uniformsGroup.id ];
92
+ const uniforms = uniformsGroup.uniforms;
93
+ const cache = uniformsGroup.__cache;
94
+
95
+ gl.bindBuffer( gl.UNIFORM_BUFFER, buffer );
96
+
97
+ for ( let i = 0, il = uniforms.length; i < il; i ++ ) {
98
+
99
+ const uniform = uniforms[ i ];
100
+
101
+ // partly update the buffer if necessary
102
+
103
+ if ( hasUniformChanged( uniform, i, cache ) === true ) {
104
+
105
+ const value = uniform.value;
106
+ const offset = uniform.__offset;
107
+
108
+ if ( typeof value === 'number' ) {
109
+
110
+ uniform.__data[ 0 ] = value;
111
+ gl.bufferSubData( gl.UNIFORM_BUFFER, offset, uniform.__data );
112
+
113
+ } else {
114
+
115
+ if ( uniform.value.isMatrix3 ) {
116
+
117
+ // manually converting 3x3 to 3x4
118
+
119
+ uniform.__data[ 0 ] = uniform.value.elements[ 0 ];
120
+ uniform.__data[ 1 ] = uniform.value.elements[ 1 ];
121
+ uniform.__data[ 2 ] = uniform.value.elements[ 2 ];
122
+ uniform.__data[ 3 ] = uniform.value.elements[ 0 ];
123
+ uniform.__data[ 4 ] = uniform.value.elements[ 3 ];
124
+ uniform.__data[ 5 ] = uniform.value.elements[ 4 ];
125
+ uniform.__data[ 6 ] = uniform.value.elements[ 5 ];
126
+ uniform.__data[ 7 ] = uniform.value.elements[ 0 ];
127
+ uniform.__data[ 8 ] = uniform.value.elements[ 6 ];
128
+ uniform.__data[ 9 ] = uniform.value.elements[ 7 ];
129
+ uniform.__data[ 10 ] = uniform.value.elements[ 8 ];
130
+ uniform.__data[ 11 ] = uniform.value.elements[ 0 ];
131
+
132
+ } else {
133
+
134
+ value.toArray( uniform.__data );
135
+
136
+ }
137
+
138
+ gl.bufferSubData( gl.UNIFORM_BUFFER, offset, uniform.__data );
139
+
140
+ }
141
+
142
+ }
143
+
144
+ }
145
+
146
+ gl.bindBuffer( gl.UNIFORM_BUFFER, null );
147
+
148
+ }
149
+
150
+ function hasUniformChanged( uniform, index, cache ) {
151
+
152
+ const value = uniform.value;
153
+
154
+ if ( cache[ index ] === undefined ) {
155
+
156
+ // cache entry does not exist so far
157
+
158
+ if ( typeof value === 'number' ) {
159
+
160
+ cache[ index ] = value;
161
+
162
+ } else {
163
+
164
+ cache[ index ] = value.clone();
165
+
166
+ }
167
+
168
+ return true;
169
+
170
+ } else {
171
+
172
+ // compare current value with cached entry
173
+
174
+ if ( typeof value === 'number' ) {
175
+
176
+ if ( cache[ index ] !== value ) {
177
+
178
+ cache[ index ] = value;
179
+ return true;
180
+
181
+ }
182
+
183
+ } else {
184
+
185
+ const cachedObject = cache[ index ];
186
+
187
+ if ( cachedObject.equals( value ) === false ) {
188
+
189
+ cachedObject.copy( value );
190
+ return true;
191
+
192
+ }
193
+
194
+ }
195
+
196
+ }
197
+
198
+ return false;
199
+
200
+ }
201
+
202
+ function prepareUniformsGroup( uniformsGroup ) {
203
+
204
+ // determine total buffer size according to the STD140 layout
205
+ // Hint: STD140 is the only supported layout in WebGL 2
206
+
207
+ const uniforms = uniformsGroup.uniforms;
208
+
209
+ let offset = 0; // global buffer offset in bytes
210
+ const chunkSize = 16; // size of a chunk in bytes
211
+ let chunkOffset = 0; // offset within a single chunk in bytes
212
+
213
+ for ( let i = 0, l = uniforms.length; i < l; i ++ ) {
214
+
215
+ const uniform = uniforms[ i ];
216
+ const info = getUniformSize( uniform );
217
+
218
+ // the following two properties will be used for partial buffer updates
219
+
220
+ uniform.__data = new Float32Array( info.storage / Float32Array.BYTES_PER_ELEMENT );
221
+ uniform.__offset = offset;
222
+
223
+ //
224
+
225
+ if ( i > 0 ) {
226
+
227
+ chunkOffset = offset % chunkSize;
228
+
229
+ const remainingSizeInChunk = chunkSize - chunkOffset;
230
+
231
+ // check for chunk overflow
232
+
233
+ if ( chunkOffset !== 0 && ( remainingSizeInChunk - info.boundary ) < 0 ) {
234
+
235
+ // add padding and adjust offset
236
+
237
+ offset += ( chunkSize - chunkOffset );
238
+ uniform.__offset = offset;
239
+
240
+ }
241
+
242
+ }
243
+
244
+ offset += info.storage;
245
+
246
+ }
247
+
248
+ // ensure correct final padding
249
+
250
+ chunkOffset = offset % chunkSize;
251
+
252
+ if ( chunkOffset > 0 ) offset += ( chunkSize - chunkOffset );
253
+
254
+ //
255
+
256
+ uniformsGroup.__size = offset;
257
+ uniformsGroup.__cache = {};
258
+
259
+ return this;
260
+
261
+ }
262
+
263
+ function getUniformSize( uniform ) {
264
+
265
+ const value = uniform.value;
266
+
267
+ const info = {
268
+ boundary: 0, // bytes
269
+ storage: 0 // bytes
270
+ };
271
+
272
+ // determine sizes according to STD140
273
+
274
+ if ( typeof value === 'number' ) {
275
+
276
+ // float/int
277
+
278
+ info.boundary = 4;
279
+ info.storage = 4;
280
+
281
+ } else if ( value.isVector2 ) {
282
+
283
+ // vec2
284
+
285
+ info.boundary = 8;
286
+ info.storage = 8;
287
+
288
+ } else if ( value.isVector3 || value.isColor ) {
289
+
290
+ // vec3
291
+
292
+ info.boundary = 16;
293
+ info.storage = 12; // evil: vec3 must start on a 16-byte boundary but it only consumes 12 bytes
294
+
295
+ } else if ( value.isVector4 ) {
296
+
297
+ // vec4
298
+
299
+ info.boundary = 16;
300
+ info.storage = 16;
301
+
302
+ } else if ( value.isMatrix3 ) {
303
+
304
+ // mat3 (in STD140 a 3x3 matrix is represented as 3x4)
305
+
306
+ info.boundary = 48;
307
+ info.storage = 48;
308
+
309
+ } else if ( value.isMatrix4 ) {
310
+
311
+ // mat4
312
+
313
+ info.boundary = 64;
314
+ info.storage = 64;
315
+
316
+ } else if ( value.isTexture ) {
317
+
318
+ console.warn( 'THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.' );
319
+
320
+ } else {
321
+
322
+ console.warn( 'THREE.WebGLRenderer: Unsupported uniform value type.', value );
323
+
324
+ }
325
+
326
+ return info;
327
+
328
+ }
329
+
330
+ function onUniformsGroupsDispose( event ) {
331
+
332
+ const uniformsGroup = event.target;
333
+
334
+ uniformsGroup.removeEventListener( 'dispose', onUniformsGroupsDispose );
335
+
336
+ const index = allocatedBindingPoints.indexOf( uniformsGroup.__bindingPointIndex );
337
+ allocatedBindingPoints.splice( index, 1 );
338
+
339
+ gl.deleteBuffer( buffers[ uniformsGroup.id ] );
340
+
341
+ delete buffers[ uniformsGroup.id ];
342
+ delete updateList[ uniformsGroup.id ];
343
+
344
+ }
345
+
346
+ function dispose() {
347
+
348
+ for ( const id in buffers ) {
349
+
350
+ gl.deleteBuffer( buffers[ id ] );
351
+
352
+ }
353
+
354
+ allocatedBindingPoints = [];
355
+ buffers = {};
356
+ updateList = {};
357
+
358
+ }
359
+
360
+ return {
361
+
362
+ bind: bind,
363
+ update: update,
364
+
365
+ dispose: dispose
366
+
367
+ };
368
+
369
+ }
370
+
371
+
372
+ export { WebGLUniformsGroups };
@@ -45,6 +45,8 @@ function WebGLUtils( gl, extensions, capabilities ) {
45
45
  if ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;
46
46
  if ( p === RedFormat ) return gl.RED;
47
47
 
48
+ // @deprecated since r137
49
+
48
50
  if ( p === RGBFormat ) {
49
51
 
50
52
  console.warn( 'THREE.WebGLRenderer: THREE.RGBFormat has been removed. Use THREE.RGBAFormat instead. https://github.com/mrdoob/three.js/pull/23228' );
@@ -14,7 +14,7 @@ import { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js';
14
14
  import { WebGLAnimation } from '../webgl/WebGLAnimation.js';
15
15
  import { setProjectionFromUnion } from './WebVRUtils.js';
16
16
 
17
- function WebVRManager ( renderer ) {
17
+ function WebVRManager( renderer ) {
18
18
 
19
19
  var renderWidth, renderHeight;
20
20
  var scope = this;
@@ -275,7 +275,11 @@ function WebVRManager ( renderer ) {
275
275
 
276
276
  };
277
277
 
278
- this.getCamera = function ( camera ) {
278
+ //
279
+
280
+ this.cameraAutoUpdate = true;
281
+
282
+ this.updateCamera = function ( camera ) {
279
283
 
280
284
  var userHeight = referenceSpaceType === 'local-floor' ? 1.6 : 0;
281
285
 
@@ -348,7 +352,7 @@ function WebVRManager ( renderer ) {
348
352
 
349
353
  // TODO (mrdoob) Double check this code
350
354
 
351
- standingMatrixInverse.getInverse( standingMatrix );
355
+ standingMatrixInverse.copy( standingMatrix ).invert();
352
356
 
353
357
  if ( referenceSpaceType === 'local-floor' ) {
354
358
 
@@ -361,7 +365,7 @@ function WebVRManager ( renderer ) {
361
365
 
362
366
  if ( parent !== null ) {
363
367
 
364
- matrixWorldInverse.getInverse( parent.matrixWorld );
368
+ matrixWorldInverse.copy( parent.matrixWorld ).invert();
365
369
 
366
370
  cameraL.matrixWorldInverse.multiply( matrixWorldInverse );
367
371
  cameraR.matrixWorldInverse.multiply( matrixWorldInverse );
@@ -370,8 +374,8 @@ function WebVRManager ( renderer ) {
370
374
 
371
375
  // envMap and Mirror needs camera.matrixWorld
372
376
 
373
- cameraL.matrixWorld.getInverse( cameraL.matrixWorldInverse );
374
- cameraR.matrixWorld.getInverse( cameraR.matrixWorldInverse );
377
+ cameraL.matrixWorld.copy( cameraL.matrixWorldInverse ).invert();
378
+ cameraR.matrixWorld.copy( cameraR.matrixWorldInverse ).invert();
375
379
 
376
380
  cameraL.projectionMatrix.fromArray( frameData.leftProjectionMatrix );
377
381
  cameraR.projectionMatrix.fromArray( frameData.rightProjectionMatrix );
@@ -397,6 +401,32 @@ function WebVRManager ( renderer ) {
397
401
 
398
402
  };
399
403
 
404
+ this.getCamera = function () {
405
+
406
+ return cameraVR;
407
+
408
+ };
409
+
410
+ // Dummy getFoveation/setFoveation to have the same API as WebXR
411
+
412
+ this.getFoveation = function () {
413
+
414
+ return 1;
415
+
416
+ };
417
+
418
+ this.setFoveation = function ( foveation ) {
419
+
420
+ if ( foveation !== 1 ) {
421
+
422
+ console.warn( 'THREE.WebVRManager: setFoveation() not used in WebVR.' );
423
+
424
+ }
425
+
426
+ };
427
+
428
+ //
429
+
400
430
  this.getStandingMatrix = function () {
401
431
 
402
432
  return standingMatrix;
@@ -441,10 +471,13 @@ function WebVRManager ( renderer ) {
441
471
 
442
472
  };
443
473
 
444
- this.addEventListener = function () { /* Stub */ }
445
-
446
474
  }
447
475
 
448
- Object.assign( WebVRManager.prototype, EventDispatcher.prototype );
476
+ Object.assign( WebVRManager.prototype, {
477
+ addEventListener: EventDispatcher.prototype.addEventListener,
478
+ hasEventListener: EventDispatcher.prototype.hasEventListener,
479
+ removeEventListener: EventDispatcher.prototype.removeEventListener,
480
+ dispatchEvent: EventDispatcher.prototype.dispatchEvent
481
+ } );
449
482
 
450
483
  export { WebVRManager };
@@ -47,7 +47,7 @@ function setProjectionFromUnion( camera, cameraL, cameraR ) {
47
47
  camera.translateX( xOffset );
48
48
  camera.translateZ( zOffset );
49
49
  camera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );
50
- camera.matrixWorldInverse.getInverse( camera.matrixWorld );
50
+ camera.matrixWorldInverse.copy( camera.matrixWorld ).invert();
51
51
 
52
52
  // Find the union of the frustum values of the cameras and scale
53
53
  // the values so that the near plane's position does not change in world space,
@@ -128,43 +128,6 @@ class WebXRController {
128
128
 
129
129
  if ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {
130
130
 
131
- if ( targetRay !== null ) {
132
-
133
- inputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );
134
-
135
- if ( inputPose !== null ) {
136
-
137
- targetRay.matrix.fromArray( inputPose.transform.matrix );
138
- targetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );
139
-
140
- if ( inputPose.linearVelocity ) {
141
-
142
- targetRay.hasLinearVelocity = true;
143
- targetRay.linearVelocity.copy( inputPose.linearVelocity );
144
-
145
- } else {
146
-
147
- targetRay.hasLinearVelocity = false;
148
-
149
- }
150
-
151
- if ( inputPose.angularVelocity ) {
152
-
153
- targetRay.hasAngularVelocity = true;
154
- targetRay.angularVelocity.copy( inputPose.angularVelocity );
155
-
156
- } else {
157
-
158
- targetRay.hasAngularVelocity = false;
159
-
160
- }
161
-
162
- this.dispatchEvent( _moveEvent );
163
-
164
- }
165
-
166
- }
167
-
168
131
  if ( hand && inputSource.hand ) {
169
132
 
170
133
  handPose = true;
@@ -269,6 +232,51 @@ class WebXRController {
269
232
 
270
233
  }
271
234
 
235
+ if ( targetRay !== null ) {
236
+
237
+ inputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );
238
+
239
+ // Some runtimes (namely Vive Cosmos with Vive OpenXR Runtime) have only grip space and ray space is equal to it
240
+ if ( inputPose === null && gripPose !== null ) {
241
+
242
+ inputPose = gripPose;
243
+
244
+ }
245
+
246
+ if ( inputPose !== null ) {
247
+
248
+ targetRay.matrix.fromArray( inputPose.transform.matrix );
249
+ targetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );
250
+
251
+ if ( inputPose.linearVelocity ) {
252
+
253
+ targetRay.hasLinearVelocity = true;
254
+ targetRay.linearVelocity.copy( inputPose.linearVelocity );
255
+
256
+ } else {
257
+
258
+ targetRay.hasLinearVelocity = false;
259
+
260
+ }
261
+
262
+ if ( inputPose.angularVelocity ) {
263
+
264
+ targetRay.hasAngularVelocity = true;
265
+ targetRay.angularVelocity.copy( inputPose.angularVelocity );
266
+
267
+ } else {
268
+
269
+ targetRay.hasAngularVelocity = false;
270
+
271
+ }
272
+
273
+ this.dispatchEvent( _moveEvent );
274
+
275
+ }
276
+
277
+ }
278
+
279
+
272
280
  }
273
281
 
274
282
  if ( targetRay !== null ) {