@unikia/upe-renderer 0.186.110 → 0.187.11

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 (506) hide show
  1. package/README.md +5 -7
  2. package/UPSTREAM.md +4 -4
  3. package/build/three.core.js +853 -277
  4. package/build/three.module.js +1098 -1280
  5. package/build/three.tsl.js +41938 -686
  6. package/build/three.webgpu.js +10604 -49055
  7. package/build/three.webgpu.nodes.js +9249 -5788
  8. package/examples/jsm/Addons.js +2 -0
  9. package/examples/jsm/animation/CCDIKSolver.js +17 -5
  10. package/examples/jsm/controls/FirstPersonControls.js +1 -1
  11. package/examples/jsm/controls/OrbitControls.js +27 -14
  12. package/examples/jsm/csm/CSMShader.js +74 -3
  13. package/examples/jsm/curves/CurveExtras.js +4 -4
  14. package/examples/jsm/curves/NURBSCurve.js +14 -0
  15. package/examples/jsm/exporters/EXRExporter.js +673 -16
  16. package/examples/jsm/exporters/GLTFExporter.js +4 -4
  17. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  18. package/examples/jsm/exporters/OBJExporter.js +48 -5
  19. package/examples/jsm/exporters/PLYExporter.js +22 -11
  20. package/examples/jsm/generators/CityGenerator.js +3 -2
  21. package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
  22. package/examples/jsm/gpgpu/BitonicSort.js +30 -23
  23. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
  24. package/examples/jsm/inspector/Extension.js +1 -1
  25. package/examples/jsm/inspector/Inspector.js +6 -46
  26. package/examples/jsm/inspector/RendererInspector.js +43 -8
  27. package/examples/jsm/inspector/Storage.js +49 -0
  28. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
  29. package/examples/jsm/inspector/tabs/Parameters.js +5 -1
  30. package/examples/jsm/inspector/tabs/Performance.js +22 -7
  31. package/examples/jsm/inspector/tabs/Settings.js +1 -1
  32. package/examples/jsm/inspector/tabs/Timeline.js +83 -7
  33. package/examples/jsm/inspector/tabs/Viewer.js +25 -10
  34. package/examples/jsm/inspector/ui/Profiler.js +1 -1
  35. package/examples/jsm/inspector/ui/Style.js +21 -53
  36. package/examples/jsm/inspector/ui/Values.js +28 -3
  37. package/examples/jsm/libs/fflate.module.js +83 -56
  38. package/examples/jsm/libs/mikktspace.README.md +27 -0
  39. package/examples/jsm/libs/mikktspace.module.js +721 -109
  40. package/examples/jsm/lighting/ClusteredLighting.js +100 -2
  41. package/examples/jsm/lighting/LightMapper.js +295 -0
  42. package/examples/jsm/lighting/LightProbeGrid.js +242 -139
  43. package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
  44. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
  45. package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
  46. package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
  47. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
  48. package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
  49. package/examples/jsm/lights/SunLight.js +9 -4
  50. package/examples/jsm/lights/SunLightNode.js +3 -3
  51. package/examples/jsm/lines/LineMaterial.js +26 -10
  52. package/examples/jsm/loaders/3DMLoader.js +10 -1
  53. package/examples/jsm/loaders/3MFLoader.js +5 -1
  54. package/examples/jsm/loaders/AMFLoader.js +2 -0
  55. package/examples/jsm/loaders/BVHLoader.js +2 -0
  56. package/examples/jsm/loaders/ColladaLoader.js +8 -0
  57. package/examples/jsm/loaders/DDSLoader.js +1 -1
  58. package/examples/jsm/loaders/DRACOLoader.js +5 -1
  59. package/examples/jsm/loaders/EXRLoader.js +120 -104
  60. package/examples/jsm/loaders/FBXLoader.js +4 -0
  61. package/examples/jsm/loaders/FontLoader.js +2 -0
  62. package/examples/jsm/loaders/GCodeLoader.js +5 -9
  63. package/examples/jsm/loaders/GLTFLoader.js +112 -31
  64. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
  65. package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
  66. package/examples/jsm/loaders/IESLoader.js +46 -12
  67. package/examples/jsm/loaders/JXLLoader.js +159 -0
  68. package/examples/jsm/loaders/KMZLoader.js +6 -0
  69. package/examples/jsm/loaders/KSPLATLoader.js +2 -0
  70. package/examples/jsm/loaders/KTX2Loader.js +49 -4
  71. package/examples/jsm/loaders/KTXLoader.js +5 -3
  72. package/examples/jsm/loaders/LDrawLoader.js +15 -22
  73. package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
  74. package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
  75. package/examples/jsm/loaders/LUTImageLoader.js +2 -0
  76. package/examples/jsm/loaders/LWOLoader.js +6 -0
  77. package/examples/jsm/loaders/MD2Loader.js +2 -0
  78. package/examples/jsm/loaders/MDDLoader.js +4 -0
  79. package/examples/jsm/loaders/MTLLoader.js +8 -0
  80. package/examples/jsm/loaders/MaterialXLoader.js +57 -5
  81. package/examples/jsm/loaders/NRRDLoader.js +4 -2
  82. package/examples/jsm/loaders/OBJLoader.js +10 -4
  83. package/examples/jsm/loaders/PCDLoader.js +6 -2
  84. package/examples/jsm/loaders/PDBLoader.js +5 -3
  85. package/examples/jsm/loaders/PLYLoader.js +39 -15
  86. package/examples/jsm/loaders/PVRLoader.js +2 -2
  87. package/examples/jsm/loaders/SPLATLoader.js +2 -0
  88. package/examples/jsm/loaders/SPZLoader.js +2 -0
  89. package/examples/jsm/loaders/STLLoader.js +3 -1
  90. package/examples/jsm/loaders/SVGLoader.js +27 -49
  91. package/examples/jsm/loaders/TDSLoader.js +4 -0
  92. package/examples/jsm/loaders/TGALoader.js +6 -5
  93. package/examples/jsm/loaders/TTFLoader.js +2 -0
  94. package/examples/jsm/loaders/USDLoader.js +14 -0
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
  96. package/examples/jsm/loaders/VOXLoader.js +3 -0
  97. package/examples/jsm/loaders/VRMLLoader.js +4 -0
  98. package/examples/jsm/loaders/VTKLoader.js +2 -0
  99. package/examples/jsm/loaders/XYZLoader.js +2 -0
  100. package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
  101. package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
  102. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
  103. package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
  104. package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
  105. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
  106. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
  107. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
  108. package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
  109. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
  110. package/examples/jsm/loaders/usd/USDAParser.js +56 -47
  111. package/examples/jsm/loaders/usd/USDComposer.js +25 -30
  112. package/examples/jsm/math/ColorConverter.js +7 -3
  113. package/examples/jsm/math/Lut.js +2 -2
  114. package/examples/jsm/math/OBB.js +3 -3
  115. package/examples/jsm/math/Octree.js +20 -17
  116. package/examples/jsm/objects/GaussianSplat.js +5 -4
  117. package/examples/jsm/objects/Reflector.js +5 -0
  118. package/examples/jsm/objects/SkyMesh.js +14 -7
  119. package/examples/jsm/objects/Water2Mesh.js +2 -2
  120. package/examples/jsm/physics/RapierPhysics.js +2 -2
  121. package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
  122. package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
  123. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  124. package/examples/jsm/postprocessing/GTAOPass.js +26 -18
  125. package/examples/jsm/renderers/SVGRenderer.js +3 -2
  126. package/examples/jsm/shaders/GTAOShader.js +7 -4
  127. package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
  128. package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
  129. package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
  130. package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
  131. package/examples/jsm/tsl/display/BloomNode.js +3 -3
  132. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
  133. package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
  134. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  135. package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
  136. package/examples/jsm/tsl/display/FSR1Node.js +3 -3
  137. package/examples/jsm/tsl/display/FXAANode.js +3 -10
  138. package/examples/jsm/tsl/display/FilmNode.js +3 -3
  139. package/examples/jsm/tsl/display/GTAONode.js +33 -25
  140. package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
  141. package/examples/jsm/tsl/display/GodraysNode.js +5 -19
  142. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
  143. package/examples/jsm/tsl/display/LensflareNode.js +3 -3
  144. package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
  145. package/examples/jsm/tsl/display/OITPassNode.js +0 -11
  146. package/examples/jsm/tsl/display/OutlineNode.js +107 -5
  147. package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
  148. package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
  149. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
  150. package/examples/jsm/tsl/display/SMAANode.js +3 -3
  151. package/examples/jsm/tsl/display/SSAONode.js +6 -20
  152. package/examples/jsm/tsl/display/SSGINode.js +36 -29
  153. package/examples/jsm/tsl/display/SSRNode.js +135 -63
  154. package/examples/jsm/tsl/display/SSSNode.js +6 -20
  155. package/examples/jsm/tsl/display/SharpenNode.js +3 -3
  156. package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
  157. package/examples/jsm/tsl/display/TAAUNode.js +10 -42
  158. package/examples/jsm/tsl/display/TRAANode.js +11 -43
  159. package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
  160. package/examples/jsm/tsl/display/TransitionNode.js +3 -3
  161. package/examples/jsm/tsl/display/lensDirt.js +30 -0
  162. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
  163. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
  164. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
  165. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
  166. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
  167. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
  168. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
  169. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
  170. package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
  171. package/examples/jsm/tsl/utils/Raymarching.js +1 -1
  172. package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
  173. package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
  174. package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
  175. package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
  176. package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
  177. package/examples/jsm/utils/SceneOptimizer.js +2 -1
  178. package/examples/jsm/utils/SceneUtils.js +1 -1
  179. package/examples/jsm/utils/unwrapUVs.js +865 -0
  180. package/examples/jsm/webxr/XREstimatedLight.js +11 -4
  181. package/package.json +3 -3
  182. package/src/Three.TSL.js +2 -683
  183. package/src/Three.WebGPU.Nodes.js +2 -1
  184. package/src/Three.WebGPU.js +2 -1
  185. package/src/animation/AnimationAction.js +1 -1
  186. package/src/animation/AnimationUtils.js +1 -3
  187. package/src/animation/KeyframeTrack.js +19 -0
  188. package/src/cameras/ArrayCamera.js +12 -0
  189. package/src/cameras/CubeCamera.js +3 -3
  190. package/src/constants.js +1 -9
  191. package/src/core/BufferAttribute.js +57 -21
  192. package/src/core/BufferGeometry.js +5 -13
  193. package/src/core/Clock.js +1 -1
  194. package/src/core/InterleavedBuffer.js +28 -18
  195. package/src/core/InterleavedBufferAttribute.js +54 -20
  196. package/src/core/Object3D.js +19 -9
  197. package/src/core/Raycaster.js +2 -0
  198. package/src/core/RenderTarget.js +11 -5
  199. package/src/core/UniformsGroup.js +7 -3
  200. package/src/extras/PMREMGenerator.js +392 -685
  201. package/src/extras/core/Curve.js +4 -0
  202. package/src/extras/core/CurvePath.js +13 -0
  203. package/src/extras/core/ShapePath.js +1 -1
  204. package/src/geometries/EdgesGeometry.js +12 -10
  205. package/src/geometries/LatheGeometry.js +2 -0
  206. package/src/helpers/PolarGridHelper.js +1 -1
  207. package/src/lights/Light.js +11 -0
  208. package/src/lights/LightProbe.js +2 -0
  209. package/src/lights/LightShadow.js +2 -0
  210. package/src/loaders/AnimationLoader.js +2 -0
  211. package/src/loaders/AudioLoader.js +2 -0
  212. package/src/loaders/BufferGeometryLoader.js +2 -0
  213. package/src/loaders/CompressedTextureLoader.js +2 -0
  214. package/src/loaders/CubeTextureLoader.js +2 -0
  215. package/src/loaders/DataTextureLoader.js +2 -0
  216. package/src/loaders/FileLoader.js +2 -0
  217. package/src/loaders/ImageBitmapLoader.js +3 -1
  218. package/src/loaders/ImageLoader.js +1 -0
  219. package/src/loaders/Loader.js +47 -0
  220. package/src/loaders/MaterialLoader.js +2 -0
  221. package/src/loaders/ObjectLoader.js +27 -8
  222. package/src/loaders/TextureLoader.js +5 -3
  223. package/src/loaders/nodes/NodeLoader.js +2 -0
  224. package/src/materials/Material.js +21 -2
  225. package/src/materials/MeshDepthMaterial.js +1 -1
  226. package/src/materials/MeshDistanceMaterial.js +1 -1
  227. package/src/materials/MeshLambertMaterial.js +1 -1
  228. package/src/materials/MeshMatcapMaterial.js +1 -1
  229. package/src/materials/MeshNormalMaterial.js +1 -1
  230. package/src/materials/MeshPhongMaterial.js +1 -1
  231. package/src/materials/MeshPhysicalMaterial.js +90 -11
  232. package/src/materials/MeshStandardMaterial.js +1 -1
  233. package/src/materials/MeshToonMaterial.js +1 -1
  234. package/src/materials/nodes/Line2NodeMaterial.js +32 -10
  235. package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
  236. package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
  237. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
  238. package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
  239. package/src/materials/nodes/NodeMaterial.js +36 -16
  240. package/src/materials/nodes/NodeMaterialInstance.js +193 -0
  241. package/src/materials/nodes/NodeMaterials.js +1 -0
  242. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  243. package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
  244. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
  245. package/src/math/Box3.js +2 -2
  246. package/src/math/Color.js +8 -8
  247. package/src/math/ColorManagement.js +2 -21
  248. package/src/math/FrustumArray.js +12 -0
  249. package/src/math/Interpolant.js +1 -1
  250. package/src/math/Line3.js +2 -4
  251. package/src/math/MathUtils.js +33 -46
  252. package/src/math/Matrix2.js +1 -1
  253. package/src/math/Matrix3.js +1 -1
  254. package/src/math/Matrix4.js +1 -1
  255. package/src/math/Triangle.js +2 -1
  256. package/src/math/Vector2.js +1 -1
  257. package/src/math/Vector3.js +1 -1
  258. package/src/math/Vector4.js +1 -1
  259. package/src/nodes/Nodes.js +1 -0
  260. package/src/nodes/TSL.js +2 -0
  261. package/src/nodes/accessors/Arrays.js +1 -1
  262. package/src/nodes/accessors/Batch.js +29 -23
  263. package/src/nodes/accessors/BufferAttributeNode.js +21 -1
  264. package/src/nodes/accessors/BuiltinNode.js +6 -0
  265. package/src/nodes/accessors/Camera.js +100 -93
  266. package/src/nodes/accessors/ClippingNode.js +17 -6
  267. package/src/nodes/accessors/CubeTextureNode.js +12 -24
  268. package/src/nodes/accessors/Instance.js +198 -160
  269. package/src/nodes/accessors/Lights.js +19 -6
  270. package/src/nodes/accessors/MaterialNode.js +33 -4
  271. package/src/nodes/accessors/Morph.js +81 -22
  272. package/src/nodes/accessors/Normal.js +0 -42
  273. package/src/nodes/accessors/Object3DNode.js +6 -0
  274. package/src/nodes/accessors/PointUVNode.js +6 -0
  275. package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
  276. package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
  277. package/src/nodes/accessors/ReferenceNode.js +6 -0
  278. package/src/nodes/accessors/Skinning.js +57 -52
  279. package/src/nodes/accessors/StorageBufferNode.js +3 -12
  280. package/src/nodes/accessors/TextureBicubic.js +30 -27
  281. package/src/nodes/accessors/TextureNode.js +164 -78
  282. package/src/nodes/accessors/TextureSizeNode.js +6 -0
  283. package/src/nodes/accessors/UniformArrayNode.js +8 -15
  284. package/src/nodes/accessors/VelocityNode.js +13 -8
  285. package/src/nodes/code/CodeNode.js +6 -0
  286. package/src/nodes/code/ExpressionNode.js +6 -0
  287. package/src/nodes/code/FunctionCallNode.js +3 -3
  288. package/src/nodes/code/FunctionNode.js +15 -13
  289. package/src/nodes/core/ArrayNode.js +3 -3
  290. package/src/nodes/core/AssignNode.js +10 -9
  291. package/src/nodes/core/AttributeNode.js +39 -0
  292. package/src/nodes/core/BypassNode.js +6 -0
  293. package/src/nodes/core/ConstNode.js +31 -1
  294. package/src/nodes/core/ContextNode.js +11 -6
  295. package/src/nodes/core/IndexNode.js +6 -0
  296. package/src/nodes/core/InputNode.js +6 -0
  297. package/src/nodes/core/InspectorNode.js +17 -31
  298. package/src/nodes/core/IsolateNode.js +8 -0
  299. package/src/nodes/core/Node.js +367 -67
  300. package/src/nodes/core/NodeBuilder.js +664 -222
  301. package/src/nodes/core/NodeUtils.js +25 -0
  302. package/src/nodes/core/NodeVar.js +10 -1
  303. package/src/nodes/core/OutputStructNode.js +6 -0
  304. package/src/nodes/core/OverrideContextNode.js +38 -37
  305. package/src/nodes/core/PropertyNode.js +14 -0
  306. package/src/nodes/core/StackNode.js +33 -21
  307. package/src/nodes/core/StructNode.js +6 -0
  308. package/src/nodes/core/StructTypeNode.js +6 -0
  309. package/src/nodes/core/SubBuildNode.js +8 -0
  310. package/src/nodes/core/TempNode.js +10 -35
  311. package/src/nodes/core/UniformGroupNode.js +6 -0
  312. package/src/nodes/core/VarNode.js +43 -135
  313. package/src/nodes/core/VaryingNode.js +33 -2
  314. package/src/nodes/display/BlendModes.js +5 -40
  315. package/src/nodes/display/BumpMapNode.js +17 -7
  316. package/src/nodes/display/ColorAdjustment.js +22 -10
  317. package/src/nodes/display/ColorSpaceFunctions.js +2 -14
  318. package/src/nodes/display/ColorSpaceNode.js +3 -3
  319. package/src/nodes/display/FrontFacingNode.js +6 -0
  320. package/src/nodes/display/NormalMapNode.js +3 -3
  321. package/src/nodes/display/PassNode.js +75 -16
  322. package/src/nodes/display/RenderOutputNode.js +22 -5
  323. package/src/nodes/display/ScreenNode.js +6 -0
  324. package/src/nodes/display/ToneMappingFunctions.js +9 -51
  325. package/src/nodes/display/ToneMappingNode.js +3 -3
  326. package/src/nodes/display/ToonOutlinePassNode.js +66 -2
  327. package/src/nodes/display/ViewportDepthNode.js +34 -4
  328. package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
  329. package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
  330. package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
  331. package/src/nodes/functions/BSDF/D_GGX.js +1 -8
  332. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
  333. package/src/nodes/functions/BSDF/LTC.js +20 -47
  334. package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
  335. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
  336. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
  337. package/src/nodes/functions/PhysicalLightingModel.js +84 -51
  338. package/src/nodes/functions/VolumetricLightingModel.js +1 -1
  339. package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
  340. package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
  341. package/src/nodes/functions/material/getRoughness.js +3 -1
  342. package/src/nodes/geometry/RangeNode.js +52 -69
  343. package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
  344. package/src/nodes/gpgpu/BarrierNode.js +6 -0
  345. package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
  346. package/src/nodes/gpgpu/ComputeNode.js +6 -0
  347. package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
  348. package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
  349. package/src/nodes/lighting/AnalyticLightNode.js +7 -14
  350. package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
  351. package/src/nodes/lighting/EnvironmentNode.js +58 -8
  352. package/src/nodes/lighting/IESSpotLightNode.js +19 -4
  353. package/src/nodes/lighting/LightProbeNode.js +2 -1
  354. package/src/nodes/lighting/LightUtils.js +2 -2
  355. package/src/nodes/lighting/LightingNode.js +6 -0
  356. package/src/nodes/lighting/LightsNode.js +26 -32
  357. package/src/nodes/lighting/PointShadowNode.js +92 -48
  358. package/src/nodes/lighting/ProjectorLightNode.js +1 -1
  359. package/src/nodes/lighting/RectAreaLightNode.js +13 -14
  360. package/src/nodes/lighting/ShadowBaseNode.js +9 -17
  361. package/src/nodes/lighting/ShadowFilterNode.js +26 -3
  362. package/src/nodes/lighting/ShadowNode.js +13 -11
  363. package/src/nodes/materialx/MaterialXColor.js +2 -14
  364. package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
  365. package/src/nodes/materialx/MaterialXNodes.js +8 -11
  366. package/src/nodes/materialx/MaterialXNoise.js +195 -454
  367. package/src/nodes/math/BitcastNode.js +5 -5
  368. package/src/nodes/math/BitcountNode.js +18 -46
  369. package/src/nodes/math/ConditionalNode.js +92 -22
  370. package/src/nodes/math/Hash.js +1 -1
  371. package/src/nodes/math/MathNode.js +86 -64
  372. package/src/nodes/math/MathUtils.js +2 -2
  373. package/src/nodes/math/OperatorNode.js +42 -59
  374. package/src/nodes/math/PackFloatNode.js +9 -9
  375. package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
  376. package/src/nodes/math/TriNoise3D.js +3 -23
  377. package/src/nodes/math/UnpackFloatNode.js +9 -9
  378. package/src/nodes/pmrem/PMREMNode.js +38 -75
  379. package/src/nodes/pmrem/PMREMUtils.js +108 -272
  380. package/src/nodes/procedural/Checker.js +1 -1
  381. package/src/nodes/tsl/TSLCore.js +199 -74
  382. package/src/nodes/utils/ArrayElementNode.js +19 -1
  383. package/src/nodes/utils/CubeMapNode.js +3 -3
  384. package/src/nodes/utils/DebugNode.js +2 -2
  385. package/src/nodes/utils/EventNode.js +6 -0
  386. package/src/nodes/utils/FlipNode.js +3 -3
  387. package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
  388. package/src/nodes/utils/JoinNode.js +3 -3
  389. package/src/nodes/utils/LoopNode.js +14 -9
  390. package/src/nodes/utils/MemberNode.js +18 -0
  391. package/src/nodes/utils/PostProcessingUtils.js +20 -25
  392. package/src/nodes/utils/RTTNode.js +2 -0
  393. package/src/nodes/utils/ReflectorNode.js +24 -0
  394. package/src/nodes/utils/RotateNode.js +3 -3
  395. package/src/nodes/utils/SampleNode.js +6 -0
  396. package/src/nodes/utils/SetNode.js +3 -3
  397. package/src/nodes/utils/SplitNode.js +6 -0
  398. package/src/nodes/utils/UVUtils.js +2 -2
  399. package/src/objects/BatchedMesh.js +146 -15
  400. package/src/objects/InstancedMesh.js +12 -4
  401. package/src/objects/Line.js +20 -0
  402. package/src/objects/Mesh.js +8 -0
  403. package/src/objects/Points.js +20 -0
  404. package/src/objects/Skeleton.js +26 -0
  405. package/src/objects/SkinnedMesh.js +3 -3
  406. package/src/objects/Sprite.js +10 -0
  407. package/src/renderers/WebGLRenderer.js +104 -70
  408. package/src/renderers/common/Animation.js +5 -1
  409. package/src/renderers/common/Attributes.js +67 -57
  410. package/src/renderers/common/Backend.js +78 -3
  411. package/src/renderers/common/BindGroup.js +11 -0
  412. package/src/renderers/common/Binding.js +0 -11
  413. package/src/renderers/common/Bindings.js +116 -10
  414. package/src/renderers/common/Buffer.js +1 -1
  415. package/src/renderers/common/ClippingContext.js +12 -1
  416. package/src/renderers/common/ComputePipeline.js +17 -1
  417. package/src/renderers/common/DirectRenderPipeline.js +7 -3
  418. package/src/renderers/common/Geometries.js +170 -132
  419. package/src/renderers/common/Info.js +1 -1
  420. package/src/renderers/common/InspectorBase.js +5 -5
  421. package/src/renderers/common/Lighting.js +59 -0
  422. package/src/renderers/common/Pipelines.js +26 -12
  423. package/src/renderers/common/ProgrammableStage.js +1 -17
  424. package/src/renderers/common/RenderContext.js +21 -0
  425. package/src/renderers/common/RenderContexts.js +13 -4
  426. package/src/renderers/common/RenderObject.js +111 -35
  427. package/src/renderers/common/RenderObjects.js +37 -19
  428. package/src/renderers/common/Renderer.js +537 -295
  429. package/src/renderers/common/RendererUtils.js +15 -0
  430. package/src/renderers/common/StandardDrawingPipeline.js +343 -0
  431. package/src/renderers/common/Storage3DTexture.js +11 -0
  432. package/src/renderers/common/StorageArrayTexture.js +10 -0
  433. package/src/renderers/common/StorageTexture.js +0 -9
  434. package/src/renderers/common/Textures.js +144 -37
  435. package/src/renderers/common/UniformsGroup.js +19 -0
  436. package/src/renderers/common/XRManager.js +10 -91
  437. package/src/renderers/common/extras/PMREMGenerator.js +298 -576
  438. package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
  439. package/src/renderers/common/nodes/NodeLibrary.js +11 -35
  440. package/src/renderers/common/nodes/NodeManager.js +80 -31
  441. package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
  442. package/src/renderers/common/nodes/NodeSampler.js +14 -0
  443. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  444. package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
  445. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
  446. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
  447. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
  448. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
  449. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
  451. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
  452. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
  453. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
  454. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
  455. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
  456. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
  457. package/src/renderers/shaders/ShaderChunk.js +0 -2
  458. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
  459. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  461. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
  462. package/src/renderers/shaders/ShaderLib.js +3 -0
  463. package/src/renderers/shaders/UniformsLib.js +4 -5
  464. package/src/renderers/webgl/WebGLBackground.js +3 -3
  465. package/src/renderers/webgl/WebGLBindingStates.js +4 -2
  466. package/src/renderers/webgl/WebGLCapabilities.js +7 -1
  467. package/src/renderers/webgl/WebGLEnvironments.js +2 -2
  468. package/src/renderers/webgl/WebGLGeometries.js +42 -14
  469. package/src/renderers/webgl/WebGLMaterials.js +15 -2
  470. package/src/renderers/webgl/WebGLOutput.js +37 -1
  471. package/src/renderers/webgl/WebGLProgram.js +13 -54
  472. package/src/renderers/webgl/WebGLPrograms.js +22 -8
  473. package/src/renderers/webgl/WebGLRenderStates.js +11 -8
  474. package/src/renderers/webgl/WebGLShadowMap.js +6 -4
  475. package/src/renderers/webgl/WebGLState.js +10 -6
  476. package/src/renderers/webgl/WebGLTextures.js +129 -77
  477. package/src/renderers/webgl/WebGLUniforms.js +44 -6
  478. package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
  479. package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
  480. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
  481. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
  482. package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
  483. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
  484. package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
  485. package/src/renderers/webgpu/WebGPUBackend.js +140 -82
  486. package/src/renderers/webgpu/WebGPURenderer.js +1 -1
  487. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
  488. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
  489. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
  490. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
  491. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
  492. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
  493. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
  494. package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
  495. package/src/renderers/webxr/WebXRController.js +3 -3
  496. package/src/renderers/webxr/WebXRManager.js +5 -90
  497. package/src/scenes/Scene.js +4 -4
  498. package/src/textures/CompressedTexture.js +2 -2
  499. package/src/textures/DepthTexture.js +2 -2
  500. package/src/textures/FramebufferTexture.js +11 -0
  501. package/src/textures/Texture.js +29 -1
  502. package/src/textures/TextureSource.js +1 -1
  503. package/src/upe.js +1 -1
  504. package/src/utils.js +4 -4
  505. package/examples/jsm/libs/surfaceNet.js +0 -201
  506. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
