super-three 0.165.0 → 0.168.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 (462) hide show
  1. package/build/three.cjs +854 -410
  2. package/build/three.module.js +849 -411
  3. package/build/three.module.min.js +1 -1
  4. package/build/three.webgpu.js +77755 -0
  5. package/build/three.webgpu.min.js +6 -0
  6. package/examples/jsm/Addons.js +5 -2
  7. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  8. package/examples/jsm/capabilities/WebGL.js +27 -21
  9. package/examples/jsm/controls/ArcballControls.js +174 -158
  10. package/examples/jsm/controls/DragControls.js +260 -132
  11. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  12. package/examples/jsm/controls/FlyControls.js +194 -188
  13. package/examples/jsm/controls/OrbitControls.js +777 -786
  14. package/examples/jsm/controls/PointerLockControls.js +24 -15
  15. package/examples/jsm/controls/TrackballControls.js +453 -452
  16. package/examples/jsm/csm/CSMShader.js +4 -4
  17. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  18. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  19. package/examples/jsm/effects/StereoEffect.js +6 -1
  20. package/examples/jsm/environments/RoomEnvironment.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +13 -4
  22. package/examples/jsm/exporters/USDZExporter.js +29 -8
  23. package/examples/jsm/geometries/TeapotGeometry.js +1 -1
  24. package/examples/jsm/helpers/LightProbeHelper.js +42 -43
  25. package/examples/jsm/helpers/ViewHelper.js +51 -2
  26. package/examples/jsm/libs/tween.module.js +64 -75
  27. package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
  28. package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
  29. package/examples/jsm/lines/webgpu/Line2.js +20 -0
  30. package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
  31. package/examples/jsm/loaders/FBXLoader.js +23 -45
  32. package/examples/jsm/loaders/GLTFLoader.js +10 -4
  33. package/examples/jsm/loaders/KTX2Loader.js +19 -7
  34. package/examples/jsm/loaders/MaterialXLoader.js +10 -10
  35. package/examples/jsm/loaders/PCDLoader.js +9 -9
  36. package/examples/jsm/loaders/USDZLoader.js +124 -76
  37. package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
  38. package/examples/jsm/loaders/VTKLoader.js +76 -3
  39. package/examples/jsm/misc/GPUComputationRenderer.js +9 -19
  40. package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
  41. package/examples/jsm/objects/InstancedPoints.js +2 -2
  42. package/examples/jsm/objects/SkyMesh.js +188 -0
  43. package/examples/jsm/objects/Water2Mesh.js +159 -0
  44. package/examples/jsm/objects/WaterMesh.js +102 -0
  45. package/examples/jsm/physics/RapierPhysics.js +20 -0
  46. package/examples/jsm/postprocessing/OutlinePass.js +31 -46
  47. package/examples/jsm/postprocessing/RenderTransitionPass.js +13 -38
  48. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  49. package/examples/jsm/postprocessing/SSAOPass.js +6 -9
  50. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
  51. package/examples/jsm/shaders/BleachBypassShader.js +1 -2
  52. package/examples/jsm/shaders/ColorifyShader.js +1 -2
  53. package/examples/jsm/shaders/FXAAShader.js +0 -2
  54. package/examples/jsm/shaders/GTAOShader.js +1 -1
  55. package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
  56. package/examples/jsm/shaders/OutputShader.js +1 -1
  57. package/examples/jsm/transpiler/GLSLDecoder.js +46 -4
  58. package/examples/jsm/transpiler/TSLEncoder.js +24 -22
  59. package/examples/jsm/utils/TextureUtils.js +1 -1
  60. package/package.json +8 -6
  61. package/src/Three.WebGPU.js +200 -0
  62. package/src/Three.js +3 -0
  63. package/src/constants.js +4 -1
  64. package/src/core/Object3D.js +22 -22
  65. package/src/extras/Controls.js +32 -0
  66. package/src/extras/TextureUtils.js +210 -0
  67. package/src/lights/Light.js +1 -0
  68. package/src/lights/LightShadow.js +5 -0
  69. package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
  70. package/src/loaders/ObjectLoader.js +33 -2
  71. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeLoader.js +6 -4
  72. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeMaterialLoader.js +2 -2
  73. package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeObjectLoader.js +2 -1
  74. package/src/materials/Material.js +7 -1
  75. package/{examples/jsm/nodes/materials → src/materials/nodes}/InstancedPointsNodeMaterial.js +36 -27
  76. package/{examples/jsm/nodes/materials → src/materials/nodes}/Line2NodeMaterial.js +37 -40
  77. package/src/materials/nodes/LineBasicNodeMaterial.js +27 -0
  78. package/{examples/jsm/nodes/materials → src/materials/nodes}/LineDashedNodeMaterial.js +10 -11
  79. package/src/materials/nodes/MeshBasicNodeMaterial.js +73 -0
  80. package/src/materials/nodes/MeshLambertNodeMaterial.js +43 -0
  81. package/src/materials/nodes/MeshMatcapNodeMaterial.js +53 -0
  82. package/src/materials/nodes/MeshNormalNodeMaterial.js +40 -0
  83. package/src/materials/nodes/MeshPhongNodeMaterial.js +74 -0
  84. package/{examples/jsm/nodes/materials → src/materials/nodes}/MeshPhysicalNodeMaterial.js +22 -20
  85. package/{examples/jsm/nodes/materials → src/materials/nodes}/MeshSSSNodeMaterial.js +6 -6
  86. package/{examples/jsm/nodes/materials → src/materials/nodes}/MeshStandardNodeMaterial.js +28 -11
  87. package/src/materials/nodes/MeshToonNodeMaterial.js +34 -0
  88. package/{examples/jsm/nodes/materials → src/materials/nodes}/NodeMaterial.js +142 -96
  89. package/{examples/jsm/nodes/materials/Materials.js → src/materials/nodes/NodeMaterials.js} +1 -1
  90. package/{examples/jsm/nodes/materials → src/materials/nodes}/PointsNodeMaterial.js +5 -6
  91. package/src/materials/nodes/ShadowNodeMaterial.js +34 -0
  92. package/{examples/jsm/nodes/materials → src/materials/nodes}/SpriteNodeMaterial.js +13 -13
  93. package/{examples/jsm/nodes/materials → src/materials/nodes}/VolumeNodeMaterial.js +14 -16
  94. package/src/math/Box2.js +4 -4
  95. package/src/math/Box3.js +6 -6
  96. package/src/math/ColorManagement.js +10 -0
  97. package/src/math/Matrix2.js +54 -0
  98. package/src/math/Vector4.js +13 -0
  99. package/src/nodes/Nodes.js +164 -0
  100. package/src/nodes/TSL.js +176 -0
  101. package/{examples/jsm → src}/nodes/accessors/AccessorsUtils.js +8 -8
  102. package/src/nodes/accessors/BatchNode.js +124 -0
  103. package/{examples/jsm/nodes/accessors/BitangentNode.js → src/nodes/accessors/Bitangent.js} +9 -9
  104. package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +41 -6
  105. package/{examples/jsm → src}/nodes/accessors/BufferNode.js +4 -4
  106. package/src/nodes/accessors/Camera.js +19 -0
  107. package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +16 -14
  108. package/src/nodes/accessors/CubeTextureNode.js +76 -0
  109. package/src/nodes/accessors/InstanceNode.js +144 -0
  110. package/src/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
  111. package/{examples/jsm → src}/nodes/accessors/MaterialNode.js +66 -49
  112. package/src/nodes/accessors/MaterialProperties.js +3 -0
  113. package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +6 -4
  114. package/src/nodes/accessors/ModelNode.js +37 -0
  115. package/{examples/jsm → src}/nodes/accessors/ModelViewProjectionNode.js +6 -7
  116. package/{examples/jsm → src}/nodes/accessors/MorphNode.js +35 -31
  117. package/src/nodes/accessors/Normal.js +62 -0
  118. package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +11 -11
  119. package/src/nodes/accessors/PointUVNode.js +26 -0
  120. package/src/nodes/accessors/Position.js +10 -0
  121. package/src/nodes/accessors/ReferenceBaseNode.js +143 -0
  122. package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +14 -8
  123. package/src/nodes/accessors/ReflectVector.js +10 -0
  124. package/{examples/jsm → src}/nodes/accessors/RendererReferenceNode.js +6 -6
  125. package/{examples/jsm → src}/nodes/accessors/SceneNode.js +5 -6
  126. package/src/nodes/accessors/SkinningNode.js +187 -0
  127. package/{examples/jsm → src}/nodes/accessors/StorageBufferNode.js +54 -6
  128. package/{examples/jsm → src}/nodes/accessors/StorageTextureNode.js +16 -7
  129. package/src/nodes/accessors/Tangent.js +22 -0
  130. package/{examples/jsm → src}/nodes/accessors/Texture3DNode.js +11 -11
  131. package/{examples/jsm/nodes/accessors/TextureBicubicNode.js → src/nodes/accessors/TextureBicubic.js} +3 -32
  132. package/{examples/jsm → src}/nodes/accessors/TextureNode.js +69 -37
  133. package/{examples/jsm → src}/nodes/accessors/TextureSizeNode.js +4 -6
  134. package/{examples/jsm/nodes/accessors/UniformsNode.js → src/nodes/accessors/UniformArrayNode.js} +24 -9
  135. package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +4 -4
  136. package/src/nodes/accessors/VelocityNode.js +83 -0
  137. package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +6 -5
  138. package/{examples/jsm → src}/nodes/code/CodeNode.js +5 -5
  139. package/{examples/jsm → src}/nodes/code/ExpressionNode.js +4 -4
  140. package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +5 -5
  141. package/{examples/jsm → src}/nodes/code/FunctionNode.js +5 -23
  142. package/{examples/jsm → src}/nodes/code/ScriptableNode.js +18 -6
  143. package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +6 -7
  144. package/{examples/jsm → src}/nodes/core/AssignNode.js +5 -5
  145. package/{examples/jsm → src}/nodes/core/AttributeNode.js +22 -21
  146. package/{examples/jsm → src}/nodes/core/BypassNode.js +5 -5
  147. package/src/nodes/core/CacheNode.js +46 -0
  148. package/{examples/jsm → src}/nodes/core/ConstNode.js +2 -2
  149. package/{examples/jsm → src}/nodes/core/ContextNode.js +17 -11
  150. package/{examples/jsm → src}/nodes/core/IndexNode.js +17 -6
  151. package/{examples/jsm → src}/nodes/core/InputNode.js +2 -2
  152. package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
  153. package/src/nodes/core/MRTNode.js +82 -0
  154. package/{examples/jsm → src}/nodes/core/Node.js +57 -31
  155. package/{examples/jsm → src}/nodes/core/NodeBuilder.js +216 -65
  156. package/src/nodes/core/NodeCache.js +36 -0
  157. package/{examples/jsm → src}/nodes/core/NodeFrame.js +42 -0
  158. package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
  159. package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
  160. package/{examples/jsm → src}/nodes/core/NodeUtils.js +7 -1
  161. package/{examples/jsm → src}/nodes/core/OutputStructNode.js +4 -4
  162. package/{examples/jsm → src}/nodes/core/ParameterNode.js +4 -4
  163. package/src/nodes/core/PropertyNode.js +84 -0
  164. package/{examples/jsm → src}/nodes/core/StackNode.js +26 -10
  165. package/{examples/jsm → src}/nodes/core/StructTypeNode.js +2 -2
  166. package/{examples/jsm → src}/nodes/core/TempNode.js +4 -4
  167. package/src/nodes/core/UniformGroupNode.js +55 -0
  168. package/{examples/jsm → src}/nodes/core/UniformNode.js +14 -5
  169. package/{examples/jsm → src}/nodes/core/VarNode.js +8 -12
  170. package/{examples/jsm → src}/nodes/core/VaryingNode.js +13 -5
  171. package/{examples/jsm → src}/nodes/display/AfterImageNode.js +27 -35
  172. package/src/nodes/display/AnaglyphPassNode.js +61 -0
  173. package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +27 -30
  174. package/src/nodes/display/BleachBypass.js +26 -0
  175. package/src/nodes/display/BlendMode.js +54 -0
  176. package/src/nodes/display/BloomNode.js +335 -0
  177. package/{examples/jsm → src}/nodes/display/BumpMapNode.js +7 -12
  178. package/src/nodes/display/ColorAdjustment.js +46 -0
  179. package/src/nodes/display/ColorSpaceFunctions.js +38 -0
  180. package/src/nodes/display/ColorSpaceNode.js +85 -0
  181. package/src/nodes/display/DenoiseNode.js +201 -0
  182. package/src/nodes/display/DepthOfFieldNode.js +121 -0
  183. package/src/nodes/display/DotScreenNode.js +63 -0
  184. package/src/nodes/display/FXAANode.js +329 -0
  185. package/src/nodes/display/FilmNode.js +53 -0
  186. package/src/nodes/display/FrontFacingNode.js +41 -0
  187. package/src/nodes/display/GTAONode.js +328 -0
  188. package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +44 -24
  189. package/src/nodes/display/Lut3DNode.js +54 -0
  190. package/src/nodes/display/MotionBlur.js +25 -0
  191. package/{examples/jsm → src}/nodes/display/NormalMapNode.js +9 -11
  192. package/src/nodes/display/ParallaxBarrierPassNode.js +55 -0
  193. package/src/nodes/display/PassNode.js +367 -0
  194. package/src/nodes/display/PixelationPassNode.js +206 -0
  195. package/{examples/jsm → src}/nodes/display/PosterizeNode.js +4 -6
  196. package/src/nodes/display/RGBShiftNode.js +50 -0
  197. package/src/nodes/display/RenderOutputNode.js +56 -0
  198. package/src/nodes/display/SSAAPassNode.js +284 -0
  199. package/src/nodes/display/Sepia.js +17 -0
  200. package/src/nodes/display/SobelOperatorNode.js +123 -0
  201. package/src/nodes/display/StereoCompositePassNode.js +107 -0
  202. package/src/nodes/display/StereoPassNode.js +80 -0
  203. package/src/nodes/display/ToneMappingFunctions.js +190 -0
  204. package/src/nodes/display/ToneMappingNode.js +66 -0
  205. package/src/nodes/display/TransitionNode.js +77 -0
  206. package/src/nodes/display/ViewportDepthNode.js +121 -0
  207. package/src/nodes/display/ViewportDepthTextureNode.js +30 -0
  208. package/{examples/jsm → src}/nodes/display/ViewportNode.js +28 -26
  209. package/src/nodes/display/ViewportSharedTextureNode.js +36 -0
  210. package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +12 -12
  211. package/{examples/jsm → src}/nodes/fog/FogExp2Node.js +4 -6
  212. package/{examples/jsm → src}/nodes/fog/FogNode.js +5 -7
  213. package/{examples/jsm → src}/nodes/fog/FogRangeNode.js +4 -6
  214. package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  215. package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  216. package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  217. package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +2 -2
  218. package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +2 -2
  219. package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  220. package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  221. package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +2 -2
  222. package/src/nodes/functions/BSDF/LTC.js +131 -0
  223. package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  224. package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  225. package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  226. package/src/nodes/functions/BasicLightingModel.js +78 -0
  227. package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +10 -8
  228. package/{examples/jsm → src}/nodes/functions/PhysicalLightingModel.js +73 -31
  229. package/{examples/jsm → src}/nodes/functions/ShadowMaskModel.js +1 -1
  230. package/{examples/jsm → src}/nodes/functions/ToonLightingModel.js +6 -4
  231. package/src/nodes/functions/material/getGeometryRoughness.js +13 -0
  232. package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +2 -2
  233. package/{examples/jsm → src}/nodes/geometry/RangeNode.js +23 -10
  234. package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +5 -5
  235. package/src/nodes/lighting/AONode.js +24 -0
  236. package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +2 -7
  237. package/src/nodes/lighting/AnalyticLightNode.js +354 -0
  238. package/src/nodes/lighting/BasicEnvironmentNode.js +27 -0
  239. package/src/nodes/lighting/BasicLightMapNode.js +29 -0
  240. package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +3 -9
  241. package/{examples/jsm → src}/nodes/lighting/EnvironmentNode.js +23 -21
  242. package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +4 -7
  243. package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +3 -8
  244. package/{examples/jsm → src}/nodes/lighting/IrradianceNode.js +2 -2
  245. package/{examples/jsm → src}/nodes/lighting/LightNode.js +5 -5
  246. package/src/nodes/lighting/LightProbeNode.js +76 -0
  247. package/{examples/jsm → src}/nodes/lighting/LightUtils.js +3 -3
  248. package/src/nodes/lighting/LightingContextNode.js +64 -0
  249. package/{examples/jsm → src}/nodes/lighting/LightingNode.js +4 -2
  250. package/src/nodes/lighting/LightsNode.js +231 -0
  251. package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +4 -10
  252. package/src/nodes/lighting/RectAreaLightNode.js +93 -0
  253. package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +4 -10
  254. package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +2 -2
  255. package/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +43 -46
  256. package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +500 -603
  257. package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +3 -9
  258. package/{examples/jsm/nodes/math/CondNode.js → src/nodes/math/ConditionalNode.js} +31 -13
  259. package/src/nodes/math/Hash.js +13 -0
  260. package/src/nodes/math/MathNode.js +404 -0
  261. package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -7
  262. package/{examples/jsm → src}/nodes/math/OperatorNode.js +100 -58
  263. package/{examples/jsm → src}/nodes/math/TriNoise3D.js +19 -29
  264. package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
  265. package/{examples/jsm → src}/nodes/pmrem/PMREMNode.js +60 -16
  266. package/{examples/jsm → src}/nodes/pmrem/PMREMUtils.js +46 -46
  267. package/src/nodes/procedural/Checker.js +14 -0
  268. package/src/nodes/tsl/TSLBase.js +30 -0
  269. package/{examples/jsm/nodes/shadernode/ShaderNode.js → src/nodes/tsl/TSLCore.js} +106 -96
  270. package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +2 -2
  271. package/{examples/jsm → src}/nodes/utils/ConvertNode.js +2 -2
  272. package/src/nodes/utils/CubeMapNode.js +157 -0
  273. package/src/nodes/utils/Discard.js +8 -0
  274. package/{examples/jsm → src}/nodes/utils/EquirectUVNode.js +5 -5
  275. package/src/nodes/utils/FlipNode.js +65 -0
  276. package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +7 -5
  277. package/{examples/jsm → src}/nodes/utils/JoinNode.js +2 -2
  278. package/{examples/jsm → src}/nodes/utils/LoopNode.js +19 -12
  279. package/{examples/jsm → src}/nodes/utils/MatcapUVNode.js +6 -6
  280. package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +12 -6
  281. package/{examples/jsm → src}/nodes/utils/OscNode.js +7 -7
  282. package/src/nodes/utils/Packing.js +4 -0
  283. package/src/nodes/utils/RTTNode.js +130 -0
  284. package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +17 -4
  285. package/{examples/jsm → src}/nodes/utils/RemapNode.js +7 -7
  286. package/{examples/jsm → src}/nodes/utils/RotateNode.js +4 -12
  287. package/{examples/jsm → src}/nodes/utils/SetNode.js +2 -2
  288. package/{examples/jsm → src}/nodes/utils/SplitNode.js +2 -2
  289. package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +5 -5
  290. package/src/nodes/utils/SpriteUtils.js +47 -0
  291. package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +4 -6
  292. package/{examples/jsm → src}/nodes/utils/TimerNode.js +5 -5
  293. package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +7 -9
  294. package/src/nodes/utils/UVUtils.js +19 -0
  295. package/src/nodes/utils/ViewportUtils.js +14 -0
  296. package/src/objects/BatchedMesh.js +169 -190
  297. package/src/objects/InstancedMesh.js +1 -1
  298. package/src/renderers/WebGLRenderer.js +60 -23
  299. package/{examples/jsm → src}/renderers/common/Attributes.js +2 -1
  300. package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
  301. package/{examples/jsm → src}/renderers/common/Background.js +12 -4
  302. package/src/renderers/common/BindGroup.js +18 -0
  303. package/{examples/jsm → src}/renderers/common/Bindings.js +45 -32
  304. package/{examples/jsm → src}/renderers/common/ClippingContext.js +18 -7
  305. package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
  306. package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +16 -4
  307. package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
  308. package/{examples/jsm → src}/renderers/common/Info.js +34 -6
  309. package/src/renderers/common/PostProcessing.js +90 -0
  310. package/{examples/jsm/objects → src/renderers/common}/QuadMesh.js +8 -3
  311. package/{examples/jsm → src}/renderers/common/RenderContext.js +25 -1
  312. package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
  313. package/{examples/jsm → src}/renderers/common/RenderList.js +1 -1
  314. package/{examples/jsm → src}/renderers/common/RenderObject.js +45 -12
  315. package/{examples/jsm → src}/renderers/common/Renderer.js +151 -73
  316. package/{examples/jsm → src}/renderers/common/SampledTexture.js +14 -5
  317. package/src/renderers/common/StandardRenderer.js +18 -0
  318. package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
  319. package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
  320. package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
  321. package/{examples/jsm → src}/renderers/common/Textures.js +14 -14
  322. package/{examples/jsm → src}/renderers/common/Uniform.js +9 -4
  323. package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
  324. package/{examples/jsm → src}/renderers/common/extras/PMREMGenerator.js +25 -25
  325. package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
  326. package/src/renderers/common/nodes/NodeLibrary.js +118 -0
  327. package/{examples/jsm → src}/renderers/common/nodes/NodeSampledTexture.js +8 -7
  328. package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +2 -1
  329. package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
  330. package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
  331. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
  332. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
  333. package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +69 -21
  334. package/src/renderers/common/nodes/StandardNodeLibrary.js +105 -0
  335. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +16 -1
  336. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  337. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +1 -1
  338. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
  339. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
  340. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  341. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  342. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -4
  343. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  344. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  345. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  346. package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
  347. package/src/renderers/shaders/UniformsLib.js +3 -0
  348. package/src/renderers/webgl/WebGLAttributes.js +2 -2
  349. package/src/renderers/webgl/WebGLBufferRenderer.js +6 -19
  350. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +6 -18
  351. package/src/renderers/webgl/WebGLLights.js +6 -0
  352. package/src/renderers/webgl/WebGLProgram.js +27 -1
  353. package/src/renderers/webgl/WebGLPrograms.js +1 -1
  354. package/src/renderers/webgl/WebGLProperties.js +7 -0
  355. package/src/renderers/webgl/WebGLTextures.js +75 -57
  356. package/src/renderers/webgl/WebGLUniforms.js +12 -2
  357. package/src/renderers/webgl/WebGLUniformsGroups.js +7 -7
  358. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +242 -120
  359. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +227 -44
  360. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +2 -2
  361. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +1 -0
  362. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
  363. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +22 -1
  364. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +62 -23
  365. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +1 -1
  366. package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +242 -136
  367. package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +9 -9
  368. package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +281 -107
  369. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
  370. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  371. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +64 -33
  372. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +4 -1
  373. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +34 -36
  374. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
  375. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +76 -44
  376. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +42 -4
  377. package/src/renderers/webxr/WebXRDepthSensing.js +6 -0
  378. package/src/renderers/webxr/WebXRManager.js +37 -24
  379. package/src/textures/CompressedArrayTexture.js +1 -1
  380. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  381. package/examples/jsm/nodes/Nodes.js +0 -202
  382. package/examples/jsm/nodes/accessors/BatchNode.js +0 -78
  383. package/examples/jsm/nodes/accessors/CameraNode.js +0 -12
  384. package/examples/jsm/nodes/accessors/CubeTextureNode.js +0 -61
  385. package/examples/jsm/nodes/accessors/InstanceNode.js +0 -94
  386. package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  387. package/examples/jsm/nodes/accessors/ModelNode.js +0 -36
  388. package/examples/jsm/nodes/accessors/NormalNode.js +0 -14
  389. package/examples/jsm/nodes/accessors/PointUVNode.js +0 -26
  390. package/examples/jsm/nodes/accessors/PositionNode.js +0 -10
  391. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -6
  392. package/examples/jsm/nodes/accessors/SkinningNode.js +0 -124
  393. package/examples/jsm/nodes/accessors/TangentNode.js +0 -23
  394. package/examples/jsm/nodes/core/CacheNode.js +0 -49
  395. package/examples/jsm/nodes/core/NodeCache.js +0 -26
  396. package/examples/jsm/nodes/core/NodeKeywords.js +0 -80
  397. package/examples/jsm/nodes/core/PropertyNode.js +0 -83
  398. package/examples/jsm/nodes/core/UniformGroupNode.js +0 -36
  399. package/examples/jsm/nodes/display/BlendModeNode.js +0 -128
  400. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +0 -99
  401. package/examples/jsm/nodes/display/ColorSpaceNode.js +0 -108
  402. package/examples/jsm/nodes/display/FrontFacingNode.js +0 -40
  403. package/examples/jsm/nodes/display/PassNode.js +0 -201
  404. package/examples/jsm/nodes/display/ToneMappingNode.js +0 -188
  405. package/examples/jsm/nodes/display/ViewportDepthNode.js +0 -97
  406. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +0 -31
  407. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +0 -37
  408. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +0 -13
  409. package/examples/jsm/nodes/lighting/AONode.js +0 -27
  410. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -256
  411. package/examples/jsm/nodes/lighting/LightingContextNode.js +0 -66
  412. package/examples/jsm/nodes/lighting/LightsNode.js +0 -215
  413. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -28
  414. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  415. package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +0 -34
  416. package/examples/jsm/nodes/materials/MeshMatcapNodeMaterial.js +0 -52
  417. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -38
  418. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -65
  419. package/examples/jsm/nodes/materials/MeshToonNodeMaterial.js +0 -34
  420. package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +0 -34
  421. package/examples/jsm/nodes/math/HashNode.js +0 -34
  422. package/examples/jsm/nodes/math/MathNode.js +0 -391
  423. package/examples/jsm/nodes/procedural/CheckerNode.js +0 -42
  424. package/examples/jsm/nodes/utils/DiscardNode.js +0 -27
  425. package/examples/jsm/nodes/utils/PackingNode.js +0 -55
  426. package/examples/jsm/nodes/utils/RotateUVNode.js +0 -35
  427. package/examples/jsm/renderers/common/PostProcessing.js +0 -33
  428. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  429. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  430. /package/{examples/jsm/nodes/accessors/UVNode.js → src/nodes/accessors/UV.js} +0 -0
  431. /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
  432. /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
  433. /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
  434. /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
  435. /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
  436. /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
  437. /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
  438. /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
  439. /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
  440. /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
  441. /package/{examples/jsm → src}/renderers/common/Animation.js +0 -0
  442. /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
  443. /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
  444. /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
  445. /package/{examples/jsm → src}/renderers/common/ChainMap.js +0 -0
  446. /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
  447. /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
  448. /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
  449. /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
  450. /package/{examples/jsm → src}/renderers/common/Pipelines.js +0 -0
  451. /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
  452. /package/{examples/jsm → src}/renderers/common/RenderBundle.js +0 -0
  453. /package/{examples/jsm → src}/renderers/common/RenderBundles.js +0 -0
  454. /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
  455. /package/{examples/jsm → src}/renderers/common/RenderObjects.js +0 -0
  456. /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
  457. /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
  458. /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
  459. /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
  460. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBufferRenderer.js +0 -0
  461. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
  462. /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
