super-three 0.157.1 → 0.160.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 (303) hide show
  1. package/README.md +6 -4
  2. package/build/three.cjs +3100 -1537
  3. package/build/three.js +3100 -1537
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +3093 -1538
  6. package/build/three.module.min.js +1 -1
  7. package/examples/jsm/Addons.js +291 -0
  8. package/examples/jsm/controls/FlyControls.js +26 -0
  9. package/examples/jsm/controls/OrbitControls.js +62 -41
  10. package/examples/jsm/controls/TransformControls.js +27 -11
  11. package/examples/jsm/csm/CSMShader.js +53 -48
  12. package/examples/jsm/exporters/GLTFExporter.js +151 -3
  13. package/examples/jsm/exporters/USDZExporter.js +27 -19
  14. package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
  15. package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
  16. package/examples/jsm/helpers/TextureHelper.js +237 -0
  17. package/examples/jsm/interactive/HTMLMesh.js +9 -2
  18. package/examples/jsm/libs/lottie_canvas.module.js +6 -1
  19. package/examples/jsm/libs/opentype.module.js +13 -75
  20. package/examples/jsm/libs/surfaceNet.js +201 -0
  21. package/examples/jsm/lines/LineMaterial.js +16 -33
  22. package/examples/jsm/loaders/ColladaLoader.js +0 -6
  23. package/examples/jsm/loaders/DRACOLoader.js +4 -3
  24. package/examples/jsm/loaders/FBXLoader.js +294 -124
  25. package/examples/jsm/loaders/GLTFLoader.js +83 -6
  26. package/examples/jsm/loaders/LUTImageLoader.js +162 -0
  27. package/examples/jsm/loaders/MaterialXLoader.js +73 -54
  28. package/examples/jsm/loaders/NRRDLoader.js +0 -13
  29. package/examples/jsm/loaders/SVGLoader.js +4 -4
  30. package/examples/jsm/loaders/USDZLoader.js +3 -17
  31. package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
  32. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  33. package/examples/jsm/math/Capsule.js +0 -55
  34. package/examples/jsm/math/Octree.js +85 -7
  35. package/examples/jsm/misc/Timer.js +119 -0
  36. package/examples/jsm/misc/TubePainter.js +3 -6
  37. package/examples/jsm/modifiers/CurveModifier.js +20 -2
  38. package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
  39. package/examples/jsm/modifiers/TessellateModifier.js +3 -3
  40. package/examples/jsm/nodes/Nodes.js +16 -12
  41. package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
  42. package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
  43. package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
  44. package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
  45. package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
  46. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
  47. package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
  48. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
  49. package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
  50. package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
  51. package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
  52. package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
  53. package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
  54. package/examples/jsm/nodes/accessors/TextureNode.js +123 -37
  55. package/examples/jsm/nodes/code/CodeNode.js +3 -3
  56. package/examples/jsm/nodes/code/FunctionNode.js +1 -1
  57. package/examples/jsm/nodes/core/AssignNode.js +72 -0
  58. package/examples/jsm/nodes/core/AttributeNode.js +7 -1
  59. package/examples/jsm/nodes/core/CacheNode.js +4 -1
  60. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  61. package/examples/jsm/nodes/core/LightingModel.js +3 -1
  62. package/examples/jsm/nodes/core/Node.js +13 -15
  63. package/examples/jsm/nodes/core/NodeBuilder.js +209 -42
  64. package/examples/jsm/nodes/core/NodeFrame.js +10 -8
  65. package/examples/jsm/nodes/core/NodeUniform.js +12 -0
  66. package/examples/jsm/nodes/core/NodeUtils.js +7 -9
  67. package/examples/jsm/nodes/core/OutputStructNode.js +4 -4
  68. package/examples/jsm/nodes/core/ParameterNode.js +33 -0
  69. package/examples/jsm/nodes/core/PropertyNode.js +15 -6
  70. package/examples/jsm/nodes/core/StackNode.js +7 -17
  71. package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
  72. package/examples/jsm/nodes/core/TempNode.js +1 -1
  73. package/examples/jsm/nodes/core/UniformGroup.js +13 -0
  74. package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
  75. package/examples/jsm/nodes/core/UniformNode.js +17 -0
  76. package/examples/jsm/nodes/core/VarNode.js +7 -34
  77. package/examples/jsm/nodes/core/VaryingNode.js +3 -7
  78. package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
  79. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
  80. package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
  81. package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
  82. package/examples/jsm/nodes/display/PassNode.js +182 -0
  83. package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
  84. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
  85. package/examples/jsm/nodes/display/ViewportNode.js +17 -10
  86. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
  87. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
  88. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
  89. package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
  90. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
  91. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
  92. package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
  93. package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
  94. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +55 -6
  95. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
  96. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -18
  97. package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
  98. package/examples/jsm/nodes/lighting/LightsNode.js +80 -20
  99. package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
  100. package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
  101. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
  102. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +76 -77
  103. package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
  104. package/examples/jsm/nodes/materials/Materials.js +1 -0
  105. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
  106. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +3 -3
  107. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
  108. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -20
  109. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
  110. package/examples/jsm/nodes/materials/NodeMaterial.js +82 -60
  111. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
  112. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  113. package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
  114. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
  115. package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
  116. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
  117. package/examples/jsm/nodes/math/MathNode.js +2 -0
  118. package/examples/jsm/nodes/math/OperatorNode.js +24 -27
  119. package/examples/jsm/nodes/shadernode/ShaderNode.js +158 -10
  120. package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
  121. package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
  122. package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
  123. package/examples/jsm/nodes/utils/JoinNode.js +11 -1
  124. package/examples/jsm/nodes/utils/LoopNode.js +36 -24
  125. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  126. package/examples/jsm/nodes/utils/SplitNode.js +10 -2
  127. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
  128. package/examples/jsm/objects/InstancedPoints.js +21 -0
  129. package/examples/jsm/objects/Lensflare.js +20 -0
  130. package/examples/jsm/objects/QuadMesh.js +60 -0
  131. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
  132. package/examples/jsm/objects/Refractor.js +3 -0
  133. package/examples/jsm/objects/Sky.js +5 -3
  134. package/examples/jsm/objects/Water.js +5 -2
  135. package/examples/jsm/objects/Water2.js +3 -0
  136. package/examples/jsm/physics/AmmoPhysics.js +21 -0
  137. package/examples/jsm/physics/RapierPhysics.js +21 -0
  138. package/examples/jsm/postprocessing/BokehPass.js +3 -2
  139. package/examples/jsm/postprocessing/GTAOPass.js +572 -0
  140. package/examples/jsm/postprocessing/LUTPass.js +2 -1
  141. package/examples/jsm/postprocessing/OutputPass.js +3 -0
  142. package/examples/jsm/postprocessing/Pass.js +14 -3
  143. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  144. package/examples/jsm/postprocessing/SMAAPass.js +0 -2
  145. package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
  146. package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
  147. package/examples/jsm/renderers/SVGRenderer.js +9 -6
  148. package/examples/jsm/renderers/common/Animation.js +10 -21
  149. package/examples/jsm/renderers/common/Backend.js +19 -3
  150. package/examples/jsm/renderers/common/Background.js +20 -22
  151. package/examples/jsm/renderers/common/Bindings.js +31 -22
  152. package/examples/jsm/renderers/common/ChainMap.js +3 -3
  153. package/examples/jsm/renderers/common/Color4.js +37 -0
  154. package/examples/jsm/renderers/common/Geometries.js +4 -4
  155. package/examples/jsm/renderers/common/Info.js +12 -2
  156. package/examples/jsm/renderers/common/Pipelines.js +3 -51
  157. package/examples/jsm/renderers/common/PostProcessing.js +25 -0
  158. package/examples/jsm/renderers/common/RenderContext.js +1 -1
  159. package/examples/jsm/renderers/common/RenderContexts.js +1 -1
  160. package/examples/jsm/renderers/common/RenderObject.js +21 -2
  161. package/examples/jsm/renderers/common/RenderObjects.js +5 -3
  162. package/examples/jsm/renderers/common/Renderer.js +137 -37
  163. package/examples/jsm/renderers/common/StorageTexture.js +1 -0
  164. package/examples/jsm/renderers/common/Textures.js +8 -37
  165. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
  166. package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
  167. package/examples/jsm/renderers/common/nodes/Nodes.js +121 -19
  168. package/examples/jsm/renderers/webgl/WebGLBackend.js +366 -67
  169. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +183 -38
  170. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +92 -5
  171. package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
  172. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
  173. package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
  174. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
  175. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
  176. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  177. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
  178. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
  179. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +188 -137
  180. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
  181. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +241 -90
  182. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
  183. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
  184. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
  185. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
  186. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
  187. package/examples/jsm/shaders/AfterimageShader.js +2 -0
  188. package/examples/jsm/shaders/BasicShader.js +2 -0
  189. package/examples/jsm/shaders/BlendShader.js +2 -0
  190. package/examples/jsm/shaders/BokehShader.js +2 -0
  191. package/examples/jsm/shaders/BokehShader2.js +4 -0
  192. package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
  193. package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
  194. package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
  195. package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
  196. package/examples/jsm/shaders/FXAAShader.js +135 -133
  197. package/examples/jsm/shaders/FilmShader.js +1 -1
  198. package/examples/jsm/shaders/FocusShader.js +2 -0
  199. package/examples/jsm/shaders/FreiChenShader.js +2 -0
  200. package/examples/jsm/shaders/GTAOShader.js +424 -0
  201. package/examples/jsm/shaders/GodRaysShader.js +8 -0
  202. package/examples/jsm/shaders/HalftoneShader.js +2 -0
  203. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
  204. package/examples/jsm/shaders/HueSaturationShader.js +2 -0
  205. package/examples/jsm/shaders/KaleidoShader.js +2 -0
  206. package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
  207. package/examples/jsm/shaders/LuminosityShader.js +2 -0
  208. package/examples/jsm/shaders/MMDToonShader.js +2 -0
  209. package/examples/jsm/shaders/MirrorShader.js +2 -0
  210. package/examples/jsm/shaders/NormalMapShader.js +2 -0
  211. package/examples/jsm/shaders/OutputShader.js +8 -5
  212. package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
  213. package/examples/jsm/shaders/SAOShader.js +7 -3
  214. package/examples/jsm/shaders/SMAAShader.js +6 -0
  215. package/examples/jsm/shaders/SSAOShader.js +8 -3
  216. package/examples/jsm/shaders/SSRShader.js +6 -0
  217. package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
  218. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
  219. package/examples/jsm/shaders/TechnicolorShader.js +2 -0
  220. package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
  221. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
  222. package/examples/jsm/shaders/VelocityShader.js +2 -0
  223. package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
  224. package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
  225. package/examples/jsm/transpiler/AST.js +270 -0
  226. package/examples/jsm/transpiler/GLSLDecoder.js +941 -0
  227. package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
  228. package/examples/jsm/transpiler/TSLEncoder.js +715 -0
  229. package/examples/jsm/transpiler/Transpiler.js +18 -0
  230. package/examples/jsm/utils/SortUtils.js +158 -0
  231. package/examples/jsm/utils/TextureUtils.js +33 -21
  232. package/examples/jsm/webxr/ARButton.js +14 -0
  233. package/examples/jsm/webxr/VRButton.js +24 -9
  234. package/examples/jsm/webxr/XRButton.js +27 -11
  235. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  236. package/package.json +8 -6
  237. package/src/Three.js +1 -0
  238. package/src/constants.js +8 -1
  239. package/src/core/BufferAttribute.js +21 -2
  240. package/src/core/InterleavedBuffer.js +21 -1
  241. package/src/core/Object3D.js +60 -12
  242. package/src/core/UniformsGroup.js +7 -1
  243. package/src/extras/PMREMGenerator.js +7 -1
  244. package/src/extras/curves/LineCurve3.js +4 -0
  245. package/src/loaders/AudioLoader.js +1 -1
  246. package/src/loaders/BufferGeometryLoader.js +0 -7
  247. package/src/loaders/ImageBitmapLoader.js +25 -1
  248. package/src/loaders/MaterialLoader.js +10 -2
  249. package/src/loaders/ObjectLoader.js +49 -0
  250. package/src/materials/Material.js +27 -13
  251. package/src/materials/ShaderMaterial.js +2 -1
  252. package/src/math/Box3.js +35 -18
  253. package/src/math/ColorManagement.js +0 -16
  254. package/src/math/Quaternion.js +5 -4
  255. package/src/math/Sphere.js +2 -0
  256. package/src/math/Triangle.js +17 -5
  257. package/src/math/Vector3.js +11 -12
  258. package/src/objects/BatchedMesh.js +1020 -0
  259. package/src/objects/Skeleton.js +1 -3
  260. package/src/objects/SkinnedMesh.js +6 -7
  261. package/src/renderers/WebGL3DRenderTarget.js +2 -2
  262. package/src/renderers/WebGLArrayRenderTarget.js +2 -2
  263. package/src/renderers/WebGLRenderer.js +165 -43
  264. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
  265. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
  266. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
  267. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
  268. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
  269. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
  270. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
  271. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
  272. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
  273. package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
  274. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
  275. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
  276. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
  277. package/src/renderers/shaders/ShaderChunk.js +4 -0
  278. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  279. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  280. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
  281. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
  282. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
  283. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
  284. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
  285. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -2
  286. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
  287. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
  288. package/src/renderers/webgl/WebGLAttributes.js +39 -5
  289. package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
  290. package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
  291. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  292. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
  293. package/src/renderers/webgl/WebGLLights.js +11 -2
  294. package/src/renderers/webgl/WebGLProgram.js +100 -51
  295. package/src/renderers/webgl/WebGLPrograms.js +8 -0
  296. package/src/renderers/webgl/WebGLShadowMap.js +35 -0
  297. package/src/renderers/webgl/WebGLState.js +25 -4
  298. package/src/renderers/webgl/WebGLTextures.js +7 -11
  299. package/src/renderers/webgl/WebGLUniforms.js +11 -1
  300. package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
  301. package/src/renderers/webxr/WebXRManager.js +16 -0
  302. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
  303. package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