@@ -16,6 +16,10 @@ struct PhysicalMaterial {
16
16
  vec2 dfg;
17
17
  vec3 multiScatteringCompensation;
18
18
 
19
+ #ifdef USE_DIFFUSE_ROUGHNESS
20
+ float diffuseRoughness;
21
+ #endif
22
+
19
23
  #ifdef USE_RETROREFLECTION
20
24
  float retroreflectivity;
21
25
  #endif
@@ -76,6 +80,66 @@ vec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH )
76
80
  return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );
77
81
  }
78
82
 
83
+ #ifdef USE_DIFFUSE_ROUGHNESS
84
+
85
+ // Portsmouth et al. 2025, "EON: A Practical Energy-Preserving Rough Diffuse BRDF"
86
+ // https://jcgt.org/published/0014/01/06/
87
+ const float EON_EPSILON = 1e-7;
88
+
89
+ float FON_DirectionalAlbedo( const in float mu, const in float roughness, const in float A ) {
90
+
91
+ float muComp = 1.0 - mu;
92
+ float gOverPi = muComp * ( 0.0571085289 + muComp * ( 0.491881867 + muComp * ( - 0.332181442 + muComp * 0.0714429953 ) ) );
93
+
94
+ return A * ( 1.0 + roughness * gOverPi );
95
+
96
+ }
97
+
98
+ vec3 BRDF_EON( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 diffuseColor, const in float roughness ) {
99
+
100
+ vec3 rho = saturate( diffuseColor );
101
+
102
+ if ( roughness <= EON_EPSILON ) return BRDF_Lambert( rho );
103
+
104
+ float dotNL = saturate( dot( normal, lightDir ) );
105
+ float dotNV = saturate( dot( normal, viewDir ) );
106
+ float s = dot( lightDir, viewDir ) - dotNL * dotNV;
107
+ float sOverT = ( s > 0.0 ) ? s / max( max( dotNL, dotNV ), EON_EPSILON ) : s;
108
+
109
+ float A = 1.0 / ( 1.0 + ( 0.5 - 2.0 / ( 3.0 * PI ) ) * roughness );
110
+ vec3 singleScatter = rho * RECIPROCAL_PI * A * ( 1.0 + roughness * sOverT );
111
+
112
+ float averageAlbedo = A * ( 1.0 + ( 2.0 / 3.0 - 28.0 / ( 15.0 * PI ) ) * roughness );
113
+ float albedoV = FON_DirectionalAlbedo( dotNV, roughness, A );
114
+ float albedoL = FON_DirectionalAlbedo( dotNL, roughness, A );
115
+
116
+ vec3 rhoMultiScatter = rho * rho * averageAlbedo / max( vec3( EON_EPSILON ), vec3( 1.0 ) - rho * ( 1.0 - averageAlbedo ) );
117
+ vec3 multiScatter = rhoMultiScatter * RECIPROCAL_PI
118
+ * max( EON_EPSILON, 1.0 - albedoV )
119
+ * max( EON_EPSILON, 1.0 - albedoL )
120
+ / max( EON_EPSILON, 1.0 - averageAlbedo );
121
+
122
+ return singleScatter + multiScatter;
123
+
124
+ }
125
+
126
+ vec3 EON_DirectionalAlbedo( const in vec3 diffuseColor, const in float roughness, const in float dotNV ) {
127
+
128
+ vec3 rho = saturate( diffuseColor );
129
+
130
+ if ( roughness <= EON_EPSILON ) return rho;
131
+
132
+ float A = 1.0 / ( 1.0 + ( 0.5 - 2.0 / ( 3.0 * PI ) ) * roughness );
133
+ float directionalAlbedo = FON_DirectionalAlbedo( dotNV, roughness, A );
134
+ float averageAlbedo = A * ( 1.0 + ( 2.0 / 3.0 - 28.0 / ( 15.0 * PI ) ) * roughness );
135
+ vec3 rhoMultiScatter = rho * rho * averageAlbedo / max( vec3( EON_EPSILON ), vec3( 1.0 ) - rho * ( 1.0 - averageAlbedo ) );
136
+
137
+ return rho * directionalAlbedo + rhoMultiScatter * ( 1.0 - directionalAlbedo );
138
+
139
+ }
140
+
141
+ #endif
142
+
79
143
  // Moving Frostbite to Physically Based Rendering 3.0 - page 12, listing 2
