super-three 0.167.0 → 0.169.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 (387) hide show
  1. package/build/three.cjs +532 -173
  2. package/build/three.module.js +532 -174
  3. package/build/three.module.min.js +1 -1
  4. package/build/three.webgpu.js +18173 -14266
  5. package/build/three.webgpu.min.js +1 -1
  6. package/build/three.webgpu.nodes.js +79941 -0
  7. package/build/three.webgpu.nodes.min.js +6 -0
  8. package/examples/jsm/Addons.js +0 -4
  9. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  10. package/examples/jsm/capabilities/WebGL.js +27 -21
  11. package/examples/jsm/controls/ArcballControls.js +174 -158
  12. package/examples/jsm/controls/DragControls.js +260 -132
  13. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  14. package/examples/jsm/controls/FlyControls.js +194 -188
  15. package/examples/jsm/controls/OrbitControls.js +777 -786
  16. package/examples/jsm/controls/PointerLockControls.js +24 -15
  17. package/examples/jsm/controls/TrackballControls.js +469 -448
  18. package/examples/jsm/controls/TransformControls.js +97 -62
  19. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  20. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  21. package/examples/jsm/effects/StereoEffect.js +6 -1
  22. package/examples/jsm/environments/RoomEnvironment.js +1 -1
  23. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  24. package/examples/jsm/exporters/EXRExporter.js +19 -11
  25. package/examples/jsm/exporters/GLTFExporter.js +6 -1
  26. package/examples/jsm/exporters/KTX2Exporter.js +21 -13
  27. package/examples/jsm/exporters/OBJExporter.js +5 -1
  28. package/examples/jsm/exporters/PLYExporter.js +9 -7
  29. package/examples/jsm/exporters/USDZExporter.js +29 -8
  30. package/examples/jsm/geometries/DecalGeometry.js +4 -1
  31. package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
  32. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  33. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  34. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  35. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  36. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  37. package/examples/jsm/lights/LightProbeGenerator.js +24 -10
  38. package/examples/jsm/loaders/ColladaLoader.js +9 -6
  39. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  40. package/examples/jsm/loaders/FBXLoader.js +30 -20
  41. package/examples/jsm/loaders/GLTFLoader.js +5 -10
  42. package/examples/jsm/loaders/KTX2Loader.js +27 -12
  43. package/examples/jsm/loaders/MTLLoader.js +4 -3
  44. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  45. package/examples/jsm/loaders/OBJLoader.js +5 -3
  46. package/examples/jsm/loaders/PCDLoader.js +14 -13
  47. package/examples/jsm/loaders/PDBLoader.js +3 -2
  48. package/examples/jsm/loaders/PLYLoader.js +8 -5
  49. package/examples/jsm/loaders/STLLoader.js +3 -2
  50. package/examples/jsm/loaders/VRMLLoader.js +10 -10
  51. package/examples/jsm/loaders/VTKLoader.js +4 -3
  52. package/examples/jsm/loaders/XYZLoader.js +3 -2
  53. package/examples/jsm/misc/Timer.js +1 -1
  54. package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
  55. package/examples/jsm/objects/LensflareMesh.js +322 -0
  56. package/examples/jsm/objects/SkyMesh.js +187 -0
  57. package/examples/jsm/objects/Water2Mesh.js +158 -0
  58. package/examples/jsm/objects/WaterMesh.js +101 -0
  59. package/examples/jsm/physics/JoltPhysics.js +1 -1
  60. package/examples/jsm/physics/RapierPhysics.js +21 -1
  61. package/examples/jsm/postprocessing/OutlinePass.js +31 -46
  62. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  63. package/examples/jsm/shaders/BleachBypassShader.js +1 -2
  64. package/examples/jsm/shaders/OutputShader.js +1 -1
  65. package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
  66. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
  67. package/examples/jsm/transpiler/TSLEncoder.js +8 -8
  68. package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
  69. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  70. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  71. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  72. package/examples/jsm/utils/TextureUtils.js +2 -1
  73. package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
  74. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  75. package/package.json +3 -2
  76. package/src/Three.WebGPU.Nodes.js +200 -0
  77. package/src/Three.WebGPU.js +7 -0
  78. package/src/Three.js +1 -0
  79. package/src/audio/Audio.js +2 -2
  80. package/src/constants.js +1 -1
  81. package/src/core/BufferAttribute.js +0 -9
  82. package/src/core/Clock.js +1 -1
  83. package/src/core/InterleavedBuffer.js +0 -9
  84. package/src/extras/Controls.js +32 -0
  85. package/src/geometries/CylinderGeometry.js +11 -4
  86. package/src/loaders/MaterialLoader.js +7 -1
  87. package/src/loaders/ObjectLoader.js +3 -3
  88. package/src/{nodes/loaders → loaders/nodes}/NodeLoader.js +25 -5
  89. package/src/{nodes/loaders → loaders/nodes}/NodeMaterialLoader.js +21 -18
  90. package/src/{nodes/loaders → loaders/nodes}/NodeObjectLoader.js +19 -0
  91. package/src/materials/Material.js +4 -7
  92. package/src/materials/nodes/InstancedPointsNodeMaterial.js +156 -0
  93. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +56 -59
  94. package/src/{nodes/materials → materials/nodes}/LineBasicNodeMaterial.js +8 -5
  95. package/src/{nodes/materials → materials/nodes}/LineDashedNodeMaterial.js +12 -10
  96. package/src/{nodes/materials → materials/nodes}/MeshBasicNodeMaterial.js +16 -12
  97. package/src/{nodes/materials → materials/nodes}/MeshLambertNodeMaterial.js +10 -6
  98. package/src/{nodes/materials → materials/nodes}/MeshMatcapNodeMaterial.js +13 -9
  99. package/src/{nodes/materials → materials/nodes}/MeshNormalNodeMaterial.js +13 -9
  100. package/src/{nodes/materials → materials/nodes}/MeshPhongNodeMaterial.js +14 -9
  101. package/src/{nodes/materials → materials/nodes}/MeshPhysicalNodeMaterial.js +22 -18
  102. package/src/{nodes/materials → materials/nodes}/MeshSSSNodeMaterial.js +10 -7
  103. package/src/{nodes/materials → materials/nodes}/MeshStandardNodeMaterial.js +22 -12
  104. package/src/{nodes/materials → materials/nodes}/MeshToonNodeMaterial.js +9 -5
  105. package/src/{nodes/materials → materials/nodes}/NodeMaterial.js +71 -115
  106. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -1
  107. package/src/{nodes/materials → materials/nodes}/PointsNodeMaterial.js +8 -5
  108. package/src/{nodes/materials → materials/nodes}/ShadowNodeMaterial.js +9 -5
  109. package/src/{nodes/materials → materials/nodes}/SpriteNodeMaterial.js +47 -14
  110. package/src/{nodes/materials → materials/nodes}/VolumeNodeMaterial.js +24 -22
  111. package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
  112. package/src/math/Triangle.js +24 -0
  113. package/src/nodes/Nodes.js +103 -159
  114. package/src/nodes/TSL.js +179 -0
  115. package/src/nodes/accessors/AccessorsUtils.js +8 -8
  116. package/src/nodes/accessors/BatchNode.js +53 -21
  117. package/src/nodes/accessors/{BitangentNode.js → Bitangent.js} +9 -9
  118. package/src/nodes/accessors/BufferAttributeNode.js +8 -5
  119. package/src/nodes/accessors/BufferNode.js +7 -4
  120. package/src/nodes/accessors/Camera.js +13 -0
  121. package/src/nodes/accessors/ClippingNode.js +19 -13
  122. package/src/nodes/accessors/CubeTextureNode.js +9 -8
  123. package/src/nodes/accessors/InstanceNode.js +19 -15
  124. package/src/nodes/accessors/InstancedPointsMaterialNode.js +8 -5
  125. package/src/nodes/accessors/Lights.js +51 -0
  126. package/src/nodes/accessors/MaterialNode.js +56 -55
  127. package/src/nodes/accessors/MaterialProperties.js +3 -0
  128. package/src/nodes/accessors/MaterialReferenceNode.js +9 -4
  129. package/src/nodes/accessors/ModelNode.js +47 -12
  130. package/src/nodes/accessors/ModelViewProjectionNode.js +12 -9
  131. package/src/nodes/accessors/MorphNode.js +17 -13
  132. package/src/nodes/accessors/Normal.js +88 -0
  133. package/src/nodes/accessors/Object3DNode.js +17 -33
  134. package/src/nodes/accessors/PointUVNode.js +9 -5
  135. package/src/nodes/accessors/Position.js +10 -0
  136. package/src/nodes/accessors/ReferenceBaseNode.js +171 -0
  137. package/src/nodes/accessors/ReferenceNode.js +50 -7
  138. package/src/nodes/accessors/ReflectVector.js +10 -0
  139. package/src/nodes/accessors/RendererReferenceNode.js +12 -6
  140. package/src/nodes/accessors/SceneNode.js +9 -6
  141. package/src/nodes/accessors/SkinningNode.js +88 -21
  142. package/src/nodes/accessors/StorageBufferNode.js +22 -5
  143. package/src/nodes/accessors/StorageTextureNode.js +9 -6
  144. package/src/nodes/accessors/Tangent.js +22 -0
  145. package/src/nodes/accessors/Texture3DNode.js +16 -13
  146. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +3 -32
  147. package/src/nodes/accessors/TextureNode.js +29 -23
  148. package/src/nodes/accessors/TextureSizeNode.js +10 -9
  149. package/src/nodes/accessors/{UniformsNode.js → UniformArrayNode.js} +26 -14
  150. package/src/nodes/accessors/UserDataNode.js +10 -7
  151. package/src/nodes/accessors/VelocityNode.js +134 -0
  152. package/src/nodes/accessors/VertexColorNode.js +7 -4
  153. package/src/nodes/code/CodeNode.js +9 -5
  154. package/src/nodes/code/ExpressionNode.js +10 -6
  155. package/src/nodes/code/FunctionCallNode.js +8 -5
  156. package/src/nodes/code/FunctionNode.js +8 -23
  157. package/src/nodes/code/ScriptableNode.js +13 -10
  158. package/src/nodes/code/ScriptableValueNode.js +9 -7
  159. package/src/nodes/core/AssignNode.js +12 -9
  160. package/src/nodes/core/AttributeNode.js +12 -21
  161. package/src/nodes/core/BypassNode.js +11 -7
  162. package/src/nodes/core/CacheNode.js +10 -6
  163. package/src/nodes/core/ConstNode.js +6 -3
  164. package/src/nodes/core/ContextNode.js +21 -11
  165. package/src/nodes/core/IndexNode.js +35 -8
  166. package/src/nodes/core/InputNode.js +7 -3
  167. package/src/nodes/core/MRTNode.js +16 -7
  168. package/src/nodes/core/Node.js +19 -40
  169. package/src/nodes/core/NodeBuilder.js +117 -38
  170. package/src/nodes/core/NodeUtils.js +49 -6
  171. package/src/nodes/core/OutputStructNode.js +10 -6
  172. package/src/nodes/core/ParameterNode.js +7 -4
  173. package/src/nodes/core/PropertyNode.js +36 -32
  174. package/src/nodes/core/StackNode.js +31 -11
  175. package/src/nodes/core/StructTypeNode.js +7 -3
  176. package/src/nodes/core/TempNode.js +8 -4
  177. package/src/nodes/core/UniformGroupNode.js +14 -11
  178. package/src/nodes/core/UniformNode.js +7 -4
  179. package/src/nodes/core/VarNode.js +12 -8
  180. package/src/nodes/core/VaryingNode.js +10 -6
  181. package/src/nodes/display/AfterImageNode.js +15 -9
  182. package/src/nodes/display/AnaglyphPassNode.js +67 -0
  183. package/src/nodes/display/AnamorphicNode.js +17 -11
  184. package/src/nodes/display/BleachBypass.js +26 -0
  185. package/src/nodes/display/BlendMode.js +54 -0
  186. package/src/nodes/display/BloomNode.js +27 -19
  187. package/src/nodes/display/BumpMapNode.js +13 -12
  188. package/src/nodes/display/ColorAdjustment.js +46 -0
  189. package/src/nodes/display/ColorSpaceFunctions.js +38 -0
  190. package/src/nodes/display/ColorSpaceNode.js +67 -61
  191. package/src/nodes/display/DenoiseNode.js +23 -17
  192. package/src/nodes/display/DepthOfFieldNode.js +12 -7
  193. package/src/nodes/display/DotScreenNode.js +13 -22
  194. package/src/nodes/display/FXAANode.js +21 -16
  195. package/src/nodes/display/FilmNode.js +11 -7
  196. package/src/nodes/display/FrontFacingNode.js +10 -6
  197. package/src/nodes/display/GTAONode.js +22 -15
  198. package/src/nodes/display/GaussianBlurNode.js +14 -8
  199. package/src/nodes/display/Lut3DNode.js +10 -6
  200. package/src/nodes/display/MotionBlur.js +25 -0
  201. package/src/nodes/display/NormalMapNode.js +13 -13
  202. package/src/nodes/display/ParallaxBarrierPassNode.js +58 -0
  203. package/src/nodes/display/PassNode.js +95 -8
  204. package/src/nodes/display/PixelationPassNode.js +20 -8
  205. package/src/nodes/display/PosterizeNode.js +8 -7
  206. package/src/nodes/display/RGBShiftNode.js +11 -7
  207. package/src/nodes/display/RenderOutputNode.js +15 -11
  208. package/src/nodes/display/SSAAPassNode.js +287 -0
  209. package/src/nodes/display/ScreenNode.js +181 -0
  210. package/src/nodes/display/Sepia.js +17 -0
  211. package/src/nodes/display/SobelOperatorNode.js +13 -8
  212. package/src/nodes/display/StereoCompositePassNode.js +110 -0
  213. package/src/nodes/display/StereoPassNode.js +83 -0
  214. package/src/nodes/display/ToneMappingFunctions.js +190 -0
  215. package/src/nodes/display/ToneMappingNode.js +15 -175
  216. package/src/nodes/display/ToonOutlinePassNode.js +111 -0
  217. package/src/nodes/display/TransitionNode.js +12 -8
  218. package/src/nodes/display/ViewportDepthNode.js +34 -29
  219. package/src/nodes/display/ViewportDepthTextureNode.js +10 -9
  220. package/src/nodes/display/ViewportSharedTextureNode.js +10 -9
  221. package/src/nodes/display/ViewportTextureNode.js +11 -11
  222. package/src/nodes/fog/FogExp2Node.js +8 -7
  223. package/src/nodes/fog/FogNode.js +10 -8
  224. package/src/nodes/fog/FogRangeNode.js +8 -7
  225. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  226. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  227. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  228. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  229. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  230. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  231. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  232. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  233. package/src/nodes/functions/BSDF/LTC.js +6 -6
  234. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  235. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  236. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  237. package/src/nodes/functions/BasicLightingModel.js +1 -1
  238. package/src/nodes/functions/PhongLightingModel.js +5 -5
  239. package/src/nodes/functions/PhysicalLightingModel.js +34 -33
  240. package/src/nodes/functions/ShadowMaskModel.js +1 -1
  241. package/src/nodes/functions/ToonLightingModel.js +3 -3
  242. package/src/nodes/functions/material/getGeometryRoughness.js +4 -4
  243. package/src/nodes/functions/material/getRoughness.js +2 -2
  244. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  245. package/src/nodes/geometry/RangeNode.js +9 -5
  246. package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
  247. package/src/nodes/gpgpu/BarrierNode.js +40 -0
  248. package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
  249. package/src/nodes/gpgpu/ComputeNode.js +10 -6
  250. package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
  251. package/src/nodes/lighting/AONode.js +6 -3
  252. package/src/nodes/lighting/AmbientLightNode.js +6 -8
  253. package/src/nodes/lighting/AnalyticLightNode.js +225 -36
  254. package/src/nodes/lighting/BasicEnvironmentNode.js +8 -4
  255. package/src/nodes/lighting/BasicLightMapNode.js +7 -4
  256. package/src/nodes/lighting/DirectionalLightNode.js +7 -9
  257. package/src/nodes/lighting/EnvironmentNode.js +23 -19
  258. package/src/nodes/lighting/HemisphereLightNode.js +11 -11
  259. package/src/nodes/lighting/IESSpotLightNode.js +7 -9
  260. package/src/nodes/lighting/IrradianceNode.js +6 -3
  261. package/src/nodes/lighting/LightProbeNode.js +53 -0
  262. package/src/nodes/lighting/LightUtils.js +3 -3
  263. package/src/nodes/lighting/LightingContextNode.js +19 -18
  264. package/src/nodes/lighting/LightingNode.js +7 -3
  265. package/src/nodes/lighting/LightsNode.js +112 -75
  266. package/src/nodes/lighting/PointLightNode.js +12 -13
  267. package/src/nodes/lighting/RectAreaLightNode.js +11 -11
  268. package/src/nodes/lighting/SpotLightNode.js +14 -16
  269. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  270. package/src/nodes/materialx/lib/mx_hsv.js +36 -31
  271. package/src/nodes/materialx/lib/mx_noise.js +96 -96
  272. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  273. package/src/nodes/math/{CondNode.js → ConditionalNode.js} +38 -10
  274. package/src/nodes/math/Hash.js +13 -0
  275. package/src/nodes/math/MathNode.js +127 -124
  276. package/src/nodes/math/MathUtils.js +0 -7
  277. package/src/nodes/math/OperatorNode.js +97 -52
  278. package/src/nodes/math/TriNoise3D.js +19 -29
  279. package/src/nodes/pmrem/PMREMNode.js +61 -15
  280. package/src/nodes/pmrem/PMREMUtils.js +46 -46
  281. package/src/nodes/procedural/Checker.js +14 -0
  282. package/src/nodes/tsl/TSLBase.js +30 -0
  283. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +105 -97
  284. package/src/nodes/utils/ArrayElementNode.js +8 -4
  285. package/src/nodes/utils/ConvertNode.js +7 -3
  286. package/src/nodes/utils/CubeMapNode.js +160 -0
  287. package/src/nodes/utils/Discard.js +8 -0
  288. package/src/nodes/utils/EquirectUVNode.js +9 -6
  289. package/src/nodes/utils/FlipNode.js +68 -0
  290. package/src/nodes/utils/FunctionOverloadingNode.js +9 -5
  291. package/src/nodes/utils/JoinNode.js +6 -3
  292. package/src/nodes/utils/LoopNode.js +16 -6
  293. package/src/nodes/utils/MatcapUVNode.js +10 -7
  294. package/src/nodes/utils/MaxMipLevelNode.js +8 -5
  295. package/src/nodes/utils/OscNode.js +12 -8
  296. package/src/nodes/utils/Packing.js +4 -0
  297. package/src/nodes/utils/RTTNode.js +11 -8
  298. package/src/nodes/utils/ReflectorNode.js +12 -4
  299. package/src/nodes/utils/RemapNode.js +12 -8
  300. package/src/nodes/utils/RotateNode.js +8 -13
  301. package/src/nodes/utils/SetNode.js +7 -4
  302. package/src/nodes/utils/SplitNode.js +7 -3
  303. package/src/nodes/utils/SpriteSheetUVNode.js +10 -6
  304. package/src/nodes/utils/SpriteUtils.js +47 -0
  305. package/src/nodes/utils/StorageArrayElementNode.js +11 -12
  306. package/src/nodes/utils/TimerNode.js +8 -5
  307. package/src/nodes/utils/TriplanarTexturesNode.js +11 -9
  308. package/src/nodes/utils/UVUtils.js +19 -0
  309. package/src/nodes/utils/ViewportUtils.js +14 -0
  310. package/src/objects/BatchedMesh.js +78 -13
  311. package/src/objects/LOD.js +21 -0
  312. package/src/objects/Line.js +1 -0
  313. package/src/objects/Mesh.js +7 -23
  314. package/src/objects/Points.js +2 -0
  315. package/src/renderers/WebGLRenderer.js +88 -41
  316. package/src/renderers/common/Backend.js +2 -2
  317. package/src/renderers/common/Background.js +3 -1
  318. package/src/renderers/common/BindGroup.js +3 -1
  319. package/src/renderers/common/Bindings.js +13 -15
  320. package/src/renderers/common/BundleGroup.js +26 -0
  321. package/src/renderers/common/ClippingContext.js +15 -5
  322. package/src/renderers/common/CubeRenderTarget.js +9 -3
  323. package/src/renderers/common/PostProcessing.js +4 -1
  324. package/src/renderers/common/QuadMesh.js +2 -0
  325. package/src/renderers/common/RenderContext.js +23 -0
  326. package/src/renderers/common/RenderList.js +1 -1
  327. package/src/renderers/common/RenderObject.js +117 -6
  328. package/src/renderers/common/RenderObjects.js +8 -1
  329. package/src/renderers/common/Renderer.js +128 -94
  330. package/src/renderers/common/SampledTexture.js +12 -3
  331. package/src/renderers/common/Textures.js +8 -12
  332. package/src/renderers/common/extras/PMREMGenerator.js +19 -22
  333. package/src/renderers/common/nodes/NodeBuilderState.js +4 -4
  334. package/src/renderers/common/nodes/NodeLibrary.js +118 -0
  335. package/src/renderers/common/nodes/NodeSampledTexture.js +2 -2
  336. package/src/renderers/common/nodes/Nodes.js +65 -19
  337. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  338. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  339. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  340. package/src/renderers/webgl/WebGLCapabilities.js +9 -0
  341. package/src/renderers/webgl/WebGLProgram.js +3 -1
  342. package/src/renderers/webgl/WebGLPrograms.js +21 -17
  343. package/src/renderers/webgl/WebGLProperties.js +7 -0
  344. package/src/renderers/webgl/WebGLState.js +21 -0
  345. package/src/renderers/webgl/WebGLTextures.js +83 -4
  346. package/src/renderers/webgl-fallback/WebGLBackend.js +135 -110
  347. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +60 -12
  348. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +6 -0
  349. package/src/renderers/webgl-fallback/utils/WebGLState.js +20 -2
  350. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +89 -37
  351. package/src/renderers/webgpu/WebGPUBackend.js +112 -86
  352. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
  353. package/src/renderers/webgpu/WebGPURenderer.js +9 -6
  354. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
  355. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +105 -0
  356. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +189 -73
  357. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +6 -16
  358. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +45 -21
  359. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -1
  360. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +7 -16
  361. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
  362. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +43 -26
  363. package/src/renderers/webgpu/utils/WebGPUUtils.js +19 -2
  364. package/src/renderers/webxr/WebXRManager.js +32 -25
  365. package/src/utils.js +33 -1
  366. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  367. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  368. package/examples/jsm/loaders/TiltLoader.js +0 -520
  369. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  370. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  371. package/src/nodes/accessors/CameraNode.js +0 -19
  372. package/src/nodes/accessors/NormalNode.js +0 -14
  373. package/src/nodes/accessors/PositionNode.js +0 -10
  374. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  375. package/src/nodes/accessors/TangentNode.js +0 -23
  376. package/src/nodes/core/NodeKeywords.js +0 -80
  377. package/src/nodes/display/BlendModeNode.js +0 -128
  378. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  379. package/src/nodes/display/ViewportNode.js +0 -137
  380. package/src/nodes/lighting/LightNode.js +0 -57
  381. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  382. package/src/nodes/math/HashNode.js +0 -34
  383. package/src/nodes/procedural/CheckerNode.js +0 -42
  384. package/src/nodes/utils/DiscardNode.js +0 -28
  385. package/src/nodes/utils/PackingNode.js +0 -55
  386. package/src/nodes/utils/RotateUVNode.js +0 -35
  387. /package/src/nodes/accessors/{UVNode.js → UV.js} +0 -0