@@ -5,27 +5,19 @@ export default /* glsl */`
5
5
  uniform mat4 bindMatrixInverse;
6
6
 
7
7
  uniform highp sampler2D boneTexture;
8
- uniform int boneTextureSize;
9
8
 
10
9
  mat4 getBoneMatrix( const in float i ) {
11
10
 
12
- float j = i * 4.0;
13
- float x = mod( j, float( boneTextureSize ) );
14
- float y = floor( j / float( boneTextureSize ) );
11
+ int size = textureSize( boneTexture, 0 ).x;
12
+ int j = int( i ) * 4;
13
+ int x = j % size;
14
+ int y = j / size;
15
+ vec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );
16
+ vec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );
17
+ vec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );
18
+ vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );
15
19
 
16
- float dx = 1.0 / float( boneTextureSize );
17
- float dy = 1.0 / float( boneTextureSize );
18
-
19
- y = dy * ( y + 0.5 );
20
-
21
- vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );
22
- vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );
23
- vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );
24
- vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );
25
-
26
- mat4 bone = mat4( v1, v2, v3, v4 );
27
-
28
- return bone;
20
+ return mat4( v1, v2, v3, v4 );
29
21
 
30
22
  }
31
23
 
@@ -73,5 +73,89 @@ vec3 ACESFilmicToneMapping( vec3 color ) {
73
73
 
74
74
  }
75
75
 
76
+ // Matrices for rec 2020 <> rec 709 color space conversion
77
+ // matrix provided in row-major order so it has been transposed
78
+ // https://www.itu.int/pub/R-REP-BT.2407-2017
79
+ const mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(
80
+ vec3( 1.6605, - 0.1246, - 0.0182 ),
81
+ vec3( - 0.5876, 1.1329, - 0.1006 ),
82
+ vec3( - 0.0728, - 0.0083, 1.1187 )
83
+ );
84
+
85
+ const mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(
86
+ vec3( 0.6274, 0.0691, 0.0164 ),
87
+ vec3( 0.3293, 0.9195, 0.0880 ),
88
+ vec3( 0.0433, 0.0113, 0.8956 )
89
+ );
90
+
91
+ // https://iolite-engine.com/blog_posts/minimal_agx_implementation
92
+ // Mean error^2: 3.6705141e-06
93
+ vec3 agxDefaultContrastApprox( vec3 x ) {
94
+
95
+ vec3 x2 = x * x;
96
+ vec3 x4 = x2 * x2;
97
+
98
+ return + 15.5 * x4 * x2
99
+ - 40.14 * x4 * x
100
+ + 31.96 * x4
101
+ - 6.868 * x2 * x
102
+ + 0.4298 * x2
103
+ + 0.1191 * x
104
+ - 0.00232;
105
+
106
+ }
107
+
108
+ // Input and output encoded as Linear-sRGB.
109
+ vec3 AgXToneMapping( vec3 color ) {
110
+
111
+ // AgX constants
112
+ const mat3 AgXInsetMatrix = mat3(
113
+ vec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),
114
+ vec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),
115
+ vec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )
116
+ );
117
+
118
+ // explicit AgXOutsetMatrix generated from Filaments AgXOutsetMatrixInv
119
+ const mat3 AgXOutsetMatrix = mat3(
120
+ vec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),
121
+ vec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),
122
+ vec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )
123
+ );
124
+
125
+ const float AgxMinEv = - 12.47393; // log2(pow(2, LOG2_MIN) * MIDDLE_GRAY)
126
+ const float AgxMaxEv = 4.026069; // log2(pow(2, LOG2_MAX) * MIDDLE_GRAY)
127
+
128
+ // AGX Tone Mapping implementation based on Filament, which is in turn based
129
+ // on Blender's implementation for rec 2020 colors:
130
+ // https://github.com/google/filament/pull/7236
131
+ color = LINEAR_SRGB_TO_LINEAR_REC2020 * color;
132
+ color *= toneMappingExposure;
133
+
134
+ color = AgXInsetMatrix * color;
135
+
136
+ // Log2 encoding
137
+ color = max( color, 1e-10 ); // avoid 0 or negative numbers for log2
138
+ color = log2( color );
139
+ color = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );
140
+
141
+ color = clamp( color, 0.0, 1.0 );
142
+
143
+ // Apply sigmoid
144
+ color = agxDefaultContrastApprox( color );
145
+
146
+ // Apply AgX look
147
+ // v = agxLook(v, look);
148
+
149
+ color = AgXOutsetMatrix * color;
150
+
151
+ // Linearize
152
+ color = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );
153
+
154
+ color = LINEAR_REC2020_TO_LINEAR_SRGB * color;
155
+
156
+ return color;
157
+
158
+ }
159
+
76
160
  vec3 CustomToneMapping( vec3 color ) { return color; }
77
161
  `;
