super-three 0.164.0 → 0.167.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 (416) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +1273 -503
  3. package/build/three.module.js +1269 -504
  4. package/build/three.module.min.js +1 -1
  5. package/build/three.webgpu.js +76086 -0
  6. package/build/three.webgpu.min.js +6 -0
  7. package/examples/jsm/Addons.js +2 -1
  8. package/examples/jsm/controls/TransformControls.js +1 -1
  9. package/examples/jsm/csm/CSMShader.js +4 -4
  10. package/examples/jsm/environments/RoomEnvironment.js +1 -5
  11. package/examples/jsm/exporters/GLTFExporter.js +8 -4
  12. package/examples/jsm/exporters/USDZExporter.js +6 -4
  13. package/examples/jsm/geometries/TeapotGeometry.js +1 -1
  14. package/examples/jsm/helpers/ViewHelper.js +75 -61
  15. package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
  16. package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
  17. package/examples/jsm/lines/LineMaterial.js +1 -15
  18. package/examples/jsm/lines/LineSegments2.js +15 -0
  19. package/examples/jsm/lines/Wireframe.js +16 -1
  20. package/examples/jsm/lines/webgpu/Line2.js +20 -0
  21. package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
  22. package/examples/jsm/loaders/DRACOLoader.js +1 -1
  23. package/examples/jsm/loaders/FBXLoader.js +47 -58
  24. package/examples/jsm/loaders/GLTFLoader.js +12 -4
  25. package/examples/jsm/loaders/LDrawLoader.js +3 -2
  26. package/examples/jsm/loaders/MMDLoader.js +31 -12
  27. package/examples/jsm/loaders/MaterialXLoader.js +2 -9
  28. package/examples/jsm/loaders/USDZLoader.js +124 -76
  29. package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
  30. package/examples/jsm/loaders/VTKLoader.js +76 -3
  31. package/examples/jsm/misc/GPUComputationRenderer.js +9 -19
  32. package/examples/jsm/modifiers/CurveModifier.js +11 -9
  33. package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
  34. package/examples/jsm/objects/InstancedPoints.js +2 -2
  35. package/examples/jsm/objects/Lensflare.js +2 -2
  36. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  37. package/examples/jsm/postprocessing/RenderTransitionPass.js +13 -38
  38. package/examples/jsm/postprocessing/SSAOPass.js +6 -9
  39. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
  40. package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
  41. package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
  42. package/examples/jsm/shaders/ColorifyShader.js +1 -2
  43. package/examples/jsm/shaders/FXAAShader.js +0 -2
  44. package/examples/jsm/shaders/GTAOShader.js +1 -1
  45. package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
  46. package/examples/jsm/transpiler/GLSLDecoder.js +46 -4
  47. package/examples/jsm/transpiler/TSLEncoder.js +17 -15
  48. package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
  49. package/examples/jsm/utils/GPUStatsPanel.js +2 -0
  50. package/examples/jsm/utils/SortUtils.js +8 -5
  51. package/package.json +9 -7
  52. package/src/Three.WebGPU.js +194 -0
  53. package/src/Three.js +2 -0
  54. package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
  55. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
  56. package/src/animation/tracks/StringKeyframeTrack.js +10 -1
  57. package/src/constants.js +4 -1
  58. package/src/core/Object3D.js +24 -22
  59. package/src/core/Raycaster.js +6 -2
  60. package/src/extras/TextureUtils.js +210 -0
  61. package/src/lights/Light.js +1 -0
  62. package/src/lights/LightShadow.js +5 -0
  63. package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
  64. package/src/loaders/FileLoader.js +4 -0
  65. package/src/loaders/LoaderUtils.js +3 -1
  66. package/src/loaders/ObjectLoader.js +34 -2
  67. package/src/materials/Material.js +13 -4
  68. package/src/math/Box2.js +4 -4
  69. package/src/math/Box3.js +6 -6
  70. package/src/math/ColorManagement.js +10 -0
  71. package/src/math/Matrix2.js +54 -0
  72. package/src/math/Vector4.js +13 -0
  73. package/{examples/jsm → src}/nodes/Nodes.js +39 -20
  74. package/{examples/jsm → src}/nodes/accessors/BatchNode.js +28 -10
  75. package/src/nodes/accessors/BitangentNode.js +13 -0
  76. package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +36 -1
  77. package/{examples/jsm → src}/nodes/accessors/BufferNode.js +6 -0
  78. package/src/nodes/accessors/CameraNode.js +19 -0
  79. package/{examples/jsm → src}/nodes/accessors/CubeTextureNode.js +22 -5
  80. package/src/nodes/accessors/InstanceNode.js +140 -0
  81. package/{examples/jsm → src}/nodes/accessors/MaterialNode.js +24 -2
  82. package/{examples/jsm → src}/nodes/accessors/ModelNode.js +4 -0
  83. package/{examples/jsm → src}/nodes/accessors/MorphNode.js +24 -20
  84. package/src/nodes/accessors/NormalNode.js +14 -0
  85. package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +1 -1
  86. package/src/nodes/accessors/PositionNode.js +10 -0
  87. package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +7 -1
  88. package/src/nodes/accessors/ReflectVectorNode.js +10 -0
  89. package/{examples/jsm → src}/nodes/accessors/StorageBufferNode.js +50 -1
  90. package/{examples/jsm/nodes/accessors/TextureStoreNode.js → src/nodes/accessors/StorageTextureNode.js} +28 -6
  91. package/src/nodes/accessors/TangentNode.js +23 -0
  92. package/src/nodes/accessors/Texture3DNode.js +100 -0
  93. package/{examples/jsm → src}/nodes/accessors/TextureNode.js +55 -18
  94. package/src/nodes/accessors/UVNode.js +3 -0
  95. package/{examples/jsm → src}/nodes/accessors/UniformsNode.js +7 -1
  96. package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +2 -1
  97. package/{examples/jsm → src}/nodes/code/ScriptableNode.js +14 -0
  98. package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +2 -1
  99. package/{examples/jsm → src}/nodes/core/AttributeNode.js +34 -8
  100. package/{examples/jsm → src}/nodes/core/CacheNode.js +7 -10
  101. package/{examples/jsm → src}/nodes/core/ContextNode.js +6 -0
  102. package/{examples/jsm → src}/nodes/core/IndexNode.js +6 -0
  103. package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
  104. package/src/nodes/core/MRTNode.js +76 -0
  105. package/{examples/jsm → src}/nodes/core/Node.js +33 -14
  106. package/{examples/jsm → src}/nodes/core/NodeBuilder.js +194 -45
  107. package/src/nodes/core/NodeCache.js +36 -0
  108. package/{examples/jsm → src}/nodes/core/NodeFrame.js +42 -0
  109. package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
  110. package/{examples/jsm → src}/nodes/core/NodeKeywords.js +1 -1
  111. package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
  112. package/{examples/jsm → src}/nodes/core/NodeUtils.js +6 -1
  113. package/{examples/jsm → src}/nodes/core/OutputStructNode.js +1 -5
  114. package/{examples/jsm → src}/nodes/core/PropertyNode.js +2 -0
  115. package/{examples/jsm → src}/nodes/core/TempNode.js +2 -2
  116. package/{examples/jsm → src}/nodes/core/UniformGroupNode.js +20 -0
  117. package/{examples/jsm → src}/nodes/core/UniformNode.js +10 -1
  118. package/{examples/jsm → src}/nodes/core/VarNode.js +2 -6
  119. package/src/nodes/core/VaryingNode.js +104 -0
  120. package/{examples/jsm → src}/nodes/display/AfterImageNode.js +24 -20
  121. package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +18 -21
  122. package/src/nodes/display/BloomNode.js +333 -0
  123. package/{examples/jsm → src}/nodes/display/ColorAdjustmentNode.js +7 -2
  124. package/{examples/jsm → src}/nodes/display/ColorSpaceNode.js +1 -1
  125. package/src/nodes/display/DenoiseNode.js +198 -0
  126. package/src/nodes/display/DepthOfFieldNode.js +119 -0
  127. package/src/nodes/display/DotScreenNode.js +75 -0
  128. package/src/nodes/display/FXAANode.js +327 -0
  129. package/src/nodes/display/FilmNode.js +52 -0
  130. package/{examples/jsm → src}/nodes/display/FrontFacingNode.js +2 -1
  131. package/src/nodes/display/GTAONode.js +324 -0
  132. package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +34 -17
  133. package/src/nodes/display/Lut3DNode.js +53 -0
  134. package/{examples/jsm → src}/nodes/display/NormalMapNode.js +1 -1
  135. package/src/nodes/display/PassNode.js +291 -0
  136. package/src/nodes/display/PixelationPassNode.js +201 -0
  137. package/src/nodes/display/RGBShiftNode.js +49 -0
  138. package/src/nodes/display/RenderOutputNode.js +56 -0
  139. package/src/nodes/display/SobelOperatorNode.js +121 -0
  140. package/{examples/jsm → src}/nodes/display/ToneMappingNode.js +44 -5
  141. package/src/nodes/display/TransitionNode.js +76 -0
  142. package/{examples/jsm → src}/nodes/display/ViewportDepthNode.js +39 -16
  143. package/{examples/jsm → src}/nodes/display/ViewportDepthTextureNode.js +2 -1
  144. package/{examples/jsm → src}/nodes/display/ViewportNode.js +3 -2
  145. package/{examples/jsm → src}/nodes/display/ViewportSharedTextureNode.js +2 -1
  146. package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +5 -2
  147. package/src/nodes/functions/BSDF/LTC.js +131 -0
  148. package/src/nodes/functions/BasicLightingModel.js +78 -0
  149. package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +5 -3
  150. package/{examples/jsm → src}/nodes/functions/PhysicalLightingModel.js +103 -18
  151. package/src/nodes/functions/ToonLightingModel.js +51 -0
  152. package/{examples/jsm → src}/nodes/geometry/RangeNode.js +19 -6
  153. package/{examples/jsm → src}/nodes/lighting/AONode.js +1 -4
  154. package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +1 -1
  155. package/src/nodes/lighting/AnalyticLightNode.js +333 -0
  156. package/src/nodes/lighting/BasicEnvironmentNode.js +26 -0
  157. package/src/nodes/lighting/BasicLightMapNode.js +29 -0
  158. package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +2 -3
  159. package/{examples/jsm → src}/nodes/lighting/EnvironmentNode.js +5 -4
  160. package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +2 -1
  161. package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +1 -1
  162. package/{examples/jsm → src}/nodes/lighting/LightingNode.js +2 -0
  163. package/{examples/jsm → src}/nodes/lighting/LightsNode.js +18 -3
  164. package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +2 -3
  165. package/src/nodes/lighting/RectAreaLightNode.js +97 -0
  166. package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +2 -3
  167. package/{examples/jsm → src}/nodes/loaders/NodeLoader.js +3 -1
  168. package/{examples/jsm → src}/nodes/loaders/NodeMaterialLoader.js +2 -1
  169. package/{examples/jsm → src}/nodes/loaders/NodeObjectLoader.js +2 -1
  170. package/{examples/jsm → src}/nodes/materials/InstancedPointsNodeMaterial.js +3 -3
  171. package/{examples/jsm → src}/nodes/materials/Line2NodeMaterial.js +4 -4
  172. package/{examples/jsm → src}/nodes/materials/LineBasicNodeMaterial.js +3 -3
  173. package/{examples/jsm → src}/nodes/materials/LineDashedNodeMaterial.js +4 -3
  174. package/{examples/jsm → src}/nodes/materials/Materials.js +3 -0
  175. package/src/nodes/materials/MeshBasicNodeMaterial.js +73 -0
  176. package/{examples/jsm → src}/nodes/materials/MeshLambertNodeMaterial.js +12 -3
  177. package/src/nodes/materials/MeshMatcapNodeMaterial.js +53 -0
  178. package/{examples/jsm → src}/nodes/materials/MeshNormalNodeMaterial.js +5 -3
  179. package/{examples/jsm → src}/nodes/materials/MeshPhongNodeMaterial.js +11 -3
  180. package/{examples/jsm → src}/nodes/materials/MeshPhysicalNodeMaterial.js +26 -8
  181. package/{examples/jsm → src}/nodes/materials/MeshStandardNodeMaterial.js +14 -3
  182. package/src/nodes/materials/MeshToonNodeMaterial.js +34 -0
  183. package/{examples/jsm → src}/nodes/materials/NodeMaterial.js +97 -24
  184. package/{examples/jsm → src}/nodes/materials/PointsNodeMaterial.js +3 -3
  185. package/{examples/jsm → src}/nodes/materials/ShadowNodeMaterial.js +3 -3
  186. package/{examples/jsm → src}/nodes/materials/SpriteNodeMaterial.js +3 -3
  187. package/src/nodes/materials/VolumeNodeMaterial.js +106 -0
  188. package/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +9 -17
  189. package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +474 -577
  190. package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +2 -8
  191. package/{examples/jsm → src}/nodes/math/CondNode.js +13 -6
  192. package/{examples/jsm → src}/nodes/math/HashNode.js +2 -2
  193. package/{examples/jsm → src}/nodes/math/MathNode.js +14 -1
  194. package/{examples/jsm → src}/nodes/math/OperatorNode.js +6 -6
  195. package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
  196. package/{examples/jsm → src}/nodes/pmrem/PMREMNode.js +2 -1
  197. package/{examples/jsm → src}/nodes/shadernode/ShaderNode.js +57 -33
  198. package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +1 -1
  199. package/{examples/jsm → src}/nodes/utils/DiscardNode.js +1 -0
  200. package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +2 -0
  201. package/{examples/jsm → src}/nodes/utils/LoopNode.js +7 -6
  202. package/{examples/jsm → src}/nodes/utils/MatcapUVNode.js +1 -1
  203. package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +8 -2
  204. package/src/nodes/utils/RTTNode.js +130 -0
  205. package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +9 -1
  206. package/{examples/jsm → src}/nodes/utils/TimerNode.js +1 -1
  207. package/src/objects/BatchedMesh.js +232 -162
  208. package/src/objects/InstancedMesh.js +1 -1
  209. package/src/renderers/WebGLRenderer.js +312 -68
  210. package/{examples/jsm → src}/renderers/common/Attributes.js +4 -1
  211. package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
  212. package/{examples/jsm → src}/renderers/common/Background.js +9 -3
  213. package/src/renderers/common/BindGroup.js +16 -0
  214. package/{examples/jsm → src}/renderers/common/Bindings.js +54 -22
  215. package/src/renderers/common/ChainMap.js +59 -0
  216. package/{examples/jsm → src}/renderers/common/ClippingContext.js +8 -6
  217. package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
  218. package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +7 -1
  219. package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
  220. package/{examples/jsm → src}/renderers/common/Info.js +34 -6
  221. package/{examples/jsm → src}/renderers/common/Pipelines.js +2 -2
  222. package/src/renderers/common/PostProcessing.js +87 -0
  223. package/{examples/jsm/objects → src/renderers/common}/QuadMesh.js +6 -3
  224. package/src/renderers/common/RenderBundle.js +18 -0
  225. package/src/renderers/common/RenderBundles.js +38 -0
  226. package/{examples/jsm → src}/renderers/common/RenderContext.js +1 -1
  227. package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
  228. package/{examples/jsm → src}/renderers/common/RenderList.js +9 -0
  229. package/{examples/jsm → src}/renderers/common/RenderObject.js +50 -11
  230. package/{examples/jsm → src}/renderers/common/Renderer.js +220 -40
  231. package/{examples/jsm → src}/renderers/common/SampledTexture.js +2 -2
  232. package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
  233. package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
  234. package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
  235. package/{examples/jsm → src}/renderers/common/Textures.js +6 -2
  236. package/{examples/jsm → src}/renderers/common/Uniform.js +10 -5
  237. package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
  238. package/{examples/jsm → src}/renderers/common/extras/PMREMGenerator.js +13 -12
  239. package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
  240. package/{examples/jsm → src}/renderers/common/nodes/NodeSampledTexture.js +19 -4
  241. package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +8 -1
  242. package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
  243. package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
  244. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
  245. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
  246. package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +37 -16
  247. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
  248. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  249. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
  250. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
  251. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
  252. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
  253. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  254. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
  255. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
  256. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
  257. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
  258. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
  259. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
  260. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  261. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -4
  262. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  263. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  264. package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
  265. package/src/renderers/shaders/UniformsLib.js +3 -0
  266. package/src/renderers/webgl/WebGLAttributes.js +2 -2
  267. package/src/renderers/webgl/WebGLBackground.js +6 -0
  268. package/src/renderers/webgl/WebGLBufferRenderer.js +6 -19
  269. package/src/renderers/webgl/WebGLExtensions.js +3 -1
  270. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +6 -18
  271. package/src/renderers/webgl/WebGLLights.js +15 -12
  272. package/src/renderers/webgl/WebGLMaterials.js +1 -5
  273. package/src/renderers/webgl/WebGLMorphtargets.js +1 -2
  274. package/src/renderers/webgl/WebGLProgram.js +28 -31
  275. package/src/renderers/webgl/WebGLPrograms.js +15 -15
  276. package/src/renderers/webgl/WebGLRenderStates.js +2 -2
  277. package/src/renderers/webgl/WebGLTextures.js +100 -70
  278. package/src/renderers/webgl/WebGLUniforms.js +12 -2
  279. package/src/renderers/webgl/WebGLUniformsGroups.js +7 -7
  280. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +156 -54
  281. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +188 -41
  282. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +2 -2
  283. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +1 -0
  284. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
  285. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +1 -1
  286. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +126 -7
  287. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +1 -1
  288. package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +212 -78
  289. package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +2 -2
  290. package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +245 -49
  291. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
  292. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  293. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +30 -14
  294. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +9 -1
  295. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +74 -24
  296. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +101 -25
  297. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +24 -3
  298. package/src/renderers/webxr/WebXRDepthSensing.js +9 -3
  299. package/src/renderers/webxr/WebXRManager.js +12 -2
  300. package/src/textures/CompressedArrayTexture.js +14 -0
  301. package/src/textures/DataArrayTexture.js +14 -0
  302. package/src/textures/DepthTexture.js +1 -3
  303. package/src/utils.js +30 -1
  304. package/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
  305. package/examples/jsm/nodes/accessors/CameraNode.js +0 -119
  306. package/examples/jsm/nodes/accessors/InstanceNode.js +0 -94
  307. package/examples/jsm/nodes/accessors/NormalNode.js +0 -106
  308. package/examples/jsm/nodes/accessors/PositionNode.js +0 -104
  309. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
  310. package/examples/jsm/nodes/accessors/TangentNode.js +0 -109
  311. package/examples/jsm/nodes/accessors/UVNode.js +0 -47
  312. package/examples/jsm/nodes/core/NodeCache.js +0 -26
  313. package/examples/jsm/nodes/core/VaryingNode.js +0 -65
  314. package/examples/jsm/nodes/display/PassNode.js +0 -199
  315. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -255
  316. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  317. package/examples/jsm/renderers/common/ChainMap.js +0 -89
  318. package/examples/jsm/renderers/common/PostProcessing.js +0 -33
  319. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  320. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  321. /package/{examples/jsm → src}/nodes/accessors/AccessorsUtils.js +0 -0
  322. /package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +0 -0
  323. /package/{examples/jsm → src}/nodes/accessors/InstancedPointsMaterialNode.js +0 -0
  324. /package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +0 -0
  325. /package/{examples/jsm → src}/nodes/accessors/ModelViewProjectionNode.js +0 -0
  326. /package/{examples/jsm → src}/nodes/accessors/PointUVNode.js +0 -0
  327. /package/{examples/jsm → src}/nodes/accessors/RendererReferenceNode.js +0 -0
  328. /package/{examples/jsm → src}/nodes/accessors/SceneNode.js +0 -0
  329. /package/{examples/jsm → src}/nodes/accessors/SkinningNode.js +0 -0
  330. /package/{examples/jsm → src}/nodes/accessors/TextureBicubicNode.js +0 -0
  331. /package/{examples/jsm → src}/nodes/accessors/TextureSizeNode.js +0 -0
  332. /package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +0 -0
  333. /package/{examples/jsm → src}/nodes/code/CodeNode.js +0 -0
  334. /package/{examples/jsm → src}/nodes/code/ExpressionNode.js +0 -0
  335. /package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +0 -0
  336. /package/{examples/jsm → src}/nodes/code/FunctionNode.js +0 -0
  337. /package/{examples/jsm → src}/nodes/core/AssignNode.js +0 -0
  338. /package/{examples/jsm → src}/nodes/core/BypassNode.js +0 -0
  339. /package/{examples/jsm → src}/nodes/core/ConstNode.js +0 -0
  340. /package/{examples/jsm → src}/nodes/core/InputNode.js +0 -0
  341. /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
  342. /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
  343. /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
  344. /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
  345. /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
  346. /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
  347. /package/{examples/jsm → src}/nodes/core/ParameterNode.js +0 -0
  348. /package/{examples/jsm → src}/nodes/core/StackNode.js +0 -0
  349. /package/{examples/jsm → src}/nodes/core/StructTypeNode.js +0 -0
  350. /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
  351. /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
  352. /package/{examples/jsm → src}/nodes/display/BlendModeNode.js +0 -0
  353. /package/{examples/jsm → src}/nodes/display/BumpMapNode.js +0 -0
  354. /package/{examples/jsm → src}/nodes/display/PosterizeNode.js +0 -0
  355. /package/{examples/jsm → src}/nodes/fog/FogExp2Node.js +0 -0
  356. /package/{examples/jsm → src}/nodes/fog/FogNode.js +0 -0
  357. /package/{examples/jsm → src}/nodes/fog/FogRangeNode.js +0 -0
  358. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_GGX.js +0 -0
  359. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +0 -0
  360. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +0 -0
  361. /package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +0 -0
  362. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +0 -0
  363. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX_Anisotropic.js +0 -0
  364. /package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +0 -0
  365. /package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +0 -0
  366. /package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +0 -0
  367. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +0 -0
  368. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +0 -0
  369. /package/{examples/jsm → src}/nodes/functions/ShadowMaskModel.js +0 -0
  370. /package/{examples/jsm → src}/nodes/functions/material/getGeometryRoughness.js +0 -0
  371. /package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +0 -0
  372. /package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +0 -0
  373. /package/{examples/jsm → src}/nodes/lighting/IrradianceNode.js +0 -0
  374. /package/{examples/jsm → src}/nodes/lighting/LightNode.js +0 -0
  375. /package/{examples/jsm → src}/nodes/lighting/LightUtils.js +0 -0
  376. /package/{examples/jsm → src}/nodes/lighting/LightingContextNode.js +0 -0
  377. /package/{examples/jsm → src}/nodes/materials/MeshSSSNodeMaterial.js +0 -0
  378. /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
  379. /package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +0 -0
  380. /package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -0
  381. /package/{examples/jsm → src}/nodes/math/TriNoise3D.js +0 -0
  382. /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
  383. /package/{examples/jsm → src}/nodes/pmrem/PMREMUtils.js +0 -0
  384. /package/{examples/jsm → src}/nodes/procedural/CheckerNode.js +0 -0
  385. /package/{examples/jsm → src}/nodes/utils/ConvertNode.js +0 -0
  386. /package/{examples/jsm → src}/nodes/utils/EquirectUVNode.js +0 -0
  387. /package/{examples/jsm → src}/nodes/utils/JoinNode.js +0 -0
  388. /package/{examples/jsm → src}/nodes/utils/OscNode.js +0 -0
  389. /package/{examples/jsm → src}/nodes/utils/PackingNode.js +0 -0
  390. /package/{examples/jsm → src}/nodes/utils/RemapNode.js +0 -0
  391. /package/{examples/jsm → src}/nodes/utils/RotateNode.js +0 -0
  392. /package/{examples/jsm → src}/nodes/utils/RotateUVNode.js +0 -0
  393. /package/{examples/jsm → src}/nodes/utils/SetNode.js +0 -0
  394. /package/{examples/jsm → src}/nodes/utils/SplitNode.js +0 -0
  395. /package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +0 -0
  396. /package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +0 -0
  397. /package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +0 -0
  398. /package/{examples/jsm → src}/renderers/common/Animation.js +0 -0
  399. /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
  400. /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
  401. /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
  402. /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
  403. /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
  404. /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
  405. /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
  406. /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
  407. /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
  408. /package/{examples/jsm → src}/renderers/common/RenderObjects.js +0 -0
  409. /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
  410. /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
  411. /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
  412. /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
  413. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBufferRenderer.js +0 -0
  414. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
  415. /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
  416. /package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +0 -0