@@ -14,24 +14,24 @@ import Color4 from './Color4.js';
14
14
  import ClippingContext from './ClippingContext.js';
15
15
  import QuadMesh from './QuadMesh.js';
16
16
  import RenderBundles from './RenderBundles.js';
17
+ import NodeLibrary from './nodes/NodeLibrary.js';
17
18
 
18
- import { NodeMaterial } from '../../nodes/Nodes.js';
19
+ import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
19
20
 
20
21
  import { Scene } from '../../scenes/Scene.js';
21
22
  import { Frustum } from '../../math/Frustum.js';
22
23
  import { Matrix4 } from '../../math/Matrix4.js';
23
24
  import { Vector2 } from '../../math/Vector2.js';
24
- import { Vector3 } from '../../math/Vector3.js';
25
25
  import { Vector4 } from '../../math/Vector4.js';
26
26
  import { RenderTarget } from '../../core/RenderTarget.js';
27
- import { DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoColorSpace, NoToneMapping, LinearFilter, LinearSRGBColorSpace, HalfFloatType, RGBAFormat, PCFShadowMap } from '../../constants.js';
27
+ import { DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping, LinearFilter, LinearSRGBColorSpace, HalfFloatType, RGBAFormat, PCFShadowMap } from '../../constants.js';
28
28
 
