@plastic-software/three 0.181.3 → 0.183.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +11330 -10017
  4. package/build/three.core.js +10011 -9493
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1414 -631
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +21 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +8007 -5427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +8005 -5426
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +2 -2
  16. package/examples/jsm/controls/ArcballControls.js +3 -3
  17. package/examples/jsm/controls/MapControls.js +55 -1
  18. package/examples/jsm/controls/OrbitControls.js +109 -6
  19. package/examples/jsm/controls/TrackballControls.js +6 -6
  20. package/examples/jsm/csm/CSM.js +2 -1
  21. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  22. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  23. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  24. package/examples/jsm/exporters/EXRExporter.js +1 -1
  25. package/examples/jsm/exporters/GLTFExporter.js +131 -4
  26. package/examples/jsm/exporters/USDZExporter.js +22 -3
  27. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  28. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  29. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  30. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  31. package/examples/jsm/helpers/ViewHelper.js +67 -8
  32. package/examples/jsm/inspector/Inspector.js +74 -14
  33. package/examples/jsm/inspector/RendererInspector.js +12 -2
  34. package/examples/jsm/inspector/tabs/Console.js +41 -7
  35. package/examples/jsm/inspector/tabs/Parameters.js +18 -2
  36. package/examples/jsm/inspector/tabs/Performance.js +2 -2
  37. package/examples/jsm/inspector/tabs/Viewer.js +4 -4
  38. package/examples/jsm/inspector/ui/Profiler.js +1836 -31
  39. package/examples/jsm/inspector/ui/Style.js +973 -14
  40. package/examples/jsm/inspector/ui/Tab.js +188 -1
  41. package/examples/jsm/inspector/ui/Values.js +17 -1
  42. package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
  43. package/examples/jsm/lines/LineMaterial.js +6 -0
  44. package/examples/jsm/loaders/3DMLoader.js +5 -4
  45. package/examples/jsm/loaders/3MFLoader.js +2 -2
  46. package/examples/jsm/loaders/AMFLoader.js +2 -2
  47. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  48. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  49. package/examples/jsm/loaders/EXRLoader.js +5 -5
  50. package/examples/jsm/loaders/FBXLoader.js +2 -4
  51. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  52. package/examples/jsm/loaders/GLTFLoader.js +122 -171
  53. package/examples/jsm/loaders/HDRLoader.js +0 -1
  54. package/examples/jsm/loaders/KMZLoader.js +5 -5
  55. package/examples/jsm/loaders/KTX2Loader.js +19 -3
  56. package/examples/jsm/loaders/LDrawLoader.js +2 -3
  57. package/examples/jsm/loaders/LWOLoader.js +7 -39
  58. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  59. package/examples/jsm/loaders/PCDLoader.js +4 -2
  60. package/examples/jsm/loaders/SVGLoader.js +1 -1
  61. package/examples/jsm/loaders/TDSLoader.js +0 -2
  62. package/examples/jsm/loaders/TGALoader.js +0 -2
  63. package/examples/jsm/loaders/USDLoader.js +100 -40
  64. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  65. package/examples/jsm/loaders/VOXLoader.js +660 -117
  66. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  67. package/examples/jsm/loaders/VTKLoader.js +37 -24
  68. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  69. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  70. package/examples/jsm/loaders/usd/USDAParser.js +447 -366
  71. package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
  72. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  73. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  74. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  75. package/examples/jsm/math/Octree.js +131 -1
  76. package/examples/jsm/misc/Volume.js +0 -1
  77. package/examples/jsm/misc/VolumeSlice.js +0 -1
  78. package/examples/jsm/objects/LensflareMesh.js +1 -1
  79. package/examples/jsm/objects/Sky.js +76 -4
  80. package/examples/jsm/objects/SkyMesh.js +127 -10
  81. package/examples/jsm/objects/Water.js +4 -3
  82. package/examples/jsm/objects/Water2.js +5 -3
  83. package/examples/jsm/objects/WaterMesh.js +5 -7
  84. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  85. package/examples/jsm/physics/JoltPhysics.js +10 -6
  86. package/examples/jsm/physics/RapierPhysics.js +9 -5
  87. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  88. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  89. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  90. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  91. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  92. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  93. package/examples/jsm/renderers/Projector.js +268 -30
  94. package/examples/jsm/renderers/SVGRenderer.js +193 -60
  95. package/examples/jsm/shaders/GTAOShader.js +19 -6
  96. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  97. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  98. package/examples/jsm/shaders/SAOShader.js +17 -4
  99. package/examples/jsm/shaders/SSAOShader.js +11 -1
  100. package/examples/jsm/shaders/SSRShader.js +6 -5
  101. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  102. package/examples/jsm/shaders/VignetteShader.js +1 -1
  103. package/examples/jsm/transpiler/AST.js +44 -0
  104. package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
  105. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  106. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  107. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  108. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  109. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  110. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  111. package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
  112. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  113. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  114. package/examples/jsm/tsl/display/CRT.js +150 -0
  115. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  116. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  117. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  118. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  119. package/examples/jsm/tsl/display/GTAONode.js +5 -4
  120. package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
  121. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  122. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  123. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  124. package/examples/jsm/tsl/display/OutlineNode.js +3 -3
  125. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  126. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  127. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  128. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  129. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  130. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  131. package/examples/jsm/tsl/display/SSGINode.js +8 -20
  132. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  133. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  134. package/examples/jsm/tsl/display/Shape.js +29 -0
  135. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  136. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  137. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  138. package/examples/jsm/tsl/display/TRAANode.js +273 -125
  139. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  140. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  141. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  142. package/examples/jsm/tsl/math/Bayer.js +40 -1
  143. package/examples/jsm/utils/LDrawUtils.js +1 -1
  144. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  145. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  146. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  147. package/package.json +20 -26
  148. package/src/Three.Core.js +2 -1
  149. package/src/Three.TSL.js +19 -11
  150. package/src/Three.WebGPU.Nodes.js +2 -0
  151. package/src/Three.WebGPU.js +3 -0
  152. package/src/Three.js +1 -0
  153. package/src/animation/AnimationAction.js +1 -1
  154. package/src/animation/AnimationClip.js +1 -1
  155. package/src/animation/AnimationMixer.js +6 -0
  156. package/src/animation/AnimationUtils.js +1 -12
  157. package/src/animation/KeyframeTrack.js +47 -8
  158. package/src/animation/PropertyMixer.js +4 -4
  159. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  160. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  161. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  162. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  163. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  164. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  165. package/src/audio/Audio.js +1 -1
  166. package/src/audio/AudioListener.js +5 -3
  167. package/src/cameras/Camera.js +32 -2
  168. package/src/cameras/CubeCamera.js +20 -0
  169. package/src/constants.js +90 -5
  170. package/src/core/BufferGeometry.js +14 -2
  171. package/src/core/Clock.js +7 -0
  172. package/src/core/Object3D.js +56 -4
  173. package/src/core/Raycaster.js +2 -2
  174. package/src/core/RenderTarget.js +3 -4
  175. package/src/extras/PMREMGenerator.js +7 -18
  176. package/src/extras/TextureUtils.js +5 -1
  177. package/src/geometries/ExtrudeGeometry.js +2 -2
  178. package/src/geometries/PolyhedronGeometry.js +1 -1
  179. package/src/geometries/TorusGeometry.js +8 -3
  180. package/src/helpers/CameraHelper.js +3 -0
  181. package/src/helpers/DirectionalLightHelper.js +4 -1
  182. package/src/helpers/HemisphereLightHelper.js +3 -0
  183. package/src/helpers/PointLightHelper.js +1 -25
  184. package/src/helpers/SpotLightHelper.js +3 -0
  185. package/src/lights/DirectionalLight.js +13 -0
  186. package/src/lights/HemisphereLight.js +10 -0
  187. package/src/lights/Light.js +1 -11
  188. package/src/lights/LightProbe.js +0 -15
  189. package/src/lights/LightShadow.js +15 -6
  190. package/src/lights/PointLight.js +15 -0
  191. package/src/lights/PointLightShadow.js +0 -86
  192. package/src/lights/SpotLight.js +22 -1
  193. package/src/lights/webgpu/IESSpotLight.js +2 -1
  194. package/src/loaders/Cache.js +28 -0
  195. package/src/loaders/FileLoader.js +1 -1
  196. package/src/loaders/ImageBitmapLoader.js +8 -3
  197. package/src/loaders/Loader.js +6 -0
  198. package/src/loaders/MaterialLoader.js +2 -1
  199. package/src/loaders/ObjectLoader.js +21 -2
  200. package/src/loaders/nodes/NodeLoader.js +2 -2
  201. package/src/materials/Material.js +2 -0
  202. package/src/materials/MeshLambertMaterial.js +9 -0
  203. package/src/materials/MeshPhongMaterial.js +9 -0
  204. package/src/materials/ShaderMaterial.js +20 -1
  205. package/src/materials/nodes/Line2NodeMaterial.js +7 -7
  206. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  207. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  208. package/src/materials/nodes/NodeMaterial.js +72 -25
  209. package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
  210. package/src/math/Line3.js +3 -5
  211. package/src/math/MathUtils.js +10 -10
  212. package/src/math/Matrix4.js +74 -65
  213. package/src/math/Quaternion.js +3 -29
  214. package/src/math/Sphere.js +1 -1
  215. package/src/math/Vector3.js +3 -5
  216. package/src/math/interpolants/BezierInterpolant.js +108 -0
  217. package/src/nodes/Nodes.js +87 -68
  218. package/src/nodes/TSL.js +6 -6
  219. package/src/nodes/accessors/Arrays.js +1 -1
  220. package/src/nodes/accessors/BatchNode.js +10 -10
  221. package/src/nodes/accessors/Bitangent.js +5 -5
  222. package/src/nodes/accessors/BufferAttributeNode.js +98 -12
  223. package/src/nodes/accessors/BufferNode.js +29 -2
  224. package/src/nodes/accessors/Camera.js +149 -28
  225. package/src/nodes/accessors/ClippingNode.js +4 -4
  226. package/src/nodes/accessors/CubeTextureNode.js +20 -1
  227. package/src/nodes/accessors/InstanceNode.js +148 -43
  228. package/src/nodes/accessors/MaterialNode.js +9 -1
  229. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  230. package/src/nodes/accessors/ModelNode.js +1 -1
  231. package/src/nodes/accessors/Normal.js +11 -11
  232. package/src/nodes/accessors/Position.js +34 -2
  233. package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
  234. package/src/nodes/accessors/ReferenceNode.js +4 -4
  235. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  236. package/src/nodes/accessors/SceneProperties.js +53 -0
  237. package/src/nodes/accessors/SkinningNode.js +27 -26
  238. package/src/nodes/accessors/StorageBufferNode.js +4 -21
  239. package/src/nodes/accessors/StorageTextureNode.js +37 -1
  240. package/src/nodes/accessors/Tangent.js +4 -14
  241. package/src/nodes/accessors/Texture3DNode.js +32 -35
  242. package/src/nodes/accessors/TextureNode.js +58 -22
  243. package/src/nodes/accessors/UniformArrayNode.js +4 -2
  244. package/src/nodes/accessors/UserDataNode.js +1 -2
  245. package/src/nodes/accessors/VertexColorNode.js +1 -2
  246. package/src/nodes/code/FunctionNode.js +1 -2
  247. package/src/nodes/core/ArrayNode.js +20 -1
  248. package/src/nodes/core/AssignNode.js +2 -2
  249. package/src/nodes/core/AttributeNode.js +2 -2
  250. package/src/nodes/core/ContextNode.js +103 -4
  251. package/src/nodes/core/MRTNode.js +48 -2
  252. package/src/nodes/core/Node.js +29 -3
  253. package/src/nodes/core/NodeBuilder.js +170 -53
  254. package/src/nodes/core/NodeError.js +28 -0
  255. package/src/nodes/core/NodeFrame.js +12 -4
  256. package/src/nodes/core/NodeUtils.js +10 -8
  257. package/src/nodes/core/OutputStructNode.js +12 -10
  258. package/src/nodes/core/ParameterNode.js +3 -3
  259. package/src/nodes/core/PropertyNode.js +19 -3
  260. package/src/nodes/core/StackNode.js +65 -16
  261. package/src/nodes/core/StackTrace.js +139 -0
  262. package/src/nodes/core/StructNode.js +16 -2
  263. package/src/nodes/core/StructTypeNode.js +11 -17
  264. package/src/nodes/core/SubBuildNode.js +1 -1
  265. package/src/nodes/core/UniformNode.js +21 -5
  266. package/src/nodes/core/VarNode.js +47 -22
  267. package/src/nodes/core/VaryingNode.js +1 -18
  268. package/src/nodes/display/BlendModes.js +0 -64
  269. package/src/nodes/display/ColorAdjustment.js +17 -0
  270. package/src/nodes/display/ColorSpaceNode.js +3 -3
  271. package/src/nodes/display/NormalMapNode.js +39 -4
  272. package/src/nodes/display/PassNode.js +98 -9
  273. package/src/nodes/display/RenderOutputNode.js +3 -3
  274. package/src/nodes/display/ScreenNode.js +3 -1
  275. package/src/nodes/display/ToneMappingNode.js +1 -1
  276. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  277. package/src/nodes/display/ViewportDepthNode.js +52 -4
  278. package/src/nodes/display/ViewportTextureNode.js +21 -4
  279. package/src/nodes/fog/Fog.js +18 -35
  280. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  281. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  282. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  283. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  284. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  285. package/src/nodes/geometry/RangeNode.js +4 -2
  286. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
  287. package/src/nodes/gpgpu/ComputeNode.js +5 -4
  288. package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
  289. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  290. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  291. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  292. package/src/nodes/lighting/LightsNode.js +2 -2
  293. package/src/nodes/lighting/PointShadowNode.js +162 -149
  294. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  295. package/src/nodes/lighting/ShadowNode.js +97 -41
  296. package/src/nodes/math/BitcountNode.js +433 -0
  297. package/src/nodes/math/ConditionalNode.js +2 -2
  298. package/src/nodes/math/MathNode.js +3 -40
  299. package/src/nodes/math/OperatorNode.js +2 -1
  300. package/src/nodes/math/PackFloatNode.js +98 -0
  301. package/src/nodes/math/UnpackFloatNode.js +96 -0
  302. package/src/nodes/pmrem/PMREMNode.js +1 -1
  303. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  304. package/src/nodes/tsl/TSLCore.js +17 -14
  305. package/src/nodes/utils/ArrayElementNode.js +13 -0
  306. package/src/nodes/utils/DebugNode.js +11 -11
  307. package/src/nodes/utils/EventNode.js +1 -2
  308. package/src/nodes/utils/JoinNode.js +2 -2
  309. package/src/nodes/utils/LoopNode.js +1 -1
  310. package/src/nodes/utils/MemberNode.js +1 -1
  311. package/src/nodes/utils/Packing.js +13 -1
  312. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  313. package/src/nodes/utils/RTTNode.js +1 -1
  314. package/src/nodes/utils/ReflectorNode.js +3 -4
  315. package/src/nodes/utils/SampleNode.js +1 -1
  316. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  317. package/src/nodes/utils/UVUtils.js +28 -0
  318. package/src/objects/BatchedMesh.js +27 -14
  319. package/src/objects/InstancedMesh.js +11 -0
  320. package/src/objects/Line.js +1 -1
  321. package/src/objects/Mesh.js +1 -1
  322. package/src/objects/Points.js +1 -1
  323. package/src/objects/Skeleton.js +9 -0
  324. package/src/renderers/WebGLRenderer.js +178 -92
  325. package/src/renderers/common/Backend.js +29 -0
  326. package/src/renderers/common/Background.js +24 -11
  327. package/src/renderers/common/BindGroup.js +1 -9
  328. package/src/renderers/common/Binding.js +11 -0
  329. package/src/renderers/common/Bindings.js +27 -12
  330. package/src/renderers/common/BlendMode.js +143 -0
  331. package/src/renderers/common/Buffer.js +40 -0
  332. package/src/renderers/common/BundleGroup.js +1 -1
  333. package/src/renderers/common/ChainMap.js +30 -6
  334. package/src/renderers/common/CubeRenderTarget.js +50 -6
  335. package/src/renderers/common/Geometries.js +29 -3
  336. package/src/renderers/common/Lighting.js +5 -21
  337. package/src/renderers/common/Pipelines.js +4 -4
  338. package/src/renderers/common/PostProcessing.js +8 -206
  339. package/src/renderers/common/RenderBundles.js +2 -1
  340. package/src/renderers/common/RenderContext.js +16 -0
  341. package/src/renderers/common/RenderContexts.js +33 -49
  342. package/src/renderers/common/RenderLists.js +2 -1
  343. package/src/renderers/common/RenderObject.js +15 -3
  344. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  345. package/src/renderers/common/RenderObjects.js +18 -2
  346. package/src/renderers/common/RenderPipeline.js +203 -17
  347. package/src/renderers/common/Renderer.js +257 -72
  348. package/src/renderers/common/Sampler.js +4 -4
  349. package/src/renderers/common/StorageBuffer.js +13 -1
  350. package/src/renderers/common/Textures.js +17 -1
  351. package/src/renderers/common/TimestampQueryPool.js +5 -3
  352. package/src/renderers/common/Uniform.js +8 -0
  353. package/src/renderers/common/UniformsGroup.js +61 -0
  354. package/src/renderers/common/XRManager.js +3 -2
  355. package/src/renderers/common/extras/PMREMGenerator.js +2 -8
  356. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  357. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
  358. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  359. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  360. package/src/renderers/shaders/DFGLUTData.js +19 -34
  361. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  362. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  363. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  364. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  365. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  366. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  371. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
  372. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  375. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  376. package/src/renderers/shaders/ShaderChunk.js +3 -3
  377. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  378. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  379. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  380. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  381. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  382. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  383. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  384. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  386. package/src/renderers/shaders/ShaderLib.js +7 -5
  387. package/src/renderers/shaders/UniformsLib.js +0 -3
  388. package/src/renderers/webgl/WebGLBackground.js +2 -2
  389. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  390. package/src/renderers/webgl/WebGLCapabilities.js +3 -4
  391. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  392. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  393. package/src/renderers/webgl/WebGLLights.js +18 -1
  394. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  395. package/src/renderers/webgl/WebGLObjects.js +3 -1
  396. package/src/renderers/webgl/WebGLOutput.js +267 -0
  397. package/src/renderers/webgl/WebGLProgram.js +45 -109
  398. package/src/renderers/webgl/WebGLPrograms.js +45 -49
  399. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  400. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  401. package/src/renderers/webgl/WebGLState.js +32 -37
  402. package/src/renderers/webgl/WebGLTextures.js +89 -28
  403. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  404. package/src/renderers/webgl/WebGLUtils.js +6 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
  407. package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
  408. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
  409. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
  410. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  411. package/src/renderers/webgpu/WebGPUBackend.js +119 -13
  412. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  413. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
  414. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
  415. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  416. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
  417. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  418. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  419. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
  420. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  421. package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
  422. package/src/renderers/webxr/WebXRManager.js +2 -2
  423. package/src/textures/CubeDepthTexture.js +76 -0
  424. package/src/textures/Source.js +1 -1
  425. package/src/textures/Texture.js +3 -3
  426. package/src/utils.js +258 -3
  427. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  428. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  429. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  430. package/src/nodes/accessors/SceneNode.js +0 -145
  431. package/src/nodes/code/ScriptableNode.js +0 -726
  432. package/src/nodes/code/ScriptableValueNode.js +0 -253
  433. package/src/nodes/display/PosterizeNode.js +0 -65
  434. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  435. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  436. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  437. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -1,13 +1,5 @@