80
144
  // https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf
81
145
  float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {
@@ -132,7 +196,7 @@ float D_GGX( const in float alpha, const in float dotNH ) {
132
196
 
133
197
  vec3 f0 = material.clearcoatF0;
134
198
  float f90 = material.clearcoatF90;
135
- float roughness = material.clearcoatRoughness;
199
+ float roughness = max( material.clearcoatRoughness, 0.045 ); // punctual lights need a minimum roughness to show a highlight
136
200
 
137
201
  float alpha = pow2( roughness ); // UE4's roughness
138
202
 
@@ -159,7 +223,7 @@ vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 norm
159
223
 
160
224
  vec3 f0 = material.specularColorBlended;
161
225
  float f90 = material.specularF90;
162
- float roughness = material.roughness;
226
+ float roughness = max( material.roughness, 0.045 ); // punctual lights need a minimum roughness to show a highlight
163
227
 
164
228
  float alpha = pow2( roughness ); // UE4's roughness
165
229
 
@@ -187,9 +251,11 @@ vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 norm
187
251
  float dotBV = dot( material.anisotropyB, viewDir );
188
252
  float dotBH = dot( material.anisotropyB, halfDir );
189
253
 
190
- float V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );
254
+ float alphaT = max( material.alphaT, alpha );
255
+
256
+ float V = V_GGX_SmithCorrelated_Anisotropic( alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );
191
257
 
192
- float D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );
258
+ float D = D_GGX_Anisotropic( alphaT, alpha, dotNH, dotTH, dotBH );
193
259
 