@@ -68,7 +68,7 @@ IncidentLight directLight;
68
68
 
69
69
  #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )
70
70
  pointLightShadow = pointLightShadows[ i ];
71
- directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;
71
+ directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;
72
72
  #endif
73
73
 
74
74
  RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
@@ -116,7 +116,7 @@ IncidentLight directLight;
116
116
 
117
117
  #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )
118
118
  spotLightShadow = spotLightShadows[ i ];
119
- directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;
119
+ directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;
120
120
  #endif
121
121
 
122
122
  RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
@@ -142,7 +142,7 @@ IncidentLight directLight;
142
142
 
143
143
  #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )
144
144
  directionalLightShadow = directionalLightShadows[ i ];
145
- directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
145
+ directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
146
146
  #endif
147
147
 
148
148
  RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
@@ -55,32 +55,18 @@ vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {
55
55
 
56
56
  float getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {
57
57
 
58
- #if defined ( LEGACY_LIGHTS )
58
+ // based upon Frostbite 3 Moving to Physically-based Rendering
59
+ // page 32, equation 26: E[window1]
60
+ // https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf
61
+ float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );
59
62
 
60
- if ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {
63
+ if ( cutoffDistance > 0.0 ) {
61
64
 
62
- return pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );
65
+ distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );
63
66
 
64
- }
65
-
66
- return 1.0;
67
-
68
- #else
69
-
70
- // based upon Frostbite 3 Moving to Physically-based Rendering
71
- // page 32, equation 26: E[window1]
72
- // https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf
73
- float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );
74
-
75
- if ( cutoffDistance > 0.0 ) {
76
-
77
- distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );
78
-
79
- }
80
-
81
- return distanceFalloff;
67
+ }
82
68
 