@@ -3,6 +3,12 @@ export default /* glsl */`
3
3
 
4
4
  vec4 worldPosition = vec4( transformed, 1.0 );
5
5
 
6
+ #ifdef USE_BATCHING
7
+
8
+ worldPosition = batchingMatrix * worldPosition;
9
+
10
+ #endif
11
+
6
12
  #ifdef USE_INSTANCING
7
13
 
8
14
  worldPosition = instanceMatrix * worldPosition;
@@ -6,6 +6,8 @@ import alphatest_fragment from './ShaderChunk/alphatest_fragment.glsl.js';
6
6
  import alphatest_pars_fragment from './ShaderChunk/alphatest_pars_fragment.glsl.js';
7
7
  import aomap_fragment from './ShaderChunk/aomap_fragment.glsl.js';
8
8
  import aomap_pars_fragment from './ShaderChunk/aomap_pars_fragment.glsl.js';
9
+ import batching_pars_vertex from './ShaderChunk/batching_pars_vertex.glsl.js';
10
+ import batching_vertex from './ShaderChunk/batching_vertex.glsl.js';
9
11
  import begin_vertex from './ShaderChunk/begin_vertex.glsl.js';
10
12
  import beginnormal_vertex from './ShaderChunk/beginnormal_vertex.glsl.js';
11
13
  import bsdfs from './ShaderChunk/bsdfs.glsl.js';
@@ -131,6 +133,8 @@ export const ShaderChunk = {
131
133
  alphatest_pars_fragment: alphatest_pars_fragment,
132
134
  aomap_fragment: aomap_fragment,
133
135
  aomap_pars_fragment: aomap_pars_fragment,
136
+ batching_pars_vertex: batching_pars_vertex,
137
+ batching_vertex: batching_vertex,
134
138
  begin_vertex: begin_vertex,
135
139
  beginnormal_vertex: beginnormal_vertex,
136
140
  bsdfs: bsdfs,
@@ -1,5 +1,6 @@
1
1
  export const vertex = /* glsl */`
