@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
@@ -2,6 +2,7 @@ import { Vector2 } from '../math/Vector2.js';
2
2
  import { MeshStandardMaterial } from './MeshStandardMaterial.js';
3
3
  import { Color } from '../math/Color.js';
4
4
  import { clamp } from '../math/MathUtils.js';
5
+ import { warnOnce } from '../utils.js';
5
6
 
6
7
  /**
7
8
  * An extension of the {@link MeshStandardMaterial}, providing more advanced
@@ -12,6 +13,8 @@ import { clamp } from '../math/MathUtils.js';
12
13
  * - Clearcoat: Some materials — like car paints, carbon fiber, and wet surfaces — require
13
14
  * a clear, reflective layer on top of another layer that may be irregular or rough.
14
15
  * Clearcoat approximates this effect, without the need for a separate transparent surface.
16
+ * - Diffuse roughness: Produces the flatter appearance and enhanced backscattering of
17
+ * rough diffuse surfaces such as clay, concrete, and unpolished materials.
15
18
  * - Iridescence: Allows to render the effect where hue varies depending on the viewing
16
19
  * angle and illumination angle. This can be seen on soap bubbles, oil films, or on the
17
20
  * wings of many insects.
@@ -70,7 +73,7 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
70
73
  * property provides additional rotation to the vectors in the texture.
71
74
  *
72
75
  * @type {number}
73
- * @default 1
76
+ * @default 0
74
77
  */
75
78
  this.anisotropyRotation = 0;
76
79
 
@@ -139,6 +142,18 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
139
142
  */
140
143
  this.clearcoatNormalMap = null;
141
144
 
145
+ /**
146
+ * The red channel of this texture is multiplied against `diffuseRoughness`,
147
+ * for per-pixel control over the diffuse roughness.
148
+ *
149
+ * `diffuseRoughnessMap` represents non-color data. Any texture assigned must have
150
+ * `texture.colorSpace = NoColorSpace` (default).
151
+ *
152
+ * @type {?Texture}
153
+ * @default null
154
+ */
155
+ this.diffuseRoughnessMap = null;
156
+
142
157
  /**
143
158
  * Index-of-refraction for non-metallic materials, from `1.0` to `2.333`.
144
159
  *
@@ -193,20 +208,29 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
193
208
  this.iridescenceIOR = 1.3;
194
209
 
195
210
  /**
196
- *Array of exactly 2 elements, specifying minimum and maximum thickness of the iridescence layer.
197
- Thickness of iridescence layer has an equivalent effect of the one `thickness` has on `ior`.
211
+ * The minimum thickness of the iridescence layer in nanometers.
212
+ *
213
+ * @type {number}
214
+ * @default 100
215
+ */
216
+ this.iridescenceThicknessMinimum = 100;
217
+
218
+ /**
219
+ * The maximum thickness of the iridescence layer in nanometers. If no
220
+ * `iridescenceThicknessMap` is defined, this value is used as the thickness.
198
221
  *
199
- * @type {Array<number,number>}
200
- * @default [100,400]
222
+ * @type {number}
223
+ * @default 400
201
224
  */
202
- this.iridescenceThicknessRange = [ 100, 400 ];
225
+ this.iridescenceThicknessMaximum = 400;
203
226
 