83
- #endif
69
+ return distanceFalloff;
84
70
 
85
71
  }
86
72
 
@@ -1,5 +1,5 @@
1
1
  export default /* glsl */`
2
- #if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )
2
+ #if defined( USE_MORPHCOLORS )
3
3
 
4
4
  // morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:
5
5
  // When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in normal = sum((target - base) * influence)
@@ -1,7 +1,7 @@
1
1
  export default /* glsl */`
2
2
  #ifdef USE_INSTANCING_MORPH
3
3
 
4
- float morphTargetInfluences[MORPHTARGETS_COUNT];
4
+ float morphTargetInfluences[ MORPHTARGETS_COUNT ];
5
5
 
6
6
  float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;
7
7
 
@@ -6,22 +6,11 @@ export default /* glsl */`
6
6
  // When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting
7
7
  objectNormal *= morphTargetBaseInfluence;
8
8
 
9
- #ifdef MORPHTARGETS_TEXTURE
9
+ for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
10
10
 
11
- for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
11
+ if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];
12
12
 
13
- if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];
14
-
15
- }
16
-
17
- #else
18
-
19
- objectNormal += morphNormal0 * morphTargetInfluences[ 0 ];
20
- objectNormal += morphNormal1 * morphTargetInfluences[ 1 ];
21
- objectNormal += morphNormal2 * morphTargetInfluences[ 2 ];
22
- objectNormal += morphNormal3 * morphTargetInfluences[ 3 ];
23
-
24
- #endif
13
+ }
25
14
 
26
15
  #endif
27
16
  `;