1
1
  import { LightShadow } from './LightShadow.js';
2
2
  import { PerspectiveCamera } from '../cameras/PerspectiveCamera.js';
3
- import { Matrix4 } from '../math/Matrix4.js';
4
- import { Vector2 } from '../math/Vector2.js';
5
- import { Vector3 } from '../math/Vector3.js';
6
- import { Vector4 } from '../math/Vector4.js';
7
-
8
- const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
9
- const _lightPositionWorld = /*@__PURE__*/ new Vector3();
10
- const _lookTarget = /*@__PURE__*/ new Vector3();
11
3
 
12
4
  /**
13
5
  * Represents the shadow configuration of point lights.
@@ -32,84 +24,6 @@ class PointLightShadow extends LightShadow {
32
24
  */
33
25
  this.isPointLightShadow = true;
34
26
 
35
- this._frameExtents = new Vector2( 4, 2 );
36
-
37
- this._viewportCount = 6;
38
-
39
- this._viewports = [
40
- // These viewports map a cube-map onto a 2D texture with the
41
- // following orientation:
42
- //
43
- // xzXZ
44
- // y Y
45
- //
46
- // X - Positive x direction
47
- // x - Negative x direction
48
- // Y - Positive y direction
49
- // y - Negative y direction
50
- // Z - Positive z direction
51
- // z - Negative z direction
52
-
53
- // positive X
54
- new Vector4( 2, 1, 1, 1 ),
55
- // negative X
56
- new Vector4( 0, 1, 1, 1 ),
57
- // positive Z
58
- new Vector4( 3, 1, 1, 1 ),
59
- // negative Z
60
- new Vector4( 1, 1, 1, 1 ),
61
- // positive Y
62
- new Vector4( 3, 0, 1, 1 ),
63
- // negative Y
64
- new Vector4( 1, 0, 1, 1 )
65
- ];
66
-
67
- this._cubeDirections = [
68
- new Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),
69
- new Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )
70
- ];
71
-
72
- this._cubeUps = [
73
- new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),
74
- new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ), new Vector3( 0, 0, - 1 )
75
- ];
76
-
77
- }
78
-
79
- /**
80
- * Update the matrices for the camera and shadow, used internally by the renderer.
81
- *
82
- * @param {Light} light - The light for which the shadow is being rendered.
83
- * @param {number} [viewportIndex=0] - The viewport index.
84
- */
85
- updateMatrices( light, viewportIndex = 0 ) {
86
-
87
- const camera = this.camera;
88
- const shadowMatrix = this.matrix;
89
-
90
- const far = light.distance || camera.far;
91
-
92
- if ( far !== camera.far ) {
93
-
94
- camera.far = far;
95
- camera.updateProjectionMatrix();
96
-
97
- }
98
-
99
- _lightPositionWorld.setFromMatrixPosition( light.matrixWorld );
100
- camera.position.copy( _lightPositionWorld );
101
-
102
- _lookTarget.copy( camera.position );
103
- _lookTarget.add( this._cubeDirections[ viewportIndex ] );
104
- camera.up.copy( this._cubeUps[ viewportIndex ] );
105
- camera.lookAt( _lookTarget );
106
- camera.updateMatrixWorld();
107
-
108
- shadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );
109
-
110
- _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
111
- this._frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
112
-
113
27
  }
