super-three 0.155.0 → 0.157.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 (268) hide show
  1. package/build/three.cjs +361 -324
  2. package/build/three.js +361 -324
  3. package/build/three.min.js +2 -2
  4. package/build/three.module.js +354 -323
  5. package/build/three.module.min.js +1 -1
  6. package/examples/jsm/capabilities/WebGL.js +17 -0
  7. package/examples/jsm/controls/DragControls.js +3 -2
  8. package/examples/jsm/controls/OrbitControls.js +13 -5
  9. package/examples/jsm/csm/CSMShader.js +59 -21
  10. package/examples/jsm/exporters/EXRExporter.js +102 -24
  11. package/examples/jsm/exporters/GLTFExporter.js +1 -1
  12. package/examples/jsm/libs/rhino3dm/rhino3dm.js +8726 -4
  13. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +8737 -4
  14. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  15. package/examples/jsm/libs/tween.module.js +790 -735
  16. package/examples/jsm/libs/utif.module.js +1644 -1558
  17. package/examples/jsm/lights/LightProbeGenerator.js +37 -3
  18. package/examples/jsm/lines/LineMaterial.js +90 -156
  19. package/examples/jsm/loaders/3DMLoader.js +378 -104
  20. package/examples/jsm/loaders/DDSLoader.js +46 -3
  21. package/examples/jsm/loaders/EXRLoader.js +4 -4
  22. package/examples/jsm/loaders/FBXLoader.js +2 -0
  23. package/examples/jsm/loaders/GLTFLoader.js +18 -8
  24. package/examples/jsm/loaders/KTX2Loader.js +126 -77
  25. package/examples/jsm/loaders/LDrawLoader.js +22 -16
  26. package/examples/jsm/loaders/LogLuvLoader.js +2 -2
  27. package/examples/jsm/loaders/MMDLoader.js +10 -7
  28. package/examples/jsm/loaders/RGBELoader.js +48 -66
  29. package/examples/jsm/loaders/STLLoader.js +7 -0
  30. package/examples/jsm/loaders/USDZLoader.js +215 -12
  31. package/examples/jsm/materials/MeshGouraudMaterial.js +22 -18
  32. package/examples/jsm/nodes/Nodes.js +8 -1
  33. package/examples/jsm/nodes/accessors/BitangentNode.js +1 -1
  34. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +30 -4
  35. package/examples/jsm/nodes/accessors/BufferNode.js +1 -1
  36. package/examples/jsm/nodes/accessors/CameraNode.js +1 -1
  37. package/examples/jsm/nodes/accessors/CubeTextureNode.js +19 -4
  38. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +4 -5
  39. package/examples/jsm/nodes/accessors/InstanceNode.js +2 -2
  40. package/examples/jsm/nodes/accessors/LineMaterialNode.js +29 -0
  41. package/examples/jsm/nodes/accessors/MaterialNode.js +23 -13
  42. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +12 -9
  43. package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
  44. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +5 -4
  45. package/examples/jsm/nodes/accessors/MorphNode.js +4 -4
  46. package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
  47. package/examples/jsm/nodes/accessors/Object3DNode.js +3 -3
  48. package/examples/jsm/nodes/accessors/PointUVNode.js +1 -1
  49. package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
  50. package/examples/jsm/nodes/accessors/ReferenceNode.js +13 -7
  51. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +2 -2
  52. package/examples/jsm/nodes/accessors/SceneNode.js +2 -2
  53. package/examples/jsm/nodes/accessors/SkinningNode.js +2 -2
  54. package/examples/jsm/nodes/accessors/StorageBufferNode.js +1 -1
  55. package/examples/jsm/nodes/accessors/TangentNode.js +1 -1
  56. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +2 -2
  57. package/examples/jsm/nodes/accessors/TextureNode.js +18 -8
  58. package/examples/jsm/nodes/accessors/TextureSizeNode.js +2 -2
  59. package/examples/jsm/nodes/accessors/TextureStoreNode.js +29 -0
  60. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  61. package/examples/jsm/nodes/accessors/UserDataNode.js +2 -2
  62. package/examples/jsm/nodes/code/CodeNode.js +1 -1
  63. package/examples/jsm/nodes/code/ExpressionNode.js +1 -1
  64. package/examples/jsm/nodes/code/FunctionCallNode.js +1 -1
  65. package/examples/jsm/nodes/code/FunctionNode.js +18 -7
  66. package/examples/jsm/nodes/code/ScriptableNode.js +2 -2
  67. package/examples/jsm/nodes/code/ScriptableValueNode.js +2 -2
  68. package/examples/jsm/nodes/core/ArrayUniformNode.js +1 -1
  69. package/examples/jsm/nodes/core/AttributeNode.js +3 -3
  70. package/examples/jsm/nodes/core/BypassNode.js +1 -1
  71. package/examples/jsm/nodes/core/CacheNode.js +1 -1
  72. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  73. package/examples/jsm/nodes/core/ContextNode.js +2 -2
  74. package/examples/jsm/nodes/core/IndexNode.js +1 -1
  75. package/examples/jsm/nodes/core/InputNode.js +1 -1
  76. package/examples/jsm/nodes/core/Node.js +45 -14
  77. package/examples/jsm/nodes/core/NodeBuilder.js +83 -15
  78. package/examples/jsm/nodes/core/NodeFrame.js +37 -14
  79. package/examples/jsm/nodes/core/NodeUniform.js +1 -1
  80. package/examples/jsm/nodes/core/OutputStructNode.js +62 -0
  81. package/examples/jsm/nodes/core/PropertyNode.js +3 -1
  82. package/examples/jsm/nodes/core/StackNode.js +5 -5
  83. package/examples/jsm/nodes/core/StructTypeNode.js +24 -0
  84. package/examples/jsm/nodes/core/TempNode.js +1 -1
  85. package/examples/jsm/nodes/core/UniformNode.js +3 -1
  86. package/examples/jsm/nodes/core/VarNode.js +1 -1
  87. package/examples/jsm/nodes/core/VaryingNode.js +1 -1
  88. package/examples/jsm/nodes/core/constants.js +1 -1
  89. package/examples/jsm/nodes/display/BlendModeNode.js +2 -2
  90. package/examples/jsm/nodes/display/BumpMapNode.js +2 -2
  91. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -2
  92. package/examples/jsm/nodes/display/ColorSpaceNode.js +2 -2
  93. package/examples/jsm/nodes/display/FrontFacingNode.js +1 -1
  94. package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
  95. package/examples/jsm/nodes/display/PosterizeNode.js +2 -2
  96. package/examples/jsm/nodes/display/ToneMappingNode.js +2 -2
  97. package/examples/jsm/nodes/display/ViewportDepthNode.js +2 -2
  98. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -1
  99. package/examples/jsm/nodes/display/ViewportNode.js +21 -7
  100. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +1 -1
  101. package/examples/jsm/nodes/display/ViewportTextureNode.js +1 -1
  102. package/examples/jsm/nodes/fog/FogExp2Node.js +2 -2
  103. package/examples/jsm/nodes/fog/FogNode.js +2 -2
  104. package/examples/jsm/nodes/fog/FogRangeNode.js +2 -2
  105. package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
  106. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  107. package/examples/jsm/nodes/lighting/AONode.js +2 -2
  108. package/examples/jsm/nodes/lighting/AmbientLightNode.js +3 -3
  109. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +4 -4
  110. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +4 -4
  111. package/examples/jsm/nodes/lighting/EnvironmentNode.js +2 -2
  112. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +3 -3
  113. package/examples/jsm/nodes/lighting/IESSpotLightNode.js +2 -2
  114. package/examples/jsm/nodes/lighting/LightNode.js +2 -2
  115. package/examples/jsm/nodes/lighting/LightingContextNode.js +3 -3
  116. package/examples/jsm/nodes/lighting/LightingNode.js +1 -1
  117. package/examples/jsm/nodes/lighting/LightsNode.js +4 -4
  118. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  119. package/examples/jsm/nodes/lighting/SpotLightNode.js +4 -4
  120. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +449 -0
  121. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +1 -1
  122. package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +54 -0
  123. package/examples/jsm/nodes/materials/Materials.js +2 -0
  124. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -1
  125. package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +2 -2
  126. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -2
  127. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
  128. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
  129. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +3 -3
  130. package/examples/jsm/nodes/materials/NodeMaterial.js +39 -29
  131. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +1 -1
  132. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
  133. package/examples/jsm/nodes/math/CondNode.js +1 -1
  134. package/examples/jsm/nodes/math/HashNode.js +34 -0
  135. package/examples/jsm/nodes/math/MathNode.js +2 -2
  136. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  137. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  138. package/examples/jsm/nodes/shadernode/ShaderNode.js +85 -28
  139. package/examples/jsm/nodes/utils/ArrayElementNode.js +1 -1
  140. package/examples/jsm/nodes/utils/ConvertNode.js +1 -1
  141. package/examples/jsm/nodes/utils/DiscardNode.js +1 -1
  142. package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -2
  143. package/examples/jsm/nodes/utils/JoinNode.js +1 -1
  144. package/examples/jsm/nodes/utils/LoopNode.js +11 -11
  145. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -2
  146. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  147. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  148. package/examples/jsm/nodes/utils/PackingNode.js +2 -2
  149. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  150. package/examples/jsm/nodes/utils/RotateUVNode.js +2 -2
  151. package/examples/jsm/nodes/utils/SetNode.js +62 -0
  152. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +2 -2
  153. package/examples/jsm/nodes/utils/SplitNode.js +2 -2
  154. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +2 -2
  155. package/examples/jsm/nodes/utils/TimerNode.js +2 -2
  156. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +2 -2
  157. package/examples/jsm/objects/Sky.js +1 -3
  158. package/examples/jsm/postprocessing/FilmPass.js +3 -5
  159. package/examples/jsm/postprocessing/OutputPass.js +3 -2
  160. package/examples/jsm/postprocessing/RenderPass.js +30 -12
  161. package/examples/jsm/postprocessing/SAOPass.js +23 -98
  162. package/examples/jsm/postprocessing/SSAOPass.js +10 -30
  163. package/examples/jsm/renderers/common/Backend.js +11 -8
  164. package/examples/jsm/renderers/common/Background.js +2 -2
  165. package/examples/jsm/renderers/common/Binding.js +6 -0
  166. package/examples/jsm/renderers/common/Bindings.js +4 -5
  167. package/examples/jsm/renderers/common/Pipelines.js +9 -9
  168. package/examples/jsm/renderers/common/RenderContext.js +3 -0
  169. package/examples/jsm/renderers/common/RenderContexts.js +26 -1
  170. package/examples/jsm/renderers/common/RenderList.js +12 -4
  171. package/examples/jsm/renderers/common/RenderObject.js +43 -15
  172. package/examples/jsm/renderers/common/RenderObjects.js +8 -14
  173. package/examples/jsm/renderers/common/Renderer.js +52 -16
  174. package/examples/jsm/renderers/common/SampledTexture.js +6 -3
  175. package/examples/jsm/renderers/common/Sampler.js +1 -1
  176. package/examples/jsm/renderers/common/StorageBuffer.js +1 -1
  177. package/examples/jsm/renderers/common/StorageTexture.js +19 -0
  178. package/examples/jsm/renderers/common/Textures.js +166 -21
  179. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +35 -0
  180. package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +21 -11
  181. package/examples/jsm/renderers/common/nodes/NodeSampler.js +1 -7
  182. package/examples/jsm/renderers/common/nodes/Nodes.js +79 -18
  183. package/examples/jsm/renderers/webgl/WebGLBackend.js +702 -0
  184. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +207 -20
  185. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +84 -0
  186. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +26 -0
  187. package/examples/jsm/renderers/webgl/utils/WebGLState.js +529 -0
  188. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +212 -0
  189. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +242 -0
  190. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +340 -0
  191. package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodeBuilder.js +4 -4
  192. package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodes.js +14 -2
  193. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +282 -43
  194. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +18 -2
  195. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +93 -60
  196. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -2
  197. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +15 -2
  198. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -14
  199. package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -0
  200. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +205 -284
  201. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +6 -5
  202. package/examples/jsm/shaders/FilmShader.js +11 -54
  203. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  204. package/examples/jsm/shaders/MMDToonShader.js +4 -4
  205. package/examples/jsm/shaders/OutputShader.js +2 -2
  206. package/examples/jsm/shaders/SAOShader.js +0 -13
  207. package/examples/jsm/shaders/SSAOShader.js +33 -26
  208. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +6 -6
  209. package/examples/jsm/utils/BufferGeometryUtils.js +6 -4
  210. package/package.json +1 -1
  211. package/src/Three.js +1 -2
  212. package/src/animation/AnimationUtils.js +3 -20
  213. package/src/animation/KeyframeTrack.js +8 -8
  214. package/src/audio/Audio.js +6 -0
  215. package/src/cameras/Camera.js +1 -5
  216. package/src/cameras/CubeCamera.js +14 -8
  217. package/src/constants.js +10 -1
  218. package/src/core/Object3D.js +1 -14
  219. package/src/core/RenderTarget.js +16 -7
  220. package/src/core/UniformsGroup.js +2 -2
  221. package/src/extras/core/CurvePath.js +4 -1
  222. package/src/loaders/DataTextureLoader.js +0 -2
  223. package/src/loaders/MaterialLoader.js +1 -1
  224. package/src/loaders/ObjectLoader.js +6 -0
  225. package/src/materials/Material.js +10 -10
  226. package/src/math/Color.js +1 -5
  227. package/src/math/ColorManagement.js +82 -60
  228. package/src/math/Vector2.js +2 -2
  229. package/src/math/Vector3.js +3 -3
  230. package/src/math/Vector4.js +4 -4
  231. package/src/objects/Line.js +1 -1
  232. package/src/objects/Mesh.js +1 -1
  233. package/src/objects/Points.js +1 -1
  234. package/src/objects/Sprite.js +2 -2
  235. package/src/renderers/WebGLRenderer.js +42 -51
  236. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
  237. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +1 -1
  238. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +35 -2
  239. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -9
  240. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +19 -15
  241. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +2 -2
  242. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +4 -4
  243. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +3 -3
  244. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -6
  245. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +4 -4
  246. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +1 -1
  247. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +16 -16
  248. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +3 -3
  249. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +11 -1
  250. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +1 -1
  251. package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -0
  252. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -1
  253. package/src/renderers/shaders/UniformsUtils.js +2 -2
  254. package/src/renderers/webgl/WebGLBackground.js +9 -17
  255. package/src/renderers/webgl/WebGLLights.js +14 -3
  256. package/src/renderers/webgl/WebGLProgram.js +36 -5
  257. package/src/renderers/webgl/WebGLPrograms.js +9 -1
  258. package/src/renderers/webgl/WebGLTextures.js +19 -8
  259. package/src/renderers/webgl/WebGLUtils.js +25 -20
  260. package/src/scenes/Fog.js +1 -0
  261. package/src/scenes/FogExp2.js +1 -0
  262. package/src/textures/Source.js +2 -2
  263. package/src/textures/Texture.js +2 -2
  264. package/src/utils.js +9 -1
  265. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureMipmapUtils.js +0 -163
  266. package/src/lights/AmbientLightProbe.js +0 -21
  267. package/src/lights/HemisphereLightProbe.js +0 -30
  268. /package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/SlotNode.js +0 -0