@@ -4,44 +4,23 @@ export default /* glsl */`
4
4
  #ifndef USE_INSTANCING_MORPH
5
5
 
6
6
  uniform float morphTargetBaseInfluence;
7
+ uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];
7
8
 
8
9
  #endif
9
10
 
10
- #ifdef MORPHTARGETS_TEXTURE
11
+ uniform sampler2DArray morphTargetsTexture;
12
+ uniform ivec2 morphTargetsTextureSize;
11
13
 
12
- #ifndef USE_INSTANCING_MORPH
14
+ vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {
13
15
 
14
- uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];
16
+ int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;
17
+ int y = texelIndex / morphTargetsTextureSize.x;
18
+ int x = texelIndex - y * morphTargetsTextureSize.x;
15
19
 
16
- #endif
20
+ ivec3 morphUV = ivec3( x, y, morphTargetIndex );
21
+ return texelFetch( morphTargetsTexture, morphUV, 0 );
17
22
 
18
- uniform sampler2DArray morphTargetsTexture;
19
- uniform ivec2 morphTargetsTextureSize;
20
-
21
- vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {
22
-
23
- int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;
24
- int y = texelIndex / morphTargetsTextureSize.x;
25
- int x = texelIndex - y * morphTargetsTextureSize.x;
26
-
27
- ivec3 morphUV = ivec3( x, y, morphTargetIndex );
28
- return texelFetch( morphTargetsTexture, morphUV, 0 );
29
-
30
- }
31
-
32
- #else
33
-
34
- #ifndef USE_MORPHNORMALS
35
-
36
- uniform float morphTargetInfluences[ 8 ];
37
-
38
- #else
39
-
40
- uniform float morphTargetInfluences[ 4 ];
41
-
42
- #endif
43
-
44
- #endif
23
+ }
45
24
 
46
25
  #endif
47
26
  `;