@@ -12,18 +12,27 @@ import Background from './Background.js';
12
12
  import Nodes from './nodes/Nodes.js';
13
13
  import Color4 from './Color4.js';
14
14
  import ClippingContext from './ClippingContext.js';
15
- import { Scene, Frustum, Matrix4, Vector2, Vector3, Vector4, DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoColorSpace, NoToneMapping, LinearFilter, LinearSRGBColorSpace, RenderTarget, HalfFloatType, RGBAFormat } from 'three';
16
- import { NodeMaterial } from '../../nodes/Nodes.js';
17
- import QuadMesh from '../../objects/QuadMesh.js';
15
+ import QuadMesh from './QuadMesh.js';
18
16
  import RenderBundles from './RenderBundles.js';
19
-
20
- const _scene = new Scene();
21
- const _drawingBufferSize = new Vector2();
22
- const _screen = new Vector4();
23
- const _frustum = new Frustum();
24
- const _projScreenMatrix = new Matrix4();
25
- const _vector3 = new Vector3();
26
- const _quad = new QuadMesh( new NodeMaterial() );
17
+ import NodeLibrary from './nodes/NodeLibrary.js';
18
+
19
+ import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
20
+
21
+ import { Scene } from '../../scenes/Scene.js';
22
+ import { Frustum } from '../../math/Frustum.js';
23
+ import { Matrix4 } from '../../math/Matrix4.js';
24
+ import { Vector2 } from '../../math/Vector2.js';
25
+ import { Vector3 } from '../../math/Vector3.js';
26
+ import { Vector4 } from '../../math/Vector4.js';
27
+ import { RenderTarget } from '../../core/RenderTarget.js';
28
+ import { DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping, LinearFilter, LinearSRGBColorSpace, HalfFloatType, RGBAFormat, PCFShadowMap } from '../../constants.js';
29
+
30
+ const _scene = /*@__PURE__*/ new Scene();
31
+ const _drawingBufferSize = /*@__PURE__*/ new Vector2();
32
+ const _screen = /*@__PURE__*/ new Vector4();
33
+ const _frustum = /*@__PURE__*/ new Frustum();
34
+ const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
35
+ const _vector3 = /*@__PURE__*/ new Vector3();
27
36
 