194
260
  #else
195
261
 
@@ -543,7 +609,17 @@ void RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geome
543
609
 
544
610
  #endif
545
611
 
546
- reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseContribution ) * ( 1.0 - F );
612
+ #ifdef USE_DIFFUSE_ROUGHNESS
613
+
614
+ vec3 diffuseBRDF = BRDF_EON( directLight.direction, geometryViewDir, geometryNormal, material.diffuseColor, material.diffuseRoughness ) * ( 1.0 - material.metalness );
615
+
616
+ #else
617
+
618
+ vec3 diffuseBRDF = BRDF_Lambert( material.diffuseContribution );
619
+
620
+ #endif
621
+
622
+ reflectedLight.directDiffuse += irradiance * diffuseBRDF * ( 1.0 - F );
547
623
  }
548
624
 
549
625
  void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
@@ -562,7 +638,19 @@ void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geomet
562
638
 
563
639
  #endif
564
640
 
565
- vec3 diffuse = irradiance * BRDF_Lambert( material.diffuseContribution ) * ( 1.0 - singleScattering - multiScattering );
641
+ #ifdef USE_DIFFUSE_ROUGHNESS
642
+
643
+ float dotNV = saturate( dot( geometryNormal, geometryViewDir ) );
644
+ // Irradiance has already integrated the cosine term, so use the directional
645
+ // albedo to approximate EON under locally uniform incident radiance.
646
+ vec3 diffuseAlbedo = EON_DirectionalAlbedo( material.diffuseColor, material.diffuseRoughness, dotNV ) * ( 1.0 - material.metalness );
647
+ vec3 diffuse = irradiance * RECIPROCAL_PI * diffuseAlbedo * ( 1.0 - singleScattering - multiScattering );
648
+
649
+ #else
650
+
651
+ vec3 diffuse = irradiance * BRDF_Lambert( material.diffuseContribution ) * ( 1.0 - singleScattering - multiScattering );
652
+
653
+ #endif
566
654
 