@@ -6,31 +6,11 @@ export default /* glsl */`
6
6
  // When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting
7
7
  transformed *= morphTargetBaseInfluence;
8
8
 
9
- #ifdef MORPHTARGETS_TEXTURE
9
+ for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
10
10
 
11
- for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
11
+ if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];
12
12
 
13
- if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];
14
-
15
- }
16
-
17
- #else
18
-
19
- transformed += morphTarget0 * morphTargetInfluences[ 0 ];
20
- transformed += morphTarget1 * morphTargetInfluences[ 1 ];
21
- transformed += morphTarget2 * morphTargetInfluences[ 2 ];
22
- transformed += morphTarget3 * morphTargetInfluences[ 3 ];
23
-
24
- #ifndef USE_MORPHNORMALS
25
-
26
- transformed += morphTarget4 * morphTargetInfluences[ 4 ];
27
- transformed += morphTarget5 * morphTargetInfluences[ 5 ];
28
- transformed += morphTarget6 * morphTargetInfluences[ 6 ];
29
- transformed += morphTarget7 * morphTargetInfluences[ 7 ];
30
-
31
- #endif
32
-
33
- #endif
13
+ }
34
14
 
35
15
  #endif
36
16
  `;
@@ -9,36 +9,68 @@ vec3 unpackRGBToNormal( const in vec3 rgb ) {
9
9
 
10
10
  const float PackUpscale = 256. / 255.; // fraction -> 0..1 (including 1)
11
11
  const float UnpackDownscale = 255. / 256.; // 0..1 -> fraction (excluding 1)
12
+ const float ShiftRight8 = 1. / 256.;
13
+ const float Inv255 = 1. / 255.;
12
14
 
13
- const vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );
14
- const vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );
15
+ const vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );
15
16
 