2
2
  #include <common>
3
+ #include <batching_pars_vertex>
3
4
  #include <uv_pars_vertex>
4
5
  #include <displacementmap_pars_vertex>
5
6
  #include <morphtarget_pars_vertex>
@@ -16,6 +17,7 @@ void main() {
16
17
 
17
18
  #include <uv_vertex>
18
19
 
20
+ #include <batching_vertex>
19
21
  #include <skinbase_vertex>
20
22
 
21
23
  #ifdef USE_DISPLACEMENTMAP
@@ -4,6 +4,7 @@ export const vertex = /* glsl */`
4
4
  varying vec3 vWorldPosition;
5
5
 
6
6
  #include <common>
7
+ #include <batching_pars_vertex>
7
8
  #include <uv_pars_vertex>
8
9
  #include <displacementmap_pars_vertex>
9
10
  #include <morphtarget_pars_vertex>
@@ -14,6 +15,7 @@ void main() {
14
15
 
15
16
  #include <uv_vertex>
16
17
 
18
+ #include <batching_vertex>
17
19
  #include <skinbase_vertex>
18
20
 
19
21
  #ifdef USE_DISPLACEMENTMAP
@@ -1,5 +1,6 @@
1
1
  export const vertex = /* glsl */`
2
2
  #include <common>
3
+ #include <batching_pars_vertex>
3
4
  #include <uv_pars_vertex>
4
5
  #include <envmap_pars_vertex>
5
6
  #include <color_pars_vertex>
@@ -14,6 +15,7 @@ void main() {
14
15
  #include <uv_vertex>
15
16
  #include <color_vertex>
16
17
  #include <morphcolor_vertex>
18
+ #include <batching_vertex>
17
19
 
18
20
  #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )
19
21
 
@@ -4,6 +4,7 @@ export const vertex = /* glsl */`
4
4
  varying vec3 vViewPosition;
5
5
 
6
6
  #include <common>
7
+ #include <batching_pars_vertex>
7
8
  #include <uv_pars_vertex>
8
9
  #include <displacementmap_pars_vertex>
9
10
  #include <envmap_pars_vertex>
@@ -21,6 +22,7 @@ void main() {
21
22
  #include <uv_vertex>
22
23
  #include <color_vertex>
23
24
  #include <morphcolor_vertex>
25
+ #include <batching_vertex>
24
26
 
25
27
  #include <beginnormal_vertex>
26
28
  #include <morphnormal_vertex>
@@ -4,6 +4,7 @@ export const vertex = /* glsl */`
4
4
  varying vec3 vViewPosition;
5
5
 
6
6
  #include <common>
7
+ #include <batching_pars_vertex>
7
8
  #include <uv_pars_vertex>
8
9
  #include <color_pars_vertex>
9
10
  #include <displacementmap_pars_vertex>
@@ -20,6 +21,8 @@ void main() {
20
21
  #include <uv_vertex>
21
22
  #include <color_vertex>
22
23
  #include <morphcolor_vertex>
24
+ #include <batching_vertex>
25
+
23
26
  #include <beginnormal_vertex>
24
27
  #include <morphnormal_vertex>
25
28
  #include <skinbase_vertex>
@@ -8,6 +8,7 @@ export const vertex = /* glsl */`
8
8
  #endif
9
9
 
10
10
  #include <common>
11
+ #include <batching_pars_vertex>
11
12
  #include <uv_pars_vertex>
12
13
  #include <displacementmap_pars_vertex>
13
14
  #include <normal_pars_vertex>
@@ -19,6 +20,7 @@ export const vertex = /* glsl */`
19
20
  void main() {
20
21
 
21
22
  #include <uv_vertex>
23
+ #include <batching_vertex>
22
24
 
23
25
  #include <beginnormal_vertex>
24
26
  #include <morphnormal_vertex>
@@ -4,6 +4,7 @@ export const vertex = /* glsl */`
4
4
  varying vec3 vViewPosition;
5
5
 
6
6
  #include <common>
7
+ #include <batching_pars_vertex>
7
8
  #include <uv_pars_vertex>
8
9
  #include <displacementmap_pars_vertex>
9
10
  #include <envmap_pars_vertex>
@@ -21,6 +22,7 @@ void main() {
21
22
  #include <uv_vertex>
22
23
  #include <color_vertex>
23
24
  #include <morphcolor_vertex>
25
+ #include <batching_vertex>
24
26
 
25
27
  #include <beginnormal_vertex>
26
28
  #include <morphnormal_vertex>
@@ -10,6 +10,7 @@ varying vec3 vViewPosition;
10
10
  #endif
11
11
 
12
12
  #include <common>
13
+ #include <batching_pars_vertex>
13
14
  #include <uv_pars_vertex>
14
15
  #include <displacementmap_pars_vertex>
15
16
  #include <color_pars_vertex>
@@ -26,6 +27,7 @@ void main() {
26
27
  #include <uv_vertex>
27
28
  #include <color_vertex>
28
29
  #include <morphcolor_vertex>
30
+ #include <batching_vertex>
29
31
 
30
32
  #include <beginnormal_vertex>
31
33
  #include <morphnormal_vertex>
@@ -197,7 +199,7 @@ void main() {
197
199
  // https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
198
200
  float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );
199
201
 
200
- outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;
202
+ outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;
201
203
 
202
204
  #endif
203
205
 
@@ -207,7 +209,7 @@ void main() {
207
209
 
208
210
  vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );
209
211
 
210
- outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;
212
+ outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;
211
213
 
212
214
  #endif
213
215
 
@@ -4,6 +4,7 @@ export const vertex = /* glsl */`
4
4
  varying vec3 vViewPosition;
5
5
 
6
6
  #include <common>
7
+ #include <batching_pars_vertex>
7
8
  #include <uv_pars_vertex>
8
9
  #include <displacementmap_pars_vertex>
9
10
  #include <color_pars_vertex>
@@ -20,6 +21,7 @@ void main() {
20
21
  #include <uv_vertex>
21
22
  #include <color_vertex>
22
23
  #include <morphcolor_vertex>
24
+ #include <batching_vertex>
23
25
 
24
26
  #include <beginnormal_vertex>
25
27
  #include <morphnormal_vertex>
@@ -1,5 +1,6 @@
1
1
  export const vertex = /* glsl */`
2
2
  #include <common>
3
+ #include <batching_pars_vertex>
3
4
  #include <fog_pars_vertex>
4
5
  #include <morphtarget_pars_vertex>
5
6
  #include <skinning_pars_vertex>
@@ -8,6 +9,8 @@ export const vertex = /* glsl */`
8
9
 
9
10
  void main() {
10
11
 
12
+ #include <batching_vertex>
13
+
11
14
  #include <beginnormal_vertex>
12
15
  #include <morphnormal_vertex>
13
16
  #include <skinbase_vertex>
@@ -8,6 +8,7 @@ function WebGLAttributes( gl, capabilities ) {
8
8
 
9
9
  const array = attribute.array;
10
10
  const usage = attribute.usage;
11
+ const size = array.byteLength;
11
12
 
12
13
  const buffer = gl.createBuffer();
13
14
 
@@ -76,7 +77,8 @@ function WebGLAttributes( gl, capabilities ) {
76
77
  buffer: buffer,
77
78
  type: type,
78
79
  bytesPerElement: array.BYTES_PER_ELEMENT,
79
- version: attribute.version
80
+ version: attribute.version,
81
+ size: size
80
82
  };
81
83
 
82
84
  }
@@ -84,17 +86,43 @@ function WebGLAttributes( gl, capabilities ) {
84
86
  function updateBuffer( buffer, attribute, bufferType ) {
85
87
 
86
88
  const array = attribute.array;
87
- const updateRange = attribute.updateRange;
89
+ const updateRange = attribute._updateRange; // deprecated
90
+ const updateRanges = attribute.updateRanges;
88
91
 
89
92
  gl.bindBuffer( bufferType, buffer );
90
93
 
91
- if ( updateRange.count === - 1 ) {
94
+ if ( updateRange.count === - 1 && updateRanges.length === 0 ) {
92
95
 
93
96
  // Not using update ranges
94
-
95
97
  gl.bufferSubData( bufferType, 0, array );
96
98
 
97
- } else {
99
+ }
100
+
101
+ if ( updateRanges.length !== 0 ) {
102
+
103
+ for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
104
+
105
+ const range = updateRanges[ i ];
106
+ if ( isWebGL2 ) {
107
+
108
+ gl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,
109
+ array, range.start, range.count );
110
+
111
+ } else {
112
+
113
+ gl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,
114
+ array.subarray( range.start, range.start + range.count ) );
115
+
116
+ }
117
+
118
+ }
119
+
120
+ attribute.clearUpdateRanges();
121
+
122
+ }
123
+
124
+ // deprecated
125
+ if ( updateRange.count !== - 1 ) {
98
126
 
99
127
  if ( isWebGL2 ) {
100
128
 
@@ -173,6 +201,12 @@ function WebGLAttributes( gl, capabilities ) {
173
201
 
174
202
  } else if ( data.version < attribute.version ) {
175
203
 
204
+ if ( data.size !== attribute.array.byteLength ) {
205
+
206
+ throw new Error( 'THREE.WebGLAttributes: The size of the buffer attribute\'s array buffer does not match the original size. Resizing buffer attributes is not supported.' );
207
+
208
+ }
209
+
176
210
  updateBuffer( data.buffer, attribute, bufferType );
177
211
 
178
212
  data.version = attribute.version;
@@ -49,11 +49,42 @@ function WebGLBufferRenderer( gl, extensions, info, capabilities ) {
49
49
 
50
50
  }
51
51
 
52
+ function renderMultiDraw( starts, counts, drawCount ) {
53
+
54
+ if ( drawCount === 0 ) return;
55
+
56
+ const extension = extensions.get( 'WEBGL_multi_draw' );
57
+ if ( extension === null ) {
58
+
59
+ for ( let i = 0; i < drawCount; i ++ ) {
60
+
61
+ this.render( starts[ i ], counts[ i ] );
62
+
63
+ }
64
+
65
+ } else {
66
+
67
+ extension.multiDrawArraysWEBGL( mode, starts, 0, counts, 0, drawCount );
68
+
69
+ let elementCount = 0;
70
+ for ( let i = 0; i < drawCount; i ++ ) {
71
+
72
+ elementCount += counts[ i ];
73
+
74
+ }
75
+
76
+ info.update( elementCount, mode, 1 );
77
+
78
+ }
79
+
80
+ }
81
+
52
82
  //
53
83
 
54
84
  this.setMode = setMode;
55
85
  this.render = render;
56
86
  this.renderInstances = renderInstances;
87
+ this.renderMultiDraw = renderMultiDraw;
57
88
 
58
89
  }
59
90
 
@@ -23,7 +23,7 @@ function WebGLCubeMaps( renderer ) {
23
23
 
24
24
  function get( texture ) {
25
25
 
26
- if ( texture && texture.isTexture && texture.isRenderTargetTexture === false ) {
26
+ if ( texture && texture.isTexture ) {
27
27
 
28
28
  const mapping = texture.mapping;
29
29
 
@@ -54,6 +54,7 @@ function WebGLExtensions( gl ) {
54
54
  if ( capabilities.isWebGL2 ) {
55
55
 
56
56
  getExtension( 'EXT_color_buffer_float' );
57
+ getExtension( 'WEBGL_clip_cull_distance' );
57
58
 
58
59
  } else {
59
60
 
@@ -58,12 +58,43 @@ function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
58
58
 
59
59
  }
60
60
 
61
+ function renderMultiDraw( starts, counts, drawCount ) {
62
+
63
+ if ( drawCount === 0 ) return;
64
+
65
+ const extension = extensions.get( 'WEBGL_multi_draw' );
66
+ if ( extension === null ) {
67
+
68
+ for ( let i = 0; i < drawCount; i ++ ) {
69
+
70
+ this.render( starts[ i ] / bytesPerElement, counts[ i ] );
71
+
72
+ }
73
+
74
+ } else {
75
+
76
+ extension.multiDrawElementsWEBGL( mode, counts, 0, type, starts, 0, drawCount );
77
+
78
+ let elementCount = 0;
79
+ for ( let i = 0; i < drawCount; i ++ ) {
80
+
81
+ elementCount += counts[ i ];
82
+
83
+ }
84
+
85
+ info.update( elementCount, mode, 1 );
86
+
87
+ }
88
+
89
+ }
90
+
61
91
  //
62
92
 
63
93
  this.setMode = setMode;
64
94
  this.setIndex = setIndex;
65
95
  this.render = render;
66
96
  this.renderInstances = renderInstances;
97
+ this.renderMultiDraw = renderMultiDraw;
67
98
 
68
99
  }
69
100
 
@@ -403,8 +403,17 @@ function WebGLLights( extensions, capabilities ) {
403
403
 
404
404
  // WebGL 2
405
405
 
406
- state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;
407
- state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;
406
+ if ( extensions.has( 'OES_texture_float_linear' ) === true ) {
407
+
408
+ state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;
409
+ state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;
410
+
411
+ } else {
412
+
413
+ state.rectAreaLTC1 = UniformsLib.LTC_HALF_1;
414
+ state.rectAreaLTC2 = UniformsLib.LTC_HALF_2;
415
+
416
+ }
408
417
 
409
418
  } else {
410
419