567
655
  #ifdef USE_SHEEN
568
656
 
@@ -621,7 +709,16 @@ void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradia
621
709
 
622
710
  // Diffuse energy conservation uses dielectric path
623
711
  vec3 totalScatteringDielectric = singleScatteringDielectric + multiScatteringDielectric;
624
- vec3 diffuse = material.diffuseContribution * ( 1.0 - totalScatteringDielectric );
712
+ #ifdef USE_DIFFUSE_ROUGHNESS
713
+
714
+ float dotNV = saturate( dot( geometryNormal, geometryViewDir ) );
715
+ vec3 diffuse = EON_DirectionalAlbedo( material.diffuseColor, material.diffuseRoughness, dotNV ) * ( 1.0 - material.metalness ) * ( 1.0 - totalScatteringDielectric );
716
+
717
+ #else
718
+
719
+ vec3 diffuse = material.diffuseContribution * ( 1.0 - totalScatteringDielectric );
720
+
721
+ #endif
625
722
 
626
723
  vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;
627
724
 
@@ -4,7 +4,16 @@ export default /* glsl */`
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)
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
- vColor *= morphTargetBaseInfluence;
7
+
8
+ #if defined( USE_COLOR_ALPHA )
9
+
10
+ vColor *= morphTargetBaseInfluence;
11
+
12
+ #elif defined( USE_COLOR )
13
+
14
+ vColor.rgb *= morphTargetBaseInfluence;
15
+
16
+ #endif
8
17
 
9
18
  for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {
10
19
 
@@ -14,7 +23,7 @@ export default /* glsl */`
14
23
 