16
- const float ShiftRight8 = 1. / 256.;
17
+ const vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );
18
+ const vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );
19
+ const vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );
17
20
 
18
21
  vec4 packDepthToRGBA( const in float v ) {
19
- vec4 r = vec4( fract( v * PackFactors ), v );
20
- r.yzw -= r.xyz * ShiftRight8; // tidy overflow
21
- return r * PackUpscale;
22
+ if( v <= 0.0 )
23
+ return vec4( 0., 0., 0., 0. );
24
+ if( v >= 1.0 )
25
+ return vec4( 1., 1., 1., 1. );
26
+ float vuf;
27
+ float af = modf( v * PackFactors.a, vuf );
28
+ float bf = modf( vuf * ShiftRight8, vuf );
29
+ float gf = modf( vuf * ShiftRight8, vuf );
30
+ return vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );
31
+ }
32
+
33
+ vec3 packDepthToRGB( const in float v ) {
34
+ if( v <= 0.0 )
35
+ return vec3( 0., 0., 0. );
36
+ if( v >= 1.0 )
37
+ return vec3( 1., 1., 1. );
38
+ float vuf;
39
+ float bf = modf( v * PackFactors.b, vuf );
40
+ float gf = modf( vuf * ShiftRight8, vuf );
41
+ // the 0.9999 tweak is unimportant, very tiny empirical improvement
42
+ // return vec3( vuf * Inv255, gf * PackUpscale, bf * 0.9999 );
43
+ return vec3( vuf * Inv255, gf * PackUpscale, bf );
44
+ }
45
+
46
+ vec2 packDepthToRG( const in float v ) {
47
+ if( v <= 0.0 )
48
+ return vec2( 0., 0. );
49
+ if( v >= 1.0 )
50
+ return vec2( 1., 1. );
51
+ float vuf;
52
+ float gf = modf( v * 256., vuf );
53
+ return vec2( vuf * Inv255, gf );
22
54
  }
23
55
 
24
56
  float unpackRGBAToDepth( const in vec4 v ) {
25
- return dot( v, UnpackFactors );
57
+ return dot( v, UnpackFactors4 );
26
58
  }
27
59
 
28
- vec2 packDepthToRG( in highp float v ) {
29
- return packDepthToRGBA( v ).yx;
60
+ float unpackRGBToDepth( const in vec3 v ) {
61
+ return dot( v, UnpackFactors3 );
30
62
  }
31
63
 
32
- float unpackRGToDepth( const in highp vec2 v ) {
33
- return unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );
64
+ float unpackRGToDepth( const in vec2 v ) {
65
+ return v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;
34
66
  }
35
67
 
36
- vec4 pack2HalfToRGBA( vec2 v ) {
68
+ vec4 pack2HalfToRGBA( const in vec2 v ) {
37
69
  vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );
38
70
  return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );
39
71
  }
40
72
 
41
- vec2 unpackRGBATo2Half( vec4 v ) {
73
+ vec2 unpackRGBATo2Half( const in vec4 v ) {
42
74
  return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );
43
75
  }
44
76
 
@@ -19,6 +19,7 @@ export default /* glsl */`
19
19
  varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];
20
20
 
21
21
  struct DirectionalLightShadow {
22
+ float shadowIntensity;
22
23
  float shadowBias;
23
24
  float shadowNormalBias;
24
25
  float shadowRadius;
@@ -34,6 +35,7 @@ export default /* glsl */`
34
35
  uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];
35
36
 
36
37
  struct SpotLightShadow {
38
+ float shadowIntensity;
37
39
  float shadowBias;
38
40
  float shadowNormalBias;
39
41
  float shadowRadius;
@@ -50,6 +52,7 @@ export default /* glsl */`
50
52
  varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];
51
53
 
52
54
  struct PointLightShadow {
55
+ float shadowIntensity;
53
56
  float shadowBias;
54
57
  float shadowNormalBias;
55
58
  float shadowRadius;
@@ -103,7 +106,7 @@ export default /* glsl */`
103
106
 
104
107
  }
105
108
 