114
28
 
115
29
  }
@@ -147,6 +147,8 @@ class SpotLight extends Light {
147
147
 
148
148
  dispose() {
149
149
 
150
+ super.dispose();
151
+
150
152
  this.shadow.dispose();
151
153
 
152
154
  }
@@ -161,13 +163,32 @@ class SpotLight extends Light {
161
163
  this.decay = source.decay;
162
164
 
163
165
  this.target = source.target.clone();
164
-
166
+ this.map = source.map;
165
167
  this.shadow = source.shadow.clone();
166
168
 
167
169
  return this;
168
170
 
169
171
  }
170
172
 
173
+ toJSON( meta ) {
174
+
175
+ const data = super.toJSON( meta );
176
+
177
+ data.object.distance = this.distance;
178
+ data.object.angle = this.angle;
179
+ data.object.decay = this.decay;
180
+ data.object.penumbra = this.penumbra;
181
+
182
+ data.object.target = this.target.uuid;
183
+
184
+ if ( this.map && this.map.isTexture ) data.object.map = this.map.toJSON( meta ).uuid;
185
+
186
+ data.object.shadow = this.shadow.toJSON();
187
+
188
+ return data;
189
+
190
+ }
191
+
171
192
  }
172
193
 
173
194
  export { SpotLight };