15
24
  #elif defined( USE_COLOR )
16
25
 
17
- if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];
26
+ if ( morphTargetInfluences[ i ] != 0.0 ) vColor.rgb += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];
18
27
 
19
28
  #endif
20
29
 
@@ -152,7 +152,16 @@ export default /* glsl */`
152
152
  float shadow = 1.0;
153
153
 
154
154
  shadowCoord.xyz /= shadowCoord.w;
155
- shadowCoord.z += shadowBias;
155
+
156
+ #ifdef USE_REVERSED_DEPTH_BUFFER
157
+
158
+ shadowCoord.z -= shadowBias;
159
+
160
+ #else
161
+
162
+ shadowCoord.z += shadowBias;
163
+
164
+ #endif
156
165
 
157
166
  bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;
158
167
  bool frustumTest = inFrustum && shadowCoord.z <= 1.0;
@@ -162,7 +171,7 @@ export default /* glsl */`
162
171
  // Hardware PCF with LinearFilter gives us 4-tap filtering per sample
163
172
  // 5 samples using Vogel disk + IGN = effectively 20 filtered taps with better distribution
164
173
  vec2 texelSize = vec2( 1.0 ) / shadowMapSize;
165
- float radius = shadowRadius * texelSize.x;
174
+ vec2 radius = shadowRadius * texelSize;
166
175
 
167
176
  // Use IGN to rotate sampling pattern per pixel
168
177
  float phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;
@@ -362,17 +371,22 @@ export default /* glsl */`
362
371
 
363
372
  if ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {
364
373
 
365
- // viewZ to perspective depth
374
+ // Each sample is compared against the depth of the point next to the fragment in its direction,
375
+ // on whichever face of the cube it falls, so the comparison is the same on every face. A face
376
+ // stores the depth along its own axis, which for the point at direction * lightDistance is
377
+ // lightDistance * max( |x|, |y|, |z| ) of the direction, and perspective depth is a + b / z.
378
+ float lightDistance = length( lightToPosition );
379
+ float depthRange = shadowCameraFar - shadowCameraNear;
366
380
 
367
381
  #ifdef USE_REVERSED_DEPTH_BUFFER
368
382
 
369
- float dp = ( shadowCameraNear * ( shadowCameraFar - viewSpaceZ ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
370
- dp -= shadowBias;
383
+ float depthA = - shadowCameraNear / depthRange - shadowBias;
384
+ float depthB = shadowCameraNear * shadowCameraFar / ( depthRange * lightDistance );
371
385
 
372
386
  #else
373
387
 
374
- float dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
375
- dp += shadowBias;
388
+ float depthA = shadowCameraFar / depthRange + shadowBias;
389
+ float depthB = - shadowCameraNear * shadowCameraFar / ( depthRange * lightDistance );
376
390
 
377
391
  #endif
378
392
 
@@ -389,19 +403,21 @@ export default /* glsl */`
389
403
  // Use IGN to rotate sampling pattern per pixel