29
29
  const _scene = /*@__PURE__*/ new Scene();
30
30
  const _drawingBufferSize = /*@__PURE__*/ new Vector2();
31
31
  const _screen = /*@__PURE__*/ new Vector4();
32
32
  const _frustum = /*@__PURE__*/ new Frustum();
33
33
  const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
34
- const _vector3 = /*@__PURE__*/ new Vector3();
34
+ const _vector4 = /*@__PURE__*/ new Vector4();
35
35
 
36
36
  class Renderer {
37
37
 
@@ -44,8 +44,11 @@ class Renderer {
44
44
  const {
45
45
  logarithmicDepthBuffer = false,
46
46
  alpha = true,
47
+ depth = true,
48
+ stencil = false,
47
49
  antialias = false,
48
- samples = 0
50
+ samples = 0,
51
+ getFallback = null
49
52
  } = parameters;
50
53
 
51
54
  // public
@@ -71,15 +74,23 @@ class Renderer {
71
74
 
72
75
  this.sortObjects = true;
73
76
 
74
- this.depth = true;
75
- this.stencil = false;
77
+ this.depth = depth;
78
+ this.stencil = stencil;
76
79
 
77
80
  this.clippingPlanes = [];
78
81
 
79
82
  this.info = new Info();
80
83
 
84
+ this.nodes = {
85
+ library: new NodeLibrary(),
86
+ modelViewMatrix: null,
87
+ modelNormalViewMatrix: null
88
+ };
89
+
81
90
  // internals
82
91
 
92
+ this._getFallback = getFallback;
93
+
83
94
  this._pixelRatio = 1;
84
95
  this._width = this.domElement.width;
85
96
  this._height = this.domElement.height;
@@ -102,6 +113,7 @@ class Renderer {
102
113
  this._background = null;
103
114
 
104
115
  this._quad = new QuadMesh( new NodeMaterial() );
116
+ this._quad.material.type = 'Renderer_output';
105
117
 
106
118
  this._currentRenderContext = null;
107
119
 
@@ -147,7 +159,23 @@ class Renderer {
147
159
 
148
160
  this.debug = {
149
161
  checkShaderErrors: true,
150
- onShaderError: null
162
+ onShaderError: null,
163
+ getShaderAsync: async ( scene, camera, object ) => {
164
+
165
+ await this.compileAsync( scene, camera );
166
+
167
+ const renderList = this._renderLists.get( scene, camera );
168
+ const renderContext = this._renderContexts.get( scene, camera, this._renderTarget );
169
+
170
+ const material = scene.overrideMaterial || object.material;
171
+
172
+ const renderObject = this._objects.get( object, material, scene, camera, renderList.lightsNode, renderContext );
173
+
174
+ const { fragmentShader, vertexShader } = renderObject.getNodeBuilderState();
175
+
176
+ return { fragmentShader, vertexShader };
177
+
178
+ }
151
179
  };
152
180
 
153
181
  }
@@ -168,7 +196,7 @@ class Renderer {
168
196
 
169
197
  this._initPromise = new Promise( async ( resolve, reject ) => {
170
198
 
171
- const backend = this.backend;
199
+ let backend = this.backend;
172
200
 
173
201
  try {
174
202
 
@@ -176,8 +204,28 @@ class Renderer {
176
204
 
177
205
  } catch ( error ) {
178
206
 
179
- reject( error );
180
- return;
207
+ if ( this._getFallback !== null ) {
208
+
209
+ // try the fallback
210
+
211
+ try {
212
+
213
+ this.backend = backend = this._getFallback( error );
214
+ await backend.init( this );
215
+
216
+ } catch ( error ) {
217
+
218
+ reject( error );
219
+ return;
220
+
221
+ }
222
+
223
+ } else {
224
+
225
+ reject( error );
226
+ return;
227
+
228
+ }
181
229
 
182
230
  }
183
231
 
@@ -363,37 +411,31 @@ class Renderer {
363
411
 
364
412
  _renderBundle( bundle, sceneRef, lightsNode ) {
365
413
 
366
- const { object, camera, renderList } = bundle;
414
+ const { bundleGroup, camera, renderList } = bundle;
367
415
 
368
416
  const renderContext = this._currentRenderContext;
369
- const renderContextData = this.backend.get( renderContext );
370
417
 
371
418
  //
372
419
 
373
- const renderBundle = this._bundles.get( object, camera );
374
-
420
+ const renderBundle = this._bundles.get( bundleGroup, camera );
375
421
  const renderBundleData = this.backend.get( renderBundle );
422
+
376
423
  if ( renderBundleData.renderContexts === undefined ) renderBundleData.renderContexts = new Set();
377
424
 
378
425
  //
379
426
 
380
- const renderBundleNeedsUpdate = renderBundleData.renderContexts.has( renderContext ) === false || object.needsUpdate === true;
427
+ const needsUpdate = bundleGroup.version !== renderBundleData.version;
428
+ const renderBundleNeedsUpdate = renderBundleData.renderContexts.has( renderContext ) === false || needsUpdate;
381
429
 
382
430
  renderBundleData.renderContexts.add( renderContext );
383
431
 
384
432
  if ( renderBundleNeedsUpdate ) {
385
433
 
386
- if ( renderContextData.renderObjects === undefined || object.needsUpdate === true ) {
434
+ this.backend.beginBundle( renderContext );
387
435
 
388
- const nodeFrame = this._nodes.nodeFrame;
436
+ if ( renderBundleData.renderObjects === undefined || needsUpdate ) {
389
437
 
390
- renderContextData.renderObjects = [];
391
- renderContextData.renderBundles = [];
392
- renderContextData.scene = sceneRef;
393
- renderContextData.camera = camera;
394
- renderContextData.renderId = nodeFrame.renderId;
395
-
396
- renderContextData.registerBundlesPhase = true;
438
+ renderBundleData.renderObjects = [];
397
439
 
398
440
  }
399
441
 
@@ -407,35 +449,35 @@ class Renderer {
407
449
 
408
450
  //
409
451
 
410
- object.needsUpdate = false;
452
+ this.backend.finishBundle( renderContext, renderBundle );
411
453
 
412
- } else {
454
+ renderBundleData.version = bundleGroup.version;
413
455
 
414
- const renderContext = this._currentRenderContext;
415
- const renderContextData = this.backend.get( renderContext );
456
+ } else {
416
457
 
417
- for ( let i = 0, l = renderContextData.renderObjects.length; i < l; i ++ ) {
458
+ const { renderObjects } = renderBundleData;
418
459
 
419
- const renderObject = renderContextData.renderObjects[ i ];
460
+ for ( let i = 0, l = renderObjects.length; i < l; i ++ ) {
420
461
 
421
- this._nodes.updateBefore( renderObject );
462
+ const renderObject = renderObjects[ i ];
422
463
 
423
- //
464
+ if ( this._nodes.needsRefresh( renderObject ) ) {
424
465
 
425
- renderObject.object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, renderObject.object.matrixWorld );
426
- renderObject.object.normalMatrix.getNormalMatrix( renderObject.object.modelViewMatrix );
466
+ this._nodes.updateBefore( renderObject );
427
467
 
428
- this._nodes.updateForRender( renderObject );
429
- this._bindings.updateForRender( renderObject );
468
+ this._nodes.updateForRender( renderObject );
469
+ this._bindings.updateForRender( renderObject );
430
470
 
431
- this.backend.draw( renderObject, this.info );
471
+ this._nodes.updateAfter( renderObject );
432
472
 
433
- this._nodes.updateAfter( renderObject );
473
+ }
434
474
 
435
475
  }
436
476
 
437
477
  }
438
478
 
479
+ this.backend.addBundle( renderContext, renderBundle );
480
+
439
481
  }
440
482
 
441
483
  render( scene, camera ) {
@@ -454,10 +496,10 @@ class Renderer {
454
496
 
455
497
  _getFrameBufferTarget() {
456
498
 
457
- const { currentColorSpace } = this;
499
+ const { currentToneMapping, currentColorSpace } = this;
458
500
 
459
- const useToneMapping = this._renderTarget === null && ( this.toneMapping !== NoToneMapping );
460
- const useColorSpace = this._renderTarget === null && ( currentColorSpace !== LinearSRGBColorSpace && currentColorSpace !== NoColorSpace );
501
+ const useToneMapping = currentToneMapping !== NoToneMapping;
502
+ const useColorSpace = currentColorSpace !== LinearSRGBColorSpace;
461
503
 
462
504
  if ( useToneMapping === false && useColorSpace === false ) return null;
463
505
 
@@ -674,10 +716,12 @@ class Renderer {
674
716
 
675
717
  // process render lists
676
718
 
677
- const opaqueObjects = renderList.opaque;
678
- const transparentObjects = renderList.transparent;
679
- const bundles = renderList.bundles;
680
- const lightsNode = renderList.lightsNode;
719
+ const {
720
+ bundles,
721
+ lightsNode,
722
+ transparent: transparentObjects,
723
+ opaque: opaqueObjects
724
+ } = renderList;
681
725
 
682
726
  if ( bundles.length > 0 ) this._renderBundles( bundles, sceneRef, lightsNode );
683
727
  if ( this.opaque === true && opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
@@ -1049,19 +1093,15 @@ class Renderer {
1049
1093
 
1050
1094
  }
1051
1095
 
1052
- get currentColorSpace() {
1053
-
1054
- const renderTarget = this._renderTarget;
1055
-
1056
- if ( renderTarget !== null ) {
1096
+ get currentToneMapping() {
1057
1097
 
1058
- const texture = renderTarget.texture;
1098
+ return this._renderTarget !== null ? NoToneMapping : this.toneMapping;
1059
1099
 
1060
- return ( Array.isArray( texture ) ? texture[ 0 ] : texture ).colorSpace;
1100
+ }
1061
1101
 
1062
- }
1102
+ get currentColorSpace() {
1063
1103
 
1064
- return this.outputColorSpace;
1104
+ return this._renderTarget !== null ? LinearSRGBColorSpace : this.outputColorSpace;
1065
1105
 
1066
1106
  }
1067
1107
 
@@ -1208,13 +1248,15 @@ class Renderer {
1208
1248
 
1209
1249
  }
1210
1250
 
1211
- copyFramebufferToTexture( framebufferTexture ) {
1251
+ copyFramebufferToTexture( framebufferTexture, rectangle = null ) {
1212
1252
 
1213
1253
  const renderContext = this._currentRenderContext;
1214
1254
 
1215
1255
  this._textures.updateTexture( framebufferTexture );
1216
1256
 
1217
- this.backend.copyFramebufferToTexture( framebufferTexture, renderContext );
1257
+ rectangle = rectangle === null ? _vector4.set( 0, 0, framebufferTexture.image.width, framebufferTexture.image.height ) : rectangle;
1258
+
1259
+ this.backend.copyFramebufferToTexture( framebufferTexture, renderContext, rectangle );
1218
1260
 
1219
1261
  }
1220
1262
 
@@ -1228,9 +1270,9 @@ class Renderer {
1228
1270
  }
1229
1271
 
1230
1272
 
1231
- readRenderTargetPixelsAsync( renderTarget, x, y, width, height, index = 0 ) {
1273
+ readRenderTargetPixelsAsync( renderTarget, x, y, width, height, index = 0, faceIndex = 0 ) {
1232
1274
 
1233
- return this.backend.copyTextureToBuffer( renderTarget.textures[ index ], x, y, width, height );
1275
+ return this.backend.copyTextureToBuffer( renderTarget.textures[ index ], x, y, width, height, faceIndex );
1234
1276
 
1235
1277
  }
1236
1278
 
@@ -1260,16 +1302,15 @@ class Renderer {
1260
1302
 
1261
1303
  if ( this.sortObjects === true ) {
1262
1304
 
1263
- _vector3.setFromMatrixPosition( object.matrixWorld ).applyMatrix4( _projScreenMatrix );
1305
+ _vector4.setFromMatrixPosition( object.matrixWorld ).applyMatrix4( _projScreenMatrix );
1264
1306
 
1265
1307
  }
1266
1308
 
1267
- const geometry = object.geometry;
1268
- const material = object.material;
1309
+ const { geometry, material } = object;
1269
1310
 
1270
1311
  if ( material.visible ) {
1271
1312
 
1272
- renderList.push( object, geometry, material, groupOrder, _vector3.z, null );
1313
+ renderList.push( object, geometry, material, groupOrder, _vector4.z, null );
1273
1314
 
1274
1315
  }
1275
1316
 
@@ -1283,14 +1324,13 @@ class Renderer {
1283
1324
 
1284
1325
  if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {
1285
1326
 
1286
- const geometry = object.geometry;
1287
- const material = object.material;
1327
+ const { geometry, material } = object;
1288
1328
 
1289
1329
  if ( this.sortObjects === true ) {
1290
1330
 
1291
1331
  if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
1292
1332
 
1293
- _vector3
1333
+ _vector4
1294
1334
  .copy( geometry.boundingSphere.center )
1295
1335
  .applyMatrix4( object.matrixWorld )
1296
1336
  .applyMatrix4( _projScreenMatrix );
@@ -1308,7 +1348,7 @@ class Renderer {
1308
1348
 
1309
1349
  if ( groupMaterial && groupMaterial.visible ) {
1310
1350
 
1311
- renderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );
1351
+ renderList.push( object, geometry, groupMaterial, groupOrder, _vector4.z, group );
1312
1352
 
1313
1353
  }
1314
1354
 
@@ -1316,7 +1356,7 @@ class Renderer {
1316
1356
 
1317
1357
  } else if ( material.visible ) {
1318
1358
 
1319
- renderList.push( object, geometry, material, groupOrder, _vector3.z, null );
1359
+ renderList.push( object, geometry, material, groupOrder, _vector4.z, null );
1320
1360
 
1321
1361
  }
1322
1362
 
@@ -1326,7 +1366,7 @@ class Renderer {
1326
1366
 
1327
1367
  }
1328
1368
 
1329
- if ( object.static === true ) {
1369
+ if ( object.isBundleGroup === true && this.backend.beginBundle !== undefined ) {
1330
1370
 
1331
1371
  const baseRenderList = renderList;
1332
1372
 
@@ -1336,7 +1376,7 @@ class Renderer {
1336
1376
  renderList.begin();
1337
1377
 
1338
1378
  baseRenderList.pushBundle( {
1339
- object,
1379
+ bundleGroup: object,
1340
1380
  camera,
1341
1381
  renderList,
1342
1382
  } );
@@ -1536,46 +1576,41 @@ class Renderer {
1536
1576
  _renderObjectDirect( object, material, scene, camera, lightsNode, group, passId ) {
1537
1577
 
1538
1578
  const renderObject = this._objects.get( object, material, scene, camera, lightsNode, this._currentRenderContext, passId );
1539
- renderObject.drawRange = group || object.geometry.drawRange;
1579
+ renderObject.drawRange = object.geometry.drawRange;
1580
+ renderObject.group = group;
1540
1581
 
1541
1582
  //
1542
1583
 
1543
- this._nodes.updateBefore( renderObject );
1584
+ const needsRefresh = this._nodes.needsRefresh( renderObject );
1544
1585
 
1545
- //
1586
+ if ( needsRefresh ) {
1546
1587
 
1547
- object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
1548
- object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
1588
+ this._nodes.updateBefore( renderObject );
1549
1589
 
1550
- //
1590
+ this._geometries.updateForRender( renderObject );
1591
+
1592
+ this._nodes.updateForRender( renderObject );
1593
+ this._bindings.updateForRender( renderObject );
1594
+
1595
+ }
1551
1596
 
1552
- this._nodes.updateForRender( renderObject );
1553
- this._geometries.updateForRender( renderObject );
1554
- this._bindings.updateForRender( renderObject );
1555
1597
  this._pipelines.updateForRender( renderObject );
1556
1598
 
1557
1599
  //
1558
1600
 
1559
- if ( this._currentRenderBundle !== null && this._currentRenderBundle.needsUpdate === true ) {
1601
+ if ( this._currentRenderBundle !== null ) {
1602
+
1603
+ const renderBundleData = this.backend.get( this._currentRenderBundle );
1560
1604
 
1561
- const renderObjectData = this.backend.get( renderObject );
1605
+ renderBundleData.renderObjects.push( renderObject );
1562
1606
 
1563
- renderObjectData.bundleEncoder = undefined;
1564
- renderObjectData.lastPipelineGPU = undefined;
1607
+ renderObject.bundle = this._currentRenderBundle.scene;
1565
1608
 
1566
1609
  }
1567
1610
 
1568
1611
  this.backend.draw( renderObject, this.info );
1569
1612
 
1570
- if ( this._currentRenderBundle !== null ) {
1571
-
1572
- const renderContextData = this.backend.get( this._currentRenderContext );
1573
-
1574
- renderContextData.renderObjects.push( renderObject );
1575
-
1576
- }
1577
-
1578
- this._nodes.updateAfter( renderObject );
1613
+ if ( needsRefresh ) this._nodes.updateAfter( renderObject );
1579
1614
 
1580
1615
  }
1581
1616
 
@@ -1587,10 +1622,9 @@ class Renderer {
1587
1622
 
1588
1623
  this._nodes.updateBefore( renderObject );
1589
1624
 
1590
- //
1625
+ this._geometries.updateForRender( renderObject );
1591
1626
 
1592
1627
  this._nodes.updateForRender( renderObject );
1593
- this._geometries.updateForRender( renderObject );
1594
1628
  this._bindings.updateForRender( renderObject );
1595
1629
 
1596
1630
  this._pipelines.getForRender( renderObject, this._compilationPromises );
@@ -13,16 +13,25 @@ class SampledTexture extends Binding {
13
13
  this.texture = texture;
14
14
  this.version = texture ? texture.version : 0;
15
15
  this.store = false;
16
+ this.generation = null;
16
17
 
17
18
  this.isSampledTexture = true;
18
19
 
19
20
  }
20
21
 
21
- get needsBindingsUpdate() {
22
+ needsBindingsUpdate( generation ) {
22
23
 
23
- const { texture, version } = this;
24
+ const { texture } = this;
25
+
26
+ if ( generation !== this.generation ) {
27
+
28
+ this.generation = generation;
29
+
30
+ return true;
31
+
32
+ }
24
33
 
25
- return texture.isVideoTexture ? true : version !== texture.version; // @TODO: version === 0 && texture.version > 0 ( add it just to External Textures like PNG,JPG )
34
+ return texture.isVideoTexture;
26
35
 
27
36
  }
28
37
 
@@ -25,10 +25,9 @@ class Textures extends DataMap {
25
25
  const sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples;
26
26
  const depthTextureMips = renderTargetData.depthTextureMips || ( renderTargetData.depthTextureMips = {} );
27
27
 
28
- const texture = renderTarget.texture;
29
28
  const textures = renderTarget.textures;
30
29
 
31
- const size = this.getSize( texture );
30
+ const size = this.getSize( textures[ 0 ] );
32
31
 
33
32
  const mipWidth = size.width >> activeMipmapLevel;
34
33
  const mipHeight = size.height >> activeMipmapLevel;
@@ -103,17 +102,9 @@ class Textures extends DataMap {
103
102
 
104
103
  renderTarget.removeEventListener( 'dispose', onDispose );
105
104
 
106
- if ( textures !== undefined ) {
105
+ for ( let i = 0; i < textures.length; i ++ ) {
107
106
 
108
- for ( let i = 0; i < textures.length; i ++ ) {
109
-
110
- this._destroyTexture( textures[ i ] );
111
-
112
- }
113
-
114
- } else {
115
-
116
- this._destroyTexture( texture );
107
+ this._destroyTexture( textures[ i ] );
117
108
 
118
109
  }
119
110
 
@@ -182,6 +173,8 @@ class Textures extends DataMap {
182
173
  backend.createSampler( texture );
183
174
  backend.createTexture( texture, options );
184
175
 
176
+ textureData.generation = texture.version;
177
+
185
178
  } else {
186
179
 
187
180
  const needsCreate = textureData.initialized !== true;
@@ -225,6 +218,7 @@ class Textures extends DataMap {
225
218
  backend.createTexture( texture, options );
226
219
 
227
220
  textureData.isDefaultTexture = false;
221
+ textureData.generation = texture.version;
228
222
 
229
223
  }
230
224
 
@@ -241,6 +235,7 @@ class Textures extends DataMap {
241
235
  backend.createDefaultTexture( texture );
242
236
 
243
237
  textureData.isDefaultTexture = true;
238
+ textureData.generation = texture.version;
244
239
 
245
240
  }
246
241
 
@@ -251,6 +246,7 @@ class Textures extends DataMap {
251
246
  if ( textureData.initialized !== true ) {
252
247
 
253
248
  textureData.initialized = true;
249
+ textureData.generation = texture.version;
254
250
 
255
251
  //
256
252
 
@@ -1,12 +1,12 @@
1
- import NodeMaterial from '../../../nodes/materials/NodeMaterial.js';
1
+ import NodeMaterial from '../../../materials/nodes/NodeMaterial.js';
2
2
  import { getDirection, blur } from '../../../nodes/pmrem/PMREMUtils.js';
3
3
  import { equirectUV } from '../../../nodes/utils/EquirectUVNode.js';
4
4
  import { uniform } from '../../../nodes/core/UniformNode.js';
5
- import { uniforms } from '../../../nodes/accessors/UniformsNode.js';
5
+ import { uniformArray } from '../../../nodes/accessors/UniformArrayNode.js';
6
6
  import { texture } from '../../../nodes/accessors/TextureNode.js';
7
7
  import { cubeTexture } from '../../../nodes/accessors/CubeTextureNode.js';
8
- import { float, vec3 } from '../../../nodes/shadernode/ShaderNode.js';
9
- import { uv } from '../../../nodes/accessors/UVNode.js';
8
+ import { float, vec3 } from '../../../nodes/tsl/TSLBase.js';
9
+ import { uv } from '../../../nodes/accessors/UV.js';
10
10
  import { attribute } from '../../../nodes/core/AttributeNode.js';
11
11
 
12
12
  import { OrthographicCamera } from '../../../cameras/OrthographicCamera.js';
@@ -176,12 +176,12 @@ class PMREMGenerator {
176
176
  * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during
177
177
  * your texture's network fetch for increased concurrency.
178
178
  */
179
- compileCubemapShader() {
179
+ async compileCubemapShader() {
180
180
 
181
181
  if ( this._cubemapMaterial === null ) {
182
182
 
183
183
  this._cubemapMaterial = _getCubemapMaterial();
184
- this._compileMaterial( this._cubemapMaterial );
184
+ await this._compileMaterial( this._cubemapMaterial );
185
185
 
186
186
  }
187
187
 
@@ -191,12 +191,12 @@ class PMREMGenerator {
191
191
  * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during
192
192
  * your texture's network fetch for increased concurrency.
193
193
  */
194
- compileEquirectangularShader() {
194
+ async compileEquirectangularShader() {
195
195
 
196
196
  if ( this._equirectMaterial === null ) {
197
197
 
198
198
  this._equirectMaterial = _getEquirectMaterial();
199
- this._compileMaterial( this._equirectMaterial );
199
+ await this._compileMaterial( this._equirectMaterial );
200
200
 
201
201
  }
202
202
 
@@ -316,12 +316,10 @@ class PMREMGenerator {
316
316
 
317
317
  }
318
318
 
319
- _compileMaterial( material ) {
319
+ async _compileMaterial( material ) {
320
320
 
321
- const tmpMesh = this._lodMeshes[ 0 ];
322
- tmpMesh.material = material;
323
-
324
- this._renderer.compile( tmpMesh, _flatCamera );
321
+ const tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );
322
+ await this._renderer.compile( tmpMesh, _flatCamera );
325
323
 
326
324
  }
327
325
 
@@ -698,19 +696,18 @@ function _createRenderTarget( width, height, params ) {
698
696
 
699
697
  function _setViewport( target, x, y, width, height ) {
700
698
 
701
- const viewY = target.height - height - y;
702
-
703
- target.viewport.set( x, viewY, width, height );
704
- target.scissor.set( x, viewY, width, height );
699
+ target.viewport.set( x, y, width, height );
700
+ target.scissor.set( x, y, width, height );
705
701
 
706
702
  }
707
703
 
708
- function _getMaterial() {
704
+ function _getMaterial( type ) {
709
705
 
710
706
  const material = new NodeMaterial();
711
707
  material.depthTest = false;
712
708
  material.depthWrite = false;
713
709
  material.blending = NoBlending;
710
+ material.name = `PMREM_${ type }`;
714
711
 
715
712
  return material;
716
713
 
@@ -718,7 +715,7 @@ function _getMaterial() {
718
715
 
719
716
  function _getBlurShader( lodMax, width, height ) {
720
717
 
721
- const weights = uniforms( new Array( MAX_SAMPLES ).fill( 0 ) );
718
+ const weights = uniformArray( new Array( MAX_SAMPLES ).fill( 0 ) );
722
719
  const poleAxis = uniform( new Vector3( 0, 1, 0 ) );
723
720
  const dTheta = uniform( 0 );
724
721
  const n = float( MAX_SAMPLES );
@@ -745,7 +742,7 @@ function _getBlurShader( lodMax, width, height ) {
745
742
  CUBEUV_MAX_MIP
746
743
  };
747
744
 
748
- const material = _getMaterial();
745
+ const material = _getMaterial( 'blur' );
749
746
  material.uniforms = materialUniforms; // TODO: Move to outside of the material
750
747
  material.fragmentNode = blur( { ...materialUniforms, latitudinal: latitudinal.equal( 1 ) } );
751
748
 
@@ -755,7 +752,7 @@ function _getBlurShader( lodMax, width, height ) {
755
752
 
756
753
  function _getCubemapMaterial( envTexture ) {
757
754
 
758
- const material = _getMaterial();
755
+ const material = _getMaterial( 'cubemap' );
759
756
  material.fragmentNode = cubeTexture( envTexture, outputDirection );
760
757
 
761
758
  return material;
@@ -764,7 +761,7 @@ function _getCubemapMaterial( envTexture ) {
764
761
 
765
762
  function _getEquirectMaterial( envTexture ) {
766
763
 
767
- const material = _getMaterial();
764
+ const material = _getMaterial( 'equirect' );
768
765
  material.fragmentNode = texture( envTexture, equirectUV( outputDirection ), 0 );
769
766
 
770
767
  return material;