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
@@ -1,5 +1,5 @@
1
1
  import { Material } from './Material.js';
2
- import { cloneUniforms } from '../renderers/shaders/UniformsUtils.js';
2
+ import { cloneUniforms, cloneUniformsGroups } from '../renderers/shaders/UniformsUtils.js';
3
3
 
4
4
  import default_vertex from '../renderers/shaders/ShaderChunk/default_vertex.glsl.js';
5
5
  import default_fragment from '../renderers/shaders/ShaderChunk/default_fragment.glsl.js';
@@ -16,6 +16,7 @@ class ShaderMaterial extends Material {
16
16
 
17
17
  this.defines = {};
18
18
  this.uniforms = {};
19
+ this.uniformsGroups = [];
19
20
 
20
21
  this.vertexShader = default_vertex;
21
22
  this.fragmentShader = default_fragment;
@@ -51,12 +52,6 @@ class ShaderMaterial extends Material {
51
52
 
52
53
  if ( parameters !== undefined ) {
53
54
 
54
- if ( parameters.attributes !== undefined ) {
55
-
56
- console.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );
57
-
58
- }
59
-
60
55
  this.setValues( parameters );
61
56
 
62
57
  }
@@ -71,6 +66,7 @@ class ShaderMaterial extends Material {
71
66
  this.vertexShader = source.vertexShader;
72
67
 
73
68
  this.uniforms = cloneUniforms( source.uniforms );
69
+ this.uniformsGroups = cloneUniformsGroups( source.uniformsGroups );
74
70
 
75
71
  this.defines = Object.assign( {}, source.defines );
76
72
 
package/src/math/Color.js CHANGED
@@ -222,12 +222,12 @@ class Color {
222
222
  case 'hsl':
223
223
  case 'hsla':
224
224
 
225
- if ( color = /^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) {
225
+ if ( color = /^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) {
226
226
 
227
227
  // hsl(120,50%,50%) hsla(120,50%,50%,0.5)
228
228
  const h = parseFloat( color[ 1 ] ) / 360;
229
- const s = parseInt( color[ 2 ], 10 ) / 100;
230
- const l = parseInt( color[ 3 ], 10 ) / 100;
229
+ const s = parseFloat( color[ 2 ] ) / 100;
230
+ const l = parseFloat( color[ 3 ] ) / 100;
231
231
 
232
232
  handleAlpha( color[ 4 ] );
233
233
 
@@ -580,16 +580,6 @@ class Color {
580
580
  this.g = attribute.getY( index );
581
581
  this.b = attribute.getZ( index );
582
582
 
583
- if ( attribute.normalized === true ) {
584
-
585
- // assuming Uint8Array
586
-
587
- this.r /= 255;
588
- this.g /= 255;
589
- this.b /= 255;
590
-
591
- }
592
-
593
583
  return this;
594
584
 
595
585
  }
@@ -1,10 +1,4 @@
1
- const _lut = [];
2
-
3
- for ( let i = 0; i < 256; i ++ ) {
4
-
5
- _lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );
6
-
7
- }
1
+ const _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];
8
2
 
9
3
  let _seed = 1234567;
10
4
 
@@ -2,7 +2,7 @@ class Matrix3 {
2
2
 
3
3
  constructor() {
4
4
 
5
- this.isMatrix3 = true;
5
+ Matrix3.prototype.isMatrix3 = true;
6
6
 
7
7
  this.elements = [
8
8
 
@@ -12,12 +12,6 @@ class Matrix3 {
12
12
 
13
13
  ];
14
14
 
15
- if ( arguments.length > 0 ) {
16
-
17
- console.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );
18
-
19
- }
20
-
21
15
  }
22
16
 
23
17
  set( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {
@@ -1,9 +1,10 @@
1
1
  import { Vector3 } from './Vector3.js';
2
+
2
3
  class Matrix4 {
3
4
 
4
5
  constructor() {
5
6
 
6
- this.isMatrix4 = true;
7
+ Matrix4.prototype.isMatrix4 = true;
7
8
 
8
9
  this.elements = [
9
10
 
@@ -14,12 +15,6 @@ class Matrix4 {
14
15
 
15
16
  ];
16
17
 
17
- if ( arguments.length > 0 ) {
18
-
19
- console.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );
20
-
21
- }
22
-
23
18
  }
24
19
 
25
20
  set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {
@@ -159,12 +154,6 @@ class Matrix4 {
159
154
 
160
155
  makeRotationFromEuler( euler ) {
161
156
 
162
- if ( ! ( euler && euler.isEuler ) ) {
163
-
164
- console.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );
165
-
166
- }
167
-
168
157
  const te = this.elements;
169
158
 
170
159
  const x = euler.x, y = euler.y, z = euler.z;
@@ -338,14 +327,7 @@ class Matrix4 {
338
327
 
339
328
  }
340
329
 
341
- multiply( m, n ) {
342
-
343
- if ( n !== undefined ) {
344
-
345
- console.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );
346
- return this.multiplyMatrices( m, n );
347
-
348
- }
330
+ multiply( m ) {
349
331
 
350
332
  return this.multiplyMatrices( this, m );
351
333
 
@@ -772,12 +754,6 @@ class Matrix4 {
772
754
 
773
755
  makePerspective( left, right, top, bottom, near, far ) {
774
756
 
775
- if ( far === undefined ) {
776
-
777
- console.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );
778
-
779
- }
780
-
781
757
  const te = this.elements;
782
758
  const x = 2 * near / ( right - left );
783
759
  const y = 2 * near / ( top - bottom );
@@ -13,13 +13,6 @@ class Quaternion {
13
13
 
14
14
  }
15
15
 
16
- static slerp( qa, qb, qm, t ) {
17
-
18
- console.warn( 'THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.' );
19
- return qm.slerpQuaternions( qa, qb, t );
20
-
21
- }
22
-
23
16
  static slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {
24
17
 
25
18
  // fuzz-free, array-based Quaternion SLERP operation
@@ -207,12 +200,6 @@ class Quaternion {
207
200
 
208
201
  setFromEuler( euler, update ) {
209
202
 
210
- if ( ! ( euler && euler.isEuler ) ) {
211
-
212
- throw new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );
213
-
214
- }
215
-
216
203
  const x = euler._x, y = euler._y, z = euler._z, order = euler._order;
217
204
 
218
205
  // http://www.mathworks.com/matlabcentral/fileexchange/
@@ -497,14 +484,7 @@ class Quaternion {
497
484
 
498
485
  }
499
486
 
500
- multiply( q, p ) {
501
-
502
- if ( p !== undefined ) {
503
-
504
- console.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );
505
- return this.multiplyQuaternions( q, p );
506
-
507
- }
487
+ multiply( q ) {
508
488
 
509
489
  return this.multiplyQuaternions( this, q );
510
490
 
@@ -2,7 +2,7 @@ class Vector2 {
2
2
 
3
3
  constructor( x = 0, y = 0 ) {
4
4
 
5
- this.isVector2 = true;
5
+ Vector2.prototype.isVector2 = true;
6
6
 
7
7
  this.x = x;
8
8
  this.y = y;
@@ -108,14 +108,7 @@ class Vector2 {
108
108
 
109
109
  }
110
110
 
111
- add( v, w ) {
112
-
113
- if ( w !== undefined ) {
114
-
115
- console.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );
116
- return this.addVectors( v, w );
117
-
118
- }
111
+ add( v ) {
119
112
 
120
113
  this.x += v.x;
121
114
  this.y += v.y;
@@ -151,14 +144,7 @@ class Vector2 {
151
144
 
152
145
  }
153
146
 
154
- sub( v, w ) {
155
-
156
- if ( w !== undefined ) {
157
-
158
- console.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );
159
- return this.subVectors( v, w );
160
-
161
- }
147
+ sub( v ) {
162
148
 
163
149
  this.x -= v.x;
164
150
  this.y -= v.y;
@@ -434,13 +420,7 @@ class Vector2 {
434
420
 
435
421
  }
436
422
 
437
- fromBufferAttribute( attribute, index, offset ) {
438
-
439
- if ( offset !== undefined ) {
440
-
441
- console.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );
442
-
443
- }
423
+ fromBufferAttribute( attribute, index ) {
444
424
 
445
425
  this.x = attribute.getX( index );
446
426
  this.y = attribute.getY( index );
@@ -1,10 +1,11 @@
1
1
  import * as MathUtils from './MathUtils.js';
2
2
  import { Quaternion } from './Quaternion.js';
3
+
3
4
  class Vector3 {
4
5
 
5
6
  constructor( x = 0, y = 0, z = 0 ) {
6
7
 
7
- this.isVector3 = true;
8
+ Vector3.prototype.isVector3 = true;
8
9
 
9
10
  this.x = x;
10
11
  this.y = y;
@@ -102,14 +103,7 @@ class Vector3 {
102
103
 
103
104
  }
104
105
 
105
- add( v, w ) {
106
-
107
- if ( w !== undefined ) {
108
-
109
- console.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );
110
- return this.addVectors( v, w );
111
-
112
- }
106
+ add( v ) {
113
107
 
114
108
  this.x += v.x;
115
109
  this.y += v.y;
@@ -149,14 +143,7 @@ class Vector3 {
149
143
 
150
144
  }
151
145
 
152
- sub( v, w ) {
153
-
154
- if ( w !== undefined ) {
155
-
156
- console.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );
157
- return this.subVectors( v, w );
158
-
159
- }
146
+ sub( v ) {
160
147
 
161
148
  this.x -= v.x;
162
149
  this.y -= v.y;
@@ -186,14 +173,7 @@ class Vector3 {
186
173
 
187
174
  }
188
175
 
189
- multiply( v, w ) {
190
-
191
- if ( w !== undefined ) {
192
-
193
- console.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );
194
- return this.multiplyVectors( v, w );
195
-
196
- }
176
+ multiply( v ) {
197
177
 
198
178
  this.x *= v.x;
199
179
  this.y *= v.y;
@@ -225,12 +205,6 @@ class Vector3 {
225
205
 
226
206
  applyEuler( euler ) {
227
207
 
228
- if ( ! ( euler && euler.isEuler ) ) {
229
-
230
- console.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );
231
-
232
- }
233
-
234
208
  return this.applyQuaternion( _quaternion.setFromEuler( euler ) );
235
209
 
236
210
  }
@@ -499,14 +473,7 @@ class Vector3 {
499
473
 
500
474
  }
501
475
 
502
- cross( v, w ) {
503
-
504
- if ( w !== undefined ) {
505
-
506
- console.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );
507
- return this.crossVectors( v, w );
508
-
509
- }
476
+ cross( v ) {
510
477
 
511
478
  return this.crossVectors( this, v );
512
479
 
@@ -696,13 +663,7 @@ class Vector3 {
696
663
 
697
664
  }
698
665
 
699
- fromBufferAttribute( attribute, index, offset ) {
700
-
701
- if ( offset !== undefined ) {
702
-
703
- console.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );
704
-
705
- }
666
+ fromBufferAttribute( attribute, index ) {
706
667
 
707
668
  this.x = attribute.getX( index );
708
669
  this.y = attribute.getY( index );
@@ -2,7 +2,7 @@ class Vector4 {
2
2
 
3
3
  constructor( x = 0, y = 0, z = 0, w = 1 ) {
4
4
 
5
- this.isVector4 = true;
5
+ Vector4.prototype.isVector4 = true;
6
6
 
7
7
  this.x = x;
8
8
  this.y = y;
@@ -136,14 +136,7 @@ class Vector4 {
136
136
 
137
137
  }
138
138
 
139
- add( v, w ) {
140
-
141
- if ( w !== undefined ) {
142
-
143
- console.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );
144
- return this.addVectors( v, w );
145
-
146
- }
139
+ add( v ) {
147
140
 
148
141
  this.x += v.x;
149
142
  this.y += v.y;
@@ -187,14 +180,7 @@ class Vector4 {
187
180
 
188
181
  }
189
182
 
190
- sub( v, w ) {
191
-
192
- if ( w !== undefined ) {
193
-
194
- console.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );
195
- return this.subVectors( v, w );
196
-
197
- }
183
+ sub( v ) {
198
184
 
199
185
  this.x -= v.x;
200
186
  this.y -= v.y;
@@ -622,13 +608,7 @@ class Vector4 {
622
608
 
623
609
  }
624
610
 
625
- fromBufferAttribute( attribute, index, offset ) {
626
-
627
- if ( offset !== undefined ) {
628
-
629
- console.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' );
630
-
631
- }
611
+ fromBufferAttribute( attribute, index ) {
632
612
 
633
613
  this.x = attribute.getX( index );
634
614
  this.y = attribute.getY( index );
@@ -45,6 +45,7 @@ import { WebGLUtils } from './webgl/WebGLUtils.js';
45
45
  import { WebVRManager } from './webvr/WebVRManager.js';
46
46
  import { WebXRManager } from './webxr/WebXRManager.js';
47
47
  import { WebGLMaterials } from './webgl/WebGLMaterials.js';
48
+ import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
48
49
  import { createElementNS } from '../utils.js';
49
50
 
50
51
  function createCanvasElement() {
@@ -308,7 +309,7 @@ function WebGLRenderer( parameters = {} ) {
308
309
 
309
310
  let background, morphtargets, bufferRenderer, indexedBufferRenderer;
310
311
 
311
- let utils, bindingStates;
312
+ let utils, bindingStates, uniformsGroups;
312
313
 
313
314
  function initGLContext() {
314
315
 
@@ -339,6 +340,7 @@ function WebGLRenderer( parameters = {} ) {
339
340
  renderStates = new WebGLRenderStates( extensions, capabilities );
340
341
  background = new WebGLBackground( _this, cubemaps, state, objects, _alpha, _premultipliedAlpha );
341
342
  shadowMap = new WebGLShadowMap( _this, objects, capabilities );
343
+ uniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );
342
344
 
343
345
  bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );
344
346
  indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );
@@ -602,6 +604,7 @@ function WebGLRenderer( parameters = {} ) {
602
604
  cubeuvmaps.dispose();
603
605
  objects.dispose();
604
606
  bindingStates.dispose();
607
+ uniformsGroups.dispose();
605
608
  programCache.dispose();
606
609
 
607
610
  xr.dispose();
@@ -843,6 +846,28 @@ function WebGLRenderer( parameters = {} ) {
843
846
 
844
847
  this.compile = function ( scene, camera ) {
845
848
 
849
+ function prepare( material, scene, object ) {
850
+
851
+ if ( material.transparent === true && material.side === DoubleSide ) {
852
+
853
+ material.side = BackSide;
854
+ material.needsUpdate = true;
855
+ getProgram( material, scene, object );
856
+
857
+ material.side = FrontSide;
858
+ material.needsUpdate = true;
859
+ getProgram( material, scene, object );
860
+
861
+ material.side = DoubleSide;
862
+
863
+ } else {
864
+
865
+ getProgram( material, scene, object );
866
+
867
+ }
868
+
869
+ }
870
+
846
871
  currentRenderState = renderStates.get( scene );
847
872
  currentRenderState.init();
848
873
 
@@ -878,13 +903,13 @@ function WebGLRenderer( parameters = {} ) {
878
903
 
879
904
  const material2 = material[ i ];
880
905
 
881
- getProgram( material2, scene, object );
906
+ prepare( material2, scene, object );
882
907
 
883
908
  }
884
909
 
885
910
  } else {
886
911
 
887
- getProgram( material, scene, object );
912
+ prepare( material, scene, object );
888
913
 
889
914
  }
890
915
 
@@ -951,11 +976,11 @@ function WebGLRenderer( parameters = {} ) {
951
976
 
952
977
  // update scene graph
953
978
 
954
- if ( scene.autoUpdate === true ) scene.updateMatrixWorld();
979
+ if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
955
980
 
956
981
  // update camera matrices and frustum
957
982
 
958
- if ( camera.parent === null ) camera.updateMatrixWorld();
983
+ if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
959
984
 
960
985
  if ( xr.enabled === true && xr.isPresenting === true ) {
961
986
 
@@ -1429,7 +1454,8 @@ function WebGLRenderer( parameters = {} ) {
1429
1454
  uniforms.directionalShadowMap.value = lights.state.directionalShadowMap;
1430
1455
  uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;
1431
1456
  uniforms.spotShadowMap.value = lights.state.spotShadowMap;
1432
- uniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;
1457
+ uniforms.spotLightMatrix.value = lights.state.spotLightMatrix;
1458
+ uniforms.spotLightMap.value = lights.state.spotLightMap;
1433
1459
  uniforms.pointShadowMap.value = lights.state.pointShadowMap;
1434
1460
  uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;
1435
1461
  // TODO (abelnation): add area lights shadow info to uniforms
@@ -1727,7 +1753,6 @@ function WebGLRenderer( parameters = {} ) {
1727
1753
 
1728
1754
  }
1729
1755
 
1730
-
1731
1756
  if ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {
1732
1757
 
1733
1758
  materialProperties.receiveShadow = object.receiveShadow;
@@ -1735,6 +1760,16 @@ function WebGLRenderer( parameters = {} ) {
1735
1760
 
1736
1761
  }
1737
1762
 
1763
+ // https://github.com/mrdoob/three.js/pull/24467#issuecomment-1209031512
1764
+
1765
+ if ( material.isMeshGouraudMaterial && material.envMap !== null ) {
1766
+
1767
+ m_uniforms.envMap.value = envMap;
1768
+
1769
+ m_uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;
1770
+
1771
+ }
1772
+
1738
1773
  if ( refreshMaterial ) {
1739
1774
 
1740
1775
  p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );
@@ -1787,6 +1822,31 @@ function WebGLRenderer( parameters = {} ) {
1787
1822
  p_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );
1788
1823
  p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );
1789
1824
 
1825
+ // UBOs
1826
+
1827
+ if ( material.isShaderMaterial || material.isRawShaderMaterial ) {
1828
+
1829
+ const groups = material.uniformsGroups;
1830
+
1831
+ for ( let i = 0, l = groups.length; i < l; i ++ ) {
1832
+
1833
+ if ( capabilities.isWebGL2 ) {
1834
+
1835
+ const group = groups[ i ];
1836
+
1837
+ uniformsGroups.update( group, program );
1838
+ uniformsGroups.bind( group, program );
1839
+
1840
+ } else {
1841
+
1842
+ console.warn( 'THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.' );
1843
+
1844
+ }
1845
+
1846
+ }
1847
+
1848
+ }
1849
+
1790
1850
  return program;
1791
1851
 
1792
1852
  }
@@ -2206,7 +2266,23 @@ function WebGLRenderer( parameters = {} ) {
2206
2266
 
2207
2267
  this.initTexture = function ( texture ) {
2208
2268
 
2209
- textures.setTexture2D( texture, 0 );
2269
+ if ( texture.isCubeTexture ) {
2270
+
2271
+ textures.setTextureCube( texture, 0 );
2272
+
2273
+ } else if ( texture.isData3DTexture ) {
2274
+
2275
+ textures.setTexture3D( texture, 0 );
2276
+
2277
+ } else if ( texture.isDataArrayTexture ) {
2278
+
2279
+ textures.setTexture2DArray( texture, 0 );
2280
+
2281
+ } else {
2282
+
2283
+ textures.setTexture2D( texture, 0 );
2284
+
2285
+ }
2210
2286
 
2211
2287
  state.unbindTexture();
2212
2288
 
@@ -90,26 +90,26 @@ vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 norm
90
90
 
91
91
  #ifdef USE_IRIDESCENCE
92
92
 
93
- vec3 BRDF_GGX_Iridescence( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float iridescence, const in vec3 iridescenceFresnel, const in float roughness ) {
93
+ vec3 BRDF_GGX_Iridescence( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float iridescence, const in vec3 iridescenceFresnel, const in float roughness ) {
94
94
 
95
- float alpha = pow2( roughness ); // UE4's roughness
95
+ float alpha = pow2( roughness ); // UE4's roughness
96
96
 
97
- vec3 halfDir = normalize( lightDir + viewDir );
97
+ vec3 halfDir = normalize( lightDir + viewDir );
98
98
 
99
- float dotNL = saturate( dot( normal, lightDir ) );
100
- float dotNV = saturate( dot( normal, viewDir ) );
101
- float dotNH = saturate( dot( normal, halfDir ) );
102
- float dotVH = saturate( dot( viewDir, halfDir ) );
99
+ float dotNL = saturate( dot( normal, lightDir ) );
100
+ float dotNV = saturate( dot( normal, viewDir ) );
101
+ float dotNH = saturate( dot( normal, halfDir ) );
102
+ float dotVH = saturate( dot( viewDir, halfDir ) );
103
103
 
104
- vec3 F = mix(F_Schlick( f0, f90, dotVH ), iridescenceFresnel, iridescence);
104
+ vec3 F = mix( F_Schlick( f0, f90, dotVH ), iridescenceFresnel, iridescence );
105
105
 
106
- float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );
106
+ float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );
107
107
 
108
- float D = D_GGX( alpha, dotNH );
108
+ float D = D_GGX( alpha, dotNH );
109
109
 
110
- return F * ( V * D );
110
+ return F * ( V * D );
111
111
 
112
- }
112
+ }
113
113
 
114
114
  #endif
115
115
 
@@ -24,11 +24,9 @@ export default /* glsl */`
24
24
 
25
25
  vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {
26
26
 
27
- // Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988
28
-
29
- vec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );
30
- vec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );
31
- vec3 vN = surf_norm; // normalized
27
+ vec3 vSigmaX = dFdx( surf_pos.xyz );
28
+ vec3 vSigmaY = dFdy( surf_pos.xyz );
29
+ vec3 vN = surf_norm; // normalized
32
30
 
33
31
  vec3 R1 = cross( vSigmaY, vN );
34
32
  vec3 R2 = cross( vN, vSigmaX );