204
227
  /**
205
228
  * A texture that defines the thickness of the iridescence layer, stored in the green channel.
206
- * Minimum and maximum values of thickness are defined by `iridescenceThicknessRange` array:
207
- * - `0.0` in the green channel will result in thickness equal to first element of the array.
208
- * - `1.0` in the green channel will result in thickness equal to second element of the array.
209
- * - Values in-between will linearly interpolate between the elements of the array.
229
+ * Minimum and maximum values of thickness are defined by `iridescenceThicknessMinimum` and
230
+ * `iridescenceThicknessMaximum`:
231
+ * - `0.0` in the green channel will result in thickness equal to `iridescenceThicknessMinimum`.
232
+ * - `1.0` in the green channel will result in thickness equal to `iridescenceThicknessMaximum`.
233
+ * - Values in-between will linearly interpolate between both values.
210
234
  *
211
235
  * `iridescenceThicknessMap` represents non-color data. Any texture assigned must have
212
236
  * `texture.colorSpace = NoColorSpace` (default).
@@ -354,6 +378,7 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
354
378
 
355
379
  this._anisotropy = 0;
356
380
  this._clearcoat = 0;
381
+ this._diffuseRoughness = 0;
357
382
  this._dispersion = 0;
358
383
  this._iridescence = 0;
359
384
  this._retroreflectivity = 0;
@@ -413,6 +438,33 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
413
438
  this._clearcoat = value;
414
439
 
415
440
  }
441
+
442
+ /**
443
+ * Roughness of the diffuse layer, from `0.0` to `1.0`. A value of `0.0`
444
+ * uses Lambertian diffuse reflection. Values above `0.0` use the EON
445
+ * energy-preserving rough diffuse model.
446
+ *
447
+ * @type {number}
448
+ * @default 0
449
+ */
450
+ get diffuseRoughness() {
451
+
452
+ return this._diffuseRoughness;
453
+
454
+ }
455
+
456
+ set diffuseRoughness( value ) {
457
+
458
+ if ( this._diffuseRoughness > 0 !== value > 0 ) {
459
+
460
+ this.version ++;
461
+
462
+ }
463
+
464
+ this._diffuseRoughness = value;
465
+
466
+ }
467
+
416
468
  /**
417
469
  * The intensity of the iridescence layer, simulating RGB color shift based on the angle between
418
470
  * the surface and the viewer, from `0.0` to `1.0`.
@@ -545,6 +597,30 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
545
597
 
546
598
  }
547
599
 
600
+ /**
601
+ * Array of exactly 2 elements, specifying minimum and maximum thickness of the iridescence layer.
602
+ *
603
+ * @deprecated since r187. Use {@link MeshPhysicalMaterial#iridescenceThicknessMinimum} and {@link MeshPhysicalMaterial#iridescenceThicknessMaximum} instead.
604
+ * @type {Array<number,number>}
605
+ * @default [100,400]
606
+ */
607
+ get iridescenceThicknessRange() {
608
+
609
+ warnOnce( 'MeshPhysicalMaterial: The "iridescenceThicknessRange" property has been replaced by "iridescenceThicknessMinimum" and "iridescenceThicknessMaximum".' ); // @deprecated r187
610
+
611
+ return [ this.iridescenceThicknessMinimum, this.iridescenceThicknessMaximum ];
612
+
613
+ }
614
+
615
+ set iridescenceThicknessRange( value ) {
616
+
617
+ warnOnce( 'MeshPhysicalMaterial: The "iridescenceThicknessRange" property has been replaced by "iridescenceThicknessMinimum" and "iridescenceThicknessMaximum".' ); // @deprecated r187
618
+
619
+ this.iridescenceThicknessMinimum = value[ 0 ];
620
+ this.iridescenceThicknessMaximum = value[ 1 ];
621
+
622
+ }
623
+
548
624
  copy( source ) {
549
625
 
550
626
  super.copy( source );
@@ -566,6 +642,8 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
566
642
  this.clearcoatRoughnessMap = source.clearcoatRoughnessMap;
567
643
  this.clearcoatNormalMap = source.clearcoatNormalMap;
568
644
  this.clearcoatNormalScale.copy( source.clearcoatNormalScale );
645
+ this.diffuseRoughness = source.diffuseRoughness;
646
+ this.diffuseRoughnessMap = source.diffuseRoughnessMap;
569
647
 
570
648
  this.dispersion = source.dispersion;
571
649
  this.ior = source.ior;
@@ -573,7 +651,8 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
573
651
  this.iridescence = source.iridescence;
574
652
  this.iridescenceMap = source.iridescenceMap;
575
653
  this.iridescenceIOR = source.iridescenceIOR;
576
- this.iridescenceThicknessRange = [ ...source.iridescenceThicknessRange ];
654
+ this.iridescenceThicknessMinimum = source.iridescenceThicknessMinimum;
655
+ this.iridescenceThicknessMaximum = source.iridescenceThicknessMaximum;
577
656
  this.iridescenceThicknessMap = source.iridescenceThicknessMap;
578
657
 
579
658
  this.retroreflectivity = source.retroreflectivity;
@@ -261,7 +261,7 @@ class MeshStandardMaterial extends Material {
261
261
  * map set, this value is not applied.
262
262
  *
263
263
  * @type {number}
264
- * @default 0
264
+ * @default 1
265
265
  */
266
266
  this.displacementScale = 1;
267
267
 
@@ -224,7 +224,7 @@ class MeshToonMaterial extends Material {
224
224
  * map set, this value is not applied.
225
225
  *
226
226
  * @type {number}
227
- * @default 0
227
+ * @default 1
228
228
  */
229
229
  this.displacementScale = 1;
230
230
 
@@ -209,7 +209,7 @@ const mvpLine = Fn( ( { material } ) => {
209
209
  // get the offset direction as perpendicular to the view vector
210
210
 
211
211
  const worldDir = end.xyz.sub( start.xyz ).normalize();
212
- const tmpFwd = mix( start.xyz, end.xyz, 0.5 ).normalize();
212
+ const tmpFwd = perspective.select( mix( start.xyz, end.xyz, 0.5 ).normalize(), vec3( 0.0, 0.0, - 1.0 ) );
213
213
  const worldUp = worldDir.cross( tmpFwd ).normalize();
214
214
  const worldFwd = worldDir.cross( worldUp );
215
215
 
@@ -246,7 +246,13 @@ const mvpLine = Fn( ( { material } ) => {
246
246
  const clipPose = vec3().toVar();
247
247
 
248
248
  clipPose.assign( positionGeometry.y.lessThan( 0.5 ).select( ndcStart, ndcEnd ) );
249
- clip.z.assign( clipPose.z.mul( clip.w ) );
249
+
250
+ If( clip.w.greaterThan( 0.0 ), () => {
251
+
252
+ // only shift the depth of vertices in front of the camera (#35137)
253
+ clip.z.assign( clipPose.z.mul( clip.w ) );
254
+
255
+ } );
250
256
 
251
257
  } else {
252
258
 
@@ -322,15 +328,31 @@ const alphaLine = Fn( ( { material, renderer } ) => {
322
328
 
323
329
  if ( useWorldUnits ) {
324
330
 
325
- // Find the closest points on the view ray and the line segment
326
- const rayEnd = worldPos.xyz.normalize().mul( 1e5 );
327
- const lineDir = worldEnd.sub( worldStart );
328
- const params = closestLineToLine( { p1: worldStart, p2: worldEnd, p3: vec3( 0.0, 0.0, 0.0 ), p4: rayEnd } );
331
+ const len = float().toVar();
332
+
333
+ const orthographic = cameraProjectionMatrix.element( 2 ).element( 3 ).notEqual( - 1.0 ).toConst();
334
+
335
+ If( orthographic, () => {
336
+
337
+ // View rays are parallel to the z axis so the distance reduces to camera-space XY
338
+ const lineDir = worldEnd.xy.sub( worldStart.xy );
339
+ const t = worldPos.xy.sub( worldStart.xy ).dot( lineDir ).div( lineDir.dot( lineDir ) ).clamp();
340
+ len.assign( worldStart.xy.add( lineDir.mul( t ) ).sub( worldPos.xy ).length() );
341
+
342
+ } ).Else( () => {
343
+
344
+ // Find the closest points on the view ray and the line segment
345
+ const rayEnd = worldPos.xyz.normalize().mul( 1e5 );
346
+ const lineDir = worldEnd.sub( worldStart );
347
+ const params = closestLineToLine( { p1: worldStart, p2: worldEnd, p3: vec3( 0.0, 0.0, 0.0 ), p4: rayEnd } );
348
+
349
+ const p1 = worldStart.add( lineDir.mul( params.x ) );
350
+ const p2 = rayEnd.mul( params.y );
351
+ const delta = p1.sub( p2 );
352
+ len.assign( delta.length() );
353
+
354
+ } );
329
355
 
330
- const p1 = worldStart.add( lineDir.mul( params.x ) );
331
- const p2 = rayEnd.mul( params.y );
332
- const delta = p1.sub( p2 );
333
- const len = delta.length();
334
356
  const norm = len.div( materialLineWidth );
335
357
 
336
358
  if ( ! useDash ) {
@@ -45,6 +45,19 @@ class MeshLambertNodeMaterial extends NodeMaterial {
45
45
  */
46
46
  this.lights = true;
47
47
 
48
+ /**
49
+ * The emissive color of lambert materials is by default inferred from the `emissive`,
50
+ * `emissiveIntensity` and `emissiveMap` properties. This node property allows to
51
+ * overwrite the default and define the emissive color with a node instead.
52
+ *
53
+ * If you don't want to overwrite the emissive color but modify the existing
54
+ * value instead, use {@link materialEmissive}.
55
+ *
56
+ * @type {?Node<vec3>}
57
+ * @default null
58
+ */
59
+ this.emissiveNode = null;
60
+
48
61
  this.setDefaultValues( _defaultValues );
49
62
 
50
63
  this.setValues( parameters );
@@ -48,6 +48,19 @@ class MeshPhongNodeMaterial extends NodeMaterial {
48
48
  */
49
49
  this.lights = true;
50
50
 
51
+ /**
52
+ * The emissive color of phong materials is by default inferred from the `emissive`,
53
+ * `emissiveIntensity` and `emissiveMap` properties. This node property allows to
54
+ * overwrite the default and define the emissive color with a node instead.
55
+ *
56
+ * If you don't want to overwrite the emissive color but modify the existing
57
+ * value instead, use {@link materialEmissive}.
58
+ *
59
+ * @type {?Node<vec3>}
60
+ * @default null
61
+ */
62
+ this.emissiveNode = null;
63
+
51
64
  /**
52
65
  * The shininess of phong materials is by default inferred from the `shininess`
53
66
  * property. This node property allows to overwrite the default
@@ -1,5 +1,5 @@
1
- import { clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, specularColorBlended, specularF90, diffuseColor, metalness, roughness, anisotropy, alphaT, anisotropyT, anisotropyB, ior, transmission, thickness, attenuationDistance, attenuationColor, dispersion, retroreflectivity } from '../../nodes/core/PropertyNode.js';
2
- import { materialClearcoat, materialClearcoatRoughness, materialClearcoatNormal, materialSheen, materialSheenRoughness, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialSpecularIntensity, materialSpecularColor, materialAnisotropy, materialIOR, materialTransmission, materialThickness, materialAttenuationDistance, materialAttenuationColor, materialDispersion, materialRetroreflectivity } from '../../nodes/accessors/MaterialNode.js';
1
+ import { clearcoat, clearcoatRoughness, diffuseRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, specularColorBlended, specularF90, diffuseColor, metalness, roughness, anisotropy, alphaT, anisotropyT, anisotropyB, ior, transmission, thickness, attenuationDistance, attenuationColor, dispersion, retroreflectivity } from '../../nodes/core/PropertyNode.js';
2
+ import { materialClearcoat, materialClearcoatRoughness, materialClearcoatNormal, materialDiffuseRoughness, materialSheen, materialSheenRoughness, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialSpecularIntensity, materialSpecularColor, materialAnisotropy, materialIOR, materialTransmission, materialThickness, materialAttenuationDistance, materialAttenuationColor, materialDispersion, materialRetroreflectivity } from '../../nodes/accessors/MaterialNode.js';
3
3
  import { float, vec2, vec3, If } from '../../nodes/tsl/TSLBase.js';
4
4
  import getRoughness from '../../nodes/functions/material/getRoughness.js';
5
5
  import { TBNViewMatrix } from '../../nodes/accessors/AccessorsUtils.js';
@@ -69,6 +69,19 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
69
69
  */
70
70
  this.clearcoatRoughnessNode = null;
71
71
 
72
+ /**
73
+ * The diffuse roughness of physical materials is by default inferred from the
74
+ * `diffuseRoughness` and `diffuseRoughnessMap` properties. This node property allows to overwrite the
75
+ * default and define the diffuse roughness with a node instead.
76
+ *
77
+ * If you don't want to overwrite the diffuse roughness but modify the existing
78
+ * value instead, use {@link materialDiffuseRoughness}.
79
+ *
80
+ * @type {?Node<float>}
81
+ * @default null
82
+ */
83
+ this.diffuseRoughnessNode = null;
84
+
72
85
  /**
73
86
  * The clearcoat normal of physical materials is by default inferred from the `clearcoatNormalMap`
74
87
  * property. This node property allows to overwrite the default
@@ -135,8 +148,8 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
135
148
  this.iridescenceIORNode = null;
136
149
 
137
150
  /**
138
- * The iridescence thickness of physical materials is by default inferred from the `iridescenceThicknessRange`
139
- * and `iridescenceThicknessMap` properties. This node property allows to overwrite the default
151
+ * The iridescence thickness of physical materials is by default inferred from the `iridescenceThicknessMinimum`,
152
+ * `iridescenceThicknessMaximum` and `iridescenceThicknessMap` properties. This node property allows to overwrite the default
140
153
  * and define the iridescence thickness with a node instead.
141
154
  *
142
155
  * If you don't want to overwrite the iridescence thickness but modify the existing
@@ -295,6 +308,18 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
295
308
 
296
309
  }
297
310
 
311
+ /**
312
+ * Whether the lighting model should use EON rough diffuse reflection or not.
313
+ *
314
+ * @type {boolean}
315
+ * @default false
316
+ */
317
+ get useDiffuseRoughness() {
318
+
319
+ return this.diffuseRoughness > 0 || this.diffuseRoughnessNode !== null;
320
+
321
+ }
322
+
298
323
  /**
299
324
  * Whether the lighting model should use iridescence or not.
300
325
  *
@@ -390,7 +415,7 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
390
415
  */
391
416
  setupLightingModel( /*builder*/ ) {
392
417
 
393
- return new PhysicalLightingModel( this.useClearcoat, this.useSheen, this.useIridescence, this.useAnisotropy, this.useTransmission, this.useDispersion, this.useRetroreflection );
418
+ return new PhysicalLightingModel( this.useClearcoat, this.useSheen, this.useIridescence, this.useAnisotropy, this.useTransmission, this.useDispersion, this.useRetroreflection, this.useDiffuseRoughness );
394
419
 
395
420
  }
396
421
 
@@ -403,6 +428,16 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
403
428
 
404
429
  super.setupVariants( builder );
405
430
 
431
+ // DIFFUSE ROUGHNESS
432
+
433
+ if ( this.useDiffuseRoughness ) {
434
+
435
+ const diffuseRoughnessNode = this.diffuseRoughnessNode ? float( this.diffuseRoughnessNode ) : materialDiffuseRoughness;
436
+
437
+ diffuseRoughness.assign( diffuseRoughnessNode.clamp() );
438
+
439
+ }
440
+
406
441
  // CLEARCOAT
407
442
 
408
443
  if ( this.useClearcoat ) {
@@ -44,6 +44,19 @@ class MeshToonNodeMaterial extends NodeMaterial {
44
44
  */
45
45
  this.lights = true;
46
46
 
47
+ /**
48
+ * The emissive color of toon materials is by default inferred from the `emissive`,
49
+ * `emissiveIntensity` and `emissiveMap` properties. This node property allows to
50
+ * overwrite the default and define the emissive color with a node instead.
51
+ *
52
+ * If you don't want to overwrite the emissive color but modify the existing
53
+ * value instead, use {@link materialEmissive}.
54
+ *
55
+ * @type {?Node<vec3>}
56
+ * @default null
57
+ */
58
+ this.emissiveNode = null;
59
+
47
60
  this.setDefaultValues( _defaultValues );
48
61
 
49
62
  this.setValues( parameters );
@@ -10,7 +10,7 @@ import { batch, batchColor } from '../../nodes/accessors/Batch.js';
10
10
  import { materialReference } from '../../nodes/accessors/MaterialReferenceNode.js';
11
11
  import { positionLocal, positionView } from '../../nodes/accessors/Position.js';
12
12
  import { skinning } from '../../nodes/accessors/Skinning.js';
13
- import { morphReference } from '../../nodes/accessors/Morph.js';
13
+ import { morphReference, morphColor } from '../../nodes/accessors/Morph.js';
14
14
  import { fwidth, mix, smoothstep } from '../../nodes/math/MathNode.js';
15
15
  import { float, vec3, vec4, bool } from '../../nodes/tsl/TSLBase.js';
16
16
  import AONode from '../../nodes/lighting/AONode.js';
@@ -239,8 +239,8 @@ class NodeMaterial extends Material {
239
239
 
240
240
  /**
241
241
  * The local vertex positions are computed based on multiple factors like the
242
- * attribute data, morphing or skinning. This node property allows to overwrite
243
- * the default and define local vertex positions with nodes instead.
242
+ * attribute data, morphing, skinning, instancing or batching. This node property
243
+ * allows to overwrite the default and define local vertex positions with nodes instead.
244
244
  *
245
245
  * If you don't want to overwrite the vertex positions but modify the existing
246
246
  * values instead, use {@link positionLocal}.
@@ -431,7 +431,7 @@ class NodeMaterial extends Material {
431
431
 
432
432
  for ( const { property, childNode } of this._getNodeChildren() ) {
433
433
 
434
- values.push( hashString( property.slice( 0, - 4 ) ), childNode.getCacheKey() );
434
+ values.push( hashString( property.slice( 0, - 4 ) ), childNode.getCacheKey( true ) );
435
435
 
436
436
  }
437
437
 
@@ -692,7 +692,7 @@ class NodeMaterial extends Material {
692
692
 
693
693
  } else if ( renderer.logarithmicDepthBuffer === true ) {
694
694
 
695
- if ( camera.isPerspectiveCamera ) {
695
+ if ( camera.isOrthographicCamera !== true ) {
696
696
 
697
697
  depthNode = viewZToLogarithmicDepth( positionView.z, cameraNear, cameraFar );
698
698
 
@@ -836,9 +836,11 @@ class NodeMaterial extends Material {
836
836
 
837
837
  // VERTEX COLORS
838
838
 
839
+ let vertexColorNode = null;
840
+
839
841
  if ( this.vertexColors === true && geometry.hasAttribute( 'color' ) ) {
840
842
 
841
- colorNode = colorNode.mul( vertexColor() );
843
+ vertexColorNode = vertexColor();
842
844
 
843
845
  }
844
846
 
@@ -846,13 +848,27 @@ class NodeMaterial extends Material {
846
848
 
847
849
  if ( object.instanceColor ) {
848
850
 
849
- colorNode = instanceColor.mul( colorNode );
851
+ vertexColorNode = vertexColorNode !== null ? vertexColorNode.mul( instanceColor ) : instanceColor;
850
852
 
851
853
  }
852
854
 
853
855
  if ( object.isBatchedMesh && object._colorsTexture ) {
854
856
 
855
- colorNode = batchColor.mul( colorNode );
857
+ vertexColorNode = vertexColorNode !== null ? vertexColorNode.mul( batchColor ) : batchColor;
858
+
859
+ }
860
+
861
+ // MORPHED COLORS
862
+
863
+ if ( this.vertexColors === true && geometry.morphAttributes.color !== undefined ) {
864
+
865
+ vertexColorNode = morphColor( vec4( vertexColorNode !== null ? vertexColorNode : 1 ) );
866
+
867
+ }
868
+
869
+ if ( vertexColorNode !== null ) {
870
+
871
+ colorNode = colorNode.mul( vertexColorNode );
856
872
 
857
873
  }
858
874
 
@@ -1320,21 +1336,25 @@ class NodeMaterial extends Material {
1320
1336
  */
1321
1337
  copy( source ) {
1322
1338
 
1323
- const descriptors = Object.getOwnPropertyDescriptors( this.constructor.prototype );
1339
+ for ( let prototype = Object.getPrototypeOf( this ); prototype !== Object.prototype; prototype = Object.getPrototypeOf( prototype ) ) {
1324
1340
 
1325
- for ( const property in descriptors ) {
1341
+ const descriptors = Object.getOwnPropertyDescriptors( prototype );
1326
1342
 
1327
- if ( descriptors[ property ].set !== undefined && source[ property ] !== undefined ) {
1343
+ for ( const property in descriptors ) {
1328
1344
 
1329
- const value = source[ property ];
1345
+ if ( descriptors[ property ].set !== undefined && source[ property ] !== undefined ) {
1330
1346
 
1331
- if ( this[ property ] && this[ property ].copy !== undefined ) {
1347
+ const value = source[ property ];
1332
1348
 
1333
- this[ property ].copy( value );
1349
+ if ( this[ property ] && this[ property ].copy !== undefined ) {
1334
1350
 
1335
- } else {
1351
+ this[ property ].copy( value );
1336
1352
 
1337
- this[ property ] = value;
1353
+ } else {
1354
+
1355
+ this[ property ] = value;
1356
+
1357
+ }
1338
1358
 
1339
1359
  }
1340
1360