390
404
  float phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;
391
405
 
392
- vec2 sample0 = vogelDiskSample( 0, 5, phi );
393
- vec2 sample1 = vogelDiskSample( 1, 5, phi );
394
- vec2 sample2 = vogelDiskSample( 2, 5, phi );
395
- vec2 sample3 = vogelDiskSample( 3, 5, phi );
396
- vec2 sample4 = vogelDiskSample( 4, 5, phi );
397
-
398
- shadow = (
399
- texture( shadowMap, vec4( bd3D + ( tangent * sample0.x + bitangent * sample0.y ) * texelSize, dp ) ) +
400
- texture( shadowMap, vec4( bd3D + ( tangent * sample1.x + bitangent * sample1.y ) * texelSize, dp ) ) +
401
- texture( shadowMap, vec4( bd3D + ( tangent * sample2.x + bitangent * sample2.y ) * texelSize, dp ) ) +
402
- texture( shadowMap, vec4( bd3D + ( tangent * sample3.x + bitangent * sample3.y ) * texelSize, dp ) ) +
403
- texture( shadowMap, vec4( bd3D + ( tangent * sample4.x + bitangent * sample4.y ) * texelSize, dp ) )
404
- ) * 0.2;
406
+ shadow = 0.0;
407
+
408
+ for ( int i = 0; i < 5; i ++ ) {
409
+
410
+ vec2 offset = vogelDiskSample( i, 5, phi );
411
+ vec3 direction = bd3D + ( tangent * offset.x + bitangent * offset.y ) * texelSize;
412
+ vec3 absDirection = abs( direction );
413
+
414
+ float dp = depthA + depthB / max( max( absDirection.x, absDirection.y ), absDirection.z );
415
+
416
+ shadow += texture( shadowMap, vec4( direction, dp ) );
417
+
418
+ }
419
+
420
+ shadow *= 0.2;
405
421
 
406
422
  }
407
423
 
@@ -48,6 +48,11 @@ export default /* glsl */`
48
48
 
49
49
  varying vec2 vRoughnessMapUv;
50
50
 
51
+ #endif
52
+ #ifdef USE_DIFFUSE_ROUGHNESSMAP
53
+
54
+ varying vec2 vDiffuseRoughnessMapUv;
55
+
51
56
  #endif
52
57
  #ifdef USE_ANISOTROPYMAP
53
58
 
@@ -63,6 +63,12 @@ export default /* glsl */`
63
63
  uniform mat3 roughnessMapTransform;
64
64
  varying vec2 vRoughnessMapUv;
65
65
 
66
+ #endif
67
+ #ifdef USE_DIFFUSE_ROUGHNESSMAP
68
+
69
+ uniform mat3 diffuseRoughnessMapTransform;
70
+ varying vec2 vDiffuseRoughnessMapUv;
71
+
66
72
  #endif
67
73
  #ifdef USE_ANISOTROPYMAP
68
74
 
@@ -53,6 +53,11 @@ export default /* glsl */`
53
53
 
54
54
  vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;
55
55
 
56
+ #endif
57
+ #ifdef USE_DIFFUSE_ROUGHNESSMAP
58
+
59
+ vDiffuseRoughnessMapUv = ( diffuseRoughnessMapTransform * vec3( DIFFUSE_ROUGHNESSMAP_UV, 1 ) ).xy;
60
+
56
61
  #endif
57
62
  #ifdef USE_ANISOTROPYMAP
58
63
 
@@ -22,7 +22,6 @@ import color_pars_fragment from './ShaderChunk/color_pars_fragment.glsl.js';
22
22
  import color_pars_vertex from './ShaderChunk/color_pars_vertex.glsl.js';
23
23
  import color_vertex from './ShaderChunk/color_vertex.glsl.js';
24
24
  import common from './ShaderChunk/common.glsl.js';
25
- import cube_uv_reflection_fragment from './ShaderChunk/cube_uv_reflection_fragment.glsl.js';
26
25
  import defaultnormal_vertex from './ShaderChunk/defaultnormal_vertex.glsl.js';
27
26
  import displacementmap_pars_vertex from './ShaderChunk/displacementmap_pars_vertex.glsl.js';
28
27
  import displacementmap_vertex from './ShaderChunk/displacementmap_vertex.glsl.js';
@@ -150,7 +149,6 @@ export const ShaderChunk = {
150
149
  color_pars_vertex: color_pars_vertex,
151
150
  color_vertex: color_vertex,
152
151
  common: common,
153
- cube_uv_reflection_fragment: cube_uv_reflection_fragment,
154
152
  defaultnormal_vertex: defaultnormal_vertex,
155
153
  displacementmap_pars_vertex: displacementmap_pars_vertex,
156
154
  displacementmap_vertex: displacementmap_vertex,
@@ -17,37 +17,23 @@ void main() {
17
17
 
18
18
  export const fragment = /* glsl */`
19
19
 
20
- #ifdef ENVMAP_TYPE_CUBE
21
-
22
- uniform samplerCube envMap;
23
-
24
- #elif defined( ENVMAP_TYPE_CUBE_UV )
25
-
26
- uniform sampler2D envMap;
27
-
28
- #endif
29
-
30
20
  uniform float backgroundBlurriness;
31
21
  uniform float backgroundIntensity;
32
22
  uniform mat3 backgroundRotation;
33
23
 
34
24
  varying vec3 vWorldDirection;
35
25
 
36
- #include <cube_uv_reflection_fragment>
26
+ #include <envmap_common_pars_fragment>
37
27
 
38
28
  void main() {
39
29
 
40
- #ifdef ENVMAP_TYPE_CUBE
30
+ #ifdef ENVMAP_TYPE_PMREM
41
31
 
42
- vec4 texColor = textureCube( envMap, backgroundRotation * vWorldDirection );
43
-
44
- #elif defined( ENVMAP_TYPE_CUBE_UV )
45
-
46
- vec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );
32
+ vec4 texColor = textureLod( envMap, backgroundRotation * vWorldDirection, roughnessToMip( backgroundBlurriness ) );
47
33
 
48
34
  #else
49
35
 
50
- vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );
36
+ vec4 texColor = textureCube( envMap, backgroundRotation * vWorldDirection );
51
37
 
52
38
  #endif
53
39
 
@@ -68,7 +68,6 @@ uniform float opacity;
68
68
  #include <aomap_pars_fragment>
69
69
  #include <lightmap_pars_fragment>
70
70
  #include <emissivemap_pars_fragment>
