super-three 0.167.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 (311) hide show
  1. package/build/three.cjs +165 -44
  2. package/build/three.module.js +165 -45
  3. package/build/three.module.min.js +1 -1
  4. package/build/three.webgpu.js +23600 -21931
  5. package/build/three.webgpu.min.js +1 -1
  6. package/examples/jsm/Addons.js +3 -1
  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/effects/AnaglyphEffect.js +6 -13
  17. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  18. package/examples/jsm/effects/StereoEffect.js +6 -1
  19. package/examples/jsm/environments/RoomEnvironment.js +1 -1
  20. package/examples/jsm/exporters/GLTFExporter.js +6 -1
  21. package/examples/jsm/exporters/USDZExporter.js +29 -8
  22. package/examples/jsm/helpers/LightProbeHelper.js +42 -43
  23. package/examples/jsm/loaders/KTX2Loader.js +19 -7
  24. package/examples/jsm/loaders/MaterialXLoader.js +11 -4
  25. package/examples/jsm/loaders/PCDLoader.js +9 -9
  26. package/examples/jsm/objects/SkyMesh.js +188 -0
  27. package/examples/jsm/objects/Water2Mesh.js +159 -0
  28. package/examples/jsm/objects/WaterMesh.js +102 -0
  29. package/examples/jsm/physics/RapierPhysics.js +20 -0
  30. package/examples/jsm/postprocessing/OutlinePass.js +31 -46
  31. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  32. package/examples/jsm/shaders/BleachBypassShader.js +1 -2
  33. package/examples/jsm/shaders/OutputShader.js +1 -1
  34. package/examples/jsm/transpiler/TSLEncoder.js +8 -8
  35. package/examples/jsm/utils/TextureUtils.js +1 -1
  36. package/package.json +2 -1
  37. package/src/Three.WebGPU.js +6 -0
  38. package/src/Three.js +1 -0
  39. package/src/constants.js +1 -1
  40. package/src/extras/Controls.js +32 -0
  41. package/src/loaders/ObjectLoader.js +3 -3
  42. package/src/{nodes/loaders → loaders/nodes}/NodeLoader.js +4 -4
  43. package/src/{nodes/loaders → loaders/nodes}/NodeMaterialLoader.js +1 -2
  44. package/src/materials/Material.js +4 -7
  45. package/src/{nodes/materials → materials/nodes}/InstancedPointsNodeMaterial.js +33 -24
  46. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +34 -37
  47. package/src/{nodes/materials → materials/nodes}/LineBasicNodeMaterial.js +3 -4
  48. package/src/{nodes/materials → materials/nodes}/LineDashedNodeMaterial.js +7 -9
  49. package/src/{nodes/materials → materials/nodes}/MeshBasicNodeMaterial.js +11 -11
  50. package/src/{nodes/materials → materials/nodes}/MeshLambertNodeMaterial.js +5 -5
  51. package/src/{nodes/materials → materials/nodes}/MeshMatcapNodeMaterial.js +8 -8
  52. package/src/materials/nodes/MeshNormalNodeMaterial.js +40 -0
  53. package/src/{nodes/materials → materials/nodes}/MeshPhongNodeMaterial.js +9 -8
  54. package/src/{nodes/materials → materials/nodes}/MeshPhysicalNodeMaterial.js +18 -17
  55. package/src/{nodes/materials → materials/nodes}/MeshSSSNodeMaterial.js +6 -6
  56. package/src/{nodes/materials → materials/nodes}/MeshStandardNodeMaterial.js +17 -11
  57. package/src/{nodes/materials → materials/nodes}/MeshToonNodeMaterial.js +4 -4
  58. package/src/{nodes/materials → materials/nodes}/NodeMaterial.js +67 -86
  59. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +1 -1
  60. package/src/{nodes/materials → materials/nodes}/PointsNodeMaterial.js +3 -4
  61. package/src/{nodes/materials → materials/nodes}/ShadowNodeMaterial.js +4 -4
  62. package/src/{nodes/materials → materials/nodes}/SpriteNodeMaterial.js +11 -11
  63. package/src/{nodes/materials → materials/nodes}/VolumeNodeMaterial.js +14 -16
  64. package/src/nodes/Nodes.js +103 -159
  65. package/src/nodes/TSL.js +176 -0
  66. package/src/nodes/accessors/AccessorsUtils.js +8 -8
  67. package/src/nodes/accessors/BatchNode.js +48 -20
  68. package/src/nodes/accessors/{BitangentNode.js → Bitangent.js} +9 -9
  69. package/src/nodes/accessors/BufferAttributeNode.js +5 -5
  70. package/src/nodes/accessors/BufferNode.js +4 -4
  71. package/src/nodes/accessors/{CameraNode.js → Camera.js} +10 -10
  72. package/src/nodes/accessors/ClippingNode.js +16 -14
  73. package/src/nodes/accessors/CubeTextureNode.js +5 -7
  74. package/src/nodes/accessors/InstanceNode.js +17 -13
  75. package/src/nodes/accessors/InstancedPointsMaterialNode.js +4 -4
  76. package/src/nodes/accessors/MaterialNode.js +52 -55
  77. package/src/nodes/accessors/MaterialProperties.js +3 -0
  78. package/src/nodes/accessors/MaterialReferenceNode.js +6 -4
  79. package/src/nodes/accessors/ModelNode.js +11 -11
  80. package/src/nodes/accessors/ModelViewProjectionNode.js +6 -7
  81. package/src/nodes/accessors/MorphNode.js +12 -12
  82. package/src/nodes/accessors/Normal.js +62 -0
  83. package/src/nodes/accessors/Object3DNode.js +10 -10
  84. package/src/nodes/accessors/PointUVNode.js +4 -4
  85. package/src/nodes/accessors/Position.js +10 -0
  86. package/src/nodes/accessors/ReferenceBaseNode.js +143 -0
  87. package/src/nodes/accessors/ReferenceNode.js +13 -7
  88. package/src/nodes/accessors/ReflectVector.js +10 -0
  89. package/src/nodes/accessors/RendererReferenceNode.js +6 -6
  90. package/src/nodes/accessors/SceneNode.js +5 -6
  91. package/src/nodes/accessors/SkinningNode.js +84 -21
  92. package/src/nodes/accessors/StorageBufferNode.js +4 -5
  93. package/src/nodes/accessors/StorageTextureNode.js +5 -5
  94. package/src/nodes/accessors/Tangent.js +22 -0
  95. package/src/nodes/accessors/Texture3DNode.js +11 -11
  96. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +3 -32
  97. package/src/nodes/accessors/TextureNode.js +16 -21
  98. package/src/nodes/accessors/TextureSizeNode.js +4 -6
  99. package/src/nodes/accessors/{UniformsNode.js → UniformArrayNode.js} +17 -8
  100. package/src/nodes/accessors/UserDataNode.js +4 -4
  101. package/src/nodes/accessors/VelocityNode.js +83 -0
  102. package/src/nodes/accessors/VertexColorNode.js +4 -4
  103. package/src/nodes/code/CodeNode.js +5 -5
  104. package/src/nodes/code/ExpressionNode.js +4 -4
  105. package/src/nodes/code/FunctionCallNode.js +5 -5
  106. package/src/nodes/code/FunctionNode.js +5 -23
  107. package/src/nodes/code/ScriptableNode.js +4 -6
  108. package/src/nodes/code/ScriptableValueNode.js +4 -6
  109. package/src/nodes/core/AssignNode.js +5 -5
  110. package/src/nodes/core/AttributeNode.js +7 -20
  111. package/src/nodes/core/BypassNode.js +5 -5
  112. package/src/nodes/core/CacheNode.js +5 -5
  113. package/src/nodes/core/ConstNode.js +2 -2
  114. package/src/nodes/core/ContextNode.js +17 -11
  115. package/src/nodes/core/IndexNode.js +12 -7
  116. package/src/nodes/core/InputNode.js +2 -2
  117. package/src/nodes/core/MRTNode.js +12 -6
  118. package/src/nodes/core/Node.js +39 -19
  119. package/src/nodes/core/NodeBuilder.js +46 -33
  120. package/src/nodes/core/NodeUtils.js +1 -0
  121. package/src/nodes/core/OutputStructNode.js +4 -4
  122. package/src/nodes/core/ParameterNode.js +4 -4
  123. package/src/nodes/core/PropertyNode.js +32 -32
  124. package/src/nodes/core/StackNode.js +26 -10
  125. package/src/nodes/core/StructTypeNode.js +2 -2
  126. package/src/nodes/core/TempNode.js +2 -2
  127. package/src/nodes/core/UniformGroupNode.js +8 -9
  128. package/src/nodes/core/UniformNode.js +4 -4
  129. package/src/nodes/core/VarNode.js +6 -6
  130. package/src/nodes/core/VaryingNode.js +5 -5
  131. package/src/nodes/display/AfterImageNode.js +9 -9
  132. package/src/nodes/display/AnaglyphPassNode.js +61 -0
  133. package/src/nodes/display/AnamorphicNode.js +11 -11
  134. package/src/nodes/display/BleachBypass.js +26 -0
  135. package/src/nodes/display/BlendMode.js +54 -0
  136. package/src/nodes/display/BloomNode.js +21 -19
  137. package/src/nodes/display/BumpMapNode.js +7 -12
  138. package/src/nodes/display/ColorAdjustment.js +46 -0
  139. package/src/nodes/display/ColorSpaceFunctions.js +38 -0
  140. package/src/nodes/display/ColorSpaceNode.js +40 -63
  141. package/src/nodes/display/DenoiseNode.js +20 -17
  142. package/src/nodes/display/DepthOfFieldNode.js +8 -6
  143. package/src/nodes/display/DotScreenNode.js +10 -22
  144. package/src/nodes/display/FXAANode.js +17 -15
  145. package/src/nodes/display/FilmNode.js +7 -6
  146. package/src/nodes/display/FrontFacingNode.js +5 -5
  147. package/src/nodes/display/GTAONode.js +19 -15
  148. package/src/nodes/display/GaussianBlurNode.js +11 -8
  149. package/src/nodes/display/Lut3DNode.js +6 -5
  150. package/src/nodes/display/MotionBlur.js +25 -0
  151. package/src/nodes/display/NormalMapNode.js +8 -10
  152. package/src/nodes/display/ParallaxBarrierPassNode.js +55 -0
  153. package/src/nodes/display/PassNode.js +84 -8
  154. package/src/nodes/display/PixelationPassNode.js +12 -7
  155. package/src/nodes/display/PosterizeNode.js +4 -6
  156. package/src/nodes/display/RGBShiftNode.js +8 -7
  157. package/src/nodes/display/RenderOutputNode.js +9 -9
  158. package/src/nodes/display/SSAAPassNode.js +284 -0
  159. package/src/nodes/display/Sepia.js +17 -0
  160. package/src/nodes/display/SobelOperatorNode.js +9 -7
  161. package/src/nodes/display/StereoCompositePassNode.js +107 -0
  162. package/src/nodes/display/StereoPassNode.js +80 -0
  163. package/src/nodes/display/ToneMappingFunctions.js +190 -0
  164. package/src/nodes/display/ToneMappingNode.js +12 -173
  165. package/src/nodes/display/TransitionNode.js +9 -8
  166. package/src/nodes/display/ViewportDepthNode.js +30 -29
  167. package/src/nodes/display/ViewportDepthTextureNode.js +6 -8
  168. package/src/nodes/display/ViewportNode.js +26 -25
  169. package/src/nodes/display/ViewportSharedTextureNode.js +6 -8
  170. package/src/nodes/display/ViewportTextureNode.js +7 -10
  171. package/src/nodes/fog/FogExp2Node.js +4 -6
  172. package/src/nodes/fog/FogNode.js +5 -7
  173. package/src/nodes/fog/FogRangeNode.js +4 -6
  174. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  175. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  176. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  177. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  178. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  179. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  180. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  181. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  182. package/src/nodes/functions/BSDF/LTC.js +6 -6
  183. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  184. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  185. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  186. package/src/nodes/functions/BasicLightingModel.js +1 -1
  187. package/src/nodes/functions/PhongLightingModel.js +5 -5
  188. package/src/nodes/functions/PhysicalLightingModel.js +32 -31
  189. package/src/nodes/functions/ShadowMaskModel.js +1 -1
  190. package/src/nodes/functions/ToonLightingModel.js +3 -3
  191. package/src/nodes/functions/material/getGeometryRoughness.js +4 -4
  192. package/src/nodes/functions/material/getRoughness.js +2 -2
  193. package/src/nodes/geometry/RangeNode.js +4 -4
  194. package/src/nodes/gpgpu/ComputeNode.js +5 -5
  195. package/src/nodes/lighting/AONode.js +2 -2
  196. package/src/nodes/lighting/AmbientLightNode.js +2 -7
  197. package/src/nodes/lighting/AnalyticLightNode.js +34 -13
  198. package/src/nodes/lighting/BasicEnvironmentNode.js +4 -3
  199. package/src/nodes/lighting/BasicLightMapNode.js +3 -3
  200. package/src/nodes/lighting/DirectionalLightNode.js +2 -7
  201. package/src/nodes/lighting/EnvironmentNode.js +20 -19
  202. package/src/nodes/lighting/HemisphereLightNode.js +3 -7
  203. package/src/nodes/lighting/IESSpotLightNode.js +3 -8
  204. package/src/nodes/lighting/IrradianceNode.js +2 -2
  205. package/src/nodes/lighting/LightNode.js +5 -5
  206. package/src/nodes/lighting/LightProbeNode.js +76 -0
  207. package/src/nodes/lighting/LightUtils.js +3 -3
  208. package/src/nodes/lighting/LightingContextNode.js +15 -17
  209. package/src/nodes/lighting/LightingNode.js +2 -2
  210. package/src/nodes/lighting/LightsNode.js +94 -76
  211. package/src/nodes/lighting/PointLightNode.js +3 -8
  212. package/src/nodes/lighting/RectAreaLightNode.js +2 -6
  213. package/src/nodes/lighting/SpotLightNode.js +3 -8
  214. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  215. package/src/nodes/materialx/lib/mx_hsv.js +36 -31
  216. package/src/nodes/materialx/lib/mx_noise.js +96 -96
  217. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  218. package/src/nodes/math/{CondNode.js → ConditionalNode.js} +18 -7
  219. package/src/nodes/math/Hash.js +13 -0
  220. package/src/nodes/math/MathNode.js +124 -124
  221. package/src/nodes/math/MathUtils.js +0 -7
  222. package/src/nodes/math/OperatorNode.js +94 -52
  223. package/src/nodes/math/TriNoise3D.js +19 -29
  224. package/src/nodes/pmrem/PMREMNode.js +58 -15
  225. package/src/nodes/pmrem/PMREMUtils.js +46 -46
  226. package/src/nodes/procedural/Checker.js +14 -0
  227. package/src/nodes/tsl/TSLBase.js +30 -0
  228. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +105 -97
  229. package/src/nodes/utils/ArrayElementNode.js +2 -2
  230. package/src/nodes/utils/ConvertNode.js +2 -2
  231. package/src/nodes/utils/CubeMapNode.js +157 -0
  232. package/src/nodes/utils/Discard.js +8 -0
  233. package/src/nodes/utils/EquirectUVNode.js +5 -5
  234. package/src/nodes/utils/FlipNode.js +65 -0
  235. package/src/nodes/utils/FunctionOverloadingNode.js +5 -5
  236. package/src/nodes/utils/JoinNode.js +2 -2
  237. package/src/nodes/utils/LoopNode.js +12 -6
  238. package/src/nodes/utils/MatcapUVNode.js +6 -6
  239. package/src/nodes/utils/MaxMipLevelNode.js +4 -4
  240. package/src/nodes/utils/OscNode.js +7 -7
  241. package/src/nodes/utils/Packing.js +4 -0
  242. package/src/nodes/utils/RTTNode.js +8 -8
  243. package/src/nodes/utils/ReflectorNode.js +8 -3
  244. package/src/nodes/utils/RemapNode.js +7 -7
  245. package/src/nodes/utils/RotateNode.js +4 -12
  246. package/src/nodes/utils/SetNode.js +2 -2
  247. package/src/nodes/utils/SplitNode.js +2 -2
  248. package/src/nodes/utils/SpriteSheetUVNode.js +5 -5
  249. package/src/nodes/utils/SpriteUtils.js +47 -0
  250. package/src/nodes/utils/StorageArrayElementNode.js +4 -6
  251. package/src/nodes/utils/TimerNode.js +5 -5
  252. package/src/nodes/utils/TriplanarTexturesNode.js +7 -9
  253. package/src/nodes/utils/UVUtils.js +19 -0
  254. package/src/nodes/utils/ViewportUtils.js +14 -0
  255. package/src/objects/BatchedMesh.js +2 -3
  256. package/src/renderers/WebGLRenderer.js +24 -0
  257. package/src/renderers/common/Backend.js +2 -2
  258. package/src/renderers/common/Background.js +3 -1
  259. package/src/renderers/common/BindGroup.js +3 -1
  260. package/src/renderers/common/Bindings.js +13 -15
  261. package/src/renderers/common/ClippingContext.js +14 -5
  262. package/src/renderers/common/CubeRenderTarget.js +9 -3
  263. package/src/renderers/common/PostProcessing.js +4 -1
  264. package/src/renderers/common/QuadMesh.js +2 -0
  265. package/src/renderers/common/RenderContext.js +24 -0
  266. package/src/renderers/common/RenderList.js +1 -1
  267. package/src/renderers/common/RenderObject.js +2 -2
  268. package/src/renderers/common/Renderer.js +75 -49
  269. package/src/renderers/common/SampledTexture.js +12 -3
  270. package/src/renderers/common/StandardRenderer.js +18 -0
  271. package/src/renderers/common/Textures.js +8 -12
  272. package/src/renderers/common/extras/PMREMGenerator.js +12 -13
  273. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  274. package/src/renderers/common/nodes/NodeLibrary.js +118 -0
  275. package/src/renderers/common/nodes/NodeSampledTexture.js +2 -2
  276. package/src/renderers/common/nodes/Nodes.js +36 -9
  277. package/src/renderers/common/nodes/StandardNodeLibrary.js +105 -0
  278. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  279. package/src/renderers/webgl/WebGLProgram.js +1 -1
  280. package/src/renderers/webgl/WebGLProperties.js +7 -0
  281. package/src/renderers/webgl/WebGLTextures.js +61 -4
  282. package/src/renderers/webgl-fallback/WebGLBackend.js +88 -68
  283. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +57 -9
  284. package/src/renderers/webgl-fallback/utils/WebGLState.js +21 -0
  285. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +28 -21
  286. package/src/renderers/webgpu/WebGPUBackend.js +86 -68
  287. package/src/renderers/webgpu/WebGPURenderer.js +8 -8
  288. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -63
  289. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +45 -21
  290. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -1
  291. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +6 -15
  292. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
  293. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +36 -21
  294. package/src/renderers/webgpu/utils/WebGPUUtils.js +18 -1
  295. package/src/renderers/webxr/WebXRManager.js +32 -25
  296. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  297. package/src/nodes/accessors/NormalNode.js +0 -14
  298. package/src/nodes/accessors/PositionNode.js +0 -10
  299. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  300. package/src/nodes/accessors/TangentNode.js +0 -23
  301. package/src/nodes/core/NodeKeywords.js +0 -80
  302. package/src/nodes/display/BlendModeNode.js +0 -128
  303. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  304. package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  305. package/src/nodes/math/HashNode.js +0 -34
  306. package/src/nodes/procedural/CheckerNode.js +0 -42
  307. package/src/nodes/utils/DiscardNode.js +0 -28
  308. package/src/nodes/utils/PackingNode.js +0 -55
  309. package/src/nodes/utils/RotateUVNode.js +0 -35
  310. /package/src/{nodes/loaders → loaders/nodes}/NodeObjectLoader.js +0 -0
  311. /package/src/nodes/accessors/{UVNode.js → UV.js} +0 -0
