@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,434 +0,0 @@
1
- /**
2
- * MeshGouraudMaterial
3
- *
4
- * Lambert illumination model with Gouraud (per-vertex) shading
5
- *
6
- */
7
-
8
- import { UniformsUtils, UniformsLib, ShaderMaterial, Color, MultiplyOperation } from 'three';
9
-
10
- const GouraudShader = {
11
-
12
- name: 'GouraudShader',
13
-
14
- uniforms: UniformsUtils.merge( [
15
- UniformsLib.common,
16
- UniformsLib.specularmap,
17
- UniformsLib.envmap,
18
- UniformsLib.aomap,
19
- UniformsLib.lightmap,
20
- UniformsLib.emissivemap,
21
- UniformsLib.fog,
22
- UniformsLib.lights,
23
- {
24
- emissive: { value: new Color( 0x000000 ) }
25
- }
26
- ] ),
27
-
28
- vertexShader: /* glsl */`
29
-
30
- #define GOURAUD
31
-
32
- varying vec3 vLightFront;
33
- varying vec3 vIndirectFront;
34
-
35
- #ifdef DOUBLE_SIDED
36
- varying vec3 vLightBack;
37
- varying vec3 vIndirectBack;
38
- #endif
39
-
40
- #include <common>
41
- #include <uv_pars_vertex>
42
- #include <envmap_pars_vertex>
43
- #include <bsdfs>
44
- #include <lights_pars_begin>
45
- #include <color_pars_vertex>
46
- #include <fog_pars_vertex>
47
- #include <morphtarget_pars_vertex>
48
- #include <skinning_pars_vertex>
49
- #include <shadowmap_pars_vertex>
50
- #include <logdepthbuf_pars_vertex>
51
- #include <clipping_planes_pars_vertex>
52
-
53
- void main() {
54
-
55
- #include <uv_vertex>
56
- #include <color_vertex>
57
- #include <morphcolor_vertex>
58
-
59
- #include <beginnormal_vertex>
60
- #include <morphnormal_vertex>
61
- #include <skinbase_vertex>
62
- #include <skinnormal_vertex>
63
- #include <defaultnormal_vertex>
64
-
65
- #include <begin_vertex>
66
- #include <morphtarget_vertex>
67
- #include <skinning_vertex>
68
- #include <project_vertex>
69
- #include <logdepthbuf_vertex>
70
- #include <clipping_planes_vertex>
71
-
72
- #include <worldpos_vertex>
73
- #include <envmap_vertex>
74
-
75
- // inlining legacy <lights_lambert_vertex>
76
-
77
- vec3 diffuse = vec3( 1.0 );
78
-
79
- vec3 geometryPosition = mvPosition.xyz;
80
- vec3 geometryNormal = normalize( transformedNormal );
81
- vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );
82
-
83
- vec3 backGeometryNormal = - geometryNormal;
84
-
85
- vLightFront = vec3( 0.0 );
86
- vIndirectFront = vec3( 0.0 );
87
- #ifdef DOUBLE_SIDED
88
- vLightBack = vec3( 0.0 );
89
- vIndirectBack = vec3( 0.0 );
90
- #endif
91
-
92
- IncidentLight directLight;
93
- float dotNL;
94
- vec3 directLightColor_Diffuse;
95
-
96
- vIndirectFront += getAmbientLightIrradiance( ambientLightColor );
97
-
98
- #if defined( USE_LIGHT_PROBES )
99
-
100
- vIndirectFront += getLightProbeIrradiance( lightProbe, geometryNormal );
101
-
102
- #endif
103
-
104
- #ifdef DOUBLE_SIDED
105
-
106
- vIndirectBack += getAmbientLightIrradiance( ambientLightColor );
107
-
108
- #if defined( USE_LIGHT_PROBES )
109
-
110
- vIndirectBack += getLightProbeIrradiance( lightProbe, backGeometryNormal );
111
-
112
- #endif
113
-
114
- #endif
115
-
116
- #if NUM_POINT_LIGHTS > 0
117
-
118
- #pragma unroll_loop_start
119
- for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {
120
-
121
- getPointLightInfo( pointLights[ i ], geometryPosition, directLight );
122
-
123
- dotNL = dot( geometryNormal, directLight.direction );
124
- directLightColor_Diffuse = directLight.color;
125
-
126
- vLightFront += saturate( dotNL ) * directLightColor_Diffuse;
127
-
128
- #ifdef DOUBLE_SIDED
129
-
130
- vLightBack += saturate( - dotNL ) * directLightColor_Diffuse;
131
-
132
- #endif
133
-
134
- }
135
- #pragma unroll_loop_end
136
-
137
- #endif
138
-
139
- #if NUM_SPOT_LIGHTS > 0
140
-
141
- #pragma unroll_loop_start
142
- for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {
143
-
144
- getSpotLightInfo( spotLights[ i ], geometryPosition, directLight );
145
-
146
- dotNL = dot( geometryNormal, directLight.direction );
147
- directLightColor_Diffuse = directLight.color;
148
-
149
- vLightFront += saturate( dotNL ) * directLightColor_Diffuse;
150
-
151
- #ifdef DOUBLE_SIDED
152
-
153
- vLightBack += saturate( - dotNL ) * directLightColor_Diffuse;
154
-
155
- #endif
156
- }
157
- #pragma unroll_loop_end
158
-
159
- #endif
160
-
161
- #if NUM_DIR_LIGHTS > 0
162
-
163
- #pragma unroll_loop_start
164
- for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {
165
-
166
- getDirectionalLightInfo( directionalLights[ i ], directLight );
167
-
168
- dotNL = dot( geometryNormal, directLight.direction );
169
- directLightColor_Diffuse = directLight.color;
170
-
171
- vLightFront += saturate( dotNL ) * directLightColor_Diffuse;
172
-
173
- #ifdef DOUBLE_SIDED
174
-
175
- vLightBack += saturate( - dotNL ) * directLightColor_Diffuse;
176
-
177
- #endif
178
-
179
- }
180
- #pragma unroll_loop_end
181
-
182
- #endif
183
-
184
- #if NUM_HEMI_LIGHTS > 0
185
-
186
- #pragma unroll_loop_start
187
- for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {
188
-
189
- vIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );
190
-
191
- #ifdef DOUBLE_SIDED
192
-
193
- vIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometryNormal );
194
-
195
- #endif
196
-
197
- }
198
- #pragma unroll_loop_end
199
-
200
- #endif
201
-
202
- #include <shadowmap_vertex>
203
- #include <fog_vertex>
204
-
205
- }`,
206
-
207
- fragmentShader: /* glsl */`
208
-
209
- #define GOURAUD
210
-
211
- uniform vec3 diffuse;
212
- uniform vec3 emissive;
213
- uniform float opacity;
214
-
215
- varying vec3 vLightFront;
216
- varying vec3 vIndirectFront;
217
-
218
- #ifdef DOUBLE_SIDED
219
- varying vec3 vLightBack;
220
- varying vec3 vIndirectBack;
221
- #endif
222
-
223
- #include <common>
224
- #include <packing>
225
- #include <dithering_pars_fragment>
226
- #include <color_pars_fragment>
227
- #include <uv_pars_fragment>
228
- #include <map_pars_fragment>
229
- #include <alphamap_pars_fragment>
230
- #include <alphatest_pars_fragment>
231
- #include <aomap_pars_fragment>
232
- #include <lightmap_pars_fragment>
233
- #include <emissivemap_pars_fragment>
234
- #include <envmap_common_pars_fragment>
235
- #include <envmap_pars_fragment>
236
- #include <bsdfs>
237
- #include <lights_pars_begin>
238
- #include <fog_pars_fragment>
239
- #include <shadowmap_pars_fragment>
240
- #include <shadowmask_pars_fragment>
241
- #include <specularmap_pars_fragment>
242
- #include <logdepthbuf_pars_fragment>
243
- #include <clipping_planes_pars_fragment>
244
-
245
- void main() {
246
-
247
- #include <clipping_planes_fragment>
248
-
249
- vec4 diffuseColor = vec4( diffuse, opacity );
250
- ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
251
- vec3 totalEmissiveRadiance = emissive;
252
-
253
- #include <logdepthbuf_fragment>
254
- #include <map_fragment>
255
- #include <color_fragment>
256
- #include <alphamap_fragment>
257
- #include <alphatest_fragment>
258
- #include <specularmap_fragment>
259
- #include <emissivemap_fragment>
260
-
261
- // accumulation
262
-
263
- #ifdef DOUBLE_SIDED
264
-
265
- reflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;
266
-
267
- #else
268
-
269
- reflectedLight.indirectDiffuse += vIndirectFront;
270
-
271
- #endif
272
-
273
- #ifdef USE_LIGHTMAP
274
-
275
- vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );
276
- vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;
277
- reflectedLight.indirectDiffuse += lightMapIrradiance;
278
-
279
- #endif
280
-
281
- reflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );
282
-
283
- #ifdef DOUBLE_SIDED
284
-
285
- reflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;
286
-
287
- #else
288
-
289
- reflectedLight.directDiffuse = vLightFront;
290
-
291
- #endif
292
-
293
- reflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();
294
-
295
- // modulation
296
-
297
- #include <aomap_fragment>
298
-
299
- vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;
300
-
301
- #include <envmap_fragment>
302
-
303
- #include <opaque_fragment>
304
- #include <tonemapping_fragment>
305
- #include <colorspace_fragment>
306
- #include <fog_fragment>
307
- #include <premultiplied_alpha_fragment>
308
- #include <dithering_fragment>
309
-
310
- }`
311
-
312
- };
313
-
314
- //
315
-
316
- class MeshGouraudMaterial extends ShaderMaterial {
317
-
318
- constructor( parameters ) {
319
-
320
- super();
321
-
322
- console.warn( 'THREE.MeshGouraudMaterial: MeshGouraudMaterial has been deprecated and will be removed with r183. Use THREE.MeshLambertMaterial instead.' ); // @deprecated r173
323
-
324
- this.isMeshGouraudMaterial = true;
325
-
326
- this.type = 'MeshGouraudMaterial';
327
-
328
- //this.color = new THREE.Color( 0xffffff ); // diffuse
329
-
330
- //this.map = null;
331
-
332
- //this.lightMap = null;
333
- //this.lightMapIntensity = 1.0;
334
-
335
- //this.aoMap = null;
336
- //this.aoMapIntensity = 1.0;
337
-
338
- //this.emissive = new THREE.Color( 0x000000 );
339
- //this.emissiveIntensity = 1.0;
340
- //this.emissiveMap = null;
341
-
342
- //this.specularMap = null;
343
-
344
- //this.alphaMap = null;
345
-
346
- //this.envMap = null;
347
- this.combine = MultiplyOperation; // combine has no uniform
348
- //this.reflectivity = 1;
349
- //this.refractionRatio = 0.98;
350
-
351
- this.fog = false; // set to use scene fog
352
- this.lights = true; // set to use scene lights
353
- this.clipping = false; // set to use user-defined clipping planes
354
-
355
- const shader = GouraudShader;
356
-
357
- this.defines = Object.assign( {}, shader.defines );
358
- this.uniforms = UniformsUtils.clone( shader.uniforms );
359
- this.vertexShader = shader.vertexShader;
360
- this.fragmentShader = shader.fragmentShader;
361
-
362
- const exposePropertyNames = [
363
- 'map', 'lightMap', 'lightMapIntensity', 'aoMap', 'aoMapIntensity',
364
- 'emissive', 'emissiveIntensity', 'emissiveMap', 'specularMap', 'alphaMap',
365
- 'envMap', 'reflectivity', 'refractionRatio', 'opacity', 'diffuse'
366
- ];
367
-
368
- for ( const propertyName of exposePropertyNames ) {
369
-
370
- Object.defineProperty( this, propertyName, {
371
-
372
- get: function () {
373
-
374
- return this.uniforms[ propertyName ].value;
375
-
376
- },
377
-
378
- set: function ( value ) {
379
-
380
- this.uniforms[ propertyName ].value = value;
381
-
382
- }
383
-
384
- } );
385
-
386
- }
387
-
388
- Object.defineProperty( this, 'color', Object.getOwnPropertyDescriptor( this, 'diffuse' ) );
389
-
390
- this.setValues( parameters );
391
-
392
- }
393
-
394
- copy( source ) {
395
-
396
- super.copy( source );
397
-
398
- this.color.copy( source.color );
399
-
400
- this.map = source.map;
401
-
402
- this.lightMap = source.lightMap;
403
- this.lightMapIntensity = source.lightMapIntensity;
404
-
405
- this.aoMap = source.aoMap;
406
- this.aoMapIntensity = source.aoMapIntensity;
407
-
408
- this.emissive.copy( source.emissive );
409
- this.emissiveMap = source.emissiveMap;
410
- this.emissiveIntensity = source.emissiveIntensity;
411
-
412
- this.specularMap = source.specularMap;
413
-
414
- this.alphaMap = source.alphaMap;
415
-
416
- this.envMap = source.envMap;
417
- this.combine = source.combine;
418
- this.reflectivity = source.reflectivity;
419
- this.refractionRatio = source.refractionRatio;
420
-
421
- this.wireframe = source.wireframe;
422
- this.wireframeLinewidth = source.wireframeLinewidth;
423
- this.wireframeLinecap = source.wireframeLinecap;
424
- this.wireframeLinejoin = source.wireframeLinejoin;
425
-
426
- this.fog = source.fog;
427
-
428
- return this;
429
-
430
- }
431
-
432
- }
433
-
434
- export { MeshGouraudMaterial };
@@ -1,167 +0,0 @@
1
- import { MeshPhysicalMaterial } from 'three';
2
-
3
- /**
4
- * The aim of this mesh material is to use information from a post processing pass in the diffuse color pass.
5
- * This material is based on the MeshPhysicalMaterial.
6
- *
7
- * In the current state, only the information of a screen space AO pass can be used in the material.
8
- * Actually, the output of any screen space AO (SSAO, GTAO) can be used,
9
- * as it is only necessary to provide the AO in one color channel of a texture,
10
- * however the AO pass must be rendered prior to the color pass,
11
- * which makes the post-processing pass somewhat of a pre-processing pass.
12
- * Fot this purpose a new map (`aoPassMap`) is added to the material.
13
- * The value of the map is used the same way as the `aoMap` value.
14
- *
15
- * Motivation to use the outputs AO pass directly in the material:
16
- * The incident light of a fragment is composed of ambient light, direct light and indirect light
17
- * Ambient Occlusion only occludes ambient light and environment light, but not direct light.
18
- * Direct light is only occluded by geometry that casts shadows.
19
- * And of course the emitted light should not be darkened by ambient occlusion either.
20
- * This cannot be achieved if the AO post processing pass is simply blended with the diffuse render pass.
21
- *
22
- * Further extension work might be to use the output of an SSR pass or an HBIL pass from a previous frame.
23
- * This would then create the possibility of SSR and IR depending on material properties such as `roughness`, `metalness` and `reflectivity`.
24
- *
25
- * @augments MeshPhysicalMaterial
26
- * @three_import import { MeshPostProcessingMaterial } from 'three/addons/materials/MeshPostProcessingMaterial.js';
27
- */
28
- class MeshPostProcessingMaterial extends MeshPhysicalMaterial {
29
-
30
- /**
31
- * Constructs a new conditional line material.
32
- *
33
- * @param {Object} [parameters] - An object with one or more properties
34
- * defining the material's appearance. Any property of the material
35
- * (including any property from inherited materials) can be passed
36
- * in here. Color values can be passed any type of value accepted
37
- * by {@link Color#set}.
38
- */
39
- constructor( parameters ) {
40
-
41
- const aoPassMap = parameters.aoPassMap;
42
- const aoPassMapScale = parameters.aoPassMapScale || 1.0;
43
- delete parameters.aoPassMap;
44
- delete parameters.aoPassMapScale;
45
-
46
- super( parameters );
47
-
48
- this.onBeforeCompile = this._onBeforeCompile;
49
- this.customProgramCacheKey = this._customProgramCacheKey;
50
- this._aoPassMap = aoPassMap;
51
-
52
- /**
53
- * The scale of the AO pass.
54
- *
55
- * @type {number}
56
- * @default 1
57
- */
58
- this.aoPassMapScale = aoPassMapScale;
59
- this._shader = null;
60
-
61
- }
62
-
63
- /**
64
- * A texture representing the AO pass.
65
- *
66
- * @type {Texture}
67
- */
68
- get aoPassMap() {
69
-
70
- return this._aoPassMap;
71
-
72
- }
73
-
74
- set aoPassMap( aoPassMap ) {
75
-
76
- this._aoPassMap = aoPassMap;
77
- this.needsUpdate = true;
78
- this._setUniforms();
79
-
80
- }
81
-
82
- _customProgramCacheKey() {
83
-
84
- return this._aoPassMap !== undefined && this._aoPassMap !== null ? 'aoPassMap' : '';
85
-
86
- }
87
-
88
- _onBeforeCompile( shader ) {
89
-
90
- this._shader = shader;
91
-
92
- if ( this._aoPassMap !== undefined && this._aoPassMap !== null ) {
93
-
94
- shader.fragmentShader = shader.fragmentShader.replace(
95
- '#include <aomap_pars_fragment>',
96
- aomap_pars_fragment_replacement
97
- );
98
- shader.fragmentShader = shader.fragmentShader.replace(
99
- '#include <aomap_fragment>',
100
- aomap_fragment_replacement
101
- );
102
-
103
- }
104
-
105
- this._setUniforms();
106
-
107
- }
108
-
109
- _setUniforms() {
110
-
111
- if ( this._shader ) {
112
-
113
- this._shader.uniforms.tAoPassMap = { value: this._aoPassMap };
114
- this._shader.uniforms.aoPassMapScale = { value: this.aoPassMapScale };
115
-
116
- }
117
-
118
- }
119
-
120
- }
121
-
122
- const aomap_pars_fragment_replacement = /* glsl */`
123
- #ifdef USE_AOMAP
124
-
125
- uniform sampler2D aoMap;
126
- uniform float aoMapIntensity;
127
-
128
- #endif
129
-
130
- uniform sampler2D tAoPassMap;
131
- uniform float aoPassMapScale;
132
- `;
133
-
134
- const aomap_fragment_replacement = /* glsl */`
135
- #ifndef AOPASSMAP_SWIZZLE
136
- #define AOPASSMAP_SWIZZLE r
137
- #endif
138
- float ambientOcclusion = texelFetch( tAoPassMap, ivec2( gl_FragCoord.xy * aoPassMapScale ), 0 ).AOPASSMAP_SWIZZLE;
139
-
140
- #ifdef USE_AOMAP
141
-
142
- // reads channel R, compatible with a combined OcclusionRoughnessMetallic (RGB) texture
143
- ambientOcclusion = min( ambientOcclusion, texture2D( aoMap, vAoMapUv ).r );
144
- ambientOcclusion *= ( ambientOcclusion - 1.0 ) * aoMapIntensity + 1.0;
145
-
146
- #endif
147
-
148
- reflectedLight.indirectDiffuse *= ambientOcclusion;
149
-
150
- #if defined( USE_CLEARCOAT )
151
- clearcoatSpecularIndirect *= ambientOcclusion;
152
- #endif
153
-
154
- #if defined( USE_SHEEN )
155
- sheenSpecularIndirect *= ambientOcclusion;
156
- #endif
157
-
158
- #if defined( USE_ENVMAP ) && defined( STANDARD )
159
-
160
- float dotNV = saturate( dot( geometryNormal, geometryViewDir ) );
161
-
162
- reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );
163
-
164
- #endif
165
- `;
166
-
167
- export { MeshPostProcessingMaterial };