@@ -32,7 +32,7 @@ import { CopyShader } from '../shaders/CopyShader.js';
32
32
 
33
33
  class SSAOPass extends Pass {
34
34
 
35
- constructor( scene, camera, width, height ) {
35
+ constructor( scene, camera, width, height, kernelSize = 32 ) {
36
36
 
37
37
  super();
38
38
 
@@ -45,7 +45,6 @@ class SSAOPass extends Pass {
45
45
  this.scene = scene;
46
46
 
47
47
  this.kernelRadius = 8;
48
- this.kernelSize = 32;
49
48
  this.kernel = [];
50
49
  this.noiseTexture = null;
51
50
  this.output = 0;
@@ -57,17 +56,15 @@ class SSAOPass extends Pass {
57
56
 
58
57
  //
59
58
 
60
- this.generateSampleKernel();
59
+ this.generateSampleKernel( kernelSize );
61
60
  this.generateRandomKernelRotations();
62
61
 
63
- // beauty render target
62
+ // depth texture
64
63
 
65
64
  const depthTexture = new DepthTexture();
66
65
  depthTexture.format = DepthStencilFormat;
67
66
  depthTexture.type = UnsignedInt248Type;
68
67
 
69
- this.beautyRenderTarget = new WebGLRenderTarget( this.width, this.height, { type: HalfFloatType } );
70
-
71
68
  // normal render target with depth buffer
72
69
 
73
70
  this.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {
@@ -93,7 +90,8 @@ class SSAOPass extends Pass {
93
90
  blending: NoBlending
94
91
  } );
95
92
 
96
- this.ssaoMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;
93
+ this.ssaoMaterial.defines[ 'KERNEL_SIZE' ] = kernelSize;
94
+
97
95
  this.ssaoMaterial.uniforms[ 'tNormal' ].value = this.normalRenderTarget.texture;
98
96
  this.ssaoMaterial.uniforms[ 'tDepth' ].value = this.normalRenderTarget.depthTexture;
99
97
  this.ssaoMaterial.uniforms[ 'tNoise' ].value = this.noiseTexture;
@@ -160,7 +158,6 @@ class SSAOPass extends Pass {
160
158
 
161
159
  // dispose render targets
162
160
 
163
- this.beautyRenderTarget.dispose();
164
161
  this.normalRenderTarget.dispose();
165
162
  this.ssaoRenderTarget.dispose();
166
163
  this.blurRenderTarget.dispose();
@@ -178,16 +175,10 @@ class SSAOPass extends Pass {
178
175
 
179
176
  }
180
177
 
181
- render( renderer, writeBuffer /*, readBuffer, deltaTime, maskActive */ ) {
178
+ render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
182
179
 
183
180
  if ( renderer.capabilities.isWebGL2 === false ) this.noiseTexture.format = LuminanceFormat;
184
181
 
185
- // render beauty
186
-
187
- renderer.setRenderTarget( this.beautyRenderTarget );
188
- renderer.clear();
189
- renderer.render( this.scene, this.camera );
190
-
191
182
  // render normals and depth (honor only meshes, points and lines do not contribute to SSAO)
192
183
 
193
184
  this.overrideVisibility();
@@ -225,14 +216,6 @@ class SSAOPass extends Pass {
225
216
 
226
217
  break;
227
218
 
228
- case SSAOPass.OUTPUT.Beauty:
229
-
230
- this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;
231
- this.copyMaterial.blending = NoBlending;
232
- this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
233
-
234
- break;
235
-
236
219
  case SSAOPass.OUTPUT.Depth:
237
220
 
238
221
  this.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );
@@ -249,7 +232,7 @@ class SSAOPass extends Pass {
249
232
 
250
233
  case SSAOPass.OUTPUT.Default:
251
234
 
252
- this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;
235
+ this.copyMaterial.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
253
236
  this.copyMaterial.blending = NoBlending;
254
237
  this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
255
238
 
@@ -332,7 +315,6 @@ class SSAOPass extends Pass {
332
315
  this.width = width;
333
316
  this.height = height;
334
317
 
335
- this.beautyRenderTarget.setSize( width, height );
336
318
  this.ssaoRenderTarget.setSize( width, height );
337
319
  this.normalRenderTarget.setSize( width, height );
338
320
  this.blurRenderTarget.setSize( width, height );
@@ -345,9 +327,8 @@ class SSAOPass extends Pass {
345
327
 
346
328
  }
347
329
 
348
- generateSampleKernel() {
330
+ generateSampleKernel( kernelSize ) {
349
331
 
350
- const kernelSize = this.kernelSize;
351
332
  const kernel = this.kernel;
352
333
 
353
334
  for ( let i = 0; i < kernelSize; i ++ ) {
@@ -432,9 +413,8 @@ SSAOPass.OUTPUT = {
432
413
  'Default': 0,
433
414
  'SSAO': 1,
434
415
  'Blur': 2,
435
- 'Beauty': 3,
436
- 'Depth': 4,
437
- 'Normal': 5
416
+ 'Depth': 3,
417
+ 'Normal': 4
438
418
  };
439
419
 
440
420
  export { SSAOPass };
@@ -1,7 +1,7 @@
1
1
  let vector2 = null;
2
2
  let vector4 = null;
3
3
 
4
- import { Vector2, Vector4 } from 'three';
4
+ import { Vector2, Vector4, REVISION, createCanvasElement } from 'three';
5
5
 
6
6
  class Backend {
7
7
 
@@ -118,7 +118,12 @@ class Backend {
118
118
 
119
119
  if ( domElement === null ) {
120
120
 
121
- this.domElement = domElement = ( this.parameters.canvas !== undefined ) ? this.parameters.canvas : this.createCanvasElement();
121
+ domElement = ( this.parameters.canvas !== undefined ) ? this.parameters.canvas : createCanvasElement();
122
+
123
+ // OffscreenCanvas does not have setAttribute, see #22811
124
+ if ( 'setAttribute' in domElement ) domElement.setAttribute( 'data-engine', `three.js r${REVISION}` );
125
+
126
+ this.domElement = domElement;
122
127
 
123
128
  }
124
129
 
@@ -126,16 +131,14 @@ class Backend {
126
131
 
127
132
  }
128
133
 
129
- createCanvasElement() {
134
+ // resource properties
135
+
136
+ set( object, value ) {
130
137
 
131
- const canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );
132
- canvas.style.display = 'block';
133
- return canvas;
138
+ this.data.set( object, value );
134
139
 
135
140
  }
136
141
 
137
- // resource properties
138
-
139
142
  get( object ) {
140
143
 
141
144
  let map = this.data.get( object );
@@ -1,6 +1,6 @@
1
1
  import DataMap from './DataMap.js';
2
2
  import { Color, Mesh, SphereGeometry, BackSide } from 'three';
3
- import { vec4, context, normalWorld, backgroundBlurriness, backgroundIntensity, NodeMaterial, modelViewProjection } from '../../nodes/Nodes.js';
3
+ import { context, normalWorld, backgroundBlurriness, backgroundIntensity, NodeMaterial, modelViewProjection } from '../../nodes/Nodes.js';
4
4
 
5
5
  let _clearAlpha;
6
6
  const _clearColor = new Color();
@@ -60,7 +60,7 @@ class Background extends DataMap {
60
60
  } ).mul( backgroundIntensity );
61
61
 
62
62
  let viewProj = modelViewProjection();
63
- viewProj = vec4( viewProj.x, viewProj.y, viewProj.w, viewProj.w );
63
+ viewProj = viewProj.setZ( viewProj.w );
64
64
 
65
65
  const nodeMaterial = new NodeMaterial();
66
66
  nodeMaterial.outputNode = this.backgroundMeshNode;
@@ -14,6 +14,12 @@ class Binding {
14
14
 
15
15
  }
16
16
 
17
+ clone() {
18
+
19
+ return Object.assign( new this.constructor(), this );
20
+
21
+ }
22
+
17
23
  }
18
24
 
19
25
  export default Binding;
@@ -48,9 +48,9 @@ class Bindings extends DataMap {
48
48
 
49
49
  if ( data.bindings === undefined ) {
50
50
 
51
- const nodeBuilder = this.nodes.getForCompute( computeNode );
51
+ const nodeBuilderState = this.nodes.getForCompute( computeNode );
52
52
 
53
- const bindings = nodeBuilder.getBindings();
53
+ const bindings = nodeBuilderState.bindings;
54
54
 
55
55
  data.bindings = bindings;
56
56
 
@@ -80,7 +80,7 @@ class Bindings extends DataMap {
80
80
 
81
81
  for ( const binding of bindings ) {
82
82
 
83
- if ( binding.isSampler || binding.isSampledTexture ) {
83
+ if ( binding.isSampledTexture ) {
84
84
 
85
85
  this.textures.updateTexture( binding.texture );
86
86
 
@@ -109,10 +109,9 @@ class Bindings extends DataMap {
109
109
 
110
110
  for ( const binding of bindings ) {
111
111
 
112
- const isShared = binding.isShared;
113
112
  const isUpdated = updateMap.get( binding ) === frame;
114
113
 
115
- if ( isShared && isUpdated ) continue;
114
+ if ( isUpdated ) continue;
116
115
 
117
116
  if ( binding.isUniformBuffer ) {
118
117
 
@@ -109,31 +109,31 @@ class Pipelines extends DataMap {
109
109
 
110
110
  // get shader
111
111
 
112
- const nodeBuilder = this.nodes.getForRender( renderObject );
112
+ const nodeBuilderState = renderObject.getNodeBuilderState();
113
113
 
114
114
  // programmable stages
115
115
 
116
- let stageVertex = this.programs.vertex.get( nodeBuilder.vertexShader );
116
+ let stageVertex = this.programs.vertex.get( nodeBuilderState.vertexShader );
117
117
 
118
118
  if ( stageVertex === undefined ) {
119
119
 
120
120
  if ( previousPipeline && previousPipeline.vertexProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.vertexProgram );
121
121
 
122
- stageVertex = new ProgrammableStage( nodeBuilder.vertexShader, 'vertex' );
123
- this.programs.vertex.set( nodeBuilder.vertexShader, stageVertex );
122
+ stageVertex = new ProgrammableStage( nodeBuilderState.vertexShader, 'vertex' );
123
+ this.programs.vertex.set( nodeBuilderState.vertexShader, stageVertex );
124
124
 
125
125
  backend.createProgram( stageVertex );
126
126
 
127
127
  }
128
128
 
129
- let stageFragment = this.programs.fragment.get( nodeBuilder.fragmentShader );
129
+ let stageFragment = this.programs.fragment.get( nodeBuilderState.fragmentShader );
130
130
 
131
131
  if ( stageFragment === undefined ) {
132
132
 
133
133
  if ( previousPipeline && previousPipeline.fragmentProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.fragmentProgram );
134
134
 
135
- stageFragment = new ProgrammableStage( nodeBuilder.fragmentShader, 'fragment' );
136
- this.programs.fragment.set( nodeBuilder.fragmentShader, stageFragment );
135
+ stageFragment = new ProgrammableStage( nodeBuilderState.fragmentShader, 'fragment' );
136
+ this.programs.fragment.set( nodeBuilderState.fragmentShader, stageFragment );
137
137
 
138
138
  backend.createProgram( stageFragment );
139
139
 
@@ -343,7 +343,7 @@ class Pipelines extends DataMap {
343
343
  data.stencilWrite !== material.stencilWrite || data.stencilFunc !== material.stencilFunc ||
344
344
  data.stencilFail !== material.stencilFail || data.stencilZFail !== material.stencilZFail || data.stencilZPass !== material.stencilZPass ||
345
345
  data.stencilFuncMask !== material.stencilFuncMask || data.stencilWriteMask !== material.stencilWriteMask ||
346
- data.side !== material.side
346
+ data.side !== material.side || data.alphaToCoverage !== material.alphaToCoverage
347
347
  ) {
348
348
 
349
349
  data.material = material; data.materialVersion = material.version;
@@ -355,7 +355,7 @@ class Pipelines extends DataMap {
355
355
  data.stencilWrite = material.stencilWrite; data.stencilFunc = material.stencilFunc;
356
356
  data.stencilFail = material.stencilFail; data.stencilZFail = material.stencilZFail; data.stencilZPass = material.stencilZPass;
357
357
  data.stencilFuncMask = material.stencilFuncMask; data.stencilWriteMask = material.stencilWriteMask;
358
- data.side = material.side;
358
+ data.side = material.side; data.alphaToCoverage = material.alphaToCoverage;
359
359
 
360
360
  needsUpdate = true;
361
361
 
@@ -31,6 +31,9 @@ class RenderContext {
31
31
  this.activeCubeFace = 0;
32
32
  this.sampleCount = 1;
33
33
 
34
+ this.width = 0;
35
+ this.height = 0;
36
+
34
37
  }
35
38
 
36
39
  }
@@ -12,7 +12,32 @@ class RenderContexts {
12
12
  get( scene, camera, renderTarget = null ) {
13
13
 
14
14
  const chainKey = [ scene, camera ];
15
- const attachmentState = renderTarget === null ? 'default' : `${renderTarget.texture.format}:${renderTarget.samples}:${renderTarget.depthBuffer}:${renderTarget.stencilBuffer}`;
15
+
16
+ let attachmentState;
17
+
18
+ if ( renderTarget === null ) {
19
+
20
+ attachmentState = 'default';
21
+
22
+ } else {
23
+
24
+ let format, count;
25
+
26
+ if ( renderTarget.isWebGLMultipleRenderTargets ) {
27
+
28
+ format = renderTarget.texture[ 0 ].format;
29
+ count = renderTarget.texture.length;
30
+
31
+ } else {
32
+
33
+ format = renderTarget.texture.format;
34
+ count = 1;
35
+
36
+ }
37
+
38
+ attachmentState = `${count}:${format}:${renderTarget.samples}:${renderTarget.depthBuffer}:${renderTarget.stencilBuffer}`;
39
+
40
+ }
16
41
 
17
42
  const chainMap = this.getChainMap( attachmentState );
18
43
 
@@ -1,4 +1,4 @@
1
- import { lights } from '../../nodes/Nodes.js';
1
+ import { LightsNode } from '../../nodes/Nodes.js';
2
2
 
3
3
  function painterSortStable( a, b ) {
4
4
 
@@ -58,12 +58,14 @@ class RenderList {
58
58
  this.opaque = [];
59
59
  this.transparent = [];
60
60
 
61
- this.lightsNode = lights( [] );
61
+ this.lightsNode = new LightsNode( [] );
62
62
  this.lightsArray = [];
63
63
 
64
+ this.occlusionQueryCount = 0;
65
+
64
66
  }
65
67
 
66
- init() {
68
+ begin() {
67
69
 
68
70
  this.renderItemsIndex = 0;
69
71
 
@@ -71,6 +73,8 @@ class RenderList {
71
73
  this.transparent.length = 0;
72
74
  this.lightsArray.length = 0;
73
75
 
76
+ this.occlusionQueryCount = 0;
77
+
74
78
  return this;
75
79
 
76
80
  }
@@ -117,6 +121,8 @@ class RenderList {
117
121
 
118
122
  const renderItem = this.getNextRenderItem( object, geometry, material, groupOrder, z, group );
119
123
 
124
+ if ( object.occlusionTest === true ) this.occlusionQueryCount ++;
125
+
120
126
  ( material.transparent === true ? this.transparent : this.opaque ).push( renderItem );
121
127
 
122
128
  }
@@ -166,7 +172,9 @@ class RenderList {
166
172
  renderItem.object = null;
167
173
  renderItem.geometry = null;
168
174
  renderItem.material = null;
169
- renderItem.program = null;
175
+ renderItem.groupOrder = null;
176
+ renderItem.renderOrder = null;
177
+ renderItem.z = null;
170
178
  renderItem.group = null;
171
179
 
172
180
  }
@@ -18,16 +18,21 @@ export default class RenderObject {
18
18
  this.context = renderContext;
19
19
 
20
20
  this.geometry = object.geometry;
21
+ this.version = material.version;
21
22
 
22
23
  this.attributes = null;
23
24
  this.pipeline = null;
24
25
  this.vertexBuffers = null;
25
26
 
26
- this._materialVersion = - 1;
27
- this._materialCacheKey = '';
27
+ this.initialCacheKey = this.getCacheKey();
28
+
29
+ this._nodeBuilderState = null;
30
+ this._bindings = null;
28
31
 
29
32
  this.onDispose = null;
30
33
 
34
+ this.isRenderObject = true;
35
+
31
36
  this.onMaterialDispose = () => {
32
37
 
33
38
  this.dispose();
@@ -38,15 +43,15 @@ export default class RenderObject {
38
43
 
39
44
  }
40
45
 
41
- getNodeBuilder() {
46
+ getNodeBuilderState() {
42
47
 
43
- return this._nodes.getForRender( this );
48
+ return this._nodeBuilderState || ( this._nodeBuilderState = this._nodes.getForRender( this ) );
44
49
 
45
50
  }
46
51
 
47
52
  getBindings() {
48
53
 
49
- return this.getNodeBuilder().getBindings();
54
+ return this._bindings || ( this._bindings = this.getNodeBuilderState().createBindings() );
50
55
 
51
56
  }
52
57
 
@@ -66,7 +71,7 @@ export default class RenderObject {
66
71
 
67
72
  if ( this.attributes !== null ) return this.attributes;
68
73
 
69
- const nodeAttributes = this.getNodeBuilder().getAttributesArray();
74
+ const nodeAttributes = this.getNodeBuilderState().nodeAttributes;
70
75
  const geometry = this.geometry;
71
76
 
72
77
  const attributes = [];
@@ -98,23 +103,46 @@ export default class RenderObject {
98
103
 
99
104
  }
100
105
 
101
- getCacheKey() {
106
+ getMaterialCacheKey() {
107
+
108
+ const material = this.material;
109
+
110
+ let cacheKey = material.customProgramCacheKey();
111
+
112
+ for ( const property in material ) {
113
+
114
+ if ( /^(is[A-Z])|^(visible|version|uuid|name|opacity|userData)$/.test( property ) ) continue;
115
+
116
+ let value = material[ property ];
117
+
118
+ if ( value !== null ) {
102
119
 
103
- const { material, scene, lightsNode } = this;
120
+ const type = typeof value;
104
121
 
105
- if ( material.version !== this._materialVersion ) {
122
+ if ( type === 'number' ) value = value !== 0 ? '1' : '0'; // Convert to on/off, important for clearcoat, transmission, etc
123
+ else if ( type === 'object' ) value = '{}';
106
124
 
107
- this._materialVersion = material.version;
108
- this._materialCacheKey = material.customProgramCacheKey();
125
+ }
126
+
127
+ cacheKey += /*property + ':' +*/ value + ',';
109
128
 
110
129
  }
111
130
 
112
- const cacheKey = [];
131
+ return cacheKey;
132
+
133
+ }
134
+
135
+ getNodesCacheKey() {
136
+
137
+ // Environment Nodes Cache Key
113
138
 
114
- cacheKey.push( 'material:' + this._materialCacheKey );
115
- cacheKey.push( 'nodes:' + this._nodes.getCacheKey( scene, lightsNode ) );
139
+ return this._nodes.getCacheKey( this.scene, this.lightsNode );
140
+
141
+ }
142
+
143
+ getCacheKey() {
116
144
 
117
- return '{' + cacheKey.join( ',' ) + '}';
145
+ return `{material:${ this.getMaterialCacheKey() },nodes:${ this.getNodesCacheKey()}`;
118
146
 
119
147
  }
120
148
 
@@ -1,4 +1,3 @@
1
- import DataMap from './DataMap.js';
2
1
  import ChainMap from './ChainMap.js';
3
2
  import RenderObject from './RenderObject.js';
4
3
 
@@ -14,7 +13,6 @@ class RenderObjects {
14
13
  this.info = info;
15
14
 
16
15
  this.chainMaps = {};
17
- this.dataMap = new DataMap();
18
16
 
19
17
  }
20
18
 
@@ -33,14 +31,17 @@ class RenderObjects {
33
31
 
34
32
  } else {
35
33
 
36
- const data = this.dataMap.get( renderObject );
37
- const cacheKey = renderObject.getCacheKey();
34
+ if ( renderObject.version !== material.version ) {
38
35
 
39
- if ( data.cacheKey !== cacheKey ) {
36
+ renderObject.version = material.version;
40
37
 
41
- renderObject.dispose();
38
+ if ( renderObject.initialCacheKey !== renderObject.getCacheKey() ) {
42
39
 
43
- renderObject = this.get( object, material, scene, camera, lightsNode, renderContext, passId );
40
+ renderObject.dispose();
41
+
42
+ renderObject = this.get( object, material, scene, camera, lightsNode, renderContext, passId );
43
+
44
+ }
44
45
 
45
46
  }
46
47
 
@@ -59,24 +60,17 @@ class RenderObjects {
59
60
  dispose() {
60
61
 
61
62
  this.chainMaps = {};
62
- this.dataMap = new DataMap();
63
63
 
64
64
  }
65
65
 
66
66
  createRenderObject( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext, passId ) {
67
67
 
68
68
  const chainMap = this.getChainMap( passId );
69
- const dataMap = this.dataMap;
70
69
 
71
70
  const renderObject = new RenderObject( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext );
72
71
 
73
- const data = dataMap.get( renderObject );
74
- data.cacheKey = renderObject.getCacheKey();
75
-
76
72
  renderObject.onDispose = () => {
77
73
 
78
- dataMap.delete( renderObject );
79
-
80
74
  this.pipelines.delete( renderObject );
81
75
  this.bindings.delete( renderObject );
82
76
  this.nodes.delete( renderObject );