@@ -0,0 +1,118 @@
1
+ class NodeLibrary {
2
+
3
+ constructor() {
4
+
5
+ this.lightNodes = new WeakMap();
6
+ this.materialNodes = new Map();
7
+ this.toneMappingNodes = new Map();
8
+ this.colorSpaceNodes = new Map();
9
+
10
+ }
11
+
12
+ fromMaterial( material ) {
13
+
14
+ if ( material.isNodeMaterial ) return material;
15
+
16
+ let nodeMaterial = null;
17
+
18
+ const nodeMaterialClass = this.getMaterialNodeClass( material.type );
19
+
20
+ if ( nodeMaterialClass !== null ) {
21
+
22
+ nodeMaterial = new nodeMaterialClass();
23
+
24
+ for ( const key in material ) {
25
+
26
+ nodeMaterial[ key ] = material[ key ];
27
+
28
+ }
29
+
30
+ }
31
+
32
+ return nodeMaterial;
33
+
34
+ }
35
+
36
+ addColorSpace( colorSpaceNode, colorSpace ) {
37
+
38
+ this.addType( colorSpaceNode, colorSpace, this.colorSpaceNodes );
39
+
40
+ }
41
+
42
+ getColorSpaceFunction( colorSpace ) {
43
+
44
+ return this.colorSpaceNodes.get( colorSpace ) || null;
45
+
46
+ }
47
+
48
+ addToneMapping( toneMappingNode, toneMapping ) {
49
+
50
+ this.addType( toneMappingNode, toneMapping, this.toneMappingNodes );
51
+
52
+ }
53
+
54
+ getToneMappingFunction( toneMapping ) {
55
+
56
+ return this.toneMappingNodes.get( toneMapping ) || null;
57
+
58
+ }
59
+
60
+ getMaterialNodeClass( materialType ) {
61
+
62
+ return this.materialNodes.get( materialType ) || null;
63
+
64
+ }
65
+
66
+ addMaterial( materialNodeClass, materialClass ) {
67
+
68
+ this.addType( materialNodeClass, materialClass.name, this.materialNodes );
69
+
70
+ }
71
+
72
+ getLightNodeClass( light ) {
73
+
74
+ return this.lightNodes.get( light ) || null;
75
+
76
+ }
77
+
78
+ addLight( lightNodeClass, lightClass ) {
79
+
80
+ this.addClass( lightNodeClass, lightClass, this.lightNodes );
81
+
82
+ }
83
+
84
+ addType( nodeClass, type, library ) {
85
+
86
+ if ( library.has( type ) ) {
87
+
88
+ console.warn( `Redefinition of node ${ type }` );
89
+ return;
90
+
91
+ }
92
+
93
+ if ( typeof nodeClass !== 'function' ) throw new Error( `Node class ${ nodeClass.name } is not a class.` );
94
+ if ( typeof type === 'function' || typeof type === 'object' ) throw new Error( `Base class ${ type } is not a class.` );
95
+
96
+ library.set( type, nodeClass );
97
+
98
+ }
99
+
100
+ addClass( nodeClass, baseClass, library ) {
101
+
102
+ if ( library.has( baseClass ) ) {
103
+
104
+ console.warn( `Redefinition of node ${ baseClass.name }` );
105
+ return;
106
+
107
+ }
108
+
109
+ if ( typeof nodeClass !== 'function' ) throw new Error( `Node class ${ nodeClass.name } is not a class.` );
110
+ if ( typeof baseClass !== 'function' ) throw new Error( `Base class ${ baseClass.name } is not a class.` );
111
+
112
+ library.set( baseClass, nodeClass );
113
+
114
+ }
115
+
116
+ }
117
+
118
+ export default NodeLibrary;
@@ -13,9 +13,9 @@ class NodeSampledTexture extends SampledTexture {
13
13
 
14
14
  }