@@ -22,7 +22,8 @@ class IESSpotLight extends SpotLight {
22
22
  super( color, intensity, distance, angle, penumbra, decay );
23
23
 
24
24
  /**
25
- * TODO
25
+ * The IES map. It's a lookup table that stores normalized attenuation factors
26
+ * (0.0 to 1.0) that represent the light's intensity at a specific angle.
26
27
  *
27
28
  * @type {?Texture}
28
29
  * @default null
@@ -35,6 +35,8 @@ const Cache = {
35
35
 
36
36
  if ( this.enabled === false ) return;
37
37
 
38
+ if ( isBlobURL( key ) ) return;
39
+
38
40
  // log( 'Cache', 'Adding key:', key );
39
41
 
40
42
  this.files[ key ] = file;
@@ -52,6 +54,8 @@ const Cache = {
52
54
 
53
55
  if ( this.enabled === false ) return;
54
56
 
57
+ if ( isBlobURL( key ) ) return;
58
+
55
59
  // log( 'Cache', 'Checking key:', key );
56
60
 
57
61
  return this.files[ key ];
@@ -83,5 +87,29 @@ const Cache = {
83
87
 
84
88
  };
85
89
 
90
+ /**
91
+ * Returns true if the given cache key contains the blob: scheme.
92
+ *
93
+ * @private
94
+ * @param {string} key - The cache key.
95
+ * @return {boolean} Whether the given cache key contains the blob: scheme or not.
96
+ */
97
+ function isBlobURL( key ) {
98
+
99
+ try {
100
+
101
+ const urlString = key.slice( key.indexOf( ':' ) + 1 ); // remove type identifier
102
+
103
+ const url = new URL( urlString );
104
+ return url.protocol === 'blob:';
105
+
106
+ } catch ( e ) {
107
+
108
+ // If the string is not a valid URL, it throws an error
109
+ return false;
110
+
111
+ }
112
+
113
+ }
86
114
 
87
115
  export { Cache };
@@ -43,7 +43,7 @@ class FileLoader extends Loader {
43
43
 
44
44
  /**
45
45
  * The expected mime type. Valid values can be found
46
- * [here](hhttps://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#mimetype)
46
+ * [here](https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#mimetype)
47
47
  *
48
48
  * @type {string}
49
49
  */
@@ -10,11 +10,16 @@ const _errorMap = new WeakMap();
10
10
  * textures for rendering.
11
11
  *
12
12
  * Note that {@link Texture#flipY} and {@link Texture#premultiplyAlpha} are ignored with image bitmaps.
13
- * They needs these configuration on bitmap creation unlike regular images need them on uploading to GPU.
13
+ * These options need to be configured via {@link ImageBitmapLoader#setOptions} prior to loading,
14
+ * unlike regular images which can be configured on the Texture to set these options on GPU upload instead.
14
15
  *
15
- * You need to set the equivalent options via {@link ImageBitmapLoader#setOptions} instead.
16
+ * To match the default behaviour of {@link Texture}, the following options are needed:
16
17
  *
17
- * Also note that unlike {@link FileLoader}, this loader avoids multiple concurrent requests to the same URL only if `Cache` is enabled.
18
+ * ```js
19
+ * { imageOrientation: 'flipY', premultiplyAlpha: 'none' }
20
+ * ```
21
+ *
22
+ * Also note that unlike {@link FileLoader}, this loader will only avoid multiple concurrent requests to the same URL if {@link Cache} is enabled.
18
23
  *
19
24
  * ```js
20
25
  * const loader = new THREE.ImageBitmapLoader();
@@ -61,6 +61,12 @@ class Loader {
61
61
  */
62
62
  this.requestHeader = {};
63
63
 
64
+ if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {
65
+
66
+ __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );
67
+
68
+ }
69
+
64
70
  }
65
71
 
66
72
  /**
@@ -29,7 +29,7 @@ import {
29
29
  import { error, warn } from '../utils.js';
30
30
 
31
31
  /**
32
- * Class for loading geometries. The files are internally
32
+ * Class for loading materials. The files are internally
33
33
  * loaded via {@link FileLoader}.
34
34
  *
35
35
  * ```js
@@ -203,6 +203,7 @@ class MaterialLoader extends Loader {
203
203
  if ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;
204
204
  if ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;
205
205
  if ( json.forceSinglePass !== undefined ) material.forceSinglePass = json.forceSinglePass;
206
+ if ( json.allowOverride !== undefined ) material.allowOverride = json.allowOverride;
206
207
 
207
208
  if ( json.visible !== undefined ) material.visible = json.visible;
208
209
 
@@ -21,6 +21,7 @@ import {
21
21
  } from '../constants.js';
22
22
  import { InstancedBufferAttribute } from '../core/InstancedBufferAttribute.js';
23
23
  import { Color } from '../math/Color.js';
24
+ import { Vector3 } from '../math/Vector3.js';
24
25
  import { Object3D } from '../core/Object3D.js';
25
26
  import { Group } from '../objects/Group.js';
26
27
  import { InstancedMesh } from '../objects/InstancedMesh.js';
@@ -64,6 +65,7 @@ import * as Geometries from '../geometries/Geometries.js';
64
65
  import { getTypedArray, error, warn } from '../utils.js';
65
66
  import { Box3 } from '../math/Box3.js';
66
67
  import { Sphere } from '../math/Sphere.js';
68
+ import { SphericalHarmonics3 } from '../math/SphericalHarmonics3.js';
67
69
 
68
70
  /**
69
71
  * A loader for loading a JSON resource in the [JSON Object/Scene format](https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4).
@@ -170,7 +172,17 @@ class ObjectLoader extends Loader {
170
172
 
171
173
  const text = await loader.loadAsync( url, onProgress );
172
174
 
173
- const json = JSON.parse( text );
175
+ let json;
176
+
177
+ try {
178
+
179
+ json = JSON.parse( text );
180
+
181
+ } catch ( e ) {
182
+
183
+ throw new Error( 'ObjectLoader: Can\'t parse ' + url + '. ' + e.message );
184
+
185
+ }
174
186
 
175
187
  const metadata = json.metadata;
176
188
 
@@ -922,7 +934,8 @@ class ObjectLoader extends Loader {
922
934
 
923
935
  case 'LightProbe':
924
936
 
925
- object = new LightProbe().fromJSON( data );
937
+ const sh = new SphericalHarmonics3().fromArray( data.sh );
938
+ object = new LightProbe( sh, data.intensity );
926
939
 
927
940
  break;
928
941
 
@@ -1114,6 +1127,11 @@ class ObjectLoader extends Loader {
1114
1127
 
1115
1128
  if ( data.up !== undefined ) object.up.fromArray( data.up );
1116
1129
 
1130
+ if ( data.pivot !== undefined ) object.pivot = new Vector3().fromArray( data.pivot );
1131
+
1132
+ if ( data.morphTargetDictionary !== undefined ) object.morphTargetDictionary = Object.assign( {}, data.morphTargetDictionary );
1133
+ if ( data.morphTargetInfluences !== undefined ) object.morphTargetInfluences = data.morphTargetInfluences.slice();
1134
+
1117
1135
  if ( data.castShadow !== undefined ) object.castShadow = data.castShadow;
1118
1136
  if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;
1119
1137
 
@@ -1131,6 +1149,7 @@ class ObjectLoader extends Loader {
1131
1149
  if ( data.visible !== undefined ) object.visible = data.visible;
1132
1150
  if ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;
1133
1151
  if ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;
1152
+ if ( data.static !== undefined ) object.static = data.static;
1134
1153
  if ( data.userData !== undefined ) object.userData = data.userData;
1135
1154
  if ( data.layers !== undefined ) object.layers.mask = data.layers;
1136
1155
 
@@ -1,4 +1,4 @@
1
- import { nodeObject, float } from '../../nodes/tsl/TSLBase.js';
1
+ import { float } from '../../nodes/tsl/TSLBase.js';
2
2
 
3
3
  import { Loader } from '../Loader.js';
4
4
  import { FileLoader } from '../../loaders/FileLoader.js';
@@ -185,7 +185,7 @@ class NodeLoader extends Loader {
185
185
 
186
186
  }
187
187
 
188
- return nodeObject( new this.nodes[ type ]() );
188
+ return new this.nodes[ type ]();
189
189
 
190
190
  }
191
191
 
@@ -832,6 +832,7 @@ class Material extends EventDispatcher {
832
832
  if ( this.alphaToCoverage === true ) data.alphaToCoverage = true;
833
833
  if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = true;
834
834
  if ( this.forceSinglePass === true ) data.forceSinglePass = true;
835
+ if ( this.allowOverride === false ) data.allowOverride = false;
835
836
 
836
837
  if ( this.wireframe === true ) data.wireframe = true;
837
838
  if ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;
@@ -967,6 +968,7 @@ class Material extends EventDispatcher {
967
968
  this.alphaToCoverage = source.alphaToCoverage;
968
969
  this.premultipliedAlpha = source.premultipliedAlpha;
969
970
  this.forceSinglePass = source.forceSinglePass;
971
+ this.allowOverride = source.allowOverride;
970
972
 
971
973
  this.visible = source.visible;
972
974
 
@@ -267,6 +267,14 @@ class MeshLambertMaterial extends Material {
267
267
  */
268
268
  this.reflectivity = 1;
269
269
 
270
+ /**
271
+ * Scales the effect of the environment map by multiplying its color.
272
+ *
273
+ * @type {number}
274
+ * @default 1
275
+ */
276
+ this.envMapIntensity = 1.0;
277
+
270
278
  /**
271
279
  * The index of refraction (IOR) of air (approximately 1) divided by the
272
280
  * index of refraction of the material. It is used with environment mapping
@@ -373,6 +381,7 @@ class MeshLambertMaterial extends Material {
373
381
  this.envMapRotation.copy( source.envMapRotation );
374
382
  this.combine = source.combine;
375
383
  this.reflectivity = source.reflectivity;
384
+ this.envMapIntensity = source.envMapIntensity;
376
385
  this.refractionRatio = source.refractionRatio;
377
386
 
378
387
  this.wireframe = source.wireframe;
@@ -284,6 +284,14 @@ class MeshPhongMaterial extends Material {
284
284
  */
285
285
  this.reflectivity = 1;
286
286
 
287
+ /**
288
+ * Scales the effect of the environment map by multiplying its color.
289
+ *
290
+ * @type {number}
291
+ * @default 1
292
+ */
293
+ this.envMapIntensity = 1.0;
294
+
287
295
  /**
288
296
  * The index of refraction (IOR) of air (approximately 1) divided by the
289
297
  * index of refraction of the material. It is used with environment mapping
@@ -392,6 +400,7 @@ class MeshPhongMaterial extends Material {
392
400
  this.envMapRotation.copy( source.envMapRotation );
393
401
  this.combine = source.combine;
394
402
  this.reflectivity = source.reflectivity;
403
+ this.envMapIntensity = source.envMapIntensity;
395
404
  this.refractionRatio = source.refractionRatio;
396
405
 
397
406
  this.wireframe = source.wireframe;
@@ -158,9 +158,22 @@ class ShaderMaterial extends Material {
158
158
  this.wireframeLinewidth = 1;
159
159
 
160
160
  /**
161
- * Define whether the material color is affected by global fog settings; `true`
161
+ * Defines whether the material color is affected by global fog settings; `true`
162
162
  * to pass fog uniforms to the shader.
163
163
  *
164
+ * Setting this property to `true` requires the definition of fog uniforms. It is
165
+ * recommended to use `UniformsUtils.merge()` to combine the custom shader uniforms
166
+ * with predefined fog uniforms.
167
+ *
168
+ * ```js
169
+ * const material = new ShaderMaterial( {
170
+ * uniforms: UniformsUtils.merge( [ UniformsLib[ 'fog' ], shaderUniforms ] );
171
+ * vertexShader: vertexShader,
172
+ * fragmentShader: fragmentShader,
173
+ * fog: true
174
+ * } );
175
+ * ```
176
+ *
164
177
  * @type {boolean}
165
178
  * @default false
166
179
  */
@@ -279,6 +292,12 @@ class ShaderMaterial extends Material {
279
292
 
280
293
  this.glslVersion = source.glslVersion;
281
294
 
295
+ this.defaultAttributeValues = Object.assign( {}, source.defaultAttributeValues );
296
+
297
+ this.index0AttributeName = source.index0AttributeName;
298
+
299
+ this.uniformsNeedUpdate = source.uniformsNeedUpdate;
300
+
282
301
  return this;
283
302
 
284
303
  }
@@ -8,8 +8,8 @@ import { positionGeometry } from '../../nodes/accessors/Position.js';
8
8
  import { mix, smoothstep } from '../../nodes/math/MathNode.js';
9
9
  import { Fn, float, vec2, vec3, vec4, If } from '../../nodes/tsl/TSLBase.js';
10
10
  import { uv } from '../../nodes/accessors/UV.js';
11
- import { viewport } from '../../nodes/display/ScreenNode.js';
12
- import { viewportSharedTexture } from '../../nodes/display/ViewportSharedTextureNode.js';
11
+ import { screenDPR, viewport } from '../../nodes/display/ScreenNode.js';
12
+ import { viewportOpaqueMipTexture } from '../../nodes/display/ViewportTextureNode.js';
13
13
 
14
14
  import { LineDashedMaterial } from '../LineDashedMaterial.js';
15
15
  import { NoBlending } from '../../constants.js';
@@ -56,7 +56,7 @@ class Line2NodeMaterial extends NodeMaterial {
56
56
  * @type {boolean}
57
57
  * @default false
58
58
  */
59
- this.useColor = parameters.vertexColors;
59
+ this.vertexColors = parameters.vertexColors;
60
60
 
61
61
  /**
62
62
  * The dash offset.
@@ -133,7 +133,7 @@ class Line2NodeMaterial extends NodeMaterial {
133
133
  const { renderer } = builder;
134
134
 
135
135
  const useAlphaToCoverage = this._useAlphaToCoverage;
136
- const useColor = this.useColor;
136
+ const vertexColors = this.vertexColors;
137
137
  const useDash = this._useDash;
138
138
  const useWorldUnits = this._useWorldUnits;
139
139
 
@@ -300,7 +300,7 @@ class Line2NodeMaterial extends NodeMaterial {
300
300
  offset.assign( offset.mul( materialLineWidth ) );
301
301
 
302
302
  // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...
303
- offset.assign( offset.div( viewport.w ) );
303
+ offset.assign( offset.div( viewport.w.div( screenDPR ) ) );
304
304
 
305
305
  // select end
306
306
  clip.assign( positionGeometry.y.lessThan( 0.5 ).select( clipStart, clipEnd ) );
@@ -434,7 +434,7 @@ class Line2NodeMaterial extends NodeMaterial {
434
434
 
435
435
  } else {
436
436
 
437
- if ( useColor ) {
437
+ if ( vertexColors ) {
438
438
 
439
439
  const instanceColorStart = attribute( 'instanceColorStart' );
440
440
  const instanceColorEnd = attribute( 'instanceColorEnd' );
@@ -459,7 +459,7 @@ class Line2NodeMaterial extends NodeMaterial {
459
459
 
460
460
  const opacityNode = this.opacityNode ? float( this.opacityNode ) : materialOpacity;
461
461
 
462
- this.outputNode = vec4( this.colorNode.rgb.mul( opacityNode ).add( viewportSharedTexture().rgb.mul( opacityNode.oneMinus() ) ), this.colorNode.a );
462
+ this.outputNode = vec4( this.colorNode.rgb.mul( opacityNode ).add( viewportOpaqueMipTexture().rgb.mul( opacityNode.oneMinus() ) ), this.colorNode.a );
463
463
 
464
464
  }
465
465
 
@@ -1,4 +1,4 @@
1
- import { clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, specularF90, diffuseColor, metalness, roughness, anisotropy, alphaT, anisotropyT, anisotropyB, ior, transmission, thickness, attenuationDistance, attenuationColor, dispersion } from '../../nodes/core/PropertyNode.js';
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 } from '../../nodes/core/PropertyNode.js';
2
2
  import { materialClearcoat, materialClearcoatRoughness, materialClearcoatNormal, materialSheen, materialSheenRoughness, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialSpecularIntensity, materialSpecularColor, materialAnisotropy, materialIOR, materialTransmission, materialThickness, materialAttenuationDistance, materialAttenuationColor, materialDispersion } 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';
@@ -350,7 +350,8 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
350
350
  const iorNode = this.iorNode ? float( this.iorNode ) : materialIOR;
351
351
 
352
352
  ior.assign( iorNode );
353
- specularColor.assign( mix( min( pow2( ior.sub( 1.0 ).div( ior.add( 1.0 ) ) ).mul( materialSpecularColor ), vec3( 1.0 ) ).mul( materialSpecularIntensity ), diffuseColor.rgb, metalness ) );
353
+ specularColor.assign( min( pow2( ior.sub( 1.0 ).div( ior.add( 1.0 ) ) ).mul( materialSpecularColor ), vec3( 1.0 ) ).mul( materialSpecularIntensity ) );
354
+ specularColorBlended.assign( mix( specularColor, diffuseColor.rgb, metalness ) );
354
355
  specularF90.assign( mix( materialSpecularIntensity, 1.0, metalness ) );
355
356
 
356
357
  }
@@ -501,6 +502,8 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
501
502
  this.specularIntensityNode = source.specularIntensityNode;
502
503
  this.specularColorNode = source.specularColorNode;
503
504
 
505
+ this.iorNode = source.iorNode;
506
+
504
507
  this.transmissionNode = source.transmissionNode;
505
508
  this.thicknessNode = source.thicknessNode;
506
509
  this.attenuationDistanceNode = source.attenuationDistanceNode;
@@ -1,11 +1,11 @@
1
1
  import NodeMaterial from './NodeMaterial.js';
2
- import { diffuseColor, metalness, roughness, specularColor, specularF90 } from '../../nodes/core/PropertyNode.js';
2
+ import { diffuseColor, diffuseContribution, metalness, roughness, specularColor, specularColorBlended, specularF90 } from '../../nodes/core/PropertyNode.js';
3
3
  import { mix } from '../../nodes/math/MathNode.js';
4
4
  import { materialRoughness, materialMetalness } from '../../nodes/accessors/MaterialNode.js';
5
5
  import getRoughness from '../../nodes/functions/material/getRoughness.js';
6
6
  import PhysicalLightingModel from '../../nodes/functions/PhysicalLightingModel.js';
7
7
  import EnvironmentNode from '../../nodes/lighting/EnvironmentNode.js';
8
- import { float, vec3, vec4 } from '../../nodes/tsl/TSLBase.js';
8
+ import { float, vec3 } from '../../nodes/tsl/TSLBase.js';
9
9
 
10
10
  import { MeshStandardMaterial } from '../MeshStandardMaterial.js';
11
11
 
@@ -135,7 +135,8 @@ class MeshStandardNodeMaterial extends NodeMaterial {
135
135
 
136
136
  const specularColorNode = mix( vec3( 0.04 ), diffuseColor.rgb, metalness );
137
137
 
138
- specularColor.assign( specularColorNode );
138
+ specularColor.assign( vec3( 0.04 ) );
139
+ specularColorBlended.assign( specularColorNode );
139
140
  specularF90.assign( 1.0 );
140
141
 
141
142
  }
@@ -166,7 +167,7 @@ class MeshStandardNodeMaterial extends NodeMaterial {
166
167
 
167
168
  // DIFFUSE COLOR
168
169
 
169
- diffuseColor.assign( vec4( diffuseColor.rgb.mul( metalnessNode.oneMinus() ), diffuseColor.a ) );
170
+ diffuseContribution.assign( diffuseColor.rgb.mul( metalnessNode.oneMinus() ) );
170
171
 
171
172
  }
172
173