106
- float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {
109
+ float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {
107
110
 
108
111
  float shadow = 1.0;
109
112
 
@@ -196,7 +199,7 @@ export default /* glsl */`
196
199
 
197
200
  }
198
201
 
199
- return shadow;
202
+ return mix( 1.0, shadow, shadowIntensity );
200
203
 
201
204
  }
202
205
 
@@ -271,7 +274,7 @@ export default /* glsl */`
271
274
 
272
275
  }
273
276
 
274
- float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {
277
+ float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {
275
278
 
276
279
  float shadow = 1.0;
277
280
 
@@ -316,7 +319,7 @@ export default /* glsl */`
316
319
 
317
320
  }
318
321
 
319
- return shadow;
322
+ return mix( 1.0, shadow, shadowIntensity );
320
323
 
321
324
  }
322
325
 
@@ -15,6 +15,7 @@ export default /* glsl */`
15
15
  varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];
16
16
 
17
17
  struct DirectionalLightShadow {
18
+ float shadowIntensity;
18
19
  float shadowBias;
19
20
  float shadowNormalBias;
20
21
  float shadowRadius;
@@ -28,6 +29,7 @@ export default /* glsl */`
28
29
  #if NUM_SPOT_LIGHT_SHADOWS > 0
29
30
 
30
31
  struct SpotLightShadow {
32
+ float shadowIntensity;
31
33
  float shadowBias;
32
34
  float shadowNormalBias;
33
35
  float shadowRadius;
@@ -44,6 +46,7 @@ export default /* glsl */`
44
46
  varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];
45
47
 
46
48
  struct PointLightShadow {
49
+ float shadowIntensity;
47
50
  float shadowBias;
48
51
  float shadowNormalBias;
49
52
  float shadowRadius;
@@ -13,7 +13,7 @@ float getShadowMask() {
13
13
  for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {
14
14
 
15
15
  directionalLight = directionalLightShadows[ i ];
16
- shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
16
+ shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
17
17
 
18
18
  }
19
19
  #pragma unroll_loop_end
@@ -28,7 +28,7 @@ float getShadowMask() {
28
28
  for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {
29
29
 
30
30
  spotLight = spotLightShadows[ i ];
31
- shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;
31
+ shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;
32
32
 
33
33
  }
34
34
  #pragma unroll_loop_end
@@ -43,7 +43,7 @@ float getShadowMask() {
43
43
  for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {
44
44
 
45
45
  pointLight = pointLightShadows[ i ];
46
- shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;
46
+ shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;
47
47
 
48
48
  }
49
49
  #pragma unroll_loop_end
@@ -91,6 +91,14 @@ void main() {
91
91
 
92
92
  gl_FragColor = packDepthToRGBA( fragCoordZ );
93
93
 
94
+ #elif DEPTH_PACKING == 3202
95
+
96
+ gl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );
97
+
98
+ #elif DEPTH_PACKING == 3203
99
+
100
+ gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );
101
+
94
102
  #endif
95
103
 
96
104
  }
@@ -130,6 +130,7 @@ const UniformsLib = {
130
130
  } },
131
131
 
132
132
  directionalLightShadows: { value: [], properties: {
133
+ shadowIntensity: 1,
133
134
  shadowBias: {},
134
135
  shadowNormalBias: {},
135
136
  shadowRadius: {},
@@ -150,6 +151,7 @@ const UniformsLib = {
150
151
  } },
151
152
 
152
153
  spotLightShadows: { value: [], properties: {
154
+ shadowIntensity: 1,
153
155
  shadowBias: {},
154
156
  shadowNormalBias: {},
155
157
  shadowRadius: {},
@@ -168,6 +170,7 @@ const UniformsLib = {
168
170
  } },
169
171
 
170
172
  pointLightShadows: { value: [], properties: {
173
+ shadowIntensity: 1,
171
174
  shadowBias: {},
172
175
  shadowNormalBias: {},
173
176
  shadowRadius: {},
@@ -145,6 +145,8 @@ function WebGLAttributes( gl ) {
145
145
 
146
146
  function update( attribute, bufferType ) {
147
147
 
148
+ if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
149
+
148
150
  if ( attribute.isGLBufferAttribute ) {
149
151
 
150
152
  const cached = buffers.get( attribute );
@@ -164,8 +166,6 @@ function WebGLAttributes( gl ) {
164
166
 
165
167
  }
166
168
 
167
- if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
168
-
169
169
  const data = buffers.get( attribute );
170
170
 
171
171
  if ( data === undefined ) {
@@ -71,6 +71,12 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
71
71
 
72
72
  if ( renderer.autoClear || forceClear ) {
73
73
 
74
+ // buffers might not be writable which is required to ensure a correct clear
75
+
76
+ state.buffers.depth.setTest( true );
77
+ state.buffers.depth.setMask( true );
78
+ state.buffers.color.setMask( true );
79
+
74
80
  renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );
75
81
 
76
82
  }
@@ -31,30 +31,17 @@ function WebGLBufferRenderer( gl, extensions, info ) {
31
31
  if ( drawCount === 0 ) return;
32
32
 
33
33
  const extension = extensions.get( 'WEBGL_multi_draw' );
34
+ extension.multiDrawArraysWEBGL( mode, starts, 0, counts, 0, drawCount );
34
35
 
35
- if ( extension === null ) {
36
-
37
- for ( let i = 0; i < drawCount; i ++ ) {
36
+ let elementCount = 0;
37
+ for ( let i = 0; i < drawCount; i ++ ) {
38
38
 
39
- this.render( starts[ i ], counts[ i ] );
40
-
41
- }
42
-
43
- } else {
44
-
45
- extension.multiDrawArraysWEBGL( mode, starts, 0, counts, 0, drawCount );
46
-
47
- let elementCount = 0;
48
- for ( let i = 0; i < drawCount; i ++ ) {
49
-
50
- elementCount += counts[ i ];
51
-
52
- }
53
-
54
- info.update( elementCount, mode, 1 );
39
+ elementCount += counts[ i ];
55
40
 
56
41
  }
57
42
 
43
+ info.update( elementCount, mode, 1 );
44
+
58
45
  }
59
46
 
60
47
  function renderMultiDrawInstances( starts, counts, drawCount, primcount ) {
@@ -1,3 +1,5 @@
1
+ import { warnOnce } from '../../utils.js';
2
+
1
3
  function WebGLExtensions( gl ) {
2
4
 
3
5
  const extensions = {};
@@ -66,7 +68,7 @@ function WebGLExtensions( gl ) {
66
68
 
67
69
  if ( extension === null ) {
68
70
 
69
- console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );
71
+ warnOnce( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );
70
72
 
71
73
  }
72
74
 
@@ -40,29 +40,17 @@ function WebGLIndexedBufferRenderer( gl, extensions, info ) {
40
40
  if ( drawCount === 0 ) return;
41
41
 
42
42
  const extension = extensions.get( 'WEBGL_multi_draw' );
43
+ extension.multiDrawElementsWEBGL( mode, counts, 0, type, starts, 0, drawCount );
43
44
 
44
- if ( extension === null ) {
45
-
46
- for ( let i = 0; i < drawCount; i ++ ) {
47
-
48
- this.render( starts[ i ] / bytesPerElement, counts[ i ] );
49
-
50
- }
51
-
52
- } else {
45
+ let elementCount = 0;
46
+ for ( let i = 0; i < drawCount; i ++ ) {
53
47
 
54
- extension.multiDrawElementsWEBGL( mode, counts, 0, type, starts, 0, drawCount );
48
+ elementCount += counts[ i ];
55
49
 
56
- let elementCount = 0;
57
- for ( let i = 0; i < drawCount; i ++ ) {
58
-
59
- elementCount += counts[ i ];
60
-
61
- }
50
+ }
62
51
 
63
- info.update( elementCount, mode, 1 );
52
+ info.update( elementCount, mode, 1 );
64
53
 
65
- }
66
54
 
67
55
  }
68
56
 
@@ -99,6 +99,7 @@ function ShadowUniformsCache() {
99
99
 
100
100
  case 'DirectionalLight':
101
101
  uniforms = {
102
+ shadowIntensity: 1,
102
103
  shadowBias: 0,
103
104
  shadowNormalBias: 0,
104
105
  shadowRadius: 1,
@@ -108,6 +109,7 @@ function ShadowUniformsCache() {
108
109
 
109
110
  case 'SpotLight':
110
111
  uniforms = {
112
+ shadowIntensity: 1,
111
113
  shadowBias: 0,
112
114
  shadowNormalBias: 0,
113
115
  shadowRadius: 1,
@@ -117,6 +119,7 @@ function ShadowUniformsCache() {
117
119
 
118
120
  case 'PointLight':
119
121
  uniforms = {
122
+ shadowIntensity: 1,
120
123
  shadowBias: 0,
121
124
  shadowNormalBias: 0,
122
125
  shadowRadius: 1,
@@ -205,7 +208,7 @@ function WebGLLights( extensions ) {
205
208
  const matrix4 = new Matrix4();
206
209
  const matrix42 = new Matrix4();
207
210
 
208
- function setup( lights, useLegacyLights ) {
211
+ function setup( lights ) {
209
212
 
210
213
  let r = 0, g = 0, b = 0;
211
214
 
@@ -228,9 +231,6 @@ function WebGLLights( extensions ) {
228
231
  // ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]
229
232
  lights.sort( shadowCastingAndTexturingLightsFirst );
230
233
 
231
- // artist-friendly light intensity scaling factor
232
- const scaleFactor = ( useLegacyLights === true ) ? Math.PI : 1;
233
-
234
234
  for ( let i = 0, l = lights.length; i < l; i ++ ) {
235
235
 
236
236
  const light = lights[ i ];
@@ -243,9 +243,9 @@ function WebGLLights( extensions ) {
243
243
 
244
244
  if ( light.isAmbientLight ) {
245
245
 
246
- r += color.r * intensity * scaleFactor;
247
- g += color.g * intensity * scaleFactor;
248
- b += color.b * intensity * scaleFactor;
246
+ r += color.r * intensity;
247
+ g += color.g * intensity;
248
+ b += color.b * intensity;
249
249
 
250
250
  } else if ( light.isLightProbe ) {
251
251
 
@@ -261,7 +261,7 @@ function WebGLLights( extensions ) {
261
261
 
262
262
  const uniforms = cache.get( light );
263
263
 
264
- uniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );
264
+ uniforms.color.copy( light.color ).multiplyScalar( light.intensity );
265
265
 
266
266
  if ( light.castShadow ) {
267
267
 
@@ -269,6 +269,7 @@ function WebGLLights( extensions ) {
269
269
 
270
270
  const shadowUniforms = shadowCache.get( light );
271
271
 
272
+ shadowUniforms.shadowIntensity = shadow.intensity;
272
273
  shadowUniforms.shadowBias = shadow.bias;
273
274
  shadowUniforms.shadowNormalBias = shadow.normalBias;
274
275
  shadowUniforms.shadowRadius = shadow.radius;
@@ -292,7 +293,7 @@ function WebGLLights( extensions ) {
292
293
 
293
294
  uniforms.position.setFromMatrixPosition( light.matrixWorld );
294
295
 
295
- uniforms.color.copy( color ).multiplyScalar( intensity * scaleFactor );
296
+ uniforms.color.copy( color ).multiplyScalar( intensity );
296
297
  uniforms.distance = distance;
297
298
 
298
299
  uniforms.coneCos = Math.cos( light.angle );
@@ -322,6 +323,7 @@ function WebGLLights( extensions ) {
322
323
 
323
324
  const shadowUniforms = shadowCache.get( light );
324
325
 
326
+ shadowUniforms.shadowIntensity = shadow.intensity;
325
327
  shadowUniforms.shadowBias = shadow.bias;
326
328
  shadowUniforms.shadowNormalBias = shadow.normalBias;
327
329
  shadowUniforms.shadowRadius = shadow.radius;
@@ -353,7 +355,7 @@ function WebGLLights( extensions ) {
353
355
 
354
356
  const uniforms = cache.get( light );
355
357
 
356
- uniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );
358
+ uniforms.color.copy( light.color ).multiplyScalar( light.intensity );
357
359
  uniforms.distance = light.distance;
358
360
  uniforms.decay = light.decay;
359
361
 
@@ -363,6 +365,7 @@ function WebGLLights( extensions ) {
363
365
 
364
366
  const shadowUniforms = shadowCache.get( light );
365
367
 
368
+ shadowUniforms.shadowIntensity = shadow.intensity;
366
369
  shadowUniforms.shadowBias = shadow.bias;
367
370
  shadowUniforms.shadowNormalBias = shadow.normalBias;
368
371
  shadowUniforms.shadowRadius = shadow.radius;
@@ -386,8 +389,8 @@ function WebGLLights( extensions ) {
386
389
 
387
390
  const uniforms = cache.get( light );
388
391
 
389
- uniforms.skyColor.copy( light.color ).multiplyScalar( intensity * scaleFactor );
390
- uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity * scaleFactor );
392
+ uniforms.skyColor.copy( light.color ).multiplyScalar( intensity );
393
+ uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );
391
394
 
392
395
  state.hemi[ hemiLength ] = uniforms;
393
396