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
@@ -35,7 +35,7 @@ class OutlinePass extends Pass {
35
35
  this.pulsePeriod = 0;
36
36
 
37
37
  this._visibilityCache = new Map();
38
-
38
+ this._selectionCache = new Set();
39
39
 
40
40
  this.resolution = ( resolution !== undefined ) ? new Vector2( resolution.x, resolution.y ) : new Vector2( 256, 256 );
41
41
 
@@ -172,29 +172,18 @@ class OutlinePass extends Pass {
172
172
 
173
173
  }
174
174
 
175
- changeVisibilityOfSelectedObjects( bVisible ) {
175
+ updateSelectionCache() {
176
176
 
177
- const cache = this._visibilityCache;
177
+ const cache = this._selectionCache;
178
178
 
179
179
  function gatherSelectedMeshesCallBack( object ) {
180
180
 
181
- if ( object.isMesh ) {
182
-
183
- if ( bVisible === true ) {
184
-
185
- object.visible = cache.get( object );
186
-
187
- } else {
188
-
189
- cache.set( object, object.visible );
190
- object.visible = bVisible;
191
-
192
- }
193
-
194
- }
181
+ if ( object.isMesh ) cache.add( object );
195
182
 
196
183
  }
197
184
 
185
+ cache.clear();
186
+
198
187
  for ( let i = 0; i < this.selectedObjects.length; i ++ ) {
199
188
 
200
189
  const selectedObject = this.selectedObjects[ i ];
@@ -204,56 +193,49 @@ class OutlinePass extends Pass {
204
193
 
205
194
  }
206
195
 
207
- changeVisibilityOfNonSelectedObjects( bVisible ) {
196
+ changeVisibilityOfSelectedObjects( bVisible ) {
208
197
 
209
198
  const cache = this._visibilityCache;
210
- const selectedMeshes = [];
211
-
212
- function gatherSelectedMeshesCallBack( object ) {
213
-
214
- if ( object.isMesh ) selectedMeshes.push( object );
215
199
 
216
- }
217
-
218
- for ( let i = 0; i < this.selectedObjects.length; i ++ ) {
200
+ for ( const mesh of this._selectionCache ) {
219
201
 
220
- const selectedObject = this.selectedObjects[ i ];
221
- selectedObject.traverse( gatherSelectedMeshesCallBack );
202
+ if ( bVisible === true ) {
222
203
 
223
- }
204
+ mesh.visible = cache.get( mesh );
224
205
 
225
- function VisibilityChangeCallBack( object ) {
206
+ } else {
226
207
 
227
- if ( object.isMesh || object.isSprite ) {
208
+ cache.set( mesh, mesh.visible );
209
+ mesh.visible = bVisible;
228
210
 
229
- // only meshes and sprites are supported by OutlinePass
211
+ }
230
212
 
231
- let bFound = false;
213
+ }
232
214
 
233
- for ( let i = 0; i < selectedMeshes.length; i ++ ) {
215
+ }
234
216
 
235
- const selectedObjectId = selectedMeshes[ i ].id;
217
+ changeVisibilityOfNonSelectedObjects( bVisible ) {
236
218
 
237
- if ( selectedObjectId === object.id ) {
219
+ const visibilityCache = this._visibilityCache;
220
+ const selectionCache = this._selectionCache;
238
221
 
239
- bFound = true;
240
- break;
222
+ function VisibilityChangeCallBack( object ) {
241
223
 
242
- }
224
+ if ( object.isMesh || object.isSprite ) {
243
225
 
244
- }
226
+ // only meshes and sprites are supported by OutlinePass
245
227
 
246
- if ( bFound === false ) {
228
+ if ( ! selectionCache.has( object ) ) {
247
229
 
248
230
  const visibility = object.visible;
249
231
 
250
- if ( bVisible === false || cache.get( object ) === true ) {
232
+ if ( bVisible === false || visibilityCache.get( object ) === true ) {
251
233
 
252
234
  object.visible = bVisible;
253
235
 
254
236
  }
255
237
 
256
- cache.set( object, visibility );
238
+ visibilityCache.set( object, visibility );
257
239
 
258
240
  }
259
241
 
@@ -264,11 +246,11 @@ class OutlinePass extends Pass {
264
246
 
265
247
  if ( bVisible === true ) {
266
248
 
267
- object.visible = cache.get( object ); // restore
249
+ object.visible = visibilityCache.get( object ); // restore
268
250
 
269
251
  } else {
270
252
 
271
- cache.set( object, object.visible );
253
+ visibilityCache.set( object, object.visible );
272
254
  object.visible = bVisible;
273
255
 
274
256
  }
@@ -306,6 +288,8 @@ class OutlinePass extends Pass {
306
288
 
307
289
  renderer.setClearColor( 0xffffff, 1 );
308
290
 
291
+ this.updateSelectionCache();
292
+
309
293
  // Make selected objects invisible
310
294
  this.changeVisibilityOfSelectedObjects( false );
311
295
 
@@ -337,6 +321,7 @@ class OutlinePass extends Pass {
337
321
  this.renderScene.overrideMaterial = null;
338
322
  this.changeVisibilityOfNonSelectedObjects( true );
339
323
  this._visibilityCache.clear();
324
+ this._selectionCache.clear();
340
325
 
341
326
  this.renderScene.background = currentBackground;
342
327
 
@@ -462,7 +447,7 @@ class OutlinePass extends Pass {
462
447
  worldPosition = instanceMatrix * worldPosition;
463
448
 
464
449
  #endif
465
-
450
+
466
451
  worldPosition = modelMatrix * worldPosition;
467
452
 
468
453
  projTexCoord = textureMatrix * worldPosition;
@@ -59,51 +59,29 @@ class RenderTransitionPass extends Pass {
59
59
 
60
60
  render( renderer, writeBuffer ) {
61
61
 
62
+ renderer.setRenderTarget( this.renderTargetA );
63
+ renderer.render( this.sceneA, this.cameraA );
64
+ renderer.setRenderTarget( this.renderTargetB );
65
+ renderer.render( this.sceneB, this.cameraB );
66
+
62
67
  const uniforms = this.fsQuad.material.uniforms;
63
- const transition = uniforms.mixRatio.value;
68
+ uniforms.tDiffuse1.value = this.renderTargetA.texture;
69
+ uniforms.tDiffuse2.value = this.renderTargetB.texture;
64
70
 
65
- // Prevent render both scenes when it's not necessary
71
+ if ( this.renderToScreen ) {
66
72
 
67
- if ( transition === 0 ) {
73
+ renderer.setRenderTarget( null );
74
+ renderer.clear();
68
75
 
69
- renderer.setRenderTarget( writeBuffer );
70
- if ( this.clear ) renderer.clear();
71
- renderer.render( this.sceneB, this.cameraB );
72
-
73
- } else if ( transition === 1 ) {
76
+ } else {
74
77
 
75
78
  renderer.setRenderTarget( writeBuffer );
76
79
  if ( this.clear ) renderer.clear();
77
- renderer.render( this.sceneA, this.cameraA );
78
-
79
- } else {
80
-
81
- // When 0 < transition < 1 render transition between two scenes
82
-
83
- renderer.setRenderTarget( this.renderTargetA );
84
- renderer.render( this.sceneA, this.cameraA );
85
- renderer.setRenderTarget( this.renderTargetB );
86
- renderer.render( this.sceneB, this.cameraB );
87
-
88
- uniforms.tDiffuse1.value = this.renderTargetA.texture;
89
- uniforms.tDiffuse2.value = this.renderTargetB.texture;
90
-
91
- if ( this.renderToScreen ) {
92
-
93
- renderer.setRenderTarget( null );
94
- renderer.clear();
95
-
96
- } else {
97
-
98
- renderer.setRenderTarget( writeBuffer );
99
- if ( this.clear ) renderer.clear();
100
-
101
- }
102
-
103
- this.fsQuad.render( renderer );
104
80
 
105
81
  }
106
82
 
83
+ this.fsQuad.render( renderer );
84
+
107
85
  }
108
86
 
109
87
  dispose() {
@@ -179,9 +157,6 @@ class RenderTransitionPass extends Pass {
179
157
 
180
158
  }
181
159
 
182
- #include <tonemapping_fragment>
183
- #include <colorspace_fragment>
184
-
185
160
  }
186
161
  `
187
162
  } );
@@ -31,6 +31,8 @@ class SSAARenderPass extends Pass {
31
31
  this.sampleLevel = 4; // specified as n, where the number of samples is 2^n, so sampleLevel = 4, is 2^4 samples, 16.
32
32
  this.unbiased = true;
33
33
 
34
+ this.stencilBuffer = false;
35
+
34
36
  // as we need to clear the buffer in this pass, clearColor must be set to something, defaults to black.
35
37
  this.clearColor = ( clearColor !== undefined ) ? clearColor : 0x000000;
36
38
  this.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;
@@ -79,7 +81,7 @@ class SSAARenderPass extends Pass {
79
81
 
80
82
  if ( ! this.sampleRenderTarget ) {
81
83
 
82
- this.sampleRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType } );
84
+ this.sampleRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType, stencilBuffer: this.stencilBuffer } );
83
85
  this.sampleRenderTarget.texture.name = 'SSAARenderPass.sample';
84
86
 
85
87
  }
@@ -39,6 +39,7 @@ class SSAOPass extends Pass {
39
39
  this.height = ( height !== undefined ) ? height : 512;
40
40
 
41
41
  this.clear = true;
42
+ this.needsSwap = false;
42
43
 
43
44
  this.camera = camera;
44
45
  this.scene = scene;
@@ -201,7 +202,7 @@ class SSAOPass extends Pass {
201
202
 
202
203
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssaoRenderTarget.texture;
203
204
  this.copyMaterial.blending = NoBlending;
204
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
205
+ this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
205
206
 
206
207
  break;
207
208
 
@@ -209,13 +210,13 @@ class SSAOPass extends Pass {
209
210
 
210
211
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;
211
212
  this.copyMaterial.blending = NoBlending;
212
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
213
+ this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
213
214
 
214
215
  break;
215
216
 
216
217
  case SSAOPass.OUTPUT.Depth:
217
218
 
218
- this.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );
219
+ this.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : readBuffer );
219
220
 
220
221
  break;
221
222
 
@@ -223,19 +224,15 @@ class SSAOPass extends Pass {
223
224
 
224
225
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.normalRenderTarget.texture;
225
226
  this.copyMaterial.blending = NoBlending;
226
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
227
+ this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
227
228
 
228
229
  break;
229
230
 
230
231
  case SSAOPass.OUTPUT.Default:
231
232
 
232
- this.copyMaterial.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
233
- this.copyMaterial.blending = NoBlending;
234
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
235
-
236
233
  this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;
237
234
  this.copyMaterial.blending = CustomBlending;
238
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
235
+ this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );
239
236
 
240
237
  break;
241
238
 
@@ -49,12 +49,12 @@ class UnrealBloomPass extends Pass {
49
49
 
50
50
  for ( let i = 0; i < this.nMips; i ++ ) {
51
51
 
52
- const renderTargetHorizonal = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
52
+ const renderTargetHorizontal = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
53
53
 
54
- renderTargetHorizonal.texture.name = 'UnrealBloomPass.h' + i;
55
- renderTargetHorizonal.texture.generateMipmaps = false;
54
+ renderTargetHorizontal.texture.name = 'UnrealBloomPass.h' + i;
55
+ renderTargetHorizontal.texture.generateMipmaps = false;
56
56
 
57
- this.renderTargetsHorizontal.push( renderTargetHorizonal );
57
+ this.renderTargetsHorizontal.push( renderTargetHorizontal );
58
58
 
59
59
  const renderTargetVertical = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );
60
60
 
@@ -38,8 +38,7 @@ const BleachBypassShader = {
38
38
 
39
39
  vec4 base = texture2D( tDiffuse, vUv );
40
40
 
41
- vec3 lumCoeff = vec3( 0.25, 0.65, 0.1 );
42
- float lum = dot( lumCoeff, base.rgb );
41
+ float lum = luminance( base.rgb );
43
42
  vec3 blend = vec3( lum );
44
43
 
45
44
  float L = min( 1.0, max( 0.0, 10.0 * ( lum - 0.45 ) ) );
@@ -39,8 +39,7 @@ const ColorifyShader = {
39
39
 
40
40
  vec4 texel = texture2D( tDiffuse, vUv );
41
41
 
42
- vec3 luma = vec3( 0.299, 0.587, 0.114 );
43
- float v = dot( texel.xyz, luma );
42
+ float v = luminance( texel.xyz );
44
43
 
45
44
  gl_FragColor = vec4( v * color, texel.w );
46
45
 
@@ -220,11 +220,9 @@ const FXAAShader = {
220
220
  vec2 posN = posM;
221
221
  vec2 posP = posM;
222
222
 
223
- int iterationsUsed = 0;
224
223
  int iterationsUsedN = 0;
225
224
  int iterationsUsedP = 0;
226
225
  for( int i = 0; i < NUM_SAMPLES; i++ ) {
227
- iterationsUsed = i;
228
226
 
229
227
  float increment = float(i + 1);
230
228
 
@@ -203,7 +203,7 @@ const GTAOShader = {
203
203
 
204
204
  const int DIRECTIONS = SAMPLES < 30 ? 3 : 5;
205
205
  const int STEPS = (SAMPLES + DIRECTIONS - 1) / DIRECTIONS;
206
- float ao = 0.0, totalWeight = 0.0;
206
+ float ao = 0.0;
207
207
  for (int i = 0; i < DIRECTIONS; ++i) {
208
208
 
209
209
  float angle = float(i) / float(DIRECTIONS) * PI;
@@ -49,9 +49,7 @@ const LuminosityHighPassShader = {
49
49
 
50
50
  vec4 texel = texture2D( tDiffuse, vUv );
51
51
 
52
- vec3 luma = vec3( 0.299, 0.587, 0.114 );
53
-
54
- float v = dot( texel.xyz, luma );
52
+ float v = luminance( texel.xyz );
55
53
 
56
54
  vec4 outputColor = vec4( defaultColor.rgb, defaultOpacity );
57
55
 
@@ -54,7 +54,7 @@ const OutputShader = {
54
54
 
55
55
  #elif defined( CINEON_TONE_MAPPING )
56
56
 
57
- gl_FragColor.rgb = OptimizedCineonToneMapping( gl_FragColor.rgb );
57
+ gl_FragColor.rgb = CineonToneMapping( gl_FragColor.rgb );
58
58
 
59
59
  #elif defined( ACES_FILMIC_TONE_MAPPING )
60
60
 
@@ -22,6 +22,14 @@ const precedenceOperators = [
22
22
  ','
23
23
  ].reverse();
24
24
 
25
+ const associativityRightToLeft = [
26
+ '=',
27
+ '+=', '-=', '*=', '/=', '%=', '^=', '&=', '|=', '<<=', '>>=',
28
+ ',',
29
+ '?',
30
+ ':'
31
+ ];
32
+
25
33
  const spaceRegExp = /^((\t| )\n*)+/;
26
34
  const lineRegExp = /^\n+/;
27
35
  const commentRegExp = /^\/\*[\s\S]*?\*\//;
@@ -297,13 +305,13 @@ class GLSLDecoder {
297
305
 
298
306
  for ( const operator of precedenceOperators ) {
299
307
 
300
- for ( let i = 0; i < tokens.length; i ++ ) {
308
+ const parseToken = ( i, inverse = false ) => {
301
309
 
302
310
  const token = tokens[ i ];
303
311
 
304
312
  groupIndex += getGroupDelta( token.str );
305
313
 
306
- if ( ! token.isOperator || i === 0 || i === tokens.length - 1 ) continue;
314
+ if ( ! token.isOperator || i === 0 || i === tokens.length - 1 ) return;
307
315
 
308
316
  if ( groupIndex === 0 && token.str === operator ) {
309
317
 
@@ -330,9 +338,43 @@ class GLSLDecoder {
330
338
 
331
339
  }
332
340
 
333
- if ( groupIndex < 0 ) {
341
+ if ( inverse ) {
342
+
343
+ if ( groupIndex > 0 ) {
344
+
345
+ return this.parseExpressionFromTokens( tokens.slice( i ) );
346
+
347
+ }
348
+
349
+ } else {
350
+
351
+ if ( groupIndex < 0 ) {
352
+
353
+ return this.parseExpressionFromTokens( tokens.slice( 0, i ) );
354
+
355
+ }
356
+
357
+ }
358
+
359
+ };
360
+
361
+ if ( associativityRightToLeft.includes( operator ) ) {
362
+
363
+ for ( let i = 0; i < tokens.length; i ++ ) {
364
+
365
+ const result = parseToken( i );
366
+
367
+ if ( result ) return result;
368
+
369
+ }
370
+
371
+ } else {
372
+
373
+ for ( let i = tokens.length - 1; i >= 0; i -- ) {
374
+
375
+ const result = parseToken( i, true );
334
376
 
335
- return this.parseExpressionFromTokens( tokens.slice( 0, i ) );
377
+ if ( result ) return result;
336
378
 
337
379
  }
338
380
 
@@ -1,6 +1,6 @@
1
- import { REVISION } from 'three';
1
+ import * as THREE from 'three';
2
+
2
3
  import { VariableDeclaration, Accessor } from './AST.js';
3
- import * as Nodes from '../nodes/Nodes.js';
4
4
 
5
5
  const opLib = {
6
6
  '=': 'assign',
@@ -53,7 +53,6 @@ class TSLEncoder {
53
53
  this.imports = new Set();
54
54
  this.global = new Set();
55
55
  this.overloadings = new Map();
56
- this.layoutsCode = '';
57
56
  this.iife = false;
58
57
  this.uniqueNames = false;
59
58
  this.reference = false;
@@ -69,7 +68,7 @@ class TSLEncoder {
69
68
 
70
69
  name = name.split( '.' )[ 0 ];
71
70
 
72
- if ( Nodes[ name ] !== undefined && this.global.has( name ) === false && this._currentProperties[ name ] === undefined ) {
71
+ if ( THREE[ name ] !== undefined && this.global.has( name ) === false && this._currentProperties[ name ] === undefined ) {
73
72
 
74
73
  this.imports.add( name );
75
74
 
@@ -323,9 +322,9 @@ class TSLEncoder {
323
322
  const leftStr = this.emitExpression( node.left );
324
323
  const rightStr = this.emitExpression( node.right );
325
324
 
326
- this.addImport( 'cond' );
325
+ this.addImport( 'select' );
327
326
 
328
- return `cond( ${ condStr }, ${ leftStr }, ${ rightStr } )`;
327
+ return `select( ${ condStr }, ${ leftStr }, ${ rightStr } )`;
329
328
 
330
329
  }
331
330
 
@@ -350,7 +349,7 @@ ${ this.tab }} )`;
350
349
 
351
350
  const elseCondStr = this.emitExpression( current.elseConditional.cond );
352
351
 
353
- ifStr += `.elseif( ${ elseCondStr }, () => {
352
+ ifStr += `.ElseIf( ${ elseCondStr }, () => {
354
353
 
355
354
  ${ elseBodyStr }
356
355
 
@@ -358,7 +357,7 @@ ${ this.tab }} )`;
358
357
 
359
358
  } else {
360
359
 
361
- ifStr += `.else( () => {
360
+ ifStr += `.Else( () => {
362
361
 
363
362
  ${ elseBodyStr }
364
363
 
@@ -392,13 +391,13 @@ ${ this.tab }} )`;
392
391
  const conditionParam = condition !== '<' ? `, condition: '${ condition }'` : '';
393
392
  const updateParam = update !== '++' ? `, update: '${ update }'` : '';
394
393
 
395
- let loopStr = `loop( { start: ${ start }, end: ${ end + nameParam + typeParam + conditionParam + updateParam } }, ( { ${ name } } ) => {\n\n`;
394
+ let loopStr = `Loop( { start: ${ start }, end: ${ end + nameParam + typeParam + conditionParam + updateParam } }, ( { ${ name } } ) => {\n\n`;
396
395
 
397
396
  loopStr += this.emitBody( node.body ) + '\n\n';
398
397
 
399
398
  loopStr += this.tab + '} )';
400
399
 
401
- this.imports.add( 'loop' );
400
+ this.imports.add( 'Loop' );
402
401
 
403
402
  return loopStr;
404
403
 
@@ -502,7 +501,9 @@ ${ this.tab }} )`;
502
501
 
503
502
  this.addImport( 'overloadingFn' );
504
503
 
505
- return `const ${ name } = overloadingFn( [ ${ nodes.map( node => node.name + '_' + nodes.indexOf( node ) ).join( ', ' ) } ] );\n`;
504
+ const prefix = this.iife === false ? 'export ' : '';
505
+
506
+ return `${ prefix }const ${ name } = /*#__PURE__*/ overloadingFn( [ ${ nodes.map( node => node.name + '_' + nodes.indexOf( node ) ).join( ', ' ) } ] );\n`;
506
507
 
507
508
  }
508
509
 
@@ -583,11 +584,13 @@ ${ this.tab }} )`;
583
584
 
584
585
  }
585
586
 
586
- let funcStr = `const ${ fnName } = tslFn( (${ paramsStr }) => {
587
+ const prefix = this.iife === false ? 'export ' : '';
588
+
589
+ let funcStr = `${ prefix }const ${ fnName } = /*#__PURE__*/ Fn( (${ paramsStr }) => {
587
590
 
588
591
  ${ bodyStr }
589
592
 
590
- ${ this.tab }} );\n`;
593
+ ${ this.tab }} )`;
591
594
 
592
595
  const layoutInput = inputs.length > 0 ? '\n\t\t' + this.tab + inputs.join( ',\n\t\t' + this.tab ) + '\n\t' + this.tab : '';
593
596
 
@@ -595,15 +598,17 @@ ${ this.tab }} );\n`;
595
598
 
596
599
  const uniqueName = this.uniqueNames ? fnName + '_' + Math.random().toString( 36 ).slice( 2 ) : fnName;
597
600
 
598
- this.layoutsCode += `${ this.tab + fnName }.setLayout( {
601
+ funcStr += `.setLayout( {
599
602
  ${ this.tab }\tname: '${ uniqueName }',
600
603
  ${ this.tab }\ttype: '${ type }',
601
604
  ${ this.tab }\tinputs: [${ layoutInput }]
602
- ${ this.tab }} );\n\n`;
605
+ ${ this.tab }} )`;
603
606
 
604
607
  }
605
608
 
606
- this.imports.add( 'tslFn' );
609
+ funcStr += ';\n';
610
+
611
+ this.imports.add( 'Fn' );
607
612
 
608
613
  this.global.add( node.name );
609
614
 
@@ -685,9 +690,7 @@ ${ this.tab }} );\n\n`;
685
690
  const imports = [ ...this.imports ];
686
691
  const exports = [ ...this.global ];
687
692
 
688
- const layouts = this.layoutsCode.length > 0 ? `\n${ this.tab }// layouts\n\n` + this.layoutsCode : '';
689
-
690
- let header = '// Three.js Transpiler r' + REVISION + '\n\n';
693
+ let header = '// Three.js Transpiler r' + THREE.REVISION + '\n\n';
691
694
  let footer = '';
692
695
 
693
696
  if ( this.iife ) {
@@ -701,12 +704,11 @@ ${ this.tab }} );\n\n`;
701
704
 
702
705
  } else {
703
706
 
704
- header += imports.length > 0 ? 'import { ' + imports.join( ', ' ) + ' } from \'three/nodes\';\n' : '';
705
- footer += exports.length > 0 ? 'export { ' + exports.join( ', ' ) + ' };\n' : '';
707
+ header += imports.length > 0 ? 'import { ' + imports.join( ', ' ) + ' } from \'three/tsl\';\n' : '';
706
708
 
707
709
  }
708
710
 
709
- return header + code + layouts + footer;
711
+ return header + code + footer;
710
712
 
711
713
  }
712
714
 
@@ -34,7 +34,7 @@ export function decompress( texture, maxTextureSize = Infinity, renderer = null
34
34
  gl_FragColor = vec4(vUv.xy, 0, 1);
35
35
 
36
36
  #ifdef IS_SRGB
37
- gl_FragColor = LinearTosRGB( texture2D( blitTexture, vUv) );
37
+ gl_FragColor = sRGBTransferOETF( texture2D( blitTexture, vUv) );
38
38
  #else
39
39
  gl_FragColor = texture2D( blitTexture, vUv);
40
40
  #endif
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "super-three",
3
- "version": "0.165.0",
3
+ "version": "0.168.0",
4
4
  "description": "JavaScript 3D library",
5
5
  "type": "module",
6
6
  "main": "./build/three.cjs",
@@ -15,13 +15,14 @@
15
15
  "./addons": "./examples/jsm/Addons.js",
16
16
  "./addons/*": "./examples/jsm/*",
17
17
  "./src/*": "./src/*",
18
- "./nodes": "./examples/jsm/nodes/Nodes.js"
18
+ "./webgpu": "./build/three.webgpu.js",
19
+ "./tsl": "./build/three.webgpu.js"
19
20
  },
20
21
  "repository": {
21
22
  "type": "git",
22
23
  "url": "supermedium/three.js"
23
24
  },
24
- "sideEffects": ["./examples/jsm/nodes/**/*"],
25
+ "sideEffects": [ "./src/nodes/**/*" ],
25
26
  "files": [
26
27
  "build",
27
28
  "examples/jsm",
@@ -61,8 +62,9 @@
61
62
  "test-unit-addons": "qunit -r failonlyreporter -f !-webonly test/unit/three.addons.unit.js",
62
63
  "test-e2e": "node test/e2e/puppeteer.js",
63
64
  "test-e2e-cov": "node test/e2e/check-coverage.js",
65
+ "test-e2e-webgpu": "node test/e2e/puppeteer.js --webgpu",
64
66
  "test-treeshake": "rollup -c test/rollup.treeshake.config.js",
65
- "test-circular-deps": "dpdm --no-warning --no-tree --exit-code circular:1 examples/jsm/nodes/Nodes.js",
67
+ "test-circular-deps": "dpdm --no-warning --no-tree --exit-code circular:1 src/nodes/Nodes.js",
66
68
  "make-screenshot": "node test/e2e/puppeteer.js --make"
67
69
  },
68
70
  "keywords": [
@@ -95,13 +97,13 @@
95
97
  "dpdm": "^3.14.0",
96
98
  "eslint": "^8.37.0",
97
99
  "eslint-config-mdcs": "^5.0.0",
98
- "eslint-plugin-compat": "^4.1.2",
100
+ "eslint-plugin-compat": "^6.0.0",
99
101
  "eslint-plugin-html": "^8.0.0",
100
102
  "eslint-plugin-import": "^2.27.5",
101
103
  "failonlyreporter": "^1.0.0",
102
104
  "jimp": "^0.22.7",
103
105
  "magic-string": "^0.30.0",
104
- "pixelmatch": "^5.3.0",
106
+ "pixelmatch": "^6.0.0",
105
107
  "puppeteer": "^22.0.0",
106
108
  "qunit": "^2.19.4",
107
109
  "rollup": "^4.6.0",