15
15
 
16
- get needsBindingsUpdate() {
16
+ needsBindingsUpdate( generation ) {
17
17
 
18
- return this.textureNode.value !== this.texture || super.needsBindingsUpdate;
18
+ return this.textureNode.value !== this.texture || super.needsBindingsUpdate( generation );
19
19
 
20
20
  }
21
21
 
@@ -1,7 +1,9 @@
1
1
  import DataMap from '../DataMap.js';
2
2
  import ChainMap from '../ChainMap.js';
3
3
  import NodeBuilderState from './NodeBuilderState.js';
4
- import { NodeFrame, objectGroup, renderGroup, frameGroup, cubeTexture, texture, rangeFog, densityFog, reference, viewportBottomLeft, normalWorld, pmremTexture, viewportTopLeft } from '../../../nodes/Nodes.js';
4
+ import { cubeMapNode } from '../../../nodes/utils/CubeMapNode.js';
5
+ import { NodeFrame } from '../../../nodes/Nodes.js';
6
+ import { objectGroup, renderGroup, frameGroup, cubeTexture, texture, rangeFog, densityFog, reference, normalWorld, pmremTexture, viewportUV } from '../../../nodes/TSL.js';
5
7
 
6
8
  import { EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../../constants.js';
7
9
 
@@ -264,17 +266,39 @@ class Nodes extends DataMap {
264
266
 
265
267
  if ( background ) {
266
268
 
267
- if ( sceneData.background !== background ) {
269
+ const forceUpdate = ( scene.backgroundBlurriness === 0 && sceneData.backgroundBlurriness > 0 ) || ( scene.backgroundBlurriness > 0 && sceneData.backgroundBlurriness === 0 );
270
+
271
+ if ( sceneData.background !== background || forceUpdate ) {
268
272
 
269
273
  let backgroundNode = null;
270
274
 
271
275
  if ( background.isCubeTexture === true || ( background.mapping === EquirectangularReflectionMapping || background.mapping === EquirectangularRefractionMapping ) ) {
272
276
 
273
- backgroundNode = pmremTexture( background, normalWorld );
277
+ if ( scene.backgroundBlurriness > 0 ) {
278
+
279
+ backgroundNode = pmremTexture( background, normalWorld );
280
+
281
+ } else {
282
+
283
+ let envMap;
284
+
285
+ if ( background.isCubeTexture === true ) {
286
+
287
+ envMap = cubeTexture( background );
288
+
289
+ } else {
290
+
291
+ envMap = texture( background );
292
+
293
+ }
294
+
295
+ backgroundNode = cubeMapNode( envMap );
296
+
297
+ }
274
298
 
275
299
  } else if ( background.isTexture === true ) {
276
300
 
277
- backgroundNode = texture( background, viewportBottomLeft ).setUpdateMatrix( true );
301
+ backgroundNode = texture( background, viewportUV.flipY() ).setUpdateMatrix( true );
278
302
 
279
303
  } else if ( background.isColor !== true ) {
280
304
 
@@ -284,6 +308,7 @@ class Nodes extends DataMap {
284
308
 
285
309
  sceneData.backgroundNode = backgroundNode;
286
310
  sceneData.background = background;
311
+ sceneData.backgroundBlurriness = scene.backgroundBlurriness;
287
312
 
288
313
  }
289
314
 
@@ -414,7 +439,7 @@ class Nodes extends DataMap {
414
439
  const renderer = this.renderer;
415
440
  const cacheKey = this.getOutputCacheKey();
416
441
 
417
- const output = texture( outputTexture, viewportTopLeft ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
442
+ const output = texture( outputTexture, viewportUV ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
418
443
 
419
444
  outputNodeMap.set( outputTexture, cacheKey );
420
445
 
@@ -424,12 +449,13 @@ class Nodes extends DataMap {
424
449
 
425
450
  updateBefore( renderObject ) {
426
451
 
427
- const nodeFrame = this.getNodeFrameForRender( renderObject );
428
452
  const nodeBuilder = renderObject.getNodeBuilderState();
429
453
 
430
454
  for ( const node of nodeBuilder.updateBeforeNodes ) {
431
455
 
432
- nodeFrame.updateBeforeNode( node );
456
+ // update frame state for each node
457
+
458
+ this.getNodeFrameForRender( renderObject ).updateBeforeNode( node );
433
459
 
434
460
  }
435
461
 
@@ -437,12 +463,13 @@ class Nodes extends DataMap {
437
463
 
438
464
  updateAfter( renderObject ) {
439
465
 
440
- const nodeFrame = this.getNodeFrameForRender( renderObject );
441
466
  const nodeBuilder = renderObject.getNodeBuilderState();
442
467
 
443
468
  for ( const node of nodeBuilder.updateAfterNodes ) {
444
469
 
445
- nodeFrame.updateAfterNode( node );
470
+ // update frame state for each node
471
+
472
+ this.getNodeFrameForRender( renderObject ).updateAfterNode( node );
446
473
 
447
474
  }
448
475
 
@@ -0,0 +1,105 @@
1
+ import NodeLibrary from './NodeLibrary.js';
2
+
3
+ // Materials
4
+ import { MeshPhongMaterial } from '../../../materials/MeshPhongMaterial.js';
5
+ import MeshPhongNodeMaterial from '../../../materials/nodes/MeshPhongNodeMaterial.js';
6
+ import { MeshStandardMaterial } from '../../../materials/MeshStandardMaterial.js';
7
+ import MeshStandardNodeMaterial from '../../../materials/nodes/MeshStandardNodeMaterial.js';
8
+ import { MeshPhysicalMaterial } from '../../../materials/MeshPhysicalMaterial.js';
9
+ import MeshPhysicalNodeMaterial from '../../../materials/nodes/MeshPhysicalNodeMaterial.js';
10
+ import { MeshToonMaterial } from '../../../materials/MeshToonMaterial.js';
11
+ import MeshToonNodeMaterial from '../../../materials/nodes/MeshToonNodeMaterial.js';
12
+ import { MeshBasicMaterial } from '../../../materials/MeshBasicMaterial.js';
13
+ import MeshBasicNodeMaterial from '../../../materials/nodes/MeshBasicNodeMaterial.js';
14
+ import { MeshLambertMaterial } from '../../../materials/MeshLambertMaterial.js';
15
+ import MeshLambertNodeMaterial from '../../../materials/nodes/MeshLambertNodeMaterial.js';
16
+ import { MeshNormalMaterial } from '../../../materials/MeshNormalMaterial.js';
17
+ import MeshNormalNodeMaterial from '../../../materials/nodes/MeshNormalNodeMaterial.js';
18
+ import { MeshMatcapMaterial } from '../../../materials/MeshMatcapMaterial.js';
19
+ import MeshMatcapNodeMaterial from '../../../materials/nodes/MeshMatcapNodeMaterial.js';
20
+ import { LineBasicMaterial } from '../../../materials/LineBasicMaterial.js';
21
+ import LineBasicNodeMaterial from '../../../materials/nodes/LineBasicNodeMaterial.js';
22
+ import { LineDashedMaterial } from '../../../materials/LineDashedMaterial.js';
23
+ import LineDashedNodeMaterial from '../../../materials/nodes/LineDashedNodeMaterial.js';
24
+ import { PointsMaterial } from '../../../materials/PointsMaterial.js';
25
+ import PointsNodeMaterial from '../../../materials/nodes/PointsNodeMaterial.js';
26
+ import { SpriteMaterial } from '../../../materials/SpriteMaterial.js';
27
+ import SpriteNodeMaterial from '../../../materials/nodes/SpriteNodeMaterial.js';
28
+ import { ShadowMaterial } from '../../../materials/ShadowMaterial.js';
29
+ import ShadowNodeMaterial from '../../../materials/nodes/ShadowNodeMaterial.js';
30
+ //import { MeshDepthMaterial } from '../../../materials/MeshDepthMaterial.js';
31
+ //import MeshDepthNodeMaterial from '../../../materials/nodes/MeshDepthNodeMaterial.js';
32
+ //import { MeshDistanceMaterial } from '../../../materials/MeshDistanceMaterial.js';
33
+ //import MeshDistanceNodeMaterial from '../../../materials/nodes/MeshDistanceNodeMaterial.js';
34
+
35
+ // Lights
36
+ import { PointLight } from '../../../lights/PointLight.js';
37
+ import { PointLightNode } from '../../../nodes/Nodes.js';
38
+ import { DirectionalLight } from '../../../lights/DirectionalLight.js';
39
+ import { DirectionalLightNode } from '../../../nodes/Nodes.js';
40
+ import { RectAreaLight } from '../../../lights/RectAreaLight.js';
41
+ import { RectAreaLightNode } from '../../../nodes/Nodes.js';
42
+ import { SpotLight } from '../../../lights/SpotLight.js';
43
+ import { SpotLightNode } from '../../../nodes/Nodes.js';
44
+ import { AmbientLight } from '../../../lights/AmbientLight.js';
45
+ import { AmbientLightNode } from '../../../nodes/Nodes.js';
46
+ import { HemisphereLight } from '../../../lights/HemisphereLight.js';
47
+ import { HemisphereLightNode } from '../../../nodes/Nodes.js';
48
+ import { LightProbe } from '../../../lights/LightProbe.js';
49
+ import { LightProbeNode } from '../../../nodes/Nodes.js';
50
+ import IESSpotLight from '../../../lights/webgpu/IESSpotLight.js';
51
+ import { IESSpotLightNode } from '../../../nodes/Nodes.js';
52
+
53
+ // Tone Mapping
54
+ import { LinearToneMapping, ReinhardToneMapping, CineonToneMapping, ACESFilmicToneMapping, AgXToneMapping, NeutralToneMapping } from '../../../constants.js';
55
+ import * as TMF from '../../../nodes/display/ToneMappingFunctions.js';
56
+
57
+ // Color Space
58
+ import { LinearSRGBColorSpace, SRGBColorSpace } from '../../../constants.js';
59
+ import { getColorSpaceMethod } from '../../../nodes/display/ColorSpaceNode.js';
60
+ import * as CSF from '../../../nodes/display/ColorSpaceFunctions.js';
61
+
62
+ class StandardNodeLibrary extends NodeLibrary {
63
+
64
+ constructor() {
65
+
66
+ super();
67
+
68
+ this.addMaterial( MeshPhongNodeMaterial, MeshPhongMaterial );
69
+ this.addMaterial( MeshStandardNodeMaterial, MeshStandardMaterial );
70
+ this.addMaterial( MeshPhysicalNodeMaterial, MeshPhysicalMaterial );
71
+ this.addMaterial( MeshToonNodeMaterial, MeshToonMaterial );
72
+ this.addMaterial( MeshBasicNodeMaterial, MeshBasicMaterial );
73
+ this.addMaterial( MeshLambertNodeMaterial, MeshLambertMaterial );
74
+ this.addMaterial( MeshNormalNodeMaterial, MeshNormalMaterial );
75
+ this.addMaterial( MeshMatcapNodeMaterial, MeshMatcapMaterial );
76
+ this.addMaterial( LineBasicNodeMaterial, LineBasicMaterial );
77
+ this.addMaterial( LineDashedNodeMaterial, LineDashedMaterial );
78
+ this.addMaterial( PointsNodeMaterial, PointsMaterial );
79
+ this.addMaterial( SpriteNodeMaterial, SpriteMaterial );
80
+ this.addMaterial( ShadowNodeMaterial, ShadowMaterial );
81
+
82
+ this.addLight( PointLightNode, PointLight );
83
+ this.addLight( DirectionalLightNode, DirectionalLight );
84
+ this.addLight( RectAreaLightNode, RectAreaLight );
85
+ this.addLight( SpotLightNode, SpotLight );
86
+ this.addLight( AmbientLightNode, AmbientLight );
87
+ this.addLight( HemisphereLightNode, HemisphereLight );
88
+ this.addLight( LightProbeNode, LightProbe );
89
+ this.addLight( IESSpotLightNode, IESSpotLight );
90
+
91
+ this.addToneMapping( TMF.LinearToneMapping, LinearToneMapping );
92
+ this.addToneMapping( TMF.ReinhardToneMapping, ReinhardToneMapping );
93
+ this.addToneMapping( TMF.CineonToneMapping, CineonToneMapping );
94
+ this.addToneMapping( TMF.ACESFilmicToneMapping, ACESFilmicToneMapping );
95
+ this.addToneMapping( TMF.AgXToneMapping, AgXToneMapping );
96
+ this.addToneMapping( TMF.NeutralToneMapping, NeutralToneMapping );
97
+
98
+ this.addColorSpace( CSF.LinearTosRGB, getColorSpaceMethod( LinearSRGBColorSpace, SRGBColorSpace ) );
99
+ this.addColorSpace( CSF.sRGBToLinear, getColorSpaceMethod( SRGBColorSpace, LinearSRGBColorSpace ) );
100
+
101
+ }
102
+
103
+ }
104
+
105
+ export default StandardNodeLibrary;
@@ -22,9 +22,9 @@ vec3 ReinhardToneMapping( vec3 color ) {
22
22
  }
23
23
 
24
24
  // source: http://filmicworlds.com/blog/filmic-tonemapping-operators/
25
- vec3 OptimizedCineonToneMapping( vec3 color ) {
25
+ vec3 CineonToneMapping( vec3 color ) {
26
26
 
27
- // optimized filmic operator by Jim Hejl and Richard Burgess-Dawson
27
+ // filmic operator by Jim Hejl and Richard Burgess-Dawson
28
28
  color *= toneMappingExposure;
29
29
  color = max( vec3( 0.0 ), color - 0.004 );
30
30
  return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );
@@ -114,7 +114,7 @@ function getToneMappingFunction( functionName, toneMapping ) {
114
114
  break;
115
115
 
116
116
  case CineonToneMapping:
117
- toneMappingName = 'OptimizedCineon';
117
+ toneMappingName = 'Cineon';
118
118
  break;
119
119
 
120
120
  case ACESFilmicToneMapping:
@@ -2,6 +2,12 @@ function WebGLProperties() {
2
2
 
3
3
  let properties = new WeakMap();
4
4
 
5
+ function has( object ) {
6
+
7
+ return properties.has( object );
8
+
9
+ }
10
+
5
11
  function get( object ) {
6
12
 
7
13
  let map = properties.get( object );
@@ -36,6 +42,7 @@ function WebGLProperties() {
36
42
  }
37
43
 
38
44
  return {
45
+ has: has,
39
46
  get: get,
40
47
  remove: remove,
41
48
  update: update,
@@ -1722,6 +1722,37 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1722
1722
  const renderTargetProperties = properties.get( renderTarget );
1723
1723
  const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
1724
1724
 
1725
+ // if the bound depth texture has changed
1726
+ if ( renderTargetProperties.__boundDepthTexture !== renderTarget.depthTexture ) {
1727
+
1728
+ // fire the dispose event to get rid of stored state associated with the previously bound depth buffer
1729
+ const depthTexture = renderTarget.depthTexture;
1730
+ if ( renderTargetProperties.__depthDisposeCallback ) {
1731
+
1732
+ renderTargetProperties.__depthDisposeCallback();
1733
+
1734
+ }
1735
+
1736
+ // set up dispose listeners to track when the currently attached buffer is implicitly unbound
1737
+ if ( depthTexture ) {
1738
+
1739
+ const disposeEvent = () => {
1740
+
1741
+ delete renderTargetProperties.__boundDepthTexture;
1742
+ delete renderTargetProperties.__depthDisposeCallback;
1743
+ depthTexture.removeEventListener( 'dispose', disposeEvent );
1744
+
1745
+ };
1746
+
1747
+ depthTexture.addEventListener( 'dispose', disposeEvent );
1748
+ renderTargetProperties.__depthDisposeCallback = disposeEvent;
1749
+
1750
+ }
1751
+
1752
+ renderTargetProperties.__boundDepthTexture = depthTexture;
1753
+
1754
+ }
1755
+
1725
1756
  if ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {
1726
1757
 
1727
1758
  if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );
@@ -1737,16 +1768,42 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1737
1768
  for ( let i = 0; i < 6; i ++ ) {
1738
1769
 
1739
1770
  state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );
1740
- renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();
1741
- setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );
1771
+
1772
+ if ( renderTargetProperties.__webglDepthbuffer[ i ] === undefined ) {
1773
+
1774
+ renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();
1775
+ setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );
1776
+
1777
+ } else {
1778
+
1779
+ // attach buffer if it's been created already
1780
+ const glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
1781
+ const renderbuffer = renderTargetProperties.__webglDepthbuffer[ i ];
1782
+ _gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );
1783
+ _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );
1784
+
1785
+ }
1742
1786
 
1743
1787
  }
1744
1788
 
1745
1789
  } else {
1746
1790
 
1747
1791
  state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
1748
- renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();
1749
- setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );
1792
+
1793
+ if ( renderTargetProperties.__webglDepthbuffer === undefined ) {
1794
+
1795
+ renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();
1796
+ setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );
1797
+
1798
+ } else {
1799
+
1800
+ // attach buffer if it's been created already
1801
+ const glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
1802
+ const renderbuffer = renderTargetProperties.__webglDepthbuffer;
1803
+ _gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );
1804
+ _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );
1805
+
1806
+ }
1750
1807
 
1751
1808
  }
1752
1809