71
- #include <cube_uv_reflection_fragment>
72
71
  #include <envmap_common_pars_fragment>
73
72
  #include <envmap_pars_fragment>
74
73
  #include <envmap_physical_pars_fragment>
@@ -70,7 +70,6 @@ uniform float opacity;
70
70
  #include <aomap_pars_fragment>
71
71
  #include <lightmap_pars_fragment>
72
72
  #include <emissivemap_pars_fragment>
73
- #include <cube_uv_reflection_fragment>
74
73
  #include <envmap_common_pars_fragment>
75
74
  #include <envmap_pars_fragment>
76
75
  #include <envmap_physical_pars_fragment>
@@ -95,6 +95,14 @@ uniform float opacity;
95
95
  uniform float clearcoatRoughness;
96
96
  #endif
97
97
 
98
+ #ifdef USE_DIFFUSE_ROUGHNESS
99
+ uniform float diffuseRoughness;
100
+
101
+ #ifdef USE_DIFFUSE_ROUGHNESSMAP
102
+ uniform sampler2D diffuseRoughnessMap;
103
+ #endif
104
+ #endif
105
+
98
106
  #ifdef USE_DISPERSION
99
107
  uniform float dispersion;
100
108
  #endif
@@ -145,7 +153,6 @@ varying vec3 vViewPosition;
145
153
  #include <lightmap_pars_fragment>
146
154
  #include <emissivemap_pars_fragment>
147
155
  #include <iridescence_fragment>
148
- #include <cube_uv_reflection_fragment>
149
156
  #include <envmap_common_pars_fragment>
150
157
  #include <envmap_physical_pars_fragment>
151
158
  #include <fog_pars_fragment>
@@ -315,6 +315,9 @@ ShaderLib.physical = {
315
315
  clearcoatRoughness: { value: 0 },
316
316
  clearcoatRoughnessMap: { value: null },
317
317
  clearcoatRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },
318
+ diffuseRoughness: { value: 0 },
319
+ diffuseRoughnessMap: { value: null },
320
+ diffuseRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },
318
321
  dispersion: { value: 0 },
319
322
  retroreflectivity: { value: 0 },
320
323
  iridescence: { value: 0 },
@@ -1,6 +1,5 @@
1
1
  import { Color } from '../../math/Color.js';
2
2
  import { Vector2 } from '../../math/Vector2.js';
3
- import { Vector3 } from '../../math/Vector3.js';
4
3
  import { Matrix3 } from '../../math/Matrix3.js';
5
4
 
6
5
  // Uniforms library for shared webgl shaders
@@ -210,10 +209,10 @@ const UniformsLib = {
210
209
  ltc_1: { value: null },
211
210
  ltc_2: { value: null },
212
211
 
213
- probesSH: { value: null },
214
- probesMin: { value: /*@__PURE__*/ new Vector3() },
215
- probesMax: { value: /*@__PURE__*/ new Vector3() },
216
- probesResolution: { value: /*@__PURE__*/ new Vector3() }
212
+ probesSH: { value: [] },
213
+ probesMin: { value: [] },
214
+ probesMax: { value: [] },
215
+ probesResolution: { value: [] }
217
216
 
218
217
  },
219
218
 
@@ -1,4 +1,4 @@
1
- import { BackSide, FrontSide, CubeUVReflectionMapping, SRGBTransfer } from '../../constants.js';
1
+ import { BackSide, FrontSide, SRGBTransfer } from '../../constants.js';
2
2
  import { BoxGeometry } from '../../geometries/BoxGeometry.js';
3
3
  import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
4
4
  import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
@@ -89,7 +89,7 @@ function WebGLBackground( renderer, environments, state, objects, alpha, premult
89
89
 
90
90
  const background = getBackground( scene );
91
91
 
92
- if ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {
92
+ if ( background && background.isCubeTexture ) {
93
93
 
94
94
  if ( boxMesh === undefined ) {
95
95
 
@@ -141,7 +141,7 @@ function WebGLBackground( renderer, environments, state, objects, alpha, premult
141
141
  // note: since the matrix is orthonormal, we can use the more-efficient transpose() in lieu of invert()
142
142
  boxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( scene.backgroundRotation ) ).transpose();
143
143
 
144
- if ( background.isCubeTexture && background.isRenderTargetTexture === false ) {
144
+ if ( background.isRenderTargetTexture === false ) {
145
145
 
146
146
  boxMesh.material.uniforms.backgroundRotation.value.premultiply( _m );
147
147
 
@@ -358,11 +358,13 @@ function WebGLBindingStates( gl, attributes ) {
358
358
 
359
359
  if ( geometryAttribute.isInterleavedBufferAttribute ) {
360
360
 
361
+ // interleaved attributes can also view a buffer attribute, e.g. the columns of instance matrices
362
+
361
363
  const data = geometryAttribute.data;
362
- const stride = data.stride;
364
+ const stride = data.isInterleavedBuffer === true ? data.stride : data.itemSize;
363
365
  const offset = geometryAttribute.offset;
364
366
 
365
- if ( data.isInstancedInterleavedBuffer ) {
367
+ if ( data.isInstancedInterleavedBuffer || data.isInstancedBufferAttribute ) {
366
368
 
367
369
  for ( let i = 0; i < programAttribute.locationSize; i ++ ) {
368
370
 
@@ -92,8 +92,8 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
92
92
 
93
93
  }
94
94
 
95
- const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;
96
95
  const reversedDepthBuffer = parameters.reversedDepthBuffer === true && extensions.has( 'EXT_clip_control' );
96
+ const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true && reversedDepthBuffer === false;
97
97
 
98
98
  if ( parameters.reversedDepthBuffer === true && reversedDepthBuffer === false ) {
99
99
 
@@ -101,6 +101,12 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
101
101
 
102
102
  }
103
103
 
104
+ if ( parameters.logarithmicDepthBuffer === true && reversedDepthBuffer === true ) {
105
+
106
+ warn( 'WebGLRenderer: Logarithmic depth buffer is ignored when reversed depth buffer is enabled.' );
107
+
108
+ }
109
+
104
110
  const maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );
105
111
  const maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );
106
112
  const maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );
@@ -70,14 +70,14 @@ function WebGLEnvironments( renderer ) {
70
70
 
71
71
  function getPMREM( texture ) {
72
72
 
73
- if ( texture && texture.isTexture ) {
73
+ if ( texture && texture.isTexture && texture.isPMREMTexture !== true ) {
74
74
 
75
75
  const mapping = texture.mapping;
76
76
 
77
77
  const isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );
78
78
  const isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );
79
79
 
80
- // equirect/cube map to cubeUV conversion
80
+ // equirect/cube map to PMREM conversion
81
81
 
82
82
  if ( isEquirectMap || isCubeMap ) {
83
83