28
37
  class Renderer {
29
38
 
@@ -35,15 +44,19 @@ class Renderer {
35
44
 
36
45
  const {
37
46
  logarithmicDepthBuffer = false,
38
- alpha = true
47
+ alpha = true,
48
+ antialias = false,
49
+ samples = 0,
50
+ getFallback = null
39
51
  } = parameters;
40
52
 
41
53
  // public
42
-
43
54
  this.domElement = backend.getDomElement();
44
55
 
45
56
  this.backend = backend;
46
57
 
58
+ this.samples = samples || ( antialias === true ) ? 4 : 0;
59
+
47
60
  this.autoClear = true;
48
61
  this.autoClearColor = true;
49
62
  this.autoClearDepth = true;
@@ -67,12 +80,14 @@ class Renderer {
67
80
 
68
81
  this.info = new Info();
69
82
 
70
- // nodes
71
-
72
- this.toneMappingNode = null;
83
+ this.nodes = {
84
+ library: new NodeLibrary()
85
+ };
73
86
 
74
87
  // internals
75
88
 
89
+ this._getFallback = getFallback;
90
+
76
91
  this._pixelRatio = 1;
77
92
  this._width = this.domElement.width;
78
93
  this._height = this.domElement.height;
@@ -94,6 +109,9 @@ class Renderer {
94
109
  this._textures = null;
95
110
  this._background = null;
96
111
 
112
+ this._quad = new QuadMesh( new NodeMaterial() );
113
+ this._quad.material.type = 'Renderer_output';
114
+
97
115
  this._currentRenderContext = null;
98
116
 
99
117
  this._opaqueSort = null;
@@ -111,6 +129,8 @@ class Renderer {
111
129
  this._activeCubeFace = 0;
112
130
  this._activeMipmapLevel = 0;
113
131
 
132
+ this._mrt = null;
133
+
114
134
  this._renderObjectFunction = null;
115
135
  this._currentRenderObjectFunction = null;
116
136
  this._currentRenderBundle = null;
@@ -122,17 +142,39 @@ class Renderer {
122
142
 
123
143
  this._compilationPromises = null;
124
144
 
125
- // backwards compatibility
145
+ this.transparent = true;
146
+ this.opaque = true;
126
147
 
127
148
  this.shadowMap = {
128
149
  enabled: false,
129
- type: null
150
+ type: PCFShadowMap
130
151
  };
131
152
 
132
153
  this.xr = {
133
154
  enabled: false
134
155
  };
135
156
 
157
+ this.debug = {
158
+ checkShaderErrors: true,
159
+ onShaderError: null,
160
+ getShaderAsync: async ( scene, camera, object ) => {
161
+
162
+ await this.compileAsync( scene, camera );
163
+
164
+ const renderList = this._renderLists.get( scene, camera );
165
+ const renderContext = this._renderContexts.get( scene, camera, this._renderTarget );
166
+
167
+ const material = scene.overrideMaterial || object.material;
168
+
169
+ const renderObject = this._objects.get( object, material, scene, camera, renderList.lightsNode, renderContext );
170
+
171
+ const { fragmentShader, vertexShader } = renderObject.getNodeBuilderState();
172
+
173
+ return { fragmentShader, vertexShader };
174
+
175
+ }
176
+ };
177
+
136
178
  }
137
179
 
138
180
  async init() {
@@ -151,7 +193,7 @@ class Renderer {
151
193
 
152
194
  this._initPromise = new Promise( async ( resolve, reject ) => {
153
195
 
154
- const backend = this.backend;
196
+ let backend = this.backend;
155
197
 
156
198
  try {
157
199
 
@@ -159,8 +201,28 @@ class Renderer {
159
201
 
160
202
  } catch ( error ) {
161
203
 
162
- reject( error );
163
- return;
204
+ if ( this._getFallback !== null ) {
205
+
206
+ // try the fallback
207
+
208
+ try {
209
+
210
+ this.backend = backend = this._getFallback( error );
211
+ await backend.init( this );
212
+
213
+ } catch ( error ) {
214
+
215
+ reject( error );
216
+ return;
217
+
218
+ }
219
+
220
+ } else {
221
+
222
+ reject( error );
223
+ return;
224
+
225
+ }
164
226
 
165
227
  }
166
228
 
@@ -301,8 +363,8 @@ class Renderer {
301
363
  const transparentObjects = renderList.transparent;
302
364
  const lightsNode = renderList.lightsNode;
303
365
 
304
- if ( opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
305
- if ( transparentObjects.length > 0 ) this._renderObjects( transparentObjects, camera, sceneRef, lightsNode );
366
+ if ( this.opaque === true && opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
367
+ if ( this.transparent === true && transparentObjects.length > 0 ) this._renderObjects( transparentObjects, camera, sceneRef, lightsNode );
306
368
 
307
369
  // restore render tree
308
370
 
@@ -330,18 +392,31 @@ class Renderer {
330
392
 
331
393
  }
332
394
 
395
+ setMRT( mrt ) {
396
+
397
+ this._mrt = mrt;
398
+
399
+ return this;
400
+
401
+ }
402
+
403
+ getMRT() {
404
+
405
+ return this._mrt;
406
+
407
+ }
408
+
333
409
  _renderBundle( bundle, sceneRef, lightsNode ) {
334
410
 
335
411
  const { object, camera, renderList } = bundle;
336
412
 
337
413
  const renderContext = this._currentRenderContext;
338
- const renderContextData = this.backend.get( renderContext );
339
414
 
340
415
  //
341
416
 
342
417
  const renderBundle = this._bundles.get( object, camera );
343
-
344
418
  const renderBundleData = this.backend.get( renderBundle );
419
+
345
420
  if ( renderBundleData.renderContexts === undefined ) renderBundleData.renderContexts = new Set();
346
421
 
347
422
  //
@@ -352,17 +427,11 @@ class Renderer {
352
427
 
353
428
  if ( renderBundleNeedsUpdate ) {
354
429
 
355
- if ( renderContextData.renderObjects === undefined || object.needsUpdate === true ) {
430
+ this.backend.beginBundle( renderContext );
356
431
 
357
- const nodeFrame = this._nodes.nodeFrame;
432
+ if ( renderBundleData.renderObjects === undefined || object.needsUpdate === true ) {
358
433
 
359
- renderContextData.renderObjects = [];
360
- renderContextData.renderBundles = [];
361
- renderContextData.scene = sceneRef;
362
- renderContextData.camera = camera;
363
- renderContextData.renderId = nodeFrame.renderId;
364
-
365
- renderContextData.registerBundlesPhase = true;
434
+ renderBundleData.renderObjects = [];
366
435
 
367
436
  }
368
437
 
@@ -376,16 +445,17 @@ class Renderer {
376
445
 
377
446
  //
378
447
 
448
+ this.backend.finishBundle( renderContext, renderBundle );
449
+
379
450
  object.needsUpdate = false;
380
451
 
381
452
  } else {
382
453
 
383
- const renderContext = this._currentRenderContext;
384
- const renderContextData = this.backend.get( renderContext );
454
+ const renderObjects = renderBundleData.renderObjects;
385
455
 
386
- for ( let i = 0, l = renderContextData.renderObjects.length; i < l; i ++ ) {
456
+ for ( let i = 0, l = renderObjects.length; i < l; i ++ ) {
387
457
 
388
- const renderObject = renderContextData.renderObjects[ i ];
458
+ const renderObject = renderObjects[ i ];
389
459
 
390
460
  this._nodes.updateBefore( renderObject );
391
461
 
@@ -397,12 +467,14 @@ class Renderer {
397
467
  this._nodes.updateForRender( renderObject );
398
468
  this._bindings.updateForRender( renderObject );
399
469
 
400
- this.backend.draw( renderObject, this.info );
470
+ this._nodes.updateAfter( renderObject );
401
471
 
402
472
  }
403
473
 
404
474
  }
405
475
 
476
+ this.backend.addBundle( renderContext, renderBundle );
477
+
406
478
  }
407
479
 
408
480
  render( scene, camera ) {
@@ -421,10 +493,10 @@ class Renderer {
421
493
 
422
494
  _getFrameBufferTarget() {
423
495
 
424
- const { currentColorSpace } = this;
496
+ const { currentToneMapping, currentColorSpace } = this;
425
497
 
426
- const useToneMapping = this._renderTarget === null && ( this.toneMapping !== NoToneMapping || this.toneMappingNode !== null );
427
- const useColorSpace = currentColorSpace !== LinearSRGBColorSpace && currentColorSpace !== NoColorSpace;
498
+ const useToneMapping = currentToneMapping !== NoToneMapping;
499
+ const useColorSpace = currentColorSpace !== LinearSRGBColorSpace;
428
500
 
429
501
  if ( useToneMapping === false && useColorSpace === false ) return null;
430
502
 
@@ -444,7 +516,7 @@ class Renderer {
444
516
  generateMipmaps: false,
445
517
  minFilter: LinearFilter,
446
518
  magFilter: LinearFilter,
447
- samples: this.backend.parameters.antialias ? 4 : 0
519
+ samples: this.samples
448
520
  } );
449
521
 
450
522
  frameBufferTarget.isPostProcessingRenderTarget = true;
@@ -514,6 +586,7 @@ class Renderer {
514
586
 
515
587
  this.info.calls ++;
516
588
  this.info.render.calls ++;
589
+ this.info.render.frameCalls ++;
517
590
 
518
591
  nodeFrame.renderId = this.info.calls;
519
592
 
@@ -646,8 +719,8 @@ class Renderer {
646
719
  const lightsNode = renderList.lightsNode;
647
720
 
648
721
  if ( bundles.length > 0 ) this._renderBundles( bundles, sceneRef, lightsNode );
649
- if ( opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
650
- if ( transparentObjects.length > 0 ) this._renderObjects( transparentObjects, camera, sceneRef, lightsNode );
722
+ if ( this.opaque === true && opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
723
+ if ( this.transparent === true && transparentObjects.length > 0 ) this._renderObjects( transparentObjects, camera, sceneRef, lightsNode );
651
724
 
652
725
  // finish render pass
653
726
 
@@ -666,9 +739,16 @@ class Renderer {
666
739
 
667
740
  this.setRenderTarget( outputRenderTarget, activeCubeFace, activeMipmapLevel );
668
741
 
669
- _quad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture );
742
+ const quad = this._quad;
743
+
744
+ if ( this._nodes.hasOutputChange( renderTarget.texture ) ) {
670
745
 
671
- this._renderScene( _quad, _quad.camera, false );
746
+ quad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture );
747
+ quad.material.needsUpdate = true;
748
+
749
+ }
750
+
751
+ this._renderScene( quad, quad.camera, false );
672
752
 
673
753
  }
674
754
 
@@ -949,8 +1029,16 @@ class Renderer {
949
1029
  // If a color space transform or tone mapping is required,
950
1030
  // the clear operation clears the intermediate renderTarget texture, but does not update the screen canvas.
951
1031
 
952
- _quad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture );
953
- this._renderScene( _quad, _quad.camera, false );
1032
+ const quad = this._quad;
1033
+
1034
+ if ( this._nodes.hasOutputChange( renderTarget.texture ) ) {
1035
+
1036
+ quad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture );
1037
+ quad.material.needsUpdate = true;
1038
+
1039
+ }
1040
+
1041
+ this._renderScene( quad, quad.camera, false );
954
1042
 
955
1043
  }
956
1044
 
@@ -1000,19 +1088,15 @@ class Renderer {
1000
1088
 
1001
1089
  }
1002
1090
 
1003
- get currentColorSpace() {
1004
-
1005
- const renderTarget = this._renderTarget;
1006
-
1007
- if ( renderTarget !== null ) {
1091
+ get currentToneMapping() {
1008
1092
 
1009
- const texture = renderTarget.texture;
1093
+ return this._renderTarget !== null ? NoToneMapping : this.toneMapping;
1010
1094
 
1011
- return ( Array.isArray( texture ) ? texture[ 0 ] : texture ).colorSpace;
1095
+ }
1012
1096
 
1013
- }
1097
+ get currentColorSpace() {
1014
1098
 
1015
- return this.outputColorSpace;
1099
+ return this._renderTarget !== null ? LinearSRGBColorSpace : this.outputColorSpace;
1016
1100
 
1017
1101
  }
1018
1102
 
@@ -1072,7 +1156,7 @@ class Renderer {
1072
1156
 
1073
1157
  this.info.calls ++;
1074
1158
  this.info.compute.calls ++;
1075
- this.info.compute.computeCalls ++;
1159
+ this.info.compute.frameCalls ++;
1076
1160
 
1077
1161
  nodeFrame.renderId = this.info.calls;
1078
1162
 
@@ -1082,6 +1166,7 @@ class Renderer {
1082
1166
  const pipelines = this._pipelines;
1083
1167
  const bindings = this._bindings;
1084
1168
  const nodes = this._nodes;
1169
+
1085
1170
  const computeList = Array.isArray( computeNodes ) ? computeNodes : [ computeNodes ];
1086
1171
 
1087
1172
  if ( computeList[ 0 ] === undefined || computeList[ 0 ].isComputeNode !== true ) {
@@ -1276,7 +1361,7 @@ class Renderer {
1276
1361
 
1277
1362
  }
1278
1363
 
1279
- if ( object.static === true ) {
1364
+ if ( object.static === true && this.backend.beginBundle !== undefined ) {
1280
1365
 
1281
1366
  const baseRenderList = renderList;
1282
1367
 
@@ -1375,8 +1460,6 @@ class Renderer {
1375
1460
 
1376
1461
  object.onBeforeRender( this, scene, camera, geometry, material, group );
1377
1462
 
1378
- material.onBeforeRender( this, scene, camera, geometry, material, group );
1379
-
1380
1463
  //
1381
1464
 
1382
1465
  if ( scene.overrideMaterial !== null ) {
@@ -1508,24 +1591,17 @@ class Renderer {
1508
1591
 
1509
1592
  //
1510
1593
 
1511
- if ( this._currentRenderBundle !== null && this._currentRenderBundle.needsUpdate === true ) {
1594
+ if ( this._currentRenderBundle !== null ) {
1512
1595
 
1513
- const renderObjectData = this.backend.get( renderObject );
1596
+ const renderBundleData = this.backend.get( this._currentRenderBundle );
1514
1597
 
1515
- renderObjectData.bundleEncoder = undefined;
1516
- renderObjectData.lastPipelineGPU = undefined;
1598
+ renderBundleData.renderObjects.push( renderObject );
1517
1599
 
1518
1600
  }
1519
1601
 
1520
1602
  this.backend.draw( renderObject, this.info );
1521
1603
 
1522
- if ( this._currentRenderBundle !== null ) {
1523
-
1524
- const renderContextData = this.backend.get( this._currentRenderContext );
1525
-
1526
- renderContextData.renderObjects.push( renderObject );
1527
-
1528
- }
1604
+ this._nodes.updateAfter( renderObject );
1529
1605
 
1530
1606
  }
1531
1607
 
@@ -1545,6 +1621,8 @@ class Renderer {
1545
1621
 
1546
1622
  this._pipelines.getForRender( renderObject, this._compilationPromises );
1547
1623
 
1624
+ this._nodes.updateAfter( renderObject );
1625
+
1548
1626
  }
1549
1627
 
1550
1628
  get compute() {
@@ -1,6 +1,6 @@
1
1
  import Binding from './Binding.js';
2
2
 
3
- let id = 0;
3
+ let _id = 0;
4
4
 
5
5
  class SampledTexture extends Binding {
6
6
 
@@ -8,21 +8,30 @@ class SampledTexture extends Binding {
8
8
 
9
9
  super( name );
10
10
 
11
- this.id = id ++;
11
+ this.id = _id ++;
12
12
 
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
 
@@ -0,0 +1,18 @@
1
+ import Renderer from './Renderer.js';
2
+ import StandardNodeLibrary from './nodes/StandardNodeLibrary.js';
3
+
4
+ class StandardRenderer extends Renderer {
5
+
6
+ constructor( backend, parameters = {} ) {
7
+
8
+ super( backend, parameters );
9
+
10
+ this.isStandardRenderer = true;
11
+
12
+ this.nodes.library = new StandardNodeLibrary();
13
+
14
+ }
15
+
16
+ }
17
+
18
+ export default StandardRenderer;
@@ -1,4 +1,4 @@
1
- import { BufferAttribute } from 'three';
1
+ import { BufferAttribute } from '../../core/BufferAttribute.js';
2
2
 
3
3
  class StorageBufferAttribute extends BufferAttribute {
4
4
 
@@ -1,4 +1,4 @@
1
- import { InstancedBufferAttribute } from 'three';
1
+ import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
2
2
 
3
3
  class StorageInstancedBufferAttribute extends InstancedBufferAttribute {
4
4
 
@@ -1,4 +1,5 @@
1
- import { Texture, LinearFilter } from 'three';
1
+ import { Texture } from '../../textures/Texture.js';
2
+ import { LinearFilter } from '../../constants.js';
2
3
 
3
4
  class StorageTexture extends Texture {
4
5
 
@@ -1,8 +1,10 @@
1
1
  import DataMap from './DataMap.js';
2
2
 
3
- import { Vector3, DepthTexture, DepthStencilFormat, DepthFormat, UnsignedIntType, UnsignedInt248Type, LinearFilter, NearestFilter, EquirectangularReflectionMapping, EquirectangularRefractionMapping, CubeReflectionMapping, CubeRefractionMapping, UnsignedByteType } from 'three';
3
+ import { Vector3 } from '../../math/Vector3.js';
4
+ import { DepthTexture } from '../../textures/DepthTexture.js';
5
+ import { DepthStencilFormat, DepthFormat, UnsignedIntType, UnsignedInt248Type, LinearFilter, NearestFilter, EquirectangularReflectionMapping, EquirectangularRefractionMapping, CubeReflectionMapping, CubeRefractionMapping, UnsignedByteType } from '../../constants.js';
4
6
 
5
- const _size = new Vector3();
7
+ const _size = /*@__PURE__*/ new Vector3();
6
8
 
7
9
  class Textures extends DataMap {
8
10
 
@@ -23,10 +25,9 @@ class Textures extends DataMap {
23
25
  const sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples;
24
26
  const depthTextureMips = renderTargetData.depthTextureMips || ( renderTargetData.depthTextureMips = {} );
25
27
 
26
- const texture = renderTarget.texture;
27
28
  const textures = renderTarget.textures;
28
29
 
29
- const size = this.getSize( texture );
30
+ const size = this.getSize( textures[ 0 ] );
30
31
 
31
32
  const mipWidth = size.width >> activeMipmapLevel;
32
33
  const mipHeight = size.height >> activeMipmapLevel;
@@ -101,22 +102,16 @@ class Textures extends DataMap {
101
102
 
102
103
  renderTarget.removeEventListener( 'dispose', onDispose );
103
104
 
104
- if ( textures !== undefined ) {
105
+ for ( let i = 0; i < textures.length; i ++ ) {
105
106
 
106
- for ( let i = 0; i < textures.length; i ++ ) {
107
-
108
- this._destroyTexture( textures[ i ] );
109
-
110
- }
111
-
112
- } else {
113
-
114
- this._destroyTexture( texture );
107
+ this._destroyTexture( textures[ i ] );
115
108
 
116
109
  }
117
110
 
118
111
  this._destroyTexture( depthTexture );
119
112
 
113
+ this.delete( renderTarget );
114
+
120
115
  };
121
116
 
122
117
  renderTarget.addEventListener( 'dispose', onDispose );
@@ -178,6 +173,8 @@ class Textures extends DataMap {
178
173
  backend.createSampler( texture );
179
174
  backend.createTexture( texture, options );
180
175
 
176
+ textureData.generation = texture.version;
177
+
181
178
  } else {
182
179
 
183
180
  const needsCreate = textureData.initialized !== true;
@@ -221,6 +218,7 @@ class Textures extends DataMap {
221
218
  backend.createTexture( texture, options );
222
219
 
223
220
  textureData.isDefaultTexture = false;
221
+ textureData.generation = texture.version;
224
222
 
225
223
  }
226
224
 
@@ -237,6 +235,7 @@ class Textures extends DataMap {
237
235
  backend.createDefaultTexture( texture );
238
236
 
239
237
  textureData.isDefaultTexture = true;
238
+ textureData.generation = texture.version;
240
239
 
241
240
  }
242
241
 
@@ -247,6 +246,7 @@ class Textures extends DataMap {
247
246
  if ( textureData.initialized !== true ) {
248
247
 
249
248
  textureData.initialized = true;
249
+ textureData.generation = texture.version;
250
250
 
251
251
  //
252
252
 
@@ -1,4 +1,9 @@
1
- import { Color, Matrix3, Matrix4, Vector2, Vector3, Vector4 } from 'three';
1
+ import { Color } from '../../math/Color.js';
2
+ import { Matrix3 } from '../../math/Matrix3.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';
2
7
 
3
8
  class Uniform {
4
9
 
@@ -28,13 +33,13 @@ class Uniform {
28
33
 
29
34
  }
30
35
 
31
- class FloatUniform extends Uniform {
36
+ class NumberUniform extends Uniform {
32
37
 
33
38
  constructor( name, value = 0 ) {
34
39
 
35
40
  super( name, value );
36
41
 
37
- this.isFloatUniform = true;
42
+ this.isNumberUniform = true;
38
43
 
39
44
  this.boundary = 4;
40
45
  this.itemSize = 1;
@@ -134,7 +139,7 @@ class Matrix4Uniform extends Uniform {
134
139
  }
135
140
 
136
141
  export {
137
- FloatUniform,
142
+ NumberUniform,
138
143
  Vector2Uniform, Vector3Uniform, Vector4Uniform, ColorUniform,
139
144
  Matrix3Uniform, Matrix4Uniform
140
145
  };